Blender  V3.3
Macros | Functions
eevee_depth_of_field.c File Reference
#include "DRW_render.h"
#include "DNA_camera_types.h"
#include "DNA_screen_types.h"
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "BKE_camera.h"
#include "BLI_string_utils.h"
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
#include "GPU_framebuffer.h"
#include "GPU_texture.h"
#include "eevee_private.h"

Go to the source code of this file.

Macros

#define CAMERA_JITTER_RING_DENSITY   6
 
#define WITH_FILTERING   (GPU_SAMPLER_MIPMAP | GPU_SAMPLER_FILTER)
 
#define NO_FILTERING   GPU_SAMPLER_MIPMAP
 
#define COLOR_FORMAT   fx->dof_color_format
 
#define FG_TILE_FORMAT   GPU_RGBA16F
 
#define BG_TILE_FORMAT   GPU_R11F_G11F_B10F
 

Functions

static float coc_radius_from_camera_depth (bool is_ortho, EEVEE_EffectsInfo *fx, float camera_depth)
 
static float polygon_sides_length (float sides_count)
 
static float circle_to_polygon_radius (float sides_count, float theta)
 
static float circle_to_polygon_angle (float sides_count, float theta)
 
static int dof_jitter_total_sample_count (int ring_density, int ring_count)
 
bool EEVEE_depth_of_field_jitter_get (EEVEE_EffectsInfo *fx, float r_jitter[2], float *r_focus_distance)
 
int EEVEE_depth_of_field_sample_count_get (EEVEE_EffectsInfo *effects, int sample_count, int *r_ring_count)
 
int EEVEE_depth_of_field_init (EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, Object *camera)
 
static void dof_bokeh_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
static void dof_setup_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
static void dof_flatten_tiles_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
static void dof_dilate_tiles_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
static void dof_dilate_tiles_pass_draw (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
static void dof_reduce_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_TextureList *txl, EEVEE_EffectsInfo *fx)
 
static void dof_gather_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_TextureList *txl, EEVEE_EffectsInfo *fx)
 
static void dof_filter_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
static void dof_scatter_pass_init (EEVEE_FramebufferList *fbl, EEVEE_PassList *psl, EEVEE_TextureList *txl, EEVEE_EffectsInfo *fx)
 
static void dof_recombine_pass_init (EEVEE_FramebufferList *UNUSED(fbl), EEVEE_PassList *psl, EEVEE_EffectsInfo *fx)
 
void EEVEE_depth_of_field_cache_init (EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
 
static void dof_recursive_reduce (void *vedata, int UNUSED(level))
 
void EEVEE_depth_of_field_draw (EEVEE_Data *vedata)
 

Detailed Description

Depth of field post process effect.

There are 2 methods to achieve this effect.

Definition in file eevee_depth_of_field.c.

Macro Definition Documentation

◆ BG_TILE_FORMAT

#define BG_TILE_FORMAT   GPU_R11F_G11F_B10F

Definition at line 336 of file eevee_depth_of_field.c.

◆ CAMERA_JITTER_RING_DENSITY

#define CAMERA_JITTER_RING_DENSITY   6

Definition at line 35 of file eevee_depth_of_field.c.

◆ COLOR_FORMAT

#define COLOR_FORMAT   fx->dof_color_format

Definition at line 334 of file eevee_depth_of_field.c.

◆ FG_TILE_FORMAT

#define FG_TILE_FORMAT   GPU_RGBA16F

Definition at line 335 of file eevee_depth_of_field.c.

◆ NO_FILTERING

#define NO_FILTERING   GPU_SAMPLER_MIPMAP

Definition at line 333 of file eevee_depth_of_field.c.

◆ WITH_FILTERING

#define WITH_FILTERING   (GPU_SAMPLER_MIPMAP | GPU_SAMPLER_FILTER)

Definition at line 332 of file eevee_depth_of_field.c.

Function Documentation

◆ circle_to_polygon_angle()

static float circle_to_polygon_angle ( float  sides_count,
float  theta 
)
static

◆ circle_to_polygon_radius()

static float circle_to_polygon_radius ( float  sides_count,
float  theta 
)
static

Definition at line 57 of file eevee_depth_of_field.c.

References cosf, floorf, and M_PI.

Referenced by circle_to_polygon_angle(), and EEVEE_depth_of_field_jitter_get().

◆ coc_radius_from_camera_depth()

static float coc_radius_from_camera_depth ( bool  is_ortho,
EEVEE_EffectsInfo fx,
float  camera_depth 
)
static

Definition at line 37 of file eevee_depth_of_field.c.

References EEVEE_EffectsInfo::dof_coc_params.

Referenced by EEVEE_depth_of_field_init().

◆ dof_bokeh_pass_init()

static void dof_bokeh_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_dilate_tiles_pass_draw()

static void dof_dilate_tiles_pass_draw ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_dilate_tiles_pass_init()

static void dof_dilate_tiles_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_filter_pass_init()

static void dof_filter_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_flatten_tiles_pass_init()

static void dof_flatten_tiles_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_gather_pass_init()

static void dof_gather_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_TextureList txl,
EEVEE_EffectsInfo fx 
)
static

