EEVEE Next: Volumes #107176
|
@ -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. */
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue