@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
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "description": "Advanced 3D game engine",
7
7
  "type": "module",
8
8
  "author": "Alexander Goldring",
9
- "version": "3.67.0",
9
+ "version": "3.68.0",
10
10
  "exports": {
11
11
  "./build/*": "./build/*",
12
12
  "./src/*": "./src/*",
@@ -1 +1 @@
1
- {"version":3,"file":"GraphicsEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GraphicsEngine.js"],"names":[],"mappings":"AA2DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;IACI;;;;;OAKG;IACH,gCAEC;IAUD;;;;OAIG;IACH,yBAEC;IAmEG;;;;;;OAMG;IACH,QAFU,kBAAkB,CAEsB;IAElD;QACI;;;;;;;;WAQG;mBADO,MAAM;QAIhB;;;;;WAKG;oBADO,MAAM;QAIhB;;;;WAIG;qBADO,MAAM;QAIhB;;;;;;;WAOG;;QAGH;;;;;WAKG;;MAEN;IAID;;;;;OAKG;IACH,4BAFU,OAAO,CAEyB;IAE1C;;;;;;OAMG;IACH,UAFU,SAAS,CAEY;IAG/B;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEV;IAEtB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;OAEG;IACH,YAFU,MAAM,CAEG;IAoBvB;;;;;;;;;;;;OAYG;IACH,mDAEC;IAED;;;;;;;;OAQG;IACH,iBAFW,KAAK,QAoBf;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFW,YAAY,QAStB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,yBAHW,eAAe,GACb,eAAe,CAa3B;IAED;;;;;;;;;;OAUG;IACH,uBAHW,UAAU,GACR,MAAM,CAclB;IAED;;;;;;OAMG;IACH,4BAHW,eAAe,GACb,OAAO,CAgBnB;IAED;;;;;;;;;;;;;OAaG;IACH,kCAHW,iBAAiB,GACf,iBAAiB,CAqB7B;IAED;;;;;;OAMG;IACH,8BAFa,MAAM,CAIlB;IAED;;;;;OAKG;IACH,qCAHW,iBAAiB,GACf,OAAO,CAgBnB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBALW,KAAK,GACH,eAAe,GAAC,IAAI,CAehC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yBARW,KAAK,UACL,MAAM,SACN,MAAM,UACN,MAAM,GACJ,QAAQ,SAAS,CAAC,CAwD9B;IAED;;;;OAIG;IACH,0BAEC;IAED;;;;;;;;;;OAUG;IACH,SAFa,QAAQ,IAAI,CAAC,CAuDzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,qBAFW,iBAAiB,QAc3B;IAED;;;;;OAKG;IACH,aAiBC;IASD;;;;;;;;OAQG;IACH,8BAHW,OAAO,GAAC,OAAO,UACf,OAAO,GAAC,OAAO,QAQzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBALW,MAAM,KACN,MAAM,UACN,OAAO,aACP,OAAO,QAIjB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,mBAyBC;IAED;;;;;;;;;OASG;IACH,4BAPW,MAAM,GAKJ,OAAO,CA2DnB;;CACJ;sBA74BY,OAAO,4BAA4B,EAAE,OAAO;yBAC5C,OAAO,8CAA8C,EAAE,UAAU;8BACjE,OAAO,mDAAmD,EAAE,eAAe;gCAC3E,OAAO,mEAAmE,EAAE,iBAAiB;8BAC7F,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,8CAA8C,EAAE,YAAY;qBACnE,OAAO,kCAAkC,EAAE,MAAM;yBAfrC,kCAAkC;mCAMxB,yBAAyB;mBAZzC,oCAAoC;wBAC/B,4BAA4B;sBAQ9B,kCAAkC;yCAJf,kDAAkD;sBAErE,qCAAqC;0BACjC,0CAA0C"}
1
+ {"version":3,"file":"GraphicsEngine.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/GraphicsEngine.js"],"names":[],"mappings":"AA0DA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH;IACI;;;;;OAKG;IACH,gCAEC;IAUD;;;;OAIG;IACH,yBAEC;IAmEG;;;;;;OAMG;IACH,QAFU,kBAAkB,CAEsB;IAElD;QACI;;;;;;;;WAQG;mBADO,MAAM;QAIhB;;;;;WAKG;oBADO,MAAM;QAIhB;;;;WAIG;qBADO,MAAM;QAIhB;;;;;;;WAOG;;QAGH;;;;;WAKG;;MAEN;IAID;;;;;OAKG;IACH,4BAFU,OAAO,CAEyB;IAE1C;;;;;;OAMG;IACH,UAFU,SAAS,CAEY;IAG/B;;OAEG;IACH,YAFU,iBAAiB,GAAC,IAAI,CAEV;IAEtB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;;;;OAKG;IACH,UAFU,OAAO,CAEG;IAEpB;;OAEG;IACH,YAFU,MAAM,CAEG;IAoBvB;;;;;;;;;;;;OAYG;IACH,mDAEC;IAED;;;;;;;;OAQG;IACH,iBAFW,KAAK,QAgBf;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,6BAFW,YAAY,QAStB;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,yBAHW,eAAe,GACb,eAAe,CAa3B;IAED;;;;;;;;;;OAUG;IACH,uBAHW,UAAU,GACR,MAAM,CAclB;IAED;;;;;;OAMG;IACH,4BAHW,eAAe,GACb,OAAO,CAgBnB;IAED;;;;;;;;;;;;;OAaG;IACH,kCAHW,iBAAiB,GACf,iBAAiB,CAqB7B;IAED;;;;;;OAMG;IACH,8BAFa,MAAM,CAIlB;IAED;;;;;OAKG;IACH,qCAHW,iBAAiB,GACf,OAAO,CAgBnB;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,qBALW,KAAK,GACH,eAAe,GAAC,IAAI,CAehC;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,yBARW,KAAK,UACL,MAAM,SACN,MAAM,UACN,MAAM,GACJ,QAAQ,SAAS,CAAC,CAwD9B;IAED;;;;OAIG;IACH,0BAEC;IAED;;;;;;;;;;OAUG;IACH,SAFa,QAAQ,IAAI,CAAC,CAuDzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,qBAFW,iBAAiB,QAc3B;IAED;;;;;OAKG;IACH,aAiBC;IASD;;;;;;;;OAQG;IACH,8BAHW,OAAO,GAAC,OAAO,UACf,OAAO,GAAC,OAAO,QAQzB;IAED;;;;;;;;;;;;;;;OAeG;IACH,yBALW,MAAM,KACN,MAAM,UACN,OAAO,aACP,OAAO,QAIjB;IAED;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,mBAyBC;IAED;;;;;;;;;OASG;IACH,4BAPW,MAAM,GAKJ,OAAO,CA2DnB;;CACJ;sBAz4BY,OAAO,4BAA4B,EAAE,OAAO;yBAC5C,OAAO,8CAA8C,EAAE,UAAU;8BACjE,OAAO,mDAAmD,EAAE,eAAe;gCAC3E,OAAO,mEAAmE,EAAE,iBAAiB;8BAC7F,OAAO,+CAA+C,EAAE,eAAe;2BACvE,OAAO,8CAA8C,EAAE,YAAY;qBACnE,OAAO,kCAAkC,EAAE,MAAM;yBAdrC,kCAAkC;mCAKxB,yBAAyB;mBAXzC,oCAAoC;wBAC/B,4BAA4B;sBAQ9B,kCAAkC;yCAJf,kDAAkD;sBAErE,qCAAqC;0BACjC,0CAA0C"}
@@ -9,7 +9,6 @@ import { Renderer } from "../../shade/renderer/Renderer.js";
9
9
  import { Scene } from "../../shade/renderer/scene/Scene.js";
