@woosh/meep-engine 3.23.0 → 3.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/editor/entity_world_bounds.d.ts +9 -3
- package/editor/entity_world_bounds.d.ts.map +1 -1
- package/editor/entity_world_bounds.js +61 -4
- package/package.json +1 -1
- package/src/core/binary/allocator/OffsetAllocator.d.ts +40 -2
- package/src/core/binary/allocator/OffsetAllocator.d.ts.map +1 -1
- package/src/core/binary/allocator/OffsetAllocator.js +124 -29
- package/src/core/collection/map/u32_index.d.ts +83 -0
- package/src/core/collection/map/u32_index.d.ts.map +1 -0
- package/src/core/collection/map/u32_index.js +247 -0
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.d.ts +2 -2
- package/src/engine/asset/loaders/GLTFSceneBundleAssetLoader.js +2 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts +1 -2
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.d.ts.map +1 -1
- package/src/engine/asset/loaders/USDSceneBundleAssetLoader.js +4 -12
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts +55 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthority.js +72 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts +40 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.d.ts.map +1 -0
- package/src/engine/ecs/gpu/GPUStateAuthorityFlags.js +79 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_assert_cpu.js +27 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts +23 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_declare.js +39 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts +15 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_grant.js +38 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts +18 -0
- package/src/engine/ecs/gpu/gpu_authority_has.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_has.js +28 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts +24 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.d.ts.map +1 -0
- package/src/engine/ecs/gpu/gpu_authority_revoke.js +49 -0
- package/src/engine/ecs/ik/IKProblem.d.ts +14 -0
- package/src/engine/ecs/ik/IKProblem.d.ts.map +1 -1
- package/src/engine/ecs/ik/IKProblem.js +16 -0
- package/src/engine/ecs/ik/InverseKinematicsSystem.d.ts.map +1 -1
- package/src/engine/ecs/ik/InverseKinematicsSystem.js +19 -0
- package/src/engine/ecs/ik/OneBoneSurfaceAlignmentSolver.js +2 -2
- package/src/engine/ecs/ik/TwoBoneInverseKinematicsSolver.js +2 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts +11 -2
- package/src/engine/ecs/ik/ik_bone_chain.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_bone_chain.js +47 -2
- package/src/engine/ecs/ik/ik_write_local_rotation.d.ts.map +1 -1
- package/src/engine/ecs/ik/ik_write_local_rotation.js +6 -0
- package/src/engine/ecs/speaker/VoiceSystem.d.ts.map +1 -1
- package/src/engine/ecs/speaker/VoiceSystem.js +6 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts +50 -0
- package/src/engine/ecs/transform/T64WorldCache.d.ts.map +1 -0
- package/src/engine/ecs/transform/T64WorldCache.js +139 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts +31 -0
- package/src/engine/ecs/transform/t64_evaluate_world.d.ts.map +1 -0
- package/src/engine/ecs/transform/t64_evaluate_world.js +126 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts +8 -0
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +59 -30
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/highlight/system/ShadedGeometryHighlightSystem.js +4 -11
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/SHADED_GEOMETRY_EVENT_CHANGE.js +13 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts +2 -14
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometry.js +11 -21
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.d.ts +1 -0
- package/src/engine/graphics/ecs/mesh-v2/ShadedGeometryFlags.js +7 -0
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts +5 -6
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.d.ts.map +1 -1
- package/src/engine/graphics/ecs/mesh-v2/aggregate/SGMeshHighlightSystem.js +13 -11
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts +14 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.d.ts.map +1 -0
- package/src/engine/graphics/ecs/mesh-v2/shaded_geometry_announce_change.js +21 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.d.ts +1 -1
- package/src/engine/graphics/sh3/path_tracer/populate_path_traced_scene_from_ecd.js +1 -1
- package/src/engine/graphics3/AnimationGraphSystem.js +3 -3
- package/src/engine/graphics3/AnimationSystem.js +2 -2
- package/src/engine/graphics3/DebugDrawSystem.d.ts.map +1 -1
- package/src/engine/graphics3/DebugDrawSystem.js +2 -4
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +34 -27
- package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +185 -85
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts +4 -3
- package/src/engine/graphics3/HighlightOutlineSystem.d.ts.map +1 -1
- package/src/engine/graphics3/HighlightOutlineSystem.js +7 -9
- package/src/engine/graphics3/LightSystem.d.ts +7 -5
- package/src/engine/graphics3/LightSystem.d.ts.map +1 -1
- package/src/engine/graphics3/LightSystem.js +36 -22
- package/src/engine/graphics3/MeshSystem.d.ts +43 -39
- package/src/engine/graphics3/MeshSystem.d.ts.map +1 -1
- package/src/engine/graphics3/MeshSystem.js +324 -331
- package/src/engine/graphics3/PathDisplaySystem.d.ts.map +1 -1
- package/src/engine/graphics3/PathDisplaySystem.js +2 -4
- package/src/engine/graphics3/PickingQuery.d.ts +15 -21
- package/src/engine/graphics3/PickingQuery.d.ts.map +1 -1
- package/src/engine/graphics3/PickingQuery.js +21 -25
- package/src/engine/graphics3/PickingSystem.d.ts +60 -31
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +416 -273
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts +22 -12
- package/src/engine/graphics3/ShadedGeometrySystem.d.ts.map +1 -1
- package/src/engine/graphics3/ShadedGeometrySystem.js +309 -174
- package/src/engine/graphics3/TerrainSystem.d.ts +19 -11
- package/src/engine/graphics3/TerrainSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TerrainSystem.js +102 -53
- package/src/engine/graphics3/TooltipComponentSystem.d.ts.map +1 -1
- package/src/engine/graphics3/TooltipComponentSystem.js +2 -14
- package/src/engine/graphics3/Trail3DSystem.d.ts.map +1 -1
- package/src/engine/graphics3/Trail3DSystem.js +2 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts +4 -4
- package/src/engine/graphics3/animation/ClipListPlayer.d.ts.map +1 -1
- package/src/engine/graphics3/animation/ClipListPlayer.js +2 -2
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts +9 -11
- package/src/engine/graphics3/highlight/pack_highlight_table.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/pack_highlight_table.js +11 -18
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts +4 -3
- package/src/engine/graphics3/pose/query_entity_node_world_pose.d.ts.map +1 -1
- package/src/engine/graphics3/pose/query_entity_node_world_pose.js +75 -74
- package/src/engine/graphics3/prefab/Prefab.d.ts +130 -0
- package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/Prefab.js +162 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts +72 -0
- package/src/engine/graphics3/prefab/PrefabInstance.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/PrefabInstance.js +80 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts +23 -0
- package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_compile.js +334 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts +46 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_instantiate.js +230 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts +70 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_normalize_skin_frames.js +210 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_place.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_place.js +130 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts +60 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_clip_scale_conflicts.js +128 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts +40 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.d.ts.map +1 -0
- package/src/engine/graphics3/prefab/prefab_skin_frame.js +116 -0
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts +16 -14
- package/src/engine/graphics3/preview/make_model_preview_scene.d.ts.map +1 -1
- package/src/engine/graphics3/preview/make_model_preview_scene.js +126 -154
- package/src/engine/graphics3/preview/make_model_thumbnail.js +1 -1
- package/src/engine/graphics3/register_instance_animation.d.ts +6 -6
- package/src/engine/graphics3/register_instance_animation.d.ts.map +1 -1
- package/src/engine/graphics3/register_instance_animation.js +4 -4
- package/src/engine/graphics3/shade_bundle_bounds.d.ts +2 -6
- package/src/engine/graphics3/shade_bundle_bounds.d.ts.map +1 -1
- package/src/engine/graphics3/shade_bundle_bounds.js +47 -55
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts +11 -18
- package/src/engine/graphics3/terrain/pack_terrain_row_table.d.ts.map +1 -1
- package/src/engine/graphics3/terrain/pack_terrain_row_table.js +48 -53
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts +17 -2
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.d.ts.map +1 -1
- package/src/engine/physics/cloth/build/cloth_proxy_from_joints.js +284 -256
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +13 -15
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +12 -14
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts +7 -8
- package/src/engine/physics/cloth/ecs/ClothRig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothRig.js +7 -8
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +5 -4
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +11 -12
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts +19 -23
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_rig.js +201 -199
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_seed_subtree.js +8 -0
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts +18 -34
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back_rig.js +58 -115
- package/src/engine/physics/cloth/playground/README.md +11 -11
- package/src/engine/physics/cloth/playground/garment_build.d.ts +0 -1
- package/src/engine/physics/cloth/playground/garment_build.d.ts.map +1 -1
- package/src/engine/physics/cloth/playground/garment_build.js +64 -58
- package/src/engine/physics/cloth/playground/garment_main.js +59 -33
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +85 -53
- package/src/shade/device/ShadeGPUCommandContext.d.ts +23 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +36 -0
- package/src/shade/playground/add_random_meshes.d.ts +4 -4
- package/src/shade/playground/add_random_meshes.d.ts.map +1 -1
- package/src/shade/playground/add_random_meshes.js +20 -16
- package/src/shade/playground/avboit/main.d.ts +1 -0
- package/src/shade/playground/avboit/main.d.ts.map +1 -1
- package/src/shade/playground/avboit/main.js +916 -875
- package/src/shade/playground/basis_textures/main.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/main.js +22 -8
- package/src/shade/playground/basis_textures/texture_inventory.d.ts +2 -2
- package/src/shade/playground/basis_textures/texture_inventory.d.ts.map +1 -1
- package/src/shade/playground/basis_textures/texture_inventory.js +6 -7
- package/src/shade/playground/ground_seam/main.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/main.js +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts +13 -4
- package/src/shade/playground/ground_seam/make_ground.d.ts.map +1 -1
- package/src/shade/playground/ground_seam/make_ground.js +21 -16
- package/src/shade/playground/particle_ecs/bonfire_editor.js +3 -3
- package/src/shade/playground/particle_system/main.js +11 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts +15 -10
- package/src/shade/playground/particle_system/particle_prototype.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_prototype.js +56 -15
- package/src/shade/playground/particle_system/particle_scene.d.ts +68 -28
- package/src/shade/playground/particle_system/particle_scene.d.ts.map +1 -1
- package/src/shade/playground/particle_system/particle_scene.js +149 -53
- package/src/shade/playground/readback_crossover/index.html +41 -0
- package/src/shade/playground/readback_crossover/main.d.ts +2 -0
- package/src/shade/playground/readback_crossover/main.d.ts.map +1 -0
- package/src/shade/playground/readback_crossover/main.js +372 -0
- package/src/shade/playground/skinned_blas_refit/README.md +11 -7
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts +13 -44
- package/src/shade/playground/skinned_blas_refit/add_floor.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/add_floor.js +19 -59
- package/src/shade/playground/skinned_blas_refit/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/main.js +67 -58
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts +40 -54
- package/src/shade/playground/skinned_blas_refit/place_character.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/place_character.js +47 -74
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/sweep_views.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/sweep_views.js +4 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_clone_leaves.js +11 -4
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_instance_bounds.js +38 -9
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_skinned_blas_refit.js +9 -6
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts +3 -3
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +3 -3
- package/src/shade/playground/skinned_mesh_soup/README.md +6 -6
- package/src/shade/playground/skinned_mesh_soup/main.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/main.js +44 -102
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts +5 -5
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.d.ts.map +1 -1
- package/src/shade/playground/skinned_mesh_soup/verify_clone_vertices.js +42 -33
- package/src/shade/playground/sponza_path_trace/main.d.ts +1 -0
- package/src/shade/playground/sponza_path_trace/main.d.ts.map +1 -1
- package/src/shade/playground/sponza_path_trace/main.js +393 -363
- package/src/shade/playground/ssr_reprojection/main.js +11 -9
- package/src/shade/playground/ssr_reprojection/scene.d.ts +15 -4
- package/src/shade/playground/ssr_reprojection/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_reprojection/scene.js +32 -11
- package/src/shade/playground/ssr_variance/main.js +1 -1
- package/src/shade/playground/ssr_variance/scene.d.ts +10 -4
- package/src/shade/playground/ssr_variance/scene.d.ts.map +1 -1
- package/src/shade/playground/ssr_variance/scene.js +39 -15
- package/src/shade/playground/vgeo_viewer/main.js +6 -2
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +936 -922
- package/src/shade/renderer/GraphicsContext.d.ts +7 -0
- package/src/shade/renderer/GraphicsContext.d.ts.map +1 -1
- package/src/shade/renderer/GraphicsContext.js +11 -0
- package/src/shade/renderer/Renderer.d.ts +3 -2
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +3 -2
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +39 -47
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +319 -256
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts +26 -22
- package/src/shade/renderer/animation/ShadeAnimationChannel.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationChannel.js +28 -23
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +14 -6
- package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
- package/src/shade/renderer/animation/ShadeAnimationClip.js +20 -8
- package/src/shade/renderer/animation/Skin.d.ts +19 -19
- package/src/shade/renderer/animation/Skin.d.ts.map +1 -1
- package/src/shade/renderer/animation/Skin.js +15 -13
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts +6 -5
- package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
- package/src/shade/renderer/animation/pose/pose_evaluate_local.js +9 -9
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts +5 -59
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.d.ts.map +1 -1
- package/src/shade/renderer/animation/skin_clip_scale_conflicts.js +8 -132
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +65 -62
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +148 -194
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +4 -7
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.d.ts +2 -2
- package/src/shade/renderer/animation/skinning/chunk_skin_blend_mesh_local.js +2 -2
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts +74 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.d.ts.map +1 -0
- package/src/shade/renderer/buffer/GPUBufferReadbackAllocator.js +240 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +14 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +64 -6
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts +190 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUDatabaseReadback.js +1323 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts +10 -0
- package/src/shade/renderer/buffer/table/GPUPageMetadata.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUPageMetadata.js +12 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts +96 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStagingRing.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts +15 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPUReadbackStatus.js +34 -0
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts +75 -7
- package/src/shade/renderer/buffer/table/GPUTypedTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUTypedTable.js +518 -135
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts +19 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/GPU_TABLE_GATHER_DESCRIPTOR_WORDS.js +18 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts +39 -0
- package/src/shade/renderer/buffer/table/WordViews.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/WordViews.js +62 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts +27 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/gpu_table_gather_shader.js +117 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts +121 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.d.ts.map +1 -0
- package/src/shade/renderer/buffer/table/serde/generate_record_writer.js +395 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +70 -20
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/GPUGeometryBVHManager.js +6 -5
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts +3 -3
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +15 -11
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.d.ts +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_bake_for_scene.js +4 -4
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts +1 -3
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/cpu/brick4_generate_tree_from_scene.js +5 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +1 -4
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts +8 -3
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/lpv_visualise_probes.js +19 -14
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/graph_generate_probe_locations.js +9 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts +3 -3
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/placement/software/lpv_generate_probe_locations2.js +12 -5
- package/src/shade/renderer/global_illumination/probe/octahedral/GPUProbeAtlas.js +1 -1
- package/src/shade/renderer/light/GPULightCollection.d.ts +29 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +444 -329
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +7 -1
- package/src/shade/renderer/light/LightCollection.d.ts +29 -1
- package/src/shade/renderer/light/LightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/LightCollection.js +50 -1
- package/src/shade/renderer/light/make_sunlight.js +2 -2
- package/src/shade/renderer/light/model/Light.d.ts +29 -2
- package/src/shade/renderer/light/model/Light.d.ts.map +1 -1
- package/src/shade/renderer/light/model/Light.js +30 -2
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_directional.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_directional.js +8 -5
- package/src/shade/renderer/light/model/io/light_record_point.d.ts +3 -1
- package/src/shade/renderer/light/model/io/light_record_point.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_point.js +5 -2
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts +4 -1
- package/src/shade/renderer/light/model/io/light_record_spot.d.ts.map +1 -1
- package/src/shade/renderer/light/model/io/light_record_spot.js +10 -6
- package/src/shade/renderer/light/place_light.d.ts +16 -0
- package/src/shade/renderer/light/place_light.d.ts.map +1 -0
- package/src/shade/renderer/light/place_light.js +36 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts +44 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.d.ts.map +1 -0
- package/src/shade/renderer/light/shader_refresh_light_poses.js +154 -0
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +12 -14
- package/src/shade/renderer/loader/SceneBundle.d.ts +53 -28
- package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
- package/src/shade/renderer/loader/SceneBundle.js +111 -56
- package/src/shade/renderer/loader/SceneNode.d.ts +81 -0
- package/src/shade/renderer/loader/SceneNode.d.ts.map +1 -0
- package/src/shade/renderer/loader/SceneNode.js +114 -0
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts +3 -2
- package/src/shade/renderer/loader/gltf/load_gltf.d.ts.map +1 -1
- package/src/shade/renderer/loader/gltf/load_gltf.js +110 -142
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts +4 -4
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/UsdExtensionRegistry.js +2 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts +3 -2
- package/src/shade/renderer/loader/usd/load_usd.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/load_usd.js +4 -5
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts +3 -3
- package/src/shade/renderer/loader/usd/usd_build_scene.d.ts.map +1 -1
- package/src/shade/renderer/loader/usd/usd_build_scene.js +47 -55
- package/src/shade/renderer/material/GPUMaterialManager.js +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +5 -4
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +8 -15
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts +15 -13
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.d.ts.map +1 -1
- package/src/shade/renderer/object_property/shader_refresh_all_mesh_bounds.js +40 -21
- package/src/shade/renderer/particles/DESIGN.md +53 -50
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts +31 -17
- package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
- package/src/shade/renderer/particles/GPUParticleSystem.js +54 -91
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts +12 -11
- package/src/shade/renderer/particles/runtime/EmitterRegistry.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/EmitterRegistry.js +12 -11
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts +13 -19
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js +19 -25
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +34 -24
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +53 -40
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +1 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +2 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js +5 -2
- package/src/shade/renderer/rasterize/fast/graph_rasterize_scene_fast.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +1 -1
- package/src/shade/renderer/scene/DynamicMesh.d.ts +13 -4
- package/src/shade/renderer/scene/DynamicMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/DynamicMesh.js +14 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +38 -18
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +112 -60
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +55 -48
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +594 -928
- package/src/shade/renderer/scene/NODE3D_STRUCT.d.ts +5 -5
- package/src/shade/renderer/scene/NODE3D_STRUCT.js +5 -5
- package/src/shade/renderer/scene/Node3D.d.ts +27 -8
- package/src/shade/renderer/scene/Node3D.d.ts.map +1 -1
- package/src/shade/renderer/scene/Node3DDirtyList.d.ts +59 -0
- package/src/shade/renderer/scene/Node3DDirtyList.d.ts.map +1 -0
- package/src/shade/renderer/scene/Scene.d.ts +18 -60
- package/src/shade/renderer/scene/Scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/Scene.js +53 -146
- package/src/shade/renderer/scene/SkinnedMesh.d.ts +10 -93
- package/src/shade/renderer/scene/SkinnedMesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts +24 -3
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.d.ts.map +1 -1
- package/src/shade/renderer/scene/bvh/StaticSceneBVH.js +53 -13
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +5 -6
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +5 -6
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts +10 -2
- package/src/shade/renderer/scene/optimization/scene_optimize.d.ts.map +1 -1
- package/src/shade/renderer/scene/optimization/scene_optimize.js +266 -230
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts +53 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUEntityBoundsReadback.js +144 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts +227 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/GPUSceneRows.js +1136 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts +48 -0
- package/src/shade/renderer/scene/rows/place_primitive.d.ts.map +1 -0
- package/src/shade/renderer/scene/rows/place_primitive.js +98 -0
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts +10 -8
- package/src/shade/renderer/scene/serialization/deserialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/deserialize_scene.js +24 -27
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts +9 -2
- package/src/shade/renderer/scene/serialization/serialize_scene.d.ts.map +1 -1
- package/src/shade/renderer/scene/serialization/serialize_scene.js +25 -4
- package/src/shade/renderer/scene/verify_gpu_tlas_build.js +2 -2
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/DIRECTIONAL_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/POINT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/SPOT_LIGHT_STRUCT.js +5 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +39 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +112 -64
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +7 -0
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1541 -1352
- package/src/shade/renderer/shadow/map/PointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/SpotLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/TetrahedronPointLightShadowmap.js +1 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +29 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +43 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts +13 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js +12 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +49 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +194 -0
- package/src/shade/renderer/shadow/map/csm_debug_draw_preview.js +1 -1
- package/src/shade/renderer/shadow/map/shadowmap_update_score.js +1 -1
- package/src/shade/renderer/shadow/ray/RTXShadows.js +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +3 -1
- package/src/shade/renderer/texture/bindless/GPUBindlessTextureManager.js +8 -8
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +4 -3
- package/src/engine/graphics3/instantiate_scene_bundle.js +0 -164
- package/src/engine/graphics3/shade_node_to_entity_composition.js +0 -88
- package/src/shade/renderer/animation/compute_skin_world_bounds.js +0 -146
- package/src/shade/renderer/animation/compute_skinned_mesh_clip_bounding_sphere.js +0 -531
- package/src/shade/renderer/animation/pose/pose_evaluate_world.js +0 -76
- package/src/shade/renderer/animation/skin_bind_transform.js +0 -33
- package/src/shade/renderer/animation/skin_frame_defect.js +0 -132
- package/src/shade/renderer/animation/skin_joint_matrix.js +0 -46
- package/src/shade/renderer/animation/skin_normalize_mesh_frame.js +0 -216
- package/src/shade/renderer/scene/InstanceBatch.js +0 -235
- package/src/shade/renderer/scene/Mesh.js +0 -168
- package/src/shade/renderer/scene/Node3D.js +0 -263
- package/src/shade/renderer/scene/SceneNodeBinding.js +0 -56
- package/src/shade/renderer/scene/SkinnedMesh.js +0 -170
- package/src/shade/renderer/scene/TransformAuthority.js +0 -33
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/main.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/main.js"],"names":[],"mappings":"AAmGA;;;;;GAKG;AACH,yBAFa,QAAQ,IAAI,CAAC,CAqQzB"}
|
|
@@ -5,6 +5,8 @@ import { OrbitalCameraController } from "../../renderer/camera/OrbitalCameraCont
|
|
|
5
5
|
import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
|
|
6
6
|
import { create_frame_loop } from "../../renderer/create_frame_loop.js";
|
|
7
7
|
import { make_sunlight } from "../../renderer/light/make_sunlight.js";
|
|
8
|
+
import { place_light } from "../../renderer/light/place_light.js";
|
|
9
|
+
import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDataset.js";
|
|
8
10
|
import { load_gltf } from "../../renderer/loader/gltf/load_gltf.js";
|
|
9
11
|
import { Renderer } from "../../renderer/Renderer.js";
|
|
10
12
|
import { Scene } from "../../renderer/scene/Scene.js";
|
|
@@ -12,6 +14,11 @@ import { gpu_texture_compression_support } from "../../renderer/texture/format/g
|
|
|
12
14
|
import { load_default_environment } from "../load_default_environment.js";
|
|
13
15
|
import { make_playground_asset_manager } from "../make_playground_asset_manager.js";
|
|
14
16
|
import { texture_inventory } from "./texture_inventory.js";
|
|
17
|
+
import { AABB3 } from "../../../core/geom/3d/aabb/AABB3.js";
|
|
18
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
19
|
+
import { prefab_compile } from "../../../engine/graphics3/prefab/prefab_compile.js";
|
|
20
|
+
import { prefab_place, prefab_unplace } from "../../../engine/graphics3/prefab/prefab_place.js";
|
|
21
|
+
import { shade_bundle_bounds } from "../../../engine/graphics3/shade_bundle_bounds.js";
|
|
15
22
|
|
|
16
23
|
/**
|
|
17
24
|
* The same scene, once as JPEG and once as KTX2/Basis, with the VRAM each costs.
|
|
@@ -145,8 +152,11 @@ export async function start() {
|
|
|
145
152
|
|
|
146
153
|
const scene = new Scene();
|
|
147
154
|
|
|
155
|
+
// the sun stands at an entity, so the scene names a dataset for it
|
|
156
|
+
scene.dataset = new EntityComponentDataset();
|
|
157
|
+
|
|
148
158
|
// Sponza carries no light of its own, and an unlit scene tells you nothing about a texture.
|
|
149
|
-
scene
|
|
159
|
+
place_light(scene, make_sunlight({ intensity: 7.2 }));
|
|
150
160
|
|
|
151
161
|
// document.body rather than the canvas: the controller starts a keyboard device, and only a
|
|
152
162
|
// focusable element can receive key events — body carries tabindex for exactly that.
|
|
@@ -171,7 +181,8 @@ export async function start() {
|
|
|
171
181
|
*
|
|
172
182
|
* @type {Node3D[]}
|
|
173
183
|
*/
|
|
174
|
-
|
|
184
|
+
/** @type {ReturnType<typeof prefab_place>|null} the model on the screen */
|
|
185
|
+
let loaded = null;
|
|
175
186
|
|
|
176
187
|
/**
|
|
177
188
|
* Load one variant into an emptied scene and record what its textures cost.
|
|
@@ -184,8 +195,10 @@ export async function start() {
|
|
|
184
195
|
async function measure(label, url, texture_support) {
|
|
185
196
|
set_status(`loading ${label}…`);
|
|
186
197
|
|
|
187
|
-
|
|
188
|
-
|
|
198
|
+
if (loaded !== null) {
|
|
199
|
+
prefab_unplace(renderer.scenes.obtain(scene), scene.dataset, loaded);
|
|
200
|
+
loaded = null;
|
|
201
|
+
}
|
|
189
202
|
|
|
190
203
|
const started = performance.now();
|
|
191
204
|
|
|
@@ -208,10 +221,11 @@ export async function start() {
|
|
|
208
221
|
|
|
209
222
|
const load_ms = performance.now() - started;
|
|
210
223
|
|
|
211
|
-
scene.
|
|
212
|
-
|
|
224
|
+
loaded = prefab_place(renderer.scenes.obtain(scene), scene.dataset, prefab_compile(bundle), new Transform64());
|
|
225
|
+
|
|
226
|
+
const bounds = new AABB3();
|
|
213
227
|
|
|
214
|
-
|
|
228
|
+
shade_bundle_bounds(bounds, bundle);
|
|
215
229
|
|
|
216
230
|
camera_frame_sphere(
|
|
217
231
|
controller,
|
|
@@ -221,7 +235,7 @@ export async function start() {
|
|
|
221
235
|
|
|
222
236
|
controller.movement_speed_scale = Math.max(bounds.width, bounds.height, bounds.depth) * 0.1;
|
|
223
237
|
|
|
224
|
-
const inventory = texture_inventory(bundle.
|
|
238
|
+
const inventory = texture_inventory(bundle.nodes);
|
|
225
239
|
|
|
226
240
|
/*
|
|
227
241
|
Upload every texture explicitly rather than letting the first frame do it.
|
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
* silently disagree the moment a mip chain is generated on the device rather than shipped. This says
|
|
12
12
|
* *what* is resident; the manager says what it costs.
|
|
13
13
|
*
|
|
14
|
-
* @param {
|
|
14
|
+
* @param {SceneNode[]} nodes a bundle's nodes
|
|
15
15
|
* @returns {{count: number, formats: Map<string, {count: number, slots: Set<string>}>, textures: ShadeTexture[]}}
|
|
16
16
|
*
|
|
17
17
|
* @author Alex Goldring
|
|
18
18
|
* @copyright Company Named Limited (c) 2026
|
|
19
19
|
*/
|
|
20
|
-
export function texture_inventory(
|
|
20
|
+
export function texture_inventory(nodes: SceneNode[]): {
|
|
21
21
|
count: number;
|
|
22
22
|
formats: Map<string, {
|
|
23
23
|
count: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"texture_inventory.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/texture_inventory.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,yCANW,
|
|
1
|
+
{"version":3,"file":"texture_inventory.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/basis_textures/texture_inventory.js"],"names":[],"mappings":"AAmBA;;;;;;;;;;;;;;;;;;GAkBG;AACH,yCANW,WAAW,GACT;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,IAAI,MAAM,EAAE;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,MAAM,CAAC,CAAA;KAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,cAAc,CAAA;CAAC,CA+DhH"}
|
|
@@ -30,24 +30,23 @@ const SLOTS = [
|
|
|
30
30
|
* silently disagree the moment a mip chain is generated on the device rather than shipped. This says
|
|
31
31
|
* *what* is resident; the manager says what it costs.
|
|
32
32
|
*
|
|
33
|
-
* @param {
|
|
33
|
+
* @param {SceneNode[]} nodes a bundle's nodes
|
|
34
34
|
* @returns {{count: number, formats: Map<string, {count: number, slots: Set<string>}>, textures: ShadeTexture[]}}
|
|
35
35
|
*
|
|
36
36
|
* @author Alex Goldring
|
|
37
37
|
* @copyright Company Named Limited (c) 2026
|
|
38
38
|
*/
|
|
39
|
-
export function texture_inventory(
|
|
39
|
+
export function texture_inventory(nodes) {
|
|
40
40
|
const formats = new Map();
|
|
41
|
-
|
|
42
41
|
const images = new Set();
|
|
43
42
|
const textures = new Set();
|
|
44
43
|
|
|
45
|
-
for (const
|
|
46
|
-
|
|
44
|
+
for (const node of nodes) {
|
|
45
|
+
{
|
|
47
46
|
const material = node.material;
|
|
48
47
|
|
|
49
48
|
if (material === undefined || material === null) {
|
|
50
|
-
|
|
49
|
+
continue;
|
|
51
50
|
}
|
|
52
51
|
|
|
53
52
|
for (const [slot, role] of SLOTS) {
|
|
@@ -91,7 +90,7 @@ export function texture_inventory(roots) {
|
|
|
91
90
|
|
|
92
91
|
formats.set(format, entry);
|
|
93
92
|
}
|
|
94
|
-
}
|
|
93
|
+
}
|
|
95
94
|
}
|
|
96
95
|
|
|
97
96
|
return { count: images.size, formats, textures: [...textures] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/main.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/main.js"],"names":[],"mappings":"AAoEA,uCAmzBC"}
|
|
@@ -3,11 +3,14 @@ import { DEG_TO_RAD } from "../../../core/math/DEG_TO_RAD.js";
|
|
|
3
3
|
import { PerspectiveCamera } from "../../renderer/camera/PerspectiveCamera.js";
|
|
4
4
|
import { create_frame_loop } from "../../renderer/create_frame_loop.js";
|
|
5
5
|
import { make_sunlight } from "../../renderer/light/make_sunlight.js";
|
|
6
|
+
import { place_light } from "../../renderer/light/place_light.js";
|
|
7
|
+
import { EntityComponentDataset } from "../../../engine/ecs/EntityComponentDataset.js";
|
|
6
8
|
import { Renderer } from "../../renderer/Renderer.js";
|
|
7
9
|
import { Scene } from "../../renderer/scene/Scene.js";
|
|
8
10
|
import { load_default_environment } from "../load_default_environment.js";
|
|
9
11
|
import { make_grid_texture } from "./make_grid_texture.js";
|
|
10
12
|
import { GROUND_TRIANGULATION, make_ground } from "./make_ground.js";
|
|
13
|
+
import { remove_primitive } from "../../renderer/scene/rows/place_primitive.js";
|
|
11
14
|
import { FramePhase } from "../../renderer/extension/FramePhase.js";
|
|
12
15
|
import { CaptureSceneColor } from "./capture_scene_color.js";
|
|
13
16
|
import { depth_step_across_seam } from "./depth_step_across_seam.js";
|
|
@@ -111,13 +114,19 @@ export async function start() {
|
|
|
111
114
|
|
|
112
115
|
const scene = new Scene();
|
|
113
116
|
|
|
117
|
+
// the sun stands at an entity, so the scene names a dataset for it
|
|
118
|
+
scene.dataset = new EntityComponentDataset();
|
|
119
|
+
|
|
120
|
+
// the scene's rows are on the renderer's context for it: where the ground goes
|
|
121
|
+
const scene_context = renderer.scenes.obtain(scene);
|
|
122
|
+
|
|
114
123
|
const sun = make_sunlight({
|
|
115
124
|
intensity: 0.9,
|
|
116
125
|
direction: new Vector3(0.17, -1, 0.17),
|
|
117
126
|
temperature: 5500,
|
|
118
127
|
});
|
|
119
128
|
|
|
120
|
-
scene
|
|
129
|
+
place_light(scene, sun);
|
|
121
130
|
|
|
122
131
|
/**
|
|
123
132
|
* Two textures differing only in whether the sampler is granted anisotropy, built up front so
|
|
@@ -132,6 +141,7 @@ export async function start() {
|
|
|
132
141
|
};
|
|
133
142
|
|
|
134
143
|
/** @type {Mesh|undefined} */
|
|
144
|
+
/** @type {{entity: number, geometry: MeshletGeometry}|undefined} */
|
|
135
145
|
let ground;
|
|
136
146
|
|
|
137
147
|
/**
|
|
@@ -149,10 +159,10 @@ export async function start() {
|
|
|
149
159
|
*/
|
|
150
160
|
function rebuild_ground(segments, triangulation, yaw_degrees = 0, anisotropy = true, extent = 425) {
|
|
151
161
|
if (ground !== undefined) {
|
|
152
|
-
|
|
162
|
+
remove_primitive(scene_context, ground.entity);
|
|
153
163
|
}
|
|
154
164
|
|
|
155
|
-
ground = make_ground({
|
|
165
|
+
ground = make_ground(scene_context, {
|
|
156
166
|
albedo: albedos[anisotropy ? 'anisotropic' : 'isotropic'],
|
|
157
167
|
extent,
|
|
158
168
|
segments,
|
|
@@ -160,7 +170,6 @@ export async function start() {
|
|
|
160
170
|
yaw_degrees,
|
|
161
171
|
});
|
|
162
172
|
|
|
163
|
-
scene.add(ground);
|
|
164
173
|
|
|
165
174
|
/*
|
|
166
175
|
Proof the index buffer actually reached the GPU differently, published so a null result on
|
|
@@ -13,6 +13,7 @@ export function uv_scale_for(extent: number): number;
|
|
|
13
13
|
/**
|
|
14
14
|
* The ground plane, and nothing else — the brief's scene reproduces with this alone.
|
|
15
15
|
*
|
|
16
|
+
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the ground goes
|
|
16
17
|
* @param {object} options
|
|
17
18
|
* @param {ShadeTexture} options.albedo
|
|
18
19
|
* @param {number} [options.extent] edge length of the quad in world units. Bigger is worse
|
|
@@ -25,9 +26,10 @@ export function uv_scale_for(extent: number): number;
|
|
|
25
26
|
* @param {number} [options.yaw_degrees] rotation about +Y, applied after the quad is laid flat
|
|
26
27
|
* @param {number} [options.roughness]
|
|
27
28
|
* @param {number} [options.metallic]
|
|
28
|
-
* @returns {
|
|
29
|
+
* @returns {{entity: number, geometry: MeshletGeometry}} the ground's entity, and the meshlets it
|
|
30
|
+
* draws — the index order a triangulation A/B has to be able to prove reached the GPU
|
|
29
31
|
*/
|
|
30
|
-
export function make_ground({ albedo, segments, indices, extent, yaw_degrees, roughness, metallic, }: {
|
|
32
|
+
export function make_ground(scene_context: GPUSceneContext, { albedo, segments, indices, extent, yaw_degrees, roughness, metallic, }: {
|
|
31
33
|
albedo: ShadeTexture;
|
|
32
34
|
extent?: number;
|
|
33
35
|
segments?: number;
|
|
@@ -35,7 +37,13 @@ export function make_ground({ albedo, segments, indices, extent, yaw_degrees, ro
|
|
|
35
37
|
yaw_degrees?: number;
|
|
36
38
|
roughness?: number;
|
|
37
39
|
metallic?: number;
|
|
38
|
-
}):
|
|
40
|
+
}): {
|
|
41
|
+
entity: number;
|
|
42
|
+
geometry: MeshletGeometry;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* @typedef {import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
46
|
+
*/
|
|
39
47
|
/**
|
|
40
48
|
* Edge length of the ground quad, in world units.
|
|
41
49
|
* @type {number}
|
|
@@ -66,5 +74,6 @@ export namespace GROUND_TRIANGULATION {
|
|
|
66
74
|
export let flipped: number[];
|
|
67
75
|
export let rotated: number[];
|
|
68
76
|
}
|
|
69
|
-
|
|
77
|
+
export type GPUSceneContext = import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext;
|
|
78
|
+
import { MeshletGeometry } from "../../renderer/geometry/MeshletGeometry.js";
|
|
70
79
|
//# sourceMappingURL=make_ground.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"make_ground.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/make_ground.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"make_ground.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/ground_seam/make_ground.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;GAUG;AACH,qCAHW,MAAM,GACJ,MAAM,CAIlB;AAyCD;;;;;;;;;;;;;;;;;;GAkBG;AACH,2CAhBW,eAAe;IAEO,MAAM;IACX,MAAM,GAAvB,MAAM;IAKW,QAAQ,GAAzB,MAAM;IACa,OAAO,GAA1B,MAAM,EAAE;IACS,WAAW,GAA5B,MAAM;IACW,SAAS,GAA1B,MAAM;IACW,QAAQ,GAAzB,MAAM;IACJ;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,eAAe,CAAA;CAAC,CA0EvD;AA1JD;;GAEG;AAEH;;;GAGG;AACH,4BAFU,MAAM,CAEiB;;;;;;;;;;;;;;;;;;;mCAmCvB,MAAM,EAAE;;;;;;;8BA1CL,OAAO,yCAAyC,EAAE,eAAe;gCAR9C,4CAA4C"}
|
|
@@ -6,7 +6,12 @@ import { MeshletGeometry } from "../../renderer/geometry/MeshletGeometry.js";
|
|
|
6
6
|
import { make_plane_geometry } from "../../renderer/geometry/primitives/make_plane_geometry.js";
|
|
7
7
|
import { StandardAttributes } from "../../renderer/geometry/StandardAttributes.js";
|
|
8
8
|
import { StandardShadeMaterial } from "../../renderer/material/StandardShadeMaterial.js";
|
|
9
|
-
import {
|
|
9
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
10
|
+
import { place_primitive } from "../../renderer/scene/rows/place_primitive.js";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @typedef {import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
14
|
+
*/
|
|
10
15
|
|
|
11
16
|
/**
|
|
12
17
|
* Edge length of the ground quad, in world units.
|
|
@@ -71,6 +76,7 @@ export const GROUND_TRIANGULATION = {
|
|
|
71
76
|
/**
|
|
72
77
|
* The ground plane, and nothing else — the brief's scene reproduces with this alone.
|
|
73
78
|
*
|
|
79
|
+
* @param {GPUSceneContext} scene_context the scene's context — its rows are where the ground goes
|
|
74
80
|
* @param {object} options
|
|
75
81
|
* @param {ShadeTexture} options.albedo
|
|
76
82
|
* @param {number} [options.extent] edge length of the quad in world units. Bigger is worse
|
|
@@ -83,9 +89,10 @@ export const GROUND_TRIANGULATION = {
|
|
|
83
89
|
* @param {number} [options.yaw_degrees] rotation about +Y, applied after the quad is laid flat
|
|
84
90
|
* @param {number} [options.roughness]
|
|
85
91
|
* @param {number} [options.metallic]
|
|
86
|
-
* @returns {
|
|
92
|
+
* @returns {{entity: number, geometry: MeshletGeometry}} the ground's entity, and the meshlets it
|
|
93
|
+
* draws — the index order a triangulation A/B has to be able to prove reached the GPU
|
|
87
94
|
*/
|
|
88
|
-
export function make_ground({
|
|
95
|
+
export function make_ground(scene_context, {
|
|
89
96
|
albedo,
|
|
90
97
|
segments = 1,
|
|
91
98
|
indices = GROUND_TRIANGULATION.default,
|
|
@@ -115,12 +122,9 @@ export function make_ground({
|
|
|
115
122
|
geometry.index = Attribute.from(new Uint32Array(indices), 1, StandardAttributes.Index);
|
|
116
123
|
}
|
|
117
124
|
|
|
118
|
-
const
|
|
125
|
+
const meshlets = new MeshletGeometry();
|
|
119
126
|
|
|
120
|
-
|
|
121
|
-
mesh.geometry = new MeshletGeometry();
|
|
122
|
-
|
|
123
|
-
meshlet_geometry_build_from_geometry(geometry, mesh.geometry);
|
|
127
|
+
meshlet_geometry_build_from_geometry(geometry, meshlets);
|
|
124
128
|
|
|
125
129
|
const material = new StandardShadeMaterial();
|
|
126
130
|
|
|
@@ -128,7 +132,6 @@ export function make_ground({
|
|
|
128
132
|
material.roughness_factor = roughness;
|
|
129
133
|
material.metallic_factor = metallic;
|
|
130
134
|
|
|
131
|
-
mesh.material = material;
|
|
132
135
|
|
|
133
136
|
/*
|
|
134
137
|
−90° about X lays the plane flat with its normal pointing at +Y.
|
|
@@ -140,9 +143,8 @@ export function make_ground({
|
|
|
140
143
|
stays exactly where it was on screen while the two triangles swap roles, which is the one
|
|
141
144
|
experiment that can tell a property of the *edge* from a property of a *triangle*.
|
|
142
145
|
|
|
143
|
-
`Transform64` keeps its matrix by hand, so the write is only real after `updateMatrix
|
|
144
|
-
|
|
145
|
-
its own is never reached by the scene's hierarchy walk.
|
|
146
|
+
`Transform64` keeps its matrix by hand, so the write is only real after `updateMatrix`; the
|
|
147
|
+
placement copies the transform, and the row's bounds are the GPU's to derive from it.
|
|
146
148
|
*/
|
|
147
149
|
const rotation = Quaternion.fromAxisAngle(Vector3.right, -Math.PI / 2);
|
|
148
150
|
|
|
@@ -153,9 +155,12 @@ export function make_ground({
|
|
|
153
155
|
rotation.normalize();
|
|
154
156
|
}
|
|
155
157
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
158
|
+
const transform = new Transform64();
|
|
159
|
+
|
|
160
|
+
transform.setRotation(rotation.x, rotation.y, rotation.z, rotation.w);
|
|
161
|
+
transform.updateMatrix();
|
|
162
|
+
|
|
163
|
+
const entity = place_primitive(scene_context, meshlets, material, transform, { name: 'ground' });
|
|
159
164
|
|
|
160
|
-
return
|
|
165
|
+
return { entity, geometry: meshlets };
|
|
161
166
|
}
|
|
@@ -166,9 +166,9 @@ export function install_effect_editor({ dataset, world, sprites, host, selector,
|
|
|
166
166
|
const entity = entities[name];
|
|
167
167
|
|
|
168
168
|
/*
|
|
169
|
-
Removed and added rather than assigned: see the note at the top. The system's `unlink`
|
|
170
|
-
the emitter
|
|
171
|
-
|
|
169
|
+
Removed and added rather than assigned: see the note at the top. The system's `unlink`
|
|
170
|
+
retires the emitter, which frees its table row and kills the particles that were running
|
|
171
|
+
the old program; `link` builds a new one on the next comparison.
|
|
172
172
|
*/
|
|
173
173
|
dataset.removeComponentFromEntity(entity, ParticleEffect);
|
|
174
174
|
dataset.addComponentToEntity(entity, component);
|
|
@@ -85,9 +85,10 @@ async function main() {
|
|
|
85
85
|
/** @type {import("../../renderer/particles/GPUParticleSystem.js").GPUParticleSystem|null} */
|
|
86
86
|
let system = null;
|
|
87
87
|
|
|
88
|
-
const
|
|
88
|
+
const world = await build_particle_scene();
|
|
89
|
+
const { scene, emitters } = world;
|
|
89
90
|
|
|
90
|
-
Object.assign(globalThis, { camera, controller, scene, emitters });
|
|
91
|
+
Object.assign(globalThis, { camera, controller, scene, emitters, world });
|
|
91
92
|
|
|
92
93
|
/**
|
|
93
94
|
* Where the camera is and what it orbits, as plain numbers: enough to put another instance of
|
|
@@ -143,13 +144,13 @@ async function main() {
|
|
|
143
144
|
|
|
144
145
|
element("burst").addEventListener("click", () => {
|
|
145
146
|
/*
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
The emitter has a row from the moment configure_particles registered it, and none before
|
|
148
|
+
— `spawn` refuses an emitter it does not hold. And a burst queued while the particles are
|
|
149
|
+
switched off is never drained: the ring only empties inside a simulated frame, so the
|
|
150
|
+
clicks would pile up and arrive together, seconds late, the moment they are switched back
|
|
151
|
+
on. Both are the same answer: the button does nothing.
|
|
151
152
|
*/
|
|
152
|
-
if (system === null || !renderer.feature_particles_enabled || emitters.sparks
|
|
153
|
+
if (system === null || !renderer.feature_particles_enabled || system.registry.context(emitters.sparks) === undefined) {
|
|
153
154
|
return;
|
|
154
155
|
}
|
|
155
156
|
|
|
@@ -190,7 +191,7 @@ async function main() {
|
|
|
190
191
|
renderer.feature_automatic_exposure_enabled = false;
|
|
191
192
|
renderer.exposure_compensation = 1.2;
|
|
192
193
|
|
|
193
|
-
system = configure_particles(renderer,
|
|
194
|
+
system = configure_particles(renderer, world);
|
|
194
195
|
globalThis.particles = system;
|
|
195
196
|
|
|
196
197
|
apply_settings();
|
|
@@ -220,7 +221,7 @@ async function main() {
|
|
|
220
221
|
renderer.resize(width, height);
|
|
221
222
|
}
|
|
222
223
|
|
|
223
|
-
animate_particle_scene(
|
|
224
|
+
animate_particle_scene(world, system, time);
|
|
224
225
|
controller.update();
|
|
225
226
|
|
|
226
227
|
renderer.render(camera, scene, dt);
|
|
@@ -43,22 +43,27 @@ export function smoke_effect(): {
|
|
|
43
43
|
/**
|
|
44
44
|
* Put a fire + smoke plume in a scene, optionally riding a bone.
|
|
45
45
|
*
|
|
46
|
-
* An emitter
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
* they spawn
|
|
46
|
+
* An emitter runs at an entity's row, so this is entity work and nothing else: spawn an entity per
|
|
47
|
+
* emitter in the scene's dataset — attached to the bone when there is one — give each a row in the
|
|
48
|
+
* scene context, and register the emitter at it. The GPU composes the bone's motion into every
|
|
49
|
+
* particle they spawn; there is no per-frame call to make.
|
|
50
50
|
*
|
|
51
|
-
* @param {
|
|
51
|
+
* @param {GPUParticleSystem} particles the scene's particle system; the entities go in its scene
|
|
52
|
+
* context's dataset
|
|
52
53
|
* @param {object} [options]
|
|
53
|
-
* @param {
|
|
54
|
-
*
|
|
55
|
-
* @returns {{fire: ParticleEmitter, smoke: ParticleEmitter}}
|
|
54
|
+
* @param {number} [options.bone] an entity already holding a row in the scene context, for both
|
|
55
|
+
* emitters to hang off
|
|
56
|
+
* @returns {{fire: ParticleEmitter, smoke: ParticleEmitter, entities: {fire: number, smoke: number}}}
|
|
56
57
|
*/
|
|
57
|
-
export function register_campfire(
|
|
58
|
-
bone?:
|
|
58
|
+
export function register_campfire(particles: GPUParticleSystem, { bone }?: {
|
|
59
|
+
bone?: number;
|
|
59
60
|
}): {
|
|
60
61
|
fire: ParticleEmitter;
|
|
61
62
|
smoke: ParticleEmitter;
|
|
63
|
+
entities: {
|
|
64
|
+
fire: number;
|
|
65
|
+
smoke: number;
|
|
66
|
+
};
|
|
62
67
|
};
|
|
63
68
|
import { ParticleLayout } from "../../renderer/particles/layout/ParticleLayout.js";
|
|
64
69
|
import { ParticleEmitter } from "../../renderer/particles/runtime/ParticleEmitter.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"particle_prototype.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_system/particle_prototype.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"particle_prototype.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/particle_system/particle_prototype.js"],"names":[],"mappings":"AAkBA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;GASG;AACH;IALsG,UAAU,GAArG,OAAO,iDAAiD,EAAE,sBAAsB;IACW,WAAW,GAAtG,OAAO,iDAAiD,EAAE,sBAAsB;IAC/D,eAAe,GAAhC,MAAM;IACJ;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CA+GrE;AAED;;;;GAIG;AACH,gCAFa;IAAC,MAAM,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAYrE;AAED;;;;;;;;;;;;;;GAcG;AACH;IAJ4B,IAAI,GAArB,MAAM;IAEJ;IAAC,IAAI,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,eAAe,CAAC;IAAC,QAAQ,EAAE;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAC,CAAA;CAAC,CAkBpG;+BAjM8B,mDAAmD;gCAElD,qDAAqD"}
|
|
@@ -9,6 +9,12 @@ import { VM_BUILTIN } from "../../renderer/particles/isa/ParticleVMISA.js";
|
|
|
9
9
|
import { ParticleLayout } from "../../renderer/particles/layout/ParticleLayout.js";
|
|
10
10
|
import { create_particle_effect } from "../../renderer/particles/runtime/create_particle_effect.js";
|
|
11
11
|
import { ParticleEmitter } from "../../renderer/particles/runtime/ParticleEmitter.js";
|
|
12
|
+
import { row_of_entity } from "../../renderer/scene/rows/GPUSceneRows.js";
|
|
13
|
+
import { GPUStateAuthorityFlags } from "../../../engine/ecs/gpu/GPUStateAuthorityFlags.js";
|
|
14
|
+
import { gpu_authority_declare } from "../../../engine/ecs/gpu/gpu_authority_declare.js";
|
|
15
|
+
import { gpu_authority_grant } from "../../../engine/ecs/gpu/gpu_authority_grant.js";
|
|
16
|
+
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
17
|
+
import { TransformAttachment } from "../../../engine/ecs/transform-attachment/TransformAttachment.js";
|
|
12
18
|
|
|
13
19
|
/**
|
|
14
20
|
* Worked examples of authoring particle effects with the node graph + placing them in a scene for a
|
|
@@ -165,28 +171,63 @@ export function smoke_effect() {
|
|
|
165
171
|
/**
|
|
166
172
|
* Put a fire + smoke plume in a scene, optionally riding a bone.
|
|
167
173
|
*
|
|
168
|
-
* An emitter
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
* they spawn
|
|
174
|
+
* An emitter runs at an entity's row, so this is entity work and nothing else: spawn an entity per
|
|
175
|
+
* emitter in the scene's dataset — attached to the bone when there is one — give each a row in the
|
|
176
|
+
* scene context, and register the emitter at it. The GPU composes the bone's motion into every
|
|
177
|
+
* particle they spawn; there is no per-frame call to make.
|
|
172
178
|
*
|
|
173
|
-
* @param {
|
|
179
|
+
* @param {GPUParticleSystem} particles the scene's particle system; the entities go in its scene
|
|
180
|
+
* context's dataset
|
|
174
181
|
* @param {object} [options]
|
|
175
|
-
* @param {
|
|
176
|
-
*
|
|
177
|
-
* @returns {{fire: ParticleEmitter, smoke: ParticleEmitter}}
|
|
182
|
+
* @param {number} [options.bone] an entity already holding a row in the scene context, for both
|
|
183
|
+
* emitters to hang off
|
|
184
|
+
* @returns {{fire: ParticleEmitter, smoke: ParticleEmitter, entities: {fire: number, smoke: number}}}
|
|
178
185
|
*/
|
|
179
|
-
export function register_campfire(
|
|
186
|
+
export function register_campfire(particles, { bone = -1 } = {}) {
|
|
187
|
+
const scene_context = particles.scene_context;
|
|
188
|
+
const dataset = scene_context.scene.dataset;
|
|
189
|
+
|
|
180
190
|
const fire = ParticleEmitter.from({ ...fire_effect().emitter, name: "fire" });
|
|
181
191
|
const smoke = ParticleEmitter.from({ ...smoke_effect().emitter, name: "smoke" });
|
|
182
192
|
|
|
183
|
-
|
|
184
|
-
bone
|
|
185
|
-
bone
|
|
186
|
-
|
|
193
|
+
const entities = {
|
|
194
|
+
fire: place(dataset, scene_context, bone),
|
|
195
|
+
smoke: place(dataset, scene_context, bone),
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
particles.add_emitter(fire, row_of_entity(entities.fire));
|
|
199
|
+
particles.add_emitter(smoke, row_of_entity(entities.smoke));
|
|
200
|
+
|
|
201
|
+
return { fire, smoke, entities };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* An entity with a row: at the origin, or riding `bone` with no offset.
|
|
206
|
+
*
|
|
207
|
+
* @param {import("../../../engine/ecs/EntityComponentDataset.js").EntityComponentDataset} dataset
|
|
208
|
+
* @param {import("../../renderer/scene/GPUSceneContext.js").GPUSceneContext} scene_context
|
|
209
|
+
* @param {number} bone an entity, or -1
|
|
210
|
+
* @returns {number}
|
|
211
|
+
*/
|
|
212
|
+
function place(dataset, scene_context, bone) {
|
|
213
|
+
const entity = dataset.createEntity();
|
|
214
|
+
|
|
215
|
+
if (bone !== -1) {
|
|
216
|
+
const attachment = new TransformAttachment();
|
|
217
|
+
|
|
218
|
+
attachment.parent = bone;
|
|
219
|
+
|
|
220
|
+
dataset.addComponentToEntity(entity, attachment);
|
|
221
|
+
|
|
222
|
+
// the row's world is the GPU's to compose from the bone's; nothing on this side reads it,
|
|
223
|
+
// and nothing on this side composes it, so the authority says so
|
|
224
|
+
gpu_authority_declare(dataset, entity);
|
|
225
|
+
gpu_authority_grant(dataset, entity, GPUStateAuthorityFlags.Transform64);
|
|
187
226
|
}
|
|
188
227
|
|
|
189
|
-
|
|
228
|
+
dataset.addComponentToEntity(entity, new Transform64());
|
|
229
|
+
|
|
230
|
+
scene_context.rows.acquire(entity);
|
|
190
231
|
|
|
191
|
-
return
|
|
232
|
+
return entity;
|
|
192
233
|
}
|