@woosh/meep-engine 3.17.2 → 3.18.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.
Files changed (263) hide show
  1. package/editor/actions/concrete/ComponentAddAction.d.ts +1 -0
  2. package/editor/actions/concrete/ComponentAddAction.d.ts.map +1 -1
  3. package/editor/actions/concrete/ComponentAddAction.js +4 -0
  4. package/editor/actions/concrete/ComponentRemoveAction.d.ts +1 -0
  5. package/editor/actions/concrete/ComponentRemoveAction.d.ts.map +1 -1
  6. package/editor/actions/concrete/ComponentRemoveAction.js +4 -0
  7. package/editor/actions/concrete/EntityCreateAction.d.ts +1 -0
  8. package/editor/actions/concrete/EntityCreateAction.d.ts.map +1 -1
  9. package/editor/actions/concrete/EntityCreateAction.js +7 -0
  10. package/editor/actions/concrete/EntityRemoveAction.d.ts +1 -0
  11. package/editor/actions/concrete/EntityRemoveAction.d.ts.map +1 -1
  12. package/editor/actions/concrete/EntityRemoveAction.js +4 -0
  13. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts +10 -0
  14. package/editor/actions/concrete/PatchTerrainHeightAction.d.ts.map +1 -1
  15. package/editor/actions/concrete/PatchTerrainHeightAction.js +107 -85
  16. package/editor/actions/concrete/TransformModifyAction.d.ts +1 -0
  17. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  18. package/editor/actions/concrete/TransformModifyAction.js +4 -0
  19. package/editor/particles/effect/ParticleEffectDocument.d.ts.map +1 -1
  20. package/editor/particles/effect/ParticleEffectDocument.js +10 -6
  21. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
  22. package/editor/particles/effect/ParticleReferenceSimulation.js +98 -4
  23. package/editor/particles/effect/make_starter_particle_effect.d.ts.map +1 -1
  24. package/editor/particles/effect/make_starter_particle_effect.js +0 -2
  25. package/editor/tools/engine/ToolEngine.d.ts +30 -0
  26. package/editor/tools/engine/ToolEngine.d.ts.map +1 -1
  27. package/editor/tools/engine/ToolEngine.js +257 -188
  28. package/editor/view/ecs/EntityList.d.ts.map +1 -1
  29. package/editor/view/ecs/EntityList.js +6 -5
  30. package/editor/view/particles/effect/ParticleEmitterInspectorView.d.ts.map +1 -1
  31. package/editor/view/particles/effect/ParticleEmitterInspectorView.js +17 -9
  32. package/package.json +1 -1
  33. package/src/CODEC_LAYOUT_VERIFICATION.md +1 -2
  34. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.d.ts +56 -0
  35. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.d.ts.map +1 -0
  36. package/src/core/binary/meshopt/MESHOPT_VERTEX_BLOCK.js +73 -0
  37. package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.d.ts.map +1 -1
  38. package/src/core/binary/meshopt/meshopt_decode_vertex_buffer.js +18 -63
  39. package/src/core/binary/meshopt/meshopt_encode_byte_group.d.ts +53 -0
  40. package/src/core/binary/meshopt/meshopt_encode_byte_group.d.ts.map +1 -0
  41. package/src/core/binary/meshopt/meshopt_encode_byte_group.js +140 -0
  42. package/src/core/binary/meshopt/meshopt_encode_data_block.d.ts +32 -0
  43. package/src/core/binary/meshopt/meshopt_encode_data_block.d.ts.map +1 -0
  44. package/src/core/binary/meshopt/meshopt_encode_data_block.js +77 -0
  45. package/src/core/binary/meshopt/meshopt_encode_index_sequence.d.ts +46 -0
  46. package/src/core/binary/meshopt/meshopt_encode_index_sequence.d.ts.map +1 -0
  47. package/src/core/binary/meshopt/meshopt_encode_index_sequence.js +146 -0
  48. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.d.ts +40 -0
  49. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.d.ts.map +1 -0
  50. package/src/core/binary/meshopt/meshopt_encode_vertex_buffer.js +700 -0
  51. package/src/core/binary/meshopt/meshopt_write_uint_var.d.ts +24 -0
  52. package/src/core/binary/meshopt/meshopt_write_uint_var.d.ts.map +1 -0
  53. package/src/core/binary/meshopt/meshopt_write_uint_var.js +39 -0
  54. package/src/core/math/random/seededRandom_Mulberry32.d.ts.map +1 -1
  55. package/src/core/math/random/seededRandom_Mulberry32.js +4 -2
  56. package/src/core/process/undo/Action.d.ts +19 -0
  57. package/src/core/process/undo/Action.d.ts.map +1 -1
  58. package/src/core/process/undo/Action.js +17 -0
  59. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +78 -0
  60. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -0
  61. package/src/engine/graphics3/GPUParticleEmitterSystem.js +310 -0
  62. package/src/engine/graphics3/GraphicsEngine.d.ts +17 -0
  63. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  64. package/src/engine/graphics3/GraphicsEngine.js +30 -10
  65. package/src/engine/graphics3/particles/particle_gpu_records.d.ts.map +1 -1
  66. package/src/engine/graphics3/particles/particle_gpu_records.js +0 -2
  67. package/src/engine/interpolation/InterpolationSystem.d.ts +7 -0
  68. package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
  69. package/src/engine/interpolation/InterpolationSystem.js +10 -0
  70. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  71. package/src/engine/network/NetworkSession.js +14 -34
  72. package/src/engine/network/time/RenderPlayout.d.ts +76 -0
  73. package/src/engine/network/time/RenderPlayout.d.ts.map +1 -0
  74. package/src/engine/network/time/RenderPlayout.js +163 -0
  75. package/src/engine/network/transport/adapters/WebSocketTransport.d.ts.map +1 -1
  76. package/src/engine/network/transport/adapters/WebSocketTransport.js +11 -4
  77. package/src/engine/physics/ecs/PhysicsSystem.d.ts +4 -12
  78. package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
  79. package/src/engine/physics/ecs/PhysicsSystem.js +39 -13
  80. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  81. package/src/engine/sound/simulation/core/VolumeField.d.ts.map +1 -1
  82. package/src/engine/sound/simulation/core/VolumeField.js +4 -1
  83. package/src/format/scene/gltf/MESHOPT_COMPRESSION_PLAN.md +23 -2
  84. package/src/shade/playground/particle_system/README.md +139 -139
  85. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  86. package/src/shade/playground/particle_system/particle_prototype.js +0 -2
  87. package/src/shade/playground/particle_system/particle_scene.d.ts +6 -9
  88. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  89. package/src/shade/playground/particle_system/particle_scene.js +6 -13
  90. package/src/shade/playground/ssr_reprojection/README.md +103 -0
  91. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.d.ts +17 -0
  92. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.d.ts.map +1 -0
  93. package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -0
  94. package/src/shade/playground/ssr_reprojection/index.html +79 -0
  95. package/src/shade/playground/ssr_reprojection/main.d.ts +2 -0
  96. package/src/shade/playground/ssr_reprojection/main.d.ts.map +1 -0
  97. package/src/shade/playground/ssr_reprojection/main.js +245 -0
  98. package/src/shade/playground/ssr_reprojection/scene.d.ts +18 -0
  99. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -0
  100. package/src/shade/playground/ssr_reprojection/scene.js +51 -0
  101. package/src/shade/renderer/Renderer.d.ts +2 -23
  102. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  103. package/src/shade/renderer/Renderer.js +185 -218
  104. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +5 -8
  105. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  106. package/src/shade/renderer/animation/GPUAnimationManager.js +12 -12
  107. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  108. package/src/shade/renderer/buffer/table/GPUTypedTable.js +6 -0
  109. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  110. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +7 -0
  111. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.d.ts +4 -0
  112. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.d.ts.map +1 -0
  113. package/src/shade/renderer/global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.js +51 -0
  114. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map +1 -1
  115. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js +5 -35
  116. package/src/shade/renderer/particles/DESIGN.md +703 -514
  117. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +16 -4
  118. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  119. package/src/shade/renderer/particles/GPUParticleSystem.js +1189 -991
  120. package/src/shade/renderer/particles/ParticleConstants.d.ts +64 -0
  121. package/src/shade/renderer/particles/ParticleConstants.d.ts.map +1 -1
  122. package/src/shade/renderer/particles/ParticleConstants.js +71 -0
  123. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +57 -0
  124. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -0
  125. package/src/shade/renderer/particles/bounds/chunk_particle_bounds.js +181 -0
  126. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.d.ts +7 -0
  127. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.d.ts.map +1 -0
  128. package/src/shade/renderer/particles/bounds/chunk_particle_bounds_unknown.js +12 -0
  129. package/src/shade/renderer/particles/bounds/graph_particle_bounds.d.ts +33 -0
  130. package/src/shade/renderer/particles/bounds/graph_particle_bounds.d.ts.map +1 -0
  131. package/src/shade/renderer/particles/bounds/graph_particle_bounds.js +67 -0
  132. package/src/shade/renderer/particles/bounds/shader_particle_bounds.d.ts +40 -0
  133. package/src/shade/renderer/particles/bounds/shader_particle_bounds.d.ts.map +1 -0
  134. package/src/shade/renderer/particles/bounds/shader_particle_bounds.js +187 -0
  135. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts +15 -2
  136. package/src/shade/renderer/particles/coherence/graph_particle_bucket.d.ts.map +1 -1
  137. package/src/shade/renderer/particles/coherence/graph_particle_bucket.js +14 -8
  138. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts +58 -4
  139. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.d.ts.map +1 -1
  140. package/src/shade/renderer/particles/data/PARTICLE_COUNTERS.js +79 -4
  141. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts +23 -1
  142. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.d.ts.map +1 -1
  143. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STATE.js +35 -2
  144. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +4 -2
  145. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  146. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +5 -8
  147. package/src/shade/renderer/particles/data/particle_emitter_record.d.ts.map +1 -1
  148. package/src/shade/renderer/particles/data/particle_emitter_record.js +0 -6
  149. package/src/shade/renderer/particles/graph_particles.d.ts +25 -3
  150. package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
  151. package/src/shade/renderer/particles/graph_particles.js +108 -31
  152. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +6 -4
  153. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  154. package/src/shade/renderer/particles/graph_particles_avboit.js +5 -5
  155. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +5 -0
  156. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  157. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +27 -6
  158. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +4 -0
  159. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  160. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +6 -1
  161. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +35 -27
  162. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  163. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +424 -425
  164. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts +20 -0
  165. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_warmup.d.ts.map +1 -0
  166. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +4 -0
  167. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  168. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +38 -2
  169. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.d.ts +22 -0
  170. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.d.ts.map +1 -0
  171. package/src/shade/renderer/particles/shaders/chunk_particle_spawn_budget.js +42 -0
  172. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +1 -1
  173. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.d.ts.map +1 -1
  174. package/src/shade/renderer/particles/shaders/shader_particle_avboit_occupancy.js +53 -22
  175. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.d.ts.map +1 -1
  176. package/src/shade/renderer/particles/shaders/shader_particle_emitter_tick.js +213 -216
  177. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts +50 -0
  178. package/src/shade/renderer/particles/shaders/shader_particle_reclaim.d.ts.map +1 -0
  179. package/src/shade/renderer/particles/shaders/shader_particle_render.js +1 -1
  180. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.d.ts +36 -0
  181. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.d.ts.map +1 -0
  182. package/src/shade/renderer/particles/warmup/chunk_particle_warmup_step.js +102 -0
  183. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts +102 -0
  184. package/src/shade/renderer/particles/warmup/graph_particle_warmup.d.ts.map +1 -0
  185. package/src/shade/renderer/particles/warmup/graph_particle_warmup.js +329 -0
  186. package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts +112 -0
  187. package/src/shade/renderer/particles/warmup/shader_particle_warmup.d.ts.map +1 -0
  188. package/src/shade/renderer/particles/warmup/shader_particle_warmup.js +318 -0
  189. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts +35 -0
  190. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.d.ts.map +1 -0
  191. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance.js +108 -0
  192. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts +3 -0
  193. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.d.ts.map +1 -0
  194. package/src/shade/renderer/particles/warmup/shader_particle_warmup_advance_wide.js +70 -0
  195. package/src/shade/renderer/particles/warmup/warmup_schedule.d.ts +62 -0
  196. package/src/shade/renderer/particles/warmup/warmup_schedule.d.ts.map +1 -0
  197. package/src/shade/renderer/particles/warmup/warmup_schedule.js +55 -0
  198. package/src/shade/renderer/postprocess/PostProcess.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/PostProcess.js +2 -1
  200. package/src/shade/renderer/postprocess/ssr/REPROJECTION_PROPOSAL.md +286 -0
  201. package/src/shade/renderer/postprocess/ssr/SSR.d.ts +57 -21
  202. package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
  203. package/src/shade/renderer/postprocess/ssr/SSR.js +230 -129
  204. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.d.ts +11 -0
  205. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.d.ts.map +1 -0
  206. package/src/shade/renderer/postprocess/ssr/SSRReprojectionMode.js +6 -0
  207. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.d.ts +4 -0
  208. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.d.ts.map +1 -0
  209. package/src/shade/renderer/postprocess/ssr/chunk_ssr_metadata.js +32 -0
  210. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.d.ts +4 -0
  211. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.d.ts.map +1 -0
  212. package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js +41 -0
  213. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts +3 -0
  214. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.d.ts.map +1 -0
  215. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_reprojection.js +30 -0
  216. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts +4 -0
  217. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -0
  218. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +70 -0
  219. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts +21 -0
  220. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -0
  221. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +363 -0
  222. package/src/shade/renderer/postprocess/ssr/resolve/chunk_get_neighbour_weight.js +1 -1
  223. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.d.ts +2 -0
  224. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.d.ts.map +1 -0
  225. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.js +24 -0
  226. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts +1 -6
  227. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
  228. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +16 -332
  229. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts +1 -6
  230. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
  231. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +25 -358
  232. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +0 -5
  233. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
  234. package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +201 -276
  235. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +1 -0
  236. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
  237. package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +167 -143
  238. package/src/shade/renderer/shader/graph/graph_create_buffer.d.ts +15 -0
  239. package/src/shade/renderer/shader/graph/graph_create_buffer.d.ts.map +1 -0
  240. package/src/shade/renderer/shader/graph/graph_create_buffer.js +20 -0
  241. package/src/shade/renderer/view/GPUViewContext.d.ts +3 -4
  242. package/src/shade/renderer/view/GPUViewContext.d.ts.map +1 -1
  243. package/src/shade/renderer/view/GPUViewContext.js +5 -5
  244. package/src/core/binary/meshopt/__meshopt_test_streams.d.ts +0 -24
  245. package/src/core/binary/meshopt/__meshopt_test_streams.d.ts.map +0 -1
  246. package/src/core/binary/meshopt/__meshopt_test_streams.js +0 -237
  247. package/src/core/geom/3d/atlas/atlas_test_fixtures.d.ts +0 -84
  248. package/src/core/geom/3d/atlas/atlas_test_fixtures.d.ts.map +0 -1
  249. package/src/core/geom/3d/atlas/atlas_test_fixtures.js +0 -266
  250. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts +0 -97
  251. package/src/engine/asset/loaders/gltf_test_fixtures.d.ts.map +0 -1
  252. package/src/engine/asset/loaders/gltf_test_fixtures.js +0 -359
  253. package/src/shade/renderer/animation/skin_test_fixtures.d.ts +0 -86
  254. package/src/shade/renderer/animation/skin_test_fixtures.d.ts.map +0 -1
  255. package/src/shade/renderer/animation/skin_test_fixtures.js +0 -250
  256. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.d.ts +0 -16
  257. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.d.ts.map +0 -1
  258. package/src/shade/renderer/geometry/virtual/format/attribute/vgeo_layers_test_fixtures.js +0 -27
  259. package/src/shade/renderer/particles/particle_test_fixtures.d.ts +0 -151
  260. package/src/shade/renderer/particles/particle_test_fixtures.d.ts.map +0 -1
  261. package/src/shade/renderer/particles/particle_test_fixtures.js +0 -229
  262. package/src/shade/renderer/particles/shaders/chunk_particle_emitter_world_sphere.js +0 -23
  263. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +0 -457
