@woosh/meep-engine 3.65.0 → 3.68.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 (350) hide show
  1. package/package.json +1 -1
  2. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  3. package/src/engine/graphics3/GraphicsEngine.js +4 -9
  4. package/src/engine/graphics3/load_cube_environment.js +3 -3
  5. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  6. package/src/format/lut/cube/CubeLut.d.ts +38 -0
  7. package/src/format/lut/cube/CubeLut.d.ts.map +1 -0
  8. package/src/format/lut/cube/CubeLut.js +23 -0
  9. package/src/format/lut/cube/cube_read.d.ts +23 -0
  10. package/src/format/lut/cube/cube_read.d.ts.map +1 -0
  11. package/src/format/lut/cube/cube_read.js +199 -0
  12. package/src/format/lut/cube/cube_write.d.ts +15 -0
  13. package/src/format/lut/cube/cube_write.d.ts.map +1 -0
  14. package/src/format/lut/cube/cube_write.js +90 -0
  15. package/src/shade/playground/probe_clipmap/README.md +1 -0
  16. package/src/shade/playground/probe_clipmap/index.html +48 -0
  17. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  18. package/src/shade/playground/probe_clipmap/main.js +36 -0
  19. package/src/shade/renderer/Renderer.d.ts +7 -0
  20. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  21. package/src/shade/renderer/Renderer.js +225 -27
  22. package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
  23. package/src/shade/renderer/ShadeIndirectLightingMode.js +9 -0
  24. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +22 -0
  25. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +1 -0
  26. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.js +160 -0
  27. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts +45 -0
  28. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts.map +1 -0
  29. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.js +57 -0
  30. package/src/shade/renderer/atmosphere/GPUSky.d.ts +23 -8
  31. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  32. package/src/shade/renderer/atmosphere/GPUSky.js +91 -34
  33. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +17 -0
  34. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -1
  35. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +55 -25
  36. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts +164 -0
  37. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts.map +1 -0
  38. package/src/shade/renderer/atmosphere/SceneAtmosphere.js +308 -0
  39. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +3 -12
  40. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  41. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +52 -89
  42. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts +14 -0
  43. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts.map +1 -0
  44. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.js +103 -0
  45. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +10 -4
  46. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  47. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +95 -57
  48. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +10 -14
  49. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  50. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +97 -69
  51. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts +17 -0
  52. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts.map +1 -1
  53. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.js +117 -48
  54. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +8 -0
  55. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  56. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +65 -35
  57. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +2 -1
  58. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts.map +1 -1
  59. package/src/shade/renderer/atmosphere/compute_mie_absorption.js +6 -6
  60. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts +41 -0
  61. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts.map +1 -0
  62. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.js +123 -0
  63. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  64. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +21 -64
  65. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -2
  66. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  67. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +55 -179
  68. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts +7 -0
  69. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts.map +1 -0
  70. package/src/shade/renderer/atmosphere/shader_sky_view_lut.js +111 -0
  71. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts +0 -1
  72. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  73. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +68 -79
  74. package/src/shade/renderer/deferred/shader_background.js +1 -1
  75. package/src/shade/renderer/deferred/shader_background_sky.d.ts +5 -0
  76. package/src/shade/renderer/deferred/shader_background_sky.d.ts.map +1 -0
  77. package/src/shade/renderer/deferred/shader_background_sky.js +130 -0
  78. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts +73 -4
  79. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  80. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +113 -7
  81. package/src/shade/renderer/deferred/tonemap/TONEMAP_PURKINJE_SHIFT.d.ts +12 -0
  82. package/src/shade/renderer/deferred/tonemap/TONEMAP_PURKINJE_SHIFT.d.ts.map +1 -0
  83. package/src/shade/renderer/deferred/tonemap/TONEMAP_PURKINJE_SHIFT.js +12 -0
  84. package/src/shade/renderer/deferred/tonemap/ToneMapper.d.ts +15 -1
  85. package/src/shade/renderer/deferred/tonemap/ToneMapper.d.ts.map +1 -1
  86. package/src/shade/renderer/deferred/tonemap/ToneMapper.js +31 -3
  87. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts +26 -0
  88. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts.map +1 -0
  89. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.js +55 -0
  90. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_lut.d.ts +2 -2
  91. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_lut.d.ts.map +1 -1
  92. package/src/shade/renderer/deferred/tonemap/shader_tonemap_HDR_lut.js +6 -3
  93. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_lut.d.ts +3 -2
  94. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_lut.d.ts.map +1 -1
  95. package/src/shade/renderer/deferred/tonemap/shader_tonemap_LDR_lut.js +7 -3
  96. package/src/shade/renderer/extension/ViewTextures.d.ts +3 -2
  97. package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
  98. package/src/shade/renderer/extension/ViewTextures.js +3 -2
  99. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  100. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  101. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  102. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  103. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  104. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +1 -1
  105. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -1
  106. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  107. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +29 -0
  108. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts +47 -0
  109. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts.map +1 -0
  110. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.js +246 -0
  111. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +4 -15
  112. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  113. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +8 -148
  114. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +4 -9
  115. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  116. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +9 -58
  117. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts +142 -0
  118. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts.map +1 -0
  119. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.js +938 -0
  120. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts +192 -0
  121. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts.map +1 -0
  122. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.js +231 -0
  123. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts +11 -0
  124. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts.map +1 -0
  125. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.js +25 -0
  126. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts +110 -0
  127. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts.map +1 -0
  128. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.js +197 -0
  129. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts +150 -0
  130. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts.map +1 -0
  131. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.js +408 -0
  132. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts +23 -0
  133. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts.map +1 -0
  134. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.js +63 -0
  135. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts +24 -0
  136. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts.map +1 -0
  137. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.js +61 -0
  138. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts +39 -0
  139. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts.map +1 -0
  140. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.js +126 -0
  141. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts +21 -0
  142. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts.map +1 -0
  143. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.js +74 -0
  144. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts +20 -0
  145. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts.map +1 -0
  146. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.js +26 -0
  147. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts +24 -0
  148. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts.map +1 -0
  149. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.js +57 -0
  150. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts +22 -0
  151. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts.map +1 -0
  152. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.js +53 -0
  153. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts +62 -0
  154. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts.map +1 -0
  155. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.js +156 -0
  156. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts +18 -0
  157. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts.map +1 -0
  158. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.js +50 -0
  159. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts +21 -0
  160. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts.map +1 -0
  161. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.js +54 -0
  162. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts +67 -0
  163. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts.map +1 -0
  164. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.js +509 -0
  165. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts +20 -0
  166. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts.map +1 -0
  167. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.js +128 -0
  168. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts +62 -0
  169. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts.map +1 -0
  170. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.js +478 -0
  171. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts +69 -0
  172. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts.map +1 -0
  173. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.js +457 -0
  174. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts +27 -0
  175. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts.map +1 -0
  176. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.js +219 -0
  177. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts +22 -0
  178. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts.map +1 -0
  179. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.js +151 -0
  180. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts +66 -0
  181. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts.map +1 -0
  182. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.js +301 -0
  183. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts +59 -0
  184. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts.map +1 -0
  185. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.js +364 -0
  186. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts +40 -0
  187. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts.map +1 -0
  188. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.js +275 -0
  189. package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts.map +1 -1
  190. package/src/shade/renderer/grass/blade/GPUGrassBlades.js +17 -2
  191. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts +18 -8
  192. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts.map +1 -1
  193. package/src/shade/renderer/grass/blade/grass_blade_resolve.js +114 -32
  194. package/src/shade/renderer/light/GPULightCollection.d.ts +1 -1
  195. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  196. package/src/shade/renderer/light/GPULightCollection.js +213 -80
  197. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.d.ts +1 -2
  198. package/src/shade/renderer/light/environment/chunk_sample_environment_color.d.ts.map +1 -0
  199. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.js +3 -4
  200. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  201. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
  202. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +1 -1
  203. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +35 -9
  204. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  205. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +81 -11
  206. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
  207. package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +4 -1
  208. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +1 -1
  209. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +1 -1
  210. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +1 -1
  211. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +1 -1
  212. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +1 -1
  213. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  214. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +2 -0
  215. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +2 -0
  216. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts +6 -0
  217. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
  218. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +9 -1
  219. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
  220. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +4 -3
  221. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts +17 -0
  222. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts.map +1 -0
  223. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.js +16 -0
  224. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts +21 -0
  225. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts.map +1 -0
  226. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.js +30 -0
  227. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -5
  228. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  229. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +19 -17
  230. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +2 -0
  231. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  232. package/src/shade/renderer/scene/GPUSceneContext.js +2 -1
  233. package/src/shade/renderer/scene/Scene.d.ts +9 -2
  234. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  235. package/src/shade/renderer/scene/Scene.js +10 -2
  236. package/src/shade/renderer/shader/ImageShader.d.ts +24 -12
  237. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  238. package/src/shade/renderer/shader/ImageShader.js +11 -8
  239. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts +3 -1
  240. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts.map +1 -1
  241. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js +11 -3
  242. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +2 -11
  243. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -1
  244. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +23 -32
  245. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts +6 -0
  246. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts.map +1 -1
  247. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js +14 -2
  248. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.d.ts.map +1 -1
  249. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.js +4 -2
  250. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.d.ts.map +1 -1
  251. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.js +11 -3
  252. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -1
  253. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +68 -69
  254. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts +4 -1
  255. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts.map +1 -1
  256. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.js +46 -39
  257. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.d.ts.map +1 -1
  258. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js +5 -3
  259. package/src/shade/renderer/shader/chunk/color/conversion/chunk_CRM_REC709_AP1.d.ts +6 -0
  260. package/src/shade/renderer/shader/chunk/color/conversion/chunk_CRM_REC709_AP1.d.ts.map +1 -1
  261. package/src/shade/renderer/shader/chunk/color/conversion/chunk_CRM_REC709_AP1.js +7 -0
  262. package/src/shade/renderer/shader/chunk/color/grade/chunk_color_grade.d.ts +4 -4
  263. package/src/shade/renderer/shader/chunk/color/grade/chunk_color_grade.d.ts.map +1 -1
  264. package/src/shade/renderer/shader/chunk/color/grade/chunk_color_grade.js +86 -5
  265. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts +73 -0
  266. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts.map +1 -0
  267. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.js +139 -0
  268. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts +14 -0
  269. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts.map +1 -0
  270. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.js +30 -0
  271. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts +21 -0
  272. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts.map +1 -0
  273. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.js +60 -0
  274. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.d.ts → io/chunk_light_get_sun.d.ts} +3 -6
  275. package/src/shade/renderer/shader/chunk/light/io/chunk_light_get_sun.d.ts.map +1 -0
  276. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.js → io/chunk_light_get_sun.js} +6 -26
  277. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +1 -1
  278. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +3 -1
  279. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  280. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -2
  281. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  282. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +743 -739
  283. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +2 -0
  284. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  285. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +19 -17
  286. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  287. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +5 -3
  288. package/src/shade/renderer/water/chunk_water_gi.js +2 -0
  289. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  290. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  291. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts +0 -2
  292. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts.map +0 -1
  293. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +0 -45
  294. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts +0 -2
  295. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts.map +0 -1
  296. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.js +0 -17
  297. package/src/engine/graphics/sh3/sky/hosek/README.md +0 -4
  298. package/src/engine/graphics/sh3/sky/hosek/data.d.ts +0 -17
  299. package/src/engine/graphics/sh3/sky/hosek/data.d.ts.map +0 -1
  300. package/src/engine/graphics/sh3/sky/hosek/data.js +0 -3744
  301. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts +0 -2
  302. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts.map +0 -1
  303. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.js +0 -71
  304. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts +0 -26
  305. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts.map +0 -1
  306. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.js +0 -70
  307. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +0 -22
  308. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +0 -1
  309. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +0 -388
  310. package/src/engine/graphics3/make_default_environment.d.ts +0 -15
  311. package/src/engine/graphics3/make_default_environment.d.ts.map +0 -1
  312. package/src/engine/graphics3/make_default_environment.js +0 -111
  313. package/src/shade/renderer/atmosphere/MIE_G.d.ts +0 -6
  314. package/src/shade/renderer/atmosphere/MIE_G.d.ts.map +0 -1
  315. package/src/shade/renderer/atmosphere/MIE_G.js +0 -5
  316. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +0 -1
  317. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts +0 -4
  318. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts.map +0 -1
  319. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +0 -44
  320. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +0 -2
  321. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +0 -1
  322. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +0 -43
  323. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts +0 -3
  324. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts.map +0 -1
  325. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.js +0 -6
  326. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts +0 -3
  327. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts.map +0 -1
  328. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.js +0 -18
  329. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts +0 -14
  330. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts.map +0 -1
  331. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.js +0 -86
  332. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts +0 -8
  333. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +0 -1
  334. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +0 -125
  335. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts +0 -3
  336. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts.map +0 -1
  337. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.js +0 -17
  338. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts +0 -3
  339. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts.map +0 -1
  340. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.js +0 -38
  341. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +0 -16
  342. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts.map +0 -1
  343. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +0 -28
  344. package/src/shade/renderer/shader/chunk/color/tonemap/purkinjie/chunk_apply_purkinjie_shift.d.ts +0 -11
  345. package/src/shade/renderer/shader/chunk/color/tonemap/purkinjie/chunk_apply_purkinjie_shift.d.ts.map +0 -1
  346. package/src/shade/renderer/shader/chunk/color/tonemap/purkinjie/chunk_apply_purkinjie_shift.js +0 -56
  347. package/src/shade/renderer/shader/chunk/light/sky/chunk_sample_sky_color.d.ts.map +0 -1
  348. package/src/shade/renderer/view/GPUViewSkyContext.d.ts +0 -26
  349. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +0 -1
  350. package/src/shade/renderer/view/GPUViewSkyContext.js +0 -170
