This project renders images using Path-Tracing.
- Naive Lighting Strategy
- Netpbm Image Format
- Portable FloatMap (
*.pfm
)- HDR (no tonemapping, for editing afterwards)
- RGB32F
- Portable PixMap (
*.ppm
)- SDR (built-in exposure tonemap)
- RGB8
- Portable FloatMap (
- Ray-Marching
- Support for Bidirectional Scattering Distribution Functions
- Lambertian BRDF included
- Better camera system
- Optional camera mechanics simulation
- Lens dynamics, e.g. focal length, aperature, distortion
- Optional camera mechanics simulation
- Bidirectional Path-Tracing
- Optional, since it isn't good for all scenarios
- Bounding Volume Hierarchy (BVH)
- Will allow for rendering meshes
- CPU + Vulkan render device integration
- Vulkan only avaiable as a compile option for easier compilation for users who don't need Vulkan support
- Multiple Importance Sampling (MIS)
- Next Event Estimation (NEE)
- Spectral rendering?
- This repository isn't gonna be fit for scientific use for a long time
- Variable scenes without re-compiling
- Variable settings without re-compiling
This section is under construction
We are now using GLM (OpenGL Mathematics) which makes compiling a little bit more difficult. While custom vector math was fun and easy to compile since everything came with the repository, it wasn't very practical for development...
Right now the Vulkan version of the renderer utilizes the Vulkan SDK. It's not very easy to set up for cross-platform and having a compile option to enable/disable it for easier compilation is on the TODO.
This guide will not go over compiling with Vulkan, since it's kinda complicated at the moment. Expect that to change in the future.
If you want to bring your own compiler, first make sure you have GLM installed. Then, add the following files to your compiler's input:
[repository]/src/main.cpp
[repository]/src/image.cpp
[repository]/src/path-tracing.cpp
[repository]/src/rng.cpp
[repository]/src/scene.cpp
[repository]/src/sky.cpp
[repository]/src/trace.cpp
Finally, make sure you include [repository]/src/include
.
To compile this project on a Debian-based Linux system using GCC (GNU Compiler Collection), just make sure you have it installed. If you don't know if you have it, you can install it by running:
sudo apt install build-essential
If GCC is already installed, apt will either say you have the latest version or tell you an upgrade is available. Now, make sure you have GLM installed. If you don't know if you have it, you can install it by runnning:
sudo apt install libglm-dev
Once you have GLM, you can compile the project by running the build script:
build.sh
You should now be able to run the executable OpenPT
simply by using:
./OpenPT
To compile this project on a Windows system using Mingw-w64, just make sure you have it installed. If you don't have it, you can get it at https://www.mingw-w64.org/downloads/. Now, make sure you grab the latest release of GLM. If you don't have it, you can get it at https://github.com/g-truc/glm. Once you have downloaded the latest release of GLM, extract the archive and rename the folder it creates to glm
. You can now compile the project by running the build script:
build.bat
You should now be able to run the executable OpenPT.exe
from File Explorer, or simply by using:
OpenPT.exe
MacOS is not and will not be officially supported. You will just have to test bring your own compiler and test your luck. There is no official MacOS support because I (@Zi7ar21) do not have access to a Mac and have no interest in getting one because Apple's ecosystem is absolutely proprietary and cringe. Normally I would just disregard Mac support entirely but if you do have an issue running this then you can submit an issue and I might fix it.
At this time there isn't any command-line arguments. You can just run the executable (either OpenPT
or OpenPT.exe
) and it will render the scene.
./OpenPT
If the executable isn't already marked as an executable, run:
sudo chmod +x ./OpenPT
Double-click OpenPT.exe
in File Explorer, or run:
OpenPT.exe