@woosh/meep-engine 3.11.2 → 3.12.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 (551) hide show
  1. package/README.md +14 -18
  2. package/build/bundle-worker-terrain.js +1 -1
  3. package/editor/SelectionVisualizer.js +127 -127
  4. package/editor/entity_world_bounds.js +27 -27
  5. package/editor/particles/rebuildParticleEmitter.js +31 -31
  6. package/editor/process/SymbolicDisplayProcess.js +1 -1
  7. package/editor/process/symbolic/CameraSymbolicDisplay.js +146 -146
  8. package/editor/process/symbolic/LightSymbolicDisplay.js +172 -172
  9. package/editor/prototypeEditorShell.js +156 -156
  10. package/editor/selection/editor_pick.js +130 -130
  11. package/editor/selection/screen_rect_frustum.js +119 -119
  12. package/editor/tools/v2/TransformControls.js +971 -971
  13. package/package.json +1 -1
  14. package/src/engine/Engine.d.ts +3 -3
  15. package/src/engine/Engine.d.ts.map +1 -1
  16. package/src/engine/Engine.js +726 -726
  17. package/src/engine/EngineHarness.d.ts +1 -1
  18. package/src/engine/EngineHarness.js +590 -590
  19. package/src/engine/ecs/HIERARCHY_REVIEW.md +717 -717
  20. package/src/engine/ecs/terrain/ecs/BuildLightTexture.d.ts +1 -1
  21. package/src/engine/ecs/terrain/ecs/BuildLightTexture.js +27 -27
  22. package/src/engine/ecs/terrain/ecs/Terrain.d.ts +1 -5
  23. package/src/engine/ecs/terrain/ecs/Terrain.d.ts.map +1 -1
  24. package/src/engine/ecs/terrain/ecs/Terrain.js +790 -790
  25. package/src/engine/ecs/terrain/util/loadVisibleTerrainTiles.js +129 -129
  26. package/src/engine/graphics/ecs/camera/camera_find_active.d.ts +1 -1
  27. package/src/engine/graphics/ecs/camera/camera_find_active.js +28 -28
  28. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +1 -1
  29. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +428 -428
  30. package/src/engine/graphics/ecs/water/Water.d.ts +1 -1
  31. package/src/engine/graphics/ecs/water/Water.js +104 -104
  32. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.d.ts +1 -1
  33. package/src/engine/graphics/particles/particular/engine/emitter/ParticleEmitter.js +1 -1
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts +65 -0
  35. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -0
  36. package/src/engine/graphics3/AnimationGraphSystem.js +329 -0
  37. package/src/engine/graphics3/AnimationGraphSystem3.d.ts +6 -61
  38. package/src/engine/graphics3/AnimationGraphSystem3.d.ts.map +1 -1
  39. package/src/engine/graphics3/AnimationGraphSystem3.js +6 -325
  40. package/src/engine/graphics3/AnimationSystem.d.ts +76 -0
  41. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -0
  42. package/src/engine/graphics3/AnimationSystem.js +352 -0
  43. package/src/engine/graphics3/AnimationSystem3.d.ts +6 -72
  44. package/src/engine/graphics3/AnimationSystem3.d.ts.map +1 -1
  45. package/src/engine/graphics3/AnimationSystem3.js +6 -348
  46. package/src/engine/graphics3/CameraSystem.d.ts +49 -0
  47. package/src/engine/graphics3/CameraSystem.d.ts.map +1 -0
  48. package/src/engine/graphics3/CameraSystem.js +170 -0
  49. package/src/engine/graphics3/CameraSystem3.d.ts +6 -45
  50. package/src/engine/graphics3/CameraSystem3.d.ts.map +1 -1
  51. package/src/engine/graphics3/CameraSystem3.js +6 -166
  52. package/src/engine/graphics3/DebugDrawSystem.d.ts +72 -0
  53. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -0
  54. package/src/engine/graphics3/DebugDrawSystem.js +205 -0
  55. package/src/engine/graphics3/DebugDrawSystem3.d.ts +6 -68
  56. package/src/engine/graphics3/DebugDrawSystem3.d.ts.map +1 -1
  57. package/src/engine/graphics3/DebugDrawSystem3.js +6 -201
  58. package/src/engine/graphics3/DecalSystem.d.ts +81 -0
  59. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -0
  60. package/src/engine/graphics3/DecalSystem.js +441 -0
  61. package/src/engine/graphics3/DecalSystem3.d.ts +6 -77
  62. package/src/engine/graphics3/DecalSystem3.d.ts.map +1 -1
  63. package/src/engine/graphics3/DecalSystem3.js +6 -437
  64. package/src/engine/graphics3/FogOfWarSystem.d.ts +74 -0
  65. package/src/engine/graphics3/FogOfWarSystem.d.ts.map +1 -0
  66. package/src/engine/graphics3/FogOfWarSystem.js +265 -0
  67. package/src/engine/graphics3/FogOfWarSystem3.d.ts +6 -70
  68. package/src/engine/graphics3/FogOfWarSystem3.d.ts.map +1 -1
  69. package/src/engine/graphics3/FogOfWarSystem3.js +6 -261
  70. package/src/engine/graphics3/GraphicsEngine.d.ts +340 -0
  71. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -0
  72. package/src/engine/graphics3/GraphicsEngine.js +790 -0
  73. package/src/engine/graphics3/GraphicsEngine3.d.ts +6 -336
  74. package/src/engine/graphics3/GraphicsEngine3.d.ts.map +1 -1
  75. package/src/engine/graphics3/GraphicsEngine3.js +6 -786
  76. package/src/engine/graphics3/HighlightSystem.d.ts +82 -0
  77. package/src/engine/graphics3/HighlightSystem.d.ts.map +1 -0
  78. package/src/engine/graphics3/HighlightSystem.js +241 -0
  79. package/src/engine/graphics3/HighlightSystem3.d.ts +6 -78
  80. package/src/engine/graphics3/HighlightSystem3.d.ts.map +1 -1
  81. package/src/engine/graphics3/HighlightSystem3.js +6 -237
  82. package/src/engine/graphics3/LightSystem.d.ts +40 -0
  83. package/src/engine/graphics3/LightSystem.d.ts.map +1 -0
  84. package/src/engine/graphics3/LightSystem.js +211 -0
  85. package/src/engine/graphics3/LightSystem3.d.ts +6 -36
  86. package/src/engine/graphics3/LightSystem3.d.ts.map +1 -1
  87. package/src/engine/graphics3/LightSystem3.js +6 -207
  88. package/src/engine/graphics3/MeshSystem.d.ts +106 -0
  89. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -0
  90. package/src/engine/graphics3/MeshSystem.js +647 -0
  91. package/src/engine/graphics3/MeshSystem3.d.ts +6 -102
  92. package/src/engine/graphics3/MeshSystem3.d.ts.map +1 -1
  93. package/src/engine/graphics3/MeshSystem3.js +6 -642
  94. package/src/engine/graphics3/ParticipatingMedia.d.ts +2 -2
  95. package/src/engine/graphics3/ParticipatingMedia.js +203 -203
  96. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts +87 -0
  97. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -0
  98. package/src/engine/graphics3/ParticipatingMediaSystem.js +184 -0
  99. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts +6 -83
  100. package/src/engine/graphics3/ParticipatingMediaSystem3.d.ts.map +1 -1
  101. package/src/engine/graphics3/ParticipatingMediaSystem3.js +6 -180
  102. package/src/engine/graphics3/ParticleEmitterSystem.d.ts +76 -0
  103. package/src/engine/graphics3/ParticleEmitterSystem.d.ts.map +1 -0
  104. package/src/engine/graphics3/ParticleEmitterSystem.js +289 -0
  105. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts +6 -72
  106. package/src/engine/graphics3/ParticleEmitterSystem3.d.ts.map +1 -1
  107. package/src/engine/graphics3/ParticleEmitterSystem3.js +6 -285
  108. package/src/engine/graphics3/PathDisplaySystem.d.ts +70 -0
  109. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -0
  110. package/src/engine/graphics3/PathDisplaySystem.js +309 -0
  111. package/src/engine/graphics3/PathDisplaySystem3.d.ts +6 -66
  112. package/src/engine/graphics3/PathDisplaySystem3.d.ts.map +1 -1
  113. package/src/engine/graphics3/PathDisplaySystem3.js +6 -305
  114. package/src/engine/graphics3/Pickable.d.ts +1 -1
  115. package/src/engine/graphics3/Pickable.js +65 -65
  116. package/src/engine/graphics3/PickingQuery.d.ts +1 -1
  117. package/src/engine/graphics3/PickingQuery.js +48 -48
  118. package/src/engine/graphics3/PickingSystem.d.ts +67 -0
  119. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -0
  120. package/src/engine/graphics3/PickingSystem.js +273 -0
  121. package/src/engine/graphics3/PickingSystem3.d.ts +6 -63
  122. package/src/engine/graphics3/PickingSystem3.d.ts.map +1 -1
  123. package/src/engine/graphics3/PickingSystem3.js +6 -269
  124. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +47 -0
  125. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -0
  126. package/src/engine/graphics3/ShadedGeometrySystem.js +169 -0
  127. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts +6 -43
  128. package/src/engine/graphics3/ShadedGeometrySystem3.d.ts.map +1 -1
  129. package/src/engine/graphics3/ShadedGeometrySystem3.js +6 -165
  130. package/src/engine/graphics3/TerrainSystem.d.ts +80 -0
  131. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -0
  132. package/src/engine/graphics3/TerrainSystem.js +566 -0
  133. package/src/engine/graphics3/TerrainSystem3.d.ts +6 -76
  134. package/src/engine/graphics3/TerrainSystem3.d.ts.map +1 -1
  135. package/src/engine/graphics3/TerrainSystem3.js +6 -562
  136. package/src/engine/graphics3/TooltipComponentSystem.d.ts +65 -0
  137. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -0
  138. package/src/engine/graphics3/TooltipComponentSystem.js +328 -0
  139. package/src/engine/graphics3/TooltipComponentSystem3.d.ts +6 -61
  140. package/src/engine/graphics3/TooltipComponentSystem3.d.ts.map +1 -1
  141. package/src/engine/graphics3/TooltipComponentSystem3.js +6 -324
  142. package/src/engine/graphics3/Trail3DSystem.d.ts +73 -0
  143. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -0
  144. package/src/engine/graphics3/Trail3DSystem.js +221 -0
  145. package/src/engine/graphics3/Trail3DSystem3.d.ts +6 -69
  146. package/src/engine/graphics3/Trail3DSystem3.d.ts.map +1 -1
  147. package/src/engine/graphics3/Trail3DSystem3.js +6 -217
  148. package/src/engine/graphics3/VolumetricLightMap.d.ts +2 -2
  149. package/src/engine/graphics3/VolumetricLightMap.js +2 -2
  150. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts +98 -0
  151. package/src/engine/graphics3/VolumetricLightMapSystem.d.ts.map +1 -0
  152. package/src/engine/graphics3/VolumetricLightMapSystem.js +261 -0
  153. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts +6 -94
  154. package/src/engine/graphics3/VolumetricLightMapSystem3.d.ts.map +1 -1
  155. package/src/engine/graphics3/VolumetricLightMapSystem3.js +10 -261
  156. package/src/engine/graphics3/WaterSystem.d.ts +59 -0
  157. package/src/engine/graphics3/WaterSystem.d.ts.map +1 -0
  158. package/src/engine/graphics3/WaterSystem.js +293 -0
  159. package/src/engine/graphics3/WaterSystem3.d.ts +6 -55
  160. package/src/engine/graphics3/WaterSystem3.d.ts.map +1 -1
  161. package/src/engine/graphics3/WaterSystem3.js +6 -289
  162. package/src/engine/graphics3/animation/AnimationGraphController.d.ts +1 -1
  163. package/src/engine/graphics3/animation/AnimationGraphController.js +518 -518
  164. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +1 -1
  165. package/src/engine/graphics3/animation/ClipListPlayer.js +263 -263
  166. package/src/engine/graphics3/animation/ClipPlayback.d.ts +2 -2
  167. package/src/engine/graphics3/animation/ClipPlayback.js +84 -84
  168. package/src/engine/graphics3/decal/graph_build_decal_clusters.d.ts.map +1 -1
  169. package/src/engine/graphics3/decal/graph_build_decal_clusters.js +6 -8
  170. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts +0 -7
  171. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  172. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +1 -1
  173. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts +0 -4
  174. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  175. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +1 -1
  176. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +2 -2
  177. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  178. package/src/engine/graphics3/highlight/pack_highlight_table.js +74 -74
  179. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +1 -1
  180. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +101 -101
  181. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts +3 -3
  182. package/src/engine/graphics3/preview/make_model_thumbnail.d.ts.map +1 -1
  183. package/src/engine/graphics3/preview/make_model_thumbnail.js +48 -48
  184. package/src/engine/graphics3/shade_camera_projection_ray.d.ts +1 -1
  185. package/src/engine/graphics3/shade_camera_projection_ray.js +77 -77
  186. package/src/engine/graphics3/shade_node_to_entity_composition.d.ts +1 -1
  187. package/src/engine/graphics3/shade_node_to_entity_composition.js +84 -84
  188. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts +16 -2
  189. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.d.ts.map +1 -1
  190. package/src/shade/descriptor/pipeline/PipelineLayoutDescriptor.js +28 -4
  191. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +1 -1
  192. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
  193. package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +5 -2
  194. package/src/shade/device/IMMEDIATE_DATA_PLAN_2026_08_28.md +564 -451
  195. package/src/shade/device/ShadeGPUCommandContext.d.ts +18 -2
  196. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  197. package/src/shade/device/ShadeGPUCommandContext.js +994 -940
  198. package/src/shade/device/immediate_data_supported.d.ts +33 -0
  199. package/src/shade/device/immediate_data_supported.d.ts.map +1 -0
  200. package/src/shade/device/immediate_data_supported.js +53 -0
  201. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts +18 -0
  202. package/src/shade/device/mock/SoftwareGPUCommandEncoder.d.ts.map +1 -1
  203. package/src/shade/device/mock/SoftwareGPUCommandEncoder.js +24 -0
  204. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts +7 -0
  205. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.d.ts.map +1 -1
  206. package/src/shade/device/mock/SoftwareGPUComputePassEncoder.js +49 -1
  207. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  208. package/src/shade/device/mock/SoftwareGPUDevice.js +20 -2
  209. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts +65 -0
  210. package/src/shade/device/mock/SoftwareGPUImmediateData.d.ts.map +1 -0
  211. package/src/shade/device/mock/SoftwareGPUImmediateData.js +160 -0
  212. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts +7 -0
  213. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.d.ts.map +1 -1
  214. package/src/shade/device/mock/SoftwareGPURenderPassEncoder.js +50 -0
  215. package/src/shade/device/mock/pipeline_immediate_size.d.ts +11 -0
  216. package/src/shade/device/mock/pipeline_immediate_size.d.ts.map +1 -0
  217. package/src/shade/device/mock/pipeline_immediate_size.js +18 -0
  218. package/src/shade/device/pipeline/PipelineLayoutManager.d.ts.map +1 -1
  219. package/src/shade/device/pipeline/PipelineLayoutManager.js +1 -0
  220. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +0 -1
  222. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +0 -1
  224. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
  225. package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +133 -134
  226. package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +202 -202
  227. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +249 -249
  228. package/src/shade/renderer/GraphicsContext.d.ts +9 -2
  229. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  230. package/src/shade/renderer/GraphicsContext.js +13 -1
  231. package/src/shade/renderer/STATIC_GRAPHICS_ENGINE_ASSETS.js +1 -1
  232. package/src/shade/renderer/animation/pose/PosePlayback.d.ts +2 -1
  233. package/src/shade/renderer/animation/pose/PosePlayback.d.ts.map +1 -1
  234. package/src/shade/renderer/animation/pose/PosePlayback.js +2 -1
  235. package/src/shade/renderer/animation/shader_animation_apply.d.ts.map +1 -1
  236. package/src/shade/renderer/animation/shader_animation_apply.js +128 -129
  237. package/src/shade/renderer/animation/shader_animation_pose_resolve.d.ts.map +1 -1
  238. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +176 -177
  239. package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
  240. package/src/shade/renderer/animation/shader_animation_tick.js +125 -126
  241. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
  242. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +98 -99
  243. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
  244. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +212 -213
  245. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
  246. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +120 -121
  247. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
  248. package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +75 -76
  249. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  250. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +371 -372
  251. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.d.ts.map +1 -1
  252. package/src/shade/renderer/animation/skinning/shader_skin_matrix_prep.js +104 -105
  253. package/src/shade/renderer/atmosphere/GPUSky.d.ts.map +1 -1
  254. package/src/shade/renderer/atmosphere/GPUSky.js +145 -142
  255. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts +34 -0
  256. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.d.ts.map +1 -0
  257. package/src/shade/renderer/atmosphere/MULTISCATTER_LUT_CONFIG.js +36 -0
  258. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts +20 -0
  259. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.d.ts.map +1 -0
  260. package/src/shade/renderer/atmosphere/SAMPLER_SKY_LUT.js +25 -0
  261. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts +14 -1
  262. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.d.ts.map +1 -1
  263. package/src/shade/renderer/atmosphere/chunk_get_multiscatter_values.js +163 -177
  264. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts +20 -0
  265. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.d.ts.map +1 -0
  266. package/src/shade/renderer/atmosphere/chunk_multiscatter_sample_direction.js +46 -0
  267. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts +11 -1
  268. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.d.ts.map +1 -1
  269. package/src/shade/renderer/atmosphere/chunk_sample_multiscatter_lut.js +57 -27
  270. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts +19 -1
  271. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.d.ts.map +1 -1
  272. package/src/shade/renderer/atmosphere/chunk_sample_transmittance_lut.js +69 -33
  273. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts +13 -0
  274. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.d.ts.map +1 -1
  275. package/src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js +35 -35
  276. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts +13 -0
  277. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.d.ts.map +1 -0
  278. package/src/shade/renderer/atmosphere/chunk_sky_lut_params.js +38 -0
  279. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts +17 -0
  280. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.d.ts.map +1 -0
  281. package/src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js +29 -0
  282. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts +21 -0
  283. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.d.ts.map +1 -0
  284. package/src/shade/renderer/atmosphere/chunk_sky_lut_uv.js +42 -0
  285. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts +2 -2
  286. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.d.ts.map +1 -1
  287. package/src/shade/renderer/atmosphere/shader_multiscatter_lut.js +164 -84
  288. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.d.ts.map +1 -1
  289. package/src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js +215 -204
  290. package/src/shade/renderer/atmosphere/shader_transmittance_lut.d.ts.map +1 -1
  291. package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +79 -67
  292. package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +136 -136
  293. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  294. package/src/shade/renderer/buffer/table/GPUDatabase.js +2 -3
  295. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +319 -319
  296. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +41 -42
  298. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.d.ts.map +1 -1
  299. package/src/shade/renderer/buffer/util/shader_buffer_intra_copy_regions.js +83 -84
  300. package/src/shade/renderer/dynamic/shader_dynamic_mesh.d.ts.map +1 -1
  301. package/src/shade/renderer/dynamic/shader_dynamic_mesh.js +177 -170
  302. package/src/shade/renderer/extension/RENDER_EXTENSION_DESIGN.md +918 -918
  303. package/src/shade/renderer/geometry/bvh/record_blas_refit.js +4 -4
  304. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
  305. package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +121 -122
  306. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +774 -774
  307. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts +1 -1
  308. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
  309. package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +69 -70
  310. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +367 -367
  311. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +184 -184
  312. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +1115 -1115
  313. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
  314. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  315. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +142 -143
  316. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  317. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +0 -1
  318. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
  319. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +140 -141
  320. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
  321. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +0 -1
  322. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
  323. package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +0 -1
  324. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  325. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +191 -198
  326. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts +0 -6
  327. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.d.ts.map +1 -1
  328. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_frustum.js +120 -120
  329. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts +0 -4
  330. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.d.ts.map +1 -1
  331. package/src/shade/renderer/light/cluster/cull/shader_cull_lights_hzb.js +112 -112
  332. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  333. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +10 -9
  334. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts +0 -6
  335. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.d.ts.map +1 -1
  336. package/src/shade/renderer/light/cluster/shader_cluster_assign_lights.js +1 -1
  337. package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +222 -222
  338. package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_tile_composit.js +81 -81
  339. package/src/shade/renderer/material/GPUMaterialContext.js +380 -380
  340. package/src/shade/renderer/material/standard/fragment_gbuffer_vt.js +169 -169
  341. package/src/shade/renderer/object_property/shader_object_property_process.d.ts.map +1 -1
  342. package/src/shade/renderer/object_property/shader_object_property_process.js +83 -84
  343. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  344. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +57 -58
  345. package/src/shade/renderer/particles/prototypeParticleSystem.js +2 -3
  346. package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
  347. package/src/shade/renderer/particles/shaders/shader_particle_emit.js +117 -118
  348. package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
  349. package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +77 -79
  350. package/src/shade/renderer/particles/shaders/shader_particle_render.d.ts.map +1 -1
  351. package/src/shade/renderer/particles/shaders/shader_particle_render.js +190 -183
  352. package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
  353. package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +99 -100
  354. package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
  355. package/src/shade/renderer/particles/sort/shader_particle_sort.js +158 -161
  356. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +184 -184
  357. package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +119 -119
  358. package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +3 -4
  359. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  360. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +266 -267
  361. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  362. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +270 -271
  363. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  364. package/src/shade/renderer/postprocess/gtao/GTAO.js +4 -0
  365. package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
  366. package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +68 -69
  367. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.d.ts.map +1 -1
  368. package/src/shade/renderer/postprocess/nss/shader_nss_conv_layer.js +225 -226
  369. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.d.ts.map +1 -1
  370. package/src/shade/renderer/postprocess/nss/shader_nss_extract_feedback.js +49 -50
  371. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  372. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +291 -292
  373. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  374. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +230 -231
  375. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts +16 -2
  376. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.d.ts.map +1 -1
  377. package/src/shade/renderer/postprocess/ssr/reproject/shader_ffx_denoiser_reflections_reproject.js +12 -12
  378. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  379. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +341 -345
  380. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.d.ts.map +1 -1
  381. package/src/shade/renderer/rasterize/bucket/shader_count_meshlets_by_material.js +68 -69
  382. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.d.ts.map +1 -1
  383. package/src/shade/renderer/rasterize/bucket/shader_make_meshlet_indirect_draw_commands_by_material.js +59 -60
  384. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts +0 -2
  385. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.d.ts.map +1 -1
  386. package/src/shade/renderer/rasterize/bucket/shader_read_out_bucket.js +57 -57
  387. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.d.ts.map +1 -1
  388. package/src/shade/renderer/rasterize/bucket/shader_sort_meshlets_by_material.js +64 -65
  389. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  390. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +168 -169
  391. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.d.ts.map +1 -1
  392. package/src/shade/renderer/rasterize/compute/graph_mesh_sphere_cull.js +160 -161
  393. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
  394. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +109 -110
  395. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
  396. package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +115 -116
  397. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.d.ts.map +1 -1
  398. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_classify_bucket.js +139 -140
  399. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.d.ts.map +1 -1
  400. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_count_by_rasterization_bucket.js +91 -92
  401. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.d.ts.map +1 -1
  402. package/src/shade/renderer/rasterize/expand/bucket/mesh/shader_instances_rasterization_bucket_sort.js +88 -89
  403. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.d.ts.map +1 -1
  404. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_count_by_rasterization_bucket.js +90 -91
  405. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
  406. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +65 -66
  407. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.d.ts.map +1 -1
  408. package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_rasterization_bucket_sort.js +89 -90
  409. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  410. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +169 -170
  411. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  412. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +7 -3
  413. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.d.ts.map +1 -1
  414. package/src/shade/renderer/rasterize/expand/mesh/shader_mesh_expand_to_meshlets_prefix.js +89 -90
  415. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.d.ts.map +1 -1
  416. package/src/shade/renderer/rasterize/expand/mesh/shader_meshes_to_meshlet_counts.js +61 -62
  417. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.d.ts.map +1 -1
  418. package/src/shade/renderer/rasterize/expand/pass1/filter_meshlets.2-way.compute.js +153 -154
  419. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.d.ts.map +1 -1
  420. package/src/shade/renderer/rasterize/fast/graph_extract_meshes_from_bucket.js +77 -81
  421. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_alpha_tested_pass_descriptor.js +144 -144
  422. package/src/shade/renderer/rasterize/native/depth/shadow_rasterization_pass_descriptor.js +88 -88
  423. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +217 -217
  424. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +179 -179
  425. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +178 -178
  426. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +194 -194
  427. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +76 -76
  428. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +5 -1
  430. package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
  431. package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +136 -137
  432. package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
  433. package/src/shade/renderer/restir/di/shader_restir_di_resample.js +129 -130
  434. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  435. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +99 -100
  436. package/src/shade/renderer/restir/di/shader_restir_di_spatial.d.ts.map +1 -1
  437. package/src/shade/renderer/restir/di/shader_restir_di_spatial.js +116 -117
  438. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +383 -383
  439. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy_naive.js +123 -123
  440. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.d.ts.map +1 -1
  441. package/src/shade/renderer/scene/hierarchy/shader_nodes_record_input_positions.js +64 -65
  442. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy.js +372 -373
  444. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.d.ts.map +1 -1
  445. package/src/shade/renderer/scene/hierarchy/shader_nodes_update_transform_hierarchy_naive.js +111 -112
  446. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +0 -1
  448. package/src/shade/renderer/shader/ComputeShader.d.ts +24 -3
  449. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  450. package/src/shade/renderer/shader/ComputeShader.js +350 -292
  451. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  452. package/src/shade/renderer/shader/ImageShader.js +217 -214
  453. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +5 -0
  454. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  455. package/src/shade/renderer/shader/ShaderDescriptor.js +46 -0
  456. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts +18 -0
  457. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.d.ts.map +1 -0
  458. package/src/shade/renderer/shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js +32 -0
  459. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts +7 -0
  460. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.d.ts.map +1 -1
  461. package/src/shade/renderer/shader/chunk/atmosphere/PLANET_CENTER_DECLARATION.js +17 -6
  462. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts +21 -0
  463. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.d.ts.map +1 -0
  464. package/src/shade/renderer/shader/chunk/atmosphere/chunk_atmosphere_ray_bounds.js +69 -0
  465. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts +9 -0
  466. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.d.ts.map +1 -0
  467. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_contains_aabb3.js +22 -0
  468. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts +16 -0
  469. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.d.ts.map +1 -0
  470. package/src/shade/renderer/shader/chunk/geometry/aabb3/chunk_aabb3_from_transformed_corners.js +41 -0
  471. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts +11 -0
  472. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.d.ts.map +1 -1
  473. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_m4.js +15 -19
  474. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts +23 -0
  475. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.d.ts.map +1 -0
  476. package/src/shade/renderer/shader/chunk/geometry/frustum/chunk_frustum_transform_plane_matrix.js +44 -0
  477. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/geometry/octahedron/chunk_uv_octahedral_unit_decode.js +1 -4
  479. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +7 -1
  480. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  481. package/src/shade/renderer/shader/compiler/CodeChunk.js +37 -2
  482. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.d.ts.map +1 -1
  483. package/src/shade/renderer/shader/graph/compute/compute_binding_read_names.js +6 -0
  484. package/src/shade/renderer/shader/graph/compute/graph_compute_indirect_pass.js +1 -1
  485. package/src/shade/renderer/shader/graph/compute/graph_compute_pass.js +1 -1
  486. package/src/shade/renderer/shader/graph/graph_image_pass.js +1 -1
  487. package/src/shade/renderer/shader/graph/graph_prepare_bindings.d.ts.map +1 -1
  488. package/src/shade/renderer/shader/graph/graph_prepare_bindings.js +7 -0
  489. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts +3 -1
  490. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.d.ts.map +1 -1
  491. package/src/shade/renderer/shader/graph/graph_prepare_pass_input_data.js +12 -1
  492. package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
  493. package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +1 -0
  494. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts +21 -0
  495. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.d.ts.map +1 -0
  496. package/src/shade/renderer/shader/resource/IMMEDIATE_DATA.js +21 -0
  497. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts +59 -1
  498. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
  499. package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +195 -2
  500. package/src/shade/renderer/shader/type/type_has_arrays.d.ts +14 -0
  501. package/src/shade/renderer/shader/type/type_has_arrays.d.ts.map +1 -0
  502. package/src/shade/renderer/shader/type/type_has_arrays.js +33 -0
  503. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts +47 -0
  504. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.d.ts.map +1 -0
  505. package/src/shade/renderer/shader/util/compute_infer_workgroup_size_from_source.js +448 -0
  506. package/src/shade/renderer/shadow/map/csm/graph_csm_setup_cascades.js +3 -3
  507. package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +3 -3
  508. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +2 -2
  509. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +4 -4
  510. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
  511. package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +231 -232
  512. package/src/shade/renderer/view/GPUViewSkyContext.d.ts.map +1 -1
  513. package/src/shade/renderer/view/GPUViewSkyContext.js +169 -173
  514. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +1 -1
  515. package/src/shade/renderer/volumetrics/NOTES.md +238 -0
  516. package/src/shade/renderer/volumetrics/chunk_volumetrics_local_light_shadow.js +145 -145
  517. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.d.ts.map +1 -1
  518. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_optical_depth.js +38 -15
  519. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +14 -2
  520. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  521. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +591 -577
  522. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts +17 -0
  523. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.d.ts.map +1 -1
  524. package/src/shade/renderer/volumetrics/shader_volumetrics_build_lighting.js +20 -2
  525. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  526. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +29 -18
  527. package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +260 -260
  528. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts +53 -3
  529. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
  530. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +175 -59
  531. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts +0 -2
  532. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.d.ts.map +1 -1
  533. package/src/shade/renderer/volumetrics/taa/shader_volumetrics_taa.js +17 -6
  534. package/src/shade/renderer/water/shader_water.js +246 -246
  535. package/src/shade/vitest.setup.mjs +1 -1
  536. package/src/shade/wgsl/emulator/ComputeShaderEmulator.js +291 -291
  537. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +8 -1
  538. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  539. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +1325 -1297
  540. package/src/view/minimap/Minimap.d.ts +2 -2
  541. package/src/view/minimap/Minimap.d.ts.map +1 -1
  542. package/src/view/minimap/Minimap.js +225 -225
  543. package/src/view/minimap/dom/MinimapCameraView.d.ts +3 -3
  544. package/src/view/minimap/dom/MinimapCameraView.d.ts.map +1 -1
  545. package/src/view/minimap/dom/MinimapCameraView.js +206 -206
  546. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts +0 -3
  547. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.d.ts.map +0 -1
  548. package/src/shade/renderer/shadow/map/csm/shader/shader_setup_cascades.js +0 -20
  549. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts +0 -2
  550. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.d.ts.map +0 -1
  551. package/src/shade/renderer/volumetrics/VOLUMETRICS_WORKGROUP_RESOLUTION.js +0 -1
