Blender V4.3
blender::eevee::ShadowModule Class Reference

#include <eevee_shadow.hh>

Public Member Functions

 ~ShadowModule ()
 
void set_lights_data ()
 
template<typename PassType >
void bind_resources (PassType &pass)
 
const ShadowSceneDataget_data ()
 
float global_lod_bias () const
 
void reset ()
 

Public Attributes

ShadowTileMapPool tilemap_pool
 
Pool< ShadowPunctualpunctual_pool
 
Pool< ShadowDirectionaldirectional_pool
 

Static Public Attributes

static ShadowTechnique shadow_technique = ShadowTechnique::ATOMIC_RASTER
 

Shadow Module

 ShadowModule (Instance &inst, ShadowSceneData &data)
 
void init ()
 
void begin_sync ()
 
void sync_object (const Object *ob, const ObjectHandle &handle, const ResourceHandle &resource_handle, bool is_alpha_blend, bool has_transparent_shadows)
 
void end_sync ()
 
void set_view (View &view, int2 extent)
 
void debug_end_sync ()
 
void debug_draw (View &view, GPUFrameBuffer *view_fb)
 
static float screen_pixel_radius (const float4x4 &wininv, bool is_perspective, const int2 &extent)
 

Detailed Description

Definition at line 184 of file eevee_shadow.hh.

Constructor & Destructor Documentation

◆ ShadowModule()

blender::eevee::ShadowModule::ShadowModule ( Instance & inst,
ShadowSceneData & data )

Definition at line 556 of file eevee_shadow.cc.

References UNUSED_VARS.

◆ ~ShadowModule()

blender::eevee::ShadowModule::~ShadowModule ( )
inline

Definition at line 342 of file eevee_shadow.hh.

Member Function Documentation

◆ begin_sync()

void blender::eevee::ShadowModule::begin_sync ( )

Definition at line 671 of file eevee_shadow.cc.

References blender::eevee::VolumeProbeModule::bake, blender::draw::detail::PassBase< DrawCommandBufType >::bind_resources(), blender::draw::detail::PassBase< DrawCommandBufType >::bind_ssbo(), blender::draw::detail::PassBase< DrawCommandBufType >::bind_texture(), blender::draw::Manager::bounds_buf, capture_info_buf, blender::draw::StorageVectorBuffer< T, len >::clear(), blender::draw::detail::PassBase< DrawCommandBufType >::dispatch(), DRW_cache_cube_get(), DRW_STATE_CULL_FRONT, DRW_STATE_WRITE_STENCIL, float, blender::draw::detail::PassBase< DrawCommandBufType >::framebuffer_set(), blender::eevee::HiZBuffer::front, blender::eevee::Instance::hiz_buffer, blender::draw::detail::Pass< DrawCommandBufType >::init(), blender::eevee::Instance::is_baking(), blender::eevee::Instance::lights, blender::eevee::Instance::manager, blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::shader_set(), blender::eevee::Instance::shaders, SHADOW_PAGE_RES, blender::eevee::SHADOW_TILEMAP_TAG_USAGE_OPAQUE, blender::eevee::SHADOW_TILEMAP_TAG_USAGE_SURFELS, blender::eevee::SHADOW_TILEMAP_TAG_USAGE_TRANSPARENT, blender::draw::detail::PassBase< DrawCommandBufType >::state_set(), blender::draw::detail::PassBase< DrawCommandBufType >::state_stencil(), blender::eevee::ShaderModule::static_shader_get(), blender::draw::detail::PassBase< DrawCommandBufType >::sub(), blender::eevee::ShadowDirectional::tile_size_get(), tilemap_pool, blender::eevee::ShadowTileMapPool::tilemaps_data, blender::eevee::ShadowTileMapPool::tiles_data, blender::eevee::Instance::uniform_data, and blender::eevee::Instance::volume_probes.

◆ bind_resources()

template<typename PassType >
void blender::eevee::ShadowModule::bind_resources ( PassType & pass)
inline

◆ debug_draw()

◆ debug_end_sync()

◆ end_sync()

void blender::eevee::ShadowModule::end_sync ( )

Clear pages that need to be rendered.

Definition at line 784 of file eevee_shadow.cc.