10
10
  import { Sampler2D } from "../graphics/texture/sampler/Sampler2D.js";
11
11
  import EmptyView from "../../view/elements/EmptyView.js";
12
- import { make_default_environment } from "./make_default_environment.js";
13
12
  import { shade_camera_projection_ray } from "./shade_camera_projection_ray.js";
14
13
  import { ShadeCameraAdapter } from "./ShadeCameraAdapter.js";
15
14
 
@@ -334,16 +333,12 @@ export class GraphicsEngine {
334
333
  this.#scene = scene;
335
334
 
336
335
  /*
337
- Shade lights with indirect by default and a scene without an environment renders unlit, so
338
- the engine supplies one rather than leaving every caller to. Turning global illumination off
339
- is the thing that takes a decision, not turning it on.
340
-
341
- A scene that arrives with an environment keeps it: the scene owns its lighting and this only
342
- fills in what is missing. Otherwise handing over a scene would silently discard the
343
- environment it was built with, and the fix would be to call things in a particular order.
336
+ Shade lights with indirect by default and a scene with neither an authored environment nor
337
+ an active procedural atmosphere renders unlit, so the engine enables Hillaire sky/IBL on
338
+ scenes that arrive without an explicit environment or explicit `atmosphere.enabled = false`.
344
339
  */
345
340
  if (scene.lights.environment === undefined) {
346
- scene.lights.environment = make_default_environment();
341
+ scene.atmosphere.enable_by_default();
347
342
  }
348
343
  }