Do the gather convolution. For each pixels we gather multiple pixels in its neighborhood depending on the min & max CoC tiles.

Definition at line 651 of file eevee_depth_of_field.c.

References COLOR_FORMAT, divide_ceil_u(), EEVEE_EffectsInfo::dof_bg_color_tx, EEVEE_EffectsInfo::dof_bg_occlusion_tx, EEVEE_EffectsInfo::dof_bg_weight_tx, EEVEE_EffectsInfo::dof_bokeh_aniso, EEVEE_EffectsInfo::dof_bokeh_gather_lut_tx, EEVEE_EffectsInfo::dof_coc_dilated_tiles_bg_tx, EEVEE_EffectsInfo::dof_coc_dilated_tiles_fg_tx, EEVEE_EffectsInfo::dof_fg_color_tx, EEVEE_EffectsInfo::dof_fg_holefill_color_tx, EEVEE_EffectsInfo::dof_fg_holefill_weight_tx, EEVEE_EffectsInfo::dof_fg_occlusion_tx, EEVEE_EffectsInfo::dof_fg_weight_tx, DOF_GATHER_BACKGROUND, EEVEE_PassList::dof_gather_bg, EEVEE_FramebufferList::dof_gather_bg_fb, EEVEE_PassList::dof_gather_fg, EEVEE_FramebufferList::dof_gather_fg_fb, EEVEE_PassList::dof_gather_fg_holefill, EEVEE_FramebufferList::dof_gather_fg_holefill_fb, DOF_GATHER_FOREGROUND, DOF_GATHER_HOLEFILL, EEVEE_EffectsInfo::dof_half_res_coc_tx, EEVEE_EffectsInfo::dof_half_res_color_tx, EEVEE_TextureList::dof_reduced_coc, EEVEE_TextureList::dof_reduced_color, DRW_PASS_CREATE, DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_uniform_texture(), DRW_shgroup_uniform_texture_ref(), DRW_shgroup_uniform_texture_ref_ex(), DRW_shgroup_uniform_vec2_copy(), DRW_STATE_WRITE_COLOR, DRW_texture_pool_query_2d(), DRW_viewport_size_get(), EEVEE_depth_of_field_init(), EEVEE_materials_get_util_tex(), EEVEE_shaders_depth_of_field_gather_get(), float(), GPU_R16F, GPU_texture_get_mipmap_size(), negate_v2(), NO_FILTERING, NULL, sh, UNPACK2, and WITH_FILTERING.

Referenced by EEVEE_depth_of_field_cache_init().

◆ dof_jitter_total_sample_count()

static int dof_jitter_total_sample_count ( int  ring_density,
int  ring_count 
)
static

◆ dof_recombine_pass_init()

static void dof_recombine_pass_init ( EEVEE_FramebufferList UNUSEDfbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_recursive_reduce()

static void dof_recursive_reduce ( void vedata,
int   UNUSEDlevel 
)
static

◆ dof_reduce_pass_init()

static void dof_reduce_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_TextureList txl,
EEVEE_EffectsInfo fx 
)
static

Create mipmapped color & COC textures for gather passes.

Definition at line 529 of file eevee_depth_of_field.c.