References blender::draw::StorageVectorBuffer< T, len >::append(), blender::draw::detail::PassBase< DrawCommandBufType >::barrier(), blender::draw::detail::PassBase< DrawCommandBufType >::bind_image(), blender::draw::detail::PassBase< DrawCommandBufType >::bind_resources(), blender::draw::detail::PassBase< DrawCommandBufType >::bind_ssbo(), blender::draw::Manager::bounds_buf, blender::eevee::Instance::camera, blender::draw::StorageVectorBuffer< T, len >::clear(), blender::draw::detail::StorageCommon< T, len, device_only >::clear_to_zero(), debug_end_sync(), blender::draw::detail::PassBase< DrawCommandBufType >::dispatch(), blender::math::divide_ceil(), divide_ceil_u(), DRW_STATE_DEPTH_ALWAYS, DRW_STATE_WRITE_DEPTH, blender::eevee::ShadowTileMapPool::end_sync(), blender::draw::detail::PassBase< DrawCommandBufType >::framebuffer_set(), blender::eevee::HiZBuffer::front, GPU_BARRIER_SHADER_IMAGE_ACCESS, GPU_BARRIER_SHADER_STORAGE, GPU_BARRIER_TEXTURE_FETCH, GPU_BARRIER_UNIFORM, GPU_storagebuf_clear(), blender::eevee::VolumeModule::grid_size(), blender::eevee::Instance::hiz_buffer, blender::draw::detail::Pass< DrawCommandBufType >::init(), blender::eevee::Instance::is_baking(), LIGHT_NO_SHADOW, blender::eevee::Instance::lights, blender::eevee::Instance::manager, blender::draw::View::matrices_ubo_get(), blender::eevee::VolumeModule::needs_shadow_tagging(), blender::eevee::ShadowPagesInfoData::page_alloc_count, blender::eevee::ShadowPagesInfoData::page_cached_end, blender::eevee::ShadowPagesInfoData::page_cached_next, blender::eevee::ShadowPagesInfoData::page_cached_start, blender::eevee::ShadowPagesInfoData::page_free_count, blender::eevee::VolumeModule::properties, blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::StorageCommon< T, len, device_only >::push_update(), blender::draw::ResourceHandle::raw, blender::eevee::ShadowObject::resource_handle, blender::eevee::VolumeModule::result, blender::eevee::Instance::sampling, blender::draw::detail::PassBase< DrawCommandBufType >::shader_set(), blender::eevee::Instance::shaders, SHADOW_BOUNDS_GROUP_SIZE, blender::eevee::SHADOW_CLIPMAP_CLEAR, SHADOW_CLIPMAP_GROUP_SIZE, SHADOW_MAX_PAGE, blender::eevee::SHADOW_PAGE_ALLOCATE, blender::eevee::SHADOW_PAGE_CLEAR, blender::eevee::SHADOW_PAGE_DEFRAG, blender::eevee::SHADOW_PAGE_FREE, blender::eevee::SHADOW_PAGE_MASK, blender::eevee::shadow_page_pack(), SHADOW_PAGE_PER_COL, SHADOW_PAGE_PER_LAYER, SHADOW_PAGE_PER_ROW, shadow_technique, blender::eevee::SHADOW_TILEMAP_AMEND, blender::eevee::SHADOW_TILEMAP_BOUNDS, blender::eevee::SHADOW_TILEMAP_FINALIZE, blender::eevee::SHADOW_TILEMAP_INIT, blender::eevee::SHADOW_TILEMAP_RENDERMAP, blender::eevee::SHADOW_TILEMAP_TAG_UPDATE, blender::eevee::SHADOW_TILEMAP_TAG_USAGE_VOLUME, SHADOW_VIEW_MAX, blender::draw::StorageArrayBuffer< T, len, device_only >::size(), blender::draw::StorageVectorBuffer< T, len >::size(), blender::draw::detail::PassBase< DrawCommandBufType >::state_set(), blender::eevee::ShaderModule::static_shader_get(), blender::draw::detail::PassBase< DrawCommandBufType >::sub(), blender::eevee::TILE_COPY, tilemap_pool, blender::eevee::ShadowTileMapPool::tilemap_tx, blender::eevee::ShadowTileMapPool::tilemaps_clip, blender::eevee::ShadowTileMapPool::tilemaps_data, blender::eevee::ShadowTileMapPool::tilemaps_unused, blender::eevee::ShadowTileMapPool::tiles_data, blender::eevee::Instance::uniform_data, blender::eevee::ShadowObject::used, blender::eevee::Instance::volume, and VOLUME_GROUP_SIZE.

◆ get_data()

const ShadowSceneData & blender::eevee::ShadowModule::get_data ( )
inline

Definition at line 373 of file eevee_shadow.hh.

Referenced by blender::eevee::DeferredLayer::end_sync().

◆ global_lod_bias()

float blender::eevee::ShadowModule::global_lod_bias ( ) const
inline

Definition at line 378 of file eevee_shadow.hh.

◆ init()

void blender::eevee::ShadowModule::init ( )

IMPORTANT: Reflect changes in TBDR tile vertex shader which assumes viewport index 15 covers the whole framebuffer.

Definition at line 565 of file eevee_shadow.cc.

