@woosh/meep-engine 3.23.0 → 3.24.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 (522) hide show
  1. package/editor/entity_world_bounds.d.ts +9 -3
  2. package/editor/entity_world_bounds.d.ts.map +1 -1
  3. package/editor/entity_world_bounds.js +61 -4
  4. package/package.json +1 -1
  5. package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
  6. package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
  7. package/src/core/binary/allocator/OffsetAllocator.js +124 -29
  8. package/src/core/collection/map/u32_index.d.ts +83 -0
  9. package/src/core/collection/map/u32_index.d.ts.map +1 -0
  10. package/src/core/collection/map/u32_index.js +247 -0
  11. package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
  12. package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
  13. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
  14. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
  15. package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
  16. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
  17. package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
  18. package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
  19. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
  20. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
  21. package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
  22. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
  23. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
  24. package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
  25. package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
  26. package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
  27. package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
  28. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
  29. package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
  30. package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
  31. package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
  32. package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
  33. package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
  34. package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
  35. package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
  36. package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
  37. package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
  38. package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
  39. package/src/engine/ecs/ik/IKProblem.js +16 -0
  40. package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
  41. package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
  42. package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
  43. package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
  44. package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
  45. package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
  46. package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
  47. package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
  48. package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
  49. package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
  50. package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
  51. package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
  52. package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
  53. package/src/engine/ecs/transform/T64WorldCache.js +139 -0
  54. package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
  55. package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
  56. package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
  57. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
  58. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
  59. package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
  60. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
  61. package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
  62. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
  63. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
  64. package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
  65. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
  66. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
  67. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
  68. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
  69. package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
  70. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
  71. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
  72. package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
  73. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
  74. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
  75. package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
  76. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
  77. package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
  78. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
  79. package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
  80. package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
  81. package/src/engine/graphics3/AnimationSystem.js +2 -2
  82. package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
  83. package/src/engine/graphics3/DebugDrawSystem.js +2 -4
  84. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
  85. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  86. package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
  87. package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
  88. package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
  89. package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
  90. package/src/engine/graphics3/LightSystem.d.ts +7 -5
  91. package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
  92. package/src/engine/graphics3/LightSystem.js +36 -22
  93. package/src/engine/graphics3/MeshSystem.d.ts +43 -39
  94. package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
  95. package/src/engine/graphics3/MeshSystem.js +324 -331
  96. package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
  97. package/src/engine/graphics3/PathDisplaySystem.js +2 -4
  98. package/src/engine/graphics3/PickingQuery.d.ts +15 -21
  99. package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
  100. package/src/engine/graphics3/PickingQuery.js +21 -25
  101. package/src/engine/graphics3/PickingSystem.d.ts +60 -31
  102. package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
  103. package/src/engine/graphics3/PickingSystem.js +416 -273
  104. package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
  105. package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
  106. package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
  107. package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
  108. package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
  109. package/src/engine/graphics3/TerrainSystem.js +102 -53
  110. package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
  111. package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
  112. package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
  113. package/src/engine/graphics3/Trail3DSystem.js +2 -4
  114. package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
  115. package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
  116. package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
  117. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
  118. package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
  119. package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
  120. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
  121. package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
  122. package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
  123. package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
  124. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
  125. package/src/engine/graphics3/prefab/Prefab.js +162 -0
  126. package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
  127. package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
  128. package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
  129. package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
  130. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
  131. package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
  132. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
  133. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
  134. package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
  135. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
  136. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
  137. package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
  138. package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
  139. package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
  140. package/src/engine/graphics3/prefab/prefab_place.js +130 -0
  141. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
  142. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
  143. package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
  144. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
  145. package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
  146. package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
  147. package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
  148. package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
  149. package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
  150. package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
  151. package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
  152. package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
  153. package/src/engine/graphics3/register_instance_animation.js +4 -4
  154. package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
  155. package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
  156. package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
  157. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
  158. package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
  159. package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
  160. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
  161. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
  162. package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
  163. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +13 -15
  164. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  165. package/src/engine/physics/cloth/ecs/ClothInstance.js +12 -14
  166. package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
  167. package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
  168. package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
  169. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +5 -4
  170. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  171. package/src/engine/physics/cloth/ecs/ClothSystem.js +11 -12
  172. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
  173. package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
  174. package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
  175. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
  176. package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
  177. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
  178. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
  179. package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
  180. package/src/engine/physics/cloth/playground/README.md +11 -11
  181. package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
  182. package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
  183. package/src/engine/physics/cloth/playground/garment_build.js +64 -58
  184. package/src/engine/physics/cloth/playground/garment_main.js +59 -33
  185. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  186. package/src/shade/RENDERER_CONTRACT.md +85 -53
  187. package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
  188. package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
  189. package/src/shade/device/ShadeGPUCommandContext.js +36 -0
  190. package/src/shade/playground/add_random_meshes.d.ts +4 -4
  191. package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
  192. package/src/shade/playground/add_random_meshes.js +20 -16
  193. package/src/shade/playground/avboit/main.d.ts +1 -0
  194. package/src/shade/playground/avboit/main.d.ts.map +1 -1
  195. package/src/shade/playground/avboit/main.js +916 -875
  196. package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
  197. package/src/shade/playground/basis_textures/main.js +22 -8
  198. package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
  199. package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
  200. package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
  201. package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
  202. package/src/shade/playground/ground_seam/main.js +13 -4
  203. package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
  204. package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
  205. package/src/shade/playground/ground_seam/make_ground.js +21 -16
  206. package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
  207. package/src/shade/playground/particle_system/main.js +11 -10
  208. package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
  209. package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
  210. package/src/shade/playground/particle_system/particle_prototype.js +56 -15
  211. package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
  212. package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
  213. package/src/shade/playground/particle_system/particle_scene.js +149 -53
  214. package/src/shade/playground/readback_crossover/index.html +41 -0
  215. package/src/shade/playground/readback_crossover/main.d.ts +2 -0
  216. package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
  217. package/src/shade/playground/readback_crossover/main.js +372 -0
  218. package/src/shade/playground/skinned_blas_refit/README.md +11 -7
  219. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
  220. package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
  221. package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
  222. package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
  223. package/src/shade/playground/skinned_blas_refit/main.js +67 -58
  224. package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
  225. package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
  226. package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
  227. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
  228. package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
  229. package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
  230. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
  231. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
  232. package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
  233. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
  234. package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
  235. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
  236. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
  237. package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
  238. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
  239. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
  240. package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
  241. package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
  242. package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
  243. package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
  244. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
  245. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
  246. package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
  247. package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
  248. package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
  249. package/src/shade/playground/sponza_path_trace/main.js +393 -363
  250. package/src/shade/playground/ssr_reprojection/main.js +11 -9
  251. package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
  252. package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
  253. package/src/shade/playground/ssr_reprojection/scene.js +32 -11
  254. package/src/shade/playground/ssr_variance/main.js +1 -1
  255. package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
  256. package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
  257. package/src/shade/playground/ssr_variance/scene.js +39 -15
  258. package/src/shade/playground/vgeo_viewer/main.js +6 -2
  259. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  260. package/src/shade/playground/volumetrics_froxel/main.js +936 -922
  261. package/src/shade/renderer/GraphicsContext.d.ts +7 -0
  262. package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
  263. package/src/shade/renderer/GraphicsContext.js +11 -0
  264. package/src/shade/renderer/Renderer.d.ts +3 -2
  265. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  266. package/src/shade/renderer/Renderer.js +3 -2
  267. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
  268. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  269. package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
  270. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
  271. package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
  272. package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
  273. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
  274. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  275. package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
  276. package/src/shade/renderer/animation/Skin.d.ts +19 -19
  277. package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
  278. package/src/shade/renderer/animation/Skin.js +15 -13
  279. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
  280. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  281. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
  282. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
  283. package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
  284. package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
  285. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
  286. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
  287. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
  288. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
  289. package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
  290. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
  291. package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
  292. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
  293. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
  294. package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
  295. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
  296. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  297. package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
  298. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
  299. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
  300. package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
  301. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
  302. package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
  303. package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
  304. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +96 -0
  305. package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +1 -0
  306. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
  307. package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
  308. package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
  309. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
  310. package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
  311. package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
  312. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
  313. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
  314. package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
  315. package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
  316. package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
  317. package/src/shade/renderer/buffer/table/WordViews.js +62 -0
  318. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
  319. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
  320. package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
  321. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
  322. package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
  323. package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
  324. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  325. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
  326. package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
  327. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
  328. package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
  329. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
  330. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
  331. package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
  332. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
  333. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
  334. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
  335. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
  336. package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
  337. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
  338. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  339. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
  340. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
  341. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
  342. package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
  343. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
  344. package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
  345. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
  346. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
  347. package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
  348. package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
  349. package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
  350. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  351. package/src/shade/renderer/light/GPULightCollection.js +444 -329
  352. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
  353. package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
  354. package/src/shade/renderer/light/LightCollection.d.ts +29 -1
  355. package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
  356. package/src/shade/renderer/light/LightCollection.js +50 -1
  357. package/src/shade/renderer/light/make_sunlight.js +2 -2
  358. package/src/shade/renderer/light/model/Light.d.ts +29 -2
  359. package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
  360. package/src/shade/renderer/light/model/Light.js +30 -2
  361. package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
  362. package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
  363. package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
  364. package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
  365. package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
  366. package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
  367. package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
  368. package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
  369. package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
  370. package/src/shade/renderer/light/place_light.d.ts +16 -0
  371. package/src/shade/renderer/light/place_light.d.ts.map +1 -0
  372. package/src/shade/renderer/light/place_light.js +36 -0
  373. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
  374. package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
  375. package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
  376. package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
  377. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
  378. package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
  379. package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
  380. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  381. package/src/shade/renderer/loader/SceneBundle.js +111 -56
  382. package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
  383. package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
  384. package/src/shade/renderer/loader/SceneNode.js +114 -0
  385. package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
  386. package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
  387. package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
  388. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  389. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
  390. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
  391. package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
  392. package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
  393. package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
  394. package/src/shade/renderer/loader/usd/load_usd.js +4 -5
  395. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
  396. package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
  397. package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
  398. package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
  399. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
  400. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  401. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
  402. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
  403. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
  404. package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
  405. package/src/shade/renderer/particles/DESIGN.md +53 -50
  406. package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
  407. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  408. package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
  409. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
  410. package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
  411. package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
  412. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
  413. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
  414. package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
  415. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
  416. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  417. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
  418. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
  419. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
  420. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  421. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
  422. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
  423. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
  424. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
  425. package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +1 -1
  426. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
  427. package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
  428. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
  429. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
  430. package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
  431. package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
  432. package/src/shade/renderer/scene/DynamicMesh.js +14 -4
  433. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
  434. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  435. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
  436. package/src/shade/renderer/scene/GPUSceneContext.d.ts +55 -48
  437. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  438. package/src/shade/renderer/scene/GPUSceneContext.js +594 -928
  439. package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
  440. package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
  441. package/src/shade/renderer/scene/Node3D.d.ts +27 -8
  442. package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
  443. package/src/shade/renderer/scene/Node3DDirtyList.d.ts +59 -0
  444. package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +1 -0
  445. package/src/shade/renderer/scene/Scene.d.ts +18 -60
  446. package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
  447. package/src/shade/renderer/scene/Scene.js +53 -146
  448. package/src/shade/renderer/scene/SkinnedMesh.d.ts +10 -93
  449. package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
  450. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
  451. package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
  452. package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
  453. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
  454. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
  455. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
  456. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
  457. package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
  458. package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
  459. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
  460. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
  461. package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
  462. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
  463. package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
  464. package/src/shade/renderer/scene/rows/GPUSceneRows.js +1136 -0
  465. package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
  466. package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
  467. package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
  468. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
  469. package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
  470. package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
  471. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
  472. package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
  473. package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
  474. package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
  475. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
  476. package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
  477. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
  478. package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
  479. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
  480. package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
  481. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
  482. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
  483. package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
  484. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
  485. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
  486. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
  487. package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
  488. package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
  489. package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
  490. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
  491. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
  492. package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
  493. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
  494. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
  495. package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
  496. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
  497. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
  498. package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
  499. package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
  500. package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
  501. package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
  502. package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
  503. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
  504. package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
  505. package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
  506. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  507. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
  508. package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
  509. package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
  510. package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
  511. package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
  512. package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
  513. package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
  514. package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
  515. package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
  516. package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
  517. package/src/shade/renderer/scene/InstanceBatch.js +0 -235
  518. package/src/shade/renderer/scene/Mesh.js +0 -168
  519. package/src/shade/renderer/scene/Node3D.js +0 -263
  520. package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
  521. package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
  522. package/src/shade/renderer/scene/TransformAuthority.js +0 -33
