@woosh/meep-engine 3.67.0 → 3.69.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 (498) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts +2 -17
  3. package/editor/ecs/component/editors/ecs/Trail3DEditor.d.ts.map +1 -1
  4. package/editor/ecs/component/editors/ecs/Trail3DEditor.js +3 -18
  5. package/package.json +1 -1
  6. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts +33 -65
  7. package/src/engine/graphics/ecs/trail3d/Trail3D.d.ts.map +1 -1
  8. package/src/engine/graphics/ecs/trail3d/Trail3D.js +37 -245
  9. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.d.ts +0 -4
  10. package/src/engine/graphics/ecs/trail3d/Trail3DFlags.js +4 -10
  11. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts +13 -10
  12. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.d.ts.map +1 -1
  13. package/src/engine/graphics/ecs/trail3d/seed_trail_stroke.js +28 -37
  14. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts +10 -0
  15. package/src/engine/graphics/ecs/trail3d/trail_knot_count.d.ts.map +1 -0
  16. package/src/engine/graphics/ecs/trail3d/trail_knot_count.js +27 -0
  17. package/src/engine/graphics/trail/TrailKnots.d.ts +62 -0
  18. package/src/engine/graphics/trail/TrailKnots.d.ts.map +1 -0
  19. package/src/engine/graphics/trail/TrailKnots.js +137 -0
  20. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.d.ts +1 -1
  21. package/src/engine/graphics/trail/tube/TubeXMaterialSpec.js +1 -1
  22. package/src/engine/graphics3/EntityRowHold.d.ts +48 -0
  23. package/src/engine/graphics3/EntityRowHold.d.ts.map +1 -0
  24. package/src/engine/graphics3/EntityRowHold.js +128 -0
  25. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -2
  26. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  27. package/src/engine/graphics3/GPUParticleEmitterSystem.js +11 -44
  28. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  29. package/src/engine/graphics3/GraphicsEngine.js +4 -9
  30. package/src/engine/graphics3/Trail3DSystem.d.ts +69 -35
  31. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  32. package/src/engine/graphics3/Trail3DSystem.js +380 -81
  33. package/src/engine/graphics3/load_cube_environment.js +3 -3
  34. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts +17 -0
  35. package/src/engine/physics/fluid/ecs/FluidObstacle.d.ts.map +1 -1
  36. package/src/engine/physics/fluid/ecs/FluidObstacle.js +22 -2
  37. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +6 -5
  38. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
  39. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +14 -3
  40. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts +9 -1
  41. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.d.ts.map +1 -1
  42. package/src/engine/physics/fluid/obstacle/FLUID_OBSTACLE_RECORD_STRUCT.js +11 -1
  43. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts +5 -0
  44. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.d.ts.map +1 -1
  45. package/src/engine/physics/fluid/obstacle/fluid_obstacle_record_create.js +2 -0
  46. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts +4 -3
  47. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.d.ts.map +1 -1
  48. package/src/engine/physics/fluid/obstacle/fluid_obstacle_write_gpu_record.js +11 -3
  49. package/src/shade/playground/probe_clipmap/index.html +43 -0
  50. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  51. package/src/shade/playground/probe_clipmap/main.js +29 -0
  52. package/src/shade/playground/trails/index.html +50 -0
  53. package/src/shade/playground/trails/main.d.ts +2 -0
  54. package/src/shade/playground/trails/main.d.ts.map +1 -0
  55. package/src/shade/playground/trails/main.js +258 -0
  56. package/src/shade/renderer/Renderer.d.ts +7 -0
  57. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  58. package/src/shade/renderer/Renderer.js +213 -15
  59. package/src/shade/renderer/ShadeIndirectLightingMode.d.ts +1 -0
  60. package/src/shade/renderer/ShadeIndirectLightingMode.js +9 -0
  61. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts +18 -0
  62. package/src/shade/renderer/animation/animation_curve_write_keys.d.ts.map +1 -0
  63. package/src/shade/renderer/animation/animation_curve_write_keys.js +34 -0
  64. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +22 -0
  65. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +1 -0
  66. package/src/shade/renderer/atmosphere/ATMOSPHERE_PARAMETERS_STRUCT.js +160 -0
  67. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts +45 -0
  68. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.d.ts.map +1 -0
  69. package/src/shade/renderer/atmosphere/ATMOSPHERE_UNIT_SCALE.js +57 -0
  70. package/src/shade/renderer/atmosphere/GPUSky.d.ts +23 -8
  71. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  72. package/src/shade/renderer/atmosphere/GPUSky.js +91 -34
  73. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +17 -0
  74. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -1
  75. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +55 -25
  76. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts +164 -0
  77. package/src/shade/renderer/atmosphere/SceneAtmosphere.d.ts.map +1 -0
  78. package/src/shade/renderer/atmosphere/SceneAtmosphere.js +308 -0
  79. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +3 -12
  80. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  81. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +52 -89
  82. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts +14 -0
  83. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.d.ts.map +1 -0
  84. package/src/shade/renderer/atmosphere/chunk_raymarch_sky_scattering.js +103 -0
  85. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +10 -4
  86. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  87. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +95 -57
  88. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +10 -14
  89. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  90. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +97 -69
  91. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts +17 -0
  92. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.d.ts.map +1 -1
  93. package/src/shade/renderer/atmosphere/chunk_sky_irradiance_lut_encode_uv.js +117 -48
  94. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +8 -0
  95. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  96. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +65 -35
  97. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts +2 -1
  98. package/src/shade/renderer/atmosphere/compute_mie_absorption.d.ts.map +1 -1
  99. package/src/shade/renderer/atmosphere/compute_mie_absorption.js +6 -6
  100. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts +41 -0
  101. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.d.ts.map +1 -0
  102. package/src/shade/renderer/atmosphere/resolve_atmosphere_sun.js +123 -0
  103. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  104. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +21 -64
  105. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts +6 -2
  106. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  107. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +55 -179
  108. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts +7 -0
  109. package/src/shade/renderer/atmosphere/shader_sky_view_lut.d.ts.map +1 -0
  110. package/src/shade/renderer/atmosphere/shader_sky_view_lut.js +111 -0
  111. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts +0 -1
  112. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  113. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +68 -79
  114. package/src/shade/renderer/deferred/shader_background.js +1 -1
  115. package/src/shade/renderer/deferred/shader_background_sky.d.ts +5 -0
  116. package/src/shade/renderer/deferred/shader_background_sky.d.ts.map +1 -0
  117. package/src/shade/renderer/deferred/shader_background_sky.js +130 -0
  118. package/src/shade/renderer/deferred/tonemap/ColorGrade.d.ts.map +1 -1
  119. package/src/shade/renderer/deferred/tonemap/ColorGrade.js +13 -36
  120. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts +2 -1
  121. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.d.ts.map +1 -1
  122. package/src/shade/renderer/deferred/tonemap/chunk_tonemap_purkinje.js +6 -2
  123. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +2 -2
  124. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts +2 -13
  125. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.d.ts.map +1 -1
  126. package/src/shade/renderer/dynamic/chunk_dynamic_mesh_avboit_vertex.js +6 -21
  127. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts +17 -6
  128. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.d.ts.map +1 -1
  129. package/src/shade/renderer/dynamic/graph_dynamic_mesh_avboit.js +38 -178
  130. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts +7 -9
  131. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
  132. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +17 -106
  133. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts +7 -17
  134. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.d.ts.map +1 -1
  135. package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_splat.js +18 -118
  136. package/src/shade/renderer/extension/ViewTextures.d.ts +3 -2
  137. package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
  138. package/src/shade/renderer/extension/ViewTextures.js +3 -2
  139. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  140. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  141. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts +14 -0
  142. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.d.ts.map +1 -1
  143. package/src/shade/renderer/fluid/forcing/FLUID_FORCING.js +18 -0
  144. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts +3 -1
  145. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.d.ts.map +1 -1
  146. package/src/shade/renderer/fluid/forcing/FLUID_FORCING_APPLY_STRUCT.js +4 -1
  147. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +15 -6
  148. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts.map +1 -1
  149. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.js +20 -4
  150. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts +11 -2
  151. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.d.ts.map +1 -1
  152. package/src/shade/renderer/fluid/forcing/chunk_fluid_forcing_cell.js +59 -2
  153. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts +4 -1
  154. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.d.ts.map +1 -1
  155. package/src/shade/renderer/fluid/forcing/shader_fluid_forcing_apply.js +367 -341
  156. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts +6 -2
  157. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.d.ts.map +1 -1
  158. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +339 -282
  159. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  160. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  161. package/src/shade/renderer/global_illumination/probe/octahedral/shader_lpv_build_gbuffer.js +1 -1
  162. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +20 -1
  163. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  164. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +29 -0
  165. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts +47 -0
  166. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.d.ts.map +1 -0
  167. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_light.js +246 -0
  168. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +4 -15
  169. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  170. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +8 -148
  171. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +4 -9
  172. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  173. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +9 -58
  174. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts +142 -0
  175. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.d.ts.map +1 -0
  176. package/src/shade/renderer/global_illumination/screen_probe/GPUScreenProbeGI.js +938 -0
  177. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts +192 -0
  178. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.d.ts.map +1 -0
  179. package/src/shade/renderer/global_illumination/screen_probe/SCREEN_PROBE.js +231 -0
  180. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts +11 -0
  181. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.d.ts.map +1 -0
  182. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeDebugView.js +25 -0
  183. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts +110 -0
  184. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.d.ts.map +1 -0
  185. package/src/shade/renderer/global_illumination/screen_probe/ScreenProbeSettings.js +197 -0
  186. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts +150 -0
  187. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.d.ts.map +1 -0
  188. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe.js +408 -0
  189. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts +23 -0
  190. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.d.ts.map +1 -0
  191. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brdf_density.js +63 -0
  192. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts +24 -0
  193. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.d.ts.map +1 -0
  194. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_brick_origin.js +61 -0
  195. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts +39 -0
  196. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.d.ts.map +1 -0
  197. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_interpolate.js +126 -0
  198. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts +21 -0
  199. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.d.ts.map +1 -0
  200. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_lighting_history.js +74 -0
  201. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts +20 -0
  202. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.d.ts.map +1 -0
  203. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_march_distance.js +26 -0
  204. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts +24 -0
  205. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.d.ts.map +1 -0
  206. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_ray_sort.js +57 -0
  207. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts +22 -0
  208. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.d.ts.map +1 -0
  209. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_screen_march.js +53 -0
  210. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts +62 -0
  211. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.d.ts.map +1 -0
  212. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_surface.js +156 -0
  213. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts +18 -0
  214. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.d.ts.map +1 -0
  215. package/src/shade/renderer/global_illumination/screen_probe/chunk_screen_probe_workgroup_sum.js +50 -0
  216. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts +21 -0
  217. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.d.ts.map +1 -0
  218. package/src/shade/renderer/global_illumination/screen_probe/graph_screen_probe_debug_view.js +54 -0
  219. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts +67 -0
  220. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.d.ts.map +1 -0
  221. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_brick.js +509 -0
  222. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts +20 -0
  223. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.d.ts.map +1 -0
  224. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.js +128 -0
  225. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts +62 -0
  226. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.d.ts.map +1 -0
  227. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_gather.js +478 -0
  228. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts +69 -0
  229. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.d.ts.map +1 -0
  230. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_importance.js +457 -0
  231. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts +27 -0
  232. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.d.ts.map +1 -0
  233. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_indirect_lighting.js +219 -0
  234. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts +22 -0
  235. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.d.ts.map +1 -0
  236. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_pick.js +151 -0
  237. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts +66 -0
  238. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.d.ts.map +1 -0
  239. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_place.js +301 -0
  240. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts +59 -0
  241. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.d.ts.map +1 -0
  242. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_resolve.js +364 -0
  243. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts +40 -0
  244. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.d.ts.map +1 -0
  245. package/src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_trace_screen.js +275 -0
  246. package/src/shade/renderer/grass/blade/GPUGrassBlades.d.ts.map +1 -1
  247. package/src/shade/renderer/grass/blade/GPUGrassBlades.js +17 -2
  248. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts +18 -8
  249. package/src/shade/renderer/grass/blade/grass_blade_resolve.d.ts.map +1 -1
  250. package/src/shade/renderer/grass/blade/grass_blade_resolve.js +114 -32
  251. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts +3 -2
  252. package/src/shade/renderer/grass/press/shader_grass_press_mark.d.ts.map +1 -1
  253. package/src/shade/renderer/grass/press/shader_grass_press_mark.js +5 -3
  254. package/src/shade/renderer/light/GPULightCollection.d.ts +1 -1
  255. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  256. package/src/shade/renderer/light/GPULightCollection.js +213 -80
  257. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.d.ts +1 -2
  258. package/src/shade/renderer/light/environment/chunk_sample_environment_color.d.ts.map +1 -0
  259. package/src/shade/renderer/{atmosphere → light/environment}/chunk_sample_environment_color.js +3 -4
  260. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  261. package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +1 -1
  262. package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +1 -1
  263. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.d.ts +1 -1
  264. package/src/shade/renderer/postprocess/motion_blur/MotionBlur.js +1 -1
  265. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.d.ts +1 -1
  266. package/src/shade/renderer/postprocess/motion_blur/graph_postprocess_motion_blur.js +1 -1
  267. package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +1 -1
  268. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  269. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +2 -0
  270. package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_sample_radiance.js +2 -0
  271. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts +6 -0
  272. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.d.ts.map +1 -1
  273. package/src/shade/renderer/postprocess/taa/chunk_fsr2_compute_depth_clip.js +9 -1
  274. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.d.ts.map +1 -1
  275. package/src/shade/renderer/postprocess/taa/shader_depth_occlusion_clip.js +4 -3
  276. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts +17 -0
  277. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.d.ts.map +1 -0
  278. package/src/shade/renderer/postprocess/velocity/VELOCITY_BUFFER.js +16 -0
  279. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts +21 -0
  280. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.d.ts.map +1 -0
  281. package/src/shade/renderer/postprocess/velocity/chunk_velocity_texel.js +30 -0
  282. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -5
  283. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  284. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +19 -17
  285. package/src/shade/renderer/rasterize/forward/chunk_forward_sample_indirect.js +2 -0
  286. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts +49 -0
  287. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.d.ts.map +1 -0
  288. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_draw.js +144 -0
  289. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts +71 -0
  290. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.d.ts.map +1 -0
  291. package/src/shade/renderer/rasterize/native/avboit/avboit_unlit_splat.js +152 -0
  292. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts +21 -0
  293. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.d.ts.map +1 -0
  294. package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_unlit_varyings.js +30 -0
  295. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts +101 -0
  296. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.d.ts.map +1 -0
  297. package/src/shade/renderer/rasterize/native/avboit/graph_avboit_unlit.js +306 -0
  298. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts +9 -0
  299. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.d.ts.map +1 -1
  300. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_splat.js +11 -4
  301. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  302. package/src/shade/renderer/scene/GPUSceneContext.js +2 -1
  303. package/src/shade/renderer/scene/Scene.d.ts +9 -2
  304. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  305. package/src/shade/renderer/scene/Scene.js +10 -2
  306. package/src/shade/renderer/shader/ImageShader.d.ts +24 -12
  307. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  308. package/src/shade/renderer/shader/ImageShader.js +11 -8
  309. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts +3 -1
  310. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.d.ts.map +1 -1
  311. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js +11 -3
  312. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +2 -11
  313. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -1
  314. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +23 -32
  315. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts +6 -0
  316. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.d.ts.map +1 -1
  317. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_RADIUS_DECLARATION.js +14 -2
  318. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.d.ts.map +1 -1
  319. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_height.js +4 -2
  320. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.d.ts.map +1 -1
  321. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_intersection.js +11 -3
  322. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +68 -69
  324. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts +4 -1
  325. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.d.ts.map +1 -1
  326. package/src/shade/renderer/shader/chunk/atmosphere/chunk_get_sun_transmittance.js +46 -39
  327. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.d.ts.map +1 -1
  328. package/src/shade/renderer/shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js +5 -3
  329. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts +18 -10
  330. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.d.ts.map +1 -1
  331. package/src/shade/renderer/shader/chunk/color/tonemap/purkinje/chunk_apply_purkinje_shift.js +30 -27
  332. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts +14 -0
  333. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.d.ts.map +1 -0
  334. package/src/shade/renderer/shader/chunk/depth/chunk_get_device_depth.js +30 -0
  335. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts +21 -0
  336. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.d.ts.map +1 -0
  337. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.js +60 -0
  338. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.d.ts → io/chunk_light_get_sun.d.ts} +3 -6
  339. package/src/shade/renderer/shader/chunk/light/io/chunk_light_get_sun.d.ts.map +1 -0
  340. package/src/shade/renderer/shader/chunk/light/{sky/chunk_sample_sky_color.js → io/chunk_light_get_sun.js} +6 -26
  341. package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +1 -1
  342. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts +69 -0
  343. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.d.ts.map +1 -0
  344. package/src/shade/renderer/trails/GPUTrailAVBOITChannel.js +129 -0
  345. package/src/shade/renderer/trails/GPUTrailSystem.d.ts +164 -0
  346. package/src/shade/renderer/trails/GPUTrailSystem.d.ts.map +1 -0
  347. package/src/shade/renderer/trails/GPUTrailSystem.js +725 -0
  348. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts +14 -0
  349. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.d.ts.map +1 -0
  350. package/src/shade/renderer/trails/data/TRAIL_DATABASE_SPEC.js +38 -0
  351. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts +66 -0
  352. package/src/shade/renderer/trails/data/TRAIL_KNOT.d.ts.map +1 -0
  353. package/src/shade/renderer/trails/data/TRAIL_KNOT.js +154 -0
  354. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts +19 -0
  355. package/src/shade/renderer/trails/data/TRAIL_RECORD.d.ts.map +1 -0
  356. package/src/shade/renderer/trails/data/TRAIL_RECORD.js +68 -0
  357. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts +18 -0
  358. package/src/shade/renderer/trails/data/TRAIL_STATE.d.ts.map +1 -0
  359. package/src/shade/renderer/trails/data/TRAIL_STATE.js +43 -0
  360. package/src/shade/renderer/trails/graph_trails.d.ts +58 -0
  361. package/src/shade/renderer/trails/graph_trails.d.ts.map +1 -0
  362. package/src/shade/renderer/trails/graph_trails.js +155 -0
  363. package/src/shade/renderer/trails/graph_trails_avboit.d.ts +126 -0
  364. package/src/shade/renderer/trails/graph_trails_avboit.d.ts.map +1 -0
  365. package/src/shade/renderer/trails/graph_trails_avboit.js +300 -0
  366. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts +56 -0
  367. package/src/shade/renderer/trails/runtime/TrailFadeCurves.d.ts.map +1 -0
  368. package/src/shade/renderer/trails/runtime/TrailFadeCurves.js +220 -0
  369. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts +49 -0
  370. package/src/shade/renderer/trails/runtime/TrailKnotPool.d.ts.map +1 -0
  371. package/src/shade/renderer/trails/runtime/TrailKnotPool.js +162 -0
  372. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts +52 -0
  373. package/src/shade/renderer/trails/runtime/TrailParameters.d.ts.map +1 -0
  374. package/src/shade/renderer/trails/runtime/TrailParameters.js +126 -0
  375. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts +23 -0
  376. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.d.ts.map +1 -0
  377. package/src/shade/renderer/trails/shaders/chunk_trail_frame_transport.js +57 -0
  378. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts +14 -0
  379. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.d.ts.map +1 -0
  380. package/src/shade/renderer/trails/shaders/chunk_trail_knot_alpha.js +40 -0
  381. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts +18 -0
  382. package/src/shade/renderer/trails/shaders/chunk_trail_seed.d.ts.map +1 -0
  383. package/src/shade/renderer/trails/shaders/chunk_trail_seed.js +64 -0
  384. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts +14 -0
  385. package/src/shade/renderer/trails/shaders/chunk_trail_segment.d.ts.map +1 -0
  386. package/src/shade/renderer/trails/shaders/chunk_trail_segment.js +51 -0
  387. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts +48 -0
  388. package/src/shade/renderer/trails/shaders/chunk_trail_update.d.ts.map +1 -0
  389. package/src/shade/renderer/trails/shaders/chunk_trail_update.js +197 -0
  390. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts +34 -0
  391. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.d.ts.map +1 -0
  392. package/src/shade/renderer/trails/shaders/chunk_trail_vertex.js +111 -0
  393. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts +24 -0
  394. package/src/shade/renderer/trails/shaders/shader_trail_avboit.d.ts.map +1 -0
  395. package/src/shade/renderer/trails/shaders/shader_trail_avboit.js +78 -0
  396. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts +23 -0
  397. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.d.ts.map +1 -0
  398. package/src/shade/renderer/trails/shaders/shader_trail_avboit_segments.js +130 -0
  399. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts +29 -0
  400. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.d.ts.map +1 -0
  401. package/src/shade/renderer/trails/shaders/shader_trail_draw_args.js +78 -0
  402. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts +18 -0
  403. package/src/shade/renderer/trails/shaders/shader_trail_seed.d.ts.map +1 -0
  404. package/src/shade/renderer/trails/shaders/shader_trail_seed.js +79 -0
  405. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts +20 -0
  406. package/src/shade/renderer/trails/shaders/shader_trail_update.d.ts.map +1 -0
  407. package/src/shade/renderer/trails/shaders/shader_trail_update.js +101 -0
  408. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +3 -1
  409. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  410. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -2
  411. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  412. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +743 -739
  413. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +2 -0
  414. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  415. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +19 -17
  416. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.d.ts.map +1 -1
  417. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +5 -3
  418. package/src/shade/renderer/water/chunk_water_gi.js +2 -0
  419. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  420. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  421. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts +0 -18
  422. package/src/engine/graphics/ecs/trail3d/advance_trail.d.ts.map +0 -1
  423. package/src/engine/graphics/ecs/trail3d/advance_trail.js +0 -42
  424. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts +0 -14
  425. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.d.ts.map +0 -1
  426. package/src/engine/graphics/ecs/trail3d/seed_trail_tube.js +0 -75
  427. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts +0 -17
  428. package/src/engine/graphics/ecs/trail3d/trail_head_position.d.ts.map +0 -1
  429. package/src/engine/graphics/ecs/trail3d/trail_head_position.js +0 -19
  430. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts +0 -2
  431. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.d.ts.map +0 -1
  432. package/src/engine/graphics/sh3/path_tracer/make_sky_hosek.js +0 -45
  433. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts +0 -2
  434. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.d.ts.map +0 -1
  435. package/src/engine/graphics/sh3/path_tracer/make_sky_rtiw.js +0 -17
  436. package/src/engine/graphics/sh3/sky/hosek/README.md +0 -4
  437. package/src/engine/graphics/sh3/sky/hosek/data.d.ts +0 -17
  438. package/src/engine/graphics/sh3/sky/hosek/data.d.ts.map +0 -1
  439. package/src/engine/graphics/sh3/sky/hosek/data.js +0 -3744
  440. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts +0 -2
  441. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.d.ts.map +0 -1
  442. package/src/engine/graphics/sh3/sky/hosek/prototype_hosek.js +0 -71
  443. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts +0 -26
  444. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.d.ts.map +0 -1
  445. package/src/engine/graphics/sh3/sky/hosek/render_hosek_sky_to_equirectangular.js +0 -70
  446. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts +0 -22
  447. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.d.ts.map +0 -1
  448. package/src/engine/graphics/sh3/sky/hosek/sky_hosek_compute_irradiance_by_direction.js +0 -388
  449. package/src/engine/graphics/trail/tube/TubeX.d.ts +0 -186
  450. package/src/engine/graphics/trail/tube/TubeX.d.ts.map +0 -1
  451. package/src/engine/graphics/trail/tube/TubeX.js +0 -575
  452. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts +0 -16
  453. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.d.ts.map +0 -1
  454. package/src/engine/graphics/trail/tube/simulator/TubeXFixedPhysicsSimulator.js +0 -34
  455. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts +0 -27
  456. package/src/engine/graphics/trail/tube/tube_attributes_spec.d.ts.map +0 -1
  457. package/src/engine/graphics/trail/tube/tube_attributes_spec.js +0 -70
  458. package/src/engine/graphics3/make_default_environment.d.ts +0 -15
  459. package/src/engine/graphics3/make_default_environment.d.ts.map +0 -1
  460. package/src/engine/graphics3/make_default_environment.js +0 -111
  461. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts +0 -38
  462. package/src/engine/graphics3/trail/trail_tube_write_geometry.d.ts.map +0 -1
  463. package/src/engine/graphics3/trail/trail_tube_write_geometry.js +0 -119
  464. package/src/shade/renderer/atmosphere/MIE_G.d.ts +0 -6
  465. package/src/shade/renderer/atmosphere/MIE_G.d.ts.map +0 -1
  466. package/src/shade/renderer/atmosphere/MIE_G.js +0 -5
  467. package/src/shade/renderer/atmosphere/chunk_sample_environment_color.d.ts.map +0 -1
  468. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts +0 -4
  469. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.d.ts.map +0 -1
  470. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_EARTH.js +0 -44
  471. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts +0 -2
  472. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.d.ts.map +0 -1
  473. package/src/shade/renderer/atmosphere/hillaire/ATMOSPHERE_PARAMETERS_STRUCT.js +0 -43
  474. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts +0 -3
  475. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.d.ts.map +0 -1
  476. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_DENSITY_DECLARATION.js +0 -6
  477. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts +0 -3
  478. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.d.ts.map +0 -1
  479. package/src/shade/renderer/shader/chunk/atmosphere/chunk_absorb.js +0 -18
  480. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts +0 -14
  481. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.d.ts.map +0 -1
  482. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_optical_depth.js +0 -86
  483. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts +0 -8
  484. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.d.ts.map +0 -1
  485. package/src/shade/renderer/shader/chunk/atmosphere/chunk_integrate_scattering.js +0 -125
  486. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts +0 -3
  487. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.d.ts.map +0 -1
  488. package/src/shade/renderer/shader/chunk/atmosphere/chunk_planet_intersection.js +0 -17
  489. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts +0 -3
  490. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.d.ts.map +0 -1
  491. package/src/shade/renderer/shader/chunk/atmosphere/chunk_sphere_intersection_nearest.js +0 -38
  492. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts +0 -16
  493. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.d.ts.map +0 -1
  494. package/src/shade/renderer/shader/chunk/atmosphere/hillaire/DENSITY_PROFILE_LAYER_STRUCT.js +0 -28
  495. package/src/shade/renderer/shader/chunk/light/sky/chunk_sample_sky_color.d.ts.map +0 -1
  496. package/src/shade/renderer/view/GPUViewSkyContext.d.ts +0 -26
  497. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +0 -1
  498. package/src/shade/renderer/view/GPUViewSkyContext.js +0 -170
