Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/eevee/eevee_volumes.c
| Show First 20 Lines • Show All 135 Lines • ▼ Show 20 Lines | static void eevee_create_shader_volumes(void) | ||||
| e_data.volumetric_resolve_sh = DRW_shader_create_with_lib(datatoc_common_fullscreen_vert_glsl, | e_data.volumetric_resolve_sh = DRW_shader_create_with_lib(datatoc_common_fullscreen_vert_glsl, | ||||
| NULL, | NULL, | ||||
| datatoc_volumetric_resolve_frag_glsl, | datatoc_volumetric_resolve_frag_glsl, | ||||
| e_data.volumetric_common_lib, | e_data.volumetric_common_lib, | ||||
| NULL); | NULL); | ||||
| e_data.volumetric_accum_sh = DRW_shader_create_fullscreen(datatoc_volumetric_accum_frag_glsl, | e_data.volumetric_accum_sh = DRW_shader_create_fullscreen(datatoc_volumetric_accum_frag_glsl, | ||||
| NULL); | NULL); | ||||
| float color[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | const float density[4] = {1.0f, 1.0f, 1.0f, 1.0f}; | ||||
| e_data.dummy_density = DRW_texture_create_3d(1, 1, 1, GPU_RGBA8, DRW_TEX_WRAP, color); | e_data.dummy_density = DRW_texture_create_3d(1, 1, 1, GPU_RGBA8, DRW_TEX_WRAP, density); | ||||
| float flame = 0.0f; | const float flame = 0.0f; | ||||
| e_data.dummy_flame = DRW_texture_create_3d(1, 1, 1, GPU_R8, DRW_TEX_WRAP, &flame); | e_data.dummy_flame = DRW_texture_create_3d(1, 1, 1, GPU_R8, DRW_TEX_WRAP, &flame); | ||||
| } | } | ||||
| void EEVEE_volumes_set_jitter(EEVEE_ViewLayerData *sldata, uint current_sample) | void EEVEE_volumes_set_jitter(EEVEE_ViewLayerData *sldata, uint current_sample) | ||||
| { | { | ||||
| EEVEE_CommonUniformBuffer *common_data = &sldata->common_data; | EEVEE_CommonUniformBuffer *common_data = &sldata->common_data; | ||||
| double ht_point[3]; | double ht_point[3]; | ||||
| ▲ Show 20 Lines • Show All 207 Lines • ▼ Show 20 Lines | if (grp) { | ||||
| DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo); | DRW_shgroup_uniform_block(grp, "planar_block", sldata->planar_ubo); | ||||
| DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo); | DRW_shgroup_uniform_block(grp, "light_block", sldata->light_ubo); | ||||
| DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo); | DRW_shgroup_uniform_block(grp, "shadow_block", sldata->shadow_ubo); | ||||
| DRW_shgroup_uniform_block( | DRW_shgroup_uniform_block( | ||||
| grp, "renderpass_block", EEVEE_material_default_render_pass_ubo_get(sldata)); | grp, "renderpass_block", EEVEE_material_default_render_pass_ubo_get(sldata)); | ||||
| /* Fix principle volumetric not working with world materials. */ | /* Fix principle volumetric not working with world materials. */ | ||||
| DRW_shgroup_uniform_texture(grp, "sampdensity", e_data.dummy_density); | DRW_shgroup_uniform_texture(grp, "sampdensity", e_data.dummy_density); | ||||
| DRW_shgroup_uniform_texture(grp, "sampcolor", e_data.dummy_density); | |||||
| DRW_shgroup_uniform_texture(grp, "sampflame", e_data.dummy_flame); | DRW_shgroup_uniform_texture(grp, "sampflame", e_data.dummy_flame); | ||||
| DRW_shgroup_uniform_vec2_copy(grp, "unftemperature", (float[2]){0.0f, 1.0f}); | DRW_shgroup_uniform_vec2_copy(grp, "unftemperature", (float[2]){0.0f, 1.0f}); | ||||
| DRW_shgroup_call_procedural_triangles(grp, NULL, common_data->vol_tex_size[2]); | DRW_shgroup_call_procedural_triangles(grp, NULL, common_data->vol_tex_size[2]); | ||||
| effects->enabled_effects |= (EFFECT_VOLUMETRIC | EFFECT_POST_BUFFER); | effects->enabled_effects |= (EFFECT_VOLUMETRIC | EFFECT_POST_BUFFER); | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | if (mds->fluid && (mds->type == FLUID_DOMAIN_TYPE_GAS) /* && show_smoke */) { | ||||
| } | } | ||||
| else if (mds->flags & FLUID_DOMAIN_USE_NOISE) { | else if (mds->flags & FLUID_DOMAIN_USE_NOISE) { | ||||
| GPU_create_smoke(mmd, 1); | GPU_create_smoke(mmd, 1); | ||||
| } | } | ||||
| BLI_addtail(&e_data.smoke_domains, BLI_genericNodeN(mmd)); | BLI_addtail(&e_data.smoke_domains, BLI_genericNodeN(mmd)); | ||||
| } | } | ||||
| DRW_shgroup_uniform_texture_ref( | DRW_shgroup_uniform_texture_ref( | ||||
| grp, "sampdensity", mds->tex ? &mds->tex : &e_data.dummy_density); | grp, "sampdensity", mds->tex_density ? &mds->tex_density : &e_data.dummy_density); | ||||
| DRW_shgroup_uniform_texture_ref( | |||||
| grp, "sampcolor", mds->tex_color ? &mds->tex_color : &e_data.dummy_density); | |||||
| DRW_shgroup_uniform_texture_ref( | DRW_shgroup_uniform_texture_ref( | ||||
| grp, "sampflame", mds->tex_flame ? &mds->tex_flame : &e_data.dummy_flame); | grp, "sampflame", mds->tex_flame ? &mds->tex_flame : &e_data.dummy_flame); | ||||
| /* Constant Volume color. */ | /* Constant Volume color. */ | ||||
| bool use_constant_color = ((mds->active_fields & FLUID_DOMAIN_ACTIVE_COLORS) == 0 && | bool use_constant_color = ((mds->active_fields & FLUID_DOMAIN_ACTIVE_COLORS) == 0 && | ||||
| (mds->active_fields & FLUID_DOMAIN_ACTIVE_COLOR_SET) != 0); | (mds->active_fields & FLUID_DOMAIN_ACTIVE_COLOR_SET) != 0); | ||||
| DRW_shgroup_uniform_vec3( | DRW_shgroup_uniform_vec3( | ||||
| grp, "volumeColor", (use_constant_color) ? mds->active_color : white, 1); | grp, "volumeColor", (use_constant_color) ? mds->active_color : white, 1); | ||||
| /* Output is such that 0..1 maps to 0..1000K */ | /* Output is such that 0..1 maps to 0..1000K */ | ||||
| DRW_shgroup_uniform_vec2(grp, "unftemperature", &mds->flame_ignition, 1); | DRW_shgroup_uniform_vec2(grp, "unftemperature", &mds->flame_ignition, 1); | ||||
| } | } | ||||
| else { | else { | ||||
| DRW_shgroup_uniform_texture(grp, "sampdensity", e_data.dummy_density); | DRW_shgroup_uniform_texture(grp, "sampdensity", e_data.dummy_density); | ||||
| DRW_shgroup_uniform_texture(grp, "sampcolor", e_data.dummy_density); | |||||
| DRW_shgroup_uniform_texture(grp, "sampflame", e_data.dummy_flame); | DRW_shgroup_uniform_texture(grp, "sampflame", e_data.dummy_flame); | ||||
| DRW_shgroup_uniform_vec3(grp, "volumeColor", white, 1); | DRW_shgroup_uniform_vec3(grp, "volumeColor", white, 1); | ||||
| DRW_shgroup_uniform_vec2(grp, "unftemperature", (float[2]){0.0f, 1.0f}, 1); | DRW_shgroup_uniform_vec2(grp, "unftemperature", (float[2]){0.0f, 1.0f}, 1); | ||||
| } | } | ||||
| /* TODO Reduce to number of slices intersecting. */ | /* TODO Reduce to number of slices intersecting. */ | ||||
| /* TODO Preemptive culling. */ | /* TODO Preemptive culling. */ | ||||
| DRW_shgroup_call_procedural_triangles(grp, ob, sldata->common_data.vol_tex_size[2]); | DRW_shgroup_call_procedural_triangles(grp, ob, sldata->common_data.vol_tex_size[2]); | ||||
| ▲ Show 20 Lines • Show All 316 Lines • Show Last 20 Lines | |||||