27class SphereProbeModule;
47 Framebuffer empty_raster_fb_ = {
"empty_raster_fb_"};
49 PassSimple surfel_light_eval_ps_ = {
"LightEval"};
51 PassSimple surfel_ray_build_ps_ = {
"RayBuild"};
53 PassSimple surfel_cluster_build_ps_ = {
"RayBuild"};
55 PassSimple surfel_light_propagate_ps_ = {
"LightPropagate"};
57 PassSimple irradiance_capture_ps_ = {
"IrradianceCapture"};
59 PassSimple irradiance_offset_ps_ = {
"IrradianceOffset"};
61 PassSimple irradiance_bounds_ps_ = {
"IrradianceBounds"};
63 int radiance_src_ = 0, radiance_dst_ = 1;
73 View view_x_ = {
"BakingViewX"};
74 View view_y_ = {
"BakingViewY"};
75 View view_z_ = {
"BakingViewZ"};
88 int3 dispatch_per_grid_sample_ =
int3(1);
91 View ray_view_ = {
"RayProjectionView"};
94 Texture irradiance_L0_tx_ = {
"irradiance_L0_tx_"};
95 Texture irradiance_L1_a_tx_ = {
"irradiance_L1_a_tx_"};
96 Texture irradiance_L1_b_tx_ = {
"irradiance_L1_b_tx_"};
97 Texture irradiance_L1_c_tx_ = {
"irradiance_L1_c_tx_"};
99 Texture virtual_offset_tx_ = {
"virtual_offset_tx_"};
101 Texture cluster_list_tx_ = {
"cluster_list_tx_"};
103 Texture validity_tx_ = {
"validity_tx_"};
106 float4 scene_bound_sphere_;
108 float surfel_density_ = 1.0f;
114 float min_distance_to_surface_ = 0.05f;
120 float max_virtual_offset_ = 0.1f;
124 float clip_distance_;
127 bool capture_world_ =
false;
129 bool capture_indirect_ =
false;
131 bool capture_emission_ =
false;
134 bool do_break_ =
false;
199 Texture irradiance_atlas_tx_ = {
"irradiance_atlas_tx_"};
201 int world_brick_index_ = 0;
206 Vector<IrradianceBrickPacked> brick_pool_;
208 PassSimple grid_upload_ps_ = {
"VolumeProbeModule.Upload"};
210 bool do_full_update_ =
true;
214 uint irradiance_pool_size_ = 0;
216 uint irradiance_pool_size_alloc_ = 0;
219 PassSimple debug_ps_ = {
"VolumeProbeModule.Debug"};
221 draw::StorageArrayBuffer<Surfel> debug_surfels_buf_;
224 bool display_grids_enabled_ =
false;
225 PassSimple display_grids_ps_ = {
"VolumeProbeModule.Display Grids"};
228 bool do_update_world_ =
true;
240 do_update_world_ =
true;
257 void debug_pass_draw(
View &view, GPUFrameBuffer *view_fb);
258 void display_pass_draw(
View &view, GPUFrameBuffer *view_fb);
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)
void set_view(View &view)
Vector< IrradianceBrickPacked > bricks_alloc(int brick_len)
VolumeProbeModule(Instance &inst)
void bricks_free(Vector< IrradianceBrickPacked > &bricks)
void bind_resources(PassType &pass)
void update_world_irradiance()
void viewport_draw(View &view, GPUFrameBuffer *view_fb)
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
#define IRRADIANCE_GRID_BUF_SLOT
#define VOLUME_PROBE_TEX_SLOT
#define IRRADIANCE_BRICK_BUF_SLOT
detail::Pass< command::DrawCommandBuf > PassSimple
draw::StorageVectorBuffer< IrradianceBrickPacked, 16 > IrradianceBrickBuf
VecBase< int32_t, 3 > int3