@woosh/meep-engine 3.23.0 → 3.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor/entity_world_bounds.d.ts +9 -3
- package/editor/entity_world_bounds.d.ts.map +1 -1
- package/editor/entity_world_bounds.js +61 -4
- package/package.json +1 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +124 -29
- package/src/core/collection/map/u32_index.d.ts +83 -0
- package/src/core/collection/map/u32_index.d.ts.map +1 -0
- package/src/core/collection/map/u32_index.js +247 -0
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
- package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
- package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKProblem.js +16 -0
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
- package/src/engine/graphics3/AnimationSystem.js +2 -2
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +2 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
- package/src/engine/graphics3/LightSystem.d.ts +7 -5
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +36 -22
- package/src/engine/graphics3/MeshSystem.d.ts +43 -39
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +324 -331
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem.js +2 -4
- package/src/engine/graphics3/PickingQuery.d.ts +15 -21
- package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
- package/src/engine/graphics3/PickingQuery.js +21 -25
- package/src/engine/graphics3/PickingSystem.d.ts +60 -31
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +416 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
- package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +102 -53
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +2 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
- package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/Prefab.js +162 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_place.js +130 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
- package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
- package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
- package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
- package/src/engine/graphics3/register_instance_animation.js +4 -4
- package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
- package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
- package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +13 -15
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +12 -14
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +5 -4
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +11 -12
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
- package/src/engine/physics/cloth/playground/README.md +11 -11
- package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +64 -58
- package/src/engine/physics/cloth/playground/garment_main.js +59 -33
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +85 -53
- package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +36 -0
- package/src/shade/playground/add_random_meshes.d.ts +4 -4
- package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
- package/src/shade/playground/add_random_meshes.js +20 -16
- package/src/shade/playground/avboit/main.d.ts +1 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -1
- package/src/shade/playground/avboit/main.js +916 -875
- package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/main.js +22 -8
- package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
- package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
- package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/main.js +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/make_ground.js +21 -16
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_system/main.js +11 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +56 -15
- package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +149 -53
- package/src/shade/playground/readback_crossover/index.html +41 -0
- package/src/shade/playground/readback_crossover/main.d.ts +2 -0
- package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
- package/src/shade/playground/readback_crossover/main.js +372 -0
- package/src/shade/playground/skinned_blas_refit/README.md +11 -7
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +67 -58
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
- package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
- package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
- package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +393 -363
- package/src/shade/playground/ssr_reprojection/main.js +11 -9
- package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
- package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_reprojection/scene.js +32 -11
- package/src/shade/playground/ssr_variance/main.js +1 -1
- package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
- package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/scene.js +39 -15
- package/src/shade/playground/vgeo_viewer/main.js +6 -2
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +936 -922
- package/src/shade/renderer/GraphicsContext.d.ts +7 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +11 -0
- package/src/shade/renderer/Renderer.d.ts +3 -2
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +3 -2
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
- package/src/shade/renderer/animation/Skin.d.ts +19 -19
- package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
- package/src/shade/renderer/animation/Skin.js +15 -13
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +96 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/WordViews.js +62 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +444 -329
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
- package/src/shade/renderer/light/LightCollection.d.ts +29 -1
- package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/LightCollection.js +50 -1
- package/src/shade/renderer/light/make_sunlight.js +2 -2
- package/src/shade/renderer/light/model/Light.d.ts +29 -2
- package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
- package/src/shade/renderer/light/model/Light.js +30 -2
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
- package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
- package/src/shade/renderer/light/place_light.d.ts +16 -0
- package/src/shade/renderer/light/place_light.d.ts.map +1 -0
- package/src/shade/renderer/light/place_light.js +36 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
- package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +111 -56
- package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
- package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
- package/src/shade/renderer/loader/SceneNode.js +114 -0
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/load_usd.js +4 -5
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
- package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
- package/src/shade/renderer/particles/DESIGN.md +53 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
- package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
- package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/DynamicMesh.js +14 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +55 -48
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +594 -928
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
- package/src/shade/renderer/scene/Node3D.d.ts +27 -8
- package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
- package/src/shade/renderer/scene/Node3DDirtyList.d.ts +59 -0
- package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +1 -0
- package/src/shade/renderer/scene/Scene.d.ts +18 -60
- package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/Scene.js +53 -146
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +10 -93
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +1136 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
- package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
- package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
- package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
- package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
- package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
- package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
- package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
- package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
- package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
- package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
- package/src/shade/renderer/scene/InstanceBatch.js +0 -235
- package/src/shade/renderer/scene/Mesh.js +0 -168
- package/src/shade/renderer/scene/Node3D.js +0 -263
- package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
- package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
- package/src/shade/renderer/scene/TransformAuthority.js +0 -33
|
@@ -9,13 +9,17 @@ import { OrbitalCameraController } from "../../renderer/camera/OrbitalCameraCont
|
|
|
9
9
|
import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
|
|
10
10
|
import { create_frame_loop } from "../../renderer/create_frame_loop.js";
|
|
11
11
|
import { make_sunlight } from "../../renderer/light/make_sunlight.js";
|
|
12
|
+
import { place_light } from "../../renderer/light/place_light.js";
|
|
13
|
+
import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDataset.js";
|
|
14
|
+
import { prefab_compile } from "../../../engine/graphics3/prefab/prefab_compile.js";
|
|
12
15
|
import { load_gltf } from "../../renderer/loader/gltf/load_gltf.js";
|
|
16
|
+
import { row_of_entity } from "../../renderer/scene/rows/GPUSceneRows.js";
|
|
13
17
|
import { Renderer } from "../../renderer/Renderer.js";
|
|
14
18
|
import { Scene } from "../../renderer/scene/Scene.js";
|
|
15
19
|
import { load_default_environment } from "../load_default_environment.js";
|
|
16
20
|
import { make_playground_asset_manager } from "../make_playground_asset_manager.js";
|
|
17
21
|
import { add_floor } from "./add_floor.js";
|
|
18
|
-
import { grid_position, place_character } from "./place_character.js";
|
|
22
|
+
import { geometry_of, grid_position, place_character } from "./place_character.js";
|
|
19
23
|
|
|
20
24
|
/**
|
|
21
25
|
* A dancing character under the path tracer — the browser tier for the per-frame BLAS refit.
|
|
@@ -157,19 +161,19 @@ class FrameTimer {
|
|
|
157
161
|
}
|
|
158
162
|
|
|
159
163
|
/**
|
|
160
|
-
* Every
|
|
164
|
+
* Every skinned mesh entity an instance's skins deform.
|
|
161
165
|
*
|
|
162
|
-
* Off the skins rather than by walking the
|
|
163
|
-
*
|
|
164
|
-
*
|
|
166
|
+
* Off the skins rather than by walking the entities: a skin already lists exactly the meshes that
|
|
167
|
+
* bind to it, which is what `register_skin` uses, so this cannot disagree with what actually gets
|
|
168
|
+
* deformed.
|
|
165
169
|
*
|
|
166
|
-
* @param {
|
|
167
|
-
* @returns {
|
|
170
|
+
* @param {PrefabInstance} instance
|
|
171
|
+
* @returns {number[]}
|
|
168
172
|
*/
|
|
169
|
-
function skinned_meshes_of(
|
|
173
|
+
function skinned_meshes_of(instance) {
|
|
170
174
|
const meshes = new Set();
|
|
171
175
|
|
|
172
|
-
for (const skin of
|
|
176
|
+
for (const skin of instance.skins) {
|
|
173
177
|
for (const mesh of skin.meshes) {
|
|
174
178
|
meshes.add(mesh);
|
|
175
179
|
}
|
|
@@ -179,47 +183,39 @@ function skinned_meshes_of(bundle) {
|
|
|
179
183
|
}
|
|
180
184
|
|
|
181
185
|
/**
|
|
182
|
-
*
|
|
186
|
+
* Spawn one dancer, place it, and set it going.
|
|
183
187
|
*
|
|
184
|
-
*
|
|
185
|
-
*
|
|
186
|
-
* repeat is parse work rather than transfer.
|
|
188
|
+
* One prefab and N instances: a second dancer is a second set of entities under a second placement,
|
|
189
|
+
* sharing the geometry, the inverse-bind matrices and the curves with the first.
|
|
187
190
|
*
|
|
188
|
-
* @param {Scene} scene
|
|
189
191
|
* @param {GPUSceneContext} scene_context
|
|
190
|
-
* @param {
|
|
192
|
+
* @param {EntityComponentDataset} dataset
|
|
193
|
+
* @param {Prefab} prefab the character, compiled once
|
|
191
194
|
* @param {number} index which dancer this is, used to place it
|
|
192
195
|
* @param {number} count how many there are in total
|
|
193
|
-
* @returns {
|
|
196
|
+
* @returns {number[]} the dancer's skinned mesh entities
|
|
194
197
|
*/
|
|
195
|
-
|
|
196
|
-
|
|
198
|
+
function add_dancer(scene_context, dataset, prefab, index, count) {
|
|
199
|
+
// A grid, centred on the origin. The offset is the placement entity's whole transform, above
|
|
200
|
+
// the character's own root: the joints are entities whose rows compose under it, and they are
|
|
201
|
+
// what has to move. See `place_character`.
|
|
202
|
+
const { x, z } = grid_position(index, count, SPACING);
|
|
203
|
+
|
|
204
|
+
const { instance } = place_character(scene_context, dataset, prefab, x, z);
|
|
197
205
|
|
|
198
|
-
const meshes = skinned_meshes_of(
|
|
206
|
+
const meshes = skinned_meshes_of(instance);
|
|
199
207
|
|
|
200
208
|
if (meshes.length === 0) {
|
|
201
209
|
throw new Error(`${CHARACTER_URL} has no skinned mesh — nothing here has a BLAS to refit`);
|
|
202
210
|
}
|
|
203
211
|
|
|
204
|
-
// A grid, centred on the origin. The offset goes on a fresh parent above the character's own
|
|
205
|
-
// roots rather than on the mesh node: a skinned mesh's own transform cancels out of both the
|
|
206
|
-
// vertex the renderer draws and the box it publishes, so the joints are what has to move. See
|
|
207
|
-
// `place_character`.
|
|
208
|
-
const { x, z } = grid_position(index, count, SPACING);
|
|
209
|
-
|
|
210
|
-
place_character(scene, bundle, x, z);
|
|
211
|
-
|
|
212
212
|
const animations = scene_context.animation_manager;
|
|
213
213
|
|
|
214
|
-
for (const skin of bundle.skins) {
|
|
215
|
-
animations.register_skin(skin);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
214
|
// One clip, looping, at full weight. The pose accumulator sums every *bound* clip whatever its
|
|
219
215
|
// weight, so binding the T-pose alongside the dance would blend the two rather than leave the
|
|
220
216
|
// dance alone — only what should play is registered.
|
|
221
|
-
const clip =
|
|
222
|
-
??
|
|
217
|
+
const clip = instance.clips.find(candidate => /samba|dance/i.test(candidate.name ?? ''))
|
|
218
|
+
?? instance.clips[0];
|
|
223
219
|
|
|
224
220
|
if (clip !== undefined) {
|
|
225
221
|
const clip_id = animations.register_clip(clip);
|
|
@@ -246,11 +242,11 @@ async function add_dancer(scene, scene_context, asset_manager, index, count) {
|
|
|
246
242
|
* is worth nothing before a few frames have gone by.
|
|
247
243
|
*
|
|
248
244
|
* @param {GPUSceneContext} scene_context
|
|
249
|
-
* @param {
|
|
245
|
+
* @param {number} entity a mesh entity
|
|
250
246
|
* @returns {Promise<{low: Vector3, high: Vector3, radius: number}>}
|
|
251
247
|
*/
|
|
252
|
-
async function world_bounds_of(scene_context,
|
|
253
|
-
const row =
|
|
248
|
+
async function world_bounds_of(scene_context, entity) {
|
|
249
|
+
const row = row_of_entity(entity);
|
|
254
250
|
|
|
255
251
|
const record = await scene_context.scene_database.debug_table_read_element('meshes', row);
|
|
256
252
|
|
|
@@ -316,6 +312,11 @@ export async function start() {
|
|
|
316
312
|
|
|
317
313
|
const scene = new Scene();
|
|
318
314
|
|
|
315
|
+
// the dancers are entities, and the scene's rows are theirs
|
|
316
|
+
const dataset = new EntityComponentDataset();
|
|
317
|
+
|
|
318
|
+
scene.dataset = dataset;
|
|
319
|
+
|
|
319
320
|
// document.body rather than the canvas: the controller starts a keyboard device, and only a
|
|
320
321
|
// focusable element can receive key events — body carries tabindex for exactly that.
|
|
321
322
|
const controller = new OrbitalCameraController(camera, document.body);
|
|
@@ -333,7 +334,7 @@ export async function start() {
|
|
|
333
334
|
globalThis.verify = async () => paused(async () => {
|
|
334
335
|
const { verify_skinned_blas_refit } = await import('./verify_skinned_blas_refit.js');
|
|
335
336
|
|
|
336
|
-
return verify_skinned_blas_refit({ renderer, camera, scene,
|
|
337
|
+
return verify_skinned_blas_refit({ renderer, camera, scene, entity: globalThis.dancers[0] });
|
|
337
338
|
});
|
|
338
339
|
|
|
339
340
|
// The half `verify()` is blind to: whether each leaf's box belongs to the triangle that leaf
|
|
@@ -343,7 +344,7 @@ export async function start() {
|
|
|
343
344
|
globalThis.verify_leaves = async () => {
|
|
344
345
|
const { verify_leaf_correspondence } = await import('./verify_skinned_blas_refit.js');
|
|
345
346
|
|
|
346
|
-
return verify_leaf_correspondence({ renderer, geometry: globalThis.dancers[0]
|
|
347
|
+
return verify_leaf_correspondence({ renderer, geometry: geometry_of(dataset, globalThis.dancers[0]) });
|
|
347
348
|
};
|
|
348
349
|
|
|
349
350
|
// The same question of the *clone*, live: after the frame's refit, does every leaf of the
|
|
@@ -352,7 +353,7 @@ export async function start() {
|
|
|
352
353
|
globalThis.verify_clone_leaves = async () => paused(async () => {
|
|
353
354
|
const { verify_clone_leaves } = await import('./verify_clone_leaves.js');
|
|
354
355
|
|
|
355
|
-
return verify_clone_leaves({ renderer, scene,
|
|
356
|
+
return verify_clone_leaves({ renderer, scene, entity: globalThis.dancers[0] });
|
|
356
357
|
});
|
|
357
358
|
|
|
358
359
|
const frame_timer = new FrameTimer();
|
|
@@ -488,29 +489,36 @@ export async function start() {
|
|
|
488
489
|
|
|
489
490
|
const scene_context = renderer.scenes.obtain(scene);
|
|
490
491
|
|
|
491
|
-
/** @type {
|
|
492
|
+
/** @type {number[]} the skinned mesh entities */
|
|
492
493
|
const dancers = [];
|
|
493
494
|
|
|
494
495
|
/**
|
|
495
|
-
* Where the load's time goes, for the console: one parse
|
|
496
|
-
*
|
|
497
|
-
* that upload every clone and tree, then one bounds readback per
|
|
496
|
+
* Where the load's time goes, for the console: one parse — the glTF decoded, its meshlets built
|
|
497
|
+
* and compressed, its BLAS built on the CPU — and one compile into a prefab, then a spawn per
|
|
498
|
+
* dancer, then the first frames that upload every clone and tree, then one bounds readback per
|
|
499
|
+
* dancer.
|
|
498
500
|
*/
|
|
499
|
-
const load_timing = {
|
|
501
|
+
const load_timing = { parse_ms: 0, spawns: [], first_frames_ms: 0, bounds_ms: 0 };
|
|
500
502
|
|
|
501
503
|
try {
|
|
502
504
|
const asset_manager = await make_playground_asset_manager();
|
|
503
505
|
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
506
|
+
const parse_started = performance.now();
|
|
507
|
+
|
|
508
|
+
const bundle = await load_gltf(CHARACTER_URL, { assetManager: asset_manager });
|
|
509
|
+
|
|
510
|
+
const prefab = prefab_compile(bundle);
|
|
508
511
|
|
|
512
|
+
load_timing.parse_ms = performance.now() - parse_started;
|
|
513
|
+
|
|
514
|
+
set_status(`spawning ${count} × ${CHARACTER_URL} …`);
|
|
515
|
+
|
|
516
|
+
for (let i = 0; i < count; i++) {
|
|
509
517
|
const started = performance.now();
|
|
510
518
|
|
|
511
|
-
dancers.push(...
|
|
519
|
+
dancers.push(...add_dancer(scene_context, dataset, prefab, i, count));
|
|
512
520
|
|
|
513
|
-
load_timing.
|
|
521
|
+
load_timing.spawns.push(performance.now() - started);
|
|
514
522
|
}
|
|
515
523
|
} catch (error) {
|
|
516
524
|
set_status(
|
|
@@ -524,7 +532,7 @@ export async function start() {
|
|
|
524
532
|
|
|
525
533
|
if (!scene.lights.elements.some(light => light.isDirectionalLight)) {
|
|
526
534
|
// a glTF character carries no light of its own
|
|
527
|
-
scene
|
|
535
|
+
place_light(scene, make_sunlight({ intensity: 6 }));
|
|
528
536
|
}
|
|
529
537
|
|
|
530
538
|
// Frames enough for skinning to run and its bounds-refresh chain to publish a deformed box,
|
|
@@ -565,20 +573,21 @@ export async function start() {
|
|
|
565
573
|
load_timing.bounds_ms = performance.now() - bounds_started;
|
|
566
574
|
|
|
567
575
|
{
|
|
568
|
-
const
|
|
569
|
-
const total =
|
|
576
|
+
const spawns = load_timing.spawns;
|
|
577
|
+
const total = spawns.reduce((sum, ms) => sum + ms, 0);
|
|
570
578
|
|
|
571
579
|
console.log(
|
|
572
|
-
`load: ${
|
|
573
|
-
+
|
|
574
|
-
+
|
|
580
|
+
`load: parse + compile ${load_timing.parse_ms.toFixed(0)} ms · ${spawns.length} spawns in `
|
|
581
|
+
+ `${total.toFixed(0)} ms (mean ${(total / spawns.length).toFixed(2)} ms, max `
|
|
582
|
+
+ `${Math.max(...spawns).toFixed(2)} ms, first ${spawns[0].toFixed(2)} ms) `
|
|
583
|
+
+ `· first frames ${(load_timing.first_frames_ms / 1000).toFixed(1)} s `
|
|
575
584
|
+ `· bounds readback ${(load_timing.bounds_ms / 1000).toFixed(1)} s`
|
|
576
585
|
);
|
|
577
586
|
}
|
|
578
587
|
|
|
579
588
|
const span = new Vector3(high.x - low.x, high.y - low.y, high.z - low.z);
|
|
580
589
|
|
|
581
|
-
globalThis.floor = add_floor(
|
|
590
|
+
globalThis.floor = add_floor(scene_context, Math.max(span.x, span.z) * 6, low.y);
|
|
582
591
|
|
|
583
592
|
const radius = Math.hypot(span.x, span.y, span.z) * 0.5;
|
|
584
593
|
|
|
@@ -605,7 +614,7 @@ export async function start() {
|
|
|
605
614
|
|
|
606
615
|
globalThis.dancers = dancers;
|
|
607
616
|
|
|
608
|
-
set_status(`loaded — ${count} dancing, ${
|
|
617
|
+
set_status(`loaded — ${count} dancing, ${dancers.length} skinned meshes`, 'pass');
|
|
609
618
|
|
|
610
619
|
renderer.indicate_view_change();
|
|
611
620
|
|
|
@@ -1,66 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Stand one
|
|
2
|
+
* Stand one character on the floor at `(x, 0, z)`, the way the engine stands one: as entities.
|
|
3
3
|
*
|
|
4
|
-
* ##
|
|
4
|
+
* ## What a placed character is
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
6
|
+
* A prefab instance under a placement entity. The placement's `Transform64` is the offset and
|
|
7
|
+
* nothing else; every node the file had is an entity below it, holding its own offset from its
|
|
8
|
+
* parent in a `TransformAttachment`, and the file's own transform — the centimetre scale and the
|
|
9
|
+
* up-axis rotation an FBX-derived glTF carries on its root — stays where the prefab put it, on the
|
|
10
|
+
* entity that stands for that root. "Compose, do not replace": a `Transform64` composes as
|
|
11
|
+
* `T · R · S`, so a translation written into the file's root would not be the world offset but one
|
|
12
|
+
* the rotation and scale then act on.
|
|
9
13
|
*
|
|
10
|
-
*
|
|
11
|
-
* mesh.global × inverse(mesh.global) × joint.global × inverse_bind × v
|
|
12
|
-
* ```
|
|
14
|
+
* ## Where the GPU reads it
|
|
13
15
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* actually sit under.
|
|
16
|
+
* Every entity of the instance holds a row of the `transforms` table, at `entity + 1`, and the
|
|
17
|
+
* hierarchy pass composes each row's `global` from its offset and its parent's row — so the joints
|
|
18
|
+
* the pose accumulator drives are carried by the placement without anyone writing to them. The
|
|
19
|
+
* primitives hold a row of the `meshes` table too, over a clone of their geometry when the mesh is
|
|
20
|
+
* skinned, which is the region the skinning pass deforms and the BLAS refit follows.
|
|
20
21
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
22
|
+
* This is what `MeshSystem` and `ShadedGeometrySystem` do between them for a game; a playground
|
|
23
|
+
* has no systems, so `prefab_place` does the same by hand and in one place — this is it, at a
|
|
24
|
+
* grid position.
|
|
24
25
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* └── "mixamorig:Hips" the joint root
|
|
29
|
-
* ```
|
|
30
|
-
*
|
|
31
|
-
* Nothing under `Ch03` drives a joint, so writing a grid offset there — to either transform —
|
|
32
|
-
* moves nothing at all.
|
|
33
|
-
*
|
|
34
|
-
* ## Why a placement node rather than the character's own root
|
|
35
|
-
*
|
|
36
|
-
* `"Character"`'s local transform is the file's, and it is load-bearing twice over: the 0.01 scale
|
|
37
|
-
* is what makes the inverse-bind matrices agree with the vertex positions, and a `Transform64`
|
|
38
|
-
* composes as `T · R · S`, so a translation written there is *not* the world offset — it is an
|
|
39
|
-
* offset the file's own rotation and scale then act on. A fresh parent keeps the two apart: the
|
|
40
|
-
* grid offset is this node's whole transform, the file's is untouched below it, and the
|
|
41
|
-
* composition happens where it always happens.
|
|
42
|
-
*
|
|
43
|
-
* A node under {@link TransformAuthority.GPU} still follows a CPU-driven parent — the hierarchy
|
|
44
|
-
* pass composes `global` from the node's own TRS and the parent chain — so the joints the pose
|
|
45
|
-
* accumulator owns are carried by this without anyone writing to their rows.
|
|
46
|
-
*
|
|
47
|
-
* ## Why the local transform
|
|
48
|
-
*
|
|
49
|
-
* The same reason the floor is placed that way, and it is worth restating because this page has
|
|
50
|
-
* now been bitten by it twice. `Node3D.transform_global` is **derived** — its doc comment says so
|
|
51
|
-
* — and `updateMatrices` recomputes it from the local transform and the parent chain. The GPU is
|
|
52
|
-
* handed the node's local TRS and composes `node.global` from it, so a placement that only ever
|
|
53
|
-
* reached `transform_global` is discarded at both ends. See `add_floor` for the version of this
|
|
54
|
-
* where the two ends disagreed and produced two different pictures; here they agreed on the wrong
|
|
55
|
-
* answer, which is quieter and took longer to see.
|
|
56
|
-
*
|
|
57
|
-
* @param {Scene} scene
|
|
58
|
-
* @param {SceneBundle} bundle a freshly loaded character — its roots must not be parented yet
|
|
26
|
+
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
|
|
27
|
+
* @param {EntityComponentDataset} dataset the dataset the scene is bound to
|
|
28
|
+
* @param {Prefab} prefab the character, compiled once
|
|
59
29
|
* @param {number} x
|
|
60
30
|
* @param {number} z
|
|
61
|
-
* @
|
|
31
|
+
* @param {object} [options]
|
|
32
|
+
* @param {boolean} [options.register_animation] whether the instance's skins are registered; off
|
|
33
|
+
* leaves a skinned mesh's clone undeformed, which is a question of its own
|
|
34
|
+
* @returns {{root: number, instance: PrefabInstance, animation: InstanceAnimationRegistration|null}}
|
|
35
|
+
*/
|
|
36
|
+
export function place_character(scene_context: GPUSceneContext, dataset: EntityComponentDataset, prefab: Prefab, x: number, z: number, { register_animation }?: {
|
|
37
|
+
register_animation?: boolean;
|
|
38
|
+
}): {
|
|
39
|
+
root: number;
|
|
40
|
+
instance: PrefabInstance;
|
|
41
|
+
animation: InstanceAnimationRegistration | null;
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* The source geometry a mesh entity draws — for a skinned one, what its clone is a clone of.
|
|
45
|
+
*
|
|
46
|
+
* @param {EntityComponentDataset} dataset
|
|
47
|
+
* @param {number} entity
|
|
48
|
+
* @returns {MeshletGeometry}
|
|
62
49
|
*/
|
|
63
|
-
export function
|
|
50
|
+
export function geometry_of(dataset: EntityComponentDataset, entity: number): MeshletGeometry;
|
|
64
51
|
/**
|
|
65
52
|
* Where the `index`-th of `count` characters stands: a square-ish grid centred on the origin, laid
|
|
66
53
|
* out in rows along +x.
|
|
@@ -78,5 +65,4 @@ export function grid_position(index: number, count: number, spacing: number): {
|
|
|
78
65
|
x: number;
|
|
79
66
|
z: number;
|
|
80
67
|
};
|
|
81
|
-
import { Node3D } from "../../renderer/scene/Node3D.js";
|
|
82
68
|
//# sourceMappingURL=place_character.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"place_character.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/place_character.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"place_character.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/place_character.js"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,oHAPW,MAAM,KACN,MAAM;IAEY,kBAAkB,GAApC,OAAO;IAEL;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,iBAAiB;IAAC,SAAS,EAAE,gCAA8B,IAAI,CAAA;CAAC,CAanG;AAED;;;;;;GAMG;AACH,qEAHW,MAAM,mBAShB;AAED;;;;;;;;;;;;GAYG;AACH,qCALW,MAAM,SACN,MAAM,WACN,MAAM,GACJ;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAC,CAUlC"}
|
|
@@ -1,96 +1,69 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
3
|
+
import { ShadedGeometry } from "../../../engine/graphics/ecs/mesh-v2/ShadedGeometry.js";
|
|
4
|
+
import { prefab_place } from "../../../engine/graphics3/prefab/prefab_place.js";
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
|
-
* Stand one
|
|
7
|
+
* Stand one character on the floor at `(x, 0, z)`, the way the engine stands one: as entities.
|
|
5
8
|
*
|
|
6
|
-
* ##
|
|
9
|
+
* ## What a placed character is
|
|
7
10
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
+
* A prefab instance under a placement entity. The placement's `Transform64` is the offset and
|
|
12
|
+
* nothing else; every node the file had is an entity below it, holding its own offset from its
|
|
13
|
+
* parent in a `TransformAttachment`, and the file's own transform — the centimetre scale and the
|
|
14
|
+
* up-axis rotation an FBX-derived glTF carries on its root — stays where the prefab put it, on the
|
|
15
|
+
* entity that stands for that root. "Compose, do not replace": a `Transform64` composes as
|
|
16
|
+
* `T · R · S`, so a translation written into the file's root would not be the world offset but one
|
|
17
|
+
* the rotation and scale then act on.
|
|
11
18
|
*
|
|
12
|
-
*
|
|
13
|
-
* mesh.global × inverse(mesh.global) × joint.global × inverse_bind × v
|
|
14
|
-
* ```
|
|
19
|
+
* ## Where the GPU reads it
|
|
15
20
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* actually sit under.
|
|
21
|
+
* Every entity of the instance holds a row of the `transforms` table, at `entity + 1`, and the
|
|
22
|
+
* hierarchy pass composes each row's `global` from its offset and its parent's row — so the joints
|
|
23
|
+
* the pose accumulator drives are carried by the placement without anyone writing to them. The
|
|
24
|
+
* primitives hold a row of the `meshes` table too, over a clone of their geometry when the mesh is
|
|
25
|
+
* skinned, which is the region the skinning pass deforms and the BLAS refit follows.
|
|
22
26
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
27
|
+
* This is what `MeshSystem` and `ShadedGeometrySystem` do between them for a game; a playground
|
|
28
|
+
* has no systems, so `prefab_place` does the same by hand and in one place — this is it, at a
|
|
29
|
+
* grid position.
|
|
26
30
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* └── "mixamorig:Hips" the joint root
|
|
31
|
-
* ```
|
|
32
|
-
*
|
|
33
|
-
* Nothing under `Ch03` drives a joint, so writing a grid offset there — to either transform —
|
|
34
|
-
* moves nothing at all.
|
|
35
|
-
*
|
|
36
|
-
* ## Why a placement node rather than the character's own root
|
|
37
|
-
*
|
|
38
|
-
* `"Character"`'s local transform is the file's, and it is load-bearing twice over: the 0.01 scale
|
|
39
|
-
* is what makes the inverse-bind matrices agree with the vertex positions, and a `Transform64`
|
|
40
|
-
* composes as `T · R · S`, so a translation written there is *not* the world offset — it is an
|
|
41
|
-
* offset the file's own rotation and scale then act on. A fresh parent keeps the two apart: the
|
|
42
|
-
* grid offset is this node's whole transform, the file's is untouched below it, and the
|
|
43
|
-
* composition happens where it always happens.
|
|
44
|
-
*
|
|
45
|
-
* A node under {@link TransformAuthority.GPU} still follows a CPU-driven parent — the hierarchy
|
|
46
|
-
* pass composes `global` from the node's own TRS and the parent chain — so the joints the pose
|
|
47
|
-
* accumulator owns are carried by this without anyone writing to their rows.
|
|
48
|
-
*
|
|
49
|
-
* ## Why the local transform
|
|
50
|
-
*
|
|
51
|
-
* The same reason the floor is placed that way, and it is worth restating because this page has
|
|
52
|
-
* now been bitten by it twice. `Node3D.transform_global` is **derived** — its doc comment says so
|
|
53
|
-
* — and `updateMatrices` recomputes it from the local transform and the parent chain. The GPU is
|
|
54
|
-
* handed the node's local TRS and composes `node.global` from it, so a placement that only ever
|
|
55
|
-
* reached `transform_global` is discarded at both ends. See `add_floor` for the version of this
|
|
56
|
-
* where the two ends disagreed and produced two different pictures; here they agreed on the wrong
|
|
57
|
-
* answer, which is quieter and took longer to see.
|
|
58
|
-
*
|
|
59
|
-
* @param {Scene} scene
|
|
60
|
-
* @param {SceneBundle} bundle a freshly loaded character — its roots must not be parented yet
|
|
31
|
+
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the instance goes
|
|
32
|
+
* @param {EntityComponentDataset} dataset the dataset the scene is bound to
|
|
33
|
+
* @param {Prefab} prefab the character, compiled once
|
|
61
34
|
* @param {number} x
|
|
62
35
|
* @param {number} z
|
|
63
|
-
* @
|
|
36
|
+
* @param {object} [options]
|
|
37
|
+
* @param {boolean} [options.register_animation] whether the instance's skins are registered; off
|
|
38
|
+
* leaves a skinned mesh's clone undeformed, which is a question of its own
|
|
39
|
+
* @returns {{root: number, instance: PrefabInstance, animation: InstanceAnimationRegistration|null}}
|
|
64
40
|
*/
|
|
65
|
-
export function place_character(
|
|
66
|
-
const placement = new
|
|
67
|
-
|
|
68
|
-
placement.name = `placement(${x}, ${z})`;
|
|
41
|
+
export function place_character(scene_context, dataset, prefab, x, z, { register_animation = true } = {}) {
|
|
42
|
+
const placement = new Transform64();
|
|
69
43
|
|
|
70
44
|
// `Transform64` keeps its matrix by hand: setting a component leaves the matrix holding what it
|
|
71
45
|
// held before, so the write is only real after `updateMatrix`.
|
|
72
|
-
placement.
|
|
73
|
-
placement.
|
|
46
|
+
placement.setTranslation(x, 0, z);
|
|
47
|
+
placement.updateMatrix();
|
|
74
48
|
|
|
75
|
-
placement
|
|
49
|
+
const { root, instance, animation } = prefab_place(scene_context, dataset, prefab, placement, { register_animation });
|
|
76
50
|
|
|
77
|
-
|
|
51
|
+
return { root, instance, animation };
|
|
52
|
+
}
|
|
78
53
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
-
});
|
|
54
|
+
/**
|
|
55
|
+
* The source geometry a mesh entity draws — for a skinned one, what its clone is a clone of.
|
|
56
|
+
*
|
|
57
|
+
* @param {EntityComponentDataset} dataset
|
|
58
|
+
* @param {number} entity
|
|
59
|
+
* @returns {MeshletGeometry}
|
|
60
|
+
*/
|
|
61
|
+
export function geometry_of(dataset, entity) {
|
|
62
|
+
const geometry = dataset.getComponent(entity, ShadedGeometry);
|
|
90
63
|
|
|
91
|
-
|
|
64
|
+
assert.defined(geometry, `entity ${entity} carries no ShadedGeometry`);
|
|
92
65
|
|
|
93
|
-
return
|
|
66
|
+
return geometry.geometry;
|
|
94
67
|
}
|
|
95
68
|
|
|
96
69
|
/**
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
* @param {Renderer} options.renderer
|
|
19
19
|
* @param {PerspectiveCamera} options.camera
|
|
20
20
|
* @param {Scene} options.scene
|
|
21
|
-
* @param {
|
|
21
|
+
* @param {number} options.entity the mesh entity to orbit and to frame on
|
|
22
22
|
* @param {function(boolean): void} [options.suspend]
|
|
23
23
|
* @param {number} [options.azimuths]
|
|
24
24
|
* @param {number[]} [options.elevations] radians; negative looks up from below
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
* @param {number} [options.samples] samples per pixel at each view
|
|
27
27
|
* @returns {Promise<object>}
|
|
28
28
|
*/
|
|
29
|
-
export function sweep_views({ renderer, camera, scene,
|
|
29
|
+
export function sweep_views({ renderer, camera, scene, entity, suspend, azimuths, elevations, distance, samples, }: {
|
|
30
30
|
renderer: Renderer;
|
|
31
31
|
camera: PerspectiveCamera;
|
|
32
32
|
scene: Scene;
|
|
33
|
-
|
|
33
|
+
entity: number;
|
|
34
34
|
suspend?: (arg0: boolean) => void;
|
|
35
35
|
azimuths?: number;
|
|
36
36
|
elevations?: number[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sweep_views.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/sweep_views.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sweep_views.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/sweep_views.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;;;;;;GAYG;AACH;IAX6B,QAAQ;IACC,MAAM;IAClB,KAAK;IACJ,MAAM,EAAtB,MAAM;IAC4B,OAAO,UAAhC,OAAO,KAAG,IAAI;IACN,QAAQ,GAAzB,MAAM;IACa,UAAU,GAA7B,MAAM,EAAE;IACS,QAAQ,GAAzB,MAAM;IACW,OAAO,GAAxB,MAAM;IACJ,QAAQ,MAAM,CAAC,CAwG3B"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import Vector3 from "../../../core/geom/Vector3.js";
|
|
2
|
+
import { row_of_entity } from "../../renderer/scene/rows/GPUSceneRows.js";
|
|
2
3
|
import { diff_traced_against_rasterized } from "./diff_traced_against_rasterized.js";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -22,7 +23,7 @@ import { diff_traced_against_rasterized } from "./diff_traced_against_rasterized
|
|
|
22
23
|
* @param {Renderer} options.renderer
|
|
23
24
|
* @param {PerspectiveCamera} options.camera
|
|
24
25
|
* @param {Scene} options.scene
|
|
25
|
-
* @param {
|
|
26
|
+
* @param {number} options.entity the mesh entity to orbit and to frame on
|
|
26
27
|
* @param {function(boolean): void} [options.suspend]
|
|
27
28
|
* @param {number} [options.azimuths]
|
|
28
29
|
* @param {number[]} [options.elevations] radians; negative looks up from below
|
|
@@ -34,7 +35,7 @@ export async function sweep_views({
|
|
|
34
35
|
renderer,
|
|
35
36
|
camera,
|
|
36
37
|
scene,
|
|
37
|
-
|
|
38
|
+
entity,
|
|
38
39
|
suspend = () => undefined,
|
|
39
40
|
azimuths = 8,
|
|
40
41
|
elevations = [-0.9, -0.3, 0.3, 0.9],
|
|
@@ -45,7 +46,7 @@ export async function sweep_views({
|
|
|
45
46
|
|
|
46
47
|
const record = await scene_context.scene_database.debug_table_read_element(
|
|
47
48
|
'meshes',
|
|
48
|
-
|
|
49
|
+
row_of_entity(entity)
|
|
49
50
|
);
|
|
50
51
|
|
|
51
52
|
const box = record.bounding_box;
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
* @param {object} options
|
|
15
15
|
* @param {Renderer} options.renderer
|
|
16
16
|
* @param {Scene} options.scene
|
|
17
|
-
* @param {
|
|
17
|
+
* @param {number} options.entity a skinned mesh entity, whose clone is being deformed
|
|
18
18
|
* @param {number} [options.tolerance]
|
|
19
19
|
* @returns {Promise<object>}
|
|
20
20
|
*/
|
|
21
|
-
export function verify_clone_leaves({ renderer, scene,
|
|
21
|
+
export function verify_clone_leaves({ renderer, scene, entity, tolerance }: {
|
|
22
22
|
renderer: Renderer;
|
|
23
23
|
scene: Scene;
|
|
24
|
-
|
|
24
|
+
entity: number;
|
|
25
25
|
tolerance?: number;
|
|
26
26
|
}): Promise<object>;
|
|
27
27
|
//# sourceMappingURL=verify_clone_leaves.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify_clone_leaves.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/verify_clone_leaves.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify_clone_leaves.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/skinned_blas_refit/verify_clone_leaves.js"],"names":[],"mappings":"AAuDA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAN6B,QAAQ;IACX,KAAK;IACJ,MAAM,EAAtB,MAAM;IACW,SAAS,GAA1B,MAAM;IACJ,QAAQ,MAAM,CAAC,CA4D3B"}
|