Blender
V3.3
|
#include "DRW_render.h"
#include "BLI_listbase.h"
#include "BLI_rand.h"
#include "BLI_string_utils.h"
#include "DNA_fluid_types.h"
#include "DNA_object_force_types.h"
#include "DNA_volume_types.h"
#include "DNA_world_types.h"
#include "BKE_fluid.h"
#include "BKE_global.h"
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_volume.h"
#include "BKE_volume_render.h"
#include "ED_screen.h"
#include "DEG_depsgraph_query.h"
#include "GPU_capabilities.h"
#include "GPU_material.h"
#include "GPU_texture.h"
#include "eevee_private.h"
Go to the source code of this file.
Functions | |
void | EEVEE_volumes_set_jitter (EEVEE_ViewLayerData *sldata, uint current_sample) |
void | EEVEE_volumes_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) |
void | EEVEE_volumes_cache_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) |
void | EEVEE_volumes_cache_object_add (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Scene *scene, Object *ob) |
void | EEVEE_volumes_cache_finish (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) |
void | EEVEE_volumes_draw_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) |
void | EEVEE_volumes_compute (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata) |
void | EEVEE_volumes_resolve (EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) |
void | EEVEE_volumes_free (void) |
Render Passes | |
void | EEVEE_volumes_output_init (EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples) |
void | EEVEE_volumes_output_accumulate (EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata) |
Variables | |
struct { | |
GPUTexture * depth_src | |
GPUTexture * dummy_zero | |
GPUTexture * dummy_one | |
GPUTexture * dummy_flame | |
GPUTexture * dummy_scatter | |
GPUTexture * dummy_transmit | |
} | e_data = {NULL} |
Volumetric effects rendering using frostbite approach.
Definition in file eevee_volumes.c.
void EEVEE_volumes_cache_finish | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 341 of file eevee_volumes.c.
References EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_data, EEVEE_ViewLayerData::common_ubo, DRW_PASS_CREATE, DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_uniform_block, DRW_shgroup_uniform_image_ref(), DRW_shgroup_uniform_texture_ref(), DRW_STATE_BLEND_CUSTOM, DRW_STATE_WRITE_COLOR, e_data, EEVEE_shaders_volumes_integration_sh_get(), EEVEE_shaders_volumes_resolve_sh_get(), EEVEE_shaders_volumes_scatter_sh_get(), EEVEE_shaders_volumes_scatter_with_lights_sh_get(), EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_StorageList::g_data, LightCache::grid_tx, EEVEE_PrivateData::light_cache, EEVEE_ViewLayerData::light_ubo, NULL, EEVEE_ViewLayerData::probe_ubo, EEVEE_Data::psl, EEVEE_ViewLayerData::renderpass_ubo, sh, EEVEE_ViewLayerData::shadow_cascade_pool, EEVEE_ViewLayerData::shadow_cube_pool, EEVEE_ViewLayerData::shadow_ubo, EEVEE_Data::stl, LightCacheTexture::tex, EEVEE_Data::txl, USE_VOLUME_OPTI, EEVEE_CommonUniformBuffer::vol_tex_size, EEVEE_CommonUniformBuffer::vol_use_lights, EEVEE_TextureList::volume_prop_emission, EEVEE_TextureList::volume_prop_extinction, EEVEE_TextureList::volume_prop_phase, EEVEE_TextureList::volume_prop_scattering, EEVEE_TextureList::volume_scatter, EEVEE_TextureList::volume_scatter_history, EEVEE_TextureList::volume_transmit, EEVEE_TextureList::volume_transmit_history, EEVEE_PassList::volumetric_integration_ps, EEVEE_PassList::volumetric_resolve_ps, and EEVEE_PassList::volumetric_scatter_ps.
Referenced by eevee_cache_finish(), eevee_lightbake_cache_create(), and eevee_render_to_image().
void EEVEE_volumes_cache_init | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 192 of file eevee_volumes.c.
References EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_data, EEVEE_ViewLayerData::common_ubo, DRW_context_state_get(), DRW_PASS_CREATE, DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_material_create(), DRW_shgroup_uniform_block, DRW_shgroup_volume_create_sub(), DRW_STATE_BLEND_ADD, DRW_STATE_WRITE_COLOR, EEVEE_material_get(), EEVEE_shaders_volumes_clear_sh_get(), EFFECT_POST_BUFFER, EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, GPU_material_has_volume_output(), EEVEE_ViewLayerData::grid_ubo, EEVEE_ViewLayerData::light_ubo, LOOK_DEV_STUDIO_LIGHT_ENABLED, World::nodetree, NULL, EEVEE_ViewLayerData::planar_ubo, EEVEE_ViewLayerData::probe_ubo, EEVEE_Data::psl, EEVEE_ViewLayerData::renderpass_ubo, scene, DRWContextState::scene, EEVEE_ViewLayerData::shadow_ubo, EEVEE_Data::stl, World::use_nodes, DRWContextState::v3d, VAR_MAT_VOLUME, EEVEE_CommonUniformBuffer::vol_tex_size, EEVEE_PassList::volumetric_objects_ps, EEVEE_PassList::volumetric_world_ps, and Scene::world.
Referenced by eevee_cache_init(), eevee_lightbake_cache_create(), and EEVEE_render_cache_init().
void EEVEE_volumes_cache_object_add | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata, | ||
Scene * | scene, | ||
Object * | ob | ||
) |
Definition at line 277 of file eevee_volumes.c.
References BKE_material_default_volume(), BKE_object_material_get_eval(), EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_data, EEVEE_ViewLayerData::common_ubo, DRW_shgroup_add_material_resources(), DRW_shgroup_call_procedural_triangles(), DRW_shgroup_create(), DRW_shgroup_uniform_block, DRW_shgroup_volume_create_sub(), EEVEE_material_get(), EFFECT_POST_BUFFER, EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, blender::robust_pred::epsilon, GPU_material_get_shader(), EEVEE_ViewLayerData::grid_ubo, EEVEE_ViewLayerData::light_ubo, GPUMaterial::ma, mat4_to_size(), NULL, OB_VOLUME, Object::obmat, EEVEE_ViewLayerData::planar_ubo, EEVEE_ViewLayerData::probe_ubo, EEVEE_Data::psl, EEVEE_ViewLayerData::renderpass_ubo, scene, sh, EEVEE_ViewLayerData::shadow_ubo, size(), EEVEE_Data::stl, Object::type, VAR_MAT_MESH, VAR_MAT_VOLUME, EEVEE_CommonUniformBuffer::vol_tex_size, and EEVEE_PassList::volumetric_objects_ps.
Referenced by EEVEE_cache_populate(), EEVEE_materials_cache_populate(), and EEVEE_render_cache().
void EEVEE_volumes_compute | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 479 of file eevee_volumes.c.
References DRW_draw_pass(), DRW_stats_group_end(), DRW_stats_group_start(), EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_Data::fbl, GPU_framebuffer_bind(), GPU_texture_compare_mode(), EEVEE_FramebufferList::main_fb, EEVEE_Data::psl, EEVEE_ViewLayerData::shadow_cascade_pool, EEVEE_ViewLayerData::shadow_cube_pool, EEVEE_Data::stl, SWAP, EEVEE_Data::txl, USE_VOLUME_OPTI, EEVEE_TextureList::volume_scatter, EEVEE_EffectsInfo::volume_scatter, EEVEE_TextureList::volume_scatter_history, EEVEE_TextureList::volume_transmit, EEVEE_EffectsInfo::volume_transmit, EEVEE_TextureList::volume_transmit_history, EEVEE_FramebufferList::volumetric_fb, EEVEE_FramebufferList::volumetric_integ_fb, EEVEE_PassList::volumetric_integration_ps, EEVEE_PassList::volumetric_objects_ps, EEVEE_FramebufferList::volumetric_scat_fb, EEVEE_PassList::volumetric_scatter_ps, and EEVEE_PassList::volumetric_world_ps.
Referenced by eevee_draw_scene(), and EEVEE_render_draw().
void EEVEE_volumes_draw_init | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 406 of file eevee_volumes.c.
References EEVEE_ViewLayerData::common_data, DRW_TEX_FILTER, DRW_texture_create_3d(), DRW_TEXTURE_FREE_SAFE, e_data, EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_Data::fbl, GPU_R11F_G11F_B10F, GPU_RG16F, NULL, EEVEE_Data::stl, EEVEE_Data::txl, EEVEE_CommonUniformBuffer::vol_tex_size, EEVEE_TextureList::volume_prop_emission, EEVEE_TextureList::volume_prop_extinction, EEVEE_TextureList::volume_prop_phase, EEVEE_TextureList::volume_prop_scattering, EEVEE_TextureList::volume_scatter, EEVEE_EffectsInfo::volume_scatter, EEVEE_TextureList::volume_scatter_history, EEVEE_TextureList::volume_transmit, EEVEE_EffectsInfo::volume_transmit, EEVEE_TextureList::volume_transmit_history, EEVEE_FramebufferList::volumetric_fb, EEVEE_FramebufferList::volumetric_integ_fb, and EEVEE_FramebufferList::volumetric_scat_fb.
Referenced by eevee_cache_finish(), eevee_lightbake_cache_create(), and eevee_render_to_image().
Definition at line 549 of file eevee_volumes.c.
References DRW_TEXTURE_FREE_SAFE, and e_data.
Referenced by eevee_engine_free().
void EEVEE_volumes_init | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 63 of file eevee_volumes.c.
References ceilf, EEVEE_ViewLayerData::common_data, copy_v3_v3_int(), CTX_wm_manager(), DEG_get_evaluated_scene(), DRWContextState::depsgraph, DRW_context_state_get(), DRW_state_is_image_render(), DRW_TEX_WRAP, DRW_texture_create_3d(), DRW_TEXTURE_FREE_SAFE, DRW_view_far_distance_get(), DRW_view_is_persp_get(), DRW_view_near_distance_get(), DRW_viewport_request_redraw(), DRW_viewport_size_get(), e_data, ED_screen_animation_no_scrub(), Scene::eevee, EEVEE_volumes_set_jitter(), EFFECT_TAA, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, DRWContextState::evil_C, EEVEE_Data::fbl, SceneEEVEE::flag, float(), fmaxf, GPU_RGBA8, if(), max_ff(), max_ii(), min_ff(), NULL, SCE_EEVEE_SHADOW_SOFT, SCE_EEVEE_VOLUMETRIC_LIGHTS, SCE_EEVEE_VOLUMETRIC_SHADOWS, EEVEE_Data::stl, EEVEE_EffectsInfo::taa_current_sample, EEVEE_Data::txl, EEVEE_CommonUniformBuffer::vol_coord_scale, EEVEE_CommonUniformBuffer::vol_depth_param, EEVEE_CommonUniformBuffer::vol_history_alpha, EEVEE_CommonUniformBuffer::vol_inv_tex_size, EEVEE_CommonUniformBuffer::vol_shadow_steps, EEVEE_CommonUniformBuffer::vol_tex_size, EEVEE_CommonUniformBuffer::vol_use_lights, EEVEE_CommonUniformBuffer::vol_use_soft_shadows, EEVEE_EffectsInfo::volume_current_sample, EEVEE_EffectsInfo::volume_light_clamp, EEVEE_TextureList::volume_prop_emission, EEVEE_TextureList::volume_prop_extinction, EEVEE_TextureList::volume_prop_phase, EEVEE_TextureList::volume_prop_scattering, EEVEE_TextureList::volume_scatter, EEVEE_TextureList::volume_scatter_history, EEVEE_TextureList::volume_transmit, EEVEE_TextureList::volume_transmit_history, SceneEEVEE::volumetric_end, EEVEE_FramebufferList::volumetric_fb, EEVEE_FramebufferList::volumetric_integ_fb, SceneEEVEE::volumetric_light_clamp, SceneEEVEE::volumetric_sample_distribution, SceneEEVEE::volumetric_samples, EEVEE_FramebufferList::volumetric_scat_fb, SceneEEVEE::volumetric_shadow_samples, SceneEEVEE::volumetric_start, and SceneEEVEE::volumetric_tile_size.
Referenced by EEVEE_effects_init().
void EEVEE_volumes_output_accumulate | ( | EEVEE_ViewLayerData * | UNUSEDsldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 602 of file eevee_volumes.c.
References clear(), DRW_draw_pass(), EEVEE_StorageList::effects, EEVEE_Data::fbl, GPU_framebuffer_bind(), EEVEE_FramebufferList::main_fb, NULL, EEVEE_Data::psl, EEVEE_Data::stl, EEVEE_EffectsInfo::taa_current_sample, EEVEE_FramebufferList::volumetric_accum_fb, and EEVEE_PassList::volumetric_accum_ps.
void EEVEE_volumes_output_init | ( | EEVEE_ViewLayerData * | sldata, |
EEVEE_Data * | vedata, | ||
uint | tot_samples | ||
) |
Definition at line 563 of file eevee_volumes.c.
References EEVEE_ViewLayerData::combined, EEVEE_ViewLayerData::common_ubo, DRW_cache_fullscreen_quad_get(), DRW_PASS_CREATE, DRW_shgroup_call, DRW_shgroup_create(), DRW_shgroup_uniform_block, DRW_shgroup_uniform_texture_ref(), DRW_STATE_BLEND_ADD_FULL, DRW_STATE_WRITE_COLOR, DRW_texture_ensure_fullscreen_2d(), e_data, EEVEE_shaders_volumes_accum_sh_get(), EEVEE_shaders_volumes_resolve_sh_get(), EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_Data::fbl, GPU_RGBA16F, GPU_RGBA32F, NULL, EEVEE_Data::psl, EEVEE_ViewLayerData::renderpass_ubo, EEVEE_Data::stl, EEVEE_Data::txl, EEVEE_TextureList::volume_scatter, EEVEE_TextureList::volume_scatter_accum, EEVEE_TextureList::volume_transmit, EEVEE_TextureList::volume_transmittance_accum, EEVEE_FramebufferList::volumetric_accum_fb, and EEVEE_PassList::volumetric_accum_ps.
Referenced by EEVEE_renderpasses_output_init().
void EEVEE_volumes_resolve | ( | EEVEE_ViewLayerData * | UNUSEDsldata, |
EEVEE_Data * | vedata | ||
) |
Definition at line 525 of file eevee_volumes.c.
References DefaultTextureList::depth, DRW_draw_pass(), DRW_viewport_texture_list_get(), e_data, EFFECT_VOLUMETRIC, EEVEE_StorageList::effects, EEVEE_EffectsInfo::enabled_effects, EEVEE_Data::fbl, GPU_BARRIER_TEXTURE_FETCH, GPU_framebuffer_bind(), GPU_memory_barrier(), EEVEE_FramebufferList::main_color_fb, EEVEE_FramebufferList::main_fb, EEVEE_Data::psl, EEVEE_Data::stl, USE_VOLUME_OPTI, and EEVEE_PassList::volumetric_resolve_ps.
void EEVEE_volumes_set_jitter | ( | EEVEE_ViewLayerData * | sldata, |
uint | current_sample | ||
) |
Definition at line 48 of file eevee_volumes.c.
References BLI_halton_3d(), EEVEE_ViewLayerData::common_data, float(), and EEVEE_CommonUniformBuffer::vol_jitter.
Referenced by eevee_draw_scene(), EEVEE_render_draw(), and EEVEE_volumes_init().
GPUTexture* depth_src |
Definition at line 38 of file eevee_volumes.c.
GPUTexture* dummy_flame |
Definition at line 42 of file eevee_volumes.c.
GPUTexture* dummy_one |
Definition at line 41 of file eevee_volumes.c.
GPUTexture* dummy_scatter |
Definition at line 44 of file eevee_volumes.c.
GPUTexture* dummy_transmit |
Definition at line 45 of file eevee_volumes.c.
GPUTexture* dummy_zero |
Definition at line 40 of file eevee_volumes.c.
struct { ... } e_data |