@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,154 @@
|
|
|
1
|
+
import { u32 } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../shader/type/WebGPUArray.js";
|
|
3
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
4
|
+
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
5
|
+
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
6
|
+
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { chunk_scene_database_access } from "../scene/chunk_scene_database_access.js";
|
|
8
|
+
import { LIGHT_DATABASE_SPEC } from "./LIGHT_DATABASE_SPEC.js";
|
|
9
|
+
|
|
10
|
+
export const REFRESH_LIGHT_POSES_WORKGROUP_SIZE = COMPUTE_SHADER_DEFAULT_GROUP_SIZE;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Which light table a workgroup along `y` of the dispatch walks.
|
|
14
|
+
*
|
|
15
|
+
* @readonly
|
|
16
|
+
* @enum {number}
|
|
17
|
+
*/
|
|
18
|
+
export const REFRESH_LIGHT_POSES_TABLE = Object.freeze({
|
|
19
|
+
POINT: 0,
|
|
20
|
+
SPOT: 1,
|
|
21
|
+
DIRECTIONAL: 2,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
/** The dispatch is three tables wide. */
|
|
25
|
+
export const REFRESH_LIGHT_POSES_TABLE_COUNT = 3;
|
|
26
|
+
|
|
27
|
+
const POINT = LIGHT_DATABASE_SPEC.get('light_point');
|
|
28
|
+
const SPOT = LIGHT_DATABASE_SPEC.get('light_spot');
|
|
29
|
+
const DIRECTIONAL = LIGHT_DATABASE_SPEC.get('light_directional');
|
|
30
|
+
|
|
31
|
+
const WG = REFRESH_LIGHT_POSES_WORKGROUP_SIZE;
|
|
32
|
+
|
|
33
|
+
// read-write iterators over the light tables' pages: the pass writes the pose back into the
|
|
34
|
+
// database it reads the row from, and WGSL will not coerce a `read_write` pointer down to `read`
|
|
35
|
+
const PG_POINT = POINT.page_iterator_symbol_prefix(WG, true);
|
|
36
|
+
const PG_SPOT = SPOT.page_iterator_symbol_prefix(WG, true);
|
|
37
|
+
const PG_DIRECTIONAL = DIRECTIONAL.page_iterator_symbol_prefix(WG, true);
|
|
38
|
+
|
|
39
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
40
|
+
|
|
41
|
+
resources.createGroup()
|
|
42
|
+
.addStorageBuffer('scene_database', WebGPUArray.from(u32), false)
|
|
43
|
+
.addStorageBuffer('light_database', WebGPUArray.from(u32), true);
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Write every light record's pose from the `transforms` row it names — after the hierarchy pass
|
|
47
|
+
* has composed that row's `global`.
|
|
48
|
+
*
|
|
49
|
+
* **This is what makes a light's pose the GPU's.** A light is an entity, and its record's `node`
|
|
50
|
+
* is that entity's row. The row's `global` is composed on the GPU from its TRS and its parent
|
|
51
|
+
* chain, and once an ancestor can be GPU-driven — a torch in an animated hand — nothing on the
|
|
52
|
+
* CPU holds the world transform the record would need. So the pose is taken where the transform
|
|
53
|
+
* is: a point light's `position` is the row's translation, a directional light's `direction` is
|
|
54
|
+
* the row's +Z, a spot light's both; once per light per frame, over each table's pages rather
|
|
55
|
+
* than over `[0, count)`, because rows are addresses and a live one can sit above any number of
|
|
56
|
+
* holes.
|
|
57
|
+
*
|
|
58
|
+
* The CPU still writes the same fields when it builds a record, from the entity's own transform
|
|
59
|
+
* — exact for an entity the CPU composes, and what a pass that runs before this one in a frame
|
|
60
|
+
* reads. This pass is what makes them right for the entity the CPU does not compose, and it runs
|
|
61
|
+
* every frame because the hierarchy pass does.
|
|
62
|
+
*
|
|
63
|
+
* Runs after the hierarchy pass and before anything reads a light. The dispatch is
|
|
64
|
+
* {@link REFRESH_LIGHT_POSES_TABLE_COUNT} workgroups wide along `y`, one table each, and along
|
|
65
|
+
* `x` as many as the widest table's {@link GPUTypedTable#dispatch_group_count} at
|
|
66
|
+
* {@link REFRESH_LIGHT_POSES_WORKGROUP_SIZE}; a workgroup past a table's pages bails at setup.
|
|
67
|
+
*/
|
|
68
|
+
export const shader_refresh_light_poses = ComputeShader.from({
|
|
69
|
+
label: "Light/RefreshPoses",
|
|
70
|
+
body: CodeChunk.from(
|
|
71
|
+
//language=WGSL
|
|
72
|
+
`
|
|
73
|
+
fn light_row_position(node: u32) -> vec3<f32> {
|
|
74
|
+
let xf = scene_read_node(&scene_database, node).global;
|
|
75
|
+
|
|
76
|
+
return (xf * vec4<f32>(0.0, 0.0, 0.0, 1.0)).xyz;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// the engine's convention: a light shines along its +Z
|
|
80
|
+
fn light_row_direction(node: u32) -> vec3<f32> {
|
|
81
|
+
let xf = scene_read_node(&scene_database, node).global;
|
|
82
|
+
|
|
83
|
+
return normalize((xf * vec4<f32>(0.0, 0.0, 1.0, 0.0)).xyz);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@compute @workgroup_size(${WG},1,1)
|
|
87
|
+
fn main(
|
|
88
|
+
@builtin(workgroup_id) wg_id: vec3<u32>,
|
|
89
|
+
@builtin(local_invocation_index) local_id: u32,
|
|
90
|
+
) {
|
|
91
|
+
// wg_id is uniform across the workgroup, and so is every branch below
|
|
92
|
+
if wg_id.y == ${REFRESH_LIGHT_POSES_TABLE.POINT}u {
|
|
93
|
+
if !${PG_POINT}_setup(&light_database, wg_id.x, local_id) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
let slot = ${PG_POINT}_slot_in_page(local_id);
|
|
98
|
+
|
|
99
|
+
if slot >= ${PG_POINT}_ELEMENTS_PER_PAGE || !${PG_POINT}_is_occupied(slot) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
let index = ${PG_POINT}_slot_to_index(slot);
|
|
104
|
+
let light = ${POINT.marshalling_method_read_rw}(&light_database, index);
|
|
105
|
+
|
|
106
|
+
${POINT.marshalling_method_write_field('position')}(&light_database, index, light_row_position(light.node));
|
|
107
|
+
} else if wg_id.y == ${REFRESH_LIGHT_POSES_TABLE.SPOT}u {
|
|
108
|
+
if !${PG_SPOT}_setup(&light_database, wg_id.x, local_id) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
let slot = ${PG_SPOT}_slot_in_page(local_id);
|
|
113
|
+
|
|
114
|
+
if slot >= ${PG_SPOT}_ELEMENTS_PER_PAGE || !${PG_SPOT}_is_occupied(slot) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let index = ${PG_SPOT}_slot_to_index(slot);
|
|
119
|
+
let light = ${SPOT.marshalling_method_read_rw}(&light_database, index);
|
|
120
|
+
|
|
121
|
+
${SPOT.marshalling_method_write_field('position')}(&light_database, index, light_row_position(light.node));
|
|
122
|
+
${SPOT.marshalling_method_write_field('direction')}(&light_database, index, light_row_direction(light.node));
|
|
123
|
+
} else {
|
|
124
|
+
if !${PG_DIRECTIONAL}_setup(&light_database, wg_id.x, local_id) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
let slot = ${PG_DIRECTIONAL}_slot_in_page(local_id);
|
|
129
|
+
|
|
130
|
+
if slot >= ${PG_DIRECTIONAL}_ELEMENTS_PER_PAGE || !${PG_DIRECTIONAL}_is_occupied(slot) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
let index = ${PG_DIRECTIONAL}_slot_to_index(slot);
|
|
135
|
+
let light = ${DIRECTIONAL.marshalling_method_read_rw}(&light_database, index);
|
|
136
|
+
|
|
137
|
+
${DIRECTIONAL.marshalling_method_write_field('direction')}(&light_database, index, light_row_direction(light.node));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
`, [
|
|
141
|
+
chunk_scene_database_access,
|
|
142
|
+
POINT.chunk_iterate(WG, true),
|
|
143
|
+
SPOT.chunk_iterate(WG, true),
|
|
144
|
+
DIRECTIONAL.chunk_iterate(WG, true),
|
|
145
|
+
POINT.chunk_read_rw,
|
|
146
|
+
SPOT.chunk_read_rw,
|
|
147
|
+
DIRECTIONAL.chunk_read_rw,
|
|
148
|
+
POINT.wgsl_gen_write_field_code('position'),
|
|
149
|
+
SPOT.wgsl_gen_write_field_code('position'),
|
|
150
|
+
SPOT.wgsl_gen_write_field_code('direction'),
|
|
151
|
+
DIRECTIONAL.wgsl_gen_write_field_code('direction'),
|
|
152
|
+
]),
|
|
153
|
+
resources,
|
|
154
|
+
});
|
|
@@ -139,7 +139,7 @@ export class GPULightMap {
|
|
|
139
139
|
const r_materials = graphics.materials_resident;
|
|
140
140
|
|
|
141
141
|
|
|
142
|
-
r_materials.ensure_scene_materials(scene_ctx
|
|
142
|
+
r_materials.ensure_scene_materials(scene_ctx);
|
|
143
143
|
r_materials.update();
|
|
144
144
|
|
|
145
145
|
const viz_buffer = graph_import_texture(graph, this.texture_viz);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_draw_lightmap_viz_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_draw_lightmap_viz_buffer.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js"],"names":[],"mappings":"AA+CA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACT,MAAM,EAAtB,MAAM;IACmB,KAAK;IACZ,KAAK,GAAvB,OAAO;IACL,MAAM,CAmLlB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../../../core/assert.js";
|
|
2
|
+
import { row_of_entity } from "../../../scene/rows/GPUSceneRows.js";
|
|
2
3
|
import { vec2f } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
4
|
import {
|
|
4
5
|
VIZ_BUFFER_INVALID_MESH_VALUE
|
|
@@ -74,9 +75,15 @@ export function graph_draw_lightmap_viz_buffer({
|
|
|
74
75
|
*/
|
|
75
76
|
function execute(data, resources, context) {
|
|
76
77
|
|
|
77
|
-
|
|
78
|
+
// every mesh row, with the row it is — what the viz buffer carries per pixel, and what the
|
|
79
|
+
// bake's shaders read the record by
|
|
80
|
+
const drawn = [];
|
|
78
81
|
|
|
79
|
-
|
|
82
|
+
scene.rows.for_each_mesh((entity, geometry) => {
|
|
83
|
+
drawn.push({ row: row_of_entity(entity), geometry });
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
const mesh_count = drawn.length;
|
|
80
87
|
|
|
81
88
|
if (mesh_count <= 0) {
|
|
82
89
|
// nothing to do
|
|
@@ -128,10 +135,7 @@ export function graph_draw_lightmap_viz_buffer({
|
|
|
128
135
|
});
|
|
129
136
|
|
|
130
137
|
for (let i = 0; i < mesh_count; i++) {
|
|
131
|
-
const
|
|
132
|
-
const geometry = mesh.geometry;
|
|
133
|
-
|
|
134
|
-
const mesh_id = i;
|
|
138
|
+
const { row: mesh_id, geometry } = drawn[i];
|
|
135
139
|
|
|
136
140
|
pass.draw(
|
|
137
141
|
geometry.getVertexCount(),
|
|
@@ -166,10 +170,7 @@ export function graph_draw_lightmap_viz_buffer({
|
|
|
166
170
|
});
|
|
167
171
|
|
|
168
172
|
for (let i = 0; i < mesh_count; i++) {
|
|
169
|
-
const
|
|
170
|
-
const geometry = mesh.geometry;
|
|
171
|
-
|
|
172
|
-
const mesh_id = i;
|
|
173
|
+
const { row: mesh_id, geometry } = drawn[i];
|
|
173
174
|
|
|
174
175
|
// line-list: 3 edges x 2 vertices per triangle = 6 per triangle, i.e. 2x the
|
|
175
176
|
// index count — with only getIndexCount() vertices half the triangles got no edges
|
|
@@ -206,10 +207,7 @@ export function graph_draw_lightmap_viz_buffer({
|
|
|
206
207
|
});
|
|
207
208
|
|
|
208
209
|
for (let i = 0; i < mesh_count; i++) {
|
|
209
|
-
const
|
|
210
|
-
const geometry = mesh.geometry;
|
|
211
|
-
|
|
212
|
-
const mesh_id = i;
|
|
210
|
+
const { row: mesh_id, geometry } = drawn[i];
|
|
213
211
|
|
|
214
212
|
pass.draw(
|
|
215
213
|
geometry.getIndexCount(),
|
|
@@ -1,53 +1,78 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* of a loader
|
|
9
|
-
*
|
|
10
|
-
* groups them with the matching scene roots so callers can pass them
|
|
11
|
-
* to {@link GPUAnimationManager#register_skin} and
|
|
12
|
-
* {@link GPUAnimationManager#register_clip} after adding the scene
|
|
13
|
-
* roots to the scene and letting `scene.build` populate `id_mapping`.
|
|
2
|
+
* @typedef {import("./SceneNode.js").SceneNode} SceneNode
|
|
3
|
+
* @typedef {import("../animation/Skin.js").Skin} Skin
|
|
4
|
+
* @typedef {import("../animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
|
|
5
|
+
* @typedef {import("../light/model/Light.js").Light} Light
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* What came out of a loader: a model as a flat list of {@link SceneNode}s in pre-order, with the
|
|
9
|
+
* skins, clips and lights the same file carried, each addressing nodes by index.
|
|
14
10
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* it
|
|
11
|
+
* Not glTF-specific by design — the bundle describes "what a loader produced", not "what was in
|
|
12
|
+
* a file", and every loader ({@link load_gltf}, {@link load_usd}, {@link deserialize_scene})
|
|
13
|
+
* produces one. It is pure data with no lifecycle: a model compiles from it once into a
|
|
14
|
+
* {@link Prefab} (`prefab_compile`), and a prefab is what gets placed — as entities, each holding
|
|
15
|
+
* a row — however many times the model appears. The bundle is read by that compile and never
|
|
16
|
+
* written, so one bundle is shared by every placement, which is what the asset manager hands out.
|
|
18
17
|
*
|
|
19
|
-
* @
|
|
20
|
-
*
|
|
18
|
+
* Pre-order is the one structural promise: a node's parent has a lower index. {@link add_node}
|
|
19
|
+
* refuses anything else, so a reader composes world transforms in a single forward pass.
|
|
21
20
|
*/
|
|
22
21
|
export class SceneBundle {
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
25
|
-
* Typical assets have exactly one, but multi-scene files (and
|
|
26
|
-
* the glTF format in particular) allow multiple.
|
|
23
|
+
* Every node of the model, parents before children.
|
|
27
24
|
*
|
|
28
|
-
* @type {
|
|
25
|
+
* @type {SceneNode[]}
|
|
29
26
|
*/
|
|
30
|
-
|
|
27
|
+
nodes: SceneNode[];
|
|
31
28
|
/**
|
|
32
|
-
* Skins extracted from the asset.
|
|
33
|
-
*
|
|
34
|
-
* deform against it. Empty if the asset has no skinned meshes.
|
|
29
|
+
* Skins extracted from the asset. A skin's `joints` and `meshes` are indices into
|
|
30
|
+
* {@link nodes}. Empty if the asset has no skinned meshes.
|
|
35
31
|
*
|
|
36
32
|
* @type {Skin[]}
|
|
37
33
|
*/
|
|
38
34
|
skins: Skin[];
|
|
39
35
|
/**
|
|
40
|
-
* Animation clips extracted from the asset. Each
|
|
41
|
-
*
|
|
42
|
-
* Empty if the asset has no animations.
|
|
36
|
+
* Animation clips extracted from the asset. Each channel's `target` is an index into
|
|
37
|
+
* {@link nodes}. Empty if the asset has no animations.
|
|
43
38
|
*
|
|
44
39
|
* @type {ShadeAnimationClip[]}
|
|
45
40
|
*/
|
|
46
41
|
clips: ShadeAnimationClip[];
|
|
42
|
+
/**
|
|
43
|
+
* Punctual lights extracted from the asset, each with the index of the node it sits on. A
|
|
44
|
+
* light is not a node and has no place of its own; the node's transform is where it is,
|
|
45
|
+
* already turned to shine along the engine's +Z. Empty if the asset has no lights.
|
|
46
|
+
*
|
|
47
|
+
* @type {{light: Light, node: number}[]}
|
|
48
|
+
*/
|
|
49
|
+
lights: {
|
|
50
|
+
light: Light;
|
|
51
|
+
node: number;
|
|
52
|
+
}[];
|
|
53
|
+
/**
|
|
54
|
+
* Append a node. Its parent, if it has one, must already be in the bundle — which is what
|
|
55
|
+
* keeps the list in pre-order.
|
|
56
|
+
*
|
|
57
|
+
* @param {SceneNode} node
|
|
58
|
+
* @returns {number} the node's index, what a child, a skin, a clip or a light names it by
|
|
59
|
+
*/
|
|
60
|
+
add_node(node: SceneNode): number;
|
|
61
|
+
/**
|
|
62
|
+
* The world matrix of every node, composed root-first in double precision — what a reader
|
|
63
|
+
* that wants where things are in the model's own space asks for, once.
|
|
64
|
+
*
|
|
65
|
+
* @returns {Float64Array[]} one 4x4 per node, column-major
|
|
66
|
+
*/
|
|
67
|
+
compute_world_matrices(): Float64Array[];
|
|
47
68
|
/**
|
|
48
69
|
* @readonly
|
|
49
70
|
* @type {boolean}
|
|
50
71
|
*/
|
|
51
72
|
readonly isSceneBundle: boolean;
|
|
52
73
|
}
|
|
74
|
+
export type SceneNode = import("./SceneNode.js").SceneNode;
|
|
75
|
+
export type Skin = import("../animation/Skin.js").Skin;
|
|
76
|
+
export type ShadeAnimationClip = import("../animation/ShadeAnimationClip.js").ShadeAnimationClip;
|
|
77
|
+
export type Light = import("../light/model/Light.js").Light;
|
|
53
78
|
//# sourceMappingURL=SceneBundle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneBundle.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/loader/SceneBundle.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SceneBundle.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/loader/SceneBundle.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AAEH;;;;;;;;;;;;;GAaG;AACH;IACI;;;;OAIG;IACH,OAFU,SAAS,EAAE,CAEV;IAEX;;;;;OAKG;IACH,OAFU,IAAI,EAAE,CAEL;IAEX;;;;;OAKG;IACH,OAFU,kBAAkB,EAAE,CAEnB;IAEX;;;;;;OAMG;IACH,QAFU;QAAC,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,EAAE,CAE5B;IAEZ;;;;;;OAMG;IACH,eAHW,SAAS,GACP,MAAM,CAalB;IAED;;;;;OAKG;IACH,0BAFa,YAAY,EAAE,CAsB1B;IAGL;;;OAGG;IACH,wBAFU,OAAO,CAEkB;CANlC;wBApGY,OAAO,gBAAgB,EAAE,SAAS;mBAClC,OAAO,sBAAsB,EAAE,IAAI;iCACnC,OAAO,oCAAoC,EAAE,kBAAkB;oBAC/D,OAAO,yBAAyB,EAAE,KAAK"}
|
|
@@ -1,56 +1,111 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* {@link
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* it
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* @type {
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Skins extracted from the asset.
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { m4_multiply } from "../../../core/geom/3d/mat4/m4_multiply.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* @typedef {import("./SceneNode.js").SceneNode} SceneNode
|
|
6
|
+
* @typedef {import("../animation/Skin.js").Skin} Skin
|
|
7
|
+
* @typedef {import("../animation/ShadeAnimationClip.js").ShadeAnimationClip} ShadeAnimationClip
|
|
8
|
+
* @typedef {import("../light/model/Light.js").Light} Light
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* What came out of a loader: a model as a flat list of {@link SceneNode}s in pre-order, with the
|
|
13
|
+
* skins, clips and lights the same file carried, each addressing nodes by index.
|
|
14
|
+
*
|
|
15
|
+
* Not glTF-specific by design — the bundle describes "what a loader produced", not "what was in
|
|
16
|
+
* a file", and every loader ({@link load_gltf}, {@link load_usd}, {@link deserialize_scene})
|
|
17
|
+
* produces one. It is pure data with no lifecycle: a model compiles from it once into a
|
|
18
|
+
* {@link Prefab} (`prefab_compile`), and a prefab is what gets placed — as entities, each holding
|
|
19
|
+
* a row — however many times the model appears. The bundle is read by that compile and never
|
|
20
|
+
* written, so one bundle is shared by every placement, which is what the asset manager hands out.
|
|
21
|
+
*
|
|
22
|
+
* Pre-order is the one structural promise: a node's parent has a lower index. {@link add_node}
|
|
23
|
+
* refuses anything else, so a reader composes world transforms in a single forward pass.
|
|
24
|
+
*/
|
|
25
|
+
export class SceneBundle {
|
|
26
|
+
/**
|
|
27
|
+
* Every node of the model, parents before children.
|
|
28
|
+
*
|
|
29
|
+
* @type {SceneNode[]}
|
|
30
|
+
*/
|
|
31
|
+
nodes = [];
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Skins extracted from the asset. A skin's `joints` and `meshes` are indices into
|
|
35
|
+
* {@link nodes}. Empty if the asset has no skinned meshes.
|
|
36
|
+
*
|
|
37
|
+
* @type {Skin[]}
|
|
38
|
+
*/
|
|
39
|
+
skins = [];
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Animation clips extracted from the asset. Each channel's `target` is an index into
|
|
43
|
+
* {@link nodes}. Empty if the asset has no animations.
|
|
44
|
+
*
|
|
45
|
+
* @type {ShadeAnimationClip[]}
|
|
46
|
+
*/
|
|
47
|
+
clips = [];
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Punctual lights extracted from the asset, each with the index of the node it sits on. A
|
|
51
|
+
* light is not a node and has no place of its own; the node's transform is where it is,
|
|
52
|
+
* already turned to shine along the engine's +Z. Empty if the asset has no lights.
|
|
53
|
+
*
|
|
54
|
+
* @type {{light: Light, node: number}[]}
|
|
55
|
+
*/
|
|
56
|
+
lights = [];
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* Append a node. Its parent, if it has one, must already be in the bundle — which is what
|
|
60
|
+
* keeps the list in pre-order.
|
|
61
|
+
*
|
|
62
|
+
* @param {SceneNode} node
|
|
63
|
+
* @returns {number} the node's index, what a child, a skin, a clip or a light names it by
|
|
64
|
+
*/
|
|
65
|
+
add_node(node) {
|
|
66
|
+
assert.defined(node, 'node');
|
|
67
|
+
assert.equal(node.isSceneNode, true, 'node.isSceneNode !== true');
|
|
68
|
+
|
|
69
|
+
const index = this.nodes.length;
|
|
70
|
+
|
|
71
|
+
assert.lessThan(node.parent, index, `node ${index} (${node.name}) names parent ${node.parent}, which is not in the bundle yet — add parents before children`);
|
|
72
|
+
|
|
73
|
+
this.nodes.push(node);
|
|
74
|
+
|
|
75
|
+
return index;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* The world matrix of every node, composed root-first in double precision — what a reader
|
|
80
|
+
* that wants where things are in the model's own space asks for, once.
|
|
81
|
+
*
|
|
82
|
+
* @returns {Float64Array[]} one 4x4 per node, column-major
|
|
83
|
+
*/
|
|
84
|
+
compute_world_matrices() {
|
|
85
|
+
const nodes = this.nodes;
|
|
86
|
+
const count = nodes.length;
|
|
87
|
+
const worlds = new Array(count);
|
|
88
|
+
|
|
89
|
+
for (let i = 0; i < count; i++) {
|
|
90
|
+
const node = nodes[i];
|
|
91
|
+
const world = new Float64Array(16);
|
|
92
|
+
const local = node.local.matrix;
|
|
93
|
+
|
|
94
|
+
if (node.parent === -1) {
|
|
95
|
+
world.set(local);
|
|
96
|
+
} else {
|
|
97
|
+
m4_multiply(world, worlds[node.parent], local);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
worlds[i] = world;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return worlds;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @readonly
|
|
109
|
+
* @type {boolean}
|
|
110
|
+
*/
|
|
111
|
+
SceneBundle.prototype.isSceneBundle = true;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {import("../geometry/MeshletGeometry.js").MeshletGeometry} MeshletGeometry
|
|
3
|
+
* @typedef {import("../material/ShadeMaterial.js").ShadeMaterial} ShadeMaterial
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* One node of a loaded model, as a loader describes it: a name, the index of its parent, its own
|
|
7
|
+
* local transform, and — when the node draws — a geometry and a material.
|
|
8
|
+
*
|
|
9
|
+
* A description, not a runtime object. It has no children list, no world transform and no row:
|
|
10
|
+
* the parent index is the whole of the hierarchy, worlds are composed by whoever needs them
|
|
11
|
+
* (`prefab_compile` once per model, `shade_bundle_bounds` once per query), and what a node
|
|
12
|
+
* becomes on a screen is an entity of a {@link Prefab} instance. Nodes sit in a
|
|
13
|
+
* {@link SceneBundle} in pre-order — a parent's index below its children's — which is what lets
|
|
14
|
+
* every reader compose worlds in one forward pass.
|
|
15
|
+
*
|
|
16
|
+
* A node that draws is a primitive: a glTF mesh with one primitive is the node itself; one with
|
|
17
|
+
* several is a node with one child per primitive. Whether a primitive is skinned is not written
|
|
18
|
+
* on it — a skin names the nodes it deforms ({@link Skin.meshes}).
|
|
19
|
+
*/
|
|
20
|
+
export class SceneNode {
|
|
21
|
+
/**
|
|
22
|
+
* @param {object} [options]
|
|
23
|
+
* @param {string} [options.name]
|
|
24
|
+
* @param {number} [options.parent] -1 for a root
|
|
25
|
+
* @param {number[]} [options.translation]
|
|
26
|
+
* @param {number[]} [options.rotation] a quaternion, `x, y, z, w`
|
|
27
|
+
* @param {number[]} [options.scale]
|
|
28
|
+
* @param {ArrayLike<number>} [options.matrix] a column-major 4x4, instead of the three above
|
|
29
|
+
* @param {MeshletGeometry} [options.geometry]
|
|
30
|
+
* @param {ShadeMaterial} [options.material]
|
|
31
|
+
* @returns {SceneNode}
|
|
32
|
+
*/
|
|
33
|
+
static from({ name, parent, translation, rotation, scale, matrix, geometry, material }?: {
|
|
34
|
+
name?: string;
|
|
35
|
+
parent?: number;
|
|
36
|
+
translation?: number[];
|
|
37
|
+
rotation?: number[];
|
|
38
|
+
scale?: number[];
|
|
39
|
+
matrix?: ArrayLike<number>;
|
|
40
|
+
geometry?: MeshletGeometry;
|
|
41
|
+
material?: ShadeMaterial;
|
|
42
|
+
}): SceneNode;
|
|
43
|
+
/**
|
|
44
|
+
* @type {string}
|
|
45
|
+
*/
|
|
46
|
+
name: string;
|
|
47
|
+
/**
|
|
48
|
+
* Index of the parent in the bundle's nodes, or -1 for a root.
|
|
49
|
+
*
|
|
50
|
+
* @type {number}
|
|
51
|
+
*/
|
|
52
|
+
parent: number;
|
|
53
|
+
/**
|
|
54
|
+
* The node's own transform, relative to its parent. Kept with its matrix current: a reader
|
|
55
|
+
* composes worlds from `local.matrix` without asking.
|
|
56
|
+
*
|
|
57
|
+
* @type {Transform64}
|
|
58
|
+
*/
|
|
59
|
+
local: Transform64;
|
|
60
|
+
/**
|
|
61
|
+
* What the node draws, or `null` for a node that only places others.
|
|
62
|
+
*
|
|
63
|
+
* @type {MeshletGeometry|null}
|
|
64
|
+
*/
|
|
65
|
+
geometry: MeshletGeometry | null;
|
|
66
|
+
/**
|
|
67
|
+
* How it is drawn; `null` exactly when {@link geometry} is.
|
|
68
|
+
*
|
|
69
|
+
* @type {ShadeMaterial|null}
|
|
70
|
+
*/
|
|
71
|
+
material: ShadeMaterial | null;
|
|
72
|
+
/**
|
|
73
|
+
* @readonly
|
|
74
|
+
* @type {boolean}
|
|
75
|
+
*/
|
|
76
|
+
readonly isSceneNode: boolean;
|
|
77
|
+
}
|
|
78
|
+
export type MeshletGeometry = import("../geometry/MeshletGeometry.js").MeshletGeometry;
|
|
79
|
+
export type ShadeMaterial = import("../material/ShadeMaterial.js").ShadeMaterial;
|
|
80
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
81
|
+
//# sourceMappingURL=SceneNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SceneNode.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/loader/SceneNode.js"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;;;;;;;;;;;;GAcG;AACH;IAmCI;;;;;;;;;;;OAWG;IACH;QAV4B,IAAI,GAArB,MAAM;QACW,MAAM,GAAvB,MAAM;QACa,WAAW,GAA9B,MAAM,EAAE;QACW,QAAQ,GAA3B,MAAM,EAAE;QACW,KAAK,GAAxB,MAAM,EAAE;QACoB,MAAM,GAAlC,UAAU,MAAM,CAAC;QACS,QAAQ,GAAlC,eAAe;QACS,QAAQ,GAAhC,aAAa;QACX,SAAS,CAsCrB;IAlFD;;OAEG;IACH,MAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,QAFU,MAAM,CAEJ;IAEZ;;;;;OAKG;IACH,OAFU,WAAW,CAEK;IAE1B;;;;OAIG;IACH,UAFU,eAAe,GAAC,IAAI,CAEd;IAEhB;;;;OAIG;IACH,UAFU,aAAa,GAAC,IAAI,CAEZ;IAqDpB;;;OAGG;IACH,sBAFU,OAAO,CAEc;CAN9B;8BAvGY,OAAO,gCAAgC,EAAE,eAAe;4BACxD,OAAO,8BAA8B,EAAE,aAAa;4BAJrC,8CAA8C"}
|