@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
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
import { assert } from "../../../core/assert.js";
|
|
2
|
-
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
3
|
-
import { aabb3_from_v3_array_transformed } from "../../../core/geom/3d/aabb/aabb3_from_v3_array_transformed.js";
|
|
4
|
-
import { aabb3_matrix4_project } from "../../../core/geom/3d/aabb/aabb3_matrix4_project.js";
|
|
5
|
-
import { sphere_matrix4_transform } from "../../../core/geom/3d/sphere/sphere_matrix4_transform.js";
|
|
6
|
-
import { epsilonEquals } from "../../../core/math/epsilonEquals.js";
|
|
7
|
-
import { optional_equality } from "../../../core/model/object/optional_equality.js";
|
|
8
|
-
import { StandardAttributes } from "../geometry/StandardAttributes.js";
|
|
9
|
-
import { Node3D } from "./Node3D.js";
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* @typedef {import("../geometry/MeshletGeometry.js").MeshletGeometry} MeshletGeometry
|
|
13
|
-
* @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
export class Mesh extends Node3D {
|
|
17
|
-
/**
|
|
18
|
-
* @type {MeshletGeometry}
|
|
19
|
-
*/
|
|
20
|
-
geometry;
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* @type {ShadeMaterial}
|
|
24
|
-
*/
|
|
25
|
-
material;
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* World-space AABB
|
|
29
|
-
* @type {Float32Array}
|
|
30
|
-
*/
|
|
31
|
-
bounding_box = new Float32Array(6);
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
* @type {Float32Array}
|
|
36
|
-
*/
|
|
37
|
-
bounding_sphere = new Float32Array(4);
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
*
|
|
41
|
-
* @returns {Mesh}
|
|
42
|
-
*/
|
|
43
|
-
clone() {
|
|
44
|
-
const r = new Mesh();
|
|
45
|
-
|
|
46
|
-
r.copy(this);
|
|
47
|
-
|
|
48
|
-
return r;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
*
|
|
53
|
-
* @param {Mesh} other
|
|
54
|
-
*/
|
|
55
|
-
copy(other) {
|
|
56
|
-
|
|
57
|
-
if (this === other) {
|
|
58
|
-
// special case
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
super.copy(other);
|
|
63
|
-
|
|
64
|
-
this.geometry = other.geometry;
|
|
65
|
-
this.material = other.material;
|
|
66
|
-
this.name = other.name;
|
|
67
|
-
|
|
68
|
-
this.bounding_box.set(other.bounding_box);
|
|
69
|
-
this.bounding_sphere.set(other.bounding_sphere);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
*
|
|
74
|
-
* @param {Mesh} other
|
|
75
|
-
* @returns {boolean}
|
|
76
|
-
*/
|
|
77
|
-
equals(other) {
|
|
78
|
-
return this.name === other.name
|
|
79
|
-
&& optional_equality(this.geometry, other.geometry)
|
|
80
|
-
&& optional_equality(this.material, other.material)
|
|
81
|
-
&& this.transform_global.equals(other.transform_global)
|
|
82
|
-
;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
updateMatrices() {
|
|
86
|
-
super.updateMatrices();
|
|
87
|
-
|
|
88
|
-
this.updateBoundsBasic();
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
updateBoundsBasic() {
|
|
92
|
-
// a Transform64's matrix starts at element 0, so the transform is its own mat4 argument —
|
|
93
|
-
// going through `.matrix` would allocate a view per call for nothing
|
|
94
|
-
const m = this.transform_global;
|
|
95
|
-
|
|
96
|
-
aabb3_matrix4_project(this.bounding_box, this.geometry.bounding_box, m);
|
|
97
|
-
sphere_matrix4_transform(this.bounding_sphere, this.geometry.bounding_sphere, m);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
updateBoundsTight() {
|
|
101
|
-
|
|
102
|
-
const t = this.transform_global;
|
|
103
|
-
|
|
104
|
-
const unrotated = epsilonEquals(t.rotation_x, 0)
|
|
105
|
-
&& epsilonEquals(t.rotation_y, 0)
|
|
106
|
-
&& epsilonEquals(t.rotation_z, 0)
|
|
107
|
-
&& epsilonEquals(t.rotation_w, 1);
|
|
108
|
-
|
|
109
|
-
if (unrotated) {
|
|
110
|
-
// no rotation component, can safely scale/translate geometry bounds to get tight fit
|
|
111
|
-
this.updateBoundsBasic();
|
|
112
|
-
|
|
113
|
-
} else {
|
|
114
|
-
|
|
115
|
-
throw new Error('not implemented');
|
|
116
|
-
|
|
117
|
-
const position_attribute = this.geometry.getAttribute(StandardAttributes.Position);
|
|
118
|
-
const position_array = position_attribute.data;
|
|
119
|
-
|
|
120
|
-
{
|
|
121
|
-
const bounds = new AABB3();
|
|
122
|
-
|
|
123
|
-
aabb3_from_v3_array_transformed(
|
|
124
|
-
bounds,
|
|
125
|
-
position_array, position_array.length,
|
|
126
|
-
this.transform_global
|
|
127
|
-
);
|
|
128
|
-
|
|
129
|
-
bounds.writeToArray(this.bounding_box, 0);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
{
|
|
133
|
-
// todo do a tight sphere bounds
|
|
134
|
-
sphere_matrix4_transform(this.bounding_sphere, this.geometry.bounding_sphere, this.transform_global);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
*
|
|
141
|
-
* @param {MeshletGeometry} geometry
|
|
142
|
-
* @param {ShadeMaterial} material
|
|
143
|
-
* @param {number[]|Float32Array|Float64Array} [transform] 4x4 affine matrix, column-major
|
|
144
|
-
* @return {Mesh}
|
|
145
|
-
*/
|
|
146
|
-
static from(geometry, material, transform) {
|
|
147
|
-
assert.defined(geometry, 'geometry');
|
|
148
|
-
assert.defined(material, 'material');
|
|
149
|
-
|
|
150
|
-
assert.equal(geometry.isMeshletGeometry, true, 'geometry.isMeshletGeometry !== true');
|
|
151
|
-
|
|
152
|
-
const r = new Mesh();
|
|
153
|
-
|
|
154
|
-
r.geometry = geometry;
|
|
155
|
-
r.material = material;
|
|
156
|
-
|
|
157
|
-
if (transform !== undefined) {
|
|
158
|
-
r.transform_local.fromMatrix(transform);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
r.updateMatrices();
|
|
162
|
-
|
|
163
|
-
return r;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
Mesh.prototype.isMesh = true;
|
|
@@ -1,263 +0,0 @@
|
|
|
1
|
-
import Vector3 from "../../../core/geom/Vector3.js";
|
|
2
|
-
import { t64_look_rotation } from "../../../engine/ecs/transform/t64_look_rotation.js";
|
|
3
|
-
import { t64_transform_direction } from "../../../engine/ecs/transform/t64_transform_direction.js";
|
|
4
|
-
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
5
|
-
import { TransformAuthority } from "./TransformAuthority.js";
|
|
6
|
-
|
|
7
|
-
let id_counter = 0;
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Note that hierarchy only exists on the CPU side
|
|
11
|
-
* The only transform that GPU will see is the {@link transform_global}
|
|
12
|
-
*/
|
|
13
|
-
export class Node3D {
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Stable numeric id, unique across every Node3D instance (meshes,
|
|
17
|
-
* lights, scenes, anchors). Used as the key in
|
|
18
|
-
* `GPUSceneContext.id_mapping` to look up the node's row in the
|
|
19
|
-
* GPU `transforms` table — the binding survives table compaction
|
|
20
|
-
* or rebuild because it's tied to the JS object's identity, not
|
|
21
|
-
* its position in any array.
|
|
22
|
-
*
|
|
23
|
-
* @type {number}
|
|
24
|
-
* @readonly
|
|
25
|
-
*/
|
|
26
|
-
id = id_counter++;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Human-readable name
|
|
30
|
-
* @type {string}
|
|
31
|
-
*/
|
|
32
|
-
name = ""
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* @type {number}
|
|
36
|
-
*/
|
|
37
|
-
#version = 0;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Bumped by {@link updateMatrices}. The renderer compares it against the version it last
|
|
41
|
-
* uploaded for this node's row, so a node that has not moved since the previous frame costs
|
|
42
|
-
* nothing beyond the comparison — that is what keeps per-frame scene upkeep proportional to
|
|
43
|
-
* what changed rather than to scene size.
|
|
44
|
-
*
|
|
45
|
-
* A caller that mutates `transform_local` without calling {@link updateMatrices} leaves
|
|
46
|
-
* `transform_global` stale, and this counter says so: both are derived, and neither is
|
|
47
|
-
* refreshed until the call is made.
|
|
48
|
-
*
|
|
49
|
-
* @returns {number}
|
|
50
|
-
*/
|
|
51
|
-
get version() {
|
|
52
|
-
return this.#version;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* @param {boolean} v
|
|
57
|
-
*/
|
|
58
|
-
set needsUpdate(v) {
|
|
59
|
-
if (v) {
|
|
60
|
-
this.#version++;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Who writes this node's TRS in the GPU `transforms` table. Declared, never inferred — see
|
|
66
|
-
* {@link TransformAuthority} for what each side owns and why guessing does not work.
|
|
67
|
-
*
|
|
68
|
-
* @type {TransformAuthority}
|
|
69
|
-
*/
|
|
70
|
-
transform_authority = TransformAuthority.CPU;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* World transform, **derived** — {@link updateMatrices} recomputes it from
|
|
74
|
-
* {@link transform_local} and the parent chain, so writing it directly is undone the moment
|
|
75
|
-
* anything refreshes. Place a node through its local transform.
|
|
76
|
-
*
|
|
77
|
-
* @type {Transform64}
|
|
78
|
-
*/
|
|
79
|
-
transform_global = new Transform64();
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* Local transform, and the node's own truth. Passive: setting a component does not refresh the
|
|
83
|
-
* matrix, and nothing downstream sees the change until {@link updateMatrices} runs.
|
|
84
|
-
*
|
|
85
|
-
* @type {Transform64}
|
|
86
|
-
*/
|
|
87
|
-
transform_local = new Transform64();
|
|
88
|
-
|
|
89
|
-
parent = null;
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
*
|
|
93
|
-
* @type {Node3D[]}
|
|
94
|
-
*/
|
|
95
|
-
children = []
|
|
96
|
-
|
|
97
|
-
/**
|
|
98
|
-
* Orientation vector — `(0,0,1)` rotated by the node's global transform. Freshly allocated;
|
|
99
|
-
* hold on to it rather than reading this in a loop.
|
|
100
|
-
*
|
|
101
|
-
* @return {Vector3}
|
|
102
|
-
*/
|
|
103
|
-
get forward() {
|
|
104
|
-
return t64_transform_direction(new Vector3(), this.transform_global, 0, 0, 1);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Orient this node so its local +Z axis points along `v`. Preserves
|
|
109
|
-
* position. A zero-length input is a no-op. Recomputes
|
|
110
|
-
* `transform_global` so the new orientation is visible immediately.
|
|
111
|
-
*
|
|
112
|
-
* @param {Vector3|number[]} v
|
|
113
|
-
*/
|
|
114
|
-
set forward(v) {
|
|
115
|
-
const fx = v[0], fy = v[1], fz = v[2];
|
|
116
|
-
if (fx === 0 && fy === 0 && fz === 0) return;
|
|
117
|
-
|
|
118
|
-
t64_look_rotation(this.transform_local, fx, fy, fz, 0, 1, 0);
|
|
119
|
-
this.updateMatrices();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
* Orientation vector — `(1,0,0)` rotated by the node's global transform. Freshly allocated;
|
|
124
|
-
* hold on to it rather than reading this in a loop.
|
|
125
|
-
*
|
|
126
|
-
* @return {Vector3}
|
|
127
|
-
*/
|
|
128
|
-
get right() {
|
|
129
|
-
return t64_transform_direction(new Vector3(), this.transform_global, 1, 0, 0);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* @param {Vector3|number[]} v
|
|
134
|
-
*/
|
|
135
|
-
set position(v) {
|
|
136
|
-
this.transform_local.setTranslation(v[0], v[1], v[2]);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Live view over the local transform's own storage, freshly allocated on every access. Writing
|
|
141
|
-
* through it does not refresh anything — {@link updateMatrices} still has to run.
|
|
142
|
-
*
|
|
143
|
-
* @returns {Float64Array}
|
|
144
|
-
*/
|
|
145
|
-
get position() {
|
|
146
|
-
return this.transform_local.translation;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
copy(other) {
|
|
150
|
-
this.transform_local.copy(other.transform_local);
|
|
151
|
-
this.transform_global.copy(other.transform_global);
|
|
152
|
-
|
|
153
|
-
this.#version++;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
clone() {
|
|
157
|
-
|
|
158
|
-
const r = new Node3D();
|
|
159
|
-
|
|
160
|
-
r.copy(this);
|
|
161
|
-
|
|
162
|
-
const children = this.children;
|
|
163
|
-
const child_count = children.length;
|
|
164
|
-
|
|
165
|
-
for (let i = 0; i < child_count; i++) {
|
|
166
|
-
const clone = children[i].clone();
|
|
167
|
-
|
|
168
|
-
clone.parent = r;
|
|
169
|
-
|
|
170
|
-
r.children.push(clone);
|
|
171
|
-
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
return r;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
/**
|
|
178
|
-
*
|
|
179
|
-
* @param {function(Node3D)} callback
|
|
180
|
-
* @param {*} [thisArg]
|
|
181
|
-
*/
|
|
182
|
-
traverse(callback, thisArg) {
|
|
183
|
-
callback.call(thisArg, this);
|
|
184
|
-
|
|
185
|
-
for (const child of this.children) {
|
|
186
|
-
child.traverse(callback, thisArg);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Recompose this node's world transform and every descendant's.
|
|
192
|
-
*
|
|
193
|
-
* The local matrix is refreshed first because nothing else will: a `Transform64` does not track
|
|
194
|
-
* its own components, and {@link Transform64.multiplyTransforms} composes through matrices. Skip
|
|
195
|
-
* it and the node would be placed where it was the last time someone asked.
|
|
196
|
-
*/
|
|
197
|
-
updateMatrices() {
|
|
198
|
-
|
|
199
|
-
const transform_local = this.transform_local;
|
|
200
|
-
|
|
201
|
-
transform_local.updateMatrix();
|
|
202
|
-
|
|
203
|
-
const parent = this.parent;
|
|
204
|
-
|
|
205
|
-
if (parent === null) {
|
|
206
|
-
this.transform_global.copy(transform_local);
|
|
207
|
-
} else {
|
|
208
|
-
this.transform_global.multiplyTransforms(parent.transform_global, transform_local);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
this.#version++;
|
|
212
|
-
|
|
213
|
-
const children = this.children;
|
|
214
|
-
|
|
215
|
-
const length = children.length;
|
|
216
|
-
|
|
217
|
-
for (let i = 0; i < length; i++) {
|
|
218
|
-
|
|
219
|
-
const child = children[i];
|
|
220
|
-
|
|
221
|
-
child.updateMatrices();
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
/**
|
|
226
|
-
*
|
|
227
|
-
* @param {Node3D[]} children
|
|
228
|
-
*/
|
|
229
|
-
addChildren(children) {
|
|
230
|
-
const length = children.length;
|
|
231
|
-
for (let i = 0; i < length; i++) {
|
|
232
|
-
this.addChild(children[i]);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
/**
|
|
237
|
-
*
|
|
238
|
-
* @param {Node3D} child
|
|
239
|
-
*/
|
|
240
|
-
addChild(child) {
|
|
241
|
-
if (child === this) {
|
|
242
|
-
throw new Error(`Can't add to self`);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
if (child.parent !== null) {
|
|
246
|
-
throw new Error(`node already attached to something`);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
child.parent = this;
|
|
250
|
-
|
|
251
|
-
this.children.push(child);
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Type tag — lets `instanceof`-free callers (e.g. `InstanceBatch.add`)
|
|
258
|
-
* accept anything that conforms to the Node3D shape.
|
|
259
|
-
*
|
|
260
|
-
* @readonly
|
|
261
|
-
* @type {boolean}
|
|
262
|
-
*/
|
|
263
|
-
Node3D.prototype.isNode3D = true;
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { TransformAuthority } from "./TransformAuthority.js";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* What one {@link Node3D} owns inside a {@link GPUSceneContext}'s scene database: a row in the
|
|
5
|
-
* `transforms` table, and — when the node is a {@link Mesh} — a row in the `meshes` table too.
|
|
6
|
-
*
|
|
7
|
-
* **Rows are stable for the lifetime of the binding.** Removing a node frees its rows and leaves a
|
|
8
|
-
* hole rather than compacting the table, because rows are addresses: GPU animation targets a node
|
|
9
|
-
* by row index, `meshes.node` points at one, and every `transforms.parent` is one. Compaction would
|
|
10
|
-
* silently re-point all of them, so the tables tolerate holes instead and the passes that walk them
|
|
11
|
-
* consult occupancy.
|
|
12
|
-
*/
|
|
13
|
-
export class SceneNodeBinding {
|
|
14
|
-
/**
|
|
15
|
-
* Row in the scene database's `transforms` table.
|
|
16
|
-
*
|
|
17
|
-
* @type {number}
|
|
18
|
-
*/
|
|
19
|
-
transform_row = 0;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Row in the scene database's `meshes` table. Meaningful only for a node that is a mesh —
|
|
23
|
-
* `node.isMesh` is what says whether to read it, not this value.
|
|
24
|
-
*
|
|
25
|
-
* @type {number}
|
|
26
|
-
*/
|
|
27
|
-
mesh_row = -1;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* The {@link Node3D.version} that the rows above were last written from. A node whose version
|
|
31
|
-
* still matches this has not moved since, and costs nothing but the comparison.
|
|
32
|
-
*
|
|
33
|
-
* @type {number}
|
|
34
|
-
*/
|
|
35
|
-
version = -1;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* The {@link TransformAuthority} in force when the rows were last written.
|
|
39
|
-
*
|
|
40
|
-
* Kept because handing a row back to the CPU has to be acted on rather than waited for: while
|
|
41
|
-
* the GPU owned the row the node's own version stood still, so nothing would ever mark it as
|
|
42
|
-
* needing a write, and the CPU would take over a row it never wrote to.
|
|
43
|
-
*
|
|
44
|
-
* @type {TransformAuthority}
|
|
45
|
-
*/
|
|
46
|
-
authority = TransformAuthority.CPU;
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Membership-sweep marker. Set to the current sweep's number every time the node is found in
|
|
50
|
-
* the scene; a binding still carrying an older number after a sweep belongs to a node that has
|
|
51
|
-
* left, and its rows are freed.
|
|
52
|
-
*
|
|
53
|
-
* @type {number}
|
|
54
|
-
*/
|
|
55
|
-
epoch = -1;
|
|
56
|
-
}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
import { compute_skin_world_bounds } from "../animation/compute_skin_world_bounds.js";
|
|
2
|
-
import { Mesh } from "./Mesh.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @typedef {import("../animation/Skin.js").Skin} Skin
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* A mesh whose vertices are deformed each frame by joint transforms.
|
|
10
|
-
*
|
|
11
|
-
* On the CPU side, a `SkinnedMesh` is just a {@link Mesh} that points at
|
|
12
|
-
* the *unmodified* source {@link MeshletGeometry} — the same way every
|
|
13
|
-
* other instance of that mesh would. Multiple `SkinnedMesh` instances
|
|
14
|
-
* share the source geometry; no per-instance CPU clones happen.
|
|
15
|
-
*
|
|
16
|
-
* The GPU side makes the deformation possible by allocating a
|
|
17
|
-
* per-instance vertex/metadata clone of the source geometry inside the
|
|
18
|
-
* existing meshlet buffers (see
|
|
19
|
-
* {@link GPUMeshletManager#clone_batch_allocation}). The clone is
|
|
20
|
-
* registered as a separate geometry id (see
|
|
21
|
-
* {@link GPUGeometryManager#add_clone}); the instance record this mesh
|
|
22
|
-
* produces points at the clone, not at the source. Rasterization then
|
|
23
|
-
* sees the clone like any other geometry.
|
|
24
|
-
*
|
|
25
|
-
* Per-frame, a skinning compute pass reads the source's vertex data and
|
|
26
|
-
* the joint matrices and writes the deformed result into the clone's
|
|
27
|
-
* vertex region — leaving every other instance pointed at the source
|
|
28
|
-
* untouched. The skin matrices are computed per the glTF spec formula
|
|
29
|
-
* `inverse(meshNode.worldMatrix) × jointNode.worldMatrix ×
|
|
30
|
-
* inverseBindMatrix`, and the rasterizer re-applies
|
|
31
|
-
* `mesh.transform_global` to the result — so the mesh node's own
|
|
32
|
-
* transform cancels out of the rendered position exactly, which is what
|
|
33
|
-
* the glTF spec asks for. The leftmost factor is taken live from the
|
|
34
|
-
* mesh's own transforms row inside {@link shader_meshlet_apply_skinning};
|
|
35
|
-
* see {@link chunk_skin_blend_mesh_local} for why it goes into each
|
|
36
|
-
* matrix rather than onto the blended position.
|
|
37
|
-
*
|
|
38
|
-
* **`transform_global` on a skinned mesh is the engine's, not the
|
|
39
|
-
* asset's.** It cancels out of the rendered position, so glTF declares
|
|
40
|
-
* it meaningless — and the one meaning it does have is the frame the
|
|
41
|
-
* clone's vertices are written in, which the fold above requires to be
|
|
42
|
-
* rigid against the skin. {@link GPUAnimationManager#register_skin}
|
|
43
|
-
* therefore overwrites it, by way of
|
|
44
|
-
* {@link skin_normalize_mesh_frame}, with the skin's own bind
|
|
45
|
-
* transform. Whatever the file put there is discarded, and anything
|
|
46
|
-
* reading this expecting the file's value is reading the wrong thing.
|
|
47
|
-
* See `renderer/animation/SKINNING_FRAME_PLAN.md`.
|
|
48
|
-
*
|
|
49
|
-
* The mesh's **skin id** — a row in a GPU table — lives in
|
|
50
|
-
* {@link GPUMeshSkinningContext} and nowhere else. The CPU-side
|
|
51
|
-
* {@link Skin} it was registered with is a different thing, pure data
|
|
52
|
-
* that knows nothing about the GPU, and this mesh holds a reference to
|
|
53
|
-
* it in {@link skin} so its bounds can be worked out without asking the
|
|
54
|
-
* GPU anything. Bind the mesh to a skin via
|
|
55
|
-
* `gpu_scene.skinning.bind(mesh, skin_id)`, or rely on
|
|
56
|
-
* {@link GPUAnimationManager#register_skin} to do it for every entry
|
|
57
|
-
* in `Skin.meshes` — which is also what populates {@link skin}. Until
|
|
58
|
-
* bound, the clone routes through the rendering path but its vertices
|
|
59
|
-
* stay at the source's bind-pose values — useful as an intermediate
|
|
60
|
-
* verification state, and the state in which this mesh bounds itself
|
|
61
|
-
* exactly like a regular {@link Mesh}.
|
|
62
|
-
*
|
|
63
|
-
* A note on which bounds to believe. {@link Mesh#bounding_box} here is
|
|
64
|
-
* derived from whatever pose the *CPU* can see, and for a character
|
|
65
|
-
* animated by the pose accumulator that is the rest pose — the joints
|
|
66
|
-
* are {@link TransformAuthority.GPU} and their `transform_global` is
|
|
67
|
-
* never advanced. It is the right size and in the right place, and it
|
|
68
|
-
* is what seeds the scene database's `meshes` row. The deformed world
|
|
69
|
-
* box, refreshed every frame from the vertices the skinning pass just
|
|
70
|
-
* moved, is that row — read it from there when the silhouette is what
|
|
71
|
-
* matters.
|
|
72
|
-
*/
|
|
73
|
-
export class SkinnedMesh extends Mesh {
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* The skin whose formula places this mesh's vertices, or `null` while none does.
|
|
77
|
-
*
|
|
78
|
-
* Not "is the deformation running" — {@link GPUMeshSkinningContext#unbind} can stop the
|
|
79
|
-
* skinning pass without this changing, and a mesh whose pass has stopped still holds vertices
|
|
80
|
-
* the skin put there. So {@link GPUAnimationManager#register_skin} writes it and nothing
|
|
81
|
-
* clears it: once a skin has taken a mesh over, its formula stays the right basis for
|
|
82
|
-
* {@link updateBoundsBasic} whether or not a pass runs this frame. Clear it by hand to hand
|
|
83
|
-
* the mesh back to {@link Mesh}'s composition.
|
|
84
|
-
*
|
|
85
|
-
* CPU data throughout (see {@link Skin}). The GPU-side skin *id* is a table row and lives in
|
|
86
|
-
* {@link GPUMeshSkinningContext}; this does not expose it.
|
|
87
|
-
*
|
|
88
|
-
* Nothing refreshes derived state on assignment — set this and the bounds go on describing
|
|
89
|
-
* the previous basis until {@link updateMatrices} or {@link updateBoundsBasic} runs.
|
|
90
|
-
*
|
|
91
|
-
* A clone shares the reference, exactly as {@link Skin#copy} shares its joint and mesh
|
|
92
|
-
* references: retargeting a cloned character means replacing this alongside the skin's own
|
|
93
|
-
* arrays, which {@link instantiate_scene_bundle} gets for free by re-registering the
|
|
94
|
-
* corresponded skin.
|
|
95
|
-
*
|
|
96
|
-
* @type {Skin|null}
|
|
97
|
-
*/
|
|
98
|
-
skin = null;
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* @returns {SkinnedMesh}
|
|
102
|
-
*/
|
|
103
|
-
clone() {
|
|
104
|
-
const r = new SkinnedMesh();
|
|
105
|
-
r.copy(this);
|
|
106
|
-
return r;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* @param {SkinnedMesh} other
|
|
111
|
-
*/
|
|
112
|
-
copy(other) {
|
|
113
|
-
|
|
114
|
-
if (this === other) {
|
|
115
|
-
// special case
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
super.copy(other);
|
|
120
|
-
|
|
121
|
-
this.skin = other.skin;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
/**
|
|
125
|
-
* World bounds of the deformed mesh, in whatever pose {@link skin}'s joints currently hold.
|
|
126
|
-
*
|
|
127
|
-
* `Mesh`'s version puts the rest-pose geometry under `transform_global`, and for a skinned mesh
|
|
128
|
-
* that is the wrong composition rather than an imprecise one: the renderer *cancels*
|
|
129
|
-
* `transform_global` out of a skinned vertex's position (see the class docs), so applying it to
|
|
130
|
-
* the bounds applies a transform the vertices never see. On a glTF character whose root node
|
|
131
|
-
* carries the file's centimetre→metre scale — the shape every FBX-derived asset has, with
|
|
132
|
-
* vertex positions in metres and inverse-bind matrices in centimetres — the result is a box
|
|
133
|
-
* 100× too small, small enough that frustum culling and TLAS extraction see a point where a
|
|
134
|
-
* character stands.
|
|
135
|
-
*
|
|
136
|
-
* So a bound mesh goes through {@link compute_skin_world_bounds}, which composes the bound the
|
|
137
|
-
* same way the renderer composes the vertex. An unbound one keeps `Mesh`'s composition, because
|
|
138
|
-
* an unbound clone really is drawn as `transform_global × source vertices`. A skin with no
|
|
139
|
-
* joints deforms nothing and is treated the same way.
|
|
140
|
-
*
|
|
141
|
-
* **Reads the skeleton, so call it when the skeleton is settled.** The joints are outside this
|
|
142
|
-
* mesh's own subtree — a glTF character's joint root is the mesh node's sibling — and
|
|
143
|
-
* {@link Node3D#updateMatrices} walks pre-order, so the inherited call this gets mid-walk can
|
|
144
|
-
* read joints that have not been visited yet and land the mesh where the character was before
|
|
145
|
-
* the move. That is why {@link GPUSceneContext} re-derives it on the way to writing the
|
|
146
|
-
* `meshes` row, which is where the value is actually consumed and where every walk is over.
|
|
147
|
-
*/
|
|
148
|
-
updateBoundsBasic() {
|
|
149
|
-
const skin = this.skin;
|
|
150
|
-
|
|
151
|
-
if (skin === null || skin.joints.length === 0) {
|
|
152
|
-
super.updateBoundsBasic();
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
const geometry = this.geometry;
|
|
157
|
-
|
|
158
|
-
compute_skin_world_bounds(
|
|
159
|
-
skin,
|
|
160
|
-
geometry.bounding_box, geometry.bounding_sphere,
|
|
161
|
-
this.bounding_box, this.bounding_sphere
|
|
162
|
-
);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* @readonly
|
|
168
|
-
* @type {boolean}
|
|
169
|
-
*/
|
|
170
|
-
SkinnedMesh.prototype.isSkinnedMesh = true;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Who writes a node's `local_translation` / `local_rotation` / `local_scale` in the scene
|
|
3
|
-
* database's `transforms` table.
|
|
4
|
-
*
|
|
5
|
-
* Both sides can reach those fields — the CPU through {@link GPUSceneContext}, the GPU through the
|
|
6
|
-
* pose accumulator's resolve pass — and neither can tell that the other wrote. Without a stated
|
|
7
|
-
* owner the two race, and the race is not hypothetical: {@link Node3D.updateMatrices} recurses into
|
|
8
|
-
* children, so moving a character's root marks every joint under it as changed, and the CPU would
|
|
9
|
-
* push its own idea of each joint's pose over whatever the animation had just resolved.
|
|
10
|
-
*
|
|
11
|
-
* `global` and `prev_global` are not covered by this — they are GPU-derived for every node, whoever
|
|
12
|
-
* owns the TRS they are composed from.
|
|
13
|
-
*
|
|
14
|
-
* @enum {number}
|
|
15
|
-
*/
|
|
16
|
-
export const TransformAuthority = {
|
|
17
|
-
/**
|
|
18
|
-
* The CPU owns the TRS. Its scene-graph node is the truth, and changes to it are pushed to the
|
|
19
|
-
* row as they happen. This is the default, and it is what entity placement wants.
|
|
20
|
-
*/
|
|
21
|
-
CPU: 0,
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* The GPU owns the TRS — animation clips, effects, anything writing through the pose
|
|
25
|
-
* accumulator. The CPU allocates and seeds the row, then never writes to it again, so the
|
|
26
|
-
* node's own `transform_local` stops describing it and should not be read as if it did.
|
|
27
|
-
*
|
|
28
|
-
* A node under GPU authority still follows a CPU-driven parent: the hierarchy pass composes
|
|
29
|
-
* `global` from this node's TRS and the parent chain, so the parent moving carries the child
|
|
30
|
-
* without anyone writing to the child's row.
|
|
31
|
-
*/
|
|
32
|
-
GPU: 1,
|
|
33
|
-
};
|