19using blender::math::AxisSigned;
20using blender::math::CartesianBasis;
38 friend CapturePipeline;
52 Framebuffer empty_raster_fb_ = {
"empty_raster_fb_"};
54 PassSimple surfel_light_eval_ps_ = {
"LightEval"};
56 PassSimple surfel_ray_build_ps_ = {
"RayBuild"};
58 PassSimple surfel_cluster_build_ps_ = {
"RayBuild"};
60 PassSimple surfel_light_propagate_ps_ = {
"LightPropagate"};
62 PassSimple irradiance_capture_ps_ = {
"IrradianceCapture"};
64 PassSimple irradiance_offset_ps_ = {
"IrradianceOffset"};
66 PassSimple irradiance_bounds_ps_ = {
"IrradianceBounds"};
68 int radiance_src_ = 0, radiance_dst_ = 1;
78 View view_x_ = {
"BakingViewX"};
79 View view_y_ = {
"BakingViewY"};
80 View view_z_ = {
"BakingViewZ"};
102 int3 dispatch_per_grid_sample_ =
int3(1);
105 View ray_view_ = {
"RayProjectionView"};
108 Texture irradiance_L0_tx_ = {
"irradiance_L0_tx_"};
109 Texture irradiance_L1_a_tx_ = {
"irradiance_L1_a_tx_"};
110 Texture irradiance_L1_b_tx_ = {
"irradiance_L1_b_tx_"};
111 Texture irradiance_L1_c_tx_ = {
"irradiance_L1_c_tx_"};
113 Texture virtual_offset_tx_ = {
"virtual_offset_tx_"};
115 Texture cluster_list_tx_ = {
"cluster_list_tx_"};
117 Texture validity_tx_ = {
"validity_tx_"};
120 float4 scene_bound_sphere_;
122 float surfel_density_ = 1.0f;
128 float min_distance_to_surface_ = 0.05f;
134 float max_virtual_offset_ = 0.1f;
138 float clip_distance_;
141 bool capture_world_ =
false;
143 bool capture_indirect_ =
false;
145 bool capture_emission_ =
false;
148 bool do_break_ =
false;
213 Texture irradiance_atlas_tx_ = {
"irradiance_atlas_tx_"};
215 int world_brick_index_ = 0;
222 PassSimple grid_upload_ps_ = {
"VolumeProbeModule.Upload"};
224 bool do_full_update_ =
true;
228 uint irradiance_pool_size_ = 0;
230 uint irradiance_pool_size_alloc_ = 0;
233 PassSimple debug_ps_ = {
"VolumeProbeModule.Debug"};
235 draw::StorageArrayBuffer<Surfel> debug_surfels_buf_;
238 bool display_grids_enabled_ =
false;
239 PassSimple display_grids_ps_ = {
"VolumeProbeModule.Display Grids"};
242 bool do_update_world_ =
true;
254 do_update_world_ =
true;
static constexpr Value Z_POS
static constexpr Value Y_NEG
static constexpr Value Z_NEG
static constexpr Value X_NEG
static constexpr Value Y_POS
static constexpr Value X_POS
A running instance of the engine.
IrradianceBake(Instance &inst)
void surfels_lights_eval()
void irradiance_capture()
LightProbeGridCacheFrame * read_result_packed()
LightProbeGridCacheFrame * read_result_unpacked()
void surfels_create(const Object &probe_object)
void surfel_raster_views_sync(const float3 &scene_min, const float3 &scene_max, const float4x4 &probe_to_world)
friend class SphereProbeModule
void set_view(View &view)
Vector< IrradianceBrickPacked > bricks_alloc(int brick_len)
VolumeProbeModule(Instance &inst)
void bricks_free(Vector< IrradianceBrickPacked > &bricks)
void viewport_draw(View &view, gpu::FrameBuffer *view_fb)
void bind_resources(PassType &pass)
void update_world_irradiance()
#define IRRADIANCE_GRID_BUF_SLOT
#define VOLUME_PROBE_TEX_SLOT
#define IRRADIANCE_BRICK_BUF_SLOT
detail::Pass< command::DrawCommandBuf > PassSimple
draw::StorageBuffer< SurfelListInfoData > SurfelListInfoBuf
draw::StorageArrayBuffer< Surfel, 64 > SurfelBuf
draw::UniformArrayBuffer< VolumeProbeData, IRRADIANCE_GRID_MAX > VolumeProbeDataBuf
draw::StorageBuffer< CaptureInfoData > CaptureInfoBuf
draw::StorageVectorBuffer< IrradianceBrickPacked, 16 > IrradianceBrickBuf
MatBase< float, 4, 4 > float4x4
VecBase< float, 4 > float4
VecBase< int32_t, 3 > int3
VecBase< float, 3 > float3