@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
@@ -0,0 +1,273 @@
1
+ import { assert } from "../../core/assert.js";
2
+ import { BVH } from "../../core/bvh2/bvh3/BVH.js";
3
+ import {
4
+ aabb3_ray_segment_entry_distance
5
+ } from "../../core/geom/3d/aabb/aabb3_ray_segment_entry_distance.js";
6
+ import { BVHQueryIntersectsRay } from "../../core/bvh2/bvh3/query/BVHQueryIntersectsRay.js";
7
+ import { bvh_query_leaves_generic } from "../../core/bvh2/bvh3/query/bvh_query_leaves_generic.js";
8
+ import { System } from "../ecs/System.js";
9
+ import { Transform } from "../ecs/transform/Transform.js";
10
+ import { Pickable } from "./Pickable.js";
11
+ import { PickingResult } from "./PickingResult.js";
12
+
13
+ /**
14
+ * @type {Float32Array}
15
+ */
16
+ const SCRATCH_BOUNDS = new Float32Array(6);
17
+
18
+ /**
19
+ * Answers "what is under this ray" for entities that asked to be pickable.
20
+ *
21
+ * **Asynchronous and batched from the first line, on purpose (I-9).** The backend here is a CPU
22
+ * bounding-volume hierarchy and could answer synchronously; the API does not let it, because the
23
+ * backend this is meant to grow into reads entity ids back off the GPU's visibility buffer, and that
24
+ * answer is inherently a frame late and arrives for a whole batch at once. A synchronous entry point
25
+ * would have to be broken to get there, and every caller broken with it.
26
+ *
27
+ * **Bounding boxes, not triangles.** A hit means the ray entered the entity's world bounding box.
28
+ * That is the precision this can offer for free — Shade maintains those boxes as part of drawing —
29
+ * and going finer means keeping CPU-side triangles for every pickable entity, which is the
30
+ * duplication {@link Pickable} exists to keep small. Terrain picking, which is where the game's
31
+ * precision actually matters, does not come through here at all: it is an exact raycast against the
32
+ * terrain's own representation and is untouched by any of this.
33
+ *
34
+ * The index is refreshed **on query rather than per frame**. Nothing pays for picking on a frame where
35
+ * nobody picks, and there is no window in which the index disagrees with the scene, so no class of
36
+ * bug where a pick lands on where something used to be.
37
+ */
38
+ export class PickingSystem extends System {
39
+ /**
40
+ * @type {MeshSystem}
41
+ */
42
+ #meshes;
43
+
44
+ /**
45
+ * @type {BVH}
46
+ */
47
+ #bvh = new BVH();
48
+
49
+ /**
50
+ * The BVH leaf standing for each pickable entity.
51
+ *
52
+ * @type {Map<number, number>}
53
+ */
54
+ #leaves = new Map();
55
+
56
+ /**
57
+ * Entities that have opted in but have nothing in the scene yet — a model still loading, most
58
+ * often. They hold no leaf, and every query looks again, which is what lets one appear without
59
+ * anything having to notice the moment it did.
60
+ *
61
+ * @type {Set<number>}
62
+ */
63
+ #pending = new Set();
64
+
65
+ /**
66
+ * @param {MeshSystem} meshes what an entity looks like, which is where its bounds come from
67
+ */
68
+ constructor(meshes) {
69
+ super();
70
+
71
+ assert.defined(meshes, 'meshes');
72
+
73
+ this.#meshes = meshes;
74
+
75
+ this.dependencies = [Pickable, Transform];
76
+ }
77
+
78
+ async startup(entityManager) {
79
+ this.entityManager = entityManager;
80
+ }
81
+
82
+ async shutdown(entityManager) {
83
+ for (const entity of Array.from(this.#leaves.keys())) {
84
+ this.#drop(entity);
85
+ }
86
+
87
+ this.#pending.clear();
88
+ }
89
+
90
+ /**
91
+ * @param {Pickable} pickable
92
+ * @param {Transform} transform
93
+ * @param {number} entity
94
+ */
95
+ link(pickable, transform, entity) {
96
+ // no bounds are taken here: the model may not have arrived, and the first query is early
97
+ // enough to find out
98
+ this.#pending.add(entity);
99
+ }
100
+
101
+ /**
102
+ * @param {Pickable} pickable
103
+ * @param {Transform} transform
104
+ * @param {number} entity
105
+ */
106
+ unlink(pickable, transform, entity) {
107
+ this.#drop(entity);
108
+ }
109
+
110
+ /**
111
+ * How many entities the index currently stands for.
112
+ *
113
+ * The index is built on query, so this is zero until the first {@link pick} — and stays behind by
114
+ * however many pickable entities are still waiting on their models.
115
+ *
116
+ * @returns {number}
117
+ */
118
+ get indexed_count() {
119
+ return this.#leaves.size;
120
+ }
121
+
122
+ /**
123
+ * What each of these rays hits first.
124
+ *
125
+ * One result per query, in the order the queries were given. A ray that hits nothing still gets a
126
+ * result — `entity` is {@link PickingResult.NOTHING} — so the two arrays line up by position and a
127
+ * caller never has to search for the answer to its own question.
128
+ *
129
+ * @param {PickingQuery[]} queries
130
+ * @returns {Promise<PickingResult[]>}
131
+ */
132
+ async pick(queries) {
133
+ assert.isArray(queries, 'queries');
134
+
135
+ this.#refresh();
136
+
137
+ const results = [];
138
+
139
+ for (let i = 0; i < queries.length; i++) {
140
+ results.push(this.#pick_one(queries[i]));
141
+ }
142
+
143
+ return results;
144
+ }
145
+
146
+ /**
147
+ * @param {PickingQuery} query
148
+ * @returns {PickingResult}
149
+ */
150
+ #pick_one(query) {
151
+ const result = new PickingResult();
152
+
153
+ const bvh = this.#bvh;
154
+
155
+ const origin = query.origin;
156
+ const direction = query.direction;
157
+
158
+ const origin_x = origin.x;
159
+ const origin_y = origin.y;
160
+ const origin_z = origin.z;
161
+
162
+ const hits = [];
163
+
164
+ const hit_count = bvh_query_leaves_generic(
165
+ hits, 0,
166
+ bvh, bvh.root,
167
+ BVHQueryIntersectsRay.from([
168
+ origin_x, origin_y, origin_z,
169
+ direction.x, direction.y, direction.z
170
+ ])
171
+ );
172
+
173
+ // reciprocals once for the whole batch of candidates; the entry-distance test wants them, and
174
+ // a division component that is zero deliberately produces an infinity it handles
175
+ const inv_x = 1 / direction.x;
176
+ const inv_y = 1 / direction.y;
177
+ const inv_z = 1 / direction.z;
178
+
179
+ let best_distance = query.max_distance;
180
+ let best_entity = PickingResult.NOTHING;
181
+
182
+ for (let i = 0; i < hit_count; i++) {
183
+ const leaf = hits[i];
184
+
185
+ bvh.node_get_aabb(leaf, SCRATCH_BOUNDS);
186
+
187
+ const distance = aabb3_ray_segment_entry_distance(
188
+ SCRATCH_BOUNDS[0], SCRATCH_BOUNDS[1], SCRATCH_BOUNDS[2],
189
+ SCRATCH_BOUNDS[3], SCRATCH_BOUNDS[4], SCRATCH_BOUNDS[5],
190
+ origin_x, origin_y, origin_z,
191
+ inv_x, inv_y, inv_z,
192
+ 0, query.max_distance
193
+ );
194
+
195
+ if (distance >= best_distance) {
196
+ // further than something already found, or a miss the broadphase let through
197
+ continue;
198
+ }
199
+
200
+ best_distance = distance;
201
+ best_entity = bvh.node_get_user_data(leaf);
202
+ }
203
+
204
+ if (best_entity === PickingResult.NOTHING) {
205
+ return result;
206
+ }
207
+
208
+ result.entity = best_entity;
209
+ result.distance = best_distance;
210
+
211
+ result.position.set(
212
+ origin_x + direction.x * best_distance,
213
+ origin_y + direction.y * best_distance,
214
+ origin_z + direction.z * best_distance
215
+ );
216
+
217
+ return result;
218
+ }
219
+
220
+ /**
221
+ * Bring every leaf in line with where its entity now is, and give a leaf to any entity whose
222
+ * model has arrived since the last look.
223
+ */
224
+ #refresh() {
225
+ const meshes = this.#meshes;
226
+
227
+ for (const [entity, leaf] of this.#leaves) {
228
+ if (meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
229
+ this.#bvh.node_move_aabb(leaf, SCRATCH_BOUNDS);
230
+
231
+ continue;
232
+ }
233
+
234
+ // the model went away under it — the entity is still pickable, so it goes back to
235
+ // waiting rather than losing its opt-in
236
+ this.#drop(entity);
237
+ this.#pending.add(entity);
238
+ }
239
+
240
+ for (const entity of Array.from(this.#pending)) {
241
+ if (!meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
242
+ continue;
243
+ }
244
+
245
+ const leaf = this.#bvh.allocate_node();
246
+
247
+ this.#bvh.node_set_aabb(leaf, SCRATCH_BOUNDS);
248
+ this.#bvh.node_set_user_data(leaf, entity);
249
+ this.#bvh.insert_leaf(leaf);
250
+
251
+ this.#leaves.set(entity, leaf);
252
+ this.#pending.delete(entity);
253
+ }
254
+ }
255
+
256
+ /**
257
+ * @param {number} entity
258
+ */
259
+ #drop(entity) {
260
+ this.#pending.delete(entity);
261
+
262
+ const leaf = this.#leaves.get(entity);
263
+
264
+ if (leaf === undefined) {
265
+ return;
266
+ }
267
+
268
+ this.#bvh.remove_leaf(leaf);
269
+ this.#bvh.release_node(leaf);
270
+
271
+ this.#leaves.delete(entity);
272
+ }
273
+ }
@@ -1,67 +1,10 @@
1
1
  /**
2
- * Answers "what is under this ray" for entities that asked to be pickable.
2
+ * @deprecated Renamed to {@link PickingSystem}. The trailing `3` marked the 2.x 3.x renderer transition;
3
+ * the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
3
4
  *
4
- * **Asynchronous and batched from the first line, on purpose (I-9).** The backend here is a CPU
5
- * bounding-volume hierarchy and could answer synchronously; the API does not let it, because the
6
- * backend this is meant to grow into reads entity ids back off the GPU's visibility buffer, and that
7
- * answer is inherently a frame late and arrives for a whole batch at once. A synchronous entry point
8
- * would have to be broken to get there, and every caller broken with it.
9
- *
10
- * **Bounding boxes, not triangles.** A hit means the ray entered the entity's world bounding box.
11
- * That is the precision this can offer for free — Shade maintains those boxes as part of drawing —
12
- * and going finer means keeping CPU-side triangles for every pickable entity, which is the
13
- * duplication {@link Pickable} exists to keep small. Terrain picking, which is where the game's
14
- * precision actually matters, does not come through here at all: it is an exact raycast against the
15
- * terrain's own representation and is untouched by any of this.
16
- *
17
- * The index is refreshed **on query rather than per frame**. Nothing pays for picking on a frame where
18
- * nobody picks, and there is no window in which the index disagrees with the scene, so no class of
19
- * bug where a pick lands on where something used to be.
5
+ * Kept as a re-export rather than removed: this is a library, and an import path is as much a
6
+ * published interface as a class name.
20
7
  */