349
344
 
@@ -12,9 +12,9 @@ import { ShadeTexture } from "../../shade/renderer/texture/ShadeTexture.js";
12
12
  import { ShadeImage } from "../../shade/renderer/texture/source/ShadeImage.js";
13
13
 
14
14
  /**
15
- * Resolution of the octahedral map, matching `make_default_environment` for the same reason: it is
16
- * convolved into irradiance and a handful of roughness mips before anything samples it, so what
17
- * matters is that it is smooth and correctly oriented rather than detailed.
15
+ * Resolution of the octahedral map: it is convolved into irradiance and a handful of roughness mips
16
+ * before anything samples it, so what matters is that it is smooth and correctly oriented rather
17
+ * than detailed.
18
18
  *
19
19
  * @type {number}
20
20
  */
@@ -66,11 +66,11 @@ export class FluidObstacleSystem extends System<any> {
66
66
  /**
67
67
  * @param {FluidComponent} fluid
68
68
  */
69
- static "__#497@#refresh_masks"(fluid: FluidComponent): void;
69
+ static "__#500@#refresh_masks"(fluid: FluidComponent): void;
70
70
  /**
71
71
  * @param {FluidComponent} fluid
72
72
  */
73
- static "__#497@#clear_field"(fluid: FluidComponent): void;
73
+ static "__#500@#clear_field"(fluid: FluidComponent): void;
74
74
  /**
75
75
  * Mark every cell of `fluid` whose centre lies within `inflation` of the
76
76
  * posed shape as solid. Iteration is clipped to the shape's world AABB
@@ -82,7 +82,7 @@ export class FluidObstacleSystem extends System<any> {
82
82
  * @param {number} inflation world-units SDF threshold
83
83
  * @param {Float64Array} point length-3 scratch
84
84
  */
85
- static "__#497@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
85
+ static "__#500@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
86
86
  /**
87
87
  * Write the obstacle's translation velocity onto every face of every cell
88
88
  * it voxelized — the moving-wall boundary condition. Runs AFTER the mask
@@ -102,7 +102,7 @@ export class FluidObstacleSystem extends System<any> {
102
102
  * @param {number} wvy
103
103
  * @param {number} wvz
104
104
  */
105
- static "__#497@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
105
+ static "__#500@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
106
106
  constructor();
107
107
  dependencies: (typeof FluidObstacle)[];
108
108
  components_used: (ResourceAccessSpecification<typeof Transform64> | ResourceAccessSpecification<typeof FluidObstacle> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof FluidComponent>)[];
@@ -89,6 +89,7 @@
89
89
  <span>Indirect light</span>
90
90
  <select id="indirect">
91
91
  <option value="ProbeClipmap" selected>Probe clipmap</option>
92
+ <option value="ScreenProbes">Screen probes — Lumen's gather over the clipmap's world</option>
92
93
  <option value="IBL">IBL</option>
93
94
  </select>
94
95
  </label>
@@ -124,6 +125,48 @@
124
125
 
125
126
  <hr>
126
127
 
128
+ <label>
129
+ <span>Screen probes</span>
130
+ <select id="screen_probe_debug_view">
131
+ <option value="None" selected>Debug: none</option>
132
+ <option value="IndirectDiffuse">Indirect diffuse — irradiance / π, before the material</option>
133
+ <option value="ProbePlacement">Probe placement — uniform green, adaptive red, uncovered blue</option>
134
+ <option value="TraceKinds">Trace kinds — screen red, bricks green, world probes blue</option>
135
+ </select>
136
+ </label>
137
+
138
+ <label>
139
+ <span>Downsample</span>
140
+ <select id="screen_probe_downsample">
141
+ <option value="2">1 probe / 2×2 pixels</option>
142
+ <option value="4">1 probe / 4×4 pixels</option>
143
+ <option value="8">1 probe / 8×8 pixels</option>
144
+ <option value="16" selected>1 probe / 16×16 pixels</option>
145
+ <option value="32">1 probe / 32×32 pixels</option>
146
+ </select>
147
+ </label>
148
+
149
+ <label>
150
+ <span>Octahedron</span>
151
+ <select id="screen_probe_octahedron">
152
+ <option value="4">4×4 rays a probe</option>
153
+ <option value="8" selected>8×8 rays a probe</option>
154
+ <option value="16">16×16 rays a probe</option>
155
+ </select>
156
+ </label>
157
+
158
+ <label>
159
+ <input type="checkbox" id="screen_probe_importance" checked>
160
+ <span>Importance sampling <span class="hint">— rays follow the BRDF and last frame's light</span></span>
161
+ </label>
162
+
163
+ <label>
164
+ <input type="checkbox" id="screen_probe_screen_traces" checked>
165
+ <span>Screen traces <span class="hint">— the depth buffer before the SDF bricks</span></span>
166
+ </label>
167
+
168
+ <hr>
169
+
127
170
  <label>
128
171
  <input type="checkbox" id="sun" checked>
129
172
  <span>Sun <span class="hint">— the directional light; L flips it</span></span>
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/probe_clipmap/main.js"],"names":[],"mappings":"AAyFA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CA8UzB"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/probe_clipmap/main.js"],"names":[],"mappings":"AA0FA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CA0WzB"}
@@ -12,6 +12,7 @@ import { OrbitalCameraController } from "../../renderer/camera/orbital/OrbitalCa
12
12
  import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
