@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
@@ -44,6 +44,12 @@ export class Renderer {
44
44
  * @type {ProbeClipmapSettings}
45
45
  */
46
46
  probe_clipmap: ProbeClipmapSettings;
47
+ /**
48
+ * Settings of {@link ShadeIndirectLightingMode.ScreenProbes}, read every frame it runs; its world, the bricks and
49
+ * the world-space probes, is set by {@link probe_clipmap}. See {@link ScreenProbeSettings}.
50
+ * @type {ScreenProbeSettings}
51
+ */
52
+ screen_probes: ScreenProbeSettings;
47
53
  /**
48
54
  * Which order-independent transparency technique draws the transparent buckets. Both modes
49
55
  * are wired at the single transparency call site and take the same inputs, so this is safe to
@@ -577,6 +583,7 @@ import { SceneManager } from "./scene/SceneManager.js";
577
583
  import { ShadeIndirectLightingMode } from "./ShadeIndirectLightingMode.js";
578
584
  import { MaterialDispatch } from "./material/dispatch/MaterialDispatch.js";
579
585
  import { ProbeClipmapSettings } from "./global_illumination/probe_clipmap/ProbeClipmapSettings.js";
586
+ import { ScreenProbeSettings } from "./global_illumination/screen_probe/ScreenProbeSettings.js";
580
587
  import { ShadeTransparencyMode } from "./ShadeTransparencyMode.js";
581
588
  import { ToneMapper } from "./deferred/tonemap/ToneMapper.js";
582
589
  import { AVBOITSettings } from "./rasterize/native/avboit/AVBOITSettings.js";
@@ -1 +1 @@
1
- {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Renderer.d.ts","sourceRoot":"","sources":["../../../../src/shade/renderer/Renderer.js"],"names":[],"mappings":"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"}
@@ -16,8 +16,11 @@ import { shade_device_floor_unmet } from "../device/shade_device_floor_unmet.js"
16
16
  import { ShadeDeviceFailure } from "../device/ShadeDeviceFailure.js";
17
17
  import { PipelineEnquiry } from "../device/pipeline/PipelineEnquiry.js";
18
18
  import { ShadeGPUCommandContext } from "../device/ShadeGPUCommandContext.js";
19
+ import { create_atmosphere_sun_state, resolve_atmosphere_sun } from "./atmosphere/resolve_atmosphere_sun.js";
20
+ import { SKY_VIEW_LUT_HEIGHT, SKY_VIEW_LUT_WIDTH, shader_sky_view_lut } from "./atmosphere/shader_sky_view_lut.js";
19
21
  import { CameraManager } from "./camera/CameraManager.js";
20
22
  import { shader_background } from "./deferred/shader_background.js";
23
+ import { shader_background_sky } from "./deferred/shader_background_sky.js";
21
24
  import { shader_composite_volumetrics } from "./deferred/shader_composite_volumetrics.js";
22
25
  import { shader_deferred_main } from "./deferred/shader_deferred_main.js";
23
26
  import { LOCAL_LIGHT_SHADING } from "./deferred/LOCAL_LIGHT_SHADING.js";
@@ -48,6 +51,14 @@ import { shader_diffuse_LPV } from "./global_illumination/lpv/shader_diffuse_LPV
48
51
  import { GPUProbeClipmapGI } from "./global_illumination/probe_clipmap/GPUProbeClipmapGI.js";
49
52
  import { ProbeClipmapSettings } from "./global_illumination/probe_clipmap/ProbeClipmapSettings.js";
50
53
  import { ProbeClipmapDebugView } from "./global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js";
54
+ import { GPUScreenProbeGI } from "./global_illumination/screen_probe/GPUScreenProbeGI.js";
55
+ import { ScreenProbeSettings } from "./global_illumination/screen_probe/ScreenProbeSettings.js";
56
+ import { ScreenProbeDebugView } from "./global_illumination/screen_probe/ScreenProbeDebugView.js";
57
+ import { graph_screen_probe_debug_view } from "./global_illumination/screen_probe/graph_screen_probe_debug_view.js";
58
+ import {
59
+ shader_screen_probe_diffuse,
60
+ shader_screen_probe_indirect_lighting
61
+ } from "./global_illumination/screen_probe/shader_screen_probe_indirect_lighting.js";
51
62
  import { shader_resolve_indirect_lighting } from "./global_illumination/shader_resolve_indirect_lighting.js";
52
63
  import { GraphicsContext } from "./GraphicsContext.js";
53
64
  import {
@@ -137,6 +148,8 @@ METRICS.create({ name: 'frame_time' });
137
148
  */
138
149
  const INTERNAL_RESOLUTION_MIN = 1;
139
150
 
151
+ const SKY_VIEW_LUT_RESOLUTION = Object.freeze([SKY_VIEW_LUT_WIDTH, SKY_VIEW_LUT_HEIGHT]);
152
+
140
153
  MetricCollectionConsoleMonitor.from(METRICS);
141
154
 
142
155
  export class Renderer {
@@ -243,6 +256,22 @@ export class Renderer {
243
256
  */
244
257
  #probe_clipmap_gi;
245
258
 
259
+ /**
260
+ * Settings of {@link ShadeIndirectLightingMode.ScreenProbes}, read every frame it runs; its world, the bricks and
261
+ * the world-space probes, is set by {@link probe_clipmap}. See {@link ScreenProbeSettings}.
262
+ * @type {ScreenProbeSettings}
263
+ */
264
+ screen_probes = new ScreenProbeSettings();
265
+
266
+ /**
267
+ * The main view's screen probes under {@link ShadeIndirectLightingMode.ScreenProbes}, over the world
268
+ * {@link #probe_clipmap_gi} holds: made on the first frame in the mode, given back on the first frame out of it.
269
+ *
270
+ * Constructed in {@link initialize}.
271
+ * @type {GPUScreenProbeGI | undefined}
272
+ */
273
+ #screen_probe_gi;
274
+
246
275
  /**
247
276
  * Which order-independent transparency technique draws the transparent buckets. Both modes
248
277
  * are wired at the single transparency call site and take the same inputs, so this is safe to
@@ -713,6 +742,26 @@ export class Renderer {
713
742
  */
714
743
  #extensions = new RenderExtensionRegistry();
715
744
 
745
+ /**
746
+ * Reusable per-frame sun state and immediate uniform payloads for Hillaire Sky-View LUT and
747
+ * background solar-disc composition.
748
+ */
749
+ #sky_sun_state = create_atmosphere_sun_state();
750
+
751
+ #sky_view_lut_settings = {
752
+ sun_direction: this.#sky_sun_state.sun_direction,
753
+ resolution_x: SKY_VIEW_LUT_WIDTH,
754
+ sun_irradiance: this.#sky_sun_state.sun_irradiance,
755
+ resolution_y: SKY_VIEW_LUT_HEIGHT,
756
+ };
757
+
758
+ #sky_background_settings = {
759
+ sun_direction: this.#sky_sun_state.sun_direction,
760
+ sun_disk_radius: 0,
761
+ sun_irradiance: this.#sky_sun_state.sun_irradiance,
762
+ sun_has_disc: 0,
763
+ };
764
+
716
765
  /**
717
766
  * Raised when there is no usable device — the browser has no WebGPU, the hardware is below the
718
767
  * floor, or a working device was lost while running. Carries a {@link ShadeDeviceFailure}.
@@ -1150,6 +1199,8 @@ export class Renderer {
1150
1199
  }
1151
1200
 
1152
1201
  this.#volumetrics?.reset_history();
1202
+
1203
+ this.#screen_probe_gi?.reset_history();
1153
1204
  }
1154
1205
 
1155
1206
  /**
@@ -1252,6 +1303,7 @@ export class Renderer {
1252
1303
  * @param {number} params.gr_occlusion_clip
1253
1304
  * @param {number} params.gr_buffer_camera_current
1254
1305
  * @param {number} params.gr_buffer_camera_previous
1306
+ * @param {number} params.gr_exposure_multiplier - graph resource ID of the exposure the last frame was shown at
1255
1307
  * @param {Vector2} params.resolution
1256
1308
  * @returns {number} Updated scene-color graph resource ID
1257
1309
  */
@@ -1273,6 +1325,7 @@ export class Renderer {
1273
1325
  gr_occlusion_clip,
1274
1326
  gr_buffer_camera_current,
1275
1327
  gr_buffer_camera_previous,
1328
+ gr_exposure_multiplier,
1276
1329
  resolution,
1277
1330
  }) {
1278
1331
 
@@ -1354,6 +1407,65 @@ export class Renderer {
1354
1407
  }
1355
1408
  break;
1356
1409
 
1410
+ case ShadeIndirectLightingMode.ScreenProbes: {
1411
+ // the diffuse is the screen probes', resolved once the bent normals exist; the specular the world-space
1412
+ // probes', as under the probe clipmap
1413
+ const diffuse = this.#screen_probe_gi.graph_resolve({
1414
+ graph,
1415
+ depth: gr_texture_depth_current,
1416
+ depth_previous: gr_texture_depth_previous,
1417
+ pbr: gr_texture_pbr,
1418
+ velocity: gr_velocity,
1419
+ bent_normals,
1420
+ exposure: gr_exposure_multiplier,
1421
+ });
1422
+
1423
+ if (prefer_fused && !this.feature_ssr_enabled) {
1424
+ [current_color_out] = graph_image_pass({
1425
+ graph,
1426
+ shader: shader_screen_probe_indirect_lighting,
1427
+ output: [current_color_out],
1428
+ input_depth: gr_texture_depth_current,
1429
+ load_op: "load",
1430
+ inputs: this.#probe_clipmap_gi.write_sampling_bindings({
1431
+ ...this.#probe_clipmap_indirect_inputs({
1432
+ view_ctx,
1433
+ depth: gr_texture_depth_current,
1434
+ normal: gr_texture_normal,
1435
+ bent_normal: bent_normals,
1436
+ albedo_ao: gr_texture_material_albedo_ao,
1437
+ pbr: gr_texture_pbr,
1438
+ environment: gr_texture_environment,
1439
+ camera: gr_buffer_camera_current,
1440
+ }),
1441
+ tScreenProbeDiffuse: diffuse,
1442
+ }),
1443
+ });
1444
+
1445
+ return current_color_out;
1446
+ }
1447
+
1448
+ diffuse_pass = {
1449
+ shader: shader_screen_probe_diffuse,
1450
+ inputs: {
1451
+ tGBufferAlbedo: gr_texture_material_albedo_ao,
1452
+ tScreenProbeDiffuse: diffuse,
1453
+ },
1454
+ };
1455
+ specular_pass = {
1456
+ shader: shader_specular_IBL,
1457
+ inputs: {
1458
+ tBentNormals: bent_normals,
1459
+ tNormals: gr_texture_normal,
1460
+ tDepth: gr_texture_depth_current,
1461
+ tPBR: gr_texture_pbr,
1462
+ tEnvironment: gr_texture_environment,
1463
+ camera: gr_buffer_camera_current,
1464
+ },
1465
+ };
1466
+ break;
1467
+ }
1468
+
1357
1469
  case ShadeIndirectLightingMode.Brick4:
