@woosh/meep-engine 3.67.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 (311) 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/shade/playground/probe_clipmap/index.html +43 -0
  7. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  8. package/src/shade/playground/probe_clipmap/main.js +29 -0
  9. package/src/shade/renderer/Renderer.d.ts +7 -0
  10. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  11. package/src/shade/renderer/Renderer.js +213 -15
  12. package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
  13. package/src/shade/renderer/ShadeIndirectLightingMode.js +9 -0
  14. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +22 -0
  15. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +1 -0
  16. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.js +160 -0
  17. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts +45 -0
  18. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts.map +1 -0
  19. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.js +57 -0
  20. package/src/shade/renderer/atmosphere/GPUSky.d.ts +23 -8
  21. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  22. package/src/shade/renderer/atmosphere/GPUSky.js +91 -34
  23. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +17 -0
  24. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -1
  25. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +55 -25
  26. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts +164 -0
  27. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts.map +1 -0
  28. package/src/shade/renderer/atmosphere/SceneAtmosphere.js +308 -0
  29. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +3 -12
  30. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  31. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +52 -89
  32. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts +14 -0
  33. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts.map +1 -0
  34. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.js +103 -0
  35. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +10 -4
  36. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  37. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +95 -57
  38. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +10 -14
  39. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  40. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +97 -69
  41. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts +17 -0
  42. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts.map +1 -1
  43. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.js +117 -48
  44. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +8 -0
  45. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  46. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +65 -35
  47. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +2 -1
  48. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts.map +1 -1
  49. package/src/shade/renderer/atmosphere/compute_mie_absorption.js +6 -6
  50. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts +41 -0
  51. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts.map +1 -0
  52. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.js +123 -0
  53. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  54. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +21 -64
  55. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -2
  56. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  57. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +55 -179
  58. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts +7 -0
  59. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts.map +1 -0
  60. package/src/shade/renderer/atmosphere/shader_sky_view_lut.js +111 -0
  61. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts +0 -1
  62. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  63. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +68 -79
  64. package/src/shade/renderer/deferred/shader_background.js +1 -1
  65. package/src/shade/renderer/deferred/shader_background_sky.d.ts +5 -0
  66. package/src/shade/renderer/deferred/shader_background_sky.d.ts.map +1 -0
  67. package/src/shade/renderer/deferred/shader_background_sky.js +130 -0
  68. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts +2 -1
  69. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts.map +1 -1
  70. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.js +6 -2
  71. package/src/shade/renderer/extension/ViewTextures.d.ts +3 -2
  72. package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
  73. package/src/shade/renderer/extension/ViewTextures.js +3 -2
  74. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  75. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  76. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  77. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  78. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  79. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +1 -1
  80. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -1
  81. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  82. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +29 -0
  83. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts +47 -0
  84. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts.map +1 -0
  85. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.js +246 -0
  86. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +4 -15
  87. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  88. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +8 -148
  89. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +4 -9
  90. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  91. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +9 -58
  92. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts +142 -0
  93. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts.map +1 -0
  94. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.js +938 -0
  95. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts +192 -0
  96. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts.map +1 -0
  97. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.js +231 -0
  98. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts +11 -0
  99. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts.map +1 -0
  100. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.js +25 -0
  101. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts +110 -0
  102. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts.map +1 -0
  103. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.js +197 -0
  104. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts +150 -0
  105. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts.map +1 -0
  106. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.js +408 -0
  107. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts +23 -0
  108. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts.map +1 -0
  109. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.js +63 -0
  110. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts +24 -0
  111. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts.map +1 -0
  112. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.js +61 -0
  113. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts +39 -0
  114. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts.map +1 -0
  115. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.js +126 -0
  116. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts +21 -0
  117. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts.map +1 -0
  118. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.js +74 -0
  119. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts +20 -0
  120. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts.map +1 -0
  121. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.js +26 -0
  122. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts +24 -0
  123. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts.map +1 -0
  124. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.js +57 -0
  125. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts +22 -0
  126. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts.map +1 -0
  127. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.js +53 -0
  128. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts +62 -0
  129. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts.map +1 -0
  130. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.js +156 -0
  131. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts +18 -0
  132. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts.map +1 -0
  133. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.js +50 -0
  134. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts +21 -0
  135. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts.map +1 -0
  136. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.js +54 -0
  137. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts +67 -0
  138. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts.map +1 -0
  139. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.js +509 -0
  140. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts +20 -0
  141. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts.map +1 -0
  142. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.js +128 -0
  143. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts +62 -0
  144. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts.map +1 -0
  145. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.js +478 -0
  146. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts +69 -0
  147. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts.map +1 -0
  148. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.js +457 -0
  149. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts +27 -0
  150. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts.map +1 -0
  151. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.js +219 -0
  152. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts +22 -0
  153. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts.map +1 -0
  154. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.js +151 -0
  155. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts +66 -0
  156. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts.map +1 -0
  157. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.js +301 -0
  158. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts +59 -0
  159. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts.map +1 -0
  160. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.js +364 -0
  161. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts +40 -0
  162. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts.map +1 -0
  163. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.js +275 -0
  164. package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts.map +1 -1
  165. package/src/shade/renderer/grass/blade/GPUGrassBlades.js +17 -2
  166. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts +18 -8
  167. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts.map +1 -1
  168. package/src/shade/renderer/grass/blade/grass_blade_resolve.js +114 -32
  169. package/src/shade/renderer/light/GPULightCollection.d.ts +1 -1
  170. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  171. package/src/shade/renderer/light/GPULightCollection.js +213 -80
  172. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.d.ts +1 -2
  173. package/src/shade/renderer/light/environment/chunk_sample_environment_color.d.ts.map +1 -0
  174. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.js +3 -4
  175. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  176. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
  177. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +1 -1
  178. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +1 -1
  179. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +1 -1
  180. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +1 -1
  181. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +1 -1
  182. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +1 -1
  183. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  184. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +2 -0
  185. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +2 -0
  186. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts +6 -0
  187. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
  188. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +9 -1
  189. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
  190. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +4 -3
  191. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts +17 -0
  192. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts.map +1 -0
  193. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.js +16 -0
  194. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts +21 -0
  195. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts.map +1 -0
  196. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.js +30 -0
  197. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -5
  198. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  199. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +19 -17
  200. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +2 -0
  201. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  202. package/src/shade/renderer/scene/GPUSceneContext.js +2 -1
  203. package/src/shade/renderer/scene/Scene.d.ts +9 -2
  204. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  205. package/src/shade/renderer/scene/Scene.js +10 -2
  206. package/src/shade/renderer/shader/ImageShader.d.ts +24 -12
  207. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  208. package/src/shade/renderer/shader/ImageShader.js +11 -8
  209. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts +3 -1
  210. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts.map +1 -1
  211. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js +11 -3
  212. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +2 -11
  213. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -1
  214. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +23 -32
  215. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts +6 -0
  216. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts.map +1 -1
  217. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js +14 -2
  218. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.d.ts.map +1 -1
  219. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.js +4 -2
  220. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.d.ts.map +1 -1
  221. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.js +11 -3
  222. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -1
  223. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +68 -69
  224. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts +4 -1
  225. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts.map +1 -1
  226. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.js +46 -39
  227. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.d.ts.map +1 -1
  228. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js +5 -3
  229. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts +18 -10
  230. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts.map +1 -1
  231. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.js +30 -27
  232. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts +14 -0
  233. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts.map +1 -0
  234. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.js +30 -0
  235. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts +21 -0
  236. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts.map +1 -0
  237. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.js +60 -0
  238. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.d.ts → io/chunk_light_get_sun.d.ts} +3 -6
  239. package/src/shade/renderer/shader/chunk/light/io/chunk_light_get_sun.d.ts.map +1 -0
  240. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.js → io/chunk_light_get_sun.js} +6 -26
  241. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +1 -1
  242. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +3 -1
  243. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  244. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -2
  245. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  246. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +743 -739
  247. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +2 -0
  248. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  249. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +19 -17
  250. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  251. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +5 -3
  252. package/src/shade/renderer/water/chunk_water_gi.js +2 -0
  253. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  254. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  255. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts +0 -2
  256. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts.map +0 -1
  257. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +0 -45
  258. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts +0 -2
  259. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts.map +0 -1
  260. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.js +0 -17
  261. package/src/engine/graphics/sh3/sky/hosek/README.md +0 -4
  262. package/src/engine/graphics/sh3/sky/hosek/data.d.ts +0 -17
  263. package/src/engine/graphics/sh3/sky/hosek/data.d.ts.map +0 -1
  264. package/src/engine/graphics/sh3/sky/hosek/data.js +0 -3744
  265. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts +0 -2
  266. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts.map +0 -1
  267. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.js +0 -71
  268. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts +0 -26
  269. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts.map +0 -1
  270. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.js +0 -70
  271. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +0 -22
  272. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +0 -1
  273. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +0 -388
  274. package/src/engine/graphics3/make_default_environment.d.ts +0 -15
  275. package/src/engine/graphics3/make_default_environment.d.ts.map +0 -1
  276. package/src/engine/graphics3/make_default_environment.js +0 -111
  277. package/src/shade/renderer/atmosphere/MIE_G.d.ts +0 -6
  278. package/src/shade/renderer/atmosphere/MIE_G.d.ts.map +0 -1
  279. package/src/shade/renderer/atmosphere/MIE_G.js +0 -5
  280. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +0 -1
  281. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts +0 -4
  282. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts.map +0 -1
  283. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +0 -44
  284. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +0 -2
  285. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +0 -1
  286. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +0 -43
  287. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts +0 -3
  288. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts.map +0 -1
  289. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.js +0 -6
  290. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts +0 -3
  291. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts.map +0 -1
  292. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.js +0 -18
  293. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts +0 -14
  294. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts.map +0 -1
  295. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.js +0 -86
  296. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts +0 -8
  297. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +0 -1
  298. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +0 -125
  299. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts +0 -3
  300. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts.map +0 -1
  301. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.js +0 -17
  302. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts +0 -3
  303. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts.map +0 -1
  304. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.js +0 -38
  305. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +0 -16
  306. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts.map +0 -1
  307. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +0 -28
  308. package/src/shade/renderer/shader/chunk/light/sky/chunk_sample_sky_color.d.ts.map +0 -1
  309. package/src/shade/renderer/view/GPUViewSkyContext.d.ts +0 -26
  310. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +0 -1
  311. package/src/shade/renderer/view/GPUViewSkyContext.js +0 -170
