Skip to content

渲染系统

渲染核心逻辑和材质系统。

Renderer

主渲染器类。

cpp
class Renderer {
public:
    Renderer(int width, int height);
    void set_scene(const Scene& scene);
    void set_mode(Mode mode);
    void set_samples(int samples);
    void render();
    void save_ppm(const char* filename);
    Metrics get_metrics() const;

private:
    int width_, height_;
    int samples_;
    Mode mode_;
    Scene scene_;
    float* output_buffer_;
};

Render Mode

cpp
enum class Mode {
    Phong,        // Blinn-Phong 着色
    PathTrace     // 路径追踪
};

Material

材质基类。

cpp
class Material {
public:
    __device__ virtual vec3 emitted() const;
    __device__ virtual vec3 sample(curandState* state, const HitRecord& rec, vec3& wi, float& pdf) const;
    __device__ virtual vec3 evaluate(const HitRecord& rec, const vec3& wi, const vec3& wo) const;
};

// 预设材质
class Lambertian : public Material;
class Metal : public Material;
class Mirror : public Material;
class Plastic : public Material;

Camera

相机模型。

cpp
class Camera {
public:
    Camera(vec3 lookfrom, vec3 lookat, vec3 vup, float fov, float aspect);

    __device__ ray get_ray(float u, float v) const;

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

Tone Mapping

色调映射算子。

cpp
__device__ vec3 reinhard_tone_mapping(vec3 color);
__device__ vec3 aces_filmic_tone_mapping(vec3 color);

Technical Whitepaper · Built with VitePress