1358
1470
  // SSR needs its own specular resolve and denoising passes.
1359
1471
  if (prefer_fused && !this.feature_ssr_enabled) {
@@ -1469,7 +1581,7 @@ export class Renderer {
1469
1581
  input_environment: gr_texture_environment,
1470
1582
  brick4: ssr_brick4,
1471
1583
  lpv: ssr_lpv,
1472
- input_indirect_diffuse: mode === ShadeIndirectLightingMode.ProbeClipmap ? indirect_diffuse : undefined,
1584
+ input_indirect_diffuse: mode === ShadeIndirectLightingMode.ProbeClipmap || mode === ShadeIndirectLightingMode.ScreenProbes ? indirect_diffuse : undefined,
1473
1585
  // in every mode: a clipmap of no cascade while it has no probes
1474
1586
  probes: this.#probe_clipmap_gi,
1475
1587
  shader_switches: this.#shader_switches,
@@ -1843,6 +1955,7 @@ export class Renderer {
1843
1955
  this.#views = new ViewManager(graphics, this.#cameras, this.#scenes);
1844
1956
  this.#volumetrics = new GPUViewVolumetrics(this.device);
1845
1957
  this.#probe_clipmap_gi = new GPUProbeClipmapGI(graphics);
1958
+ this.#screen_probe_gi = new GPUScreenProbeGI(this.device);
1846
1959
 
1847
1960
  const resolution_internal = this.#internal_resolution.asArray();
1848
1961
 
@@ -1954,6 +2067,8 @@ export class Renderer {
1954
2067
  }
1955
2068
 
1956
2069
  enquiry.render.push(shader_background.pipeline_for(color_formats));
2070
+ enquiry.render.push(shader_sky_view_lut.pipeline);
2071
+ enquiry.render.push(shader_background_sky.pipeline_for(color_formats));
1957
2072
 
1958
2073
  if (this.indirect_lighting_mode === ShadeIndirectLightingMode.IBL) {
1959
2074
  if (!this.feature_ssr_enabled) {
@@ -2067,6 +2182,7 @@ export class Renderer {
2067
2182
  this.#nss?.destroy();
2068
2183
  this.#volumetrics?.destroy();
2069
2184
  this.#probe_clipmap_gi?.destroy();
2185
+ this.#screen_probe_gi?.destroy();
2070
2186
 
2071
2187
  this.#views?.destroy();
2072
2188
  this.#scenes?.destroy();
@@ -2964,7 +3080,11 @@ export class Renderer {
2964
3080
  // (PROBE_CLIPMAP_PROPOSAL_2026_10_27.md §5); its hits trace their own shadow rays, so it reads no
2965
3081
  // shadow map. Made for this view and these settings on the first frame in the mode, and given back
2966
3082
  // on the first frame out of it.
2967
- if (this.indirect_lighting_mode === ShadeIndirectLightingMode.ProbeClipmap) {
3083
+ // The screen probes trace the probe clipmap's world and read its world-space probes past their reach, so that
3084
+ // world runs under both modes; the screen probes follow it in the same frame.
3085
+ const screen_probes = this.indirect_lighting_mode === ShadeIndirectLightingMode.ScreenProbes;
3086
+
3087
+ if (this.indirect_lighting_mode === ShadeIndirectLightingMode.ProbeClipmap || screen_probes) {
2968
3088
  this.#probe_clipmap_gi.graph_update({
2969
3089
  graph,
2970
3090
  view: view_ctx,
@@ -2979,6 +3099,25 @@ export class Renderer {
2979
3099
  this.#probe_clipmap_gi.release();
2980
3100
  }
2981
3101
 
3102
+ if (screen_probes) {
3103
+ this.#screen_probe_gi.graph_update({
3104
+ graph,
3105
+ view: view_ctx,
3106
+ settings: this.screen_probes,
3107
+ world: this.#probe_clipmap_gi,
3108
+ stbn: STATIC_GRAPHICS_ENGINE_ASSETS.stbn_vec2,
3109
+ depth: gr_texture_depth_current,
3110
+ normal: gr_texture_normal,
3111
+ pbr: gr_texture_pbr,
3112
+ velocity: gr_velocity,
3113
+ occlusion: gr_occlusion_clip,
3114
+ hzb: gr_texture_hzb,
3115
+ exposure: gr_exposure_multiplier,
3116
+ });
3117
+ } else {
3118
+ this.#screen_probe_gi.release();
3119
+ }
3120
+
2982
3121
  const volumetrics = this.#volumetrics.graph_update({
2983
3122
  graph,
2984
3123
  view: view_ctx,
@@ -3098,18 +3237,60 @@ export class Renderer {
3098
3237
 
3099
3238
 
3100
3239
  // Shade background
3101
- [current_color_out] = graph_image_pass({
3102
- graph,
3103
- shader: shader_background,
3104
- inputs: {
3105
- camera: view_ctx.camera.buffer,
3106
- view: view_ctx.uniform_buffer.buffer,
3107
- tEnvironment: gr_texture_environment,
3108
- },
3109
- input_depth: gr_texture_depth_current,
3110
- load_op: "load",
3111
- output: [current_color_out],
3112
- });
3240
+ if (scene_ctx.scene.lights.environment === undefined && scene_ctx.scene.atmosphere.enabled) {
3241
+ const sky = scene_ctx.sky;
3242
+ sky.update();
3243
+
3244
+ const gr_sky_transmittance = volumetrics.lut_transmittance
3245
+ ?? graph_import_texture(graph, sky.lut_transmittance, "sky/transmittance");
3246
+ const gr_sky_multiscatter = volumetrics.lut_multiple_scattering
3247
+ ?? graph_import_texture(graph, sky.lut_multiple_scattering, "sky/multiscatter");
3248
+
3249
+ const sun = resolve_atmosphere_sun(scene_ctx.scene, this.#sky_sun_state);
3250
+ this.#sky_background_settings.sun_disk_radius = sun.sun_disk_radius;
3251
+ this.#sky_background_settings.sun_has_disc = sun.sun_has_disc;
3252
+
3253
+ const [gr_sky_view_lut] = graph_image_pass({
3254
+ graph,
3255
+ shader: shader_sky_view_lut,
3256
+ output_resolution: SKY_VIEW_LUT_RESOLUTION,
3257
+ inputs: {
3258
+ settings: this.#sky_view_lut_settings,
3259
+ camera: view_ctx.camera.buffer,
3260
+ atmosphere: sky.parameters_buffer.buffer,
3261
+ tSkyLutTransmittance: gr_sky_transmittance,
3262
+ tSkyLutMultiscatter: gr_sky_multiscatter,
3263
+ },
3264
+ });
3265
+
3266
+ [current_color_out] = graph_image_pass({
3267
+ graph,
3268
+ shader: shader_background_sky,
3269
+ inputs: {
3270
+ settings: this.#sky_background_settings,
3271
+ camera: view_ctx.camera.buffer,
3272
+ atmosphere: sky.parameters_buffer.buffer,
3273
+ tSkyViewLut: gr_sky_view_lut,
3274
+ tSkyLutTransmittance: gr_sky_transmittance,
3275
+ },
3276
+ input_depth: gr_texture_depth_current,
3277
+ load_op: "load",
3278
+ output: [current_color_out],
3279
+ });
3280
+ } else {
3281
+ [current_color_out] = graph_image_pass({
3282
+ graph,
3283
+ shader: shader_background,
3284
+ inputs: {
3285
+ camera: view_ctx.camera.buffer,
3286
+ view: view_ctx.uniform_buffer.buffer,
3287
+ tEnvironment: gr_texture_environment,
3288
+ },
3289
+ input_depth: gr_texture_depth_current,
3290
+ load_op: "load",
3291
+ output: [current_color_out],
3292
+ });
3293
+ }
3113
3294
 
3114
3295
  current_color_out = this.#graph_indirect_lighting({
3115
3296
  graph,
@@ -3129,9 +3310,15 @@ export class Renderer {
3129
3310
  gr_occlusion_clip,
3130
3311
  gr_buffer_camera_current,
3131
3312
  gr_buffer_camera_previous,
3313
+ gr_exposure_multiplier,
3132
3314
  resolution,
3133
3315
  });
3134
3316
 
3317
+ // the opaque surfaces' lit colour, the screen probes' hits' radiance next frame: before fog and transparencies
3318
+ if (screen_probes) {
3319
+ this.#screen_probe_gi.graph_capture({ graph, color: current_color_out });
3320
+ }
3321
+
3135
3322
  // Composite volumetric fog over the finalized opaque + background + indirect colour.
3136
3323
  // A dedicated pass (not inline in the shading shaders) because indirect lighting is added
3137
3324
  // in a separate additively-blended pass, so the full surface radiance only exists here.
@@ -3299,7 +3486,18 @@ export class Renderer {
3299
3486
 
3300
3487
  // the probe clipmap mode's debug views replace the colour the same way
3301
3488
  if (
3302
- this.indirect_lighting_mode === ShadeIndirectLightingMode.ProbeClipmap
3489
+ screen_probes
3490
+ && this.screen_probes.debug_view !== ScreenProbeDebugView.None
3491
+ ) {
3492
+ current_color_out = graph_screen_probe_debug_view({
3493
+ graph,
3494
+ gi: this.#screen_probe_gi,
3495
+ view_mode: this.screen_probes.debug_view,
3496
+ depth: gr_texture_depth_current,
3497
+ resolution: resolution_internal.asArray(),
3498
+ });
3499
+ } else if (
3500
+ (this.indirect_lighting_mode === ShadeIndirectLightingMode.ProbeClipmap || screen_probes)
3303
3501
  && this.probe_clipmap.debug_view !== ProbeClipmapDebugView.None
3304
3502
  ) {
3305
3503
  current_color_out = this.#probe_clipmap_gi.graph_debug_view({
@@ -3404,8 +3602,6 @@ export class Renderer {
3404
3602
  });
3405
3603
  }
3406
3604
 
3407
- let exposure = -1;
3408
-
3409
3605
  /*
3410
3606
  The scene as it stands before bloom composites over it: what the metering reads, and what
3411
3607
  bloom reads too.
@@ -3437,21 +3633,22 @@ export class Renderer {
3437
3633
  current_color_out = bloom.composited;
3438
3634
  }
3439
3635
 
3440
- if (this.feature_automatic_exposure_enabled) {
3441
- // TODO force time_delta_second to a very high value on view transition
3636
+ const gr_exposure_adaptation = graph_import_buffer(graph, this.#autoexposure.adaptation, "exposure adaptation");
3442
3637
 
3443
- exposure = this.#autoexposure.update({
3638
+ // TODO force time_delta_second to a very high value on view transition
3639
+ const exposure = this.feature_automatic_exposure_enabled
3640
+ ? this.#autoexposure.update({
3444
3641
  graph,
3445
3642
  input_color: metered_color,
3446
3643
  multiplier: gr_exposure_multiplier,
3644
+ adaptation: gr_exposure_adaptation,
3447
3645
  time_delta_seconds,
3646
+ })
3647
+ : this.#autoexposure.unadapted({
3648
+ graph,
3649
+ multiplier: gr_exposure_multiplier,
3650
+ adaptation: gr_exposure_adaptation,
3448
3651
  });
3449
- }
3450
-
3451
-
3452
- if (this.feature_automatic_exposure_enabled === false) {
3453
- exposure = this.#autoexposure.unadapted({ graph, multiplier: gr_exposure_multiplier });
3454
- }
3455
3652
 
3456
3653
 
3457
3654
  // current_color_out = graph_draw_texture_as_rgba({
@@ -3477,7 +3674,8 @@ export class Renderer {
3477
3674
  current_color_out = this.tone_mapper.render({
3478
3675
  graph,
3479
3676
  input_color: current_color_out,
3480
- exposure,
3677
+ exposure: exposure.multiplier,
3678
+ adaptation: exposure.adaptation,
3481
3679
  hdr: this.#hdr_supported,
3482
3680
  target: gr_texture_canvas,
3483
3681
  });
@@ -8,5 +8,6 @@ export namespace ShadeIndirectLightingMode {
8
8
  let Brick4: number;
9
9
  let LPV: number;
10
10
  let ProbeClipmap: number;
11
+ let ScreenProbes: number;
11
12
  }
12
13
  //# sourceMappingURL=ShadeIndirectLightingMode.d.ts.map
@@ -17,4 +17,13 @@ export const ShadeIndirectLightingMode = {
17
17
  * `Renderer.probe_clipmap`. Lit as {@link IBL} until its probes are traced (that proposal's §13, S4).
18
18
  */
19
19
  ProbeClipmap: 3,
20
+ /**
21
+ * Lumen's screen probe gather over the {@link ProbeClipmap}'s world: probes placed on the G-buffer every few
22
+ * pixels, more densely where interpolation between them would cross an edge, traced through the screen and
23
+ * then the SDF bricks, the world-space probes standing in for what lies past a probe's own reach, and
24
+ * reprojected from frame to frame (`global_illumination/screen_probe/GPUScreenProbeGI.js`). The opaque surfaces'
25
+ * diffuse light is the screen probes'; everything else reads the world-space probes as under
26
+ * {@link ProbeClipmap}. Settings are `Renderer.screen_probes`, and `Renderer.probe_clipmap` for the world.
27
+ */
28
+ ScreenProbes: 4,
20
29
  };
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Packed GPU uniform representation of {@link SceneAtmosphere} in GPU atmosphere units
3
+ * ($\text{km}$ and $\text{km}^{-1}$, scaled via `ATMOSPHERE_UNIT_METERS`).
4
+ *
5
+ * @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
6
+ * @type {WebGPUStruct}
7
+ */
8
+ export const ATMOSPHERE_PARAMETERS_STRUCT: WebGPUStruct;
9
+ /**
10
+ * Deeply frozen default Earth uniform payload matching {@link ATMOSPHERE_PARAMETERS_STRUCT}.
11
+ */
12
+ export const ATMOSPHERE_EARTH_UNIFORM: Readonly<Record<string, any>>;
13
+ /**
14
+ * Parameterised Hillaire (2020) atmosphere medium, geometry, and LUT coordinate helpers operating
15
+ * on {@link ATMOSPHERE_PARAMETERS_STRUCT}.
16
+ *
17
+ * @type {CodeChunk}
18
+ */
19
+ export const chunk_atmosphere_parameters: CodeChunk;
20
+ import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
21
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
22
+ //# sourceMappingURL=ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ATMOSPHERE_PARAMETERS_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.js"],"names":[],"mappings":"AAQA;;;;;;GAMG;AACH,2CAFU,YAAY,CAmBK;AAE3B;;GAEG;AACH,qEAQK;AAEL;;;;;GAKG;AACH,0CAFU,SAAS,CA4GjB;6BA5J2B,gCAAgC;0BAFnC,iCAAiC"}
@@ -0,0 +1,160 @@
1
+ import { chunk_atmosphere_ray_bounds } from "../shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js";
2
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
3
+ import { f32, vec3f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
4
+ import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
5
+ import { ATMOSPHERE_ALTITUDE_CUTOFF } from "./ATMOSPHERE_ALTITUDE_CUTOFF.js";
6
+ import { ATMOSPHERE_UNIT_SCALE_DECLARATION } from "./ATMOSPHERE_UNIT_SCALE.js";
7
+ import { SceneAtmosphere } from "./SceneAtmosphere.js";
8
+
9
+ /**
10
+ * Packed GPU uniform representation of {@link SceneAtmosphere} in GPU atmosphere units
11
+ * ($\text{km}$ and $\text{km}^{-1}$, scaled via `ATMOSPHERE_UNIT_METERS`).
12
+ *
13
+ * @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
14
+ * @type {WebGPUStruct}
15
+ */
16
+ export const ATMOSPHERE_PARAMETERS_STRUCT = WebGPUStruct.from({
17
+ planet_radius: f32,
18
+ atmosphere_height: f32,
19
+ rayleigh_scale_height: f32,
20
+ mie_scale_height: f32,
21
+
22
+ rayleigh_scattering: vec3f,
23
+ mie_phase_g: f32,
24
+
25
+ mie_scattering: vec3f,
26
+ ozone_center_height: f32,
27
+
28
+ mie_absorption: vec3f,
29
+ ozone_half_width: f32,
30
+
31
+ ozone_absorption: vec3f,
32
+ ground_albedo: vec3f,
33
+ }, "AtmosphereParameters");
34
+
35
+ /**
36
+ * Deeply frozen default Earth uniform payload matching {@link ATMOSPHERE_PARAMETERS_STRUCT}.
37
+ */
38
+ export const ATMOSPHERE_EARTH_UNIFORM = (() => {
39
+ const raw = new SceneAtmosphere().write_uniform();
40
+ raw.rayleigh_scattering = Object.freeze([...raw.rayleigh_scattering]);
41
+ raw.mie_scattering = Object.freeze([...raw.mie_scattering]);
42
+ raw.mie_absorption = Object.freeze([...raw.mie_absorption]);
43
+ raw.ozone_absorption = Object.freeze([...raw.ozone_absorption]);
44
+ raw.ground_albedo = Object.freeze([...raw.ground_albedo]);
45
+ return Object.freeze(raw);
46
+ })();
47
+
48
+ /**
49
+ * Parameterised Hillaire (2020) atmosphere medium, geometry, and LUT coordinate helpers operating
50
+ * on {@link ATMOSPHERE_PARAMETERS_STRUCT}.
51
+ *
52
+ * @type {CodeChunk}
53
+ */
54
+ export const chunk_atmosphere_parameters = CodeChunk.from(
55
+ //language=WGSL
56
+ `
57
+ fn atmosphere_earth_parameters() -> ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref} {
58
+ var atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref};
59
+ atm.planet_radius = 6378000.0 * METERS_TO_ATMOSPHERE_UNITS;
60
+ atm.atmosphere_height = 100000.0 * METERS_TO_ATMOSPHERE_UNITS;
61
+ atm.rayleigh_scale_height = 8000.0 * METERS_TO_ATMOSPHERE_UNITS;
62
+ atm.mie_scale_height = 1200.0 * METERS_TO_ATMOSPHERE_UNITS;
63
+ atm.rayleigh_scattering = vec3<f32>(5.802e-6, 13.558e-6, 33.100e-6) * INVERSE_METERS_TO_ATMOSPHERE_UNITS;
64
+ atm.mie_phase_g = 0.8;
65
+ atm.mie_scattering = vec3<f32>(3.996e-6, 3.996e-6, 3.996e-6) * INVERSE_METERS_TO_ATMOSPHERE_UNITS;
66
+ atm.ozone_center_height = 25000.0 * METERS_TO_ATMOSPHERE_UNITS;
67
+ atm.mie_absorption = vec3<f32>(0.444e-6, 0.444e-6, 0.444e-6) * INVERSE_METERS_TO_ATMOSPHERE_UNITS;
68
+ atm.ozone_half_width = 15000.0 * METERS_TO_ATMOSPHERE_UNITS;
69
+ atm.ozone_absorption = vec3<f32>(0.650e-6, 1.881e-6, 0.085e-6) * INVERSE_METERS_TO_ATMOSPHERE_UNITS;
70
+ atm.ground_albedo = vec3<f32>(0.3, 0.3, 0.3);
71
+ return atm;
72
+ }
73
+
74
+ fn atmosphere_planet_center_for(atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref}) -> vec3<f32> {
75
+ return vec3<f32>(0.0, -atm.planet_radius, 0.0);
76
+ }
77
+
78
+ // Converts a world-space position (in metres) into planet-centre-relative GPU atmosphere units (km).
79
+ fn atmosphere_position_relative_for(atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref}, pos_ws: vec3<f32>) -> vec3<f32> {
80
+ return pos_ws * METERS_TO_ATMOSPHERE_UNITS - atmosphere_planet_center_for(atm);
81
+ }
82
+
83
+ // Planet-centre-relative observer position (in km) clamped away from the ground and top-of-atmosphere boundaries.
84
+ fn atmosphere_clamped_observer_relative(
85
+ atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref},
86
+ world_pos: vec3<f32>
87
+ ) -> vec3<f32> {
88
+ let rel = atmosphere_position_relative_for(atm, world_pos);
89
+ let r_raw = length(rel);
90
+ let up = select(vec3<f32>(0.0, 1.0, 0.0), rel / r_raw, r_raw > 0.0);
91
+ let cutoff = ${ATMOSPHERE_ALTITUDE_CUTOFF.toFixed(1)} * METERS_TO_ATMOSPHERE_UNITS;
92
+ let min_r = atm.planet_radius + cutoff;
93
+ let max_r = max(min_r, atm.planet_radius + atm.atmosphere_height - cutoff);
94
+ return up * clamp(r_raw, min_r, max_r);
95
+ }
96
+
97
+ fn atmosphere_density_for(atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref}, h: f32) -> vec3<f32> {
98
+ let clamped_h = max(h, 0.0);
99
+ let rayleigh = exp(-clamped_h / max(atm.rayleigh_scale_height, MIN_ATMOSPHERE_LENGTH_UNITS));
100
+ let mie = exp(-clamped_h / max(atm.mie_scale_height, MIN_ATMOSPHERE_LENGTH_UNITS));
101
+ let ozone = max(0.0, 1.0 - abs(h - atm.ozone_center_height) / max(atm.ozone_half_width, MIN_ATMOSPHERE_LENGTH_UNITS));
102
+ return vec3<f32>(rayleigh, mie, ozone);
103
+ }
104
+
105
+ fn atmosphere_extinction_for(atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref}, density: vec3<f32>) -> vec3<f32> {
106
+ let rayleigh = density.x * atm.rayleigh_scattering;
107
+ let mie = density.y * (atm.mie_scattering + atm.mie_absorption);
108
+ let ozone = density.z * atm.ozone_absorption;
109
+ return rayleigh + mie + ozone;
110
+ }
111
+
112
+ fn atmosphere_ray_bounds_for(
113
+ atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref},
114
+ origin_rel: vec3<f32>,
115
+ ray_direction: vec3<f32>
116
+ ) -> AtmosphereRayBounds {
117
+ let b = dot(origin_rel, ray_direction);
118
+ let r = length(origin_rel);
119
+ let b2 = b * b;
120
+
121
+ let ground_r = atm.planet_radius;
122
+ let top_r = atm.planet_radius + atm.atmosphere_height;
123
+
124
+ // Difference-of-squares factoring (r - R)(r + R) avoids catastrophic f32 cancellation when
125
+ // altitude (r - ground_r) is metres above a 6,378 km planet radius.
126
+ let atmosphere_distance = -b + sqrt(max(b2 - (r - top_r) * (r + top_r), 0.0));
127
+
128
+ let ground_discriminant = b2 - (r - ground_r) * (r + ground_r);
129
+ let hits_ground = (b < 0.0) && (ground_discriminant >= 0.0);
130
+ let ground_distance = select(
131
+ -1.0,
132
+ max(-b - sqrt(max(ground_discriminant, 0.0)), 0.0),
133
+ hits_ground
134
+ );
135
+
136
+ var result: AtmosphereRayBounds;
137
+ result.t_max = select(atmosphere_distance, ground_distance, hits_ground);
138
+ result.ground_distance = ground_distance;
139
+ result.hits_ground = hits_ground;
140
+ return result;
141
+ }
142
+
143
+ fn sky_lut_uv_for(
144
+ atm: ${ATMOSPHERE_PARAMETERS_STRUCT.wgsl_ref},
145
+ height: f32,
146
+ sun_cos_zenith_angle: f32,
147
+ resolution: vec2<f32>
148
+ ) -> vec2<f32> {
149
+ let unit = vec2<f32>(
150
+ saturate(0.5 + 0.5 * sun_cos_zenith_angle),
151
+ saturate(height / max(atm.atmosphere_height, MIN_ATMOSPHERE_LENGTH_UNITS))
152
+ );
153
+ return (unit * (resolution - 1.0) + 0.5) / resolution;
154
+ }
155
+ `, [
156
+ ATMOSPHERE_UNIT_SCALE_DECLARATION,
157
+ ATMOSPHERE_PARAMETERS_STRUCT.declaration_chunk,
158
+ chunk_atmosphere_ray_bounds,
159
+ ]
160
+ );