Blender  V3.3
Classes | Functions | Variables
eevee_lightprobes.c File Reference
#include "DRW_render.h"
#include "BLI_rand.h"
#include "BLI_string_utils.h"
#include "BLI_utildefines.h"
#include "DNA_image_types.h"
#include "DNA_lightprobe_types.h"
#include "DNA_texture_types.h"
#include "DNA_view3d_types.h"
#include "DNA_world_types.h"
#include "BKE_collection.h"
#include "BKE_object.h"
#include "MEM_guardedalloc.h"
#include "GPU_capabilities.h"
#include "GPU_material.h"
#include "GPU_texture.h"
#include "GPU_uniform_buffer.h"
#include "DEG_depsgraph_query.h"
#include "eevee_lightcache.h"
#include "eevee_private.h"
#include "WM_api.h"
#include "WM_types.h"

Go to the source code of this file.

Classes

struct  EEVEE_BakeRenderData
 

Functions

bool EEVEE_lightprobes_obj_visibility_cb (bool vis_in, void *user_data)
 
static void planar_pool_ensure_alloc (EEVEE_Data *vedata, int num_planar_ref)
 
void EEVEE_lightprobes_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
void EEVEE_lightbake_cache_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, GPUTexture *rt_color, GPUTexture *rt_depth)
 
void EEVEE_lightprobes_cache_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
static bool eevee_lightprobes_culling_test (Object *ob)
 
void EEVEE_lightprobes_cache_add (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Object *ob)
 
void EEVEE_lightprobes_grid_data_from_object (Object *ob, EEVEE_LightGrid *egrid, int *offset)
 
void EEVEE_lightprobes_cube_data_from_object (Object *ob, EEVEE_LightProbe *eprobe)
 
void EEVEE_lightprobes_planar_data_from_object (Object *ob, EEVEE_PlanarReflection *eplanar, EEVEE_LightProbeVisTest *vis_test)
 
static void lightbake_planar_ensure_view (EEVEE_PlanarReflection *eplanar, const DRWView *main_view, DRWView **r_planar_view)
 
static void eevee_lightprobes_extract_from_cache (EEVEE_LightProbesInfo *pinfo, LightCache *lcache)
 
