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}$