@@ -0,0 +1,364 @@
1
+ import { chunk_project_position_from_depth } from "../../shader/chunk/camera/chunk_project_position_from_depth.js";
2
+ import { chunk_get_view_space_depth } from "../../shader/chunk/depth/chunk_get_view_space_depth.js";
3
+ import { chunk_is_background } from "../../shader/chunk/depth/chunk_is_background.js";
4
+ import { chunk_mat4_extract_position } from "../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
5
+ import {
6
+ chunk_decode_g_buffer_face_normal
7
+ } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
8
+ import { chunk_decode_g_buffer_normal } from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
9
+ import { chunk_stbn_sample_vec2 } from "../../shader/chunk/noise/chunk_stbn_sample_vec2.js";
10
+ import { chunk_sh3_color_add_scaled } from "../../shader/chunk/spherical_harmonics/chunk_sh3_color_add_scaled.js";
11
+ import {
12
+ chunk_sh3_color_get_irradiance_at
13
+ } from "../../shader/chunk/spherical_harmonics/chunk_sh3_color_get_irradiance_at.js";
14
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
15
+ import { ComputeShader } from "../../shader/ComputeShader.js";
16
+ import { ShaderResourceDescriptor } from "../../shader/resource/ShaderResourceDescriptor.js";
17
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
18
+ import { STBN_VEC2_RESOURCE } from "../../STATIC_GRAPHICS_ENGINE_ASSET_RESOURCES.js";
19
+ import { chunk_probe_clipmap } from "../probe_clipmap/probe/chunk_probe_clipmap.js";
20
+ import {
21
+ chunk_screen_probe,
22
+ SCREEN_PROBE_EXPOSURE_RESOURCE,
23
+ SCREEN_PROBE_FRAME_RESOURCE,
24
+ SCREEN_PROBE_MOVING_READ_RESOURCE,
25
+ SCREEN_PROBE_SH_READ_RESOURCE,
26
+ SCREEN_PROBE_TILE_COUNTS_READ_RESOURCE,
27
+ SCREEN_PROBE_TILE_PROBES_READ_RESOURCE,
28
+ SCREEN_PROBES_READ_RESOURCE
29
+ } from "./chunk_screen_probe.js";
30
+ import { chunk_screen_probe_interpolate } from "./chunk_screen_probe_interpolate.js";
31
+ import {
32
+ SCREEN_PROBE_CAMERA_PREVIOUS_RESOURCE,
33
+ SCREEN_PROBE_CAMERA_RESOURCE,
34
+ SCREEN_PROBE_DEPTH_RESOURCE,
35
+ SCREEN_PROBE_PBR_RESOURCE,
36
+ SCREEN_PROBE_VELOCITY_RESOURCE
37
+ } from "./chunk_screen_probe_surface.js";
38
+ import { chunk_screen_probe_covers } from "./shader_screen_probe_place.js";
39
+ import {
40
+ SCREEN_PROBE_FAST_UPDATE_LIMIT,
41
+ SCREEN_PROBE_FAST_UPDATE_MOVING,
42
+ SCREEN_PROBE_JITTER_PLANE_WEIGHT_SCALE,
43
+ SCREEN_PROBE_TEMPORAL_DISTANCE,
44
+ SCREEN_PROBE_TILE_WORKGROUP_SIZE,
45
+ SCREEN_PROBE_WEIGHT_EPSILON
46
+ } from "./SCREEN_PROBE.js";
47
+
48
+ /** The G-buffer's bent normals, as GTAO left them (the shading normals where it is off). @type {ShaderResourceDescriptor} */
49
+ export const SCREEN_PROBE_BENT_NORMAL_RESOURCE = ShaderResourceDescriptor.texture("tBentNormals", "uint");
50
+
51
+ /** 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} */
52
+ export const SCREEN_PROBE_INTEGRATED_READ_RESOURCE = ShaderResourceDescriptor.texture("screen_probe_integrated", "unfilterable-float");
53
+ /** @type {ShaderResourceDescriptor} */
54
+ export const SCREEN_PROBE_INTEGRATED_WRITE_RESOURCE = ShaderResourceDescriptor.storageTexture("screen_probe_integrated", "rgba16float", "2d", "write-only");
55
+
56
+ /** Last frame's filtered diffuse, `rgba16float`. @type {ShaderResourceDescriptor} */
57
+ export const SCREEN_PROBE_DIFFUSE_HISTORY_RESOURCE = ShaderResourceDescriptor.texture("screen_probe_diffuse_history", "unfilterable-float");
58
+ /** This frame's, the temporal filter's output. @type {ShaderResourceDescriptor} */
59
+ export const SCREEN_PROBE_DIFFUSE_WRITE_RESOURCE = ShaderResourceDescriptor.storageTexture("screen_probe_diffuse", "rgba16float", "2d", "write-only");
60
+
61
+ /** Last frame's frames and fast update a pixel, two unorm16 in `r32uint`. @type {ShaderResourceDescriptor} */
62
+ export const SCREEN_PROBE_FRAMES_HISTORY_RESOURCE = ShaderResourceDescriptor.texture("screen_probe_frames_history", "uint");
63
+ /** @type {ShaderResourceDescriptor} */
64
+ export const SCREEN_PROBE_FRAMES_WRITE_RESOURCE = ShaderResourceDescriptor.storageTexture("screen_probe_frames", "r32uint", "2d", "write-only");
65
+
66
+ /** Last frame's reverse-Z depth. @type {ShaderResourceDescriptor} */
67
+ export const SCREEN_PROBE_DEPTH_PREVIOUS_RESOURCE = ShaderResourceDescriptor.texture("tDepthPrevious");
68
+
69
+ const integrate_resources = new ShaderResourceSetDescriptor();
70
+
71
+ integrate_resources.createGroup()
72
+ .add(SCREEN_PROBE_FRAME_RESOURCE)
73
+ .add(SCREEN_PROBE_EXPOSURE_RESOURCE)
74
+ .add(SCREEN_PROBE_CAMERA_RESOURCE)
75
+ .add(SCREEN_PROBES_READ_RESOURCE)
76
+ .add(SCREEN_PROBE_TILE_COUNTS_READ_RESOURCE)
77
+ .add(SCREEN_PROBE_TILE_PROBES_READ_RESOURCE)
78
+ .add(SCREEN_PROBE_SH_READ_RESOURCE)
79
+ .add(SCREEN_PROBE_MOVING_READ_RESOURCE)
80
+ .add(STBN_VEC2_RESOURCE)
81
+ .add(SCREEN_PROBE_DEPTH_RESOURCE)
82
+ .add(SCREEN_PROBE_PBR_RESOURCE)
83
+ .add(SCREEN_PROBE_BENT_NORMAL_RESOURCE)
84
+ .add(SCREEN_PROBE_INTEGRATED_WRITE_RESOURCE);
85
+
86
+ /**
87
+ * Each pixel's diffuse light from the probes (Lumen's `ScreenProbeIntegrateCS`, its SH3 diffuse): a thread a pixel.
88
+ *
89
+ * - **The lookup's jitter**: by the frame's blue noise at the pixel, up to a tile's width each way, Lumen's
90
+ * `FullResolutionJitterWidth` of one, kept only where the pixel it lands on is coplanar with this one (plane weight at
91
+ * `SCREEN_PROBE_JITTER_PLANE_WEIGHT_SCALE` past 0.01), so the probes' grid dissolves into noise the temporal filter
92
+ * averages without crossing an edge.
93
+ * - **The probes**: `screen_probe_interpolate` from the pixel's surface point, view depth and face normal; the weights
94
+ * normalised by their sum, held to `SCREEN_PROBE_WEIGHT_EPSILON` from below.
95
+ * - **The light**: the probes' SH3 blended by the weights (each probe by name), E at the pixel's bent normal
96
+ * (`sh3_color_get_irradiance_at`), as the probe clipmap's diffuse resolves at it, over the exposure the SH was
97
+ * pre-exposed by: the scene's units, which the temporal filter and the deferred passes take.
98
+ * - **Alpha**: the probes' moving shares by the same weights, held to 0.001 from below; negative where the weights do
99
+ * not cover the pixel (`screen_probe_covers`), whose light is then zero and the temporal filter's to fill.
100
+ * - A pixel of the sky is zero.
101
+ *
102
+ * @type {ComputeShader}
103
+ */
104
+ export const shader_screen_probe_integrate = ComputeShader.from({
105
+ label: "Screen Probe Integrate",
106
+ resources: integrate_resources,
107
+ body: CodeChunk.from(
108
+ //language=WGSL
109
+ `
110
+ fn screen_probe_tile_adaptive_count(tile: u32) -> u32 {
111
+ return screen_probe_tile_counts[tile];
112
+ }
113
+
114
+ fn screen_probe_sh_of(probe: u32) -> array<vec3<f32>, 9> {
115
+ let at = probe * 7u;
116
+
117
+ return probe_record_sh_decode(array<u32, 7>(
118
+ screen_probe_sh[at], screen_probe_sh[at + 1u], screen_probe_sh[at + 2u], screen_probe_sh[at + 3u],
119
+ screen_probe_sh[at + 4u], screen_probe_sh[at + 5u], screen_probe_sh[at + 6u],
120
+ ));
121
+ }
122
+
123
+ @compute @workgroup_size(${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, ${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, 1)
124
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
125
+ let frame = screen_probe_frame;
126
+
127
+ if (any(id.xy >= frame.view_size)) {
128
+ return;
129
+ }
130
+
131
+ let pixel = id.xy;
132
+ let size = vec2<f32>(frame.view_size);
133
+ let device_depth = textureLoad(tDepth, pixel, 0).r;
134
+
135
+ if (is_background(device_depth)) {
136
+ textureStore(screen_probe_integrated, pixel, vec4<f32>(0.0));
137
+ return;
138
+ }
139
+
140
+ let position = project_position_from_depth((vec2<f32>(pixel) + 0.5) / size, device_depth, camera.view_projection_matrix_inverse);
141
+ let depth = get_view_space_depth(device_depth, camera);
142
+ let face = decode_g_buffer_face_normal(textureLoad(tPBR, pixel, 0));
143
+
144
+ // the lookup moves up to a tile each way, onto a pixel coplanar with this one
145
+ let span = f32(1u << frame.downsample_shift);
146
+ let shift = (stbn_sample_vec2(vec3<u32>(pixel, frame.frame_index)) * 2.0 - 1.0) * span;
147
+ let landed = vec2<u32>(clamp(vec2<f32>(pixel) + shift, vec2<f32>(0.0), size - 1.0));
148
+ let landed_depth = textureLoad(tDepth, landed, 0).r;
149
+
150
+ var offset = vec2<f32>(0.0);
151
+
152
+ if (!is_background(landed_depth)) {
153
+ let landed_position = project_position_from_depth((vec2<f32>(landed) + 0.5) / size, landed_depth, camera.view_projection_matrix_inverse);
154
+ let relative = abs(dot(face, landed_position - position)) / depth;
155
+
156
+ if (exp2(-${SCREEN_PROBE_JITTER_PLANE_WEIGHT_SCALE}.0 * relative * relative) > 0.01) {
157
+ offset = shift;
158
+ }
159
+ }
160
+
161
+ let sample = screen_probe_interpolate(pixel, offset, position, depth, face);
162
+ let covered = screen_probe_covers(sample.weights);
163
+ let weights = sample.weights / max(dot(sample.weights, vec4<f32>(1.0)), ${SCREEN_PROBE_WEIGHT_EPSILON});
164
+
165
+ var sh = array<vec3<f32>, 9>();
166
+ var moving = 0.0;
167
+
168
+ // each corner by name, a corner of no weight not read
169
+ if (weights.x > 0.0) { sh = sh3_color_add_scaled(sh, screen_probe_sh_of(sample.probes.x), weights.x); moving += weights.x * screen_probe_moving[sample.probes.x]; }
170
+ if (weights.y > 0.0) { sh = sh3_color_add_scaled(sh, screen_probe_sh_of(sample.probes.y), weights.y); moving += weights.y * screen_probe_moving[sample.probes.y]; }
171
+ if (weights.z > 0.0) { sh = sh3_color_add_scaled(sh, screen_probe_sh_of(sample.probes.z), weights.z); moving += weights.z * screen_probe_moving[sample.probes.z]; }
172
+ if (weights.w > 0.0) { sh = sh3_color_add_scaled(sh, screen_probe_sh_of(sample.probes.w), weights.w); moving += weights.w * screen_probe_moving[sample.probes.w]; }
173
+
174
+ let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, pixel, 0).x);
175
+ let irradiance = select(vec3<f32>(0.0), sh3_color_get_irradiance_at(bent_normal, sh) / max(screen_probe_exposure.value, 1e-20), covered);
176
+
177
+ textureStore(screen_probe_integrated, pixel, vec4<f32>(irradiance, select(-1.0, 1.0, covered) * max(moving, 0.001)));
178
+ }
179
+ `, [
180
+ chunk_screen_probe,
181
+ chunk_screen_probe_interpolate,
182
+ chunk_screen_probe_covers,
183
+ chunk_is_background,
184
+ chunk_project_position_from_depth,
185
+ chunk_get_view_space_depth,
186
+ chunk_decode_g_buffer_face_normal,
187
+ chunk_decode_g_buffer_normal,
188
+ chunk_stbn_sample_vec2,
189
+ chunk_sh3_color_add_scaled,
190
+ chunk_sh3_color_get_irradiance_at,
191
+ chunk_probe_clipmap,
192
+ ]),
193
+ });
194
+
195
+ const temporal_resources = new ShaderResourceSetDescriptor();
196
+
197
+ temporal_resources.createGroup()
198
+ .add(SCREEN_PROBE_FRAME_RESOURCE)
199
+ .add(SCREEN_PROBE_CAMERA_RESOURCE)
200
+ .add(SCREEN_PROBE_CAMERA_PREVIOUS_RESOURCE)
201
+ .add(STBN_VEC2_RESOURCE)
202
+ .add(SCREEN_PROBE_DEPTH_RESOURCE)
203
+ .add(SCREEN_PROBE_DEPTH_PREVIOUS_RESOURCE)
204
+ .add(SCREEN_PROBE_PBR_RESOURCE)
205
+ .add(SCREEN_PROBE_VELOCITY_RESOURCE)
206
+ .add(SCREEN_PROBE_INTEGRATED_READ_RESOURCE)
207
+ .add(SCREEN_PROBE_DIFFUSE_HISTORY_RESOURCE)
208
+ .add(SCREEN_PROBE_FRAMES_HISTORY_RESOURCE)
209
+ .add(SCREEN_PROBE_DIFFUSE_WRITE_RESOURCE)
210
+ .add(SCREEN_PROBE_FRAMES_WRITE_RESOURCE);
211
+
212
+ /**
213
+ * The temporal filter (Lumen's `ScreenProbeTemporalReprojectionCS`): a thread a pixel, blending its integrated light
214
+ * into its history.
215
+ *
216
+ * - **Reprojection**: the pixel's place last frame by its velocity; its four bilinear neighbours there, each kept
217
+ * where last frame's depth at it is the depth this pixel's point had then by its velocity (Lumen's history depth),
218
+ * within `SCREEN_PROBE_TEMPORAL_DISTANCE` of it, the threshold dithered over ×½ to ×1½ (a blue-noise draw half the
219
+ * noise's period from the integration's jitter, so the two do not move together) and divided by the cosine between
220
+ * the face normal and the view (held to 0.1), the depth a grazing surface spans between jittered frames; and on the
221
+ * screen. Each texel's history by its bilinear weight among those kept.
222
+ * - **Frames**: each kept neighbour's count plus one, held to `temporal_frames`, by the same weights.
223
+ * - **Fast update**: the pixel's moving share over `SCREEN_PROBE_FAST_UPDATE_MOVING`, less 0.2 over 0.8, held to
224
+ * `SCREEN_PROBE_FAST_UPDATE_LIMIT`, and no less than the history's: the frames are held to (1 − it) of the most.
225
+ * The history keeps this frame's own share.
226
+ * - **A pixel the probes did not cover** takes the mean of its covered neighbours in a 3 × 3 this frame; with none,
227
+ * its history alone.
228
+ * - The blend is 1 / (1 + frames); a pixel with no history to keep takes its new light whole.
229
+ *
230
+ * @type {ComputeShader}
231
+ */
232
+ export const shader_screen_probe_temporal = ComputeShader.from({
233
+ label: "Screen Probe Temporal",
234
+ resources: temporal_resources,
235
+ body: CodeChunk.from(
236
+ //language=WGSL
237
+ `
238
+ // a covered neighbour's light this frame, and one if it was covered
239
+ fn screen_probe_neighbour_light(pixel: vec2<i32>, offset: vec2<i32>) -> vec4<f32> {
240
+ let at = pixel + offset;
241
+
242
+ if (any(at < vec2<i32>(0)) || any(at >= vec2<i32>(screen_probe_frame.view_size))) {
243
+ return vec4<f32>(0.0);
244
+ }
245
+
246
+ let value = textureLoad(screen_probe_integrated, vec2<u32>(at), 0);
247
+
248
+ return select(vec4<f32>(0.0), vec4<f32>(value.rgb, 1.0), value.a > 0.0);
249
+ }
250
+
251
+ @compute @workgroup_size(${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, ${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, 1)
252
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
253
+ let frame = screen_probe_frame;
254
+
255
+ if (any(id.xy >= frame.view_size)) {
256
+ return;
257
+ }
258
+
259
+ let pixel = id.xy;
260
+ let size = vec2<f32>(frame.view_size);
261
+ let device_depth = textureLoad(tDepth, pixel, 0).r;
262
+
263
+ if (is_background(device_depth)) {
264
+ textureStore(screen_probe_diffuse, pixel, vec4<f32>(0.0));
265
+ textureStore(screen_probe_frames, pixel, vec4<u32>(0u));
266
+ return;
267
+ }
268
+
269
+ let position = project_position_from_depth((vec2<f32>(pixel) + 0.5) / size, device_depth, camera.view_projection_matrix_inverse);
270
+ let fresh = textureLoad(screen_probe_integrated, pixel, 0);
271
+ let covered = fresh.a > 0.0;
272
+ let moving = abs(fresh.a);
273
+
274
+ var light = fresh.rgb;
275
+ var force_history = false;
276
+
277
+ if (!covered) {
278
+ let p = vec2<i32>(pixel);
279
+ let s = screen_probe_neighbour_light(p, vec2<i32>(-1, -1)) + screen_probe_neighbour_light(p, vec2<i32>(0, -1)) + screen_probe_neighbour_light(p, vec2<i32>(1, -1))
280
+ + screen_probe_neighbour_light(p, vec2<i32>(-1, 0)) + screen_probe_neighbour_light(p, vec2<i32>(1, 0))
281
+ + screen_probe_neighbour_light(p, vec2<i32>(-1, 1)) + screen_probe_neighbour_light(p, vec2<i32>(0, 1)) + screen_probe_neighbour_light(p, vec2<i32>(1, 1));
282
+
283
+ light = select(vec3<f32>(0.0), s.rgb / s.a, s.a > 0.0);
284
+ force_history = s.a <= 0.0;
285
+ }
286
+
287
+ var history = vec3<f32>(0.0);
288
+ var frames = 0.0;
289
+ var fast_history = 0.0;
290
+ var kept = 0.0;
291
+
292
+ if (frame.history != 0u) {
293
+ let previous = vec2<f32>(pixel) + 0.5 - textureLoad(tVelocity, pixel, 0).rg;
294
+ let on_screen = all(previous >= vec2<f32>(0.0)) && all(previous <= size);
295
+
296
+ if (on_screen) {
297
+ // the point's view depth last frame: its depth now less the depth its velocity moved through
298
+ let expected = get_view_space_depth(device_depth, camera) - textureLoad(tVelocity, pixel, 0).z;
299
+ let face = decode_g_buffer_face_normal(textureLoad(tPBR, pixel, 0));
300
+ let view_direction = normalize(mat4_extract_position(camera.transform) - position);
301
+ let noise = stbn_sample_vec2(vec3<u32>(pixel, frame.frame_index + 32u)).x;
302
+ let threshold = ${SCREEN_PROBE_TEMPORAL_DISTANCE} * mix(0.5, 1.5, noise) / clamp(dot(view_direction, face), 0.1, 1.0);
303
+
304
+ let corner = previous - 0.5;
305
+ let base = vec2<i32>(floor(corner));
306
+ let f = corner - floor(corner);
307
+
308
+ for (var k = 0u; k < 4u; k++) {
309
+ let tap = base + vec2<i32>(i32(k & 1u), i32(k >> 1u));
310
+
311
+ if (any(tap < vec2<i32>(0)) || any(tap >= vec2<i32>(frame.view_size))) {
312
+ continue;
313
+ }
314
+
315
+ let axes = select(1.0 - f, f, vec2<bool>((k & 1u) != 0u, (k >> 1u) != 0u));
316
+ let bilinear = axes.x * axes.y;
317
+ let history_depth = get_view_space_depth(textureLoad(tDepthPrevious, vec2<u32>(tap), 0).r, camera_previous);
318
+
319
+ if (abs(history_depth - expected) >= expected * threshold || bilinear <= 0.0) {
320
+ continue;
321
+ }
322
+
323
+ let packed = unpack2x16unorm(textureLoad(screen_probe_frames_history, vec2<u32>(tap), 0).r);
324
+
325
+ history += bilinear * textureLoad(screen_probe_diffuse_history, vec2<u32>(tap), 0).rgb;
326
+ frames += bilinear * min(packed.x * frame.temporal_frames + 1.0, frame.temporal_frames);
327
+ fast_history += bilinear * packed.y;
328
+ kept += bilinear;
329
+ }
330
+ }
331
+ }
332
+
333
+ // this frame's share of moving light, as Lumen's fast update maps it
334
+ let fast_own = saturate(min((saturate(moving / ${SCREEN_PROBE_FAST_UPDATE_MOVING}) - 0.2) / 0.8, ${SCREEN_PROBE_FAST_UPDATE_LIMIT}));
335
+
336
+ var out = light;
337
+ var accumulated = 0.0;
338
+
339
+ if (kept > 0.0) {
340
+ history /= kept;
341
+ frames /= kept;
342
+ fast_history /= kept;
343
+
344
+ let fast = max(fast_own, fast_history);
345
+
346
+ accumulated = min(frames, (1.0 - fast) * frame.temporal_frames);
347
+
348
+ // with nothing new to take, the history stands
349
+ out = select(mix(history, light, 1.0 / (1.0 + accumulated)), history, force_history);
350
+ }
351
+
352
+ textureStore(screen_probe_diffuse, pixel, vec4<f32>(max(out, vec3<f32>(0.0)), 1.0));
353
+ textureStore(screen_probe_frames, pixel, vec4<u32>(pack2x16unorm(vec2<f32>(accumulated / frame.temporal_frames, fast_own)), 0u, 0u, 0u));
354
+ }
355
+ `, [
356
+ chunk_screen_probe,
357
+ chunk_is_background,
358
+ chunk_project_position_from_depth,
359
+ chunk_get_view_space_depth,
360
+ chunk_decode_g_buffer_face_normal,
361
+ chunk_mat4_extract_position,
362
+ chunk_stbn_sample_vec2,
363
+ ]),
364
+ });
@@ -0,0 +1,40 @@
1
+ /** Last frame's lit colour of the opaque surfaces, the view's size, before transparencies and fog. @type {ShaderResourceDescriptor} */
2
+ export const SCREEN_PROBE_COLOR_HISTORY_RESOURCE: ShaderResourceDescriptor;
3
+ /** The TAA's history confidence a pixel, in `r` (`shader_depth_occlusion_clip`). @type {ShaderResourceDescriptor} */
4
+ export const SCREEN_PROBE_OCCLUSION_RESOURCE: ShaderResourceDescriptor;
5
+ /**
6
+ * Settings of the screen trace.
7
+ * @type {WebGPUStruct}
8
+ */
9
+ export const SCREEN_PROBE_TRACE_SCREEN_SETTINGS: WebGPUStruct;
10
+ /**
11
+ * The screen trace (Lumen's `ScreenProbeTraceScreenTexturesCS`): a thread a ray of the frame's probes, through the
12
+ * thread-a-ray command; a ray finds its probe and slot from its index, and its direction from its info and its probe's
13
+ * jitter (`screen_probe_ray_direction`).
14
+ *
15
+ * - **Origin**: the probe's surface point, lifted along its face normal by twice the depth half a pixel's offset makes
16
+ * along it (Lumen's normal bias): the depth buffer's texels stand proud of the plane they sample. An origin the lift
17
+ * moves off the screen traces nothing in it.
18
+ * - **Reach**: the march covers the probe's reach (`screen_probe_picks`), cut short of the camera's plane, 0.99 of the
19
+ * way, for a ray heading toward it, as Lumen's `TraceScreen` cuts it.
20
+ * - **March**: the depth buffer's hierarchy from the full-resolution level, `ffx_sssr_hierarchical_raymarch`, the
21
+ * engine's HZB traversal (SSR's), `SCREEN_PROBE_SCREEN_TRACE_STEPS` steps at most; past the reach's end it is a miss.
22
+ * - **A hit** stands at most `SCREEN_PROBE_SCREEN_THICKNESS` of the surface's depth behind it, on a surface the ray
23
+ * meets from its front (its face normal against the ray), and holds when two dithered tests pass, as Lumen's: the
24
+ * screen-edge fade at the hit (`SCREEN_PROBE_SCREEN_EDGE`) and the TAA's confidence in the hit pixel's history, so
25
+ * last frame's colour is that surface's. Its radiance is last frame's lit colour of the opaque surfaces at the hit
26
+ * pixel's place last frame (its velocity), a bounce more each frame, pre-exposed (`screen_probe_exposure`). It is moving when its speed and the probe's
27
+ * differ by `SCREEN_PROBE_MOVING_SPEED` of the probe's depth, held to a metre from below.
28
+ * - **Anything else** is left to the bricks, appended to their list (one atomic a subgroup) with how far the screen
29
+ * showed it clear: to the end of the march, or to a hit the tests refused, so the bricks resume in front of that
30
+ * surface. A ray of a probe on no surface ends here, NONE.
31
+ *
32
+ * Every lane appends, wanting or not, from uniform control flow.
33
+ *
34
+ * @type {ComputeShader}
35
+ */
36
+ export const shader_screen_probe_trace_screen: ComputeShader;
37
+ import { ShaderResourceDescriptor } from "../../shader/resource/ShaderResourceDescriptor.js";
38
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
39
+ import { ComputeShader } from "../../shader/ComputeShader.js";
40
+ //# sourceMappingURL=shader_screen_probe_trace_screen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_screen_probe_trace_screen.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.js"],"names":[],"mappings":"AA0DA,uIAAuI;AACvI,kDAD2G,wBAAwB,CACK;AAExI,qHAAqH;AACrH,8CADyF,wBAAwB,CACG;AAEpH;;;GAGG;AACH,iDAFU,YAAY,CAKe;AA6BrC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,+CAFU,aAAa,CAsJpB;yCA9PsC,mDAAmD;6BAG/D,mCAAmC;8BAJlC,+BAA+B"}