void EEVEE_lightprobes_cache_finish (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
void EEVEE_lightprobes_refresh_planar (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
void EEVEE_lightprobes_refresh (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 
void EEVEE_lightprobes_free (void)
 
Filtering
void EEVEE_lightbake_filter_glossy (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct GPUTexture *rt_color, struct GPUFrameBuffer *fb, int probe_idx, float intensity, int maxlevel, float filter_quality, float firefly_fac)
 
void EEVEE_lightbake_filter_diffuse (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct GPUTexture *rt_color, struct GPUFrameBuffer *fb, int grid_offset, float intensity)
 
void EEVEE_lightbake_filter_visibility (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct GPUTexture *UNUSED(rt_depth), struct GPUFrameBuffer *fb, int grid_offset, float clipsta, float clipend, float vis_range, float vis_blur, int vis_size)
 
static void downsample_planar (void *vedata, int level)
 
static void EEVEE_lightbake_filter_planar (EEVEE_Data *vedata)
 

Variables

struct {
   struct GPUTexture *   planar_pool_placeholder
 
   struct GPUTexture *   depth_placeholder
 
   struct GPUTexture *   depth_array_placeholder
 
   struct GPUVertFormat *   format_probe_display_planar
 
e_data = {NULL}
 

Rendering

typedef struct EEVEE_BakeRenderData EEVEE_BakeRenderData
 
static void render_cubemap (void(*callback)(int face, EEVEE_BakeRenderData *user_data), EEVEE_BakeRenderData *user_data, const float pos[3], float near, float far, bool do_culling)
 
static void render_reflections (void(*callback)(int face, EEVEE_BakeRenderData *user_data), EEVEE_BakeRenderData *user_data, EEVEE_PlanarReflection *planar_data, int ref_count)
 
static void lightbake_render_world_face (int face, EEVEE_BakeRenderData *user_data)
 
void EEVEE_lightbake_render_world (EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata, struct GPUFrameBuffer *face_fb[6])
 
static void lightbake_render_scene_face (int face, EEVEE_BakeRenderData *user_data)
 
void EEVEE_lightbake_render_scene (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, struct GPUFrameBuffer *face_fb[6], const float pos[3], float near_clip, float far_clip)
 
static void lightbake_render_scene_reflected (int layer, EEVEE_BakeRenderData *user_data)
 
static void eevee_lightbake_render_scene_to_planars (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
 

Typedef Documentation

◆ EEVEE_BakeRenderData

Function Documentation

◆ downsample_planar()

static void downsample_planar ( void vedata,
int  level 
)
static

◆ EEVEE_lightbake_cache_init()

void EEVEE_lightbake_cache_init ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
GPUTexture rt_color,
GPUTexture rt_depth 
)

Only initialize the passes useful for rendering the light cache.

Definition at line 190 of file eevee_lightprobes.c.

References EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_ubo, DRW_cache_fullscreen_quad_get(), DRW_PASS_CREATE, DRW_shgroup_call, DRW_shgroup_call_instances(), DRW_shgroup_create(), DRW_shgroup_uniform_block, DRW_shgroup_uniform_float(), DRW_shgroup_uniform_int(), DRW_shgroup_uniform_texture(), DRW_shgroup_uniform_texture_ref(), DRW_STATE_WRITE_COLOR, EEVEE_shaders_probe_filter_diffuse_sh_get(), EEVEE_shaders_probe_filter_glossy_sh_get(), EEVEE_shaders_probe_filter_visibility_sh_get(), EEVEE_shaders_probe_grid_fill_sh_get(), EEVEE_LightProbesInfo::far_clip, EEVEE_LightProbesInfo::firefly_fac, EEVEE_StorageList::g_data, GPUBatch, LightCache::grid_tx, EEVEE_LightProbesInfo::intensity_fac, EEVEE_LightProbesInfo::layer, EEVEE_PrivateData::light_cache, EEVEE_LightProbesInfo::lod_rt_max, EEVEE_LightProbesInfo::lodfactor, EEVEE_LightProbesInfo::near_clip, NULL, EEVEE_LightProbesInfo::padding_size, EEVEE_PassList::probe_diffuse_compute, EEVEE_PassList::probe_glossy_compute, EEVEE_PassList::probe_grid_fill, EEVEE_PassList::probe_visibility_compute, EEVEE_ViewLayerData::probes, EEVEE_Data::psl, EEVEE_ViewLayerData::renderpass_ubo, EEVEE_LightProbesInfo::roughness, EEVEE_LightProbesInfo::samples_len, EEVEE_LightProbesInfo::shres, EEVEE_Data::stl, LightCacheTexture::tex, EEVEE_LightProbesInfo::texel_size, EEVEE_LightProbesInfo::visibility_blur, and EEVEE_LightProbesInfo::visibility_range.

Referenced by eevee_lightbake_cache_create(), and EEVEE_lightbake_update_world_quick().

◆ EEVEE_lightbake_filter_diffuse()

void EEVEE_lightbake_filter_diffuse ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
struct GPUTexture rt_color,
struct GPUFrameBuffer fb,
int  grid_offset,
float  intensity 
)

◆ EEVEE_lightbake_filter_glossy()

void EEVEE_lightbake_filter_glossy ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
struct GPUTexture rt_color,
struct GPUFrameBuffer fb,
int  probe_idx,
float  intensity,
int  maxlevel,
float  filter_quality,
float  firefly_fac 
)

◆ EEVEE_lightbake_filter_planar()

static void EEVEE_lightbake_filter_planar ( EEVEE_Data vedata)
static

◆ EEVEE_lightbake_filter_visibility()

void EEVEE_lightbake_filter_visibility ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
struct GPUTexture UNUSEDrt_depth,
struct GPUFrameBuffer fb,
int  grid_offset,
float  clipsta,
float  clipend,
float  vis_range,
float  vis_blur,
int  vis_size 
)

◆ EEVEE_lightbake_render_scene()

void EEVEE_lightbake_render_scene ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
struct GPUFrameBuffer face_fb[6],
const float  pos[3],
float  near_clip,
float  far_clip 
)

◆ eevee_lightbake_render_scene_to_planars()

static void eevee_lightbake_render_scene_to_planars ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)
static

◆ EEVEE_lightbake_render_world()

void EEVEE_lightbake_render_world ( EEVEE_ViewLayerData UNUSEDsldata,
EEVEE_Data vedata,
struct GPUFrameBuffer face_fb[6] 
)

◆ EEVEE_lightprobes_cache_add()

void EEVEE_lightprobes_cache_add ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata,
Object ob 
)

◆ EEVEE_lightprobes_cache_finish()

void EEVEE_lightprobes_cache_finish ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

Definition at line 674 of file eevee_lightprobes.c.