References COLOR_FORMAT, divide_ceil_u(), EEVEE_EffectsInfo::dof_bokeh_aniso, EEVEE_EffectsInfo::dof_denoise_factor, EEVEE_PassList::dof_downsample, EEVEE_FramebufferList::dof_downsample_fb, EEVEE_EffectsInfo::dof_downsample_tx, EEVEE_EffectsInfo::dof_fx_max_coc, DOF_GATHER_RING_COUNT, EEVEE_PassList::dof_reduce, EEVEE_PassList::dof_reduce_copy, EEVEE_FramebufferList::dof_reduce_copy_fb, EEVEE_FramebufferList::dof_reduce_fb, EEVEE_EffectsInfo::dof_reduce_input_coc_tx, EEVEE_EffectsInfo::dof_reduce_input_color_tx, EEVEE_EffectsInfo::dof_reduce_steps, EEVEE_TextureList::dof_reduced_coc, EEVEE_TextureList::dof_reduced_color, EEVEE_EffectsInfo::dof_scatter_coc_threshold, EEVEE_EffectsInfo::dof_scatter_color_threshold, EEVEE_EffectsInfo::dof_scatter_neighbor_max_color, EEVEE_EffectsInfo::dof_scatter_src_tx, DRW_PASS_CREATE, DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_uniform_float_copy(), DRW_shgroup_uniform_texture_ref_ex(), DRW_shgroup_uniform_vec2_copy(), DRW_STATE_WRITE_COLOR, DRW_TEXTURE_FREE_SAFE, DRW_texture_pool_query_2d(), DRW_viewport_size_get(), EEVEE_depth_of_field_init(), EEVEE_shaders_depth_of_field_downsample_get(), EEVEE_shaders_depth_of_field_reduce_get(), GPU_R11F_G11F_B10F, GPU_R16F, GPU_RGBA16F, GPU_texture_create_2d(), GPU_texture_width(), log2_ceil_u(), max_ii(), NO_FILTERING, NULL, sh, and UNPACK2.

Referenced by EEVEE_depth_of_field_cache_init().

◆ dof_scatter_pass_init()

static void dof_scatter_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_TextureList txl,
EEVEE_EffectsInfo fx 
)
static

◆ dof_setup_pass_init()

static void dof_setup_pass_init ( EEVEE_FramebufferList fbl,
EEVEE_PassList psl,
EEVEE_EffectsInfo fx 
)
static

◆ EEVEE_depth_of_field_cache_init()

void EEVEE_depth_of_field_cache_init ( EEVEE_ViewLayerData UNUSEDsldata,
EEVEE_Data vedata 
)

◆ EEVEE_depth_of_field_draw()

void EEVEE_depth_of_field_draw ( EEVEE_Data vedata)

Definition at line 950 of file eevee_depth_of_field.c.

References EEVEE_PassList::dof_bokeh, EEVEE_FramebufferList::dof_bokeh_fb, EEVEE_EffectsInfo::dof_bokeh_gather_lut_tx, dof_dilate_tiles_pass_draw(), EEVEE_PassList::dof_downsample, EEVEE_FramebufferList::dof_downsample_fb, EEVEE_PassList::dof_filter, EEVEE_FramebufferList::dof_filter_bg_fb, EEVEE_FramebufferList::dof_filter_fg_fb, EEVEE_PassList::dof_flatten_tiles, EEVEE_FramebufferList::dof_flatten_tiles_fb, EEVEE_PassList::dof_gather_bg, EEVEE_FramebufferList::dof_gather_bg_fb, EEVEE_PassList::dof_gather_fg, EEVEE_FramebufferList::dof_gather_fg_fb, EEVEE_PassList::dof_gather_fg_holefill, EEVEE_FramebufferList::dof_gather_fg_holefill_fb, EEVEE_EffectsInfo::dof_half_res_coc_tx, EEVEE_EffectsInfo::dof_half_res_color_tx, dof_recursive_reduce(), EEVEE_PassList::dof_reduce_copy, EEVEE_FramebufferList::dof_reduce_copy_fb, EEVEE_FramebufferList::dof_reduce_fb, EEVEE_EffectsInfo::dof_reduce_input_coc_tx, EEVEE_EffectsInfo::dof_reduce_input_color_tx, EEVEE_EffectsInfo::dof_reduce_steps, EEVEE_PassList::dof_resolve, EEVEE_PassList::dof_scatter_bg, EEVEE_FramebufferList::dof_scatter_bg_fb, EEVEE_PassList::dof_scatter_fg, EEVEE_FramebufferList::dof_scatter_fg_fb, EEVEE_PassList::dof_setup, EEVEE_FramebufferList::dof_setup_fb, DRW_draw_pass(), DRW_stats_group_end(), DRW_stats_group_start(), EFFECT_DOF, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_Data::fbl, GPU_framebuffer_bind(), GPU_framebuffer_recursive_downsample(), NULL, EEVEE_Data::psl, EEVEE_Data::stl, SWAP_BUFFERS, EEVEE_EffectsInfo::target_buffer, and EEVEE_Data::txl.

Referenced by EEVEE_draw_effects().

◆ EEVEE_depth_of_field_init()