@@ -0,0 +1,301 @@
1
+ import { chunk_folded_dispatch } from "../../gpu_primitive/indirect/chunk_folded_dispatch.js";
2
+ import {
3
+ chunk_uv_octahedral_unit_decode
4
+ } from "../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
5
+ import { chunk_divide_round_up_u32 } from "../../shader/chunk/math/chunk_divide_round_up_u32.js";
6
+ import {
7
+ chunk_subgroup_append_slot,
8
+ SUBGROUP_APPEND_NONE
9
+ } from "../../shader/chunk/subgroup/chunk_subgroup_append_slot.js";
10
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
11
+ import { ComputeShader } from "../../shader/ComputeShader.js";
12
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
13
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
14
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
15
+ import {
16
+ chunk_screen_probe,
17
+ SCREEN_PROBE_COUNTERS_READ_RESOURCE,
18
+ SCREEN_PROBE_COUNTERS_RESOURCE,
19
+ SCREEN_PROBE_DISPATCH_WRITE_RESOURCE,
20
+ SCREEN_PROBE_FRAME_RESOURCE,
21
+ SCREEN_PROBE_TILE_COUNTS_WRITE_RESOURCE,
22
+ SCREEN_PROBE_TILE_PROBES_WRITE_RESOURCE,
23
+ SCREEN_PROBES_WRITE_RESOURCE
24
+ } from "./chunk_screen_probe.js";
25
+ import { chunk_screen_probe_interpolate } from "./chunk_screen_probe_interpolate.js";
26
+ import {
27
+ chunk_screen_probe_surface,
28
+ SCREEN_PROBE_CAMERA_PREVIOUS_RESOURCE,
29
+ SCREEN_PROBE_CAMERA_RESOURCE,
30
+ SCREEN_PROBE_DEPTH_RESOURCE,
31
+ SCREEN_PROBE_PBR_RESOURCE,
32
+ SCREEN_PROBE_VELOCITY_RESOURCE
33
+ } from "./chunk_screen_probe_surface.js";
34
+ import {
35
+ SCREEN_PROBE_COUNTER_ADAPTIVE,
36
+ SCREEN_PROBE_COUNTER_BRICK_RAYS,
37
+ SCREEN_PROBE_DISPATCH_BRICK_RAY_COUNT,
38
+ SCREEN_PROBE_DISPATCH_BRICK_RAYS,
39
+ SCREEN_PROBE_DISPATCH_PROBE_COUNT,
40
+ SCREEN_PROBE_DISPATCH_PROBES,
41
+ SCREEN_PROBE_DISPATCH_RAYS,
42
+ SCREEN_PROBE_DISPATCH_THREADS,
43
+ SCREEN_PROBE_THREAD_WORKGROUP_SIZE,
44
+ SCREEN_PROBE_TILE_WORKGROUP_SIZE,
45
+ SCREEN_PROBE_WEIGHT_EPSILON
46
+ } from "./SCREEN_PROBE.js";
47
+
48
+ /**
49
+ * Whether a point's interpolation weights cover it, Lumen's rule: the weights normalised by their sum held to
50
+ * `SCREEN_PROBE_WEIGHT_EPSILON` from below sum to at least 1 − ε, that is the raw sum is at least ε·(1 − ε). Adaptive
51
+ * placement puts a probe where they do not; integration gives no light there.
52
+ *
53
+ * ```wgsl
54
+ * fn screen_probe_covers(weights: vec4<f32>) -> bool
55
+ * ```
56
+ *
57
+ * @type {CodeChunk}
58
+ */
59
+ export const chunk_screen_probe_covers = CodeChunk.from(
60
+ //language=WGSL
61
+ `
62
+ fn screen_probe_covers(weights: vec4<f32>) -> bool {
63
+ return dot(weights, vec4<f32>(1.0)) >= ${SCREEN_PROBE_WEIGHT_EPSILON * (1 - SCREEN_PROBE_WEIGHT_EPSILON)};
64
+ }
65
+ `);
66
+
67
+ const surface_group = (resources) => resources.createGroup()
68
+ .add(SCREEN_PROBE_FRAME_RESOURCE)
69
+ .add(SCREEN_PROBE_CAMERA_RESOURCE)
70
+ .add(SCREEN_PROBE_CAMERA_PREVIOUS_RESOURCE)
71
+ .add(SCREEN_PROBE_DEPTH_RESOURCE)
72
+ .add(SCREEN_PROBE_PBR_RESOURCE)
73
+ .add(SCREEN_PROBE_VELOCITY_RESOURCE);
74
+
75
+ const uniform_resources = new ShaderResourceSetDescriptor();
76
+
77
+ surface_group(uniform_resources);
78
+
79
+ uniform_resources.createGroup()
80
+ .add(SCREEN_PROBES_WRITE_RESOURCE)
81
+ .add(SCREEN_PROBE_TILE_COUNTS_WRITE_RESOURCE);
82
+
83
+ /**
84
+ * Uniform placement (Lumen's `ScreenProbeDownsampleDepthUniformCS`): a thread a tile of D × D pixels, the probe on the
85
+ * pixel at the frame's jitter in it, held inside the view (`screen_probe_surface_at`), written to its tile's place in
86
+ * the atlas. A tile over the sky gets a record of depth zero. Each tile's count of adaptive probes starts at zero.
87
+ *
88
+ * @type {ComputeShader}
89
+ */
90
+ export const shader_screen_probe_place_uniform = ComputeShader.from({
91
+ label: "Screen Probe Place Uniform",
92
+ resources: uniform_resources,
93
+ body: CodeChunk.from(
94
+ //language=WGSL
95
+ `
96
+ @compute @workgroup_size(${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, ${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, 1)
97
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
98
+ let frame = screen_probe_frame;
99
+
100
+ if (any(id.xy >= frame.tile_count)) {
101
+ return;
102
+ }
103
+
104
+ let probe = id.y * frame.tile_count.x + id.x;
105
+ let pixel = min((id.xy << vec2<u32>(frame.downsample_shift)) + frame.jitter, frame.view_size - 1u);
106
+
107
+ screen_probes[probe] = screen_probe_surface_at(pixel);
108
+
109
+ atomicStore(&screen_probe_tile_counts[probe], 0u);
110
+ }
111
+ `, [
112
+ chunk_screen_probe,
113
+ chunk_screen_probe_surface,
114
+ ]),
115
+ });
116
+
117
+ /**
118
+ * Settings of one level of adaptive placement.
119
+ * @type {WebGPUStruct}
120
+ */
121
+ export const SCREEN_PROBE_ADAPTIVE_SETTINGS = WebGPUStruct.from({
122
+ /** the level, 1 for half the downsample factor, 2 for a quarter, … */
123
+ level: u32,
124
+ }, "ScreenProbeAdaptiveSettings");
125
+
126
+ const adaptive_resources = new ShaderResourceSetDescriptor();
127
+
128
+ adaptive_resources.setImmediate("settings", SCREEN_PROBE_ADAPTIVE_SETTINGS);
129
+
130
+ surface_group(adaptive_resources);
131
+
132
+ adaptive_resources.createGroup()
133
+ .add(SCREEN_PROBES_WRITE_RESOURCE)
134
+ .add(SCREEN_PROBE_TILE_COUNTS_WRITE_RESOURCE)
135
+ .add(SCREEN_PROBE_TILE_PROBES_WRITE_RESOURCE)
136
+ .add(SCREEN_PROBE_COUNTERS_RESOURCE);
137
+
138
+ /**
139
+ * Adaptive placement, one level (Lumen's `ScreenProbeAdaptivePlacementCS`): a thread a point of the grid at the
140
+ * level's spacing, D >> level, with the frame's jitter. A point that a coarser level's grid already holds, both its
141
+ * indices even, is skipped. A point on a surface that the probes placed so far do not cover (`screen_probe_interpolate`,
142
+ * `screen_probe_covers`), the uniform ones and the coarser levels' adaptive ones, gets a probe:
143
+ *
144
+ * - its slot from the frame's count of adaptive probes, one atomic a subgroup; past `adaptive_capacity` no probe is
145
+ * placed, so where the view wants more than the slots hold, the coarser levels, placed first, keep theirs;
146
+ * - its record at probe `uniform_count + slot`, and its slot on its tile's list, whose count of
147
+ * `adaptive_tile_capacity` it cannot pass, since the tile holds that many of the grids' points.
148
+ *
149
+ * The levels run one dispatch each, coarsest first, so a level sees every coarser one's probes; within a level,
150
+ * another workgroup's placement may not be seen yet, as in Lumen.
151
+ *
152
+ * @type {ComputeShader}
153
+ */
154
+ export const shader_screen_probe_place_adaptive = ComputeShader.from({
155
+ label: "Screen Probe Place Adaptive",
156
+ resources: adaptive_resources,
157
+ body: CodeChunk.from(
158
+ //language=WGSL
159
+ `
160
+ fn screen_probe_tile_adaptive_count(tile: u32) -> u32 {
161
+ return atomicLoad(&screen_probe_tile_counts[tile]);
162
+ }
163
+
164
+ @compute @workgroup_size(${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, ${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, 1)
165
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
166
+ let frame = screen_probe_frame;
167
+ let level = settings.level;
168
+ let pixel = (id.xy << vec2<u32>(frame.downsample_shift - level)) + frame.jitter;
169
+
170
+ var wants = false;
171
+ var record: ScreenProbe;
172
+
173
+ // a point a coarser grid holds has both indices even
174
+ if (all(pixel < frame.view_size) && any((id.xy & vec2<u32>(1u)) != vec2<u32>(0u))) {
175
+ record = screen_probe_surface_at(pixel);
176
+
177
+ if (record.depth > 0.0) {
178
+ let normal = uv_octahedral_unit_decode(unpack2x16unorm(record.normal));
179
+ let sample = screen_probe_interpolate(pixel, vec2<f32>(0.0), record.position, record.depth, normal);
180
+
181
+ wants = !screen_probe_covers(sample.weights);
182
+ }
183
+ }
184
+
185
+ // every lane, wanting or not, for the subgroup's one atomic
186
+ let slot = subgroup_append_slot(&screen_probe_counters[${SCREEN_PROBE_COUNTER_ADAPTIVE}u], wants, frame.adaptive_capacity);
187
+
188
+ if (slot == ${SUBGROUP_APPEND_NONE}u) {
189
+ return;
190
+ }
191
+
192
+ screen_probes[frame.uniform_count + slot] = record;
193
+
194
+ // the tile of a point of this level's grid: its index over the level's subdivision of a tile
195
+ let tile = id.xy >> vec2<u32>(level);
196
+ let tile_index = tile.y * frame.tile_count.x + tile.x;
197
+ let place = atomicAdd(&screen_probe_tile_counts[tile_index], 1u);
198
+
199
+ screen_probe_tile_probes[tile_index * frame.adaptive_tile_capacity + place] = slot;
200
+ }
201
+ `, [
202
+ chunk_screen_probe,
203
+ chunk_screen_probe_surface,
204
+ chunk_screen_probe_interpolate,
205
+ chunk_screen_probe_covers,
206
+ chunk_subgroup_append_slot,
207
+ chunk_uv_octahedral_unit_decode,
208
+ ]),
209
+ });
210
+
211
+ const command_resources = new ShaderResourceSetDescriptor();
212
+
213
+ command_resources.createGroup()
214
+ .add(SCREEN_PROBE_FRAME_RESOURCE)
215
+ .add(SCREEN_PROBE_COUNTERS_READ_RESOURCE)
216
+ .add(SCREEN_PROBE_DISPATCH_WRITE_RESOURCE);
217
+
218
+ /**
219
+ * The commands of the frame's passes over its probes, one thread after placement: the frame's probes, the uniform ones
220
+ * and the adaptive ones placed, held to their slots; a workgroup a probe, a thread a probe and a thread a ray, folded
221
+ * (`folded_dispatch`), and the count.
222
+ *
223
+ * @type {ComputeShader}
224
+ */
225
+ export const shader_screen_probe_command = ComputeShader.from({
226
+ label: "Screen Probe Command",
227
+ resources: command_resources,
228
+ body: CodeChunk.from(
229
+ //language=WGSL
230
+ `
231
+ fn screen_probe_command_write(at: u32, groups: u32) {
232
+ let folded = folded_dispatch(groups);
233
+
234
+ screen_probe_dispatch[at] = folded.x;
235
+ screen_probe_dispatch[at + 1u] = folded.y;
236
+ screen_probe_dispatch[at + 2u] = folded.z;
237
+ }
238
+
239
+ @compute @workgroup_size(1, 1, 1)
240
+ fn main() {
241
+ let frame = screen_probe_frame;
242
+ let count = frame.uniform_count + min(screen_probe_counters[${SCREEN_PROBE_COUNTER_ADAPTIVE}u], frame.adaptive_capacity);
243
+ let rays = count << (2u * frame.octahedron_shift);
244
+
245
+ screen_probe_command_write(${SCREEN_PROBE_DISPATCH_PROBES}u, count);
246
+ screen_probe_command_write(${SCREEN_PROBE_DISPATCH_THREADS}u, divide_round_up_u32(count, ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u));
247
+ screen_probe_command_write(${SCREEN_PROBE_DISPATCH_RAYS}u, divide_round_up_u32(rays, ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u));
248
+
249
+ screen_probe_dispatch[${SCREEN_PROBE_DISPATCH_PROBE_COUNT}u] = count;
250
+ }
251
+ `, [
252
+ chunk_screen_probe,
253
+ chunk_folded_dispatch,
254
+ chunk_divide_round_up_u32,
255
+ ]),
256
+ });
257
+
258
+ /**
259
+ * Settings of the bricks' command.
260
+ * @type {WebGPUStruct}
261
+ */
262
+ export const SCREEN_PROBE_BRICK_COMMAND_SETTINGS = WebGPUStruct.from({
263
+ /** slots of the list of rays left to the bricks */
264
+ capacity: u32,
265
+ }, "ScreenProbeBrickCommandSettings");
266
+
267
+ const brick_command_resources = new ShaderResourceSetDescriptor();
268
+
269
+ brick_command_resources.setImmediate("settings", SCREEN_PROBE_BRICK_COMMAND_SETTINGS);
270
+
271
+ brick_command_resources.createGroup()
272
+ .add(SCREEN_PROBE_COUNTERS_READ_RESOURCE)
273
+ .add(SCREEN_PROBE_DISPATCH_WRITE_RESOURCE);
274
+
275
+ /**
276
+ * The command of the passes over the rays the screen left to the bricks, one thread after the screen trace: the count,
277
+ * held to the list's slots, and a thread a ray, folded.
278
+ *
279
+ * @type {ComputeShader}
280
+ */
281
+ export const shader_screen_probe_brick_command = ComputeShader.from({
282
+ label: "Screen Probe Brick Command",
283
+ resources: brick_command_resources,
284
+ body: CodeChunk.from(
285
+ //language=WGSL
286
+ `
287
+ @compute @workgroup_size(1, 1, 1)
288
+ fn main() {
289
+ let count = min(screen_probe_counters[${SCREEN_PROBE_COUNTER_BRICK_RAYS}u], settings.capacity);
290
+ let folded = folded_dispatch(divide_round_up_u32(count, ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u));
291
+
292
+ screen_probe_dispatch[${SCREEN_PROBE_DISPATCH_BRICK_RAYS}u] = folded.x;
293
+ screen_probe_dispatch[${SCREEN_PROBE_DISPATCH_BRICK_RAYS}u + 1u] = folded.y;
294
+ screen_probe_dispatch[${SCREEN_PROBE_DISPATCH_BRICK_RAYS}u + 2u] = folded.z;
295
+ screen_probe_dispatch[${SCREEN_PROBE_DISPATCH_BRICK_RAY_COUNT}u] = count;
296
+ }
297
+ `, [
298
+ chunk_folded_dispatch,
299
+ chunk_divide_round_up_u32,
300
+ ]),
301
+ });
@@ -0,0 +1,59 @@
1
+ /** The G-buffer's bent normals, as GTAO left them (the shading normals where it is off). @type {ShaderResourceDescriptor} */
2
+ export const SCREEN_PROBE_BENT_NORMAL_RESOURCE: ShaderResourceDescriptor;
3
+ /** The integration's output, `rgba16float`: E at the bent normal, and in alpha the moving share, negative where no probe covered the pixel. @type {ShaderResourceDescriptor} */
4
+ export const SCREEN_PROBE_INTEGRATED_READ_RESOURCE: ShaderResourceDescriptor;
5
+ /** @type {ShaderResourceDescriptor} */
6
+ export const SCREEN_PROBE_INTEGRATED_WRITE_RESOURCE: ShaderResourceDescriptor;
7
+ /** Last frame's filtered diffuse, `rgba16float`. @type {ShaderResourceDescriptor} */
8
+ export const SCREEN_PROBE_DIFFUSE_HISTORY_RESOURCE: ShaderResourceDescriptor;
9
+ /** This frame's, the temporal filter's output. @type {ShaderResourceDescriptor} */
10
+ export const SCREEN_PROBE_DIFFUSE_WRITE_RESOURCE: ShaderResourceDescriptor;
11
+ /** Last frame's frames and fast update a pixel, two unorm16 in `r32uint`. @type {ShaderResourceDescriptor} */
12
+ export const SCREEN_PROBE_FRAMES_HISTORY_RESOURCE: ShaderResourceDescriptor;
13
+ /** @type {ShaderResourceDescriptor} */
14
+ export const SCREEN_PROBE_FRAMES_WRITE_RESOURCE: ShaderResourceDescriptor;
15
+ /** Last frame's reverse-Z depth. @type {ShaderResourceDescriptor} */
16
+ export const SCREEN_PROBE_DEPTH_PREVIOUS_RESOURCE: ShaderResourceDescriptor;
17
+ /**
18
+ * Each pixel's diffuse light from the probes (Lumen's `ScreenProbeIntegrateCS`, its SH3 diffuse): a thread a pixel.
19
+ *
20
+ * - **The lookup's jitter**: by the frame's blue noise at the pixel, up to a tile's width each way, Lumen's
21
+ * `FullResolutionJitterWidth` of one, kept only where the pixel it lands on is coplanar with this one (plane weight at
22
+ * `SCREEN_PROBE_JITTER_PLANE_WEIGHT_SCALE` past 0.01), so the probes' grid dissolves into noise the temporal filter
23
+ * averages without crossing an edge.
24
+ * - **The probes**: `screen_probe_interpolate` from the pixel's surface point, view depth and face normal; the weights
25
+ * normalised by their sum, held to `SCREEN_PROBE_WEIGHT_EPSILON` from below.
26
+ * - **The light**: the probes' SH3 blended by the weights (each probe by name), E at the pixel's bent normal
27
+ * (`sh3_color_get_irradiance_at`), as the probe clipmap's diffuse resolves at it, over the exposure the SH was
28
+ * pre-exposed by: the scene's units, which the temporal filter and the deferred passes take.
29
+ * - **Alpha**: the probes' moving shares by the same weights, held to 0.001 from below; negative where the weights do
30
+ * not cover the pixel (`screen_probe_covers`), whose light is then zero and the temporal filter's to fill.
31
+ * - A pixel of the sky is zero.
32
+ *
33
+ * @type {ComputeShader}
34
+ */
35
+ export const shader_screen_probe_integrate: ComputeShader;
36
+ /**
37
+ * The temporal filter (Lumen's `ScreenProbeTemporalReprojectionCS`): a thread a pixel, blending its integrated light
38
+ * into its history.
39
+ *
40
+ * - **Reprojection**: the pixel's place last frame by its velocity; its four bilinear neighbours there, each kept
41
+ * where last frame's depth at it is the depth this pixel's point had then by its velocity (Lumen's history depth),
42
+ * within `SCREEN_PROBE_TEMPORAL_DISTANCE` of it, the threshold dithered over ×½ to ×1½ (a blue-noise draw half the
43
+ * noise's period from the integration's jitter, so the two do not move together) and divided by the cosine between
44
+ * the face normal and the view (held to 0.1), the depth a grazing surface spans between jittered frames; and on the
45
+ * screen. Each texel's history by its bilinear weight among those kept.
46
+ * - **Frames**: each kept neighbour's count plus one, held to `temporal_frames`, by the same weights.
47
+ * - **Fast update**: the pixel's moving share over `SCREEN_PROBE_FAST_UPDATE_MOVING`, less 0.2 over 0.8, held to
48
+ * `SCREEN_PROBE_FAST_UPDATE_LIMIT`, and no less than the history's: the frames are held to (1 − it) of the most.
49
+ * The history keeps this frame's own share.
50
+ * - **A pixel the probes did not cover** takes the mean of its covered neighbours in a 3 × 3 this frame; with none,
51
+ * its history alone.
52
+ * - The blend is 1 / (1 + frames); a pixel with no history to keep takes its new light whole.
53
+ *
54
+ * @type {ComputeShader}
55
+ */
56
+ export const shader_screen_probe_temporal: ComputeShader;
57
+ import { ShaderResourceDescriptor } from "../../shader/resource/ShaderResourceDescriptor.js";
58
+ import { ComputeShader } from "../../shader/ComputeShader.js";
59
+ //# sourceMappingURL=shader_screen_probe_resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_screen_probe_resolve.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.js"],"names":[],"mappings":"AA+CA,6HAA6H;AAC7H,gDADiG,wBAAwB,CACf;AAE1G,gLAAgL;AAChL,oDADoJ,wBAAwB,CACrC;AACvI,uCAAuC;AACvC,qDADW,wBAAwB,CACyH;AAE5J,qFAAqF;AACrF,oDADyD,wBAAwB,CAC2D;AAC5I,mFAAmF;AACnF,kDADuD,wBAAwB,CACuE;AAEtJ,8GAA8G;AAC9G,mDADkF,wBAAwB,CACkB;AAC5H,uCAAuC;AACvC,iDADW,wBAAwB,CAC6G;AAEhJ,qEAAqE;AACrE,mDADyC,wBAAwB,CACsC;AAmBvG;;;;;;;;;;;;;;;;;GAiBG;AACH,4CAFU,aAAa,CA2FpB;AAmBH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,2CAFU,aAAa,CAsIpB;yCA5VsC,mDAAmD;8BAD9D,+BAA+B"}