References BLI_assert, EEVEE_LightProbesInfo::cache_num_planar, EEVEE_ViewLayerData::common_data, LightCache::cube_len, DEG_get_evaluated_scene(), DEG_get_input_scene(), DRWContextState::depsgraph, EEVEE_LightProbesInfo::do_cube_update, EEVEE_LightProbesInfo::do_grid_update, DRW_context_state_get(), DRW_PASS_CREATE, DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_uniform_float(), DRW_shgroup_uniform_texture_ref(), DRW_state_is_image_render(), DRW_state_is_opengl_render(), DRW_STATE_WRITE_COLOR, DRW_TEXTURE_FREE_SAFE, Scene::eevee, eevee_lightprobes_extract_from_cache(), EEVEE_shaders_probe_planar_downsample_sh_get(), DRWContextState::evil_C, LightCache::flag, SceneEEVEE::flag, float(), EEVEE_StorageList::g_data, SceneEEVEE::gi_irradiance_smoothing, GPU_uniformbuf_update(), EEVEE_LightProbesInfo::grid_data, LightCache::grid_len, EEVEE_ViewLayerData::grid_ubo, EEVEE_PrivateData::light_cache, SceneEEVEE::light_cache_data, LIGHTCACHE_UPDATE_AUTO, LIGHTCACHE_UPDATE_CUBE, LIGHTCACHE_UPDATE_GRID, max_ii(), LightCache::mips_len, NC_LIGHTPROBE, NULL, EEVEE_LightProbesInfo::num_planar, EEVEE_TextureList::planar_depth, EEVEE_TextureList::planar_pool, planar_pool_ensure_alloc(), EEVEE_CommonUniformBuffer::prb_irradiance_smooth, EEVEE_CommonUniformBuffer::prb_irradiance_vis_size, EEVEE_CommonUniformBuffer::prb_lod_cube_max, EEVEE_CommonUniformBuffer::prb_num_planar, EEVEE_CommonUniformBuffer::prb_num_render_cube, EEVEE_CommonUniformBuffer::prb_num_render_grid, EEVEE_LightProbesInfo::probe_data, EEVEE_PassList::probe_planar_downsample_ps, EEVEE_ViewLayerData::probe_ubo, EEVEE_ViewLayerData::probes, EEVEE_Data::psl, SCE_EEVEE_GI_AUTOBAKE, DRWContextState::scene, square_f(), EEVEE_CommonUniformBuffer::ssr_firefly_fac, EEVEE_Data::stl, EEVEE_Data::txl, LightCache::vis_res, and WM_event_add_notifier().

Referenced by eevee_cache_finish(), eevee_lightbake_cache_create(), and eevee_render_to_image().

◆ EEVEE_lightprobes_cache_init()

void EEVEE_lightprobes_cache_init ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

Definition at line 275 of file eevee_lightprobes.c.

References EEVEE_LightProbeVisTest::collection, EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_ubo, LightGridCache::corner, LightCache::cube_len, LightCache::cube_tx, DEG_get_evaluated_scene(), DRWContextState::depsgraph, EEVEE_LightProbesInfo::do_cube_update, EEVEE_LightProbesInfo::do_grid_update, DRW_cache_fullscreen_quad_get(), DRW_cache_quad_get(), DRW_context_state_get(), DRW_PASS_CREATE, DRW_shgroup_call, DRW_shgroup_call_buffer_instance(), DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_instance_format, DRW_shgroup_material_create(), DRW_shgroup_uniform_block, DRW_shgroup_uniform_block_ref, DRW_shgroup_uniform_float_copy(), DRW_shgroup_uniform_int(), DRW_shgroup_uniform_ivec3(), DRW_shgroup_uniform_texture_ref(), DRW_shgroup_uniform_vec3(), DRW_STATE_CULL_BACK, DRW_STATE_DEPTH_EQUAL, DRW_STATE_DEPTH_LESS_EQUAL, DRW_state_draw_support(), DRW_STATE_WRITE_COLOR, DRW_STATE_WRITE_DEPTH, DRW_viewport_screenvecs_get(), e_data, Scene::eevee, EEVEE_lookdev_cache_init(), EEVEE_material_get(), EEVEE_shaders_probe_cube_display_sh_get(), EEVEE_shaders_probe_grid_display_sh_get(), EEVEE_shaders_probe_planar_display_sh_get(), EEVEE_world_default_get(), SceneEEVEE::flag, EEVEE_StorageList::g_data, SceneEEVEE::gi_cubemap_draw_size, SceneEEVEE::gi_irradiance_draw_size, LightCache::grid_data, LightCache::grid_len, LightCache::grid_tx, EEVEE_ViewLayerData::grid_ubo, LightGridCache::increment_x, LightGridCache::increment_y, LightGridCache::increment_z, EEVEE_PrivateData::light_cache, EEVEE_ViewLayerData::light_ubo, LOOK_DEV_STUDIO_LIGHT_ENABLED, NULL, EEVEE_LightProbesInfo::num_planar, LightGridCache::offset, options, EEVEE_PrivateData::planar_display_shgrp, EEVEE_TextureList::planar_pool, EEVEE_ViewLayerData::planar_ubo, EEVEE_PassList::probe_background, EEVEE_PassList::probe_display, EEVEE_ViewLayerData::probe_ubo, EEVEE_ViewLayerData::probes, EEVEE_Data::psl, EEVEE_ViewLayerData::renderpass_ubo, EEVEE_PrivateData::renderpass_ubo, LightGridCache::resolution, SCE_EEVEE_SHOW_CUBEMAPS, SCE_EEVEE_SHOW_IRRADIANCE, scene, DRWContextState::scene, EEVEE_ViewLayerData::shadow_ubo, state, EEVEE_Data::stl, LightCacheTexture::tex, EEVEE_Data::txl, DRWContextState::v3d, VAR_WORLD_BACKGROUND, VAR_WORLD_PROBE, EEVEE_LightProbesInfo::vis_data, world, and Scene::world.

