diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2015-02-27 16:05:12 +0300 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2015-02-27 16:11:26 +0300 |
commit | 55e7d726c4bbe3a27a0ad7ccd0d88de19e8e10bf (patch) | |
tree | 10873761addc63c79bfc7247ba9659604190b772 /source/blender/gpu/intern/gpu_compositing.c | |
parent | d7a877b69ca8d2cc6c5de0691d7bdf899af165ba (diff) |
Make some adjustments to the units for viewport camera dof.
This is still not so correct, to make it work we really have to do a
blurring pass based on the real coc (currently we are just blending 3
levels of blur)
Diffstat (limited to 'source/blender/gpu/intern/gpu_compositing.c')
-rw-r--r-- | source/blender/gpu/intern/gpu_compositing.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/source/blender/gpu/intern/gpu_compositing.c b/source/blender/gpu/intern/gpu_compositing.c index 89b8ba2e681..f6bb54192cc 100644 --- a/source/blender/gpu/intern/gpu_compositing.c +++ b/source/blender/gpu/intern/gpu_compositing.c @@ -712,11 +712,15 @@ bool GPU_fx_do_composite_pass(GPUFX *fx, float projmat[4][4], bool is_persp, str GPUShader *dof_shader_pass1, *dof_shader_pass2, *dof_shader_pass3, *dof_shader_pass4, *dof_shader_pass5; float dof_params[4]; float scale = scene->unit.system ? scene->unit.scale_length : 1.0f; + /* this is factor that converts to the scene scale. focal length and sensor are expressed in mm + * unit.scale_length is how many meters per blender unit we have. We want to convert to blender units though + * because the shader reads coordinates in world space, which is in blender units. */ float scale_camera = 0.001f / scale; - float aperture = 2.0f * scale_camera * fx_dof->focal_length / fx_dof->fstop; + /* we want radius here for the aperture number */ + float aperture = 0.5f * scale_camera * fx_dof->focal_length / fx_dof->fstop; - dof_params[0] = aperture * fabsf(scale_camera * fx_dof->focal_length / (fx_dof->focus_distance - scale_camera * fx_dof->focal_length)); - dof_params[1] = fx_dof->focus_distance; + dof_params[0] = aperture * fabs(scale_camera * fx_dof->focal_length / ((fx_dof->focus_distance / scale) - scale_camera * fx_dof->focal_length)); + dof_params[1] = fx_dof->focus_distance / scale; dof_params[2] = fx->gbuffer_dim[0] / (scale_camera * fx_dof->sensor); dof_params[3] = 0.0f; |