21
- export class PickingSystem3 extends System<any> {
22
- /**
23
- * @param {MeshSystem3} meshes what an entity looks like, which is where its bounds come from
24
- */
25
- constructor(meshes: MeshSystem3);
26
- dependencies: (typeof Transform | typeof Pickable)[];
27
- startup(entityManager: any): Promise<void>;
28
- shutdown(entityManager: any): Promise<void>;
29
- /**
30
- * @param {Pickable} pickable
31
- * @param {Transform} transform
32
- * @param {number} entity
33
- */
34
- link(pickable: Pickable, transform: Transform, entity: number): void;
35
- /**
36
- * @param {Pickable} pickable
37
- * @param {Transform} transform
38
- * @param {number} entity
39
- */
40
- unlink(pickable: Pickable, transform: Transform, entity: number): void;
41
- /**
42
- * How many entities the index currently stands for.
43
- *
44
- * The index is built on query, so this is zero until the first {@link pick} — and stays behind by
45
- * however many pickable entities are still waiting on their models.
46
- *
47
- * @returns {number}
48
- */
49
- get indexed_count(): number;
50
- /**
51
- * What each of these rays hits first.
52
- *
53
- * One result per query, in the order the queries were given. A ray that hits nothing still gets a
54
- * result — `entity` is {@link PickingResult.NOTHING} — so the two arrays line up by position and a
55
- * caller never has to search for the answer to its own question.
56
- *
57
- * @param {PickingQuery[]} queries
58
- * @returns {Promise<PickingResult[]>}
59
- */
60
- pick(queries: PickingQuery[]): Promise<PickingResult[]>;
61
- #private;
62
- }
63
- import { System } from "../ecs/System.js";
64
- import { Transform } from "../ecs/transform/Transform.js";
65
- import { Pickable } from "./Pickable.js";
66
- import { PickingResult } from "./PickingResult.js";
8
+ export const PickingSystem3: typeof PickingSystem;
9
+ import { PickingSystem } from "./PickingSystem.js";
67
10
  //# sourceMappingURL=PickingSystem3.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PickingSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/PickingSystem3.js"],"names":[],"mappings":"AAiBA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IA2BI;;OAEG;IACH,iCAQC;IADG,qDAAyC;IAG7C,2CAEC;IAED,4CAMC;IAED;;;;OAIG;IACH,eAJW,QAAQ,aACR,SAAS,UACT,MAAM,QAMhB;IAED;;;;OAIG;IACH,iBAJW,QAAQ,aACR,SAAS,UACT,MAAM,QAIhB;IAED;;;;;;;OAOG;IACH,4BAEC;IAED;;;;;;;;;OASG;IACH,cAHW,cAAc,GACZ,QAAQ,aAAa,EAAE,CAAC,CAcpC;;CAiIJ;uBAzQsB,kBAAkB;0BACf,+BAA+B;yBAChC,eAAe;8BACV,oBAAoB"}