Referenced by eevee_cache_init(), eevee_lightbake_cache_create(), and EEVEE_render_cache_init().

◆ EEVEE_lightprobes_cube_data_from_object()

void EEVEE_lightprobes_cube_data_from_object ( Object ob,
EEVEE_LightProbe eprobe 
)

◆ eevee_lightprobes_culling_test()

static bool eevee_lightprobes_culling_test ( Object ob)
static

◆ eevee_lightprobes_extract_from_cache()

static void eevee_lightprobes_extract_from_cache ( EEVEE_LightProbesInfo pinfo,
LightCache lcache 
)
static

◆ EEVEE_lightprobes_free()

void EEVEE_lightprobes_free ( void  )

Definition at line 1249 of file eevee_lightprobes.c.

References DRW_TEXTURE_FREE_SAFE, e_data, and MEM_SAFE_FREE.

Referenced by eevee_engine_free().

◆ EEVEE_lightprobes_grid_data_from_object()

void EEVEE_lightprobes_grid_data_from_object ( Object ob,
EEVEE_LightGrid egrid,
int *  offset 
)

◆ EEVEE_lightprobes_init()

void EEVEE_lightprobes_init ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

◆ EEVEE_lightprobes_obj_visibility_cb()

bool EEVEE_lightprobes_obj_visibility_cb ( bool  vis_in,
void user_data 
)

◆ EEVEE_lightprobes_planar_data_from_object()

void EEVEE_lightprobes_planar_data_from_object ( Object ob,
EEVEE_PlanarReflection eplanar,
EEVEE_LightProbeVisTest vis_test 
)

◆ EEVEE_lightprobes_refresh()

void EEVEE_lightprobes_refresh ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

◆ EEVEE_lightprobes_refresh_planar()

void EEVEE_lightprobes_refresh_planar ( EEVEE_ViewLayerData sldata,
EEVEE_Data vedata 
)

◆ lightbake_planar_ensure_view()

static void lightbake_planar_ensure_view ( EEVEE_PlanarReflection eplanar,
const DRWView main_view,
DRWView **  r_planar_view 
)
static

◆ lightbake_render_scene_face()

static void lightbake_render_scene_face ( int  face,
EEVEE_BakeRenderData user_data 
)
static

◆ lightbake_render_scene_reflected()

static void lightbake_render_scene_reflected ( int  layer,
EEVEE_BakeRenderData user_data 
)
static

◆ lightbake_render_world_face()

static void lightbake_render_world_face ( int  face,
EEVEE_BakeRenderData user_data 
)
static

◆ planar_pool_ensure_alloc()

static void planar_pool_ensure_alloc ( EEVEE_Data vedata,
int  num_planar_ref 
)
static

◆ render_cubemap()

static void render_cubemap ( void(*)(int face, EEVEE_BakeRenderData *user_data callback,
EEVEE_BakeRenderData user_data,
const float  pos[3],
float  near,
float  far,
bool  do_culling 
)
static

◆ render_reflections()

static void render_reflections ( void(*)(int face, EEVEE_BakeRenderData *user_data callback,
EEVEE_BakeRenderData user_data,
EEVEE_PlanarReflection planar_data,
int  ref_count 
)
static

Variable Documentation

◆ depth_array_placeholder

struct GPUTexture* depth_array_placeholder

Definition at line 40 of file eevee_lightprobes.c.

◆ depth_placeholder

struct GPUTexture* depth_placeholder

Definition at line 39 of file eevee_lightprobes.c.

◆ 

struct { ... } e_data

◆ format_probe_display_planar

struct GPUVertFormat* format_probe_display_planar

Definition at line 42 of file eevee_lightprobes.c.

◆ planar_pool_placeholder

struct GPUTexture* planar_pool_placeholder

Definition at line 38 of file eevee_lightprobes.c.