@@ -0,0 +1,509 @@
1
+ import { ENVIRONMENT_MAP_SAMPLER_RESOURCE } from "../../light/environment/ENVIRONMENT_MAP_SAMPLER_RESOURCE.js";
2
+ import { LIGHT_DATA_RESOURCE } from "../../light/LIGHT_DATA_RESOURCE.js";
3
+ import {
4
+ WORLD_CLUSTER_DATA_RESOURCE,
5
+ WORLD_CLUSTER_LOOKUP_RESOURCE
6
+ } from "../../light/world_cluster/chunk_world_light_cluster_lookup.js";
7
+ import { CLIPMAP_LEVEL_ARRAY } from "../../shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js";
8
+ import { chunk_rgbe9995_decode } from "../../shader/chunk/color/rgbe9995/chunk_rgbe9995_decode.js";
9
+ import { chunk_rgbe9995_encode } from "../../shader/chunk/color/rgbe9995/chunk_rgbe9995_encode.js";
10
+ import { chunk_uv_equal_area_sphere } from "../../shader/chunk/geometry/octahedron/chunk_uv_equal_area_sphere.js";
11
+ import {
12
+ chunk_uv_octahedral_unit_decode
13
+ } from "../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js";
14
+ import {
15
+ chunk_uv_octahedral_unit_encode
16
+ } from "../../shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_encode.js";
17
+ import { chunk_folded_workgroup_index } from "../../shader/chunk/grid/chunk_folded_workgroup_index.js";
18
+ import { RECIPROCAL_PI_DECLARATION } from "../../shader/chunk/math/RECIPROCAL_PI_DECLARATION.js";
19
+ import { chunk_hash_to_float01 } from "../../shader/chunk/random/chunk_hash_to_float01.js";
20
+ import { chunk_pcg4d } from "../../shader/chunk/random/pcg/chunk_pcg4d.js";
21
+ import {
22
+ chunk_sh3_color_get_irradiance_at
23
+ } from "../../shader/chunk/spherical_harmonics/chunk_sh3_color_get_irradiance_at.js";
24
+ import { chunk_sample_environment_map } from "../../shader/chunk/texture/sample/chunk_sample_environment_map.js";
25
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
26
+ import { ComputeShader } from "../../shader/ComputeShader.js";
27
+ import { ShaderResourceDescriptor } from "../../shader/resource/ShaderResourceDescriptor.js";
28
+ import { ShaderResourceGroupDescriptor } from "../../shader/resource/ShaderResourceGroupDescriptor.js";
29
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
30
+ import { vec2u } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
31
+ import { WebGPUArray } from "../../shader/type/WebGPUArray.js";
32
+ import { BRICK_TRACE_HIT, BRICK_TRACE_MISS } from "../probe_clipmap/brick/BRICK_CLIPMAP.js";
33
+ import {
34
+ BRICK_ATLAS_TEXTURE_RESOURCE,
35
+ BRICK_LEVELS_RESOURCE,
36
+ BRICK_MAP_TEXTURE_RESOURCE,
37
+ BRICK_OCCUPANCY_TEXTURE_RESOURCE,
38
+ BRICK_SAMPLER_RESOURCE,
39
+ chunk_brick_clipmap_trace
40
+ } from "../probe_clipmap/brick/chunk_brick_clipmap_trace.js";
41
+ import {
42
+ BRICK_MATERIAL_ALBEDO_RESOURCE,
43
+ BRICK_MATERIAL_EMISSIVE_RESOURCE
44
+ } from "../probe_clipmap/material/chunk_brick_material.js";
45
+ import {
46
+ PROBE_LEVELS_RESOURCE,
47
+ PROBE_RECORD_STRUCT,
48
+ PROBE_WANTED_BITS_RESOURCE,
49
+ PROBE_WANTED_WRITE_RESOURCE
50
+ } from "../probe_clipmap/probe/chunk_probe_clipmap.js";
51
+ import {
52
+ chunk_probe_clipmap_local_irradiance,
53
+ chunk_probe_clipmap_sun_irradiance
54
+ } from "../probe_clipmap/probe/chunk_probe_clipmap_hit_light.js";
55
+ import { chunk_probe_clipmap_hit_material_pick } from "../probe_clipmap/probe/chunk_probe_clipmap_hit_material.js";
56
+ import {
57
+ chunk_probe_clipmap_pick_in,
58
+ PROBE_CLIPMAP_SAMPLING_GROUP,
59
+ PROBE_DEPTH_SAMPLER_RESOURCE,
60
+ PROBE_SAMPLING_STRUCT
61
+ } from "../probe_clipmap/probe/chunk_probe_clipmap_pick.js";
62
+ import { chunk_probe_clipmap_sample_radiance } from "../probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js";
63
+ import { chunk_probe_clipmap_want } from "../probe_clipmap/probe/chunk_probe_clipmap_want.js";
64
+ import { PROBE_RECEIVER_BIAS_VIEW } from "../probe_clipmap/probe/PROBE_CLIPMAP.js";
65
+ import { PROBE_WANT_SETTINGS } from "../probe_clipmap/probe/shader_probe_clipmap_want.js";
66
+ import {
67
+ chunk_screen_probe,
68
+ chunk_screen_probe_counts,
69
+ SCREEN_PROBE_DISPATCH_READ_RESOURCE,
70
+ SCREEN_PROBE_EXPOSURE_RESOURCE,
71
+ SCREEN_PROBE_FRAME_RESOURCE,
72
+ SCREEN_PROBE_PICKS_READ_RESOURCE,
73
+ SCREEN_PROBE_RAYS_WRITE_RESOURCE,
74
+ SCREEN_PROBE_TRACE_HIT_WRITE_RESOURCE,
75
+ SCREEN_PROBE_TRACE_RADIANCE_WRITE_RESOURCE,
76
+ SCREEN_PROBES_READ_RESOURCE
77
+ } from "./chunk_screen_probe.js";
78
+ import { SCREEN_PROBE_THREAD_WORKGROUP_SIZE } from "./SCREEN_PROBE.js";
79
+
80
+ const brick_group = () => new ShaderResourceGroupDescriptor()
81
+ .add(BRICK_LEVELS_RESOURCE)
82
+ .add(BRICK_MAP_TEXTURE_RESOURCE)
83
+ .add(BRICK_OCCUPANCY_TEXTURE_RESOURCE)
84
+ .add(BRICK_ATLAS_TEXTURE_RESOURCE)
85
+ .add(BRICK_SAMPLER_RESOURCE);
86
+
87
+ // each pass finds a ray's probe's origin and pick (`ScreenProbePick`) at the probe
88
+ const rays_group = () => new ShaderResourceGroupDescriptor()
89
+ .add(SCREEN_PROBE_FRAME_RESOURCE)
90
+ .add(SCREEN_PROBE_RAYS_WRITE_RESOURCE)
91
+ .add(SCREEN_PROBE_PICKS_READ_RESOURCE)
92
+ .add(SCREEN_PROBE_DISPATCH_READ_RESOURCE);
93
+
94
+ const trace_resources = new ShaderResourceSetDescriptor();
95
+
96
+ trace_resources.addGroup(rays_group().add(SCREEN_PROBES_READ_RESOURCE).add(LIGHT_DATA_RESOURCE));
97
+ trace_resources.addGroup(brick_group());
98
+
99
+ /**
100
+ * The bricks' trace of the rays the screen left (Lumen's mesh and global SDF traces): a thread a ray of their list,
101
+ * through its command.
102
+ *
103
+ * - From the probe's origin (`ScreenProbePick#origin`) to the probe's reach (`brick_clipmap_trace`), starting a
104
+ * voxel short of where the screen showed the ray clear. The screen's ray left the surface point, so that distance
105
+ * moves by the origin's offset along this ray, as Lumen's world traces start twice their bias short of the screen's
106
+ * distance, the most their biases move the start along the ray.
107
+ * - **A front-face hit** takes E_dir from the directional lights, shadowed by rays through the bricks
108
+ * (`probe_clipmap_sun_irradiance`), each light's point of its disk drawn from the ray's id and direction.
109
+ * - **A back face** is a hit whose field's gradient runs along the ray: the ray started inside a solid.
110
+ * - **No hit within the reach**, or out of the world: the world-space probes the probe picked answer past it (FAR),
111
+ * or the environment where it picked none (SKY).
112
+ * - **A march that spends its steps** is unresolved: no light.
113
+ *
114
+ * @type {ComputeShader}
115
+ */
116
+ export const shader_screen_probe_brick_trace = ComputeShader.from({
117
+ label: "Screen Probe Brick Trace",
118
+ resources: trace_resources,
119
+ body: CodeChunk.from(
120
+ //language=WGSL
121
+ `
122
+ @compute @workgroup_size(${SCREEN_PROBE_THREAD_WORKGROUP_SIZE})
123
+ fn main(
124
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
125
+ @builtin(local_invocation_index) lane: u32,
126
+ ) {
127
+ let i = folded_workgroup_index(workgroup_id) * ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u + lane;
128
+
129
+ if (i >= screen_probe_brick_ray_count()) {
130
+ return;
131
+ }
132
+
133
+ var entry = screen_probe_rays[i];
134
+
135
+ let probe = entry.ray >> SCREEN_PROBE_RAY_SLOT_BITS;
136
+ let pick = screen_probe_picks[probe];
137
+ let origin = pick.origin;
138
+ let direction = uv_equal_area_sphere_decode(unpack2x16unorm(entry.direction));
139
+ let cascades = screen_probe_frame.brick_cascade_count;
140
+ let atlas_shift = screen_probe_frame.brick_atlas_shift;
141
+ let start = max(entry.t + dot(screen_probes[probe].position - origin.xyz, direction) - origin.w, 0.0);
142
+
143
+ let hit = brick_clipmap_trace(origin.xyz, direction, start, pick.reach, cascades, atlas_shift);
144
+
145
+ var kind = SCREEN_PROBE_TRACE_UNRESOLVED;
146
+ var light = vec3<f32>(0.0);
147
+
148
+ if (hit.kind == ${BRICK_TRACE_HIT}u) {
149
+ if (dot(hit.normal, direction) > 0.0) {
150
+ kind = SCREEN_PROBE_TRACE_BACK;
151
+ } else {
152
+ kind = SCREEN_PROBE_TRACE_HIT;
153
+ light = probe_clipmap_sun_irradiance(hit.position, hit.normal, hit.cascade, vec2<u32>(entry.ray, entry.direction), screen_probe_frame.brick_t_max, cascades, atlas_shift);
154
+ }
155
+ } else if (hit.kind == ${BRICK_TRACE_MISS}u) {
156
+ kind = select(SCREEN_PROBE_TRACE_SKY, SCREEN_PROBE_TRACE_FAR, dot(pick.weights, vec4<f32>(1.0)) > 0.0);
157
+ }
158
+
159
+ entry.t = hit.t;
160
+ entry.normal = select(0u, pack2x16unorm(uv_octahedral_unit_encode(hit.normal)), kind == SCREEN_PROBE_TRACE_HIT);
161
+ entry.flags = kind | (select(0u, hit.cascade, kind == SCREEN_PROBE_TRACE_HIT) << 3u);
162
+ entry.albedo = 0u;
163
+ entry.light = rgbe9995_encode(light);
164
+
165
+ screen_probe_rays[i] = entry;
166
+ }
167
+ `, [
168
+ chunk_screen_probe,
169
+ chunk_screen_probe_counts,
170
+ chunk_brick_clipmap_trace,
171
+ chunk_folded_workgroup_index,
172
+ chunk_uv_equal_area_sphere,
173
+ chunk_uv_octahedral_unit_encode,
174
+ chunk_probe_clipmap_sun_irradiance,
175
+ chunk_rgbe9995_encode,
176
+ ]),
177
+ });
178
+
179
+ const shade_resources = new ShaderResourceSetDescriptor();
180
+
181
+ shade_resources.addGroup(rays_group()
182
+ .addTexture("tEnvironment", "float", "2d")
183
+ .add(ENVIRONMENT_MAP_SAMPLER_RESOURCE));
184
+ shade_resources.addGroup(brick_group()
185
+ .add(BRICK_MATERIAL_ALBEDO_RESOURCE)
186
+ .add(BRICK_MATERIAL_EMISSIVE_RESOURCE));
187
+ shade_resources.addGroup(PROBE_CLIPMAP_SAMPLING_GROUP);
188
+
189
+ /**
190
+ * What each ray left to the bricks brings back (as the probe clipmap's shade): a thread a ray of the list.
191
+ *
192
+ * - **A front-face hit**: `emissive + ρ_d·E_dir/π`, its surface one texel of the brick material at the hit drawn from
193
+ * the ray's id and direction (`probe_clipmap_hit_material_pick`); its diffuse albedo goes into the ray for the light
194
+ * and bounce passes.
195
+ * - **FAR**: the world-space probes the probe picked, each share's radiance along the ray (`probe_clipmap_radiance`):
196
+ * what lies past the reach, as each of them sees it.
197
+ * - **SKY**: the prefiltered environment along the ray, at the roughness whose lobe covers a texel of the probe's
198
+ * octahedron, 1/√n (as the probe clipmap's misses take it for theirs).
199
+ * - A back face and an unresolved march bring nothing.
200
+ *
201
+ * @type {ComputeShader}
202
+ */
203
+ export const shader_screen_probe_brick_shade = ComputeShader.from({
204
+ label: "Screen Probe Brick Shade",
205
+ resources: shade_resources,
206
+ body: CodeChunk.from(
207
+ //language=WGSL
208
+ `
209
+ @compute @workgroup_size(${SCREEN_PROBE_THREAD_WORKGROUP_SIZE})
210
+ fn main(
211
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
212
+ @builtin(local_invocation_index) lane: u32,
213
+ ) {
214
+ let i = folded_workgroup_index(workgroup_id) * ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u + lane;
215
+
216
+ if (i >= screen_probe_brick_ray_count()) {
217
+ return;
218
+ }
219
+
220
+ let entry = screen_probe_rays[i];
221
+ let kind = entry.flags & SCREEN_PROBE_TRACE_KIND_MASK;
222
+ let probe = entry.ray >> SCREEN_PROBE_RAY_SLOT_BITS;
223
+ let direction = uv_equal_area_sphere_decode(unpack2x16unorm(entry.direction));
224
+
225
+ var radiance = vec3<f32>(0.0);
226
+ var albedo = vec3<f32>(0.0);
227
+
228
+ if (kind == SCREEN_PROBE_TRACE_HIT) {
229
+ let position = screen_probe_picks[probe].origin.xyz + entry.t * direction;
230
+ let normal = uv_octahedral_unit_decode(unpack2x16unorm(entry.normal));
231
+ let draw = hash_to_float01(pcg4d(vec4<u32>(entry.ray, entry.direction, 0x510E527Fu, 0u)).x);
232
+ let surface = probe_clipmap_hit_material_pick(position, normal, entry.flags >> 3u, draw, screen_probe_frame.brick_atlas_shift);
233
+
234
+ radiance = surface.emissive + surface.albedo * rgbe9995_decode(entry.light) * RECIPROCAL_PI;
235
+ albedo = surface.albedo;
236
+ } else if (kind == SCREEN_PROBE_TRACE_FAR) {
237
+ let pick = screen_probe_picks[probe];
238
+
239
+ // each share by name
240
+ if (pick.weights.x > 0.0) { radiance += pick.weights.x * probe_clipmap_radiance(pick.slots.x, direction).rgb; }
241
+ if (pick.weights.y > 0.0) { radiance += pick.weights.y * probe_clipmap_radiance(pick.slots.y, direction).rgb; }
242
+ if (pick.weights.z > 0.0) { radiance += pick.weights.z * probe_clipmap_radiance(pick.slots.z, direction).rgb; }
243
+ if (pick.weights.w > 0.0) { radiance += pick.weights.w * probe_clipmap_radiance(pick.slots.w, direction).rgb; }
244
+ } else if (kind == SCREEN_PROBE_TRACE_SKY) {
245
+ radiance = sample_environment_map(tEnvironment, sEnvironment, direction, inverseSqrt(f32(screen_probe_frame.octahedron_resolution)));
246
+ }
247
+
248
+ screen_probe_rays[i].light = rgbe9995_encode(radiance);
249
+ screen_probe_rays[i].albedo = pack4x8unorm(vec4<f32>(albedo, 0.0));
250
+ }
251
+ `, [
252
+ chunk_screen_probe,
253
+ chunk_screen_probe_counts,
254
+ chunk_uv_octahedral_unit_decode,
255
+ chunk_folded_workgroup_index,
256
+ chunk_uv_equal_area_sphere,
257
+ chunk_probe_clipmap_hit_material_pick,
258
+ chunk_probe_clipmap_sample_radiance,
259
+ chunk_sample_environment_map,
260
+ chunk_hash_to_float01,
261
+ chunk_pcg4d,
262
+ chunk_rgbe9995_decode,
263
+ chunk_rgbe9995_encode,
264
+ RECIPROCAL_PI_DECLARATION,
265
+ ]),
266
+ });
267
+
268
+ const light_resources = new ShaderResourceSetDescriptor();
269
+
270
+ light_resources.addGroup(rays_group()
271
+ .add(LIGHT_DATA_RESOURCE)
272
+ .add(WORLD_CLUSTER_LOOKUP_RESOURCE)
273
+ .add(WORLD_CLUSTER_DATA_RESOURCE));
274
+ light_resources.addGroup(brick_group());
275
+
276
+ /**
277
+ * The local lights a front-face hit takes (as the probe clipmap's light pass): a thread a ray of the list, adding
278
+ * `ρ_d·E_loc/π`, one light of the hit's world light cluster cell picked by its light and shadowed by a ray through the
279
+ * bricks (`probe_clipmap_local_irradiance`), drawn from the ray's id and direction.
280
+ *
281
+ * @type {ComputeShader}
282
+ */
283
+ export const shader_screen_probe_brick_light = ComputeShader.from({
284
+ label: "Screen Probe Brick Light",
285
+ resources: light_resources,
286
+ body: CodeChunk.from(
287
+ //language=WGSL
288
+ `
289
+ @compute @workgroup_size(${SCREEN_PROBE_THREAD_WORKGROUP_SIZE})
290
+ fn main(
291
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
292
+ @builtin(local_invocation_index) lane: u32,
293
+ ) {
294
+ let i = folded_workgroup_index(workgroup_id) * ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u + lane;
295
+
296
+ if (i >= screen_probe_brick_ray_count()) {
297
+ return;
298
+ }
299
+
300
+ let entry = screen_probe_rays[i];
301
+ let albedo = unpack4x8unorm(entry.albedo).rgb;
302
+
303
+ // only a front-face hit that bounces anything takes more light
304
+ if ((entry.flags & SCREEN_PROBE_TRACE_KIND_MASK) != SCREEN_PROBE_TRACE_HIT || all(albedo == vec3<f32>(0.0))) {
305
+ return;
306
+ }
307
+
308
+ let direction = uv_equal_area_sphere_decode(unpack2x16unorm(entry.direction));
309
+ let position = screen_probe_picks[entry.ray >> SCREEN_PROBE_RAY_SLOT_BITS].origin.xyz + entry.t * direction;
310
+ let normal = uv_octahedral_unit_decode(unpack2x16unorm(entry.normal));
311
+
312
+ // the pick and its shadow ray's point, apart from the trace's and the shade's draws
313
+ let hash = pcg4d(vec4<u32>(entry.ray, entry.direction, 0xA54FF53Au, 0u));
314
+ let random = vec4<f32>(hash_to_float01(hash.x), hash_to_float01(hash.y), hash_to_float01(hash.z), hash_to_float01(hash.w));
315
+
316
+ let e = probe_clipmap_local_irradiance(entry.flags >> 3u, position, normal, random, screen_probe_frame.brick_cascade_count, screen_probe_frame.brick_atlas_shift) * RECIPROCAL_PI;
317
+
318
+ if (all(e == vec3<f32>(0.0))) {
319
+ return;
320
+ }
321
+
322
+ screen_probe_rays[i].light = rgbe9995_encode(rgbe9995_decode(entry.light) + albedo * e);
323
+ }
324
+ `, [
325
+ chunk_screen_probe,
326
+ chunk_screen_probe_counts,
327
+ chunk_uv_octahedral_unit_decode,
328
+ chunk_folded_workgroup_index,
329
+ chunk_uv_equal_area_sphere,
330
+ chunk_probe_clipmap_local_irradiance,
331
+ chunk_hash_to_float01,
332
+ chunk_pcg4d,
333
+ chunk_rgbe9995_decode,
334
+ chunk_rgbe9995_encode,
335
+ RECIPROCAL_PI_DECLARATION,
336
+ ]),
337
+ });
338
+
339
+ /**
340
+ * One world-space probe set's sampling resources under a prefix, for a pass that picks from two.
341
+ *
342
+ * @param {string} prefix
343
+ * @returns {ShaderResourceGroupDescriptor}
344
+ */
345
+ function probe_set_group(prefix) {
346
+ return new ShaderResourceGroupDescriptor()
347
+ .add(ShaderResourceDescriptor.uniform(`${prefix}_levels`, CLIPMAP_LEVEL_ARRAY))
348
+ .add(ShaderResourceDescriptor.uniform(`${prefix}_sampling`, PROBE_SAMPLING_STRUCT))
349
+ .add(ShaderResourceDescriptor.texture(`${prefix}_indirection`, "uint", "3d"))
350
+ .add(ShaderResourceDescriptor.storageBuffer(`${prefix}_states`, WebGPUArray.from(vec2u)))
351
+ .add(ShaderResourceDescriptor.storageBuffer(`${prefix}_records`, WebGPUArray.from(PROBE_RECORD_STRUCT)))
352
+ .add(ShaderResourceDescriptor.texture(`${prefix}_depth`, "float", "2d"));
353
+ }
354
+
355
+ const bounce_resources = new ShaderResourceSetDescriptor();
356
+
357
+ bounce_resources.addGroup(rays_group()
358
+ .add(SCREEN_PROBE_EXPOSURE_RESOURCE)
359
+ .add(SCREEN_PROBE_TRACE_RADIANCE_WRITE_RESOURCE)
360
+ .add(SCREEN_PROBE_TRACE_HIT_WRITE_RESOURCE)
361
+ .add(PROBE_DEPTH_SAMPLER_RESOURCE));
362
+ bounce_resources.addGroup(probe_set_group("bounce_first"));
363
+ bounce_resources.addGroup(probe_set_group("bounce_fallback"));
364
+
365
+ /**
366
+ * The next bounce a front-face hit takes, and every ray's result into the probes' trace textures (as the probe
367
+ * clipmap's bounce): a thread a ray of the list, after the light pass.
368
+ *
369
+ * - **The bounce**, E_ind: the frustum's world-space probes picked at the hit along its normal, the view back along the
370
+ * ray (`probe_clipmap_pick_in`), with the ray's own noise; where they weigh nothing, the world cache's. Where neither
371
+ * has a probe, no bounce: the next frame's hit wants ask the world cache for them. A hit the frustum's probes served
372
+ * has its albedo cleared, so it wants nothing (`shader_screen_probe_brick_want`). `ρ_d·E_ind/π` is added.
373
+ * - **The result**: the ray's radiance, pre-exposed (`screen_probe_exposure`), and its kind and distance to its texel of
374
+ * `screen_probe_trace_radiance` and `screen_probe_trace_hit`, where the composite reads every ray, the screen's and
375
+ * the bricks' alike.
376
+ *
377
+ * @type {ComputeShader}
378
+ */
379
+ export const shader_screen_probe_brick_bounce = ComputeShader.from({
380
+ label: "Screen Probe Brick Bounce",
381
+ resources: bounce_resources,
382
+ body: CodeChunk.from(
383
+ //language=WGSL
384
+ `
385
+ @compute @workgroup_size(${SCREEN_PROBE_THREAD_WORKGROUP_SIZE})
386
+ fn main(
387
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
388
+ @builtin(local_invocation_index) lane: u32,
389
+ ) {
390
+ let i = folded_workgroup_index(workgroup_id) * ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u + lane;
391
+
392
+ if (i >= screen_probe_brick_ray_count()) {
393
+ return;
394
+ }
395
+
396
+ let entry = screen_probe_rays[i];
397
+ let kind = entry.flags & SCREEN_PROBE_TRACE_KIND_MASK;
398
+ let albedo = unpack4x8unorm(entry.albedo).rgb;
399
+
400
+ var light = rgbe9995_decode(entry.light);
401
+
402
+ if (kind == SCREEN_PROBE_TRACE_HIT && any(albedo != vec3<f32>(0.0))) {
403
+ let direction = uv_equal_area_sphere_decode(unpack2x16unorm(entry.direction));
404
+ let position = screen_probe_picks[entry.ray >> SCREEN_PROBE_RAY_SLOT_BITS].origin.xyz + entry.t * direction;
405
+ let normal = uv_octahedral_unit_decode(unpack2x16unorm(entry.normal));
406
+
407
+ let hash = pcg4d(vec4<u32>(entry.ray, entry.direction, 0x9B05688Cu, 0u));
408
+ let noise = vec2<f32>(hash_to_float01(hash.x), hash_to_float01(hash.y));
409
+
410
+ var probes = probe_clipmap_sh_in(
411
+ &bounce_first_records,
412
+ probe_clipmap_pick_in(&bounce_first_levels, &bounce_first_sampling, bounce_first_indirection, &bounce_first_states, bounce_first_depth, position, normal, -direction, noise),
413
+ );
414
+
415
+ if (probes.found) {
416
+ // served: nothing of the fallback is wanted here
417
+ screen_probe_rays[i].albedo = 0u;
418
+ } else {
419
+ probes = probe_clipmap_sh_in(
420
+ &bounce_fallback_records,
421
+ probe_clipmap_pick_in(&bounce_fallback_levels, &bounce_fallback_sampling, bounce_fallback_indirection, &bounce_fallback_states, bounce_fallback_depth, position, normal, -direction, noise),
422
+ );
423
+ }
424
+
425
+ if (probes.found) {
426
+ light += albedo * sh3_color_get_irradiance_at(normal, probes.sh) * RECIPROCAL_PI;
427
+ }
428
+ }
429
+
430
+ let probe = entry.ray >> SCREEN_PROBE_RAY_SLOT_BITS;
431
+ let texel = screen_probe_texel(probe, entry.ray & SCREEN_PROBE_RAY_SLOT_MASK);
432
+
433
+ textureStore(screen_probe_trace_radiance, texel, vec4<f32>(light * screen_probe_exposure.value, 0.0));
434
+ textureStore(screen_probe_trace_hit, texel, vec4<u32>(screen_probe_trace_hit_pack(kind, entry.t, false), 0u, 0u, 0u));
435
+ }
436
+ `, [
437
+ chunk_screen_probe,
438
+ chunk_screen_probe_counts,
439
+ chunk_uv_octahedral_unit_decode,
440
+ chunk_folded_workgroup_index,
441
+ chunk_uv_equal_area_sphere,
442
+ chunk_probe_clipmap_pick_in,
443
+ chunk_sh3_color_get_irradiance_at,
444
+ chunk_hash_to_float01,
445
+ chunk_pcg4d,
446
+ chunk_rgbe9995_decode,
447
+ RECIPROCAL_PI_DECLARATION,
448
+ ]),
449
+ });
450
+
451
+ const want_resources = new ShaderResourceSetDescriptor();
452
+
453
+ // the world cache's late wants, as `GPUProbeClipmap#write_want_bindings` hands them
454
+ want_resources.setImmediate("settings", PROBE_WANT_SETTINGS);
455
+ want_resources.addGroup(rays_group()
456
+ .add(PROBE_WANTED_WRITE_RESOURCE)
457
+ .add(PROBE_WANTED_BITS_RESOURCE)
458
+ .add(PROBE_LEVELS_RESOURCE));
459
+
460
+ /**
461
+ * The hits' wants (as the probe clipmap's hit wants): a thread a ray of the list, after the bounce. A front-face hit
462
+ * whose albedo the bounce left, which the frustum's world-space probes did not serve, wants the cages its pick reads in
463
+ * the world cache's late set, which the cache's next lifetime takes. Every lane calls `probe_clipmap_want`, wanting or
464
+ * not, from uniform control flow.
465
+ *
466
+ * @type {ComputeShader}
467
+ */
468
+ export const shader_screen_probe_brick_want = ComputeShader.from({
469
+ label: "Screen Probe Brick Want",
470
+ resources: want_resources,
471
+ body: CodeChunk.from(
472
+ //language=WGSL
473
+ `
474
+ @compute @workgroup_size(${SCREEN_PROBE_THREAD_WORKGROUP_SIZE})
475
+ fn main(
476
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
477
+ @builtin(local_invocation_index) lane: u32,
478
+ ) {
479
+ let i = folded_workgroup_index(workgroup_id) * ${SCREEN_PROBE_THREAD_WORKGROUP_SIZE}u + lane;
480
+
481
+ var wants = false;
482
+ var position = vec3<f32>(0.0);
483
+ var bias_direction = vec3<f32>(0.0, 0.0, 1.0);
484
+
485
+ if (i < screen_probe_brick_ray_count()) {
486
+ let entry = screen_probe_rays[i];
487
+
488
+ wants = (entry.flags & SCREEN_PROBE_TRACE_KIND_MASK) == SCREEN_PROBE_TRACE_HIT && entry.albedo != 0u;
489
+
490
+ if (wants) {
491
+ let direction = uv_equal_area_sphere_decode(unpack2x16unorm(entry.direction));
492
+ let normal = uv_octahedral_unit_decode(unpack2x16unorm(entry.normal));
493
+ position = screen_probe_picks[entry.ray >> SCREEN_PROBE_RAY_SLOT_BITS].origin.xyz + entry.t * direction;
494
+ // the view back along the ray, as the bounce's pick takes it
495
+ bias_direction = mix(normal, -direction, ${PROBE_RECEIVER_BIAS_VIEW});
496
+ }
497
+ }
498
+
499
+ probe_clipmap_want(wants, position, bias_direction, settings.cascade_count, settings.resolution, settings.anchor, settings.select_half, settings.wanted_capacity);
500
+ }
501
+ `, [
502
+ chunk_screen_probe,
503
+ chunk_screen_probe_counts,
504
+ chunk_folded_workgroup_index,
505
+ chunk_uv_equal_area_sphere,
506
+ chunk_uv_octahedral_unit_decode,
507
+ chunk_probe_clipmap_want,
508
+ ]),
509
+ });
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Settings of the debug view.
3
+ * @type {WebGPUStruct}
4
+ */
5
+ export const SCREEN_PROBE_DEBUG_SETTINGS: WebGPUStruct;
6
+ /**
7
+ * The screen probes' debug views (`ScreenProbeDebugView`), a thread a pixel, in place of the frame's colour:
8
+ *
9
+ * - **IndirectDiffuse**: the frame's diffuse over π, what a white Lambertian surface sends back of it.
10
+ * - **ProbePlacement**: the same, with each probe's pixel and the eight around it marked, uniform green and adaptive
11
+ * red, and the pixels the probes did not cover this frame blue.
12
+ * - **TraceKinds**: over each tile, the shares of its uniform probe's rays the screen resolved (red), the bricks hit
13
+ * (green), and the world-space probes answered past their reach (blue); the environment's share is left dark.
14
+ *
15
+ * @type {ComputeShader}
16
+ */
17
+ export const shader_screen_probe_debug: ComputeShader;
18
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
19
+ import { ComputeShader } from "../../shader/ComputeShader.js";
20
+ //# sourceMappingURL=shader_screen_probe_debug.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_screen_probe_debug.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/global_illumination/screen_probe/shader_screen_probe_debug.js"],"names":[],"mappings":"AAoBA;;;GAGG;AACH,0CAFU,YAAY,CAKS;AAiB/B;;;;;;;;;;GAUG;AACH,wCAFU,aAAa,CA0EpB;6BAzH0B,mCAAmC;8BAJlC,+BAA+B"}
@@ -0,0 +1,128 @@
1
+ import { chunk_is_background } from "../../shader/chunk/depth/chunk_is_background.js";
2
+ import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
3
+ import { ComputeShader } from "../../shader/ComputeShader.js";
4
+ import { ShaderResourceDescriptor } from "../../shader/resource/ShaderResourceDescriptor.js";
5
+ import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
6
+ import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
7
+ import { WebGPUStruct } from "../../shader/type/WebGPUStruct.js";
8
+ import {
9
+ chunk_screen_probe,
10
+ SCREEN_PROBE_FRAME_RESOURCE,
11
+ SCREEN_PROBE_TILE_COUNTS_READ_RESOURCE,
12
+ SCREEN_PROBE_TILE_PROBES_READ_RESOURCE,
13
+ SCREEN_PROBE_TRACE_HIT_READ_RESOURCE,
14
+ SCREEN_PROBES_READ_RESOURCE
15
+ } from "./chunk_screen_probe.js";
16
+ import { SCREEN_PROBE_DEPTH_RESOURCE } from "./chunk_screen_probe_surface.js";
17
+ import { SCREEN_PROBE_INTEGRATED_READ_RESOURCE } from "./shader_screen_probe_resolve.js";
18
+ import { ScreenProbeDebugView } from "./ScreenProbeDebugView.js";
19
+ import { SCREEN_PROBE_TILE_WORKGROUP_SIZE } from "./SCREEN_PROBE.js";
20
+
21
+ /**
22
+ * Settings of the debug view.
23
+ * @type {WebGPUStruct}
24
+ */
25
+ export const SCREEN_PROBE_DEBUG_SETTINGS = WebGPUStruct.from({
26
+ /** the view, `ScreenProbeDebugView` */
27
+ view: u32,
28
+ }, "ScreenProbeDebugSettings");
29
+
30
+ const resources = new ShaderResourceSetDescriptor();
31
+
32
+ resources.setImmediate("settings", SCREEN_PROBE_DEBUG_SETTINGS);
33
+
34
+ resources.createGroup()
35
+ .add(SCREEN_PROBE_FRAME_RESOURCE)
36
+ .add(SCREEN_PROBES_READ_RESOURCE)
37
+ .add(SCREEN_PROBE_TILE_COUNTS_READ_RESOURCE)
38
+ .add(SCREEN_PROBE_TILE_PROBES_READ_RESOURCE)
39
+ .add(SCREEN_PROBE_DEPTH_RESOURCE)
40
+ .add(SCREEN_PROBE_INTEGRATED_READ_RESOURCE)
41
+ .add(SCREEN_PROBE_TRACE_HIT_READ_RESOURCE)
42
+ .add(ShaderResourceDescriptor.texture("screen_probe_debug_diffuse", "unfilterable-float"))
43
+ .add(ShaderResourceDescriptor.storageTexture("screen_probe_debug_out", "rgba16float", "2d", "write-only"));
44
+
45
+ /**
46
+ * The screen probes' debug views (`ScreenProbeDebugView`), a thread a pixel, in place of the frame's colour:
47
+ *
48
+ * - **IndirectDiffuse**: the frame's diffuse over π, what a white Lambertian surface sends back of it.
49
+ * - **ProbePlacement**: the same, with each probe's pixel and the eight around it marked, uniform green and adaptive
50
+ * red, and the pixels the probes did not cover this frame blue.
51
+ * - **TraceKinds**: over each tile, the shares of its uniform probe's rays the screen resolved (red), the bricks hit
52
+ * (green), and the world-space probes answered past their reach (blue); the environment's share is left dark.
53
+ *
54
+ * @type {ComputeShader}
55
+ */
56
+ export const shader_screen_probe_debug = ComputeShader.from({
57
+ label: "Screen Probe Debug",
58
+ resources,
59
+ body: CodeChunk.from(
60
+ //language=WGSL
61
+ `
62
+ fn screen_probe_debug_marks(pixel: vec2<u32>, probe: u32) -> bool {
63
+ let at = vec2<i32>(screen_probe_pixel_decode(screen_probes[probe].pixel));
64
+ let gap = abs(at - vec2<i32>(pixel));
65
+
66
+ return screen_probes[probe].depth > 0.0 && all(gap <= vec2<i32>(1));
67
+ }
68
+
69
+ @compute @workgroup_size(${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, ${SCREEN_PROBE_TILE_WORKGROUP_SIZE}, 1)
70
+ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
71
+ let frame = screen_probe_frame;
72
+
73
+ if (any(id.xy >= frame.view_size)) {
74
+ return;
75
+ }
76
+
77
+ let pixel = id.xy;
78
+
79
+ if (is_background(textureLoad(tDepth, pixel, 0).r)) {
80
+ textureStore(screen_probe_debug_out, pixel, vec4<f32>(0.0, 0.0, 0.0, 1.0));
81
+ return;
82
+ }
83
+
84
+ let diffuse = textureLoad(screen_probe_debug_diffuse, pixel, 0).rgb * 0.3183098861837907;
85
+ let tile = min((max(vec2<i32>(pixel) - vec2<i32>(frame.jitter), vec2<i32>(0)) >> vec2<u32>(frame.downsample_shift)), vec2<i32>(frame.tile_count) - 1);
86
+ let tile_index = u32(tile.y) * frame.tile_count.x + u32(tile.x);
87
+
88
+ var color = diffuse;
89
+
90
+ if (settings.view == ${ScreenProbeDebugView.ProbePlacement}u) {
91
+ if (textureLoad(screen_probe_integrated, pixel, 0).a < 0.0) {
92
+ color = vec3<f32>(0.0, 0.0, 1.0);
93
+ }
94
+
95
+ if (screen_probe_debug_marks(pixel, tile_index)) {
96
+ color = vec3<f32>(0.0, 1.0, 0.0);
97
+ }
98
+
99
+ let count = min(screen_probe_tile_counts[tile_index], frame.adaptive_tile_capacity);
100
+
101
+ for (var i = 0u; i < count; i++) {
102
+ if (screen_probe_debug_marks(pixel, frame.uniform_count + screen_probe_tile_probes[tile_index * frame.adaptive_tile_capacity + i])) {
103
+ color = vec3<f32>(1.0, 0.0, 0.0);
104
+ }
105
+ }
106
+ } else if (settings.view == ${ScreenProbeDebugView.TraceKinds}u) {
107
+ let n = frame.octahedron_resolution;
108
+
109
+ var kinds = vec3<f32>(0.0);
110
+
111
+ for (var slot = 0u; slot < n * n; slot++) {
112
+ let kind = screen_probe_trace_hit_kind(textureLoad(screen_probe_trace_hit, screen_probe_texel(tile_index, slot), 0).r);
113
+
114
+ kinds += select(vec3<f32>(0.0), vec3<f32>(1.0, 0.0, 0.0), kind == SCREEN_PROBE_TRACE_SCREEN);
115
+ kinds += select(vec3<f32>(0.0), vec3<f32>(0.0, 1.0, 0.0), kind == SCREEN_PROBE_TRACE_HIT || kind == SCREEN_PROBE_TRACE_BACK);
116
+ kinds += select(vec3<f32>(0.0), vec3<f32>(0.0, 0.0, 1.0), kind == SCREEN_PROBE_TRACE_FAR);
117
+ }
118
+
119
+ color = kinds / f32(n * n);
120
+ }
121
+
122
+ textureStore(screen_probe_debug_out, pixel, vec4<f32>(color, 1.0));
123
+ }
124
+ `, [
125
+ chunk_screen_probe,
126
+ chunk_is_background,
127
+ ]),
128
+ });