13
13
  import { create_frame_loop } from "../../renderer/create_frame_loop.js";
14
14
  import { ProbeClipmapDebugView } from "../../renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js";
15
+ import { ScreenProbeDebugView } from "../../renderer/global_illumination/screen_probe/ScreenProbeDebugView.js";
15
16
  import { make_sunlight } from "../../renderer/light/make_sunlight.js";
16
17
  import { PointLight } from "../../renderer/light/model/PointLight.js";
17
18
  import { place_light } from "../../renderer/light/place_light.js";
@@ -272,6 +273,34 @@ export async function start() {
272
273
  renderer.probe_clipmap.debug_view = ProbeClipmapDebugView[event.target.value];
273
274
  });
274
275
 
276
+ element('screen_probe_debug_view').addEventListener('change', event => {
277
+ renderer.screen_probes.debug_view = ScreenProbeDebugView[event.target.value];
278
+ });
279
+
280
+ element('screen_probe_downsample').addEventListener('change', event => {
281
+ renderer.screen_probes.downsample_factor = Number(event.target.value);
282
+ });
283
+
284
+ element('screen_probe_octahedron').addEventListener('change', event => {
285
+ renderer.screen_probes.octahedron_resolution = Number(event.target.value);
286
+ });
287
+
288
+ element('screen_probe_importance').addEventListener('change', event => {
289
+ renderer.screen_probes.importance_sampling = event.target.checked;
290
+ });
291
+
292
+ element('screen_probe_screen_traces').addEventListener('change', event => {
293
+ renderer.screen_probes.screen_traces = event.target.checked;
294
+ });
295
+
296
+ // ?mode=ScreenProbes starts the page in another mode, as the panel's select would set it
297
+ const mode = new URLSearchParams(location.search).get('mode');
298
+
299
+ if (mode !== null && ShadeIndirectLightingMode[mode] !== undefined) {
300
+ renderer.indirect_lighting_mode = ShadeIndirectLightingMode[mode];
301
+ element('indirect').value = mode;
302
+ }
303
+
275
304
  const taa_toggle = element('taa');
276
305
  const path_tracing_toggle = element('path_tracing');
277
306
 
@@ -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({
@@ -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"}