@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,428 +1,428 @@
1
- import { m4_invert } from "../../../../core/geom/3d/mat4/m4_invert.js";
2
- import { assert } from "../../../../core/assert.js";
3
- import { array_copy } from "../../../../core/collection/array/array_copy.js";
4
- import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
5
- import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
6
- import { aabb3_matrix4_project } from "../../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
7
- import { ray3_array_apply_matrix4 } from "../../../../core/geom/3d/ray/ray3_array_apply_matrix4.js";
8
- import { GeometrySpatialQueryAccelerator } from "../../geometry/buffered/query/GeometrySpatialQueryAccelerator.js";
9
- import { DrawMode } from "./DrawMode.js";
10
- import { ShadedGeometryFlags } from "./ShadedGeometryFlags.js";
11
-
12
- /**
13
- * @readonly
14
- * @type {Float32Array}
15
- */
16
- const scratch_aabb3_array = new Float32Array(6);
17
-
18
- const DEFAULT_FLAGS = ShadedGeometryFlags.CastShadow
19
- | ShadedGeometryFlags.ReceiveShadow
20
- | ShadedGeometryFlags.Visible
21
- ;
22
-
23
- const FLAG_SET_EQUALITY = ShadedGeometryFlags.CastShadow
24
- | ShadedGeometryFlags.ReceiveShadow
25
- | ShadedGeometryFlags.DrawMethodLocked
26
- | ShadedGeometryFlags.Visible
27
- ;
28
-
29
- /**
30
- *
31
- * @type {Float32Array|mat4}
32
- */
33
- const scratch_m4 = new Float32Array(16);
34
-
35
- /**
36
- * @readonly
37
- * @type {Float32Array}
38
- */
39
- const scratch_ray_0 = new Float32Array(6);
40
-
41
- /**
42
- * Represents a primitive 3d object, a combination of a material and geometry
43
- * This is roughly equivalent to single draw call, note that his is not a hierarchical data structure, if you want that - you will need to combine multiple entities, each with a `ShadedGeometry` component
44
- */
45
- export class ShadedGeometry {
46
- /**
47
- * Set when a transform change has been observed but the bounding box and the BVH have
48
- * not been brought up to date yet. Only ever set under
49
- * {@link ShadedGeometryFlags.DeferredBoundsUpdate}, and doubles as the "already queued"
50
- * bit for {@link #bounds_queue}.
51
- * @type {boolean}
52
- */
53
- #bounds_dirty = false;
54
-
55
- /**
56
- * Transient, assigned in the system. Where this component parks itself when its bounds
57
- * go stale under {@link ShadedGeometryFlags.DeferredBoundsUpdate}.
58
- * @type {DeferredBoundsQueue|null}
59
- */
60
- #bounds_queue = null;
61
-
62
- /**
63
- * Whatever the running renderer draws geometry from — a `MeshletGeometry` under Shade, and a
64
- * `Geometry` where the primitive was built rather than loaded.
65
- * @type {MeshletGeometry|Geometry|BufferGeometry|null}
66
- */
67
- geometry = null;
68
-
69
- /**
70
- *
71
- * @type {ShadeMaterial|Material|null}
72
- */
73
- material = null;
74
-
75
- /**
76
- * Optional extra material used for shadowmaps
77
- * @type {ShadeMaterial|Material|null}
78
- */
79
- depth_material = null;
80
-
81
- __bvh_leaf = new BvhClient();
82
-
83
- /**
84
- * Transient, assigned in the system
85
- * @type {number}
86
- * @private
87
- */
88
- __entity = -1;
89
-
90
- /**
91
- * Transient, cached for convenience. Associated transform component from the same entity
92
- * @type {Transform|null}
93
- * @private
94
- */
95
- __c_transform = null;
96
-
97
- /**
98
- * The row a renderer put this primitive in, or `null` while it is in none.
99
- *
100
- * **Written by whichever system placed it, and read by whoever needs to know where it ended
101
- * up** — `MeshSystem3` combining the bounds of an expanded model, for one. Same arrangement v1
102
- * made with `Mesh.mesh`: a component that carries the renderer's own geometry may as well carry
103
- * the renderer's own handle to it, and one renderer runs at a time.
104
- *
105
- * @transient
106
- * @type {Mesh|null}
107
- */
108
- node = null;
109
-
110
- /**
111
- *
112
- * @type {DrawMode|number}
113
- */
114
- mode = DrawMode.Triangles;
115
-
116
- /**
117
- * Transient property signifying how to render object, such as using INSTANCED draw
118
- * @type {number}
119
- */
120
- draw_method = 0;
121
-
122
- /**
123
- *
124
- * @type {number}
125
- */
126
- flags = DEFAULT_FLAGS;
127
-
128
- /**
129
- *
130
- * @param {number|ShadedGeometryFlags} flag
131
- * @returns {void}
132
- */
133
- setFlag(flag) {
134
- this.flags |= flag;
135
- }
136
-
137
- /**
138
- *
139
- * @param {number|ShadedGeometryFlags} flag
140
- * @returns {void}
141
- */
142
- clearFlag(flag) {
143
- this.flags &= ~flag;
144
- }
145
-
146
- /**
147
- *
148
- * @param {number|ShadedGeometryFlags} flag
149
- * @param {boolean} value
150
- */
151
- writeFlag(flag, value) {
152
- if (value) {
153
- this.setFlag(flag);
154
- } else {
155
- this.clearFlag(flag);
156
- }
157
- }
158
-
159
- /**
160
- *
161
- * @param {number|ShadedGeometryFlags} flag
162
- * @returns {boolean}
163
- */
164
- getFlag(flag) {
165
- return (this.flags & flag) === flag;
166
- }
167
-
168
- /**
169
- *
170
- * @return {number}
171
- */
172
- hash() {
173
- return this.geometry.id
174
- ^ this.material.id
175
- ^ (this.flags & FLAG_SET_EQUALITY)
176
- ^ (this.draw_method << 16)
177
- ^ (this.mode << 12)
178
- ;
179
- }
180
-
181
- /**
182
- *
183
- * @param {ShadedGeometry} other
184
- * @returns {boolean}
185
- */
186
- equals(other) {
187
- return this.geometry.id === other.geometry.id
188
- && this.material.id === other.material.id
189
- && this.draw_method === other.draw_method
190
- && this.mode === other.mode
191
- && (this.flags & FLAG_SET_EQUALITY) === (other.flags & FLAG_SET_EQUALITY)
192
- && this.depth_material === other.depth_material
193
- ;
194
- }
195
-
196
- /**
197
- *
198
- * @param {ShadedGeometry} other
199
- */
200
- copy(other) {
201
- this.geometry = other.geometry;
202
- this.material = other.material;
203
- this.depth_material = other.depth_material;
204
- this.draw_method = other.draw_method;
205
- this.mode = other.mode;
206
- this.flags = other.flags;
207
- }
208
-
209
- /**
210
- *
211
- * @returns {ShadedGeometry}
212
- */
213
- clone() {
214
- const r = new ShadedGeometry();
215
-
216
- r.copy(this);
217
-
218
- return r;
219
- }
220
-
221
- /**
222
- * Current cached entity that this component is attached to
223
- * @return {number}
224
- */
225
- get entity() {
226
- return this.__entity;
227
- }
228
-
229
- /**
230
- * Global transform matrix
231
- * 4x4 matrix
232
- * @return {null|number[]}
233
- */
234
- get transform() {
235
- return this.__c_transform.matrix;
236
- }
237
-
238
- /**
239
- * Attach this component to the queue that collects deferred bounds updates.
240
- * Called by the system when the component enters the BVH.
241
- * @param {DeferredBoundsQueue} queue
242
- * @returns {void}
243
- */
244
- bindBoundsQueue(queue) {
245
- assert.defined(queue, 'queue');
246
-
247
- this.#bounds_queue = queue;
248
- }
249
-
250
- /**
251
- * Called by the system when the component leaves the BVH. Any update parked in the
252
- * queue is abandoned — the entry is left in place and becomes inert, so unlinking
253
- * stays O(1).
254
- * @returns {void}
255
- */
256
- unbindBoundsQueue() {
257
- this.#bounds_dirty = false;
258
- this.#bounds_queue = null;
259
- }
260
-
261
- /**
262
- * Recompute the bounding box and push it into the BVH, if a deferred update is pending.
263
- *
264
- * This is the single point where a parked update lands; it is driven both by
265
- * {@link DeferredBoundsQueue.flush} and by any read of the bounding box.
266
- * @returns {boolean} whether an update was actually pending
267
- */
268
- applyDeferredBoundsUpdate() {
269
- if (!this.#bounds_dirty) {
270
- return false;
271
- }
272
-
273
- this.#bounds_dirty = false;
274
-
275
- this.update_bounds();
276
-
277
- this.__bvh_leaf.write_bounds();
278
-
279
- return true;
280
- }
281
-
282
- /**
283
- *
284
- * @param {AABB3} destination
285
- */
286
- getBoundingBox(destination) {
287
- const node = this.node;
288
-
289
- if (node !== null) {
290
- /*
291
- Placed in a renderer that keeps a world box per row and refreshes it as part of placing
292
- it. Reading that is not an optimization — the deferred path below computes its box from
293
- the geometry's own, and only a three `BufferGeometry` has one of those.
294
- */
295
- destination.readFromArray(node.bounding_box);
296
-
297
- return;
298
- }
299
-
300
- // settle a pending deferred update, so a read never observes a stale box
301
- this.applyDeferredBoundsUpdate();
302
-
303
- const aabb = this.__bvh_leaf.bounds;
304
-
305
- destination.readFromArray(aabb);
306
- }
307
-
308
- /**
309
- *
310
- * @param {MeshletGeometry|BufferGeometry} geometry
311
- * @param {ShadeMaterial|Material} material
312
- * @param {DrawMode} [draw_mode]
313
- */
314
- from(geometry, material, draw_mode = DrawMode.Triangles) {
315
- this.geometry = geometry;
316
- this.material = material;
317
- this.mode = draw_mode;
318
- }
319
-
320
- /**
321
- *
322
- * @param {MeshletGeometry|BufferGeometry} geometry
323
- * @param {ShadeMaterial|Material} material
324
- * @param {DrawMode} [draw_mode]
325
- * @return {ShadedGeometry}
326
- */
327
- static from(geometry, material, draw_mode) {
328
- const r = new ShadedGeometry();
329
-
330
- r.from(geometry, material, draw_mode);
331
-
332
- return r;
333
- }
334
-
335
- /**
336
- * Change handler subscribed to the entity's {@link Transform} while the component is
337
- * linked; see {@link ShadedGeometrySystem.link}.
338
- * @returns {void}
339
- */
340
- updateTransform() {
341
- if (this.getFlag(ShadedGeometryFlags.DeferredBoundsUpdate)) {
342
- if (!this.#bounds_dirty) {
343
- this.#bounds_dirty = true;
344
-
345
- this.#bounds_queue.add(this);
346
- }
347
-
348
- return;
349
- }
350
-
351
- this.update_bounds();
352
-
353
- this.__bvh_leaf.write_bounds();
354
- }
355
-
356
- update_bounds() {
357
- const geometry = this.geometry;
358
-
359
- /*
360
- The box comes off the geometry's own, which is why this is only reachable for a `Geometry`:
361
- it computes one on demand and remembers it, which is the whole of what
362
- `GeometryFlags.BoundsNeedUpdate` is for. A `MeshletGeometry` carries its box from the build
363
- and is read through {@link #node} instead — see `getBoundingBox`.
364
- */
365
- geometry.ensureBounds();
366
-
367
- array_copy(geometry.bounding_box, 0, scratch_aabb3_array, 0, 6);
368
-
369
- // transform
370
- aabb3_matrix4_project(this.__bvh_leaf.bounds, scratch_aabb3_array, this.transform);
371
- }
372
-
373
- /**
374
- * Raycast this primitive's own triangles on the CPU.
375
- *
376
- * **Requires a {@link Geometry}** — the vertex arrays themselves. A `MeshletGeometry` keeps its
377
- * triangles quantized inside meshlet pages, so a `ShadedGeometry` placed by
378
- * `shade_node_to_entity_composition` cannot be asked this; `geometry_build_from_meshlet_geometry`
379
- * decodes one, and holding that decode is the caller's business rather than this method's.
380
- * Picking a whole scene goes through the renderer's own `pick` instead (I-9) — this answers with
381
- * a surface point on one primitive.
382
- *
383
- * @param {SurfacePoint3} contact if found, contact is written here
384
- * @param {ArrayLike<number>|number[]|Float32Array} ray 6-tuple: [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
385
- * @param {ArrayLike<number>|number[]|Float32Array} transform_matrix4 transform applied to the geometry
386
- * @returns {boolean}
387
- */
388
- query_raycast_nearest(contact, ray, transform_matrix4) {
389
-
390
- // get transform in local space
391
- m4_invert(scratch_m4, transform_matrix4);
392
-
393
- // transform ray to local space
394
- if (!ray3_array_apply_matrix4(scratch_ray_0, 0, ray, 0, scratch_m4)) {
395
- // invalid transform matrix
396
- return false;
397
- }
398
-
399
- const hit_found = GeometrySpatialQueryAccelerator.INSTANCE.queryRaycastNearest_array(
400
- contact,
401
- this.geometry,
402
- scratch_ray_0
403
- );
404
-
405
- if (!hit_found) {
406
- return false;
407
- }
408
-
409
- // transform hit contact into global space
410
- contact.applyMatrix4(transform_matrix4);
411
-
412
- return true;
413
-
414
- }
415
- }
416
-
417
- /**
418
- * @readonly
419
- * @type {string}
420
- */
421
- ShadedGeometry.typeName = 'ShadedGeometry';
422
-
423
- /**
424
- * TODO add serialization support
425
- * @readonly
426
- * @type {boolean}
427
- */
428
- ShadedGeometry.serializable = false;
1
+ import { m4_invert } from "../../../../core/geom/3d/mat4/m4_invert.js";
2
+ import { assert } from "../../../../core/assert.js";
3
+ import { array_copy } from "../../../../core/collection/array/array_copy.js";
4
+ import { BvhClient } from "../../../../core/bvh2/bvh3/BvhClient.js";
5
+ import { AABB3 } from "../../../../core/geom/3d/aabb/AABB3.js";
6
+ import { aabb3_matrix4_project } from "../../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
7
+ import { ray3_array_apply_matrix4 } from "../../../../core/geom/3d/ray/ray3_array_apply_matrix4.js";
8
+ import { GeometrySpatialQueryAccelerator } from "../../geometry/buffered/query/GeometrySpatialQueryAccelerator.js";
9
+ import { DrawMode } from "./DrawMode.js";
10
+ import { ShadedGeometryFlags } from "./ShadedGeometryFlags.js";
11
+
12
+ /**
13
+ * @readonly
14
+ * @type {Float32Array}
15
+ */
16
+ const scratch_aabb3_array = new Float32Array(6);
17
+
18
+ const DEFAULT_FLAGS = ShadedGeometryFlags.CastShadow
19
+ | ShadedGeometryFlags.ReceiveShadow
20
+ | ShadedGeometryFlags.Visible
21
+ ;
22
+
23
+ const FLAG_SET_EQUALITY = ShadedGeometryFlags.CastShadow
24
+ | ShadedGeometryFlags.ReceiveShadow
25
+ | ShadedGeometryFlags.DrawMethodLocked
26
+ | ShadedGeometryFlags.Visible
27
+ ;
28
+
29
+ /**
30
+ *
31
+ * @type {Float32Array|mat4}
32
+ */
33
+ const scratch_m4 = new Float32Array(16);
34
+
35
+ /**
36
+ * @readonly
37
+ * @type {Float32Array}
38
+ */
39
+ const scratch_ray_0 = new Float32Array(6);
40
+
41
+ /**
42
+ * Represents a primitive 3d object, a combination of a material and geometry
43
+ * This is roughly equivalent to single draw call, note that his is not a hierarchical data structure, if you want that - you will need to combine multiple entities, each with a `ShadedGeometry` component
44
+ */
45
+ export class ShadedGeometry {
46
+ /**
47
+ * Set when a transform change has been observed but the bounding box and the BVH have
48
+ * not been brought up to date yet. Only ever set under
49
+ * {@link ShadedGeometryFlags.DeferredBoundsUpdate}, and doubles as the "already queued"
50
+ * bit for {@link #bounds_queue}.
51
+ * @type {boolean}
52
+ */
53
+ #bounds_dirty = false;
54
+
55
+ /**
56
+ * Transient, assigned in the system. Where this component parks itself when its bounds
57
+ * go stale under {@link ShadedGeometryFlags.DeferredBoundsUpdate}.
58
+ * @type {DeferredBoundsQueue|null}
59
+ */
60
+ #bounds_queue = null;
61
+
62
+ /**
63
+ * Whatever the running renderer draws geometry from — a `MeshletGeometry` under Shade, and a
64
+ * `Geometry` where the primitive was built rather than loaded.
65
+ * @type {MeshletGeometry|Geometry|BufferGeometry|null}
66
+ */
67
+ geometry = null;
68
+
69
+ /**
70
+ *
71
+ * @type {ShadeMaterial|Material|null}
72
+ */
73
+ material = null;
74
+
75
+ /**
76
+ * Optional extra material used for shadowmaps
77
+ * @type {ShadeMaterial|Material|null}
78
+ */
79
+ depth_material = null;
80
+
81
+ __bvh_leaf = new BvhClient();
82
+
83
+ /**
84
+ * Transient, assigned in the system
85
+ * @type {number}
86
+ * @private
87
+ */
88
+ __entity = -1;
89
+
90
+ /**
91
+ * Transient, cached for convenience. Associated transform component from the same entity
92
+ * @type {Transform|null}
93
+ * @private
94
+ */
95
+ __c_transform = null;
96
+
97
+ /**
98
+ * The row a renderer put this primitive in, or `null` while it is in none.
99
+ *
100
+ * **Written by whichever system placed it, and read by whoever needs to know where it ended
101
+ * up** — `MeshSystem` combining the bounds of an expanded model, for one. Same arrangement v1
102
+ * made with `Mesh.mesh`: a component that carries the renderer's own geometry may as well carry
103
+ * the renderer's own handle to it, and one renderer runs at a time.
104
+ *
105
+ * @transient
106
+ * @type {Mesh|null}
107
+ */
108
+ node = null;
109
+
110
+ /**
111
+ *
112
+ * @type {DrawMode|number}
113
+ */
114
+ mode = DrawMode.Triangles;
115
+
116
+ /**
117
+ * Transient property signifying how to render object, such as using INSTANCED draw
118
+ * @type {number}
119
+ */
120
+ draw_method = 0;
121
+
122
+ /**
123
+ *
124
+ * @type {number}
125
+ */
126
+ flags = DEFAULT_FLAGS;
127
+
128
+ /**
129
+ *
130
+ * @param {number|ShadedGeometryFlags} flag
131
+ * @returns {void}
132
+ */
133
+ setFlag(flag) {
134
+ this.flags |= flag;
135
+ }
136
+
137
+ /**
138
+ *
139
+ * @param {number|ShadedGeometryFlags} flag
140
+ * @returns {void}
141
+ */
142
+ clearFlag(flag) {
143
+ this.flags &= ~flag;
144
+ }
145
+
146
+ /**
147
+ *
148
+ * @param {number|ShadedGeometryFlags} flag
149
+ * @param {boolean} value
150
+ */
151
+ writeFlag(flag, value) {
152
+ if (value) {
153
+ this.setFlag(flag);
154
+ } else {
155
+ this.clearFlag(flag);
156
+ }
157
+ }
158
+
159
+ /**
160
+ *
161
+ * @param {number|ShadedGeometryFlags} flag
162
+ * @returns {boolean}
163
+ */
164
+ getFlag(flag) {
165
+ return (this.flags & flag) === flag;
166
+ }
167
+
168
+ /**
169
+ *
170
+ * @return {number}
171
+ */
172
+ hash() {
173
+ return this.geometry.id
174
+ ^ this.material.id
175
+ ^ (this.flags & FLAG_SET_EQUALITY)
176
+ ^ (this.draw_method << 16)
177
+ ^ (this.mode << 12)
178
+ ;
179
+ }
180
+
181
+ /**
182
+ *
183
+ * @param {ShadedGeometry} other
184
+ * @returns {boolean}
185
+ */
186
+ equals(other) {
187
+ return this.geometry.id === other.geometry.id
188
+ && this.material.id === other.material.id
189
+ && this.draw_method === other.draw_method
190
+ && this.mode === other.mode
191
+ && (this.flags & FLAG_SET_EQUALITY) === (other.flags & FLAG_SET_EQUALITY)
192
+ && this.depth_material === other.depth_material
193
+ ;
194
+ }
195
+
196
+ /**
197
+ *
198
+ * @param {ShadedGeometry} other
199
+ */
200
+ copy(other) {
201
+ this.geometry = other.geometry;
202
+ this.material = other.material;
203
+ this.depth_material = other.depth_material;
204
+ this.draw_method = other.draw_method;
205
+ this.mode = other.mode;
206
+ this.flags = other.flags;
207
+ }
208
+
209
+ /**
210
+ *
211
+ * @returns {ShadedGeometry}
212
+ */
213
+ clone() {
214
+ const r = new ShadedGeometry();
215
+
216
+ r.copy(this);
217
+
218
+ return r;
219
+ }
220
+
221
+ /**
222
+ * Current cached entity that this component is attached to
223
+ * @return {number}
224
+ */
225
+ get entity() {
226
+ return this.__entity;
227
+ }
228
+
229
+ /**
230
+ * Global transform matrix
231
+ * 4x4 matrix
232
+ * @return {null|number[]}
233
+ */
234
+ get transform() {
235
+ return this.__c_transform.matrix;
236
+ }
237
+
238
+ /**
239
+ * Attach this component to the queue that collects deferred bounds updates.
240
+ * Called by the system when the component enters the BVH.
241
+ * @param {DeferredBoundsQueue} queue
242
+ * @returns {void}
243
+ */
244
+ bindBoundsQueue(queue) {
245
+ assert.defined(queue, 'queue');
246
+
247
+ this.#bounds_queue = queue;
248
+ }
249
+
250
+ /**
251
+ * Called by the system when the component leaves the BVH. Any update parked in the
252
+ * queue is abandoned — the entry is left in place and becomes inert, so unlinking
253
+ * stays O(1).
254
+ * @returns {void}
255
+ */
256
+ unbindBoundsQueue() {
257
+ this.#bounds_dirty = false;
258
+ this.#bounds_queue = null;
259
+ }
260
+
261
+ /**
262
+ * Recompute the bounding box and push it into the BVH, if a deferred update is pending.
263
+ *
264
+ * This is the single point where a parked update lands; it is driven both by
265
+ * {@link DeferredBoundsQueue.flush} and by any read of the bounding box.
266
+ * @returns {boolean} whether an update was actually pending
267
+ */
268
+ applyDeferredBoundsUpdate() {
269
+ if (!this.#bounds_dirty) {
270
+ return false;
271
+ }
272
+
273
+ this.#bounds_dirty = false;
274
+
275
+ this.update_bounds();
276
+
277
+ this.__bvh_leaf.write_bounds();
278
+
279
+ return true;
280
+ }
281
+
282
+ /**
283
+ *
284
+ * @param {AABB3} destination
285
+ */
286
+ getBoundingBox(destination) {
287
+ const node = this.node;
288
+
289
+ if (node !== null) {
290
+ /*
291
+ Placed in a renderer that keeps a world box per row and refreshes it as part of placing
292
+ it. Reading that is not an optimization — the deferred path below computes its box from
293
+ the geometry's own, and only a three `BufferGeometry` has one of those.
294
+ */
295
+ destination.readFromArray(node.bounding_box);
296
+
297
+ return;
298
+ }
299
+
300
+ // settle a pending deferred update, so a read never observes a stale box
301
+ this.applyDeferredBoundsUpdate();
302
+
303
+ const aabb = this.__bvh_leaf.bounds;
304
+
305
+ destination.readFromArray(aabb);
306
+ }
307
+
308
+ /**
309
+ *
310
+ * @param {MeshletGeometry|BufferGeometry} geometry
311
+ * @param {ShadeMaterial|Material} material
312
+ * @param {DrawMode} [draw_mode]
313
+ */
314
+ from(geometry, material, draw_mode = DrawMode.Triangles) {
315
+ this.geometry = geometry;
316
+ this.material = material;
317
+ this.mode = draw_mode;
318
+ }
319
+
320
+ /**
321
+ *
322
+ * @param {MeshletGeometry|BufferGeometry} geometry
323
+ * @param {ShadeMaterial|Material} material
324
+ * @param {DrawMode} [draw_mode]
325
+ * @return {ShadedGeometry}
326
+ */
327
+ static from(geometry, material, draw_mode) {
328
+ const r = new ShadedGeometry();
329
+
330
+ r.from(geometry, material, draw_mode);
331
+
332
+ return r;
333
+ }
334
+
335
+ /**
336
+ * Change handler subscribed to the entity's {@link Transform} while the component is
337
+ * linked; see {@link ShadedGeometrySystem.link}.
338
+ * @returns {void}
339
+ */
340
+ updateTransform() {
341
+ if (this.getFlag(ShadedGeometryFlags.DeferredBoundsUpdate)) {
342
+ if (!this.#bounds_dirty) {
343
+ this.#bounds_dirty = true;
344
+
345
+ this.#bounds_queue.add(this);
346
+ }
347
+
348
+ return;
349
+ }
350
+
351
+ this.update_bounds();
352
+
353
+ this.__bvh_leaf.write_bounds();
354
+ }
355
+
356
+ update_bounds() {
357
+ const geometry = this.geometry;
358
+
359
+ /*
360
+ The box comes off the geometry's own, which is why this is only reachable for a `Geometry`:
361
+ it computes one on demand and remembers it, which is the whole of what
362
+ `GeometryFlags.BoundsNeedUpdate` is for. A `MeshletGeometry` carries its box from the build
363
+ and is read through {@link #node} instead — see `getBoundingBox`.
364
+ */
365
+ geometry.ensureBounds();
366
+
367
+ array_copy(geometry.bounding_box, 0, scratch_aabb3_array, 0, 6);
368
+
369
+ // transform
370
+ aabb3_matrix4_project(this.__bvh_leaf.bounds, scratch_aabb3_array, this.transform);
371
+ }
372
+
373
+ /**
374
+ * Raycast this primitive's own triangles on the CPU.
375
+ *
376
+ * **Requires a {@link Geometry}** — the vertex arrays themselves. A `MeshletGeometry` keeps its
377
+ * triangles quantized inside meshlet pages, so a `ShadedGeometry` placed by
378
+ * `shade_node_to_entity_composition` cannot be asked this; `geometry_build_from_meshlet_geometry`
379
+ * decodes one, and holding that decode is the caller's business rather than this method's.
380
+ * Picking a whole scene goes through the renderer's own `pick` instead (I-9) — this answers with
381
+ * a surface point on one primitive.
382
+ *
383
+ * @param {SurfacePoint3} contact if found, contact is written here
384
+ * @param {ArrayLike<number>|number[]|Float32Array} ray 6-tuple: [origin_x, origin_y, origin_z, direction_x, direction_y, direction_z]
385
+ * @param {ArrayLike<number>|number[]|Float32Array} transform_matrix4 transform applied to the geometry
386
+ * @returns {boolean}
387
+ */
388
+ query_raycast_nearest(contact, ray, transform_matrix4) {
389
+
390
+ // get transform in local space
391
+ m4_invert(scratch_m4, transform_matrix4);
392
+
393
+ // transform ray to local space
394
+ if (!ray3_array_apply_matrix4(scratch_ray_0, 0, ray, 0, scratch_m4)) {
395
+ // invalid transform matrix
396
+ return false;
397
+ }
398
+
399
+ const hit_found = GeometrySpatialQueryAccelerator.INSTANCE.queryRaycastNearest_array(
400
+ contact,
401
+ this.geometry,
402
+ scratch_ray_0
403
+ );
404
+
405
+ if (!hit_found) {
406
+ return false;
407
+ }
408
+
409
+ // transform hit contact into global space
410
+ contact.applyMatrix4(transform_matrix4);
411
+
412
+ return true;
413
+
414
+ }
415
+ }
416
+
417
+ /**
418
+ * @readonly
419
+ * @type {string}
420
+ */
421
+ ShadedGeometry.typeName = 'ShadedGeometry';
422
+
423
+ /**
424
+ * TODO add serialization support
425
+ * @readonly
426
+ * @type {boolean}
427
+ */
428
+ ShadedGeometry.serializable = false;