References blender::assign_if_different(), blender::eevee::ATOMIC_RASTER, clamp_i(), divide_ceil_u(), divide_ceil_ul(), blender::draw::Texture::ensure_2d_array(), blender::draw::Texture::filter_mode(), blender::eevee::Sampling::finished_viewport(), GPU_ARCHITECTURE_TBDR, GPU_backend_get_type(), GPU_BACKEND_METAL, GPU_platform_architecture(), GPU_TEXTURE_USAGE_ATOMIC, GPU_TEXTURE_USAGE_SHADER_READ, GPU_TEXTURE_USAGE_SHADER_WRITE, blender::eevee::Instance::info_append_i18n(), int, blender::eevee::Instance::is_image_render(), blender::eevee::Instance::is_navigating(), blender::eevee::Instance::is_playback(), blender::eevee::Instance::is_transforming(), blender::draw::Texture::is_valid(), blender::eevee::Instance::is_viewport(), blender::eevee::Instance::lights, min_ii(), blender::eevee::ShadowStatistics::page_used_count, blender::eevee::ShadowSceneData::ray_count, blender::eevee::Instance::sampling, SCE_EEVEE_SHADOW_ENABLED, SCE_EEVEE_SHADOW_JITTERED_VIEWPORT, blender::eevee::Instance::scene, SHADOW_MAX_PAGE, SHADOW_MAX_RAY, SHADOW_MAX_STEP, SHADOW_PAGE_PER_LAYER, SHADOW_PAGE_PER_ROW, shadow_technique, SHADOW_TILEMAP_LOD, SHADOW_TILEMAP_RES, SHADOW_VIEW_MAX, square_i(), blender::eevee::ShadowSceneData::step_count, blender::eevee::TILE_COPY, blender::eevee::ShadowSceneData::use_jitter, and blender::eevee::ShadowStatistics::view_needed_count.

◆ reset()

void blender::eevee::ShadowModule::reset ( )
inline

Definition at line 384 of file eevee_shadow.hh.

◆ screen_pixel_radius()

float blender::eevee::ShadowModule::screen_pixel_radius ( const float4x4 & wininv,
bool is_perspective,
const int2 & extent )
static

Compute approximate screen pixel space radius (as world space radius).

Definition at line 1142 of file eevee_shadow.cc.

References blender::math::distance(), float, min_ii(), and blender::math::project_point().

Referenced by set_view(), and blender::eevee::LookdevModule::sync().

◆ set_lights_data()

void blender::eevee::ShadowModule::set_lights_data ( )

◆ set_view()

void blender::eevee::ShadowModule::set_view ( View & view,
int2 extent )

Definition at line 1266 of file eevee_shadow.cc.

References blender::assign_if_different(), blender::eevee::ATOMIC_RASTER, BLI_assert_unreachable, blender::draw::View::compute_procedural_bounds(), blender::math::divide_ceil(), DRW_stats_group_end(), DRW_stats_group_start(), blender::draw::Framebuffer::ensure(), blender::draw::Texture::ensure_2d_array(), blender::eevee::ShadowSceneData::film_pixel_radius, FLT_MAX, blender::draw::Texture::free(), GPU_ATTACHMENT_TEXTURE, GPU_backend_get_type(), GPU_BACKEND_METAL, GPU_BARRIER_SHADER_IMAGE_ACCESS, GPU_BARRIER_TEXTURE_FETCH, GPU_DEPTH_COMPONENT32F, GPU_flush(), GPU_framebuffer_active_get(), GPU_framebuffer_bind(), GPU_framebuffer_bind_ex, GPU_framebuffer_multi_viewports_set(), GPU_LOADACTION_CLEAR, GPU_memory_barrier(), GPU_R32F, GPU_STOREACTION_DONT_CARE, GPU_TEXTURE_USAGE_ATTACHMENT, GPU_TEXTURE_USAGE_MEMORYLESS, GPU_uniformbuf_clear_to_zero(), blender::eevee::Instance::hiz_buffer, blender::draw::Texture::is_valid(), blender::eevee::Instance::manager, blender::draw::View::matrices_ubo_get(), blender::eevee::Instance::pipelines, blender::eevee::UniformDataModule::push_update(), blender::eevee::ShadowPipeline::render(), screen_pixel_radius(), blender::eevee::PipelineModule::shadow, SHADOW_DEPTH_SCAN_GROUP_SIZE, shadow_technique, SHADOW_TILEMAP_RES, SHADOW_VIEW_MAX, blender::draw::Manager::submit(), blender::eevee::TILE_COPY, blender::eevee::Instance::uniform_data, and blender::eevee::HiZBuffer::update().

Referenced by blender::eevee::VolumeModule::draw_compute(), blender::eevee::DeferredLayer::render(), blender::eevee::DeferredProbePipeline::render(), blender::eevee::ForwardPipeline::render(), and blender::eevee::PlanarProbePipeline::render().

◆ sync_object()

Member Data Documentation

◆ directional_pool

Pool<ShadowDirectional> blender::eevee::ShadowModule::directional_pool

◆ punctual_pool

Pool<ShadowPunctual> blender::eevee::ShadowModule::punctual_pool

◆ shadow_technique

◆ tilemap_pool


The documentation for this class was generated from the following files: