渲染系统
渲染核心逻辑和材质系统。
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);