@@ -62,7 +62,7 @@ export class PointLightShadowmap extends Shadowmap {
62
62
  assert.defined(scene_ctx, 'scene_ctx');
63
63
 
64
64
  const light = this.light;
65
- const t = light.transform_global;
65
+ const t = light.transform;
66
66
  const px = t.translation_x;
67
67
  const py = t.translation_y;
68
68
  const pz = t.translation_z;
@@ -24,7 +24,7 @@ export class SpotLightShadowmap extends Shadowmap {
24
24
 
25
25
  // both sides are Transform64 now, so this is one buffer copy rather than a component-by-
26
26
  // component transfer across two representations
27
- camera.transform.copy(light.transform_global);
27
+ camera.transform.copy(light.transform);
28
28
 
29
29
  camera.fov = light.angle * 2;
30
30
  camera.aspect = 1;
@@ -38,7 +38,7 @@ export class TetrahedronPointLightShadowmap extends Shadowmap {
38
38
  assert.defined(scene_ctx, 'scene_ctx');
39
39
 
40
40
  const light = this.light;
41
- const t = light.transform_global;
41
+ const t = light.transform;
42
42
  const px = t.translation_x;
43
43
  const py = t.translation_y;
44
44
  const pz = t.translation_z;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * What the caster-range pass publishes for one directional shadow map: per cascade, how near
3
+ * along the light's axis the nearest shadow caster inside the cascade's side planes reaches.
4
+ *
5
+ * A row of the light database's `shadow_csm_caster_range` table, written on the GPU by
6
+ * `shader_csm_caster_range_publish` and read back to the CPU, which fits the next frame's cascade
7
+ * near plane to it. The CPU writes it once, at {@link CSM_CASTER_RANGE_UNKNOWN}, when the row is
8
+ * claimed; a cascade nothing was measured for keeps that value, and a reader treats it as "no
9
+ * caster".
10
+ *
11
+ * @type {WebGPUStruct}
12
+ */
13
+ export const CSM_CASTER_RANGE_STRUCT: WebGPUStruct;
14
+ /**
15
+ * The largest finite f32: what a cascade's slot holds before anything is merged into it, and after
16
+ * the publish reset it. Not +inf, because WGSL will not const-fold `bitcast<f32>(0x7F800000u)`;
17
+ * no world coordinate comes within orders of magnitude of it.
18
+ *
19
+ * @type {number}
20
+ */
21
+ export const CSM_CASTER_RANGE_UNKNOWN: number;
22
+ /**
23
+ * {@link CSM_CASTER_RANGE_UNKNOWN} as the u32 bit pattern a scratch word is seeded with.
24
+ *
25
+ * @type {number}
26
+ */
27
+ export const CSM_CASTER_RANGE_UNKNOWN_BITS: number;
28
+ import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
29
+ //# sourceMappingURL=CSM_CASTER_RANGE_STRUCT.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CSM_CASTER_RANGE_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,sCAFU,YAAY,CAUM;AAE5B;;;;;;GAMG;AACH,uCAFU,MAAM,CAEoC;AAEpD;;;;GAIG;AACH,4CAFU,MAAM,CAEwC;6BAvC3B,sCAAsC"}
@@ -0,0 +1,43 @@
1
+ import { FLOAT32_MAX } from "../../../../../core/binary/FLOAT32_MAX.js";
2
+ import { f32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
3
+ import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
4
+ import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
5
+ import { SHADOWMAP_CSM_CASCADE_COUNT } from "./SHADOWMAP_CSM_CASCADE_COUNT.js";
6
+
7
+ /**
8
+ * What the caster-range pass publishes for one directional shadow map: per cascade, how near
9
+ * along the light's axis the nearest shadow caster inside the cascade's side planes reaches.
10
+ *
11
+ * A row of the light database's `shadow_csm_caster_range` table, written on the GPU by
12
+ * `shader_csm_caster_range_publish` and read back to the CPU, which fits the next frame's cascade
13
+ * near plane to it. The CPU writes it once, at {@link CSM_CASTER_RANGE_UNKNOWN}, when the row is
14
+ * claimed; a cascade nothing was measured for keeps that value, and a reader treats it as "no
15
+ * caster".
16
+ *
17
+ * @type {WebGPUStruct}
18
+ */
19
+ export const CSM_CASTER_RANGE_STRUCT = WebGPUStruct.from({
20
+ /**
21
+ * Per cascade, `min(dot(light_z_axis, corner))` over the corners of every mesh row's world
22
+ * bounds that intersect the cascade's four side planes — measured from the world origin, so
23
+ * that a cascade whose centre moved between the frame it was measured for and the frame it is
24
+ * applied to can add its own translation.
25
+ */
26
+ near: WebGPUArray.from(f32, SHADOWMAP_CSM_CASCADE_COUNT),
27
+ }, "CSMCasterRange").pack();
28
+
29
+ /**
30
+ * The largest finite f32: what a cascade's slot holds before anything is merged into it, and after
31
+ * the publish reset it. Not +inf, because WGSL will not const-fold `bitcast<f32>(0x7F800000u)`;
32
+ * no world coordinate comes within orders of magnitude of it.
33
+ *
34
+ * @type {number}
35
+ */
36
+ export const CSM_CASTER_RANGE_UNKNOWN = FLOAT32_MAX;
37
+
38
+ /**
39
+ * {@link CSM_CASTER_RANGE_UNKNOWN} as the u32 bit pattern a scratch word is seeded with.
40
+ *
41
+ * @type {number}
42
+ */
43
+ export const CSM_CASTER_RANGE_UNKNOWN_BITS = 0x7F7FFFFF;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * How far past the measured nearest caster a cascade's near plane is pushed, as a fraction of the
3
+ * cascade's own depth.
4
+ *
5
+ * The caster range is measured on the GPU against one frame's cascade frusta and applied to the
6
+ * next frame's — a frame of camera motion between them, and a frame of caster motion too. The
7
+ * margin is what keeps a caster that edged past the measured range from flickering in and out of
8
+ * shadow; a GPU-built cascade matrix is the fix if it ever shows.
9
+ *
10
+ * @type {number}
11
+ */
12
+ export const SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION: number;
13
+ //# sourceMappingURL=SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,yDAFU,MAAM,CAE8C"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * How far past the measured nearest caster a cascade's near plane is pushed, as a fraction of the
3
+ * cascade's own depth.
4
+ *
5
+ * The caster range is measured on the GPU against one frame's cascade frusta and applied to the
6
+ * next frame's — a frame of camera motion between them, and a frame of caster motion too. The
7
+ * margin is what keeps a caster that edged past the measured range from flickering in and out of
8
+ * shadow; a GPU-built cascade matrix is the fix if it ever shows.
9
+ *
10
+ * @type {number}
11
+ */
12
+ export const SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION = 0.1;
@@ -0,0 +1,49 @@
1
+ export const CSM_CASTER_RANGE_WORKGROUP_SIZE: number;
2
+ /**
3
+ * What one directional shadow map's accumulate pass runs with: the frusta the CPU fitted this
4
+ * frame, and where in the scratch buffer this map's cascades accumulate.
5
+ *
6
+ * @type {WebGPUStruct}
7
+ */
8
+ export const CSM_CASTER_RANGE_SETTINGS_STRUCT: WebGPUStruct;
9
+ /**
10
+ * What the publish pass runs with.
11
+ *
12
+ * @type {WebGPUStruct}
13
+ */
14
+ export const CSM_CASTER_RANGE_PUBLISH_STRUCT: WebGPUStruct;
15
+ /**
16
+ * Measure how near along the light every mesh row's world bounds reach, per cascade, over the
17
+ * rows that intersect the cascade's side planes.
18
+ *
19
+ * **This is what makes the cascade's near plane the GPU's to fit.** The CPU used to walk its own
20
+ * copy of the scene's bounds tree to tighten each cascade's near plane against the casters between
21
+ * the light and the view slice; that copy does not exist for a row the GPU composes — a skinned
22
+ * character under a clip, a subtree the CPU stopped composing — so the measure is taken where the
23
+ * bounds are: the `meshes` table, one thread per occupied row, after the bounds pass has refreshed
24
+ * it for the frame. The result is read back and applied to the next frame's fit, with a margin.
25
+ *
26
+ * The test per cascade is the one the tree walk made: a box survives the four fixed side planes if
27
+ * its corner furthest along each plane's normal is inside; the plane a survivor pushes is the
28
+ * near one, to the box corner nearest along the light's axis. Per-thread CAS minimum rather than
29
+ * a subgroup reduction first, because a scene has hundreds of rows and three cascades, and the
30
+ * same CAS helper already bounds the skinned meshes.
31
+ *
32
+ * Dispatch with {@link GPUTypedTable#dispatch_group_count} of the `meshes` table at
33
+ * {@link CSM_CASTER_RANGE_WORKGROUP_SIZE}, once per directional shadow map being drawn.
34
+ *
35
+ * @type {ComputeShader}
36
+ */
37
+ export const shader_csm_caster_range_accumulate: ComputeShader;
38
+ /**
39
+ * Copy one map's accumulated ranges into its row of the light database's `shadow_csm_caster_range`
40
+ * table — where the readback reads them from — and reset the scratch for the next frame.
41
+ *
42
+ * One workgroup, one thread: the row is one record, written whole.
43
+ *
44
+ * @type {ComputeShader}
45
+ */
46
+ export const shader_csm_caster_range_publish: ComputeShader;
47
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
48
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
49
+ //# sourceMappingURL=shader_csm_caster_range.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shader_csm_caster_range.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js"],"names":[],"mappings":"AAaA,qDAAiF;AAEjF;;;;;GAKG;AACH,+CAFU,YAAY,CAmBc;AAEpC;;;;GAIG;AACH,8CAFU,YAAY,CAQa;AAenC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iDAFU,aAAa,CA2DpB;AAUH;;;;;;;GAOG;AACH,8CAFU,aAAa,CAgCpB;6BA/L0B,yCAAyC;8BAGxC,qCAAqC"}
@@ -0,0 +1,194 @@
1
+ import { atomic_u32, u32, vec4f } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
+ import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
3
+ import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
4
+ import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
5
+ import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
6
+ import { ComputeShader } from "../../../../shader/ComputeShader.js";
7
+ import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
8
+ import { chunk_aabb_atomic_f32 } from "../../../../animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.js";
9
+ import { LIGHT_DATABASE_SPEC } from "../../../../light/LIGHT_DATABASE_SPEC.js";
10
+ import { MESHES_TABLE } from "../../../../scene/chunk_scene_database_access.js";
11
+ import { CSM_CASTER_RANGE_UNKNOWN } from "../CSM_CASTER_RANGE_STRUCT.js";
12
+ import { SHADOWMAP_CSM_CASCADE_COUNT } from "../SHADOWMAP_CSM_CASCADE_COUNT.js";
13
+
14
+ export const CSM_CASTER_RANGE_WORKGROUP_SIZE = COMPUTE_SHADER_DEFAULT_GROUP_SIZE;
15
+
16
+ /**
17
+ * What one directional shadow map's accumulate pass runs with: the frusta the CPU fitted this
18
+ * frame, and where in the scratch buffer this map's cascades accumulate.
19
+ *
20
+ * @type {WebGPUStruct}
21
+ */
22
+ export const CSM_CASTER_RANGE_SETTINGS_STRUCT = WebGPUStruct.from({
23
+ /**
24
+ * The light's z axis in world space — the axis a caster's light-view depth is measured along —
25
+ * without the cascade's own translation, which the CPU adds back when it applies the range.
26
+ * `w` is unused.
27
+ */
28
+ z_axis: vec4f,
29
+ /**
30
+ * The four side planes of each cascade's light frustum, four per cascade in cascade order,
31
+ * inward: `dot(n, p) + w >= 0` is inside. Not normalized, and they need not be.
32
+ */
33
+ planes: WebGPUArray.from(vec4f, SHADOWMAP_CSM_CASCADE_COUNT * 4),
34
+ /**
35
+ * First scratch word of this map's cascades: cascade `c` accumulates into `base + c`.
36
+ */
37
+ base: u32,
38
+ cascade_count: u32,
39
+ }, "CSMCasterRangeSettings").pack();
40
+
41
+ /**
42
+ * What the publish pass runs with.
43
+ *
44
+ * @type {WebGPUStruct}
45
+ */
46
+ export const CSM_CASTER_RANGE_PUBLISH_STRUCT = WebGPUStruct.from({
47
+ /** the map's row of the light database's `shadow_csm_caster_range` table */
48
+ row: u32,
49
+ /** see {@link CSM_CASTER_RANGE_SETTINGS_STRUCT#base} */
50
+ base: u32,
51
+ cascade_count: u32,
52
+ }, "CSMCasterRangePublish").pack();
53
+
54
+ const WG = CSM_CASTER_RANGE_WORKGROUP_SIZE;
55
+ const PG = MESHES_TABLE.page_iterator_symbol_prefix(WG);
56
+ const RANGE_TABLE = LIGHT_DATABASE_SPEC.get('shadow_csm_caster_range');
57
+
58
+ const accumulate_resources = new ShaderResourceSetDescriptor();
59
+
60
+ accumulate_resources.createGroup()
61
+ .addStorageBuffer('scene_database', WebGPUArray.from(u32), false)
62
+ .addUniform('settings', CSM_CASTER_RANGE_SETTINGS_STRUCT)
63
+ // one word per cascade per map, holding plain f32 bit patterns, seeded to the largest finite
64
+ // f32 and reset to it by the publish
65
+ .addStorageBuffer('ranges', WebGPUArray.from(atomic_u32), true);
66
+
67
+ /**
68
+ * Measure how near along the light every mesh row's world bounds reach, per cascade, over the
69
+ * rows that intersect the cascade's side planes.
70
+ *
71
+ * **This is what makes the cascade's near plane the GPU's to fit.** The CPU used to walk its own
72
+ * copy of the scene's bounds tree to tighten each cascade's near plane against the casters between
73
+ * the light and the view slice; that copy does not exist for a row the GPU composes — a skinned
74
+ * character under a clip, a subtree the CPU stopped composing — so the measure is taken where the
75
+ * bounds are: the `meshes` table, one thread per occupied row, after the bounds pass has refreshed
76
+ * it for the frame. The result is read back and applied to the next frame's fit, with a margin.
77
+ *
78
+ * The test per cascade is the one the tree walk made: a box survives the four fixed side planes if
79
+ * its corner furthest along each plane's normal is inside; the plane a survivor pushes is the
80
+ * near one, to the box corner nearest along the light's axis. Per-thread CAS minimum rather than
81
+ * a subgroup reduction first, because a scene has hundreds of rows and three cascades, and the
82
+ * same CAS helper already bounds the skinned meshes.
83
+ *
84
+ * Dispatch with {@link GPUTypedTable#dispatch_group_count} of the `meshes` table at
85
+ * {@link CSM_CASTER_RANGE_WORKGROUP_SIZE}, once per directional shadow map being drawn.
86
+ *
87
+ * @type {ComputeShader}
88
+ */
89
+ export const shader_csm_caster_range_accumulate = ComputeShader.from({
90
+ label: "CSM/CasterRangeAccumulate",
91
+ body: CodeChunk.from(
92
+ //language=WGSL
93
+ `
94
+ @compute @workgroup_size(${WG},1,1)
95
+ fn main(
96
+ @builtin(workgroup_id) wg_id: vec3<u32>,
97
+ @builtin(local_invocation_index) local_id: u32,
98
+ ) {
99
+ // page_address is uniform across the workgroup, so this branch is uniform
100
+ if !${PG}_setup(&scene_database, wg_id.x, local_id) {
101
+ return;
102
+ }
103
+
104
+ let slot = ${PG}_slot_in_page(local_id);
105
+
106
+ if slot >= ${PG}_ELEMENTS_PER_PAGE || !${PG}_is_occupied(slot) {
107
+ return;
108
+ }
109
+
110
+ let mesh = ${PG}_read(&scene_database, slot);
111
+
112
+ let low = vec3<f32>(mesh.bounding_box[0], mesh.bounding_box[1], mesh.bounding_box[2]);
113
+ let high = vec3<f32>(mesh.bounding_box[3], mesh.bounding_box[4], mesh.bounding_box[5]);
114
+
115
+ // the corner nearest along the light's axis: the low end wherever the axis points up
116
+ let axis = settings.z_axis.xyz;
117
+ let nearest = select(high, low, axis >= vec3<f32>(0.0));
118
+ let z = dot(axis, nearest);
119
+
120
+ let cascade_count = settings.cascade_count;
121
+
122
+ for (var c = 0u; c < cascade_count; c += 1u) {
123
+ var inside = true;
124
+
125
+ for (var p = 0u; p < 4u; p += 1u) {
126
+ let plane = settings.planes[c * 4u + p];
127
+
128
+ // the corner furthest along the normal decides whether any of the box is inside
129
+ let furthest = select(low, high, plane.xyz >= vec3<f32>(0.0));
130
+
131
+ if dot(plane.xyz, furthest) + plane.w < 0.0 {
132
+ inside = false;
133
+ }
134
+ }
135
+
136
+ if inside {
137
+ aabb_atomic_min_f32(&ranges[settings.base + c], z);
138
+ }
139
+ }
140
+ }
141
+ `, [
142
+ MESHES_TABLE.chunk_iterate(WG),
143
+ chunk_aabb_atomic_f32,
144
+ ]),
145
+ resources: accumulate_resources,
146
+ });
147
+
148
+ const publish_resources = new ShaderResourceSetDescriptor();
149
+
150
+ publish_resources.setImmediate('publish', CSM_CASTER_RANGE_PUBLISH_STRUCT);
151
+
152
+ publish_resources.createGroup()
153
+ .addStorageBuffer('ranges', WebGPUArray.from(atomic_u32), true)
154
+ .addStorageBuffer('light_database', WebGPUArray.from(u32), true);
155
+
156
+ /**
157
+ * Copy one map's accumulated ranges into its row of the light database's `shadow_csm_caster_range`
158
+ * table — where the readback reads them from — and reset the scratch for the next frame.
159
+ *
160
+ * One workgroup, one thread: the row is one record, written whole.
161
+ *
162
+ * @type {ComputeShader}
163
+ */
164
+ export const shader_csm_caster_range_publish = ComputeShader.from({
165
+ label: "CSM/CasterRangePublish",
166
+ body: CodeChunk.from(
167
+ //language=WGSL
168
+ `
169
+ // the reset value: see CSM_CASTER_RANGE_UNKNOWN
170
+ const RANGE_UNKNOWN = ${CSM_CASTER_RANGE_UNKNOWN};
171
+
172
+ @compute @workgroup_size(1,1,1)
173
+ fn main() {
174
+ var near: array<f32, ${SHADOWMAP_CSM_CASCADE_COUNT}>;
175
+
176
+ for (var c = 0u; c < ${SHADOWMAP_CSM_CASCADE_COUNT}u; c += 1u) {
177
+ if c < publish.cascade_count {
178
+ let word = publish.base + c;
179
+
180
+ near[c] = bitcast<f32>(atomicLoad(&ranges[word]));
181
+
182
+ atomicStore(&ranges[word], bitcast<u32>(RANGE_UNKNOWN));
183
+ } else {
184
+ near[c] = RANGE_UNKNOWN;
185
+ }
186
+ }
187
+
188
+ ${RANGE_TABLE.marshalling_method_write_field('near')}(&light_database, publish.row, near);
189
+ }
190
+ `, [
191
+ RANGE_TABLE.wgsl_gen_write_field_code('near'),
192
+ ]),
193
+ resources: publish_resources,
194
+ });
@@ -150,7 +150,7 @@ export function csm_debug_draw_preview({
150
150
  Array.prototype.push.apply(vertices, polygons.map(l => l.points).flat());
151
151
 
152
152
  const projection_matrix = new Float32Array(16);
153
- m4_invert(projection_matrix, shadowmap.light.transform_global.matrix);
153
+ m4_invert(projection_matrix, shadowmap.light.transform.matrix);
154
154
 
155
155
  // project
156
156
  for (let i = 0; i < vertices.length; i++) {
@@ -96,7 +96,7 @@ export function compute_light_projected_area_px(light, main_camera, view_resolut
96
96
  return full_area;
97
97
  }
98
98
 
99
- const t = light.transform_global;
99
+ const t = light.transform;
100
100
  return compute_projected_sphere_area_pixels(
101
101
  t.translation_x, t.translation_y, t.translation_z,
102
102
  radius,
@@ -158,7 +158,7 @@ export class RTXShadows {
158
158
  // (same one the path tracer uses) so glass occluders attenuate
159
159
  // shadow rays via the view-Fresnel mix in ray_shaded_query_occluded.
160
160
  const r_materials = context.graphics.materials_resident;
161
- r_materials.ensure_scene_materials(scene_ctx.scene);
161
+ r_materials.ensure_scene_materials(scene_ctx);
162
162
  r_materials.update();
163
163
 
164
164
  shader_ray_shadow_code.dispatch({
@@ -43,7 +43,7 @@ export function graph_trace_rays({
43
43
  // the path tracer uses, so a glass occluder's view-Fresnel coverage
44
44
  // can be sampled inside the shadow trace.
45
45
  const r_materials = context.graphics.materials_resident;
46
- r_materials.ensure_scene_materials(scene_ctx.scene);
46
+ r_materials.ensure_scene_materials(scene_ctx);
47
47
  r_materials.update();
48
48
 
49
49
  // Per-frame seed for the stochastic alpha test along the shadow ray.
@@ -1 +1 @@
1
- {"version":3,"file":"CascadedSceneSDF.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js"],"names":[],"mappings":"AAkBA;IAqDI;;;OAGG;IACH,+BAmCC;IArFD;;;OAGG;IACH,QAFU,KAAK,CAE8B;IAa7C,iCAEC;IAED;;;OAGG;IACH,yBAFW,MAAM,QAqBhB;IA2CD;;;;OAIG;IACH,oBAHW,sBAAsB,SACtB,eAAe,QAwDzB;IAED;;;;OAIG;IACH,WAHW,sBAAsB,SACtB,eAAe,QAOzB;IAED;;;OAGG;IACH,kBAFW,YAAY,iBA4BtB;IAED,0BAQC;IAED;;;OAGG;IACH,oBAFW,YAAY,QAkEtB;IAED,gBAEC;;CACJ;8BA/RY,OAAO,mCAAmC,EAAE,eAAe;sBATlD,2CAA2C;kCAK/B,uCAAuC;uCAFlC,8CAA8C;6BANxD,4CAA4C"}
1
+ {"version":3,"file":"CascadedSceneSDF.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js"],"names":[],"mappings":"AAkBA;IAqDI;;;OAGG;IACH,+BAmCC;IArFD;;;OAGG;IACH,QAFU,KAAK,CAE8B;IAa7C,iCAEC;IAED;;;OAGG;IACH,yBAFW,MAAM,QAqBhB;IA2CD;;;;OAIG;IACH,oBAHW,sBAAsB,SACtB,eAAe,QAwDzB;IAED;;;;OAIG;IACH,WAHW,sBAAsB,SACtB,eAAe,QASzB;IAED;;;OAGG;IACH,kBAFW,YAAY,iBA4BtB;IAED,0BAQC;IAED;;;OAGG;IACH,oBAFW,YAAY,QAkEtB;IAED,gBAEC;;CACJ;8BAjSY,OAAO,mCAAmC,EAAE,eAAe;sBATlD,2CAA2C;kCAK/B,uCAAuC;uCAFlC,8CAA8C;6BANxD,4CAA4C"}
@@ -178,7 +178,9 @@ export class CascadedSceneSDF {
178
178
  */
179
179
  build(ctx, scene) {
180
180
 
181
- this.bounds.copy(scene.scene.instances.bounding_box);
181
+ // sized to what the CPU placed, under the ECS's own composition — the rows' union, exact
182
+ // for a static scene, which is what a volume built once is for
183
+ scene.rows.compute_world_bounds(this.bounds);
182
184
  this.update(ctx, scene);
183
185
 
184
186
  }
@@ -126,17 +126,17 @@ export class GPUBindlessTextureManager {
126
126
  const old_buffer = this.#data_buffer;
127
127
  const old_size = old_buffer.size;
128
128
 
129
- // The allocator bins free runs by rounding down and requests by rounding up, up to 9/8
130
- // apart, so room for exactly `required_size` can still be refused — hence the headroom.
131
- // Doubling on top of that keeps a run of small textures from paying for a copy of the whole
132
- // arena apiece. The ceiling is the device's: `createBuffer` answers a size past
133
- // `maxBufferSize` with an *invalid* buffer rather than an exception, and swapping one of
134
- // those in would destroy the arena and leave the allocator sized for space that is not
135
- // there, silently.
129
+ // Room for exactly `required_size` can still be refused — the allocator bins free runs by
130
+ // rounding down and requests by rounding up — so the arena to ask for is the allocator's own
131
+ // answer rather than a margin worked out here. Doubling on top of that keeps a run of small
132
+ // textures from paying for a copy of the whole arena apiece. The ceiling is the device's:
133
+ // `createBuffer` answers a size past `maxBufferSize` with an *invalid* buffer rather than an
134
+ // exception, and swapping one of those in would destroy the arena and leave the allocator
135
+ // sized for space that is not there, silently.
136
136
  const new_size = Math.min(
137
137
  round_up_to_arena_granularity(Math.max(
138
138
  old_size * 2,
139
- old_size + required_size * 9 / 8
139
+ this.#allocator.grow_target_for(required_size)
140
140
  )),
141
141
  Math.floor(device.limits.maxBufferSize / ARENA_GRANULARITY_BYTES) * ARENA_GRANULARITY_BYTES
142
142
  );
@@ -1 +1 @@
1
- {"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"AAiCA;IAkII;;;;OAIG;IACH,kBAHW,cAAc,qBAwBxB;IAxHD;;OAEG;IACH,4BAOC;IAjBD;;OAEG;IACH,2BAEC;IAsCD;;OAEG;IACH,0BAEC;IAZD;;OAEG;IACH,yBAEC;IAwFD,gBAWC;IA4ND;;;;;;;;OAQG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACM,kBAAkB,EAAlC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,wBAAwB,EAAxC,MAAM;QACU,eAAe,EAA/B,MAAM;;;;MA2EhB;;CAEJ;yBAleY,OAAO,2DAA2D,EAAE,UAAU;6BAC9E,OAAO,2BAA2B,EAAE,cAAc"}
1
+ {"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"AAiCA;IAkII;;;;OAIG;IACH,kBAHW,cAAc,qBAwBxB;IAxHD;;OAEG;IACH,4BAOC;IAjBD;;OAEG;IACH,2BAEC;IAsCD;;OAEG;IACH,0BAEC;IAZD;;OAEG;IACH,yBAEC;IAwFD,gBAWC;IA6ND;;;;;;;;OAQG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACM,kBAAkB,EAAlC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,wBAAwB,EAAxC,MAAM;QACU,eAAe,EAA/B,MAAM;;;;MA2EhB;;CAEJ;yBAneY,OAAO,2DAA2D,EAAE,UAAU;6BAC9E,OAAO,2BAA2B,EAAE,cAAc"}
@@ -287,8 +287,9 @@ export class GPUViewVolumetrics {
287
287
  const resolution = VOLUMETRICS_SUN_SHADOW_RESOLUTION;
288
288
 
289
289
  // `forward` is the direction light TRAVELS — the same vector light_record_directional
290
- // writes into the table, which the shader then negates to point at the light.
291
- const direction = sun.forward;
290
+ // writes into the table, which the shader then negates to point at the light. Read off the
291
+ // CPU copy of the pose: the cascade is built here, on this side.
292
+ const direction = sun.transform.forward;
292
293
 
293
294
  const view_matrix = camera.view_matrix;
294
295
  const position = camera.transform;
@@ -311,7 +312,7 @@ export class GPUViewVolumetrics {
311
312
  this.#sun_shadow_step_ws[cascade] = build_volumetrics_sun_shadow_transform({
312
313
  ws_to_uvw: this.#sun_shadow_ws_to_uvw[cascade],
313
314
  uvw_to_ws: this.#sun_shadow_uvw_to_ws[cascade],
314
- light_direction: [direction.x, direction.y, direction.z],
315
+ light_direction: [direction[0], direction[1], direction[2]],
315
316
  camera_position: [position.translation_x, position.translation_y, position.translation_z],
316
317
  camera_forward,
317
318
  fov_y: camera.fov,