@woosh/meep-engine 3.53.0 → 3.55.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
- package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
- package/src/core/math/noise/worley_noise_2d.js +74 -0
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
- package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
- package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
- package/src/engine/{graphics3/decal/DecalAtlasFill.d.ts → graphics/texture/atlas/SpriteAtlasFill.d.ts} +4 -4
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
- package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
- package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
- package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
- package/src/engine/{graphics3/decal/decal_atlas_border.d.ts → graphics/texture/atlas/sprite_atlas_border.d.ts} +12 -12
- package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
- package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
- package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DecalSystem.js +447 -450
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -22
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +892 -951
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/generation/foliage/FOLIAGE_DESIGN.md +2 -1
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts +4 -3
- package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/BarkMaterialConfig.js +6 -6
- package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
- package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
- package/src/generation/foliage/config/FoliageBarkType.js +16 -0
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +58 -5
- package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
- package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -181
- package/src/generation/foliage/index.d.ts +2 -1
- package/src/generation/foliage/index.js +44 -43
- package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_bark_material.js +23 -95
- package/src/generation/foliage/material/make_foliage_material.d.ts +29 -3
- package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
- package/src/generation/foliage/material/make_foliage_material.js +605 -359
- package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -1
- package/src/generation/foliage/mesh/branch_collar_project.js +205 -203
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +15 -0
- package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
- package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -502
- package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -1047
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +2 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
- package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -415
- package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
- package/src/generation/foliage/presets/make_tree_species_preset.js +870 -837
- package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -121
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +10 -7
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -179
- package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
- package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -1104
- package/src/shade/RENDERER_CONTRACT.md +5 -2
- package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -1
- package/src/shade/device/SHADE_DEVICE_FLOOR.js +2 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts +6 -0
- package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
- package/src/shade/playground/foliage_wind/foliage_world.js +602 -593
- package/src/shade/playground/foliage_wind/index.html +260 -254
- package/src/shade/playground/foliage_wind/main.js +275 -263
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +1 -1
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
- package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
- package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
- package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
- package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
- package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
- package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
- package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +67 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
- package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +4 -3
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
- package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +21 -38
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +154 -147
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +2 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +5 -1
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +8 -0
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +10 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +5 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts +22 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.js +33 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts +22 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.js +56 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts +13 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.js +42 -0
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +2 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +382 -357
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +414 -410
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -7
- package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +36 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +129 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +370 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
- package/src/engine/graphics3/decal/DecalAtlas.d.ts +0 -43
- package/src/engine/graphics3/decal/DecalAtlas.d.ts.map +0 -1
- package/src/engine/graphics3/decal/DecalAtlasFill.d.ts.map +0 -1
- package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
- package/src/engine/graphics3/decal/decal_atlas_border.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts +0 -26
- package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.js +0 -268
- package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts +0 -3
- package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/ssr/copy_shader_f32.js +0 -32
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +0 -17
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +0 -98
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +0 -23
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +0 -118
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +0 -15
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +0 -17
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts +0 -35
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +0 -35
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts +0 -10
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +0 -28
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +0 -48
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +0 -28
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +0 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
|
@@ -1,27 +1,30 @@
|
|
|
1
|
-
import { RenderPipelineDescriptor } from "../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
|
|
2
1
|
import { DepthStencilState } from "../../../descriptor/pipeline/render/DepthStencilState.js";
|
|
3
|
-
import {
|
|
2
|
+
import { RenderPipelineDescriptor } from "../../../descriptor/pipeline/render/RenderPipelineDescriptor.js";
|
|
4
3
|
import { CAMERA_UNIFORM_STRUCT } from "../../camera/CAMERA_UNIFORM_STRUCT.js";
|
|
5
4
|
import { chunk_sample_volumetrics } from "../../deferred/chunk_sample_volumetrics.js";
|
|
6
5
|
import { AVBOIT_EXTINCT_TRANSMITTANCE } from "../../rasterize/native/avboit/AVBOIT_CONSTANTS.js";
|
|
7
|
-
import { AVBOIT_WARP_STRUCT } from "../../rasterize/native/avboit/AVBOIT_WARP_STRUCT.js";
|
|
8
6
|
import { AVBOIT_DRAW_TARGETS } from "../../rasterize/native/avboit/avboit_draw_fragment_body.js";
|
|
9
|
-
import {
|
|
7
|
+
import { AVBOIT_WARP_STRUCT } from "../../rasterize/native/avboit/AVBOIT_WARP_STRUCT.js";
|
|
10
8
|
import { chunk_avboit_footprint_bias } from "../../rasterize/native/avboit/chunk_avboit_footprint_bias.js";
|
|
11
9
|
import { chunk_avboit_sample_transmittance } from "../../rasterize/native/avboit/chunk_avboit_sample_transmittance.js";
|
|
12
|
-
import {
|
|
10
|
+
import { chunk_avboit_view_depth_to_virtual } from "../../rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js";
|
|
13
11
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
14
12
|
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
13
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
14
|
+
import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
|
|
15
15
|
import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
16
|
-
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
17
16
|
import { chunk_view_mip_bias } from "../../view/chunk_view_mip_bias.js";
|
|
17
|
+
import { VIEW_UNIFORM_STRUCT } from "../../view/VIEW_UNIFORM_STRUCT.js";
|
|
18
|
+
import {
|
|
19
|
+
irradiance_clipmap_add_resources
|
|
20
|
+
} from "../../volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js";
|
|
18
21
|
import { VOLUMETRICS_METADATA_STRUCT } from "../../volumetrics/VOLUMETRICS_METADATA_STRUCT.js";
|
|
19
22
|
import { EMITTER_FLAG } from "../data/PARTICLE_EMITTER_STRUCT.js";
|
|
20
23
|
import { PARTICLE_SOFT_FADE_RANGE } from "../ParticleConstants.js";
|
|
21
24
|
import { chunk_particle_avboit_contribution } from "./chunk_particle_avboit_contribution.js";
|
|
22
|
-
import { chunk_particle_scene_view_depth } from "./chunk_particle_scene_view_depth.js";
|
|
23
25
|
import { chunk_particle_billboard_vertex } from "./chunk_particle_billboard_vertex.js";
|
|
24
26
|
import { chunk_particle_lighting } from "./chunk_particle_lighting.js";
|
|
27
|
+
import { chunk_particle_scene_view_depth } from "./chunk_particle_scene_view_depth.js";
|
|
25
28
|
|
|
26
29
|
/**
|
|
27
30
|
* The particles' AVBOIT draw: the billboard quads at internal resolution, depth-tested against the
|
|
@@ -30,28 +33,13 @@ import { chunk_particle_lighting } from "./chunk_particle_lighting.js";
|
|
|
30
33
|
*
|
|
31
34
|
* Per fragment: the atlas sample times the particle colour, the soft-depth fade against the scene
|
|
32
35
|
* depth, lighting for an emitter flagged `EMITTER_FLAG.LIGHTING` (`chunk_particle_lighting`: the
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* and a fragment the volume already calls extinct is discarded unshaded. An emitter without the
|
|
36
|
-
* flag is its own colour, which is what an additive one wants.
|
|
37
|
-
*
|
|
38
|
-
* What is written depends on how the particle blends:
|
|
39
|
-
*
|
|
40
|
-
* - **alpha / premultiplied** — a surface: `color += premultiplied × T`, `norm += coverage × T`,
|
|
41
|
-
* `extinction += -log(1 - coverage)`, the same three the meshes write, with an untinted
|
|
42
|
-
* `T_self = 1 - coverage`; the splat recorded exactly that.
|
|
43
|
-
* - **additive** — light: `emission += premultiplied × T`, nothing else. It joins the resolve
|
|
44
|
-
* attenuated by what is in front of it and outside the coverage normalization, which is what an
|
|
45
|
-
* additive fragment means.
|
|
46
|
-
*
|
|
47
|
-
* The scene depth is bound twice: as the read-only depth attachment the pipeline tests against, and
|
|
48
|
-
* as the texture the soft fade reads. Both are reads, which WebGPU allows within one pass; the pass
|
|
49
|
-
* is recorded with the attachment read-only for that reason.
|
|
36
|
+
* world-space irradiance clipmap and cached far-field SH), the volumetric fog composite, then the
|
|
37
|
+
* transmittance of everything in front from the integral texture.
|
|
50
38
|
*/
|
|
51
39
|
|
|
52
40
|
const resources = new ShaderResourceSetDescriptor();
|
|
53
41
|
|
|
54
|
-
resources.createGroup()
|
|
42
|
+
const group = resources.createGroup()
|
|
55
43
|
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
56
44
|
.addUniform("view", VIEW_UNIFORM_STRUCT)
|
|
57
45
|
.addStorageBuffer("warp", AVBOIT_WARP_STRUCT)
|
|
@@ -67,10 +55,10 @@ resources.createGroup()
|
|
|
67
55
|
// volumetrics (composited inline)
|
|
68
56
|
.addUniform("volumetrics_metadata", VOLUMETRICS_METADATA_STRUCT)
|
|
69
57
|
.addTexture("tVolumetrics", "float", "3d")
|
|
70
|
-
.addTexture("tSTBN_vec3", "float", "3d")
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
58
|
+
.addTexture("tSTBN_vec3", "float", "3d");
|
|
59
|
+
|
|
60
|
+
// lighting (chunk_particle_lighting): world-space irradiance clipmap + cached far-field SH fallback
|
|
61
|
+
irradiance_clipmap_add_resources(group, { include_far_field: true });
|
|
74
62
|
|
|
75
63
|
const body = CodeChunk.from(
|
|
76
64
|
/* language=wgsl */ `
|
|
@@ -111,16 +99,11 @@ fn vs_general(@builtin(vertex_index) vi : u32, @builtin(instance_index) ii : u32
|
|
|
111
99
|
|
|
112
100
|
@fragment
|
|
113
101
|
fn fs_main(in : ParticleVertexOut) -> ParticleAVBOITDrawOutput {
|
|
114
|
-
let screen_uv = in.clip.xy / vec2<f32>(f32(view.width), f32(view.height));
|
|
115
|
-
let uv_bias = view_uv_derivative_bias(view.upscale_ratio);
|
|
116
|
-
let uv_ddx = dpdx(in.uv) * uv_bias.x;
|
|
102
|
+
let screen_uv = in.clip.xy / vec2<f32>(f32(view.width), f32(view.height));
|
|
103
|
+
let uv_bias = view_uv_derivative_bias(view.upscale_ratio);
|
|
104
|
+
let uv_ddx = dpdx(in.uv) * uv_bias.x;
|
|
117
105
|
let uv_ddy = dpdy(in.uv) * uv_bias.y;
|
|
118
106
|
|
|
119
|
-
// a billboard, stretched or not, is built from the camera's right and up and lies in the view plane,
|
|
120
|
-
// so its footprint is zero; a horizontal, vertical or world-facing quad seen at an angle runs
|
|
121
|
-
// through depth across a voxel (avboit_footprint_bias). An additive particle writes nothing into
|
|
122
|
-
// the volume, so nothing of its own is there to occlude it, and takes none. The derivative is
|
|
123
|
-
// taken here, in uniform control flow, whatever the blend
|
|
124
107
|
let footprint = select(
|
|
125
108
|
avboit_footprint_bias(&warp, fwidth(avboit_view_depth_to_virtual(&warp, in.view_depth))),
|
|
126
109
|
0.0,
|
|
@@ -170,7 +153,7 @@ fn fs_main(in : ParticleVertexOut) -> ParticleAVBOITDrawOutput {
|
|
|
170
153
|
chunk_sample_volumetrics,
|
|
171
154
|
chunk_avboit_view_depth_to_virtual,
|
|
172
155
|
chunk_avboit_footprint_bias,
|
|
173
|
-
chunk_avboit_sample_transmittance,
|
|
156
|
+
chunk_avboit_sample_transmittance,
|
|
174
157
|
chunk_view_mip_bias,
|
|
175
158
|
]);
|
|
176
159
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment_shader_denoise_ao.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fragment_shader_denoise_ao.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js"],"names":[],"mappings":"AAaA,kDAEG;AAsHH;;;GAGG;AACH,yCAFU,gBAAgB,CAMvB;AAEH,2DAWE;6BAxJ2B,mCAAmC;iCAQ/B,kCAAkC;4BAFvC,6BAA6B"}
|
|
@@ -1,148 +1,155 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
.addTexture("
|
|
25
|
-
.addTexture("
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
let
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// with
|
|
57
|
-
|
|
58
|
-
var
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
let
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
vec2(
|
|
67
|
-
vec2(
|
|
68
|
-
vec2( -1
|
|
69
|
-
vec2(
|
|
70
|
-
vec2(
|
|
71
|
-
vec2(
|
|
72
|
-
vec2(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
let
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
let
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
let
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
//
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
*
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
1
|
+
import { DEPTH_STENCIL_FOREGROUND_ONLY } from "../../depth/DEPTH_STENCIL_FOREGROUND_ONLY.js";
|
|
2
|
+
import { i32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
|
+
import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
|
|
4
|
+
import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
5
|
+
import {
|
|
6
|
+
chunk_texture_channel_compute_variance_center
|
|
7
|
+
} from "../../shader/chunk/texture/chunk_texture_channel_compute_variance_center.js";
|
|
8
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
9
|
+
import { ImageShader } from "../../shader/ImageShader.js";
|
|
10
|
+
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
11
|
+
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
12
|
+
import { chunk_compute_edge_stopping_weight } from "../../shader/chunk/filter/chunk_compute_edge_stopping_weight.js";
|
|
13
|
+
|
|
14
|
+
export const ATORUS_UNIFORMS_STRUCT = WebGPUStruct.from({
|
|
15
|
+
step_size: i32
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
19
|
+
|
|
20
|
+
// per-pass, four bytes, read-only: immediate data rather than a uniform buffer
|
|
21
|
+
resources.setImmediate("settings", ATORUS_UNIFORMS_STRUCT);
|
|
22
|
+
|
|
23
|
+
resources.createGroup()
|
|
24
|
+
.addTexture("tInput")
|
|
25
|
+
.addTexture("tDepth")
|
|
26
|
+
.addTexture("tNormal", "uint");
|
|
27
|
+
|
|
28
|
+
const body = CodeChunk.from(
|
|
29
|
+
//language=WGSL
|
|
30
|
+
`
|
|
31
|
+
const phi_visibility = 4.0;
|
|
32
|
+
const phi_normal = 128.0;
|
|
33
|
+
const sigma_depth = 1.0;
|
|
34
|
+
|
|
35
|
+
@fragment
|
|
36
|
+
fn main(
|
|
37
|
+
@builtin(position) coord: vec4<f32>,
|
|
38
|
+
) -> @location(0) vec2<f32>{
|
|
39
|
+
let ipos = vec2<i32>(coord.xy);
|
|
40
|
+
let screen_size = vec2<i32>(textureDimensions(tInput));
|
|
41
|
+
|
|
42
|
+
const eps_variance = 1e-10;
|
|
43
|
+
const kernel_weights = array<f32,3>( 1.0, 2.0 / 3.0, 1.0 / 6.0 );
|
|
44
|
+
|
|
45
|
+
// constant samplers to prevent the compiler from generating code which
|
|
46
|
+
// fetches the sampler descriptor from memory for each texture access
|
|
47
|
+
let center_visibility = textureLoad(tInput, ipos, 0).rg;
|
|
48
|
+
|
|
49
|
+
// variance estimate from per-pixel moments, filtered using 3x3 gaussian blur
|
|
50
|
+
let variance = texture_channel_compute_variance_center( ipos, tInput);
|
|
51
|
+
|
|
52
|
+
let std_dev = sqrt(max(0.0, eps_variance + variance));
|
|
53
|
+
|
|
54
|
+
let phi_visibility = phi_visibility * std_dev;
|
|
55
|
+
|
|
56
|
+
// explicitly store/accumulate center pixel with weight 1 to prevent issues
|
|
57
|
+
// with the edge-stopping functions
|
|
58
|
+
var sum_w_visibility = 1.0;
|
|
59
|
+
var sum_visibility = center_visibility;
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
let current_normal = decode_g_buffer_normal(textureLoad(tNormal, ipos, 0).xy);
|
|
63
|
+
let center_depth = textureLoad(tDepth, ipos, 0).r;
|
|
64
|
+
|
|
65
|
+
const offsets = array< vec2<i32>,8>(
|
|
66
|
+
vec2( -1, -1 ),
|
|
67
|
+
vec2( 0, -1 ) ,
|
|
68
|
+
vec2( 1, -1 ),
|
|
69
|
+
vec2( -1, 0 ),
|
|
70
|
+
vec2( 1, 0 ),
|
|
71
|
+
vec2( -1, 1 ),
|
|
72
|
+
vec2( 0, 1 ),
|
|
73
|
+
vec2( 1, 1 ),
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
const num_samples = 8;
|
|
77
|
+
|
|
78
|
+
for(var i=0; i< num_samples; i++){
|
|
79
|
+
let offset = offsets[i];
|
|
80
|
+
|
|
81
|
+
let xx = offset.x;
|
|
82
|
+
let yy = offset.y;
|
|
83
|
+
|
|
84
|
+
let p = ipos + offset * settings.step_size;
|
|
85
|
+
let inside = all(p >= vec2(0, 0)) && all(p < screen_size);
|
|
86
|
+
|
|
87
|
+
if(!inside){
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let kernel = kernel_weights[ abs(xx) ] * kernel_weights[ abs(yy) ];
|
|
92
|
+
|
|
93
|
+
let sample_visibility = textureLoad(tInput, p, 0).rg;
|
|
94
|
+
|
|
95
|
+
let sample_normal = decode_g_buffer_normal(textureLoad(tNormal, p, 0).xy);
|
|
96
|
+
let sample_depth = textureLoad(tDepth, p, 0).r;
|
|
97
|
+
|
|
98
|
+
// compute the edge-stopping functions
|
|
99
|
+
let w = compute_edge_stopping_weight(
|
|
100
|
+
center_depth,
|
|
101
|
+
sample_depth,
|
|
102
|
+
sigma_depth,
|
|
103
|
+
|
|
104
|
+
current_normal,
|
|
105
|
+
sample_normal,
|
|
106
|
+
phi_normal,
|
|
107
|
+
|
|
108
|
+
center_visibility.r,
|
|
109
|
+
sample_visibility.r,
|
|
110
|
+
phi_visibility
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
let w_visibility = w * kernel;
|
|
114
|
+
|
|
115
|
+
// both channels carry moments (E[X], E[X²]) - average linearly so the
|
|
116
|
+
// pair remains a valid moment estimate that downstream get_std_dev can interpret.
|
|
117
|
+
sum_w_visibility += w_visibility;
|
|
118
|
+
sum_visibility += w_visibility * sample_visibility;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// output first two moments
|
|
122
|
+
let out_visibility = sum_visibility / sum_w_visibility;
|
|
123
|
+
|
|
124
|
+
return out_visibility;
|
|
125
|
+
}
|
|
126
|
+
`,
|
|
127
|
+
[
|
|
128
|
+
ATORUS_UNIFORMS_STRUCT.declaration_chunk,
|
|
129
|
+
chunk_texture_channel_compute_variance_center,
|
|
130
|
+
chunk_decode_g_buffer_normal,
|
|
131
|
+
chunk_compute_edge_stopping_weight,
|
|
132
|
+
]);
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Based on REBLUR paper, a type of Gaussian blur with edge-stopping
|
|
136
|
+
* @type {ShaderDescriptor}
|
|
137
|
+
*/
|
|
138
|
+
export const fragment_shader_denoise_ao = ShaderDescriptor.from({
|
|
139
|
+
label: "A-torus Denoise",
|
|
140
|
+
resources,
|
|
141
|
+
body
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
export const shader_denoise_luminance_spatial = ImageShader.from({
|
|
145
|
+
descriptor: fragment_shader_denoise_ao,
|
|
146
|
+
depthStencil: DEPTH_STENCIL_FOREGROUND_ONLY,
|
|
147
|
+
targets: [
|
|
148
|
+
{
|
|
149
|
+
format: "rg16float",
|
|
150
|
+
// Background is skipped, so it keeps the clear: moments of visibility 1 (not occluded), zero variance.
|
|
151
|
+
// Downstream neighbourhoods read across silhouettes and must see background as unoccluded.
|
|
152
|
+
clearValue: [1, 1],
|
|
153
|
+
}
|
|
154
|
+
]
|
|
148
155
|
})
|
|
@@ -24,6 +24,7 @@ export class GTAO {
|
|
|
24
24
|
* @param {FrameGraph} graph
|
|
25
25
|
* @param {number} camera
|
|
26
26
|
* @param {number} input_depth
|
|
27
|
+
* @param {number} input_hzb
|
|
27
28
|
* @param {number} input_color
|
|
28
29
|
* @param {number} input_depth_previous
|
|
29
30
|
* @param {number} input_normal
|
|
@@ -34,7 +35,7 @@ export class GTAO {
|
|
|
34
35
|
* @param {number[]} resolution
|
|
35
36
|
* @returns {{occlusion:number, bent_normals:number, diffuse_indirect:number}}
|
|
36
37
|
*/
|
|
37
|
-
graph_pass({ graph, camera, input_depth, input_depth_previous, input_normal, input_velocity, input_occlusion, frame_index, output, resolution }: FrameGraph): {
|
|
38
|
+
graph_pass({ graph, camera, input_depth, input_hzb, input_depth_previous, input_normal, input_velocity, input_occlusion, frame_index, output, resolution }: FrameGraph): {
|
|
38
39
|
occlusion: number;
|
|
39
40
|
bent_normals: number;
|
|
40
41
|
diffuse_indirect: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GTAO.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/GTAO.js"],"names":[],"mappings":"AAQA;;GAEG;AAEH;IAQI;;;OAGG;IACH,uCAUC;IAED;;;;OAIG;IACH,UAHW,MAAM,KACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,0BAFW,eAAe,QAOzB;IAED
|
|
1
|
+
{"version":3,"file":"GTAO.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/GTAO.js"],"names":[],"mappings":"AAQA;;GAEG;AAEH;IAQI;;;OAGG;IACH,uCAUC;IAED;;;;OAIG;IACH,UAHW,MAAM,KACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,0BAFW,eAAe,QAOzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yKAFa;QAAC,SAAS,EAAC,MAAM,CAAC;QAAC,YAAY,EAAC,MAAM,CAAC;QAAC,gBAAgB,EAAC,MAAM,CAAA;KAAC,CAiG5E;;CACJ;8BAjKY,OAAO,6CAA6C,EAAE,eAAe"}
|
|
@@ -61,6 +61,7 @@ export class GTAO {
|
|
|
61
61
|
* @param {FrameGraph} graph
|
|
62
62
|
* @param {number} camera
|
|
63
63
|
* @param {number} input_depth
|
|
64
|
+
* @param {number} input_hzb
|
|
64
65
|
* @param {number} input_color
|
|
65
66
|
* @param {number} input_depth_previous
|
|
66
67
|
* @param {number} input_normal
|
|
@@ -75,6 +76,7 @@ export class GTAO {
|
|
|
75
76
|
graph,
|
|
76
77
|
camera,
|
|
77
78
|
input_depth,
|
|
79
|
+
input_hzb,
|
|
78
80
|
input_depth_previous,
|
|
79
81
|
input_normal,
|
|
80
82
|
input_velocity,
|
|
@@ -102,6 +104,7 @@ export class GTAO {
|
|
|
102
104
|
input_depth,
|
|
103
105
|
inputs: {
|
|
104
106
|
tDepth: input_depth,
|
|
107
|
+
tHZB: input_hzb,
|
|
105
108
|
tNormal: input_normal,
|
|
106
109
|
camera,
|
|
107
110
|
settings: {
|
|
@@ -119,6 +122,7 @@ export class GTAO {
|
|
|
119
122
|
graph,
|
|
120
123
|
shader: shader_denoise_luminance_spatial,
|
|
121
124
|
output_resolution: resolution,
|
|
125
|
+
input_depth,
|
|
122
126
|
inputs: {
|
|
123
127
|
tInput: moments,
|
|
124
128
|
tDepth: input_depth,
|
|
@@ -134,6 +138,7 @@ export class GTAO {
|
|
|
134
138
|
graph,
|
|
135
139
|
shader: ao_reproject_shader,
|
|
136
140
|
output: [moments_output],
|
|
141
|
+
input_depth,
|
|
137
142
|
inputs: {
|
|
138
143
|
tInput: moments,
|
|
139
144
|
tHistory: moments_history,
|
|
@@ -164,4 +169,3 @@ export class GTAO {
|
|
|
164
169
|
};
|
|
165
170
|
}
|
|
166
171
|
}
|
|
167
|
-
|
|
@@ -15,6 +15,14 @@ export const GTAO_QUALITY_PROFILES: any;
|
|
|
15
15
|
* @type {number}
|
|
16
16
|
*/
|
|
17
17
|
export const GTAO_DEPTH_MIP_LEVELS: number;
|
|
18
|
+
/**
|
|
19
|
+
* Log2 offset applied to the screen-space step distance (in pixels) when selecting a depth pyramid mip level.
|
|
20
|
+
* Higher values stay on finer mips further out; lower values drop to coarser mips sooner.
|
|
21
|
+
*
|
|
22
|
+
* @see https://github.com/GameTechDev/XeGTAO/blob/a5b1686c7ea37788eeb3576b5be47f7c03db532c/Source/Rendering/Shaders/XeGTAO.h#L71
|
|
23
|
+
* @type {number}
|
|
24
|
+
*/
|
|
25
|
+
export const GTAO_DEPTH_MIP_SAMPLING_OFFSET: number;
|
|
18
26
|
/**
|
|
19
27
|
* distant samples contribute less
|
|
20
28
|
* must be in [0, 1] range
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GTAO_CONSTANTS.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js"],"names":[],"mappings":"gCAmBU,MAAM;;;;;;;AAShB;;;GAGG;AACH,wCAiBE;AAEF;;;GAGG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;GAGG;AACH,8CAA+C;AAE/C;;;;GAIG;AACH,iCAFU,MAAM,CAEoB"}
|
|
1
|
+
{"version":3,"file":"GTAO_CONSTANTS.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js"],"names":[],"mappings":"gCAmBU,MAAM;;;;;;;AAShB;;;GAGG;AACH,wCAiBE;AAEF;;;GAGG;AACH,oCAFU,MAAM,CAEuB;AAEvC;;;;;;GAMG;AACH,6CAFU,MAAM,CAEmC;AAEnD;;;GAGG;AACH,8CAA+C;AAE/C;;;;GAIG;AACH,iCAFU,MAAM,CAEoB"}
|
|
@@ -53,7 +53,16 @@ export const GTAO_QUALITY_PROFILES = {
|
|
|
53
53
|
* see https://github.com/GameTechDev/XeGTAO/blob/a5b1686c7ea37788eeb3576b5be47f7c03db532c/Source/Rendering/Shaders/XeGTAO.h#L55
|
|
54
54
|
* @type {number}
|
|
55
55
|
*/
|
|
56
|
-
export const GTAO_DEPTH_MIP_LEVELS =
|
|
56
|
+
export const GTAO_DEPTH_MIP_LEVELS = 5;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Log2 offset applied to the screen-space step distance (in pixels) when selecting a depth pyramid mip level.
|
|
60
|
+
* Higher values stay on finer mips further out; lower values drop to coarser mips sooner.
|
|
61
|
+
*
|
|
62
|
+
* @see https://github.com/GameTechDev/XeGTAO/blob/a5b1686c7ea37788eeb3576b5be47f7c03db532c/Source/Rendering/Shaders/XeGTAO.h#L71
|
|
63
|
+
* @type {number}
|
|
64
|
+
*/
|
|
65
|
+
export const GTAO_DEPTH_MIP_SAMPLING_OFFSET = 3.30;
|
|
57
66
|
|
|
58
67
|
/**
|
|
59
68
|
* distant samples contribute less
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ao_reproject_shader.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/ao_reproject_shader.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ao_reproject_shader.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/ao_reproject_shader.js"],"names":[],"mappings":"AAgKA,8CAaE;4BAvK0B,6BAA6B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { DEPTH_STENCIL_FOREGROUND_ONLY } from "../../depth/DEPTH_STENCIL_FOREGROUND_ONLY.js";
|
|
1
2
|
import { chunk_get_std_dev } from "../../shader/chunk/math/statistics/chunk_get_std_dev.js";
|
|
2
3
|
import {
|
|
3
4
|
chunk_texture_sample_catmullrom_hardware_5tap_uv
|
|
@@ -163,7 +164,11 @@ export const ao_reproject_shader = new ImageShader({
|
|
|
163
164
|
body,
|
|
164
165
|
resources,
|
|
165
166
|
}),
|
|
167
|
+
depthStencil: DEPTH_STENCIL_FOREGROUND_ONLY,
|
|
166
168
|
targets: [{
|
|
167
169
|
format: "rg16float",
|
|
170
|
+
// Background is skipped, so it keeps the clear: moments of visibility 1 (not occluded), zero variance.
|
|
171
|
+
// This is also next frame's history, whose filtered fetch reaches across silhouettes.
|
|
172
|
+
clearValue: [1, 1],
|
|
168
173
|
}]
|
|
169
174
|
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Selects the depth pyramid mip level for a GTAO horizon step at `sample_offset_length` screen pixels
|
|
3
|
+
* from the center pixel.
|
|
4
|
+
*
|
|
5
|
+
* Follows Intel XeGTAO's `clamp(log2(sampleOffsetLength) - DepthMIPSamplingOffset, 0, GTAO_DEPTH_MIP_LEVELS - 1)`
|
|
6
|
+
* paired with a `MIP_POINT` sampler (`round` to nearest integer mip). Because Mip 0 lives in `tDepth`
|
|
7
|
+
* while Mips 1..4 live in `tHZB`, rounding here keeps the Mip 0 -> Mip 1 handoff at `lod = 0.5`
|
|
8
|
+
* (`~13.9 px`) rather than `lod > 0.0` (`~9.8 px`). With `GTAO_DEPTH_MIP_SAMPLING_OFFSET = 3.30`:
|
|
9
|
+
* - Mip 0 (`< ~13.9 px`): full-resolution `tDepth`
|
|
10
|
+
* - Mip 1 (`~13.9 .. 27.9 px`): HZB mip 0 (half-res)
|
|
11
|
+
* - Mip 2 (`~27.9 .. 55.7 px`): HZB mip 1 (quarter-res)
|
|
12
|
+
* - Mip 3 (`~55.7 .. 111.4 px`): HZB mip 2 (1/8-res)
|
|
13
|
+
* - Mip 4 (`>= ~111.4 px`): HZB mip 3 (1/16-res)
|
|
14
|
+
*
|
|
15
|
+
* Every mip transition occurs when the tap is at least ~7 texels away at the target mip resolution.
|
|
16
|
+
*
|
|
17
|
+
* @see https://github.com/GameTechDev/XeGTAO/blob/a5b1686c7ea37788eeb3576b5be47f7c03db532c/Source/Rendering/Shaders/XeGTAO.hlsli#L244
|
|
18
|
+
* @type {CodeChunk}
|
|
19
|
+
*/
|
|
20
|
+
export const chunk_gtao_compute_mip_level: CodeChunk;
|
|
21
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
22
|
+
//# sourceMappingURL=chunk_gtao_compute_mip_level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_gtao_compute_mip_level.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CAFU,SAAS,CAUjB;0BAhCwB,oCAAoC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { GTAO_DEPTH_MIP_LEVELS, GTAO_DEPTH_MIP_SAMPLING_OFFSET } from "./GTAO_CONSTANTS.js";
|
|
3
|
+
|
|
4
|
+
const MAX_MIP_LEVEL = Math.max(0, GTAO_DEPTH_MIP_LEVELS - 1);
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Selects the depth pyramid mip level for a GTAO horizon step at `sample_offset_length` screen pixels
|
|
8
|
+
* from the center pixel.
|
|
9
|
+
*
|
|
10
|
+
* Follows Intel XeGTAO's `clamp(log2(sampleOffsetLength) - DepthMIPSamplingOffset, 0, GTAO_DEPTH_MIP_LEVELS - 1)`
|
|
11
|
+
* paired with a `MIP_POINT` sampler (`round` to nearest integer mip). Because Mip 0 lives in `tDepth`
|
|
12
|
+
* while Mips 1..4 live in `tHZB`, rounding here keeps the Mip 0 -> Mip 1 handoff at `lod = 0.5`
|
|
13
|
+
* (`~13.9 px`) rather than `lod > 0.0` (`~9.8 px`). With `GTAO_DEPTH_MIP_SAMPLING_OFFSET = 3.30`:
|
|
14
|
+
* - Mip 0 (`< ~13.9 px`): full-resolution `tDepth`
|
|
15
|
+
* - Mip 1 (`~13.9 .. 27.9 px`): HZB mip 0 (half-res)
|
|
16
|
+
* - Mip 2 (`~27.9 .. 55.7 px`): HZB mip 1 (quarter-res)
|
|
17
|
+
* - Mip 3 (`~55.7 .. 111.4 px`): HZB mip 2 (1/8-res)
|
|
18
|
+
* - Mip 4 (`>= ~111.4 px`): HZB mip 3 (1/16-res)
|
|
19
|
+
*
|
|
20
|
+
* Every mip transition occurs when the tap is at least ~7 texels away at the target mip resolution.
|
|
21
|
+
*
|
|
22
|
+
* @see https://github.com/GameTechDev/XeGTAO/blob/a5b1686c7ea37788eeb3576b5be47f7c03db532c/Source/Rendering/Shaders/XeGTAO.hlsli#L244
|
|
23
|
+
* @type {CodeChunk}
|
|
24
|
+
*/
|
|
25
|
+
export const chunk_gtao_compute_mip_level = CodeChunk.from(
|
|
26
|
+
//language=WGSL
|
|
27
|
+
`
|
|
28
|
+
fn gtao_compute_mip_level(sample_offset_length: f32) -> f32 {
|
|
29
|
+
let mip_f = round(log2(max(1.0, sample_offset_length)) - ${GTAO_DEPTH_MIP_SAMPLING_OFFSET});
|
|
30
|
+
return clamp(mip_f, 0.0, f32(${MAX_MIP_LEVEL}));
|
|
31
|
+
}
|
|
32
|
+
`
|
|
33
|
+
);
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a single reverse-Z device depth from an HZB `(d_min, d_max)` pair (`hzb.x` = farthest,
|
|
3
|
+
* `hzb.y` = closest in the $2^m \times 2^m$ footprint) using a discontinuity-aware slope filter.
|
|
4
|
+
*
|
|
5
|
+
* Why neither pure `hzb.y` (closest) nor pure `0.5 * (hzb.x + hzb.y)` (average) suffices alone
|
|
6
|
+
* (cf. Intel XeGTAO `DepthMIPFilter` and Tomasz Stachowiak / h3r2tic's Tiny Glade linear + point
|
|
7
|
+
* depth-sampling analysis):
|
|
8
|
+
* - On a continuous sloped surface, reverse-Z device depth $1 / (-z_{\text{view}})$ is affine in
|
|
9
|
+
* screen space. Taking only `hzb.y` treats each coarse $2^m \times 2^m$ texel as a flat "Duplo
|
|
10
|
+
* brick" protruding toward the camera, causing false self-occlusion on slopes; averaging
|
|
11
|
+
* `0.5 * (hzb.x + hzb.y)` reconstructs the smooth plane across the footprint.
|
|
12
|
+
* - Across a silhouette edge (depth discontinuity), averaging `hzb.x` and `hzb.y` creates a
|
|
13
|
+
* mid-air "shrink-wrap" phantom surface between foreground and background (or erodes silhouettes
|
|
14
|
+
* against the sky). Weighting `hzb.x` down to zero when `depth_far - depth_near` exceeds the
|
|
15
|
+
* effect falloff collapses the filter to `hzb.y` (the foreground surface).
|
|
16
|
+
*
|
|
17
|
+
* @see https://github.com/GameTechDev/XeGTAO/blob/a5b1686c7ea37788eeb3576b5be47f7c03db532c/Source/Rendering/Shaders/XeGTAO.hlsli#L622
|
|
18
|
+
* @type {CodeChunk}
|
|
19
|
+
*/
|
|
20
|
+
export const chunk_gtao_resolve_hzb_depth: CodeChunk;
|
|
21
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
22
|
+
//# sourceMappingURL=chunk_gtao_resolve_hzb_depth.d.ts.map
|