@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.
- package/editor/entity_world_bounds.d.ts +9 -3
- package/editor/entity_world_bounds.d.ts.map +1 -1
- package/editor/entity_world_bounds.js +61 -4
- package/package.json +1 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +124 -29
- package/src/core/collection/map/u32_index.d.ts +83 -0
- package/src/core/collection/map/u32_index.d.ts.map +1 -0
- package/src/core/collection/map/u32_index.js +247 -0
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
- package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
- package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKProblem.js +16 -0
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
- package/src/engine/graphics3/AnimationSystem.js +2 -2
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +2 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
- package/src/engine/graphics3/LightSystem.d.ts +7 -5
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +36 -22
- package/src/engine/graphics3/MeshSystem.d.ts +43 -39
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +324 -331
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem.js +2 -4
- package/src/engine/graphics3/PickingQuery.d.ts +15 -21
- package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
- package/src/engine/graphics3/PickingQuery.js +21 -25
- package/src/engine/graphics3/PickingSystem.d.ts +60 -31
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +416 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
- package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +102 -53
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +2 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
- package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/Prefab.js +162 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_place.js +130 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
- package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
- package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
- package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
- package/src/engine/graphics3/register_instance_animation.js +4 -4
- package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
- package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
- package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +13 -15
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +12 -14
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +5 -4
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +11 -12
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
- package/src/engine/physics/cloth/playground/README.md +11 -11
- package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +64 -58
- package/src/engine/physics/cloth/playground/garment_main.js +59 -33
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +85 -53
- package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +36 -0
- package/src/shade/playground/add_random_meshes.d.ts +4 -4
- package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
- package/src/shade/playground/add_random_meshes.js +20 -16
- package/src/shade/playground/avboit/main.d.ts +1 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -1
- package/src/shade/playground/avboit/main.js +916 -875
- package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/main.js +22 -8
- package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
- package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
- package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/main.js +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/make_ground.js +21 -16
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_system/main.js +11 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +56 -15
- package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +149 -53
- package/src/shade/playground/readback_crossover/index.html +41 -0
- package/src/shade/playground/readback_crossover/main.d.ts +2 -0
- package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
- package/src/shade/playground/readback_crossover/main.js +372 -0
- package/src/shade/playground/skinned_blas_refit/README.md +11 -7
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +67 -58
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
- package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
- package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
- package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +393 -363
- package/src/shade/playground/ssr_reprojection/main.js +11 -9
- package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
- package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_reprojection/scene.js +32 -11
- package/src/shade/playground/ssr_variance/main.js +1 -1
- package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
- package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/scene.js +39 -15
- package/src/shade/playground/vgeo_viewer/main.js +6 -2
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +936 -922
- package/src/shade/renderer/GraphicsContext.d.ts +7 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +11 -0
- package/src/shade/renderer/Renderer.d.ts +3 -2
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +3 -2
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
- package/src/shade/renderer/animation/Skin.d.ts +19 -19
- package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
- package/src/shade/renderer/animation/Skin.js +15 -13
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +96 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/WordViews.js +62 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +444 -329
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
- package/src/shade/renderer/light/LightCollection.d.ts +29 -1
- package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/LightCollection.js +50 -1
- package/src/shade/renderer/light/make_sunlight.js +2 -2
- package/src/shade/renderer/light/model/Light.d.ts +29 -2
- package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
- package/src/shade/renderer/light/model/Light.js +30 -2
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
- package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
- package/src/shade/renderer/light/place_light.d.ts +16 -0
- package/src/shade/renderer/light/place_light.d.ts.map +1 -0
- package/src/shade/renderer/light/place_light.js +36 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
- package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +111 -56
- package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
- package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
- package/src/shade/renderer/loader/SceneNode.js +114 -0
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/load_usd.js +4 -5
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
- package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
- package/src/shade/renderer/particles/DESIGN.md +53 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
- package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
- package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/DynamicMesh.js +14 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +55 -48
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +594 -928
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
- package/src/shade/renderer/scene/Node3D.d.ts +27 -8
- package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
- package/src/shade/renderer/scene/Node3DDirtyList.d.ts +59 -0
- package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +1 -0
- package/src/shade/renderer/scene/Scene.d.ts +18 -60
- package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/Scene.js +53 -146
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +10 -93
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +1136 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
- package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
- package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
- package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
- package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
- package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
- package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
- package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
- package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
- package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
- package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
- package/src/shade/renderer/scene/InstanceBatch.js +0 -235
- package/src/shade/renderer/scene/Mesh.js +0 -168
- package/src/shade/renderer/scene/Node3D.js +0 -263
- package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
- package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
- package/src/shade/renderer/scene/TransformAuthority.js +0 -33
|
@@ -9,19 +9,28 @@
|
|
|
9
9
|
* frame to force such content down the static path is explicitly not the answer.
|
|
10
10
|
*
|
|
11
11
|
* So a `DynamicMesh` holds a plain {@link Geometry}: attribute arrays and an index, uploaded as
|
|
12
|
-
* they are and drawn by a pass of their own. It is not part of the scene's instance batch
|
|
13
|
-
* no row in the scene database — the meshlet pipeline never sees it
|
|
12
|
+
* they are and drawn by a pass of their own. It is not part of the scene's instance batch, gets
|
|
13
|
+
* no row in the scene database — the meshlet pipeline never sees it — and is a node of nothing:
|
|
14
|
+
* the world transform the draw applies is its own {@link transform}, with nothing above it.
|
|
14
15
|
*
|
|
15
16
|
* Its geometry says when it has changed through {@link Geometry.needsUpdate}; nothing watches the
|
|
16
17
|
* arrays.
|
|
17
18
|
*/
|
|
18
|
-
export class DynamicMesh
|
|
19
|
+
export class DynamicMesh {
|
|
19
20
|
/**
|
|
20
21
|
* @param {Geometry} geometry
|
|
21
22
|
* @param {Float32Array|number[]} [color]
|
|
22
23
|
* @returns {DynamicMesh}
|
|
23
24
|
*/
|
|
24
25
|
static from(geometry: Geometry, color?: Float32Array | number[]): DynamicMesh;
|
|
26
|
+
/**
|
|
27
|
+
* World transform the draw applies to the vertices. Identity until moved — and the systems
|
|
28
|
+
* that write world-space vertices never move it. What the draw binds is its matrix, so a mover
|
|
29
|
+
* calls `updateMatrix()` after a rotation or scale change, as with any `Transform64`.
|
|
30
|
+
*
|
|
31
|
+
* @type {Transform64}
|
|
32
|
+
*/
|
|
33
|
+
transform: Transform64;
|
|
25
34
|
/**
|
|
26
35
|
* Vertex data, drawn as it stands. Must carry a position attribute and an index.
|
|
27
36
|
*
|
|
@@ -49,5 +58,5 @@ export class DynamicMesh extends Node3D {
|
|
|
49
58
|
*/
|
|
50
59
|
readonly isDynamicMesh: boolean;
|
|
51
60
|
}
|
|
52
|
-
import {
|
|
61
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
53
62
|
//# sourceMappingURL=DynamicMesh.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicMesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/DynamicMesh.js"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"DynamicMesh.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/DynamicMesh.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;GAiBG;AACH;IAkCI;;;;OAIG;IACH,wCAHW,YAAY,GAAC,MAAM,EAAE,GACnB,WAAW,CAcvB;IAlDD;;;;;;OAMG;IACH,WAFU,WAAW,CAES;IAE9B;;;;OAIG;IACH,mBAAgB;IAEhB;;;;;OAKG;IACH,OAFU,YAAY,CAEiB;IAEvC;;;;;;OAMG;IACH,SAFU,OAAO,CAEF;IAsBnB;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;4BAxE2B,8CAA8C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import {
|
|
2
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A mesh whose vertices are expected to change, drawn straight from its attributes.
|
|
@@ -12,13 +12,23 @@ import { Node3D } from "./Node3D.js";
|
|
|
12
12
|
* frame to force such content down the static path is explicitly not the answer.
|
|
13
13
|
*
|
|
14
14
|
* So a `DynamicMesh` holds a plain {@link Geometry}: attribute arrays and an index, uploaded as
|
|
15
|
-
* they are and drawn by a pass of their own. It is not part of the scene's instance batch
|
|
16
|
-
* no row in the scene database — the meshlet pipeline never sees it
|
|
15
|
+
* they are and drawn by a pass of their own. It is not part of the scene's instance batch, gets
|
|
16
|
+
* no row in the scene database — the meshlet pipeline never sees it — and is a node of nothing:
|
|
17
|
+
* the world transform the draw applies is its own {@link transform}, with nothing above it.
|
|
17
18
|
*
|
|
18
19
|
* Its geometry says when it has changed through {@link Geometry.needsUpdate}; nothing watches the
|
|
19
20
|
* arrays.
|
|
20
21
|
*/
|
|
21
|
-
export class DynamicMesh
|
|
22
|
+
export class DynamicMesh {
|
|
23
|
+
/**
|
|
24
|
+
* World transform the draw applies to the vertices. Identity until moved — and the systems
|
|
25
|
+
* that write world-space vertices never move it. What the draw binds is its matrix, so a mover
|
|
26
|
+
* calls `updateMatrix()` after a rotation or scale change, as with any `Transform64`.
|
|
27
|
+
*
|
|
28
|
+
* @type {Transform64}
|
|
29
|
+
*/
|
|
30
|
+
transform = new Transform64();
|
|
31
|
+
|
|
22
32
|
/**
|
|
23
33
|
* Vertex data, drawn as it stands. Must carry a position attribute and an index.
|
|
24
34
|
*
|
|
@@ -7,13 +7,6 @@ export class GPUInstancesAccelerationStructure {
|
|
|
7
7
|
* @param {GraphicsContext} graphics
|
|
8
8
|
*/
|
|
9
9
|
constructor(graphics: GraphicsContext);
|
|
10
|
-
/**
|
|
11
|
-
* The CPU-side tree. Still maintained incrementally by the `instance_*` methods and still walked
|
|
12
|
-
* by CPU queries — {@link DirectionalLightShadowmap} runs `compute_tight_near_far_clipping_planes`
|
|
13
|
-
* against it per cascade per frame. What the GPU build retires is the per-frame treelet pass and
|
|
14
|
-
* the full flatten-and-upload, not the tree.
|
|
15
|
-
*/
|
|
16
|
-
get bvh(): BVH;
|
|
17
10
|
clear(): void;
|
|
18
11
|
/**
|
|
19
12
|
*
|
|
@@ -21,36 +14,63 @@ export class GPUInstancesAccelerationStructure {
|
|
|
21
14
|
*/
|
|
22
15
|
get buffer(): GPUBuffer;
|
|
23
16
|
/**
|
|
17
|
+
* A `meshes` row has come into the scene.
|
|
24
18
|
*
|
|
25
19
|
* @param {number} index
|
|
26
|
-
* @param {Mesh} instance
|
|
27
20
|
*/
|
|
28
|
-
instance_add(index: number
|
|
21
|
+
instance_add(index: number): void;
|
|
29
22
|
/**
|
|
30
|
-
* Drop
|
|
31
|
-
*
|
|
32
|
-
* everything that ever was.
|
|
23
|
+
* Drop a row previously handed to {@link instance_add}, so the tree stays proportional to what
|
|
24
|
+
* is in the scene rather than to everything that ever was.
|
|
33
25
|
*
|
|
34
26
|
* @param {number} index
|
|
35
27
|
*/
|
|
36
28
|
instance_remove(index: number): void;
|
|
37
29
|
/**
|
|
30
|
+
* A row's bounds moved: the next {@link update} rebuilds.
|
|
38
31
|
*
|
|
39
32
|
* @param {number} index
|
|
40
|
-
* @param {Mesh} instance
|
|
41
33
|
*/
|
|
42
|
-
instance_update(index: number
|
|
34
|
+
instance_update(index: number): void;
|
|
35
|
+
/**
|
|
36
|
+
* Build the tree, from the world AABBs the scene database holds.
|
|
37
|
+
*
|
|
38
|
+
* @param {GPUBuffer} scene_database_buffer
|
|
39
|
+
*/
|
|
40
|
+
/**
|
|
41
|
+
* Something moved on the GPU that this tree is built over — bounds the CPU never saw change.
|
|
42
|
+
* The next {@link update} rebuilds.
|
|
43
|
+
*/
|
|
44
|
+
invalidate(): void;
|
|
45
|
+
/**
|
|
46
|
+
* The bounds of everything in the tree, read back from its root node: the box the GPU built
|
|
47
|
+
* the tree under, the union of every live row's bounds as the bounds pass derived them — the
|
|
48
|
+
* whole scene, whoever placed what. For a consumer that sizes work by the scene once, a probe
|
|
49
|
+
* placement or a bake; a frame-loop reader wants the scene database's readback service.
|
|
50
|
+
*
|
|
51
|
+
* Resolves once the copy has landed and been mapped, which is after the device has finished
|
|
52
|
+
* whatever build was submitted before this call — so build first, ask after. Resolves `false`
|
|
53
|
+
* for an empty tree, leaving `target` alone.
|
|
54
|
+
*
|
|
55
|
+
* @param {Float32Array|Float64Array|number[]} target six numbers, `x0,y0,z0,x1,y1,z1`
|
|
56
|
+
* @returns {Promise<boolean>}
|
|
57
|
+
*/
|
|
58
|
+
read_scene_bounds(target: Float32Array | Float64Array | number[]): Promise<boolean>;
|
|
43
59
|
/**
|
|
44
60
|
* @param {GPUBuffer} scene_database_buffer the table the world AABBs are read from
|
|
61
|
+
* @param {ShadeGPUCommandContext} [cmd_ctx]
|
|
45
62
|
*/
|
|
46
|
-
push_to_gpu(scene_database_buffer: GPUBuffer): void;
|
|
63
|
+
push_to_gpu(scene_database_buffer: GPUBuffer, cmd_ctx?: ShadeGPUCommandContext): void;
|
|
47
64
|
/**
|
|
65
|
+
* Rebuild if anything moved since the last build.
|
|
66
|
+
*
|
|
48
67
|
* @param {GPUBuffer} scene_database_buffer
|
|
68
|
+
* @param {ShadeGPUCommandContext} [cmd_ctx] encode into this context rather than submitting
|
|
69
|
+
* on its own — what a frame does, so the build follows the bounds pass it reads
|
|
49
70
|
*/
|
|
50
|
-
update(scene_database_buffer: GPUBuffer): void;
|
|
71
|
+
update(scene_database_buffer: GPUBuffer, cmd_ctx?: ShadeGPUCommandContext): void;
|
|
51
72
|
#private;
|
|
52
73
|
}
|
|
53
74
|
export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
|
|
54
|
-
|
|
55
|
-
import { BVH } from "../../../core/bvh2/bvh3/BVH.js";
|
|
75
|
+
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
56
76
|
//# sourceMappingURL=GPUInstancesAccelerationStructure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUInstancesAccelerationStructure.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUInstancesAccelerationStructure.js"],"names":[],"mappings":"AAmCA;;GAEG;AACH;IA8DI;;;OAGG;IACH,sBAFW,eAAe,EAqBzB;IAzED,cAIC;IAOD;;;OAGG;IACH,wBAEC;IAmED;;;;OAIG;IACH,oBAFW,MAAM,QAUhB;IAED;;;;;OAKG;IACH,uBAFW,MAAM,QAUhB;IAED;;;;OAIG;IACH,uBAFW,MAAM,QAOhB;IA8CD;;;;OAIG;IACH;;;OAGG;IACH,mBAEC;IAiGD;;;;;;;;;;;;OAYG;IACH,0BAHW,YAAY,GAAC,YAAY,GAAC,MAAM,EAAE,GAChC,QAAQ,OAAO,CAAC,CA0C5B;IAED;;;OAGG;IACH,wDAFW,sBAAsB,QAMhC;IAED;;;;;;OAMG;IACH,mDAHW,sBAAsB,QAShC;;CACJ;8BA7YY,OAAO,uBAAuB,EAAE,eAAe;uCARrB,wCAAwC"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { BVH } from "../../../core/bvh2/bvh3/BVH.js";
|
|
3
2
|
import { FrameGraph } from "../../../engine/graphics/render/frame_graph/FrameGraph.js";
|
|
4
3
|
import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescriptor.js";
|
|
5
4
|
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
6
5
|
import { ensure_buffer_capacity } from "../geometry/make_temp_gpu_buffer.js";
|
|
7
|
-
import { bvh_buffer_size } from "../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
|
|
6
|
+
import { BVH_HEADER_WORDS, BVH_NODE_STRIDE_WORDS, bvh_buffer_size } from "../gpu_primitive/bvh/BVH_BUFFER_LAYOUT.js";
|
|
7
|
+
import { BVH_NULL_NODE, bvh_tree_views, read_bvh_node } from "../gpu_primitive/bvh/check_bvh_structure.js";
|
|
8
8
|
import { graph_bvh_build_lbvh } from "../gpu_primitive/bvh/graph_bvh_build_lbvh.js";
|
|
9
9
|
import { shader_bvh_extract_instance_leaves } from "./shader_bvh_extract_instance_leaves.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
|
|
13
|
-
* @typedef {import("./Mesh.js").Mesh} Mesh
|
|
14
13
|
*/
|
|
15
14
|
|
|
16
15
|
/**
|
|
@@ -49,21 +48,8 @@ export class GPUInstancesAccelerationStructure {
|
|
|
49
48
|
*/
|
|
50
49
|
#device
|
|
51
50
|
|
|
52
|
-
#bvh = new BVH();
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* The CPU-side tree. Still maintained incrementally by the `instance_*` methods and still walked
|
|
56
|
-
* by CPU queries — {@link DirectionalLightShadowmap} runs `compute_tight_near_far_clipping_planes`
|
|
57
|
-
* against it per cascade per frame. What the GPU build retires is the per-frame treelet pass and
|
|
58
|
-
* the full flatten-and-upload, not the tree.
|
|
59
|
-
*/
|
|
60
|
-
get bvh() {
|
|
61
|
-
return this.#bvh;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
51
|
clear() {
|
|
65
|
-
this.#
|
|
66
|
-
this.#node_mapping.clear();
|
|
52
|
+
this.#live.clear();
|
|
67
53
|
this.#membership_version++;
|
|
68
54
|
this.#version++;
|
|
69
55
|
}
|
|
@@ -101,7 +87,7 @@ export class GPUInstancesAccelerationStructure {
|
|
|
101
87
|
|
|
102
88
|
/**
|
|
103
89
|
* Compact mirror of the live `meshes` rows, in insertion order. Rebuilt from
|
|
104
|
-
* {@link #
|
|
90
|
+
* {@link #live} when membership churns.
|
|
105
91
|
*
|
|
106
92
|
* @type {Uint32Array}
|
|
107
93
|
*/
|
|
@@ -130,74 +116,61 @@ export class GPUInstancesAccelerationStructure {
|
|
|
130
116
|
size: 1024,
|
|
131
117
|
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC
|
|
132
118
|
});
|
|
119
|
+
|
|
120
|
+
// A fresh buffer holds zeroes, and zero is a root word naming node 0 — a tree that was never
|
|
121
|
+
// built would read as one with a root of zero bounds. Empty, until the first build says
|
|
122
|
+
// otherwise.
|
|
123
|
+
device.queue.writeBuffer(this.#buffer, 0, EMPTY_TREE);
|
|
133
124
|
}
|
|
134
125
|
|
|
135
126
|
/**
|
|
127
|
+
* The live `meshes` rows, in insertion order — what the build extracts leaves from. There is
|
|
128
|
+
* no tree on this side: the tree is the GPU's, built from the bounds the GPU holds, and every
|
|
129
|
+
* query walks it there.
|
|
136
130
|
*
|
|
137
|
-
* @type {
|
|
131
|
+
* @type {Set<number>}
|
|
138
132
|
*/
|
|
139
|
-
#
|
|
133
|
+
#live = new Set();
|
|
140
134
|
|
|
141
135
|
/**
|
|
136
|
+
* A `meshes` row has come into the scene.
|
|
142
137
|
*
|
|
143
138
|
* @param {number} index
|
|
144
|
-
* @param {Mesh} instance
|
|
145
139
|
*/
|
|
146
|
-
instance_add(index
|
|
140
|
+
instance_add(index) {
|
|
147
141
|
assert.isNonNegativeInteger(index, 'index');
|
|
148
|
-
assert.
|
|
149
|
-
|
|
150
|
-
const bvh = this.#bvh;
|
|
142
|
+
assert.equal(this.#live.has(index), false, 'the row is already in the TLAS');
|
|
151
143
|
|
|
152
|
-
|
|
153
|
-
bvh.node_set_user_data(node, index);
|
|
154
|
-
bvh.node_set_aabb(node, instance.bounding_box);
|
|
155
|
-
|
|
156
|
-
bvh.insert_leaf(node);
|
|
157
|
-
|
|
158
|
-
this.#node_mapping.set(index, node);
|
|
144
|
+
this.#live.add(index);
|
|
159
145
|
|
|
160
146
|
this.#membership_version++;
|
|
161
147
|
this.#version++;
|
|
162
148
|
}
|
|
163
149
|
|
|
164
150
|
/**
|
|
165
|
-
* Drop
|
|
166
|
-
*
|
|
167
|
-
* everything that ever was.
|
|
151
|
+
* Drop a row previously handed to {@link instance_add}, so the tree stays proportional to what
|
|
152
|
+
* is in the scene rather than to everything that ever was.
|
|
168
153
|
*
|
|
169
154
|
* @param {number} index
|
|
170
155
|
*/
|
|
171
156
|
instance_remove(index) {
|
|
172
157
|
assert.isNonNegativeInteger(index, 'index');
|
|
158
|
+
assert.equal(this.#live.has(index), true, 'the row is not in the TLAS');
|
|
173
159
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
assert.defined(node, 'node');
|
|
177
|
-
|
|
178
|
-
const bvh = this.#bvh;
|
|
179
|
-
|
|
180
|
-
bvh.remove_leaf(node);
|
|
181
|
-
bvh.release_node(node);
|
|
182
|
-
|
|
183
|
-
this.#node_mapping.delete(index);
|
|
160
|
+
this.#live.delete(index);
|
|
184
161
|
|
|
185
162
|
this.#membership_version++;
|
|
186
163
|
this.#version++;
|
|
187
164
|
}
|
|
188
165
|
|
|
189
166
|
/**
|
|
167
|
+
* A row's bounds moved: the next {@link update} rebuilds.
|
|
190
168
|
*
|
|
191
169
|
* @param {number} index
|
|
192
|
-
* @param {Mesh} instance
|
|
193
170
|
*/
|
|
194
|
-
instance_update(index
|
|
171
|
+
instance_update(index) {
|
|
195
172
|
assert.isNonNegativeInteger(index, 'index');
|
|
196
|
-
assert.
|
|
197
|
-
|
|
198
|
-
const node = this.#node_mapping.get(index);
|
|
199
|
-
|
|
200
|
-
this.#bvh.node_move_aabb(node, instance.bounding_box);
|
|
173
|
+
assert.equal(this.#live.has(index), true, 'the row is not in the TLAS');
|
|
201
174
|
|
|
202
175
|
this.#version++;
|
|
203
176
|
}
|
|
@@ -208,7 +181,7 @@ export class GPUInstancesAccelerationStructure {
|
|
|
208
181
|
* @returns {number} number of live rows
|
|
209
182
|
*/
|
|
210
183
|
#refresh_rows() {
|
|
211
|
-
const count = this.#
|
|
184
|
+
const count = this.#live.size;
|
|
212
185
|
|
|
213
186
|
if (this.#rows_gpu_version === this.#membership_version && this.#rows.length >= count) {
|
|
214
187
|
return count;
|
|
@@ -219,7 +192,7 @@ export class GPUInstancesAccelerationStructure {
|
|
|
219
192
|
}
|
|
220
193
|
|
|
221
194
|
let i = 0;
|
|
222
|
-
for (const row of this.#
|
|
195
|
+
for (const row of this.#live) {
|
|
223
196
|
this.#rows[i] = row;
|
|
224
197
|
i++;
|
|
225
198
|
}
|
|
@@ -251,12 +224,25 @@ export class GPUInstancesAccelerationStructure {
|
|
|
251
224
|
*
|
|
252
225
|
* @param {GPUBuffer} scene_database_buffer
|
|
253
226
|
*/
|
|
254
|
-
|
|
227
|
+
/**
|
|
228
|
+
* Something moved on the GPU that this tree is built over — bounds the CPU never saw change.
|
|
229
|
+
* The next {@link update} rebuilds.
|
|
230
|
+
*/
|
|
231
|
+
invalidate() {
|
|
232
|
+
this.#version++;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @param {GPUBuffer} scene_database_buffer
|
|
237
|
+
* @param {ShadeGPUCommandContext} [cmd_ctx] a context to encode the build into; when absent
|
|
238
|
+
* the build is submitted on its own, ahead of anything not yet submitted
|
|
239
|
+
*/
|
|
240
|
+
#build(scene_database_buffer, cmd_ctx) {
|
|
255
241
|
assert.defined(scene_database_buffer, 'scene_database_buffer');
|
|
256
242
|
|
|
257
243
|
const device = this.#device;
|
|
258
244
|
|
|
259
|
-
const element_count = this.#
|
|
245
|
+
const element_count = this.#live.size;
|
|
260
246
|
|
|
261
247
|
// `ensure_buffer_capacity` can hand back a NEW buffer and destroy the old one. Consumers are
|
|
262
248
|
// safe because they read `tlas.buffer` per frame at pass-execute time — but the field has to
|
|
@@ -329,30 +315,96 @@ export class GPUInstancesAccelerationStructure {
|
|
|
329
315
|
nodes,
|
|
330
316
|
});
|
|
331
317
|
|
|
318
|
+
if (cmd_ctx !== undefined) {
|
|
319
|
+
cmd_ctx.encodeGraph(graph);
|
|
320
|
+
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
|
|
332
324
|
const cmd = ShadeGPUCommandContext.create(this.#graphics, 'TLAS/build');
|
|
333
325
|
|
|
334
326
|
cmd.encodeGraph(graph);
|
|
335
327
|
cmd.finish();
|
|
336
328
|
}
|
|
337
329
|
|
|
330
|
+
/**
|
|
331
|
+
* The bounds of everything in the tree, read back from its root node: the box the GPU built
|
|
332
|
+
* the tree under, the union of every live row's bounds as the bounds pass derived them — the
|
|
333
|
+
* whole scene, whoever placed what. For a consumer that sizes work by the scene once, a probe
|
|
334
|
+
* placement or a bake; a frame-loop reader wants the scene database's readback service.
|
|
335
|
+
*
|
|
336
|
+
* Resolves once the copy has landed and been mapped, which is after the device has finished
|
|
337
|
+
* whatever build was submitted before this call — so build first, ask after. Resolves `false`
|
|
338
|
+
* for an empty tree, leaving `target` alone.
|
|
339
|
+
*
|
|
340
|
+
* @param {Float32Array|Float64Array|number[]} target six numbers, `x0,y0,z0,x1,y1,z1`
|
|
341
|
+
* @returns {Promise<boolean>}
|
|
342
|
+
*/
|
|
343
|
+
async read_scene_bounds(target) {
|
|
344
|
+
assert.isArrayLike(target, 'target');
|
|
345
|
+
assert.greaterThanOrEqual(target.length, 6, 'target.length < 6');
|
|
346
|
+
|
|
347
|
+
// the root word and node 0 — the root by the builder's construction
|
|
348
|
+
const byte_size = (BVH_HEADER_WORDS + BVH_NODE_STRIDE_WORDS) * Uint32Array.BYTES_PER_ELEMENT;
|
|
349
|
+
|
|
350
|
+
const allocator = this.#graphics.buffer_allocator_readback;
|
|
351
|
+
const staging = allocator.get(byte_size);
|
|
352
|
+
|
|
353
|
+
const cmd = ShadeGPUCommandContext.create(this.#graphics, 'TLAS/read scene bounds');
|
|
354
|
+
|
|
355
|
+
cmd.copyBufferToBuffer(this.#buffer, 0, staging, 0, byte_size);
|
|
356
|
+
cmd.finish();
|
|
357
|
+
|
|
358
|
+
await staging.mapAsync(GPUMapMode.READ, 0, byte_size);
|
|
359
|
+
|
|
360
|
+
const { words, floats } = bvh_tree_views(new Uint32Array(staging.getMappedRange(0, byte_size)));
|
|
361
|
+
const root = words[0];
|
|
362
|
+
|
|
363
|
+
let found = false;
|
|
364
|
+
|
|
365
|
+
if (root !== BVH_NULL_NODE) {
|
|
366
|
+
assert.equal(root, 0, 'the tree\'s root is not node 0');
|
|
367
|
+
|
|
368
|
+
const node = read_bvh_node(words, floats, root);
|
|
369
|
+
|
|
370
|
+
target[0] = node.low[0];
|
|
371
|
+
target[1] = node.low[1];
|
|
372
|
+
target[2] = node.low[2];
|
|
373
|
+
target[3] = node.high[0];
|
|
374
|
+
target[4] = node.high[1];
|
|
375
|
+
target[5] = node.high[2];
|
|
376
|
+
|
|
377
|
+
found = true;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
allocator.release(staging);
|
|
381
|
+
|
|
382
|
+
return found;
|
|
383
|
+
}
|
|
384
|
+
|
|
338
385
|
/**
|
|
339
386
|
* @param {GPUBuffer} scene_database_buffer the table the world AABBs are read from
|
|
387
|
+
* @param {ShadeGPUCommandContext} [cmd_ctx]
|
|
340
388
|
*/
|
|
341
|
-
push_to_gpu(scene_database_buffer) {
|
|
342
|
-
this.#build(scene_database_buffer);
|
|
389
|
+
push_to_gpu(scene_database_buffer, cmd_ctx) {
|
|
390
|
+
this.#build(scene_database_buffer, cmd_ctx);
|
|
343
391
|
|
|
344
392
|
this.#gpu_version = this.#version;
|
|
345
393
|
}
|
|
346
394
|
|
|
347
395
|
/**
|
|
396
|
+
* Rebuild if anything moved since the last build.
|
|
397
|
+
*
|
|
348
398
|
* @param {GPUBuffer} scene_database_buffer
|
|
399
|
+
* @param {ShadeGPUCommandContext} [cmd_ctx] encode into this context rather than submitting
|
|
400
|
+
* on its own — what a frame does, so the build follows the bounds pass it reads
|
|
349
401
|
*/
|
|
350
|
-
update(scene_database_buffer) {
|
|
402
|
+
update(scene_database_buffer, cmd_ctx) {
|
|
351
403
|
if (this.#gpu_version === this.#version) {
|
|
352
404
|
return;
|
|
353
405
|
}
|
|
354
406
|
|
|
355
|
-
this.push_to_gpu(scene_database_buffer);
|
|
407
|
+
this.push_to_gpu(scene_database_buffer, cmd_ctx);
|
|
356
408
|
}
|
|
357
409
|
}
|
|
358
410
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* The GPU side of one {@link Scene}: its database — the `transforms` and `meshes` tables, one row
|
|
3
|
+
* per entity that is drawn or posed, at `entity + 1` — and what is built over that database each
|
|
4
|
+
* frame: the lights' records, the probe volume, the volumetrics, the animation, the TLAS.
|
|
5
|
+
*
|
|
6
|
+
* Nothing here holds a hierarchy of its own. An entity's row names its parent's row and the GPU
|
|
7
|
+
* composes the chain each frame, derives every mesh row's bounds under the composed matrix and
|
|
8
|
+
* builds the tree over them — see {@link tick}. What the CPU writes is what it owns: an entity's
|
|
9
|
+
* local TRS and the row of its parent, through {@link rows}.
|
|
3
10
|
*/
|
|
4
11
|
export class GPUSceneContext {
|
|
5
12
|
/**
|
|
@@ -46,22 +53,6 @@ export class GPUSceneContext {
|
|
|
46
53
|
* @returns {GPUInstancesAccelerationStructure}
|
|
47
54
|
*/
|
|
48
55
|
get tlas(): GPUInstancesAccelerationStructure;
|
|
49
|
-
/**
|
|
50
|
-
* Mesh → instance index. Rebuilt each frame in {@link build}. The
|
|
51
|
-
* Lookup from a node's stable JS-side {@link Node3D.id} to its row
|
|
52
|
-
* in the scene database's `transforms` table. Built during
|
|
53
|
-
* {@link build} as each node is allocated via
|
|
54
|
-
* {@link GPUTypedTable.add}; the table itself owns the row
|
|
55
|
-
* allocation, this map just bridges between Node3D handles and the
|
|
56
|
-
* GPU rows they live at.
|
|
57
|
-
*
|
|
58
|
-
* Public so external code can do partial updates: looking up a
|
|
59
|
-
* single node's row lets a system patch one `transforms_table`
|
|
60
|
-
* entry instead of re-uploading the whole scene.
|
|
61
|
-
*
|
|
62
|
-
* @type {Map<number, number>}
|
|
63
|
-
*/
|
|
64
|
-
id_mapping: Map<number, number>;
|
|
65
56
|
/**
|
|
66
57
|
* @returns {GPUAnimationManager}
|
|
67
58
|
*/
|
|
@@ -79,10 +70,9 @@ export class GPUSceneContext {
|
|
|
79
70
|
*/
|
|
80
71
|
get scene_database_buffer(): GPUBuffer;
|
|
81
72
|
/**
|
|
82
|
-
* Per-scene skinning subsystem. Routes
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
* onto it.
|
|
73
|
+
* Per-scene skinning subsystem. Routes skinned rows through
|
|
74
|
+
* per-instance geometry clones; later phases grow Skin-binding
|
|
75
|
+
* management and the per-frame skinning compute onto it.
|
|
86
76
|
*
|
|
87
77
|
* Lazy because it depends on {@link geometries}, which is assigned
|
|
88
78
|
* externally after this object's constructor returns
|
|
@@ -94,32 +84,37 @@ export class GPUSceneContext {
|
|
|
94
84
|
get skinning(): GPUMeshSkinningContext;
|
|
95
85
|
get gpu_memory_usage(): number;
|
|
96
86
|
/**
|
|
97
|
-
*
|
|
98
|
-
* for every pixel that node covers**, which is what makes it worth reading from outside.
|
|
87
|
+
* Entities as rows of the scene database, at `entity + 1` in both tables.
|
|
99
88
|
*
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
89
|
+
* A system that places an entity acquires its row here and marks it on the dataset's change
|
|
90
|
+
* events; a scene with no systems places through `prefab_place` and `place_primitive`, which
|
|
91
|
+
* do the same by hand; and {@link build} flushes what was marked. The scene has to name its
|
|
92
|
+
* dataset ({@link Scene.dataset}) before this is first asked for, because the rows are written
|
|
93
|
+
* from that dataset's components.
|
|
103
94
|
*
|
|
104
|
-
* @
|
|
105
|
-
* @returns {number} the row, or `-1` for a node that is not in this scene or carries no geometry
|
|
95
|
+
* @returns {GPUSceneRows}
|
|
106
96
|
*/
|
|
107
|
-
|
|
97
|
+
get rows(): GPUSceneRows;
|
|
108
98
|
/**
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
* valid while this number is unchanged. Anything holding one compares against its own copy and
|
|
112
|
-
* re-reads when they differ.
|
|
99
|
+
* An entity's world bounds as the GPU holds them, read back — what a consumer that wants the
|
|
100
|
+
* box that is drawn asks, a frame or two behind the device. Built on demand, over the rows.
|
|
113
101
|
*
|
|
114
|
-
* @returns {
|
|
102
|
+
* @returns {GPUEntityBoundsReadback}
|
|
115
103
|
*/
|
|
116
|
-
get
|
|
104
|
+
get bounds(): GPUEntityBoundsReadback;
|
|
117
105
|
/**
|
|
118
|
-
*
|
|
106
|
+
* Every material something in the scene draws with, each once — the rows' own list, kept
|
|
107
|
+
* current as meshes attach and detach. What the rasterizers iterate to decide which buckets
|
|
108
|
+
* and pipelines a frame needs. The array is reused until the set changes; a scene with no
|
|
109
|
+
* rows draws with nothing.
|
|
119
110
|
*
|
|
120
|
-
*
|
|
121
|
-
|
|
122
|
-
|
|
111
|
+
* @returns {ShadeMaterial[]}
|
|
112
|
+
*/
|
|
113
|
+
get drawn_materials(): import("../material/ShadeMaterial.js").ShadeMaterial[];
|
|
114
|
+
/**
|
|
115
|
+
* Bring the GPU scene database in line with the scene, writing only the rows that changed:
|
|
116
|
+
* the scene root's, once; a light's, as it arrives; and every entity's row that a system
|
|
117
|
+
* marked since the last build. Nothing is walked — the rows keep what was marked.
|
|
123
118
|
*/
|
|
124
119
|
build(): void;
|
|
125
120
|
/**
|
|
@@ -128,15 +123,24 @@ export class GPUSceneContext {
|
|
|
128
123
|
*/
|
|
129
124
|
update(ctx: GraphicsContext): void;
|
|
130
125
|
/**
|
|
131
|
-
* Per-frame
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
*
|
|
126
|
+
* Per-frame GPU-side scene update, once per scene per frame, after every view's {@link update}
|
|
127
|
+
* has flushed what the CPU changed:
|
|
128
|
+
*
|
|
129
|
+
* 1. the animation tick — pending registrations drained, `clip.time` advanced, apply → resolve
|
|
130
|
+
* → hierarchy propagate → skin-matrix prep → skinning, through {@link GPUAnimationManager#tick};
|
|
131
|
+
* 2. render bounds — every mesh row's world box and sphere, derived from its geometry under
|
|
132
|
+
* the `global` the hierarchy pass just composed, because the CPU does not hold that matrix
|
|
133
|
+
* for a subtree the GPU drives;
|
|
134
|
+
* 3. light poses — every light record's position and direction, from its entity's row, for
|
|
135
|
+
* the same reason;
|
|
136
|
+
* 4. the TLAS — rebuilt from those bounds when anything moved, on either side.
|
|
137
|
+
*
|
|
138
|
+
* All four into `cmd_ctx`, in that order, so the tree the frame's ray passes traverse is built
|
|
139
|
+
* over this frame's bounds rather than last frame's, and what lights the frame is where it is
|
|
140
|
+
* this frame.
|
|
137
141
|
*
|
|
138
|
-
* `dt_seconds` is wall-clock seconds since the last call (the
|
|
139
|
-
*
|
|
142
|
+
* `dt_seconds` is wall-clock seconds since the last call (the renderer's `time_delta_seconds`
|
|
143
|
+
* argument to `render()`).
|
|
140
144
|
*
|
|
141
145
|
* @param {ShadeGPUCommandContext} cmd_ctx
|
|
142
146
|
* @param {number} dt_seconds wall-clock seconds since last call
|
|
@@ -153,7 +157,8 @@ export class GPUSceneContext {
|
|
|
153
157
|
export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
|
|
154
158
|
export type GPUGeometryManager = import("../geometry/GPUGeometryManager.js").GPUGeometryManager;
|
|
155
159
|
export type GPUMaterialManager = import("../material/GPUMaterialManager.js").GPUMaterialManager;
|
|
156
|
-
export type
|
|
160
|
+
export type ShadeMaterial = import("../material/ShadeMaterial.js").ShadeMaterial;
|
|
161
|
+
export type GPURecordWriter = import("../buffer/table/serde/generate_record_writer.js").GPURecordWriter;
|
|
157
162
|
import { Brick4LightMap } from "../global_illumination/brick4/Brick4LightMap.js";
|
|
158
163
|
import { Scene } from "./Scene.js";
|
|
159
164
|
import { GPUSceneVolumetrics } from "../volumetrics/GPUSceneVolumetrics.js";
|
|
@@ -163,5 +168,7 @@ import { GPUInstancesAccelerationStructure } from "./GPUInstancesAccelerationStr
|
|
|
163
168
|
import { GPUAnimationManager } from "../animation/GPUAnimationManager.js";
|
|
164
169
|
import { GPUDatabase } from "../buffer/table/GPUDatabase.js";
|
|
165
170
|
import { GPUMeshSkinningContext } from "../animation/skinning/GPUMeshSkinningContext.js";
|
|
171
|
+
import { GPUSceneRows } from "./rows/GPUSceneRows.js";
|
|
172
|
+
import { GPUEntityBoundsReadback } from "./rows/GPUEntityBoundsReadback.js";
|
|
166
173
|
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
167
174
|
//# sourceMappingURL=GPUSceneContext.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUSceneContext.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/scene/GPUSceneContext.js"],"names":[],"mappings":"AA4DA;;;;;;;;;GASG;AACH;IA0II;;;;OAIG;IACH,sBAHW,eAAe,SACf,KAAK,EAiCf;IA5KD;;;OAGG;IACH,aAFU,MAAM,CAEE;IAElB;;OAEG;IACH,YAFU,kBAAkB,CAEjB;IAEX;;OAEG;IACH,WAFU,kBAAkB,CAElB;IAGV;;OAEG;IACH,sBAFU,cAAc,CAEH;IASrB;;;OAGG;IACH,mBAEC;IAOD,uCAEC;IAQD;;;OAGG;IACH,iCAEC;IAOD;;;OAGG;IACH,8CAEC;IAOD;;;OAGG;IACH,8CAEC;IA0FD;;OAEG;IACH,6CAEC;IAYD;;;OAGG;IACH,kCAEC;IAED;;;;;OAKG;IACH,uCAEC;IAED;;;;;;;;;;;OAWG;IACH,uCAUC;IAED,+BAUC;IAED;;;;;;;;;;OAUG;IACH,yBAEC;IAED;;;;;OAKG;IACH,sCAMC;IAOD;;;;;;;OAOG;IACH,8EAEC;IA0BD;;;;OAIG;IACH,cAqEC;IAED;;;OAGG;IACH,YAFW,eAAe,QA0BzB;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,cAHW,sBAAsB,cACtB,MAAM,QAuBhB;IAoCD,gBAYC;IAIL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C;8BArjBY,OAAO,uBAAuB,EAAE,eAAe;iCAC/C,OAAO,mCAAmC,EAAE,kBAAkB;iCAC9D,OAAO,mCAAmC,EAAE,kBAAkB;4BAC9D,OAAO,8BAA8B,EAAE,aAAa;8BACpD,OAAO,iDAAiD,EAAE,eAAe;+BAtBvD,iDAAiD;sBAI1D,YAAY;oCADE,uCAAuC;mCADxC,gCAAgC;oCAD/B,mDAAmD;kDAIrC,wCAAwC;oCAPtD,qCAAqC;4BAC7C,gCAAgC;uCAOrB,iDAAiD;6BAM3D,wBAAwB;wCADb,mCAAmC;uCAdpC,wCAAwC"}
|