1
+ {"version":3,"file":"PickingSystem3.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/PickingSystem3.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,kDAA4C;8BATd,oBAAoB"}
@@ -1,273 +1,10 @@
1
- import { assert } from "../../core/assert.js";
2
- import { BVH } from "../../core/bvh2/bvh3/BVH.js";
3
- import {
4
- aabb3_ray_segment_entry_distance
5
- } from "../../core/geom/3d/aabb/aabb3_ray_segment_entry_distance.js";
6
- import { BVHQueryIntersectsRay } from "../../core/bvh2/bvh3/query/BVHQueryIntersectsRay.js";
7
- import { bvh_query_leaves_generic } from "../../core/bvh2/bvh3/query/bvh_query_leaves_generic.js";
8
- import { System } from "../ecs/System.js";
9
- import { Transform } from "../ecs/transform/Transform.js";
10
- import { Pickable } from "./Pickable.js";
11
- import { PickingResult } from "./PickingResult.js";
1
+ import { PickingSystem } from "./PickingSystem.js";
12
2
 
13
3
  /**
14
- * @type {Float32Array}
15
- */
16
- const SCRATCH_BOUNDS = new Float32Array(6);
17
-
18
- /**
19
- * Answers "what is under this ray" for entities that asked to be pickable.
20
- *
21
- * **Asynchronous and batched from the first line, on purpose (I-9).** The backend here is a CPU
22
- * bounding-volume hierarchy and could answer synchronously; the API does not let it, because the
23
- * backend this is meant to grow into reads entity ids back off the GPU's visibility buffer, and that
24
- * answer is inherently a frame late and arrives for a whole batch at once. A synchronous entry point
25
- * would have to be broken to get there, and every caller broken with it.
4
+ * @deprecated Renamed to {@link PickingSystem}. The trailing `3` marked the 2.x → 3.x renderer transition;
5
+ * the 2.x name it disambiguated against is gone, so the suffix no longer distinguishes anything.
26
6
  *
27
- * **Bounding boxes, not triangles.** A hit means the ray entered the entity's world bounding box.
28
- * That is the precision this can offer for free — Shade maintains those boxes as part of drawing —
29
- * and going finer means keeping CPU-side triangles for every pickable entity, which is the
30
- * duplication {@link Pickable} exists to keep small. Terrain picking, which is where the game's
31
- * precision actually matters, does not come through here at all: it is an exact raycast against the
32
- * terrain's own representation and is untouched by any of this.
33
- *
34
- * The index is refreshed **on query rather than per frame**. Nothing pays for picking on a frame where
35
- * nobody picks, and there is no window in which the index disagrees with the scene, so no class of
36
- * bug where a pick lands on where something used to be.
7
+ * Kept as a re-export rather than removed: this is a library, and an import path is as much a
8
+ * published interface as a class name.
37
9
  */
