@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
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import("../geometry/MeshletGeometry.js").MeshletGeometry} MeshletGeometry
|
|
6
|
+
* @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* One node of a loaded model, as a loader describes it: a name, the index of its parent, its own
|
|
11
|
+
* local transform, and — when the node draws — a geometry and a material.
|
|
12
|
+
*
|
|
13
|
+
* A description, not a runtime object. It has no children list, no world transform and no row:
|
|
14
|
+
* the parent index is the whole of the hierarchy, worlds are composed by whoever needs them
|
|
15
|
+
* (`prefab_compile` once per model, `shade_bundle_bounds` once per query), and what a node
|
|
16
|
+
* becomes on a screen is an entity of a {@link Prefab} instance. Nodes sit in a
|
|
17
|
+
* {@link SceneBundle} in pre-order — a parent's index below its children's — which is what lets
|
|
18
|
+
* every reader compose worlds in one forward pass.
|
|
19
|
+
*
|
|
20
|
+
* A node that draws is a primitive: a glTF mesh with one primitive is the node itself; one with
|
|
21
|
+
* several is a node with one child per primitive. Whether a primitive is skinned is not written
|
|
22
|
+
* on it — a skin names the nodes it deforms ({@link Skin.meshes}).
|
|
23
|
+
*/
|
|
24
|
+
export class SceneNode {
|
|
25
|
+
/**
|
|
26
|
+
* @type {string}
|
|
27
|
+
*/
|
|
28
|
+
name = "";
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Index of the parent in the bundle's nodes, or -1 for a root.
|
|
32
|
+
*
|
|
33
|
+
* @type {number}
|
|
34
|
+
*/
|
|
35
|
+
parent = -1;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The node's own transform, relative to its parent. Kept with its matrix current: a reader
|
|
39
|
+
* composes worlds from `local.matrix` without asking.
|
|
40
|
+
*
|
|
41
|
+
* @type {Transform64}
|
|
42
|
+
*/
|
|
43
|
+
local = new Transform64();
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* What the node draws, or `null` for a node that only places others.
|
|
47
|
+
*
|
|
48
|
+
* @type {MeshletGeometry|null}
|
|
49
|
+
*/
|
|
50
|
+
geometry = null;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* How it is drawn; `null` exactly when {@link geometry} is.
|
|
54
|
+
*
|
|
55
|
+
* @type {ShadeMaterial|null}
|
|
56
|
+
*/
|
|
57
|
+
material = null;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @param {object} [options]
|
|
61
|
+
* @param {string} [options.name]
|
|
62
|
+
* @param {number} [options.parent] -1 for a root
|
|
63
|
+
* @param {number[]} [options.translation]
|
|
64
|
+
* @param {number[]} [options.rotation] a quaternion, `x, y, z, w`
|
|
65
|
+
* @param {number[]} [options.scale]
|
|
66
|
+
* @param {ArrayLike<number>} [options.matrix] a column-major 4x4, instead of the three above
|
|
67
|
+
* @param {MeshletGeometry} [options.geometry]
|
|
68
|
+
* @param {ShadeMaterial} [options.material]
|
|
69
|
+
* @returns {SceneNode}
|
|
70
|
+
*/
|
|
71
|
+
static from({ name = "", parent = -1, translation, rotation, scale, matrix, geometry = null, material = null } = {}) {
|
|
72
|
+
assert.isString(name, 'name');
|
|
73
|
+
assert.isNumber(parent, 'parent');
|
|
74
|
+
assert.equal(Number.isInteger(parent) && parent >= -1, true, 'parent is an index into the bundle, or -1 for a root');
|
|
75
|
+
assert.equal((geometry === null) === (material === null), true, 'a primitive has a geometry and a material, and a node that does not draw has neither');
|
|
76
|
+
|
|
77
|
+
const r = new SceneNode();
|
|
78
|
+
|
|
79
|
+
r.name = name;
|
|
80
|
+
r.parent = parent;
|
|
81
|
+
r.geometry = geometry;
|
|
82
|
+
r.material = material;
|
|
83
|
+
|
|
84
|
+
const local = r.local;
|
|
85
|
+
|
|
86
|
+
if (matrix !== undefined) {
|
|
87
|
+
assert.equal(translation === undefined && rotation === undefined && scale === undefined, true, 'a matrix, or a translation, rotation and scale — not both');
|
|
88
|
+
|
|
89
|
+
local.fromMatrix(matrix);
|
|
90
|
+
} else {
|
|
91
|
+
if (translation !== undefined) {
|
|
92
|
+
local.setTranslation(translation[0], translation[1], translation[2]);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (rotation !== undefined) {
|
|
96
|
+
local.setRotation(rotation[0], rotation[1], rotation[2], rotation[3]);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
if (scale !== undefined) {
|
|
100
|
+
local.setScale(scale[0], scale[1], scale[2]);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
local.updateMatrix();
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return r;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* @readonly
|
|
112
|
+
* @type {boolean}
|
|
113
|
+
*/
|
|
114
|
+
SceneNode.prototype.isSceneNode = true;
|
|
@@ -56,8 +56,9 @@ export function canonicalize_quaternion_signs(values: Float32Array, key_count: n
|
|
|
56
56
|
* Callers add `bundle.scenes` to their scene, then pass the bundle's
|
|
57
57
|
* `skins` / `clips` to the scene's animation manager (e.g. via
|
|
58
58
|
* {@link GPUAnimationManager#register_skin} and
|
|
59
|
-
* {@link GPUAnimationManager#register_clip}) once
|
|
60
|
-
*
|
|
59
|
+
* {@link GPUAnimationManager#register_clip}) once the bundle has been
|
|
60
|
+
* compiled into a prefab and instantiated, so that the joints and targets
|
|
61
|
+
* are entities holding rows.
|
|
61
62
|
*
|
|
62
63
|
* @param {string} url un-resolved — the asset manager resolves network paths
|
|
63
64
|
* @param {Object} options
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load_gltf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/gltf/load_gltf.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load_gltf.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/gltf/load_gltf.js"],"names":[],"mappings":"AAqIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,sDATW,YAAY,aAGZ,MAAM,iBACN,MAAM,kBACN;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAC;IAAC,CAAC,EAAC,MAAM,CAAA;CAAC,QAgDlD;AAuBD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,+BAdW,MAAM;IAEgB,YAAY;IAGN,KAAK;IACY,OAAO,GAApD,IAAI,MAAM,EAAE,IAAI,GAAC,IAAI,GAAC,WAAW,CAAC;IAGF,eAAe,GAA/C,qBAAqB;IAGpB,QAAQ,WAAW,CAAC,CA+0B/B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wCARW,MAAM;IAEgB,YAAY;IACN,KAAK;IACY,OAAO,GAApD,IAAI,MAAM,EAAE,IAAI,GAAC,IAAI,GAAC,WAAW,CAAC;IACF,eAAe,GAA/C,qBAAqB;IACnB,QAAQ,QAAQ,CAAC,CAU7B;4BAtlC2B,mBAAmB;yBAUtB,gBAAgB"}
|
|
@@ -30,12 +30,10 @@ import { SpotLight } from "../../light/model/SpotLight.js";
|
|
|
30
30
|
|
|
31
31
|
import { StandardShadeMaterial } from "../../material/StandardShadeMaterial.js";
|
|
32
32
|
import { Node3DProperty } from "../../object_property/Node3DProperty.js";
|
|
33
|
-
import { Mesh } from "../../scene/Mesh.js";
|
|
34
|
-
import { Node3D } from "../../scene/Node3D.js";
|
|
35
|
-
import { SkinnedMesh } from "../../scene/SkinnedMesh.js";
|
|
36
33
|
import { ShadeTexture } from "../../texture/ShadeTexture.js";
|
|
37
34
|
import { ShadeImage } from "../../texture/source/ShadeImage.js";
|
|
38
35
|
import { SceneBundle } from "../SceneBundle.js";
|
|
36
|
+
import { SceneNode } from "../SceneNode.js";
|
|
39
37
|
import { coalesce_array_duplicates } from "../../../../format/scene/gltf/coalesce_array_duplicates.js";
|
|
40
38
|
import { fix_up_material_sides } from "./fix_up_material_sides.js";
|
|
41
39
|
import { GLTF_COMPONENT_TYPE } from "../../../../format/scene/gltf/gltf_component_type.js";
|
|
@@ -252,8 +250,9 @@ function gltf_interpolation_to_kind(interpolation) {
|
|
|
252
250
|
* Callers add `bundle.scenes` to their scene, then pass the bundle's
|
|
253
251
|
* `skins` / `clips` to the scene's animation manager (e.g. via
|
|
254
252
|
* {@link GPUAnimationManager#register_skin} and
|
|
255
|
-
* {@link GPUAnimationManager#register_clip}) once
|
|
256
|
-
*
|
|
253
|
+
* {@link GPUAnimationManager#register_clip}) once the bundle has been
|
|
254
|
+
* compiled into a prefab and instantiated, so that the joints and targets
|
|
255
|
+
* are entities holding rows.
|
|
257
256
|
*
|
|
258
257
|
* @param {string} url un-resolved — the asset manager resolves network paths
|
|
259
258
|
* @param {Object} options
|
|
@@ -314,7 +313,10 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
314
313
|
*
|
|
315
314
|
* @type {Node3D[]}
|
|
316
315
|
*/
|
|
317
|
-
const
|
|
316
|
+
const record_index_of = new Int32Array((gltf.nodes ?? []).length).fill(-1);
|
|
317
|
+
|
|
318
|
+
// what the file becomes: nodes in pre-order, as the walk below produces them
|
|
319
|
+
const bundle = new SceneBundle();
|
|
318
320
|
|
|
319
321
|
/**
|
|
320
322
|
* Queue of pending `skin.meshes` pushes. process_node() can't
|
|
@@ -583,7 +585,7 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
583
585
|
* @param {boolean} is_skinned
|
|
584
586
|
* @returns {Mesh[]}
|
|
585
587
|
*/
|
|
586
|
-
function process_mesh(mesh_index
|
|
588
|
+
function process_mesh(mesh_index) {
|
|
587
589
|
|
|
588
590
|
const mesh = meshes[mesh_index];
|
|
589
591
|
|
|
@@ -592,8 +594,7 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
592
594
|
const primitive_count = primitives.length;
|
|
593
595
|
|
|
594
596
|
/**
|
|
595
|
-
*
|
|
596
|
-
* @type {Mesh[]}
|
|
597
|
+
* @type {{geometry: MeshletGeometry, material: StandardShadeMaterial, name: string}[]}
|
|
597
598
|
*/
|
|
598
599
|
const result = [];
|
|
599
600
|
|
|
@@ -637,17 +638,7 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
637
638
|
material = default_material;
|
|
638
639
|
}
|
|
639
640
|
|
|
640
|
-
|
|
641
|
-
engine_mesh.geometry = geometry;
|
|
642
|
-
engine_mesh.material = material;
|
|
643
|
-
engine_mesh.transform_global.fromMatrix(node.worldMatrix);
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
if (mesh.name !== undefined) {
|
|
647
|
-
engine_mesh.name = mesh.name;
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
result.push(engine_mesh);
|
|
641
|
+
result.push({ geometry, material, name: mesh.name ?? "" });
|
|
651
642
|
}
|
|
652
643
|
|
|
653
644
|
return result;
|
|
@@ -735,163 +726,147 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
735
726
|
* @param {number} node_index
|
|
736
727
|
*/
|
|
737
728
|
function process_node(parent, node_index) {
|
|
738
|
-
|
|
739
729
|
const node = nodes[node_index];
|
|
740
730
|
|
|
741
|
-
// glTF "skin" attaches at the node, not the mesh: every
|
|
742
|
-
//
|
|
743
|
-
//
|
|
744
|
-
//
|
|
745
|
-
// — the joint Node3Ds may be visited *after* this node,
|
|
746
|
-
// so we just record the produced SkinnedMeshes here and
|
|
747
|
-
// push them into `skin.meshes` once the walk finishes.
|
|
731
|
+
// glTF "skin" attaches at the node, not the mesh: every primitive of the referenced
|
|
732
|
+
// mesh deforms against this skin. Resolved later, against `skins[]`, which is built
|
|
733
|
+
// after the walk — the joints may be visited *after* this node — so the primitives
|
|
734
|
+
// produced here are queued and pushed into `skin.meshes` once the walk finishes.
|
|
748
735
|
const skin_index = typeof node.skin === "number" ? node.skin : -1;
|
|
749
736
|
|
|
750
|
-
|
|
751
|
-
let produced_skinned_meshes = null;
|
|
752
|
-
|
|
753
|
-
if (node.extensions !== undefined && node.extensions.KHR_lights_punctual !== undefined) {
|
|
754
|
-
const light_index = node.extensions.KHR_lights_punctual.light;
|
|
755
|
-
|
|
756
|
-
try {
|
|
757
|
-
node3d = process_light(light_index, node);
|
|
758
|
-
} catch (e) {
|
|
759
|
-
console.error("Failed to process light ", light_index, " ", e);
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
|
|
737
|
+
const record = new SceneNode();
|
|
763
738
|
|
|
764
|
-
|
|
765
|
-
const meshes = process_mesh(node.mesh, node, skin_index !== -1);
|
|
766
|
-
|
|
767
|
-
if (meshes.length === 1) {
|
|
768
|
-
node3d = meshes[0];
|
|
769
|
-
} else if (meshes.length > 1) {
|
|
770
|
-
node3d = new Node3D();
|
|
771
|
-
|
|
772
|
-
node3d.addChildren(meshes)
|
|
773
|
-
}
|
|
774
|
-
|
|
775
|
-
if (skin_index !== -1) {
|
|
776
|
-
produced_skinned_meshes = meshes;
|
|
777
|
-
}
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
if (node3d === undefined) {
|
|
781
|
-
node3d = new Node3D();
|
|
782
|
-
}
|
|
783
|
-
|
|
784
|
-
// Stash by glTF index — joint refs and animation channel
|
|
785
|
-
// targets resolve through this lookup once the recursion
|
|
786
|
-
// unwinds.
|
|
787
|
-
node3d_by_index[node_index] = node3d;
|
|
739
|
+
record.parent = parent;
|
|
788
740
|
|
|
789
741
|
if (node.name !== undefined) {
|
|
790
|
-
|
|
742
|
+
record.name = node.name;
|
|
791
743
|
}
|
|
792
744
|
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
node3d.transform_local.fromMatrix(node.matrix);
|
|
745
|
+
const t = record.local;
|
|
796
746
|
|
|
747
|
+
if (node.matrix !== undefined) {
|
|
748
|
+
t.fromMatrix(node.matrix);
|
|
797
749
|
} else {
|
|
798
|
-
|
|
799
|
-
const t = node3d.transform_local;
|
|
800
|
-
|
|
801
750
|
if (node.translation !== undefined) {
|
|
802
751
|
const v = node.translation;
|
|
803
|
-
|
|
804
752
|
t.setTranslation(v[0], v[1], v[2]);
|
|
805
753
|
}
|
|
806
754
|
|
|
807
755
|
if (node.rotation !== undefined) {
|
|
808
756
|
const q = node.rotation;
|
|
809
|
-
|
|
810
757
|
t.setRotation(q[0], q[1], q[2], q[3]);
|
|
811
758
|
}
|
|
812
759
|
|
|
813
760
|
if (node.scale !== undefined) {
|
|
814
761
|
const v = node.scale;
|
|
815
|
-
|
|
816
762
|
t.setScale(v[0], v[1], v[2]);
|
|
817
763
|
}
|
|
764
|
+
|
|
765
|
+
t.updateMatrix();
|
|
818
766
|
}
|
|
819
767
|
|
|
768
|
+
const index = bundle.add_node(record);
|
|
820
769
|
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
770
|
+
// joint refs, channel targets and light anchors resolve through this once the
|
|
771
|
+
// recursion unwinds
|
|
772
|
+
record_index_of[node_index] = index;
|
|
824
773
|
|
|
825
|
-
|
|
826
|
-
|
|
774
|
+
if (node.extensions !== undefined && node.extensions.KHR_lights_punctual !== undefined) {
|
|
775
|
+
const light_index = node.extensions.KHR_lights_punctual.light;
|
|
827
776
|
|
|
828
|
-
|
|
777
|
+
try {
|
|
778
|
+
// a light is not a node: the node is where it is, and the bundle carries the pair
|
|
779
|
+
const punctual = process_light(light_index, node);
|
|
780
|
+
|
|
781
|
+
if (punctual.isDirectionalLight === true || punctual.isSpotLight === true) {
|
|
782
|
+
// glTF lights shine along their local -Z; engine convention is forward =
|
|
783
|
+
// shining direction. The direction is read off the matrix, which the
|
|
784
|
+
// record keeps current.
|
|
785
|
+
t64_transform_direction(SCRATCH_DIRECTION, t, 0, 0, 1);
|
|
786
|
+
t64_look_rotation(
|
|
787
|
+
t,
|
|
788
|
+
-SCRATCH_DIRECTION.x, -SCRATCH_DIRECTION.y, -SCRATCH_DIRECTION.z,
|
|
789
|
+
0, 1, 0
|
|
790
|
+
);
|
|
791
|
+
t.updateMatrix();
|
|
792
|
+
}
|
|
829
793
|
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
);
|
|
794
|
+
punctual_lights.push({ light: punctual, node: index });
|
|
795
|
+
} catch (e) {
|
|
796
|
+
console.error("Failed to process light ", light_index, " ", e);
|
|
797
|
+
}
|
|
835
798
|
}
|
|
836
799
|
|
|
837
|
-
|
|
800
|
+
if (typeof node.mesh === "number") {
|
|
801
|
+
const primitives = process_mesh(node.mesh);
|
|
838
802
|
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
// built — we collect into a queue here and process it
|
|
842
|
-
// at the end of process().
|
|
843
|
-
skin_mesh_pushes.push({
|
|
844
|
-
skin_index,
|
|
845
|
-
meshes: produced_skinned_meshes,
|
|
846
|
-
});
|
|
847
|
-
}
|
|
803
|
+
/** @type {number[]} the records that draw this mesh's primitives */
|
|
804
|
+
const produced = [];
|
|
848
805
|
|
|
806
|
+
if (primitives.length === 1) {
|
|
807
|
+
// the node is the primitive. Its name wins over the mesh's, which is what the
|
|
808
|
+
// pose query names parts by; the geometry keeps the mesh's own
|
|
809
|
+
const primitive = primitives[0];
|
|
849
810
|
|
|
850
|
-
|
|
811
|
+
record.geometry = primitive.geometry;
|
|
812
|
+
record.material = primitive.material;
|
|
851
813
|
|
|
852
|
-
|
|
853
|
-
|
|
814
|
+
if (node.name === undefined) {
|
|
815
|
+
record.name = primitive.name;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
produced.push(index);
|
|
819
|
+
} else {
|
|
820
|
+
// one child per primitive, each named after the mesh, at the node's own place
|
|
821
|
+
for (let i = 0; i < primitives.length; i++) {
|
|
822
|
+
const primitive = primitives[i];
|
|
823
|
+
const child = new SceneNode();
|
|
824
|
+
|
|
825
|
+
child.parent = index;
|
|
826
|
+
child.name = primitive.name;
|
|
827
|
+
child.geometry = primitive.geometry;
|
|
828
|
+
child.material = primitive.material;
|
|
854
829
|
|
|
855
|
-
|
|
830
|
+
produced.push(bundle.add_node(child));
|
|
831
|
+
}
|
|
856
832
|
}
|
|
857
|
-
}
|
|
858
|
-
}
|
|
859
833
|
|
|
860
|
-
|
|
861
|
-
|
|
834
|
+
if (skin_index !== -1 && produced.length > 0) {
|
|
835
|
+
skin_mesh_pushes.push({
|
|
836
|
+
skin_index,
|
|
837
|
+
meshes: produced,
|
|
838
|
+
});
|
|
839
|
+
}
|
|
840
|
+
}
|
|
862
841
|
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
842
|
+
if (node.children !== undefined) {
|
|
843
|
+
for (let i = 0; i < node.children.length; i++) {
|
|
844
|
+
process_node(index, node.children[i]);
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
}
|
|
868
848
|
|
|
869
849
|
for (let i = 0; i < scenes.length; i++) {
|
|
870
850
|
const scene = scenes[i];
|
|
871
851
|
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
scene_nodes3d.push(scene_node3d);
|
|
852
|
+
// a root per glTF scene, unnamed and at the identity — what the prefab compiler folds
|
|
853
|
+
const scene_root = bundle.add_node(new SceneNode());
|
|
875
854
|
|
|
876
855
|
/**
|
|
877
856
|
* @type {number[]}
|
|
878
857
|
*/
|
|
879
858
|
const scene_nodes = scene.nodes;
|
|
880
|
-
|
|
881
859
|
const node_count = scene_nodes.length;
|
|
882
860
|
|
|
883
861
|
for (let i = 0; i < node_count; i++) {
|
|
884
|
-
|
|
885
|
-
process_node(scene_node3d, node_index);
|
|
862
|
+
process_node(scene_root, scene_nodes[i]);
|
|
886
863
|
}
|
|
887
|
-
|
|
888
|
-
scene_node3d.updateMatrices();
|
|
889
864
|
}
|
|
890
865
|
|
|
891
866
|
// ── Skins ──────────────────────────────────────────────────
|
|
892
867
|
//
|
|
893
868
|
// Build {@link Skin} objects from `gltf.skins[]`. Joints
|
|
894
|
-
// resolve to
|
|
869
|
+
// resolve to node indices through `record_index_of` (fully
|
|
895
870
|
// populated by the recursion above). Inverse-bind matrices
|
|
896
871
|
// come from a single MAT4 accessor — `joint_count * 16` f32s
|
|
897
872
|
// laid out column-major, copied into a flat Float32Array that
|
|
@@ -903,10 +878,10 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
903
878
|
const joint_nodes = new Array(joint_count);
|
|
904
879
|
for (let i = 0; i < joint_count; i++) {
|
|
905
880
|
const joint_node_index = joint_indices[i];
|
|
906
|
-
const joint_node =
|
|
881
|
+
const joint_node = record_index_of[joint_node_index];
|
|
907
882
|
|
|
908
|
-
assert.
|
|
909
|
-
joint_node,
|
|
883
|
+
assert.notEqual(
|
|
884
|
+
joint_node, -1,
|
|
910
885
|
`skin[${skin_index}].joints[${i}] references unknown node index ${joint_node_index}`
|
|
911
886
|
);
|
|
912
887
|
|
|
@@ -954,6 +929,9 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
954
929
|
// (values) accessors via the engine's curve_from_track_data
|
|
955
930
|
// helpers, which already handle STEP / LINEAR / CUBICSPLINE.
|
|
956
931
|
const clips = [];
|
|
932
|
+
|
|
933
|
+
/** @type {{light: import("../../light/model/Light.js").Light, node: number}[]} */
|
|
934
|
+
const punctual_lights = [];
|
|
957
935
|
const gltf_animations = gltf.animations ?? [];
|
|
958
936
|
for (let a = 0; a < gltf_animations.length; a++) {
|
|
959
937
|
const gltf_animation = gltf_animations[a];
|
|
@@ -976,10 +954,10 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
976
954
|
continue;
|
|
977
955
|
}
|
|
978
956
|
|
|
979
|
-
const target_node =
|
|
957
|
+
const target_node = record_index_of[target.node];
|
|
980
958
|
|
|
981
|
-
assert.
|
|
982
|
-
target_node,
|
|
959
|
+
assert.notEqual(
|
|
960
|
+
target_node, -1,
|
|
983
961
|
`animations[${a}].channels[${c}].target.node ${target.node} not resolved`
|
|
984
962
|
);
|
|
985
963
|
|
|
@@ -1017,7 +995,7 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
1017
995
|
if (property === Node3DProperty.Rotation && times.length >= 1) {
|
|
1018
996
|
// `canonicalize_quaternion_signs` reads the rest rotation by component name,
|
|
1019
997
|
// which a `Transform64` does not offer — hand it a quaternion instead
|
|
1020
|
-
const rest = target_node.
|
|
998
|
+
const rest = bundle.nodes[target_node].local;
|
|
1021
999
|
|
|
1022
1000
|
SCRATCH_REST_ROTATION.set(
|
|
1023
1001
|
rest.rotation_x,
|
|
@@ -1084,7 +1062,7 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
1084
1062
|
before_curves += clip.channels[i].curve_count;
|
|
1085
1063
|
}
|
|
1086
1064
|
|
|
1087
|
-
clip.optimize();
|
|
1065
|
+
clip.optimize(target => bundle.nodes[target].local);
|
|
1088
1066
|
|
|
1089
1067
|
const after_channels = clip.channels.length;
|
|
1090
1068
|
let after_curves = 0;
|
|
@@ -1108,35 +1086,25 @@ export function load_gltf(url, { assetManager, scope, fileMap, texture_support }
|
|
|
1108
1086
|
// console.profileEnd('parse-gltf');
|
|
1109
1087
|
// console.timeEnd('parse-gltf');
|
|
1110
1088
|
|
|
1111
|
-
const bundle = new SceneBundle();
|
|
1112
|
-
bundle.scenes = scene_nodes3d;
|
|
1113
1089
|
bundle.skins = skins;
|
|
1114
1090
|
bundle.clips = clips;
|
|
1091
|
+
bundle.lights = punctual_lights;
|
|
1115
1092
|
return bundle;
|
|
1116
1093
|
}
|
|
1117
1094
|
|
|
1118
1095
|
/**
|
|
1119
|
-
*
|
|
1120
|
-
* @param {Node3D[]} scenes
|
|
1096
|
+
* @param {SceneBundle} bundle
|
|
1121
1097
|
*/
|
|
1122
|
-
function fix_scene_material_sidedness(
|
|
1123
|
-
const meshes =
|
|
1098
|
+
function fix_scene_material_sidedness(bundle) {
|
|
1099
|
+
const meshes = bundle.nodes.filter(node => node.geometry !== null);
|
|
1124
1100
|
|
|
1125
|
-
|
|
1126
|
-
s.traverse(node => {
|
|
1127
|
-
if (node.isMesh) {
|
|
1128
|
-
meshes.add(node);
|
|
1129
|
-
}
|
|
1130
|
-
});
|
|
1131
|
-
}
|
|
1132
|
-
|
|
1133
|
-
const { geometries_modified: fixed_count, primitives_delta } = fix_up_material_sides(Array.from(meshes));
|
|
1101
|
+
const { geometries_modified: fixed_count, primitives_delta } = fix_up_material_sides(meshes);
|
|
1134
1102
|
|
|
1135
1103
|
if (fixed_count > 0) {
|
|
1136
1104
|
console.warn(`Fixed ${fixed_count} geometries in accordance with material sidedness. Primitives added: ${number_format_by_thousands(primitives_delta)}`);
|
|
1137
1105
|
}
|
|
1138
1106
|
|
|
1139
|
-
return
|
|
1107
|
+
return bundle;
|
|
1140
1108
|
}
|
|
1141
1109
|
|
|
1142
1110
|
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#237@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @typedef {Object} UsdExtension
|
|
9
9
|
* @property {string} name - Unique extension name
|
|
10
|
-
* @property {function(string, Object, Object):
|
|
10
|
+
* @property {function(string, Object, Object):SceneNode|null} [processPrim]
|
|
11
11
|
* Custom prim handler. Receives (primPath, primFields, buildContext).
|
|
12
|
-
* Return a
|
|
12
|
+
* Return a SceneNode to be added under the prim's parent, or null for default handling.
|
|
13
13
|
* @property {function(Object):void} [postProcess]
|
|
14
14
|
* Post-process hook. Receives the full specsByPath after initial parsing.
|
|
15
15
|
*/
|
|
@@ -64,9 +64,9 @@ export type UsdExtension = {
|
|
|
64
64
|
name: string;
|
|
65
65
|
/**
|
|
66
66
|
* Custom prim handler. Receives (primPath, primFields, buildContext).
|
|
67
|
-
* Return a
|
|
67
|
+
* Return a SceneNode to be added under the prim's parent, or null for default handling.
|
|
68
68
|
*/
|
|
69
|
-
processPrim?: (arg0: string, arg1: any, arg2: any) =>
|
|
69
|
+
processPrim?: (arg0: string, arg1: any, arg2: any) => SceneNode | null;
|
|
70
70
|
/**
|
|
71
71
|
* Post-process hook. Receives the full specsByPath after initial parsing.
|
|
72
72
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UsdExtensionRegistry.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/usd/UsdExtensionRegistry.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH;IAEI;;;OAGG;IACH,oBAAwB;IAExB;;;;OAIG;IACH,eAHW,MAAM,aACN,YAAY,QAItB;IAED;;;OAGG;IACH,iBAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,UAHW,MAAM,GACJ,YAAY,GAAC,SAAS,CAIlC;IAED;;OAEG;IACH,UAFa,iBAAiB,YAAY,CAAC,CAI1C;IAED;;OAEG;IACH,mBAEC;CACJ;AAED;;;GAGG;AACH,uCAFU,oBAAoB,CAEqC;;;;;;;;;;;;UA5DrD,MAAM;;;;;yBACG,MAAM,2BAAkB,
|
|
1
|
+
{"version":3,"file":"UsdExtensionRegistry.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/usd/UsdExtensionRegistry.js"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH;IAEI;;;OAGG;IACH,oBAAwB;IAExB;;;;OAIG;IACH,eAHW,MAAM,aACN,YAAY,QAItB;IAED;;;OAGG;IACH,iBAFW,MAAM,QAIhB;IAED;;;;OAIG;IACH,UAHW,MAAM,GACJ,YAAY,GAAC,SAAS,CAIlC;IAED;;OAEG;IACH,UAFa,iBAAiB,YAAY,CAAC,CAI1C;IAED;;OAEG;IACH,mBAEC;CACJ;AAED;;;GAGG;AACH,uCAFU,oBAAoB,CAEqC;;;;;;;;;;;;UA5DrD,MAAM;;;;;yBACG,MAAM,2BAAkB,YAAU,IAAI;;;;iCAG9B,IAAI"}
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @typedef {Object} UsdExtension
|
|
9
9
|
* @property {string} name - Unique extension name
|
|
10
|
-
* @property {function(string, Object, Object):
|
|
10
|
+
* @property {function(string, Object, Object):SceneNode|null} [processPrim]
|
|
11
11
|
* Custom prim handler. Receives (primPath, primFields, buildContext).
|
|
12
|
-
* Return a
|
|
12
|
+
* Return a SceneNode to be added under the prim's parent, or null for default handling.
|
|
13
13
|
* @property {function(Object):void} [postProcess]
|
|
14
14
|
* Post-process hook. Receives the full specsByPath after initial parsing.
|
|
15
15
|
*/
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @param {ArrayBuffer} buffer — Raw file bytes
|
|
9
9
|
* @param {LoadUsdOptions} [options]
|
|
10
|
-
* @returns {Promise<import("
|
|
10
|
+
* @returns {Promise<import("../SceneBundle.js").SceneBundle>} the model — its nodes in pre-order; no
|
|
11
|
+
* skins and no clips, which UsdSkel would fill in
|
|
11
12
|
* @throws {UsdParseError} On malformed data
|
|
12
13
|
* @throws {UsdUnsupportedError} On unsupported format (e.g. USDC before implementation)
|
|
13
14
|
*/
|
|
14
|
-
export function load_usd(buffer: ArrayBuffer, options?: LoadUsdOptions): Promise<import("
|
|
15
|
+
export function load_usd(buffer: ArrayBuffer, options?: LoadUsdOptions): Promise<import("../SceneBundle.js").SceneBundle>;
|
|
15
16
|
export type LoadUsdOptions = {
|
|
16
17
|
/**
|
|
17
18
|
* — Original file name (used for format detection)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load_usd.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/usd/load_usd.js"],"names":[],"mappings":"AAyDA
|
|
1
|
+
{"version":3,"file":"load_usd.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/loader/usd/load_usd.js"],"names":[],"mappings":"AAyDA;;;;;;;;;;;;;GAaG;AACH,iCAPW,WAAW,YACX,cAAc,GACZ,QAAQ,OAAO,mBAAmB,EAAE,WAAW,CAAC,CAuE5D;;;;;eA3Ga,MAAM;;;;iBACN,oBAAoB;;qCAN6B,2BAA2B"}
|
|
@@ -64,7 +64,8 @@ const USDA_HEADER = "#usda ";
|
|
|
64
64
|
*
|
|
65
65
|
* @param {ArrayBuffer} buffer — Raw file bytes
|
|
66
66
|
* @param {LoadUsdOptions} [options]
|
|
67
|
-
* @returns {Promise<import("
|
|
67
|
+
* @returns {Promise<import("../SceneBundle.js").SceneBundle>} the model — its nodes in pre-order; no
|
|
68
|
+
* skins and no clips, which UsdSkel would fill in
|
|
68
69
|
* @throws {UsdParseError} On malformed data
|
|
69
70
|
* @throws {UsdUnsupportedError} On unsupported format (e.g. USDC before implementation)
|
|
70
71
|
*/
|
|
@@ -132,10 +133,8 @@ export async function load_usd(buffer, options = {}) {
|
|
|
132
133
|
}
|
|
133
134
|
}
|
|
134
135
|
|
|
135
|
-
// Build
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
return nodes;
|
|
136
|
+
// Build the model
|
|
137
|
+
return usd_build_scene(parsed.specsByPath, { assetFiles: asset_files, extensions: registry });
|
|
139
138
|
}
|
|
140
139
|
|
|
141
140
|
|