|
Blender V4.3
|
#include <eevee_shadow.hh>
Public Member Functions | |
| ~ShadowModule () | |
| void | set_lights_data () |
| template<typename PassType > | |
| void | bind_resources (PassType &pass) |
| const ShadowSceneData & | get_data () |
| float | global_lod_bias () const |
| void | reset () |
Public Attributes | |
| ShadowTileMapPool | tilemap_pool |
| Pool< ShadowPunctual > | punctual_pool |
| Pool< ShadowDirectional > | directional_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) |
Definition at line 184 of file eevee_shadow.hh.
| blender::eevee::ShadowModule::ShadowModule | ( | Instance & | inst, |
| ShadowSceneData & | data ) |
Definition at line 556 of file eevee_shadow.cc.
References UNUSED_VARS.
|
inline |
Definition at line 342 of file eevee_shadow.hh.
| 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.
|
inline |
Definition at line 367 of file eevee_shadow.hh.
References SHADOW_ATLAS_TEX_SLOT, SHADOW_TILEMAPS_TEX_SLOT, tilemap_pool, and blender::eevee::ShadowTileMapPool::tilemap_tx.
| void blender::eevee::ShadowModule::debug_draw | ( | View & | view, |
| GPUFrameBuffer * | view_fb ) |
Definition at line 1390 of file eevee_shadow.cc.
References blender::eevee::Instance::debug_mode, blender::eevee::DEBUG_SHADOW_TILE_RANDOM_COLOR, blender::eevee::DEBUG_SHADOW_TILEMAP_RANDOM_COLOR, blender::eevee::DEBUG_SHADOW_TILEMAPS, blender::eevee::DEBUG_SHADOW_VALUES, ELEM, GPU_framebuffer_bind(), blender::eevee::Instance::hiz_buffer, blender::eevee::Instance::info_append(), blender::eevee::Instance::manager, blender::draw::Manager::submit(), and blender::eevee::HiZBuffer::update().
Referenced by blender::eevee::ShadingView::render().
| void blender::eevee::ShadowModule::debug_end_sync | ( | ) |
Definition at line 1095 of file eevee_shadow.cc.
References blender::draw::detail::PassBase< DrawCommandBufType >::bind_resources(), blender::draw::detail::PassBase< DrawCommandBufType >::bind_ssbo(), blender::eevee::Instance::debug_mode, blender::eevee::DEBUG_SHADOW_TILE_RANDOM_COLOR, blender::eevee::DEBUG_SHADOW_TILEMAP_RANDOM_COLOR, blender::eevee::DEBUG_SHADOW_TILEMAPS, blender::eevee::DEBUG_SHADOW_VALUES, DEG_get_original_object(), blender::draw::detail::PassBase< DrawCommandBufType >::draw_procedural(), DRW_context_state_get(), DRW_STATE_BLEND_CUSTOM, DRW_STATE_DEPTH_LESS_EQUAL, DRW_STATE_WRITE_COLOR, DRW_STATE_WRITE_DEPTH, ELEM, blender::eevee::HiZBuffer::front, GPU_PRIM_TRIS, blender::eevee::Instance::hiz_buffer, blender::draw::detail::Pass< DrawCommandBufType >::init(), blender::eevee::Instance::lights, DRWContextState::obact, blender::draw::detail::PassBase< DrawCommandBufType >::push_constant(), blender::draw::detail::PassBase< DrawCommandBufType >::shader_set(), blender::eevee::Instance::shaders, blender::eevee::SHADOW_DEBUG, SHADOW_MAX_TILEMAP, blender::eevee::Instance::shadows, state, blender::draw::detail::PassBase< DrawCommandBufType >::state_set(), blender::eevee::ShaderModule::static_shader_get(), tilemap_pool, blender::eevee::ShadowTileMapPool::tilemaps_data, blender::eevee::ShadowTileMapPool::tiles_data, and blender::eevee::Instance::uniform_data.
Referenced by 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.
|
inline |
Definition at line 373 of file eevee_shadow.hh.
Referenced by blender::eevee::DeferredLayer::end_sync().
|
inline |
Definition at line 378 of file eevee_shadow.hh.
| 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.
|
inline |
Definition at line 384 of file eevee_shadow.hh.
|
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().
| void blender::eevee::ShadowModule::set_lights_data | ( | ) |
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().
| void blender::eevee::ShadowModule::sync_object | ( | const Object * | ob, |
| const ObjectHandle & | handle, | ||
| const ResourceHandle & | resource_handle, | ||
| bool | is_alpha_blend, | ||
| bool | has_transparent_shadows ) |
Register a shadow caster or receiver.
Definition at line 746 of file eevee_shadow.cc.
References blender::draw::StorageVectorBuffer< T, len >::append(), blender::draw::detail::PassBase< DrawCommandBufType >::draw(), blender::eevee::Instance::is_baking(), is_initialized, OB_HIDE_SHADOW, blender::draw::ResourceHandle::raw, blender::eevee::ShadowObject::resource_handle, blender::eevee::ShadowSceneData::use_jitter, blender::eevee::ShadowObject::used, and Object::visibility_flag.
Referenced by blender::eevee::SyncModule::sync_curves(), blender::eevee::SyncModule::sync_mesh(), blender::eevee::SyncModule::sync_point_cloud(), and blender::eevee::SyncModule::sync_sculpt().
| Pool<ShadowDirectional> blender::eevee::ShadowModule::directional_pool |
Definition at line 198 of file eevee_shadow.hh.
Referenced by blender::eevee::Light::shadow_discard_safe(), and blender::eevee::Light::shadow_ensure().
| Pool<ShadowPunctual> blender::eevee::ShadowModule::punctual_pool |
Definition at line 197 of file eevee_shadow.hh.
Referenced by blender::eevee::Light::shadow_discard_safe(), and blender::eevee::Light::shadow_ensure().
|
static |
Definition at line 192 of file eevee_shadow.hh.
Referenced by end_sync(), init(), blender::eevee::ShaderModule::material_create_info_amend(), set_view(), and blender::eevee::ShadowPipeline::sync().
| ShadowTileMapPool blender::eevee::ShadowModule::tilemap_pool |
Need to be first because of destructor order.
Definition at line 195 of file eevee_shadow.hh.
Referenced by begin_sync(), bind_resources(), debug_end_sync(), blender::eevee::ShadowDirectional::end_sync(), end_sync(), blender::eevee::ShadowPunctual::end_sync(), blender::eevee::ShadowDirectional::release_excess_tilemaps(), blender::eevee::ShadowPunctual::release_excess_tilemaps(), blender::eevee::ShadowDirectional::~ShadowDirectional(), and blender::eevee::ShadowPunctual::~ShadowPunctual().