38
- export class PickingSystem3 extends System {
39
- /**
40
- * @type {MeshSystem3}
41
- */
42
- #meshes;
43
-
44
- /**
45
- * @type {BVH}
46
- */
47
- #bvh = new BVH();
48
-
49
- /**
50
- * The BVH leaf standing for each pickable entity.
51
- *
52
- * @type {Map<number, number>}
53
- */
54
- #leaves = new Map();
55
-
56
- /**
57
- * Entities that have opted in but have nothing in the scene yet — a model still loading, most
58
- * often. They hold no leaf, and every query looks again, which is what lets one appear without
59
- * anything having to notice the moment it did.
60
- *
61
- * @type {Set<number>}
62
- */
63
- #pending = new Set();
64
-
65
- /**
66
- * @param {MeshSystem3} meshes what an entity looks like, which is where its bounds come from
67
- */
68
- constructor(meshes) {
69
- super();
70
-
71
- assert.defined(meshes, 'meshes');
72
-
73
- this.#meshes = meshes;
74
-
75
- this.dependencies = [Pickable, Transform];
76
- }
77
-
78
- async startup(entityManager) {
79
- this.entityManager = entityManager;
80
- }
81
-
82
- async shutdown(entityManager) {
83
- for (const entity of Array.from(this.#leaves.keys())) {
84
- this.#drop(entity);
85
- }
86
-
87
- this.#pending.clear();
88
- }
89
-
90
- /**
91
- * @param {Pickable} pickable
92
- * @param {Transform} transform
93
- * @param {number} entity
94
- */
95
- link(pickable, transform, entity) {
96
- // no bounds are taken here: the model may not have arrived, and the first query is early
97
- // enough to find out
98
- this.#pending.add(entity);
99
- }
100
-
101
- /**
102
- * @param {Pickable} pickable
103
- * @param {Transform} transform
104
- * @param {number} entity
105
- */
106
- unlink(pickable, transform, entity) {
107
- this.#drop(entity);
108
- }
109
-
110
- /**
111
- * How many entities the index currently stands for.
112
- *
113
- * The index is built on query, so this is zero until the first {@link pick} — and stays behind by
114
- * however many pickable entities are still waiting on their models.
115
- *
116
- * @returns {number}
117
- */
118
- get indexed_count() {
119
- return this.#leaves.size;
120
- }
121
-
122
- /**
123
- * What each of these rays hits first.
124
- *
125
- * One result per query, in the order the queries were given. A ray that hits nothing still gets a
126
- * result — `entity` is {@link PickingResult.NOTHING} — so the two arrays line up by position and a
127
- * caller never has to search for the answer to its own question.
128
- *
129
- * @param {PickingQuery[]} queries
130
- * @returns {Promise<PickingResult[]>}
131
- */
132
- async pick(queries) {
133
- assert.isArray(queries, 'queries');
134
-
135
- this.#refresh();
136
-
137
- const results = [];
138
-
139
- for (let i = 0; i < queries.length; i++) {
140
- results.push(this.#pick_one(queries[i]));
141
- }
142
-
143
- return results;
144
- }
145
-
146
- /**
147
- * @param {PickingQuery} query
148
- * @returns {PickingResult}
149
- */
150
- #pick_one(query) {
151
- const result = new PickingResult();
152
-
153
- const bvh = this.#bvh;
154
-
155
- const origin = query.origin;
156
- const direction = query.direction;
157
-
158
- const origin_x = origin.x;
159
- const origin_y = origin.y;
160
- const origin_z = origin.z;
161
-
162
- const hits = [];
163
-
164
- const hit_count = bvh_query_leaves_generic(
165
- hits, 0,
166
- bvh, bvh.root,
167
- BVHQueryIntersectsRay.from([
168
- origin_x, origin_y, origin_z,
169
- direction.x, direction.y, direction.z
170
- ])
171
- );
172
-
173
- // reciprocals once for the whole batch of candidates; the entry-distance test wants them, and
174
- // a division component that is zero deliberately produces an infinity it handles
175
- const inv_x = 1 / direction.x;
176
- const inv_y = 1 / direction.y;
177
- const inv_z = 1 / direction.z;
178
-
179
- let best_distance = query.max_distance;
180
- let best_entity = PickingResult.NOTHING;
181
-
182
- for (let i = 0; i < hit_count; i++) {
183
- const leaf = hits[i];
184
-
185
- bvh.node_get_aabb(leaf, SCRATCH_BOUNDS);
186
-
187
- const distance = aabb3_ray_segment_entry_distance(
188
- SCRATCH_BOUNDS[0], SCRATCH_BOUNDS[1], SCRATCH_BOUNDS[2],
189
- SCRATCH_BOUNDS[3], SCRATCH_BOUNDS[4], SCRATCH_BOUNDS[5],
190
- origin_x, origin_y, origin_z,
191
- inv_x, inv_y, inv_z,
192
- 0, query.max_distance
193
- );
194
-
195
- if (distance >= best_distance) {
196
- // further than something already found, or a miss the broadphase let through
197
- continue;
198
- }
199
-
200
- best_distance = distance;
201
- best_entity = bvh.node_get_user_data(leaf);
202
- }
203
-
204
- if (best_entity === PickingResult.NOTHING) {
205
- return result;
206
- }
207
-
208
- result.entity = best_entity;
209
- result.distance = best_distance;
210
-
211
- result.position.set(
212
- origin_x + direction.x * best_distance,
213
- origin_y + direction.y * best_distance,
214
- origin_z + direction.z * best_distance
215
- );
216
-
217
- return result;
218
- }
219
-
220
- /**
221
- * Bring every leaf in line with where its entity now is, and give a leaf to any entity whose
222
- * model has arrived since the last look.
223
- */
224
- #refresh() {
225
- const meshes = this.#meshes;
226
-
227
- for (const [entity, leaf] of this.#leaves) {
228
- if (meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
229
- this.#bvh.node_move_aabb(leaf, SCRATCH_BOUNDS);
230
-
231
- continue;
232
- }
233
-
234
- // the model went away under it — the entity is still pickable, so it goes back to
235
- // waiting rather than losing its opt-in
236
- this.#drop(entity);
237
- this.#pending.add(entity);
238
- }
239
-
240
- for (const entity of Array.from(this.#pending)) {
241
- if (!meshes.compute_world_bounds(SCRATCH_BOUNDS, entity)) {
242
- continue;
243
- }
244
-
245
- const leaf = this.#bvh.allocate_node();
246
-
247
- this.#bvh.node_set_aabb(leaf, SCRATCH_BOUNDS);
248
- this.#bvh.node_set_user_data(leaf, entity);
249
- this.#bvh.insert_leaf(leaf);
250
-
251
- this.#leaves.set(entity, leaf);
252
- this.#pending.delete(entity);
253
- }
254
- }
255
-
256
- /**
257
- * @param {number} entity
258
- */
259
- #drop(entity) {
260
- this.#pending.delete(entity);
261
-
262
- const leaf = this.#leaves.get(entity);
263
-
264
- if (leaf === undefined) {
265
- return;
266
- }
267
-
268
- this.#bvh.remove_leaf(leaf);
269
- this.#bvh.release_node(leaf);
270
-
271
- this.#leaves.delete(entity);
272
- }
273
- }
10
+ export const PickingSystem3 = PickingSystem;
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Puts one primitive into Shade's scene, and keeps it where the entity says.
3
+ *
4
+ * **The component and the row are the same shape, which is the whole reason this system is short.**
5
+ * `ShadedGeometry` is a geometry, a material and a flat transform — *"not a hierarchical data
6
+ * structure"*, in its own docblock — and Shade's `Mesh` is a `Node3D` carrying a `MeshletGeometry`
7
+ * and a `ShadeMaterial`. §4.3 asks for exactly that mapping, 1:1, and there is nothing else to do.
8
+ *
9
+ * **What it is not is a model.** A model file is many primitives arranged in a hierarchy, and in an
10
+ * ECS a hierarchy is entities — one per node, parented through `EntityNode`, each carrying its own
11
+ * `ShadedGeometry` where it draws (D47). `SGMesh` is the layer that expands a loaded file into
12
+ * those entities; this system never sees the file, only the primitives that came out of it, and
13
+ * cannot tell them from primitives some tool built by hand.
14
+ *
15
+ * **The payload is the renderer's own.** Under three the same component holds a `BufferGeometry`
16
+ * and a three `Material`, and `ShadedGeometrySystem` reads those; here it holds Shade's pair. One
17
+ * renderer runs at a time and each system reads what its own renderer draws — the same bargain the
18
+ * v1 component made with `Mesh.mesh`, and not a neutral geometry format, which would be a redesign
19
+ * rather than a transition.
20
+ */
21
+ export class ShadedGeometrySystem extends System<any> {
22
+ /**
23
+ * @param {GraphicsEngine} graphics
24
+ * @param {Scene} scene
25
+ */
26
+ constructor(graphics: GraphicsEngine, scene: Scene);
27
+ dependencies: (typeof Transform | typeof ShadedGeometry)[];
28
+ startup(entityManager: any): Promise<void>;
29
+ shutdown(entityManager: any): Promise<void>;
30
+ /**
31
+ * @param {ShadedGeometry} geometry
32
+ * @param {Transform} transform
33
+ * @param {number} entity
34
+ */
35
+ link(geometry: ShadedGeometry, transform: Transform, entity: number): void;
36
+ /**
37
+ * @param {ShadedGeometry} geometry
38
+ * @param {Transform} transform
39
+ * @param {number} entity
40
+ */
41
+ unlink(geometry: ShadedGeometry, transform: Transform, entity: number): void;
42
+ #private;
43
+ }
44
+ import { System } from "../ecs/System.js";
45
+ import { Transform } from "../ecs/transform/Transform.js";
46
+ import { ShadedGeometry } from "../graphics/ecs/mesh-v2/ShadedGeometry.js";
47
+ //# sourceMappingURL=ShadedGeometrySystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShadedGeometrySystem.d.ts","sourceRoot":"","sources":["../../../../src/engine/graphics3/ShadedGeometrySystem.js"],"names":[],"mappings":"AASA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAkBI;;;OAGG;IACH,oDAUC;IADG,2DAA+C;IAGnD,2CAEC;IAED,4CAIC;IAED;;;;OAIG;IACH,eAJW,cAAc,aACd,SAAS,UACT,MAAM,QA2ChB;IAED;;;;OAIG;IACH,iBAJW,cAAc,aACd,SAAS,UACT,MAAM,QAMhB;;CAsCJ;uBApKsB,kBAAkB;0BACf,+BAA+B;+BAE1B,2CAA2C"}