Add camera aperture / depth-of-field
This commit is contained in:
14
src/render.c
14
src/render.c
@@ -94,9 +94,19 @@ static int render_thread(void *arg)
|
||||
vec3_scale(camera->y_step, jitter.y));
|
||||
const vec3_t jittered_pix = vec3_add(pix, offset);
|
||||
|
||||
vec3_t source = camera->pos;
|
||||
if (camera->aperture != 0.0) {
|
||||
const vec3_t pos
|
||||
= vec3_scale(rng_xy(&slice->rng), camera->aperture);
|
||||
const vec3_t offset = vec3_add(
|
||||
vec3_scale(camera->u_hat, pos.x),
|
||||
vec3_scale(camera->v_hat, pos.y));
|
||||
source = vec3_add(source, offset);
|
||||
}
|
||||
|
||||
const ray_t ray = {
|
||||
.orig = camera->pos,
|
||||
.dir = vec3_unit(vec3_sub(jittered_pix, camera->pos)),
|
||||
.orig = source,
|
||||
.dir = vec3_unit(vec3_sub(jittered_pix, source)),
|
||||
};
|
||||
const vec3_t sample = trace(ray, slice->scene, &slice->rng);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user