int EEVEE_depth_of_field_init ( EEVEE_ViewLayerData UNUSEDsldata,
EEVEE_Data vedata,
Object camera 
)

Definition at line 180 of file eevee_depth_of_field.c.

References CameraDOFSettings::aperture_blades, CameraDOFSettings::aperture_fstop, CameraDOFSettings::aperture_ratio, CameraDOFSettings::aperture_rotation, BKE_camera_object_dof_distance(), BKE_camera_sensor_size(), SceneEEVEE::bokeh_denoise_fac, SceneEEVEE::bokeh_max_size, SceneEEVEE::bokeh_neighbor_max, SceneEEVEE::bokeh_overblur, SceneEEVEE::bokeh_threshold, CAM_DOF_ENABLED, CAM_ORTHO, camera, clamp_f(), Camera::clip_end, Camera::clip_start, coc_radius_from_camera_depth(), copy_v2_v2(), DEG_get_evaluated_scene(), DRWContextState::depsgraph, Camera::dof, EEVEE_EffectsInfo::dof_bokeh_aniso, EEVEE_EffectsInfo::dof_bokeh_aniso_inv, EEVEE_EffectsInfo::dof_bokeh_blades, EEVEE_EffectsInfo::dof_bokeh_max_size, EEVEE_EffectsInfo::dof_bokeh_rotation, EEVEE_EffectsInfo::dof_coc_far_dist, EEVEE_EffectsInfo::dof_coc_near_dist, EEVEE_EffectsInfo::dof_coc_params, EEVEE_EffectsInfo::dof_denoise_factor, EEVEE_FramebufferList::dof_dilate_tiles_fb, EEVEE_FramebufferList::dof_flatten_tiles_fb, EEVEE_EffectsInfo::dof_fx_max_coc, EEVEE_FramebufferList::dof_gather_bg_fb, EEVEE_FramebufferList::dof_gather_fg_fb, EEVEE_EffectsInfo::dof_hq_slight_focus, EEVEE_EffectsInfo::dof_jitter_blades, EEVEE_EffectsInfo::dof_jitter_focus, EEVEE_EffectsInfo::dof_jitter_radius, EEVEE_EffectsInfo::dof_jitter_ring_count, EEVEE_FramebufferList::dof_reduce_copy_fb, EEVEE_FramebufferList::dof_reduce_fb, EEVEE_TextureList::dof_reduced_coc, EEVEE_TextureList::dof_reduced_color, EEVEE_FramebufferList::dof_scatter_bg_fb, EEVEE_EffectsInfo::dof_scatter_color_threshold, EEVEE_EffectsInfo::dof_scatter_neighbor_max_color, EEVEE_FramebufferList::dof_setup_fb, DRW_context_state_get(), DRW_TEXTURE_FREE_SAFE, DRW_viewport_size_get(), Scene::eevee, EEVEE_depth_of_field_sample_count_get(), EEVEE_temporal_sampling_sample_count_get(), EFFECT_DOF, EFFECT_POST_BUFFER, EEVEE_StorageList::effects, fabsf, EEVEE_Data::fbl, CameraDOFSettings::flag, SceneEEVEE::flag, if(), invert_v2(), Camera::lens, max_ff(), min_ff(), NULL, OB_CAMERA, Camera::ortho_scale, DRWContextState::rv3d, SCE_EEVEE_DOF_HQ_SLIGHT_FOCUS, SCE_EEVEE_DOF_JITTER, Camera::sensor_fit, Camera::sensor_x, Camera::sensor_y, sqrtf, EEVEE_Data::stl, EEVEE_Data::txl, Camera::type, and RegionView3D::viewcamtexcofac.

Referenced by dof_bokeh_pass_init(), dof_dilate_tiles_pass_init(), dof_flatten_tiles_pass_init(), dof_gather_pass_init(), dof_reduce_pass_init(), dof_setup_pass_init(), and EEVEE_effects_init().

◆ EEVEE_depth_of_field_jitter_get()

bool EEVEE_depth_of_field_jitter_get ( EEVEE_EffectsInfo fx,
float  r_jitter[2],
float r_focus_distance 
)

◆ EEVEE_depth_of_field_sample_count_get()

int EEVEE_depth_of_field_sample_count_get ( EEVEE_EffectsInfo effects,
int  sample_count,
int *  r_ring_count 
)

◆ polygon_sides_length()

static float polygon_sides_length ( float  sides_count)
static

Definition at line 50 of file eevee_depth_of_field.c.

References M_PI, and KDL::sin().

Referenced by circle_to_polygon_angle().