@@ -1,33 +1,69 @@
1
- import {
2
- chunk_texture_sample_bilinear_uv
3
- } from "../shader/chunk/texture/sample/chunk_texture_sample_bilinear_uv.js";
4
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
5
- import { chunk_sky_lut_compute_uv } from "./chunk_sky_lut_compute_uv.js";
6
-
7
- /**
8
- * Assumes following in the context:
9
- * tSkyLutTransmittance: texture_2d<f32>
10
- *
11
- * see {@link shader_transmittance_lut}
12
- * @type {CodeChunk}
13
- */
14
- export const chunk_sample_transmittance_lut = CodeChunk.from(
15
- //language=WGSL
16
- `
17
- fn sample_transmittance_lut(
18
- pos: vec3<f32>,
19
- sunDir: vec3<f32>
20
- ) -> vec3<f32>{
21
-
22
- let uv = sky_lut_compute_uv(pos, sunDir);
23
-
24
- return texture_sample_bilinear_uv(tSkyLutTransmittance, uv, 0).rgb;
25
-
26
- }
27
- `,
28
- [
29
- chunk_texture_sample_bilinear_uv,
30
- chunk_sky_lut_compute_uv,
31
- ]
32
- );
33
-
1
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
2
+ import { chunk_sky_lut_params } from "./chunk_sky_lut_params.js";
3
+ import { chunk_sky_lut_uv } from "./chunk_sky_lut_uv.js";
4
+
5
+ /**
6
+ * Assumes following in the context:
7
+ * tSkyLutTransmittance: texture_2d<f32> (sample type "float", i.e. filterable)
8
+ * sSkyLut: sampler (see {@link SAMPLER_SKY_LUT})
9
+ *
10
+ * The LUT is rgba16float, which is filterable in core WebGPU -- only the 32-bit float
11
+ * formats need the `float32-filterable` feature -- so this goes through the texture unit
12
+ * rather than the 4-tap `texture_sample_bilinear_uv`. Clamp-to-edge on the sampler
13
+ * reproduces that function's per-corner clamping.
14
+ *
15
+ * The half-texel inset {@link chunk_sky_lut_uv} applies needs the LUT's resolution, which is
16
+ * read from the binding rather than passed in: the texture is the authority on its own size,
17
+ * and a caller cannot get it wrong.
18
+ *
19
+ * see {@link shader_transmittance_lut}
20
+ * @type {CodeChunk}
21
+ */
22
+ export const chunk_sample_transmittance_lut_params = CodeChunk.from(
23
+ //language=WGSL
24
+ `
25
+ fn sample_transmittance_lut_params(
26
+ height: f32,
27
+ sun_cos_zenith_angle: f32
28
+ ) -> vec3<f32>{
29
+
30
+ let uv = sky_lut_uv(
31
+ height,
32
+ sun_cos_zenith_angle,
33
+ vec2<f32>(textureDimensions(tSkyLutTransmittance))
34
+ );
35
+
36
+ return textureSampleLevel(tSkyLutTransmittance, sSkyLut, uv, 0.0).rgb;
37
+
38
+ }
39
+ `, [
40
+ chunk_sky_lut_uv,
41
+ ]
42
+ );
43
+
44
+ /**
45
+ * {@link chunk_sample_transmittance_lut_params} from a world-space position. A ray-march that
46
+ * already knows the altitude and the local up vector should build the pair itself and call
47
+ * the primitive, rather than have this recover them with another square root.
48
+ *
49
+ * @type {CodeChunk}
50
+ */
51
+ export const chunk_sample_transmittance_lut = CodeChunk.from(
52
+ //language=WGSL
53
+ `
54
+ fn sample_transmittance_lut(
55
+ pos: vec3<f32>,
56
+ sunDir: vec3<f32>
57
+ ) -> vec3<f32>{
58
+
59
+ let params = sky_lut_params(pos, sunDir);
60
+
61
+ return sample_transmittance_lut_params(params.x, params.y);
62
+
63
+ }
64
+ `,
65
+ [
66
+ chunk_sample_transmittance_lut_params,
67
+ chunk_sky_lut_params,
68
+ ]
69
+ );
@@ -1,3 +1,16 @@
1
+ /**
2
+ * {@link chunk_sky_lut_uv} straight from a world-space position, for a shader that samples a
3
+ * sky LUT through its own binding rather than through the `sample_*_lut_params` chunks --
4
+ * the volumetrics passes, which bind the same transmittance LUT under a name of their own.
5
+ *
6
+ * `resolution` is the LUT's, and it matters: the half-texel inset is what makes a lookup at
7
+ * either end of the range read a value that was computed there. Pass
8
+ * `vec2<f32>(textureDimensions(...))` of the texture being sampled, not of some other one --
9
+ * the transmittance and multiple-scattering LUTs are different sizes, so one uv cannot serve
10
+ * both.
11
+ *
12
+ * @type {CodeChunk}
13
+ */
1
14
  export const chunk_sky_lut_compute_uv: CodeChunk;
