A simple, cross-platform ray tracing engine for 3D graphics rendering.

Cube Room (Reflection Version)

A real-life application: Office Rendering

A real-life application: Office Rendering (Top View)
The following build scripts and projects are available in this repository:
| Platform | Folder | Build tool |
|---|---|---|
| macOS (Intel) | build/mac-intel | GNU Make |
| macOS (Apple Silicon) | build/mac-m | GNU Make |
| macOS | projects/raygen.xcodeproj | Xcode |
| Linux | build/linux | GNU Make |
| Windows | projects/raygen-win32/raygen.sln | Visual Studio |
Example of using GNU Make on Linux and macOS platforms:
cd build/<platform>
make$ ./raygen <command> <sceneFile.json> [output_image] [-options]e.g.:
$ ./raygen render ../../resources/scenes/cubeRoom/cubeRoom.json -s 100 -enaa true| Option | Description |
|---|---|
| -r, --resolution | Specifies the resolution of the output image. |
| -s, --samples | Number of samples (rays from the camera). |
| -c, --cores, --threads | Number of threads used for parallel rendering. |
| -ds, --dofs, --dof-samples | Number of samples for depth of field calculation. |
| -enaa, --enable-antialias | Enables ray-sample-based anti-aliasing (default: on). |
| -encs, --enable-color-sampling | Enables color sampling from textures (default: on). |
| -enpp, --enable-postprocess | Enables post-processing effects like bloom and gamma correction. |
| -d, --shader | Specifies the shading system (see below for options). |
| --focus-obj | Automatically sets the camera to focus on a specified object (by name). |
| --dump | Dumps the scene definition. |
Shading system: (specified by -d or --shader argument)
| Value | Name | Description |
|---|---|---|
| 0 | Simple Shading | Basic shading using Lambertian reflectance (no lighting or texture sampling). |
| 1 | Ambient Occlusion | Renders ambient occlusion only. |
| 2 | Lambert Shading | Lambert shading with directional lighting and texture sampling. |
| 3 | Lambert Shading + AO | Lambert shading with directional lighting, texture sampling, and ambient occlusion. |
| 4 | (Reserved) | |
| 5 | BSDF | BSDF Shading with global illumination (default shading system). |
Shading system comparison:
| Value | Name | Directional Lighting | Indirect Lighting | Ambient Occlusion | Global Illumination | Transparency | Reflection/Refraction |
|---|---|---|---|---|---|---|---|
| 0 | Simple Shading | - | - | - | - | - | - |
| 1 | Ambient Occlusion | - | - | Yes | - | - | - |
| 2 | Lambert Shading | Yes | - | - | - | Yes | - |
| 3 | Lambert Shading + AO | Yes | - | Yes | - | Yes | - |
| 4 | (Reserved) | ||||||
| 5 | BSDF | Yes | Yes | Yes | Yes | Yes | Yes |
A RayGen scene is described using a JSON file structured as follows:
scene.json:
{
obj1: {
location: [x, y, z],
angle: [x, y, z],
scale: [x, y, z],
mesh: "path/to/mesh.mesh",
mat: {
color: [r, g, b] or "#d0d0d0",
tex: "path/to/texture.png",
glossy: 0.0 to 1.0,
roughness: 0.0 to 1.0,
transparency: 0.0 to 1.0,
refraction: 0.0 to 1.0,
...,
}
},
obj2: {
...
},
...
}Description:
location: Specifies the position of the object in 3D space.angle: Rotation of the object along the x, y, and z axes.scale: Scaling factors for the object along the x, y, and z axes.mesh: Path to the object's mesh file.mat: Material properties of the object:color: RGB color values or a hexadecimal color code (e.g., "#d0d0d0").tex: Path to the texture file.glossy: Glossiness level, ranging from 0 (no gloss) to 1 (fully glossy).roughness: Surface roughness, ranging from 0 (smooth) to 1 (rough).transparency: Transparency level, ranging from 0 (opaque) to 1 (fully transparent).refraction: Refraction index, ranging from 0 to 1.
RayGen supports the following mesh file formats:
- RayGen Original Binary Mesh Format: This format includes the mesh's data such as vertices, normals, texture coordinates, and more.
- .obj File Format: A widely-used 3D object file format. RayGen can read vertices, normals, faces, texture coordinates, and material information from .obj files.
- FBX File Format: Currently not supported but under development.
Several sample scenes for rendering can be found inside the resources/scenes folder:
- Cube Room - A well-known scene featuring two cubes, commonly used to benchmark ray-tracing engines.
- Sphere Array - A scene with five spheres demonstrating various material types.
- suzanne - The Suzanne model, used to showcase transparency and refraction materials.
The following modules are required to build this software and can be found in the /inc folder as git submodules:
- C++ Common Module (https://github.com/jingwood/cpp-common-class)
- C++ Graphics Module (https://github.com/jingwood/cpp-graphics-module)
Released under the MIT License.
Copyright © Jingwood, unvell Inc. All Rights Reserved.



