TRay for "yet another Ray Tracer".
Served as my bachelor's undergraduate graduation project, now as a playground for leaning rendering.
TRay is OK with clang 15.0.7. Some builtin function may fail MSVC.
cd build
and build ..
should be ok. The required libs should be libglfw.a only, for supporting ImGUI and some other features based on OpenGL.
I dislike build systems, so any related problems please work it out by yourself. I am trying to make it OK on most platforms, by writing (for me) most portable codes.
+---.vscode
+---apps
| +---sample_images
| +---test
| | \---bin
| \---TRay
| \---bin
+---build
+---extern
| +---file_dialog
| +---glad
| +---GLFW
| +---ImGui
| +---KHR
| \---nlohmann
+---include
| +---accelerators
| +---cameras
| +---core
| +---filters
| +---gui
| +---integrators
| +---lights
| +---loaders
| +---materials
| +---samplers
| +---shapes
| \---textures
+---lib
\---src
+---accelerators
+---cameras
+---core
+---filters
+---gui
+---integrators
+---lights
+---loaders
+---materials
+---samplers
\---shapes
- Scene Description File in json with nlohman json
- Image Output with stb_image
- Basic Framework
- Image Preview
- Render Control
- Start/Pause Rendering
- Scene Description File I/O
- Scene File Load/Reload
- File Dialog with tiny file dialogs
Obj-based scene file formats. Class-based loaders, each class handles its own json.
API
- Geometry, Transformation
- Coordinate System
- Vector
- Point
- Normal
- Ray
- Bounding Box
- Transformation
- Applying Transformation
- Animating Transformation
- Interaction
- Shape
- Interface
- Sphere
- Triangle Meshes with tiny_obj_loader
- Primitive (Shape and shading info), Acceleration
- Interface
- Primitives
- Geometric Primitive
- Transformed Primitive
- ...
- Aggregates
- Plain linear structure
- BVH
- ...
- Color, Radiometry
- Interface
- Color Representation
- RGB Tuple
- XYZ
- ...
- Camera
- Interface
- Camera Model
- Cameras
- Perspective Camera with Thin Lens
- Environment Camera
- Realistic Camera
- ...
- Sampling
- Interfaces
- Samplers
- Stratified
- Halton
- (0, 2)-Sequence
- Maximized Minimal Distance
- Sobol'
- Cascaded Sobol' Sampling
- MatBuilder
- Film and Filter
- JPEG and uint_8 Output Support
- Reflection, Material
- Interface
- Reflections
- Specular
- Lambertian
- Microfacet Models
- Oren–Nayar Diffuse Reflection
- ...
- BSDF
- Texture
- Interface
- Textures
- Checkerboard
- ...
- Noise
- Light
- Interface
- Light Sources
- Distant (Directional) Light
- Area Light
- Infinite Area Light
- Point Light
- ...
- Integrator
- Whitted
- Direct Lighting
- Basic Path Tracing
- ...
- System
- Parallelism
- Statistics (Counter only)
- Memory Pool (This?)
- Better Scene Format and Loader
- API
- Better UI
https://www.pbr-book.org/3ed-2018/Utilities/Parallelism#ParallelForLoops
Design: Film + Filter = Sensor?
Framework: Everything on a rooted obj-tree?
- File name: KeyClass, or keyFunction.
- Class and type: BigCamel.
- Function: aloneFunction, memberFunction, parseHtml, checkId.
- Variable: local_var, global_var, m_private_var, public_var.
- Const or macro: kConstValue, SOME_MACRO.