53 double ht_offset[3] = {0.0, 0.0};
54 const uint ht_primes[3] = {3, 7, 2};
56 BLI_halton_3d(ht_primes, ht_offset, current_sample, ht_point);
81 tex_size[0] = (int)
ceilf(
fmaxf(1.0f, viewport_size[0] / (
float)tile_size));
82 tex_size[1] = (int)
ceilf(
fmaxf(1.0f, viewport_size[1] / (
float)tile_size));
116 uint ht_primes[3] = {3, 7, 2};
117 uint current_sample = 0;
133 const uint max_sample = (ht_primes[0] * ht_primes[1] * ht_primes[2]);
136 if (current_sample != max_sample - 1) {
153 sample_distribution = 4.0f * (
max_ff(1.0f - sample_distribution, 1e-2f));
157 float near = integration_start =
min_ff(-integration_start, clip_start - 1e-4f);
158 float far = integration_end =
min_ff(-integration_end, near - 1e-4f);
160 common_data->
vol_depth_param[0] = (far - near * exp2(1.0f / sample_distribution)) /
168 integration_start =
min_ff(integration_end, clip_start);
169 integration_end =
max_ff(-integration_end, clip_end);
173 common_data->
vol_depth_param[2] = 1.0f / (integration_end - integration_start);
184 if (!
e_data.dummy_scatter) {
185 const float scatter[4] = {0.0f, 0.0f, 0.0f, 0.0f};
186 const float transmit[4] = {1.0f, 1.0f, 1.0f, 1.0f};
447 {GPU_ATTACHMENT_NONE,
448 GPU_ATTACHMENT_TEXTURE(txl->volume_prop_scattering),
449 GPU_ATTACHMENT_TEXTURE(txl->volume_prop_extinction),
450 GPU_ATTACHMENT_TEXTURE(txl->volume_prop_emission),
451 GPU_ATTACHMENT_TEXTURE(txl->volume_prop_phase)});
453 {GPU_ATTACHMENT_NONE,
454 GPU_ATTACHMENT_TEXTURE(txl->volume_scatter),
455 GPU_ATTACHMENT_TEXTURE(txl->volume_transmit)});
457 {GPU_ATTACHMENT_NONE,
458 GPU_ATTACHMENT_TEXTURE(txl->volume_scatter_history),
459 GPU_ATTACHMENT_TEXTURE(txl->volume_transmit_history)});
579 {GPU_ATTACHMENT_NONE,
580 GPU_ATTACHMENT_TEXTURE(txl->volume_scatter_accum),
581 GPU_ATTACHMENT_TEXTURE(txl->volume_transmittance_accum)});
614 const float clear[4] = {0.0f, 0.0f, 0.0f, 0.0f};
typedef float(TangentPoint)[2]
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct Material * BKE_object_material_get_eval(struct Object *ob, short act)
struct Material * BKE_material_default_volume(void)
Volume data-block rendering and viewport drawing utilities.
MINLINE float max_ff(float a, float b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
void mat4_to_size(float size[3], const float M[4][4])
MINLINE void copy_v3_v3_int(int r[3], const int a[3])
void BLI_halton_3d(const unsigned int prime[3], double offset[3], int n, double *r)
struct Scene * DEG_get_evaluated_scene(const struct Depsgraph *graph)
@ SCE_EEVEE_VOLUMETRIC_SHADOWS
@ SCE_EEVEE_VOLUMETRIC_LIGHTS
@ DRW_STATE_BLEND_ADD_FULL
#define DRW_PASS_CREATE(pass, state)
#define DRW_shgroup_uniform_block(shgroup, name, ubo)
#define DRW_shgroup_call(shgroup, geom, ob)
#define DRW_TEXTURE_FREE_SAFE(tex)
bScreen * ED_screen_animation_no_scrub(const struct wmWindowManager *wm)
struct GPUFrameBuffer GPUFrameBuffer
void GPU_framebuffer_bind(GPUFrameBuffer *fb)
struct GPUShader * GPU_material_get_shader(GPUMaterial *material)
bool GPU_material_has_volume_output(GPUMaterial *mat)
struct GPUShader GPUShader
void GPU_memory_barrier(eGPUBarrier barrier)
@ GPU_BARRIER_TEXTURE_FETCH
struct GPUTexture GPUTexture
void GPU_texture_compare_mode(GPUTexture *tex, bool use_compare)
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
GPUBatch * DRW_cache_fullscreen_quad_get(void)
struct DRWShadingGroup * DRW_shgroup_volume_create_sub(struct Scene *scene, struct Object *ob, struct DRWShadingGroup *shgrp, struct GPUMaterial *gpu_material)
const DRWContextState * DRW_context_state_get(void)
const float * DRW_viewport_size_get(void)
bool DRW_state_is_image_render(void)
void DRW_viewport_request_redraw(void)
DefaultTextureList * DRW_viewport_texture_list_get(void)
DRWShadingGroup * DRW_shgroup_material_create(struct GPUMaterial *material, DRWPass *pass)
float DRW_view_near_distance_get(const DRWView *view)
bool DRW_view_is_persp_get(const DRWView *view)
void DRW_shgroup_call_procedural_triangles(DRWShadingGroup *shgroup, Object *ob, uint tri_count)
DRWShadingGroup * DRW_shgroup_create(struct GPUShader *shader, DRWPass *pass)
float DRW_view_far_distance_get(const DRWView *view)
void DRW_shgroup_add_material_resources(DRWShadingGroup *grp, struct GPUMaterial *material)
void DRW_shgroup_uniform_texture_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_shgroup_uniform_image_ref(DRWShadingGroup *shgroup, const char *name, GPUTexture **tex)
void DRW_draw_pass(DRWPass *pass)
void DRW_stats_group_start(const char *name)
void DRW_stats_group_end(void)
GPUTexture * DRW_texture_create_3d(int w, int h, int d, eGPUTextureFormat format, DRWTextureFlag flags, const float *fpixels)
void DRW_texture_ensure_fullscreen_2d(GPUTexture **tex, eGPUTextureFormat format, DRWTextureFlag flags)
depth_tx normal_tx diffuse_light_tx specular_light_tx volume_light_tx environment_tx ambient_occlusion_tx aov_value_tx in_weight_img GPU_RGBA16F
#define LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d)
struct GPUShader * EEVEE_shaders_volumes_scatter_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_integration_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_accum_sh_get(void)
struct GPUMaterial * EEVEE_material_get(EEVEE_Data *vedata, struct Scene *scene, Material *ma, World *wo, int options)
struct GPUShader * EEVEE_shaders_volumes_scatter_with_lights_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_clear_sh_get(void)
struct GPUShader * EEVEE_shaders_volumes_resolve_sh_get(bool accum)
void EEVEE_volumes_cache_finish(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_volumes_set_jitter(EEVEE_ViewLayerData *sldata, uint current_sample)
void EEVEE_volumes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_volumes_free(void)
void EEVEE_volumes_compute(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
static struct @215 e_data
GPUTexture * dummy_scatter
void EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
void EEVEE_volumes_output_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, uint tot_samples)
void EEVEE_volumes_resolve(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
GPUTexture * dummy_transmit
void EEVEE_volumes_output_accumulate(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_volumes_cache_object_add(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata, Scene *scene, Object *ob)
void EEVEE_volumes_draw_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
ccl_gpu_kernel_postfix ccl_global float int int int int sh
static void clear(Message *msg)
const struct bContext * evil_C
struct Depsgraph * depsgraph
struct GPUTexture * depth
EEVEE_FramebufferList * fbl
struct GPUTexture * volume_transmit
struct GPUTexture * volume_scatter
EEVEE_EffectsFlag enabled_effects
int volume_current_sample
struct GPUFrameBuffer * volumetric_fb
struct GPUFrameBuffer * main_fb
struct GPUFrameBuffer * volumetric_scat_fb
struct GPUFrameBuffer * volumetric_integ_fb
struct GPUFrameBuffer * main_color_fb
struct GPUFrameBuffer * volumetric_accum_fb
struct DRWPass * volumetric_objects_ps
struct DRWPass * volumetric_integration_ps
struct DRWPass * volumetric_world_ps
struct DRWPass * volumetric_scatter_ps
struct DRWPass * volumetric_resolve_ps
struct DRWPass * volumetric_accum_ps
struct LightCache * light_cache
struct EEVEE_PrivateData * g_data
struct EEVEE_EffectsInfo * effects
struct GPUTexture * volume_scatter_history
struct GPUTexture * volume_prop_extinction
struct GPUTexture * volume_scatter_accum
struct GPUTexture * volume_transmittance_accum
struct GPUTexture * volume_prop_emission
struct GPUTexture * volume_transmit
struct GPUTexture * volume_transmit_history
struct GPUTexture * volume_prop_phase
struct GPUTexture * volume_prop_scattering
struct GPUTexture * volume_scatter
struct EEVEE_CommonUniformBuffer common_data
struct GPUTexture * shadow_cube_pool
struct GPUUniformBuf * combined
struct GPUUniformBuf * shadow_ubo
struct GPUUniformBuf * probe_ubo
struct GPUUniformBuf * grid_ubo
struct GPUUniformBuf * planar_ubo
struct EEVEE_ViewLayerData::@210 renderpass_ubo
struct GPUUniformBuf * common_ubo
struct GPUUniformBuf * light_ubo
struct GPUTexture * shadow_cascade_pool
LightCacheTexture grid_tx
float volumetric_light_clamp
float volumetric_sample_distribution
int volumetric_shadow_samples
struct bNodeTree * nodetree