EEVEE Next: Volumes #107176

Merged
Miguel Pozo merged 126 commits from pragma37/blender:pull-eevee-next-volumes into main 2023-08-04 16:47:22 +02:00
4 changed files with 39 additions and 22 deletions
Showing only changes of commit f06a64d768 - Show all commits

View File

@ -138,10 +138,10 @@
#define GBUF_CLOSURE_SLOT 3
#define GBUF_COLOR_SLOT 4
/* Volume properties pass do not write to rbufs. Reuse the same bind points. */
#define VOLUME_PROP_SCATTERING_TEX_SLOT 0
#define VOLUME_PROP_EXTINCTION_TEX_SLOT 1
#define VOLUME_PROP_EMISSION_TEX_SLOT 2
#define VOLUME_PROP_PHASE_TEX_SLOT 3
#define VOLUME_PROP_SCATTERING_IMG_SLOT 0
#define VOLUME_PROP_EXTINCTION_IMG_SLOT 1
#define VOLUME_PROP_EMISSION_IMG_SLOT 2
#define VOLUME_PROP_PHASE_IMG_SLOT 3
/* Uniform Buffers. */
/* Slot 0 is GPU_NODE_TREE_UBO_SLOT. */

View File

@ -110,10 +110,10 @@ class VolumeModule {
template<typename PassType> void bind_properties_buffers(PassType &ps)
{
ps.bind_ubo(VOLUMES_INFO_BUF_SLOT, data_);
ps.bind_image(VOLUME_PROP_SCATTERING_TEX_SLOT, &prop_scattering_tx_);
ps.bind_image(VOLUME_PROP_EXTINCTION_TEX_SLOT, &prop_extinction_tx_);
ps.bind_image(VOLUME_PROP_EMISSION_TEX_SLOT, &prop_emission_tx_);
ps.bind_image(VOLUME_PROP_PHASE_TEX_SLOT, &prop_phase_tx_);
ps.bind_image(VOLUME_PROP_SCATTERING_IMG_SLOT, &prop_scattering_tx_);
ps.bind_image(VOLUME_PROP_EXTINCTION_IMG_SLOT, &prop_extinction_tx_);
ps.bind_image(VOLUME_PROP_EMISSION_IMG_SLOT, &prop_emission_tx_);
ps.bind_image(VOLUME_PROP_PHASE_IMG_SLOT, &prop_phase_tx_);
}
int3 grid_size()

View File

@ -223,22 +223,22 @@ GPU_SHADER_CREATE_INFO(eevee_volume_material_common)
GPU_SHADER_CREATE_INFO(eevee_volume_object)
.define("MAT_GEOM_VOLUME_OBJECT")
.push_constant(Type::IVEC3, "grid_coords_min")
.image(VOLUME_PROP_SCATTERING_TEX_SLOT,
.image(VOLUME_PROP_SCATTERING_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::READ_WRITE,
ImageType::FLOAT_3D,
"out_scattering_img")
.image(VOLUME_PROP_EXTINCTION_TEX_SLOT,
.image(VOLUME_PROP_EXTINCTION_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::READ_WRITE,
ImageType::FLOAT_3D,
"out_extinction_img")
.image(VOLUME_PROP_EMISSION_TEX_SLOT,
.image(VOLUME_PROP_EMISSION_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::READ_WRITE,
ImageType::FLOAT_3D,
"out_emissive_img")
.image(VOLUME_PROP_PHASE_TEX_SLOT,
.image(VOLUME_PROP_PHASE_IMG_SLOT,
GPU_RG16F,
Qualifier::READ_WRITE,
ImageType::FLOAT_3D,
@ -246,22 +246,22 @@ GPU_SHADER_CREATE_INFO(eevee_volume_object)
.additional_info("eevee_volume_material_common");
GPU_SHADER_CREATE_INFO(eevee_volume_world)
.image(VOLUME_PROP_SCATTERING_TEX_SLOT,
.image(VOLUME_PROP_SCATTERING_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::WRITE,
ImageType::FLOAT_3D,
"out_scattering_img")
.image(VOLUME_PROP_EXTINCTION_TEX_SLOT,
.image(VOLUME_PROP_EXTINCTION_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::WRITE,
ImageType::FLOAT_3D,
"out_extinction_img")
.image(VOLUME_PROP_EMISSION_TEX_SLOT,
.image(VOLUME_PROP_EMISSION_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::WRITE,
ImageType::FLOAT_3D,
"out_emissive_img")
.image(VOLUME_PROP_PHASE_TEX_SLOT,
.image(VOLUME_PROP_PHASE_IMG_SLOT,
GPU_RG16F,
Qualifier::WRITE,
ImageType::FLOAT_3D,

View File

@ -12,6 +12,28 @@ GPU_SHADER_CREATE_INFO(eevee_volume_lib)
.sampler(VOLUME_SCATTERING_TEX_SLOT, ImageType::FLOAT_3D, "volume_scattering_tx")
.sampler(VOLUME_TRANSMITTANCE_TEX_SLOT, ImageType::FLOAT_3D, "volume_transmittance_tx");
GPU_SHADER_CREATE_INFO(eevee_volume_properties_data)
.image(VOLUME_PROP_SCATTERING_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::READ,
ImageType::FLOAT_3D,
"in_scattering_img")
.image(VOLUME_PROP_EXTINCTION_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::READ,
ImageType::FLOAT_3D,
"in_extinction_img")
.image(VOLUME_PROP_EMISSION_IMG_SLOT,
GPU_R11F_G11F_B10F,
Qualifier::READ,
ImageType::FLOAT_3D,
"in_emission_img")
.image(VOLUME_PROP_PHASE_IMG_SLOT,
GPU_RG16F,
Qualifier::READ,
ImageType::FLOAT_3D,
"in_phase_img");
GPU_SHADER_CREATE_INFO(eevee_volume_scatter)
.additional_info("eevee_shared")
.additional_info("draw_resource_id_varying")
@ -23,12 +45,7 @@ GPU_SHADER_CREATE_INFO(eevee_volume_scatter)
.local_group_size(VOLUME_GROUP_SIZE, VOLUME_GROUP_SIZE, VOLUME_GROUP_SIZE)
.define("VOLUME_SHADOW")
.uniform_buf(VOLUMES_INFO_BUF_SLOT, "VolumesInfoData", "volumes_info_buf")
/* Inputs. */
.image(0, GPU_R11F_G11F_B10F, Qualifier::READ, ImageType::FLOAT_3D, "in_scattering_img")
.image(1, GPU_R11F_G11F_B10F, Qualifier::READ, ImageType::FLOAT_3D, "in_extinction_img")
.image(2, GPU_R11F_G11F_B10F, Qualifier::READ, ImageType::FLOAT_3D, "in_emission_img")
.image(3, GPU_RG16F, Qualifier::READ, ImageType::FLOAT_3D, "in_phase_img")
/* Outputs. */
.additional_info("eevee_volume_properties_data")
.image(4, GPU_R11F_G11F_B10F, Qualifier::WRITE, ImageType::FLOAT_3D, "out_scattering_img")
.image(5, GPU_R11F_G11F_B10F, Qualifier::WRITE, ImageType::FLOAT_3D, "out_extinction_img")
.do_static_compilation(true);