@@ -0,0 +1,70 @@
1
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
2
+ import { chunk_project_position_from_depth } from "../../../shader/chunk/camera/chunk_project_position_from_depth.js";
3
+ import { chunk_is_background } from "../../../shader/chunk/depth/chunk_is_background.js";
4
+ import { chunk_plane_from_normal_and_point } from "../../../shader/chunk/geometry/plane/chunk_plane_from_normal_and_point.js";
5
+ import { chunk_point_distance_above_plane } from "../../../shader/chunk/geometry/plane/chunk_point_distance_above_plane.js";
6
+ import { chunk_is_on_screen_i32 } from "../../../shader/chunk/texture/chunk_is_on_screen_i32.js";
7
+ import { chunk_texel_coordinate_to_uv } from "../../../shader/chunk/texture/chunk_texel_coordinate_to_uv.js";
8
+ import { chunk_get_bilinear_weights } from "../../../shader/chunk/texture/sample/chunk_get_bilinear_weights.js";
9
+ import { chunk_is_finite } from "../../../shader/chunk/math/chunk_is_finite.js";
10
+
11
+ /** Resource names are supplied by ssr_reproject_shader. Validate exactly the taps we read. */
12
+ export const chunk_ssr_sample_history = CodeChunk.from(/* language=WGSL */ `
13
+ struct SSRHistorySample {
14
+ radiance: vec4f,
15
+ confidence: f32,
16
+ }
17
+
18
+ fn ssr_sample_history(
19
+ uv: vec2f, position: vec3f, normal: vec3f, roughness: f32,
20
+ metadata: vec2f, virtual_position: vec3f, virtual_candidate: bool, plane_tolerance: f32,
21
+ ) -> SSRHistorySample {
22
+ var result: SSRHistorySample;
23
+ if (!is_finite(uv.x) || !is_finite(uv.y) || any(uv < vec2f(0.0)) || any(uv >= vec2f(1.0))) {
24
+ return result;
25
+ }
26
+ let size = textureDimensions(tHistory);
27
+ let texel = uv * vec2f(size) - 0.5;
28
+ let origin = vec2i(floor(texel));
29
+ let weights = get_bilinear_weights(fract(texel));
30
+ let offsets = array<vec2i, 4>(vec2i(0,0), vec2i(1,0), vec2i(0,1), vec2i(1,1));
31
+ let plane = plane_from_normal_and_point(normal, position);
32
+ for (var i = 0; i < 4; i++) {
33
+ let coord = origin + offsets[i];
34
+ if (weights[i] <= 0.0 || !is_on_screen_i32(coord, vec2i(size))) { continue; }
35
+ let depth = textureLoad(tPreviousDepth, coord, 0).r;
36
+ if (is_background(depth)) { continue; }
37
+ let geometry = textureLoad(tHistoryGeometry, coord, 0);
38
+ if (!is_finite(geometry.x) || !is_finite(geometry.y) || !is_finite(geometry.z) || !is_finite(geometry.w)) { continue; }
39
+ if (dot(geometry.xyz, geometry.xyz) < 0.5) { continue; }
40
+ let normal_agreement = dot(normal, normalize(geometry.xyz));
41
+ if (normal_agreement < select(0.9, 0.995, virtual_candidate) || abs(roughness - geometry.w) > 0.08) { continue; }
42
+ let previous_position = project_position_from_depth(
43
+ texel_coordinate_to_uv(vec2f(coord), size), depth, camera_previous.view_projection_matrix_inverse);
44
+ let plane_distance = abs(point_distance_above_plane(previous_position, plane));
45
+ if (!is_finite(plane_distance) || plane_distance > plane_tolerance) { continue; }
46
+ let previous_metadata = textureLoad(tHistoryMetadata, coord, 0).rg;
47
+ if (!is_finite(previous_metadata.x) || !is_finite(previous_metadata.y)) { continue; }
48
+ // A source/support transition must not preserve the previous, unrelated reflection.
49
+ if (abs(previous_metadata.y - metadata.y) > 0.25) { continue; }
50
+ var support = 1.0;
51
+ if (virtual_candidate) {
52
+ if (previous_metadata.y < 0.5 || previous_metadata.x <= 0.0) { continue; }
53
+ // Compare reflected distance from this OLD mirror point, not from today's point.
54
+ let expected_distance = length(virtual_position - previous_position);
55
+ let distance_error = abs(previous_metadata.x - expected_distance);
56
+ if (distance_error > max(expected_distance * 0.1, plane_tolerance)) { continue; }
57
+ support = min(metadata.y, previous_metadata.y);
58
+ }
59
+ let radiance = textureLoad(tHistory, coord, 0);
60
+ if (!is_finite(radiance.x) || !is_finite(radiance.y) || !is_finite(radiance.z) || !is_finite(radiance.w)) { continue; }
61
+ let w = weights[i] * support;
62
+ result.radiance += max(radiance, vec4f(0.0)) * w;
63
+ result.confidence += w;
64
+ }
65
+ if (result.confidence > 1e-6) { result.radiance /= result.confidence; }
66
+ return result;
67
+ }
68
+ `, [chunk_project_position_from_depth, chunk_is_background, chunk_plane_from_normal_and_point,
69
+ chunk_point_distance_above_plane, chunk_is_on_screen_i32, chunk_texel_coordinate_to_uv,
70
+ chunk_get_bilinear_weights, chunk_is_finite]);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Compose the shared SSR hit resolve with a mode's GI sampling functions.
3
+ * sample_radiance defines ssr_sample_radiance(position, normal, view_direction, roughness, coord).
4
+ * Optional sample_hit_irradiance defines ssr_sample_hit_irradiance(position, normal, direction).
5
+ *
6
+ * @param {object} options
7
+ * @param {string} options.label
8
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} options.resources GI resources
9
+ * @param {CodeChunk} options.sample_radiance
10
+ * @param {CodeChunk} [options.sample_hit_irradiance]
11
+ * @returns {ImageShader}
12
+ */
13
+ export function build_ssr_resolve_shader({ label, resources, sample_radiance, sample_hit_irradiance }: {
14
+ label: string;
15
+ resources: import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor;
16
+ sample_radiance: CodeChunk;
17
+ sample_hit_irradiance?: CodeChunk;
18
+ }): ImageShader;
19
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
20
+ import { ImageShader } from "../../../shader/ImageShader.js";
21
+ //# sourceMappingURL=build_ssr_resolve_shader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build_ssr_resolve_shader.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js"],"names":[],"mappings":"AA+BA;;;;;;;;;;;GAWG;AACH;IAN2B,KAAK,EAArB,MAAM;IACiG,SAAS,EAAhH,OAAO,yDAAyD,EAAE,2BAA2B;IAC1E,eAAe,EAAlC,SAAS;IACW,qBAAqB,GAAzC,SAAS;IACP,WAAW,CAiUvB;0BAxVyB,uCAAuC;4BACrC,gCAAgC"}
@@ -0,0 +1,363 @@
1
+ import { chunk_ssr_metadata } from "../chunk_ssr_metadata.js";
2
+ import { chunk_is_on_screen_i32 } from "../../../shader/chunk/texture/chunk_is_on_screen_i32.js";
3
+ import { SamplerDescriptor } from "../../../../descriptor/texture/SamplerDescriptor.js";
4
+ import { u32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
5
+ import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
6
+ import { CAMERA_UNIFORM_STRUCT } from "../../../camera/CAMERA_UNIFORM_STRUCT.js";
7
+ import { DEPTH_STENCIL_FOREGROUND_ONLY } from "../../../depth/DEPTH_STENCIL_FOREGROUND_ONLY.js";
8
+ import { chunk_direction_world_to_view } from "../../../shader/chunk/camera/chunk_direction_world_to_view.js";
9
+ import { chunk_project_position_from_depth } from "../../../shader/chunk/camera/chunk_project_position_from_depth.js";
10
+ import { chunk_screen_coordinate_to_view } from "../../../shader/chunk/camera/chunk_screen_coordinate_to_view.js";
11
+ import { chunk_rgb_to_luminance } from "../../../shader/chunk/color/chunk_rgb_to_luminance.js";
12
+ import { chunk_rgb_to_YCoCg } from "../../../shader/chunk/color/YCoCg/chunk_rgb_to_YCoCg.js";
13
+ import { chunk_decode_g_buffer_normal } from "../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
14
+ import { chunk_v3_matrix4_project } from "../../../shader/chunk/geometry/vec3/chunk_v3_matrix4_project.js";
15
+ import { chunk_decode_g_buffer_roughness } from "../../../shader/chunk/material/chunk_decode_g_buffer_roughness.js";
16
+ import { RECIPROCAL_PI_DECLARATION } from "../../../shader/chunk/math/RECIPROCAL_PI_DECLARATION.js";
17
+ import { chunk_murmur3_vec3u } from "../../../shader/chunk/random/murmur/chunk_murmur3_vec3u.js";
18
+ import { chunk_texel_coordinate_to_uv } from "../../../shader/chunk/texture/chunk_texel_coordinate_to_uv.js";
19
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
20
+ import { ImageShader } from "../../../shader/ImageShader.js";
21
+ import { ShaderDescriptor } from "../../../shader/ShaderDescriptor.js";
22
+ import { chunk_ssr_hit_unpack } from "../chunk_ssr_hit_unpack.js";
23
+ import { chunk_is_background } from "../../../shader/chunk/depth/chunk_is_background.js";
24
+ import { chunk_get_neighbour_weight } from "./chunk_get_neighbour_weight.js";
25
+ import { chunk_get_ray_mip_level } from "./chunk_get_ray_mip_level.js";
26
+ import { chunk_reconstruct_pdf } from "./chunk_reconstruct_pdf.js";
27
+
28
+ const RESOLVE_UNIFORMS = WebGPUStruct.from({
29
+ frame_index: u32,
30
+ });
31
+
32
+ /**
33
+ * Compose the shared SSR hit resolve with a mode's GI sampling functions.
34
+ * sample_radiance defines ssr_sample_radiance(position, normal, view_direction, roughness, coord).
35
+ * Optional sample_hit_irradiance defines ssr_sample_hit_irradiance(position, normal, direction).
36
+ *
37
+ * @param {object} options
38
+ * @param {string} options.label
39
+ * @param {import("../../../shader/resource/ShaderResourceSetDescriptor.js").ShaderResourceSetDescriptor} options.resources GI resources
40
+ * @param {CodeChunk} options.sample_radiance
41
+ * @param {CodeChunk} [options.sample_hit_irradiance]
42
+ * @returns {ImageShader}
43
+ */
44
+ export function build_ssr_resolve_shader({ label, resources, sample_radiance, sample_hit_irradiance }) {
45
+
46
+ // per-pass, four bytes, read-only: immediate data rather than a uniform buffer
47
+ resources.setImmediate("settings", RESOLVE_UNIFORMS);
48
+ resources.createGroup()
49
+ .addTexture("tTrace", "uint")
50
+ .addTexture("tDepth")
51
+ .addTexture("tPBR")
52
+ .addTexture("tNormal", "uint")
53
+ .addTexture("tColor", "float")
54
+ .addTexture("tAlbedoAO", "unfilterable-float")
55
+ .addSampler("sLinear", "filtering", SamplerDescriptor.from({
56
+ magFilter: "linear",
57
+ mipmapFilter: "linear",
58
+ addressModeU: "clamp-to-edge",
59
+ addressModeV: "clamp-to-edge",
60
+ }))
61
+ .addUniform("camera", CAMERA_UNIFORM_STRUCT)
62
+ ;
63
+
64
+ const body = CodeChunk.from(
65
+ //language=WGSL
66
+ `
67
+ // optimized 7x7 neighbourhood offsets. Optimized for noise diffusion and TAA artifact avoidance
68
+ const NEIGHBOR_OFFSETS = array<vec2<i32>, 48>(
69
+ vec2<i32>(2, -3),
70
+ vec2<i32>(3, -1),
71
+ vec2<i32>(0, -2),
72
+ vec2<i32>(1, -3),
73
+ vec2<i32>(3, 0),
74
+ vec2<i32>(2, -1),
75
+ vec2<i32>(3, -2),
76
+ vec2<i32>(2, 2),
77
+ vec2<i32>(3, 1),
78
+ vec2<i32>(1, 3),
79
+ vec2<i32>(3, 3),
80
+ vec2<i32>(0, 2),
81
+ vec2<i32>(2, 1),
82
+ vec2<i32>(1, -1),
83
+ vec2<i32>(3, -3),
84
+ vec2<i32>(2, -2),
85
+ vec2<i32>(0, -3),
86
+ vec2<i32>(1, 0),
87
+ vec2<i32>(-2, -1),
88
+ vec2<i32>(-3, -2),
89
+ vec2<i32>(-1, -3),
90
+ vec2<i32>(-3, 1),
91
+ vec2<i32>(-2, 0),
92
+ vec2<i32>(-3, -1),
93
+ vec2<i32>(-3, 2),
94
+ vec2<i32>(-1, 1),
95
+ vec2<i32>(-2, 3),
96
+ vec2<i32>(0, 3),
97
+ vec2<i32>(1, 2),
98
+ vec2<i32>(-1, 0),
99
+ vec2<i32>(-3, 3),
100
+ vec2<i32>(-2, 2),
101
+ vec2<i32>(0, 1),
102
+ vec2<i32>(-1, 3),
103
+ vec2<i32>(2, 3),
104
+ vec2<i32>(3, 2),
105
+ vec2<i32>(1, 1),
106
+ vec2<i32>(2, 0),
107
+ vec2<i32>(0, -1),
108
+ vec2<i32>(-1, 2),
109
+ vec2<i32>(-2, 1),
110
+ vec2<i32>(-3, 0),
111
+ vec2<i32>(-2, -2),
112
+ vec2<i32>(-1, -1),
113
+ vec2<i32>(-3, -3),
114
+ vec2<i32>(1, -2),
115
+ vec2<i32>(-2, -3),
116
+ vec2<i32>(-1, -2),
117
+ );
118
+
119
+ @fragment
120
+ fn main(
121
+ @builtin(position) coord: vec4<f32>,
122
+ @location(0) uv: vec2<f32>,
123
+ ) -> SSRResolveOutput {
124
+
125
+ let coord_i = vec2<i32>(coord.xy);
126
+
127
+ let texel_depth = textureLoad(tDepth, coord_i, 0 ).r;
128
+
129
+ let this_pbr = textureLoad(tPBR, coord_i, 0);
130
+ let this_roughness = decode_g_buffer_roughness(this_pbr);
131
+
132
+ let this_normal_ws = decode_g_buffer_normal( textureLoad(tNormal, coord_i, 0).xy );
133
+ let this_normal_vs = direction_world_to_view(this_normal_ws, camera);
134
+
135
+ let this_position_vs = screen_coordinate_to_view(vec2u(coord_i), tDepth, camera);
136
+ let view_direction_vs = normalize(-this_position_vs);
137
+
138
+ let render_resolution = textureDimensions(tColor,0).xy;
139
+
140
+ let tan_half_fov = camera.device_depth_to_view_space.w;
141
+ let focal_length_px = f32(render_resolution.y) / (2.0 * tan_half_fov);
142
+
143
+ let trace_texel = textureLoad(tTrace, coord_i, 0);
144
+
145
+ let this_hit = ssr_hit_unpack(trace_texel.xy);
146
+
147
+
148
+ let this_hit_uv = texel_coordinate_to_uv(vec2f(this_hit.position.xy), render_resolution);
149
+ var this_hit_position_vs = this_position_vs + this_normal_vs;
150
+ var this_hit_normal_ws = this_normal_ws;
151
+ var this_hit_color_sample = vec3f(0.0);
152
+ var this_confidence = 0.0;
153
+ if (this_hit.confidence > 0.0 && is_on_screen_i32(vec2i(this_hit.position), vec2i(render_resolution))) {
154
+ let hit_depth = textureLoad(tDepth, this_hit.position, 0).r;
155
+ if (!is_background(hit_depth)) {
156
+ let candidate_position = screen_coordinate_to_view(this_hit.position, tDepth, camera);
157
+ let candidate_distance = length(candidate_position - this_position_vs);
158
+ if (is_finite(candidate_distance) && candidate_distance > 1e-6) {
159
+ this_hit_position_vs = candidate_position;
160
+ this_hit_normal_ws = decode_g_buffer_normal(textureLoad(tNormal, this_hit.position, 0).xy);
161
+ let hit_normal_vs = direction_world_to_view(this_hit_normal_ws, camera);
162
+ let mip = get_ray_mip_level(this_position_vs, this_hit_position_vs, hit_normal_vs, this_roughness, focal_length_px);
163
+ this_hit_color_sample = textureSampleLevel(tColor, sLinear, this_hit_uv, mip).rgb;
164
+ this_confidence = this_hit.confidence;
165
+ }
166
+ }
167
+ }
168
+ let this_hit_normal_vs = direction_world_to_view(this_hit_normal_ws, camera);
169
+ let this_weight = this_confidence;
170
+ var weight_sum = this_weight;
171
+ var max_confidence = this_confidence;
172
+ var distance_moments = ssr_distance_moments(length(this_hit_position_vs - this_position_vs), 1.0, this_weight);
173
+
174
+ let this_hit_luma = rgb_to_luminance(this_hit_color_sample);
175
+
176
+ var result = this_hit_color_sample * this_weight;
177
+ // weight the seed like every neighbour tap — both accumulators divide by weight_sum
178
+ var result_luma_moment2 = this_hit_luma * this_hit_luma * this_weight;
179
+
180
+ const NEIGHBOUR_SAMPLE_COUNT = 4;
181
+
182
+ let hash_seed = murmur3_vec3u(vec3u(vec2u(coord_i), settings.frame_index));
183
+
184
+ for(var i = 0u; i < NEIGHBOUR_SAMPLE_COUNT; i++){
185
+
186
+ let heighbour_index = ( hash_seed + i ) % 48;
187
+
188
+ let neighbour_coord = coord_i + NEIGHBOR_OFFSETS[heighbour_index];
189
+ if (!is_on_screen_i32(neighbour_coord, vec2i(render_resolution))) { continue; }
190
+
191
+ let neighbour_normal_ws = decode_g_buffer_normal(textureLoad(tNormal, neighbour_coord, 0).xy);
192
+ let neighbour_normal_vs = direction_world_to_view(neighbour_normal_ws, camera);
193
+
194
+ let neighbour_pbr = textureLoad(tPBR, neighbour_coord, 0);
195
+ let neighbour_roughness = decode_g_buffer_roughness(neighbour_pbr);
196
+
197
+ let sample_hit = ssr_hit_unpack(textureLoad(tTrace, neighbour_coord, 0).xy);
198
+
199
+ if (sample_hit.confidence <= 0.0 || !is_on_screen_i32(vec2i(sample_hit.position), vec2i(render_resolution))) { continue; }
200
+ // reconstruct ray hit position
201
+ let sample_hit_depth = textureLoad(tDepth, sample_hit.position, 0).r;
202
+ if (is_background(sample_hit_depth)) { continue; }
203
+ let sample_hit_uv = texel_coordinate_to_uv(vec2f(sample_hit.position), render_resolution);
204
+ let sample_hit_position_vs = project_position_from_depth(
205
+ sample_hit_uv,
206
+ sample_hit_depth,
207
+ camera.projection_matrix_inverse,
208
+ );
209
+
210
+ let sample_distance = length(sample_hit_position_vs - this_position_vs);
211
+ if (!is_finite(sample_distance) || sample_distance <= 1e-6) { continue; }
212
+ let sample_direction = (sample_hit_position_vs - this_position_vs) / sample_distance;
213
+
214
+ // check visibility
215
+ let sample_hit_normal_ws = decode_g_buffer_normal( textureLoad(tNormal, sample_hit.position.xy, 0).xy );
216
+ let sample_hit_normal_vs = direction_world_to_view(sample_hit_normal_ws, camera);
217
+
218
+ let ray_hit_valid = step( 0, dot(-sample_direction, sample_hit_normal_vs));
219
+ let ray_cast_valid = step( 0, dot(sample_direction, this_normal_vs) );
220
+
221
+ // NOTE: we assume that visibility between the center sample and the neighbour is the same. This is incorrect, but thanks to normal visibility weighing and BRDF weighing - it's not noticeable in practice.
222
+ // technically view direction for the neighbour is different, but it's close enough as an approximation
223
+ let neighbour_view_direction = view_direction_vs;
224
+
225
+ let neighbour_position_vs = screen_coordinate_to_view(
226
+ vec2u(neighbour_coord),
227
+ tDepth,
228
+ camera,
229
+ );
230
+ let neighbour_distance = length(sample_hit_position_vs - neighbour_position_vs);
231
+ if (!is_finite(neighbour_distance) || neighbour_distance <= 1e-6) { continue; }
232
+ let neighbour_ray_direction = (sample_hit_position_vs - neighbour_position_vs) / neighbour_distance;
233
+
234
+ // reconstruct PDF for the neighbouring ray
235
+ // we need this to weigh the neighbour
236
+ let sample_pdf = reconstruct_pdf(
237
+ neighbour_normal_vs,
238
+ neighbour_view_direction,
239
+ neighbour_ray_direction,
240
+ neighbour_roughness
241
+ );
242
+
243
+ let sample_visibility = ray_cast_valid * ray_hit_valid;
244
+ let confidence_visible = sample_hit.confidence * sample_visibility;
245
+
246
+ let normalization_weight = get_neighbour_weight(
247
+ sample_pdf,
248
+ sample_direction,
249
+ view_direction_vs,
250
+ this_normal_vs,
251
+ this_roughness,
252
+ );
253
+
254
+ let weight = confidence_visible * normalization_weight;
255
+ if (!is_finite(weight) || weight <= 0.0) { continue; }
256
+ max_confidence = max(max_confidence, confidence_visible);
257
+ distance_moments += ssr_distance_moments(sample_distance, 1.0, weight);
258
+
259
+ weight_sum += weight;
260
+
261
+ let sample_mip = get_ray_mip_level(
262
+ neighbour_position_vs,
263
+ sample_hit_position_vs,
264
+ sample_hit_normal_vs,
265
+ neighbour_roughness,
266
+ focal_length_px,
267
+ );
268
+
269
+ let sample_color = textureSampleLevel(tColor, sLinear, sample_hit_uv, sample_mip).rgb;
270
+
271
+ result += sample_color * weight;
272
+
273
+ let sample_luma = rgb_to_luminance(sample_color);
274
+
275
+ // track second moment for variance
276
+ result_luma_moment2 += sample_luma * sample_luma * weight;
277
+ }
278
+
279
+ if(weight_sum < 1e-5){
280
+ // no valid samples,
281
+
282
+ // TODO search further
283
+ }
284
+
285
+ if(weight_sum > 1e-5 ){
286
+ // only normalize if we got some valid samples
287
+ result /= weight_sum;
288
+ result_luma_moment2 /= weight_sum;
289
+ }
290
+
291
+ let view_direction_ws = ( camera.view_matrix_inverse * vec4(view_direction_vs, 0.0) ).xyz;
292
+ let this_position_ws = v3_matrix4_project( this_position_vs, camera.view_matrix_inverse );
293
+
294
+
295
+ ${sample_hit_irradiance === undefined ? '' : `
296
+ if (this_confidence > 0.05) {
297
+ let this_hit_position_ws = v3_matrix4_project(this_hit_position_vs, camera.view_matrix_inverse);
298
+ let this_hit_direction_ws = normalize(this_hit_position_ws - this_position_ws);
299
+ let hit_irradiance = ssr_sample_hit_irradiance(
300
+ this_hit_position_ws, this_hit_normal_ws, this_hit_direction_ws,
301
+ );
302
+ let this_hit_albedo = textureLoad(tAlbedoAO, this_hit.position, 0).rgb;
303
+ result += this_hit_albedo * hit_irradiance * RECIPROCAL_PI;
304
+ }
305
+ `}
306
+
307
+ let gi_radiance = ssr_sample_radiance(
308
+ this_position_ws, this_normal_ws, view_direction_ws, this_roughness, vec2u(coord_i),
309
+ );
310
+
311
+ // NOTE: we don't apply Fresnel here because it's added after denoising
312
+
313
+ let color = mix(gi_radiance, result, max_confidence);
314
+
315
+ // compute variance
316
+ let luma = rgb_to_luminance(result);
317
+ let variance = max(result_luma_moment2 - luma*luma, 0.0);
318
+
319
+ var output: SSRResolveOutput;
320
+ output.radiance = vec4f(color, variance);
321
+ output.metadata = ssr_resolve_metadata(distance_moments, max_confidence);
322
+ return output;
323
+ }
324
+ `, [
325
+ chunk_ssr_metadata,
326
+ chunk_is_on_screen_i32,
327
+ chunk_decode_g_buffer_roughness,
328
+ chunk_direction_world_to_view,
329
+ chunk_screen_coordinate_to_view,
330
+ chunk_decode_g_buffer_normal,
331
+ chunk_rgb_to_YCoCg,
332
+ sample_radiance,
333
+ ...(sample_hit_irradiance === undefined ? [] : [sample_hit_irradiance]),
334
+ chunk_ssr_hit_unpack,
335
+ chunk_texel_coordinate_to_uv,
336
+ chunk_get_neighbour_weight,
337
+ chunk_is_background,
338
+ chunk_murmur3_vec3u,
339
+ chunk_reconstruct_pdf,
340
+ chunk_get_ray_mip_level,
341
+ chunk_project_position_from_depth,
342
+ chunk_v3_matrix4_project,
343
+ RECIPROCAL_PI_DECLARATION,
344
+ chunk_rgb_to_luminance,
345
+ ]
346
+ );
347
+
348
+ return new ImageShader({
349
+ descriptor: ShaderDescriptor.from({
350
+ label,
351
+ resources,
352
+ body
353
+ }),
354
+ targets: [
355
+ // TODO output rgbe5559 color and f16 variance to reduce memory bandwidth
356
+ {
357
+ format: "rgba16float"
358
+ },
359
+ { format: "rg32float" }
360
+ ],
361
+ depthStencil: DEPTH_STENCIL_FOREGROUND_ONLY,
362
+ });
363
+ }
@@ -43,7 +43,7 @@ fn get_neighbour_weight(
43
43
  // Range: Clamp at 2.0 for mirror-like, up to 10.0 for rough.
44
44
  let current_variance_limit = mix(2.0, 10.0, roughness);
45
45
 
46
- return min(current_variance_limit, localBRDF / safe_pdf);;
46
+ return min(current_variance_limit, localBRDF / safe_pdf);
47
47
  }
48
48
  `, [
49
49
  SSR_RAY_HIT.declaration_chunk,
@@ -0,0 +1,2 @@
1
+ export const ssr_resolve_shader_Brick4: import("../../../shader/ImageShader.js").ImageShader;
2
+ //# sourceMappingURL=ssr_resolve_shader_Brick4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr_resolve_shader_Brick4.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_Brick4.js"],"names":[],"mappings":"AAWA,6FAYG"}
@@ -0,0 +1,24 @@
1
+ import { BRICK4_DATA_STRUCT } from "../../../global_illumination/brick4/gpu/BRICK4_DATA_STRUCT.js";
2
+ import { chunk_brick4_sample_specular } from "../../../global_illumination/brick4/gpu/draw/chunk_brick4_sample_specular.js";
3
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
4
+ import { ShaderResourceSetDescriptor } from "../../../shader/resource/ShaderResourceSetDescriptor.js";
5
+ import { build_ssr_resolve_shader } from "./build_ssr_resolve_shader.js";
6
+
7
+ const resources = new ShaderResourceSetDescriptor();
8
+ resources.createGroup()
9
+ .addStorageBuffer("brick4", BRICK4_DATA_STRUCT)
10
+ .addTexture("tSTBN_vec2", "unfilterable-float", "3d");
11
+
12
+ export const ssr_resolve_shader_Brick4 = build_ssr_resolve_shader({
13
+ label: "SSR resolve / Brick4",
14
+ resources,
15
+ sample_radiance: CodeChunk.from(
16
+ //language=WGSL
17
+ `
18
+ fn ssr_sample_radiance(
19
+ position_ws: vec3f, normal_ws: vec3f, view_direction_ws: vec3f, roughness: f32, coord: vec2u,
20
+ ) -> vec3f {
21
+ return brick4_sample_specular(position_ws, normal_ws, view_direction_ws, roughness, coord, settings.frame_index);
22
+ }
23
+ `, [chunk_brick4_sample_specular]),
24
+ });
@@ -1,7 +1,2 @@
1
- /**
2
- * Maps traced SSR out to actual color
3
- * @type {ImageShader}
4
- */
5
- export const ssr_resolve_shader_IBL: ImageShader;
6
- import { ImageShader } from "../../../shader/ImageShader.js";
1
+ export const ssr_resolve_shader_IBL: import("../../../shader/ImageShader.js").ImageShader;
7
2
  //# sourceMappingURL=ssr_resolve_shader_IBL.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ssr_resolve_shader_IBL.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js"],"names":[],"mappings":"AA+TA;;;GAGG;AACH,qCAFU,WAAW,CAelB;4BA9TyB,gCAAgC"}
1
+ {"version":3,"file":"ssr_resolve_shader_IBL.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js"],"names":[],"mappings":"AAQA,0FAYG"}