Skip to content

Rendering System

Core rendering logic and material system.

Renderer

Main renderer class managing the rendering pipeline.

cpp
class Renderer {
public:
    Renderer(int width, int height);
    ~Renderer();

    void set_scene(const Scene& scene);
    void set_camera(const Camera& camera);
    void set_mode(RenderMode mode);
    void set_samples(int samples);
    void set_sort_rays(bool sort);

    void render();
    void save_ppm(const char* filename);

private:
    vec3* d_frame_buffer_;
    curandState* d_rand_states_;
    // ...
};

RenderMode Enum

cpp
enum class RenderMode {
    Phong,        // Blinn-Phong shading
    PathTrace     // Monte Carlo path tracing
};

Material

Material system with presets.

cpp
struct Material {
    vec3 albedo;          // Base color
    vec3 emissive;        // Emission color
    float metallic;       // Metalness [0, 1]
    float roughness;      // Roughness [0, 1]
    float reflectivity;   // Specular intensity

    // Presets
    static Material matte(const vec3& color);
    static Material plastic(const vec3& color);
    static Material metal(const vec3& color, float roughness);
    static Material mirror();
};

Camera

Camera with configurable view parameters.

cpp
class Camera {
public:
    Camera(
        vec3 lookfrom,    // Camera position
        vec3 lookat,      // Look-at point
        vec3 vup,         // Up vector
        float fov,        // Vertical FOV (degrees)
        float aspect      // Aspect ratio
    );

    __device__ ray get_ray(float u, float v, curandState* state = nullptr) const;

private:
    vec3 origin_;
    vec3 lower_left_corner_;
    vec3 horizontal_;
    vec3 vertical_;
};

Tone Mapping

Output processing functions.

cpp
// Reinhard tone mapping
__device__ vec3 reinhard(const vec3& color);

// ACES filmic tone mapping
__device__ vec3 aces_tone_mapping(const vec3& color);

// Gamma correction
__device__ vec3 gamma_correct(const vec3& color, float gamma = 2.2f);

Phong Shading

Blinn-Phong illumination model.

cpp
__device__ vec3 phong_shade(
    const HitRecord& hit,
    const Material& material,
    const Scene& scene,
    const vec3& view_dir
);

Components:

  • Ambient: $k_a \cdot color$
  • Diffuse: $k_d \cdot color \cdot (N \cdot L)$
  • Specular: $k_s \cdot (N \cdot H)^{shininess}$

Technical Whitepaper · Built with VitePress