2
15
  import { CodeChunk } from "../shader/compiler/CodeChunk.js";
3
16
  //# sourceMappingURL=chunk_sky_lut_compute_uv.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_sky_lut_compute_uv.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js"],"names":[],"mappings":"AAOA,iDA2BC;0BA7ByB,iCAAiC"}
1
+ {"version":3,"file":"chunk_sky_lut_compute_uv.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_sky_lut_compute_uv.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AACH,uCAFU,SAAS,CAmBlB;0BAlCyB,iCAAiC"}
@@ -1,35 +1,35 @@
1
- import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
2
- import { chunk_atmosphere_height } from "../shader/chunk/atmosphere/chunk_atmosphere_height.js";
3
- import {
4
- chunk_position_relative_to_planet_center
5
- } from "../shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js";
6
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
7
-
8
- export const chunk_sky_lut_compute_uv = CodeChunk.from(
9
- //language=WGSL
10
- `
11
- fn sky_lut_compute_uv(
12
- pos: vec3<f32>,
13
- sunDir: vec3<f32>
14
- ) -> vec2<f32> {
15
- let height = atmosphere_height(pos);
16
-
17
- let up = normalize(
18
- position_relative_to_planet_center(pos)
19
- );
20
-
21
- let sunCosZenithAngle = dot(sunDir, up);
22
-
23
- let uv = vec2(
24
- saturate(0.5 + 0.5*sunCosZenithAngle),
25
- saturate(height/ATMOSPHERE_HEIGHT)
26
- );
27
-
28
- return uv;
29
- }
30
- `, [
31
- chunk_atmosphere_height,
32
- ATMOSPHERE_HEIGHT_DECLARATION,
33
- chunk_position_relative_to_planet_center,
34
- ]
35
- )
1
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
2
+ import { chunk_sky_lut_params } from "./chunk_sky_lut_params.js";
3
+ import { chunk_sky_lut_uv } from "./chunk_sky_lut_uv.js";
4
+
5
+ /**
6
+ * {@link chunk_sky_lut_uv} straight from a world-space position, for a shader that samples a
7
+ * sky LUT through its own binding rather than through the `sample_*_lut_params` chunks --
8
+ * the volumetrics passes, which bind the same transmittance LUT under a name of their own.
9
+ *
10
+ * `resolution` is the LUT's, and it matters: the half-texel inset is what makes a lookup at
11
+ * either end of the range read a value that was computed there. Pass
12
+ * `vec2<f32>(textureDimensions(...))` of the texture being sampled, not of some other one --
13
+ * the transmittance and multiple-scattering LUTs are different sizes, so one uv cannot serve
14
+ * both.
15
+ *
16
+ * @type {CodeChunk}
17
+ */
18
+ export const chunk_sky_lut_compute_uv = CodeChunk.from(
19
+ //language=WGSL
20
+ `
21
+ fn sky_lut_compute_uv(
22
+ pos: vec3<f32>,
23
+ sunDir: vec3<f32>,
24
+ resolution: vec2<f32>
25
+ ) -> vec2<f32> {
26
+
27
+ let params = sky_lut_params(pos, sunDir);
28
+
29
+ return sky_lut_uv(params.x, params.y, resolution);
30
+ }
31
+ `, [
32
+ chunk_sky_lut_params,
33
+ chunk_sky_lut_uv,
34
+ ]
35
+ )
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The pair every sky LUT is addressed by — altitude in `x`, cosine of the sun's zenith angle
3
+ * in `y` — recovered from a world-space position.
4
+ *
5
+ * Costs the square root a ray-march step has usually already paid for: a march that is
6
+ * stepping a planet-relative position should build the pair itself and call the
7
+ * `sample_*_lut_params` primitives directly rather than come through here.
8
+ *
9
+ * @type {CodeChunk}
10
+ */
11
+ export const chunk_sky_lut_params: CodeChunk;
12
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
13
+ //# sourceMappingURL=chunk_sky_lut_params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_sky_lut_params.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_sky_lut_params.js"],"names":[],"mappings":"AAMA;;;;;;;;;GASG;AACH,mCAFU,SAAS,CAuBjB;0BAjCwB,iCAAiC"}
@@ -0,0 +1,38 @@
1
+ import { ATMOSPHERE_RADII_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_RADII_DECLARATION.js";
2
+ import {
3
+ chunk_position_relative_to_planet_center
4
+ } from "../shader/chunk/atmosphere/chunk_position_relative_to_planet_center.js";
5
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
+
7
+ /**
8
+ * The pair every sky LUT is addressed by — altitude in `x`, cosine of the sun's zenith angle
9
+ * in `y` — recovered from a world-space position.
10
+ *
11
+ * Costs the square root a ray-march step has usually already paid for: a march that is
12
+ * stepping a planet-relative position should build the pair itself and call the
13
+ * `sample_*_lut_params` primitives directly rather than come through here.
14
+ *
15
+ * @type {CodeChunk}
16
+ */
17
+ export const chunk_sky_lut_params = CodeChunk.from(
18
+ //language=WGSL
19
+ `
20
+ fn sky_lut_params(
21
+ pos: vec3<f32>,
22
+ sunDir: vec3<f32>
23
+ ) -> vec2<f32> {
24
+
25
+ let rel = position_relative_to_planet_center(pos);
26
+
27
+ let radius = length(rel);
28
+
29
+ return vec2(
30
+ radius - ATMOSPHERE_GROUND_RADIUS,
31
+ dot(sunDir, rel / radius)
32
+ );
33
+ }
34
+ `, [
35
+ chunk_position_relative_to_planet_center,
36
+ ATMOSPHERE_RADII_DECLARATION,
37
+ ]
38
+ );
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Which point of the parameter range a sky LUT texel stands for: the generator's half of the
3
+ * mapping {@link chunk_sky_lut_uv} inverts. Texel 0 carries the bottom of the range and the
4
+ * last texel the top, so a lookup at either end reads a value that was actually computed
5
+ * there rather than one from half a texel inside.
6
+ *
7
+ * `texel` is the integer index, not a texel centre — pass the invocation's own coordinate,
8
+ * not `coord.xy` from a fragment shader.
9
+ *
10
+ * Both components come back in [0,1]; the caller maps them onto the physical ranges (the sun
11
+ * zenith cosine and the altitude).
12
+ *
13
+ * @type {CodeChunk}
14
+ */
15
+ export const chunk_sky_lut_texel_to_unit: CodeChunk;
16
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
17
+ //# sourceMappingURL=chunk_sky_lut_texel_to_unit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_sky_lut_texel_to_unit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_sky_lut_texel_to_unit.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AACH,0CAFU,SAAS,CAcjB;0BA5BwB,iCAAiC"}
@@ -0,0 +1,29 @@
1
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
2
+
3
+ /**
4
+ * Which point of the parameter range a sky LUT texel stands for: the generator's half of the
5
+ * mapping {@link chunk_sky_lut_uv} inverts. Texel 0 carries the bottom of the range and the
6
+ * last texel the top, so a lookup at either end reads a value that was actually computed
7
+ * there rather than one from half a texel inside.
8
+ *
9
+ * `texel` is the integer index, not a texel centre — pass the invocation's own coordinate,
10
+ * not `coord.xy` from a fragment shader.
11
+ *
12
+ * Both components come back in [0,1]; the caller maps them onto the physical ranges (the sun
13
+ * zenith cosine and the altitude).
14
+ *
15
+ * @type {CodeChunk}
16
+ */
17
+ export const chunk_sky_lut_texel_to_unit = CodeChunk.from(
18
+ //language=WGSL
19
+ `
20
+ fn sky_lut_texel_to_unit(
21
+ texel: vec2<f32>,
22
+ resolution: vec2<f32>
23
+ ) -> vec2<f32> {
24
+
25
+ // a one-texel axis has no range to spread: it stands for the bottom of it
26
+ return texel / max(resolution - 1.0, vec2(1.0));
27
+ }
28
+ `
29
+ );
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Parameterisation shared by the transmittance and multiple-scattering LUTs: `x` is the
3
+ * cosine of the sun's zenith angle remapped to [0,1], `y` is the altitude as a fraction of
4
+ * the atmosphere's thickness.
5
+ *
6
+ * The result is a texture coordinate, not the raw parameter pair. A LUT of N texels can only
7
+ * store N samples of a continuous range, and the two ends of that range have to land on the
8
+ * two end texels: without the half-texel inset here, a lookup at altitude zero addresses the
9
+ * texel a generator wrote for the centre of the first row -- 780 m up in the 64-row
10
+ * transmittance LUT, which is a tenth of a Rayleigh scale height. Hillaire spends
11
+ * `fromUnitToSubUvs` / `fromSubUvsToUnit` on the same problem.
12
+ *
13
+ * {@link chunk_sky_lut_texel_to_unit} is the other half, and the two have to agree — a
14
+ * generator that does not use it writes a LUT this addresses wrongly. `sky_lut_uv.spec.js`
15
+ * round-trips them.
16
+ *
17
+ * @type {CodeChunk}
18
+ */
19
+ export const chunk_sky_lut_uv: CodeChunk;
20
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
21
+ //# sourceMappingURL=chunk_sky_lut_uv.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_sky_lut_uv.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/chunk_sky_lut_uv.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH,+BAFU,SAAS,CAsBjB;0BAxCwB,iCAAiC"}
@@ -0,0 +1,42 @@
1
+ import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
2
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
3
+
4
+ /**
5
+ * Parameterisation shared by the transmittance and multiple-scattering LUTs: `x` is the
6
+ * cosine of the sun's zenith angle remapped to [0,1], `y` is the altitude as a fraction of
7
+ * the atmosphere's thickness.
8
+ *
9
+ * The result is a texture coordinate, not the raw parameter pair. A LUT of N texels can only
10
+ * store N samples of a continuous range, and the two ends of that range have to land on the
11
+ * two end texels: without the half-texel inset here, a lookup at altitude zero addresses the
12
+ * texel a generator wrote for the centre of the first row -- 780 m up in the 64-row
13
+ * transmittance LUT, which is a tenth of a Rayleigh scale height. Hillaire spends
14
+ * `fromUnitToSubUvs` / `fromSubUvsToUnit` on the same problem.
15
+ *
16
+ * {@link chunk_sky_lut_texel_to_unit} is the other half, and the two have to agree — a
17
+ * generator that does not use it writes a LUT this addresses wrongly. `sky_lut_uv.spec.js`
18
+ * round-trips them.
19
+ *
20
+ * @type {CodeChunk}
21
+ */
22
+ export const chunk_sky_lut_uv = CodeChunk.from(
23
+ //language=WGSL
24
+ `
25
+ fn sky_lut_uv(
26
+ height: f32,
27
+ sun_cos_zenith_angle: f32,
28
+ resolution: vec2<f32>
29
+ ) -> vec2<f32> {
30
+
31
+ let unit = vec2(
32
+ saturate(0.5 + 0.5 * sun_cos_zenith_angle),
33
+ saturate(height / ATMOSPHERE_HEIGHT)
34
+ );
35
+
36
+ // unit 0 lands on the centre of texel 0, unit 1 on the centre of the last one
37
+ return (unit * (resolution - 1.0) + 0.5) / resolution;
38
+ }
39
+ `, [
40
+ ATMOSPHERE_HEIGHT_DECLARATION,
41
+ ]
42
+ );
@@ -1,3 +1,3 @@
1
- export const shader_multiscatter_lut: ImageShader;
2
- import { ImageShader } from "../shader/ImageShader.js";
1
+ export const shader_multiscatter_lut: ComputeShader;
2
+ import { ComputeShader } from "../shader/ComputeShader.js";
3
3
  //# sourceMappingURL=shader_multiscatter_lut.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shader_multiscatter_lut.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/shader_multiscatter_lut.js"],"names":[],"mappings":"AAwEA,kDAWG;4BA9EyB,0BAA0B"}
1
+ {"version":3,"file":"shader_multiscatter_lut.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/shader_multiscatter_lut.js"],"names":[],"mappings":"AA+JA,oDAIG;8BA/J2B,4BAA4B"}
@@ -1,84 +1,164 @@
1
- import { u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
- import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
3
- import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
4
- import { chunk_safe_acos } from "../shader/chunk/math/chunk_safe_acos.js";
5
- import { CodeChunk } from "../shader/compiler/CodeChunk.js";
6
- import { ImageShader } from "../shader/ImageShader.js";
7
- import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
8
- import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
9
- import { chunk_get_multiscatter_values } from "./chunk_get_multiscatter_values.js";
10
-
11
- const SETTINGS_STRUCT = WebGPUStruct.from({
12
- // how many ray-marching steps to take per pixel of LUT, more steps = higher accuracy but lower performance
13
- steps: u32,
14
- sqrt_samples: u32,
15
- });
16
-
17
- const resources = new ShaderResourceSetDescriptor();
18
- resources.createGroup()
19
- .addUniform("settings", SETTINGS_STRUCT)
20
- .addTexture("tSkyLutTransmittance")
21
- ;
22
-
23
-
24
- /**
25
- * the multiple-scattering LUT. Each pixel coordinate corresponds to a height and sun zenith angle, and
26
- * the value is the multiple scattering approximation (Psi_ms from the paper, Eq. 10).
27
- *
28
- * @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
29
- * @see https://www.shadertoy.com/view/slSXRW
30
- * @type {CodeChunk}
31
- */
32
- const body = CodeChunk.from(
33
- //language=WGSL
34
- `
35
- @fragment
36
- fn main(
37
- @builtin(position) coord: vec4<f32>,
38
- @location(0) uv: vec2<f32>,
39
- ) -> @location(0) vec4<f32> {
40
-
41
-
42
- let sunCosTheta = 2.0*uv.x - 1.0;
43
- let sunTheta = safe_acos(sunCosTheta);
44
-
45
- let height = ATMOSPHERE_HEIGHT*uv.y;
46
-
47
- let pos = vec3(0.0, height, 0.0);
48
- let sunDir = normalize(vec3(0.0, sunCosTheta, -sin(sunTheta)));
49
-
50
- var lum:vec3<f32>;
51
- var f_ms:vec3<f32>;
52
-
53
- get_multiscatter_values(
54
- pos,
55
- sunDir,
56
- f32(settings.steps),
57
- settings.sqrt_samples,
58
- &lum, &f_ms
59
- );
60
-
61
- // Equation 10 from the paper.
62
- let psi = lum / (1.0 - f_ms);
63
-
64
- return vec4(psi, 1.0);
65
- }
66
- `, [
67
- chunk_safe_acos,
68
- ATMOSPHERE_HEIGHT_DECLARATION,
69
- chunk_get_multiscatter_values,
70
- ]
71
- )
72
-
73
- export const shader_multiscatter_lut = new ImageShader({
74
- descriptor: ShaderDescriptor.from({
75
- label: "Sky / multi-scatter LUT",
76
- body,
77
- resources,
78
- }),
79
- targets: [
80
- {
81
- format: "rgba16float"
82
- }
83
- ]
84
- });
1
+ import { WebGPUExtensionType } from "../../descriptor/WebGPUExtensionType.js";
2
+ import { ATMOSPHERE_HEIGHT_DECLARATION } from "../shader/chunk/atmosphere/ATMOSPHERE_HEIGHT_DECLARATION.js";
3
+ import { chunk_safe_acos } from "../shader/chunk/math/chunk_safe_acos.js";
4
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
5
+ import { ComputeShader } from "../shader/ComputeShader.js";
6
+ import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
7
+ import { chunk_get_multiscatter_values } from "./chunk_get_multiscatter_values.js";
8
+ import { chunk_multiscatter_sample_direction } from "./chunk_multiscatter_sample_direction.js";
9
+ import { chunk_sky_lut_texel_to_unit } from "./chunk_sky_lut_texel_to_unit.js";
10
+ import {
11
+ MULTISCATTER_LUT_DIRECTION_COUNT,
12
+ MULTISCATTER_LUT_MAX_SUBGROUP_PARTIALS
13
+ } from "./MULTISCATTER_LUT_CONFIG.js";
14
+ import { SAMPLER_SKY_LUT } from "./SAMPLER_SKY_LUT.js";
15
+
16
+ const resources = new ShaderResourceSetDescriptor();
17
+ resources.createGroup()
18
+ // "float" rather than the default "unfilterable-float": rgba16float is filterable in
19
+ // core WebGPU, so the LUT goes through the texture unit instead of a 4-tap manual
20
+ // bilinear.
21
+ .addTexture("tSkyLutTransmittance", "float")
22
+ .addSampler("sSkyLut", "filtering", SAMPLER_SKY_LUT)
23
+ .addStorageTexture("tSkyLutMultiscatterOut", "rgba16float")
24
+ ;
25
+
26
+
27
+ /**
28
+ * the multiple-scattering LUT. Each pixel coordinate corresponds to a height and sun zenith angle, and
29
+ * the value is the multiple scattering approximation (Psi_ms from the paper, Eq. 10).
30
+ *
31
+ * One workgroup per LUT texel, one thread per direction, mirroring Hillaire's
32
+ * `[numthreads(1,1,64)]` `NewMultiScattCS`. The 64 directions used to be a serial loop
33
+ * inside a fragment shader, which left the whole pass with 32*32 = 1024 threads of
34
+ * parallelism -- a few dozen waves, one per scheduler at best, with nothing to hide the
35
+ * latency of the transmittance fetches. Per-thread it is now a single direction's 20-step
36
+ * march.
37
+ *
38
+ * The per-direction results are summed with `subgroupAdd` and then across subgroups through
39
+ * workgroup memory; Hillaire uses a six-step groupshared log-reduction, which the subgroup
40
+ * op collapses into one instruction plus a handful of partials.
41
+ *
42
+ * @see "A Scalable and Production Ready Sky and Atmosphere Rendering Technique", Hillaire (2020)
43
+ * @see https://www.shadertoy.com/view/slSXRW
44
+ * @type {CodeChunk}
45
+ */
46
+ const body = CodeChunk.from(
47
+ //language=WGSL
48
+ `
49
+ const MULTISCATTER_DIRECTION_COUNT = ${MULTISCATTER_LUT_DIRECTION_COUNT}u;
50
+ const MULTISCATTER_MAX_SUBGROUP_PARTIALS = ${MULTISCATTER_LUT_MAX_SUBGROUP_PARTIALS}u;
51
+
52
+ var<workgroup> wg_partial_count: atomic<u32>;
53
+ var<workgroup> wg_lum: array<vec3<f32>, MULTISCATTER_MAX_SUBGROUP_PARTIALS>;
54
+ var<workgroup> wg_fms: array<vec3<f32>, MULTISCATTER_MAX_SUBGROUP_PARTIALS>;
55
+
56
+ @compute @workgroup_size(${MULTISCATTER_LUT_DIRECTION_COUNT}, 1, 1)
57
+ fn main(
58
+ @builtin(workgroup_id) workgroup_id: vec3<u32>,
59
+ @builtin(local_invocation_index) thread_index: u32,
60
+ ) {
61
+
62
+ if (thread_index == 0u) {
63
+ atomicStore(&wg_partial_count, 0u);
64
+ }
65
+
66
+ // Every thread is here together anyway, so the counter's initialisation costs nothing
67
+ // beyond the barrier itself. WGSL does not promise workgroup variables start zeroed.
68
+ workgroupBarrier();
69
+
70
+ // one workgroup per texel; the dispatch is sized from the texture, so this is in range
71
+ let texel = workgroup_id.xy;
72
+
73
+ let lut_size = vec2<f32>(textureDimensions(tSkyLutMultiscatterOut));
74
+
75
+ // The point of each range this texel stands for: texel 0 carries the bottom and the last
76
+ // texel the top, which is what lets a lookup at either end read a value computed there
77
+ // rather than one from half a texel inside. sky_lut_uv is the other half of this.
78
+ let unit = sky_lut_texel_to_unit(vec2<f32>(texel), lut_size);
79
+
80
+ let sunCosTheta = 2.0*unit.x - 1.0;
81
+ let sunTheta = safe_acos(sunCosTheta);
82
+
83
+ let height = ATMOSPHERE_HEIGHT*unit.y;
84
+
85
+ let pos = vec3(0.0, height, 0.0);
86
+ let sunDir = normalize(vec3(0.0, sunCosTheta, -sin(sunTheta)));
87
+
88
+ // pos on the +y axis and sunDir with a zero x component are exactly the preconditions
89
+ // multiscatter_sample_direction's half-azimuth sample set needs
90
+ let rayDir = multiscatter_sample_direction(thread_index);
91
+
92
+ var lum:vec3<f32>;
93
+ var f_ms:vec3<f32>;
94
+
95
+ get_multiscatter_values(pos, sunDir, rayDir, &lum, &f_ms);
96
+
97
+ // Uniform control flow up to here, so every one of the workgroup's threads is an active
98
+ // lane and the subgroup sum covers all of them.
99
+ let lum_subgroup = subgroupAdd(lum);
100
+ let fms_subgroup = subgroupAdd(f_ms);
101
+
102
+ // subgroupElect picks exactly one active invocation per subgroup, and the slot it claims
103
+ // is whichever the counter hands out. Deriving the slot from local_invocation_index /
104
+ // subgroup_size instead would assume invocations are packed into subgroups in contiguous
105
+ // index order, which WGSL leaves unspecified: a mapping that is not contiguous blocks
106
+ // would collide two subgroups onto one slot and silently drop a partial sum. Which slot
107
+ // a subgroup lands in does not matter, only that it gets its own.
108
+ //
109
+ // Every lane holds the same subgroup sum, so letting them all store it would be a data
110
+ // race on one address even though the values agree.
111
+ if (subgroupElect()) {
112
+ let slot = atomicAdd(&wg_partial_count, 1u);
113
+
114
+ wg_lum[slot] = lum_subgroup;
115
+ wg_fms[slot] = fms_subgroup;
116
+ }
117
+
118
+ workgroupBarrier();
119
+
120
+ if (thread_index != 0u) {
121
+ return;
122
+ }
123
+
124
+ // WGSL pins the subgroup size to a power of two in [4, 128], so the workgroup cannot hold
125
+ // more subgroups than the partials array has room for. The clamp keeps a driver that
126
+ // broke that promise reading initialised slots rather than garbage.
127
+ let partial_count = min(atomicLoad(&wg_partial_count), MULTISCATTER_MAX_SUBGROUP_PARTIALS);
128
+
129
+ var lum_total = vec3(0.0);
130
+ var fms_total = vec3(0.0);
131
+
132
+ for (var i = 0u; i < partial_count; i++) {
133
+ lum_total += wg_lum[i];
134
+ fms_total += wg_fms[i];
135
+ }
136
+
137
+ // The directions carry equal solid angle, so the mean over them is the spherical average
138
+ // the paper's uniform phase reduces to.
139
+ let inv_samples = 1.0 / f32(MULTISCATTER_DIRECTION_COUNT);
140
+
141
+ lum_total *= inv_samples;
142
+ fms_total *= inv_samples;
143
+
144
+ // Equation 10 from the paper.
145
+ let psi = lum_total / (1.0 - fms_total);
146
+
147
+ textureStore(tSkyLutMultiscatterOut, texel, vec4(psi, 1.0));
148
+ }
149
+ `, [
150
+ chunk_safe_acos,
151
+ ATMOSPHERE_HEIGHT_DECLARATION,
152
+ chunk_multiscatter_sample_direction,
153
+ chunk_sky_lut_texel_to_unit,
154
+ chunk_get_multiscatter_values,
155
+ ]
156
+ );
157
+
158
+ body.addExtension(WebGPUExtensionType.Subgroups);
159
+
160
+ export const shader_multiscatter_lut = ComputeShader.from({
161
+ label: "Sky / multi-scatter LUT",
162
+ body,
163
+ resources,
164
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"shader_sky_irradiance_lut.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js"],"names":[],"mappings":"AAiMA,oDAWG;4BA3KyB,0BAA0B"}
1
+ {"version":3,"file":"shader_sky_irradiance_lut.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/atmosphere/shader_sky_irradiance_lut.js"],"names":[],"mappings":"AA4MA,oDAWG;4BA1LyB,0BAA0B"}