@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
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* Everything the GPU side knows about one {@link ./ParticleEmitter.js} that the emitter itself has
|
|
3
3
|
* no business knowing.
|
|
4
4
|
*
|
|
5
|
-
* An emitter is a
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
5
|
+
* An emitter is a description of an effect: what to run, how fast, how big, which attribute is
|
|
6
|
+
* the colour. None of that depends on a device. The rest — which row of the emitter table it was
|
|
7
|
+
* given, which tenancy of that row it is, where its program was placed in the program heap, which
|
|
8
|
+
* `transforms` row it was registered at, where its texture was packed into the atlas —
|
|
9
9
|
* is the particle system's bookkeeping, true only while the emitter is registered and only for the
|
|
10
10
|
* registry that registered it. Kept on the emitter it would travel with a saved effect, mean
|
|
11
11
|
* nothing when loaded, and be there for an author to set to a number the table has never heard of.
|
|
@@ -25,8 +25,7 @@ export class GPUParticleEmitterContext {
|
|
|
25
25
|
* registered — it is what every live particle's record header stores, so it cannot be
|
|
26
26
|
* renumbered while particles are in flight.
|
|
27
27
|
*
|
|
28
|
-
* Not to be confused with {@link
|
|
29
|
-
* identity and the key the scene context maps to a `transforms` row.
|
|
28
|
+
* Not to be confused with {@link transform_row}, which is where the emitter is.
|
|
30
29
|
*
|
|
31
30
|
* @type {number}
|
|
32
31
|
*/
|
|
@@ -40,9 +39,9 @@ export class GPUParticleEmitterContext {
|
|
|
40
39
|
*/
|
|
41
40
|
generation: number;
|
|
42
41
|
/**
|
|
43
|
-
* Row of the scene database's `transforms` table the emitter
|
|
44
|
-
*
|
|
45
|
-
*
|
|
42
|
+
* Row of the scene database's `transforms` table the emitter is placed at — its entity's,
|
|
43
|
+
* one on — what the record's `node` field carries. `0` (the scene root) until bound, so an
|
|
44
|
+
* emitter registered before it is placed still reads a valid row.
|
|
46
45
|
*
|
|
47
46
|
* @type {number}
|
|
48
47
|
*/
|
|
@@ -73,20 +72,15 @@ export class GPUParticleEmitterContext {
|
|
|
73
72
|
*/
|
|
74
73
|
atlas_region: Float32Array;
|
|
75
74
|
/**
|
|
76
|
-
* The emitter's
|
|
75
|
+
* The emitter's version as of the last time its row was
|
|
77
76
|
* staged, or `-1` for a row that must be restaged whatever the emitter says.
|
|
78
77
|
*
|
|
79
78
|
* This is the whole of the dirty tracking: {@link ./EmitterRegistry.js#flush} restages an
|
|
80
|
-
* emitter whose version has moved since.
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* way they mark any node change, with `needsUpdate = true`.
|
|
79
|
+
* emitter whose version has moved since. The emitter counts its own changes, and a second
|
|
80
|
+
* flag saying the same thing would be one more thing to forget to set — so it carries none, and
|
|
81
|
+
* an author who changes a field marks it with `needsUpdate = true`.
|
|
84
82
|
*
|
|
85
|
-
*
|
|
86
|
-
* restaged for a change it does not hold. That costs one row: an emitter that moved is an
|
|
87
|
-
* emitter whose `transforms` row the scene context is uploading this frame anyway.
|
|
88
|
-
*
|
|
89
|
-
* A version of `-1` is unreachable for a node — the counter starts at 0 and only rises — so it
|
|
83
|
+
* A version of `-1` is unreachable for an emitter — the counter starts at 0 and only rises — so it
|
|
90
84
|
* is safe as the "not staged" sentinel, and it is what the fields above are set back to when
|
|
91
85
|
* one of *them* changes, since those move without the emitter moving.
|
|
92
86
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUParticleEmitterContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAEI
|
|
1
|
+
{"version":3,"file":"GPUParticleEmitterContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/GPUParticleEmitterContext.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH;IAEI;;;;;;;;OAQG;IACH,KAFU,MAAM,CAEP;IAET;;;;;;OAMG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;OAMG;IACH,eAFU,MAAM,CAEE;IAElB;;;;;;;OAOG;IACH,WAFU,OAAO,uBAAuB,EAAE,gBAAgB,GAAC,IAAI,CAE9C;IAEjB;;OAEG;IACH,SAFU,OAAO,2BAA2B,EAAE,eAAe,GAAC,IAAI,CAEnD;IAEf;;;;;;;;;;OAUG;IACH,cAFU,YAAY,CAEwB;IAE9C;;;;;;;;;;;;;;OAcG;IACH,gBAFU,MAAM,CAEI;IAEpB;;;OAGG;IACH,kBAHW,OAAO,sBAAsB,EAAE,eAAe,GAC5C,OAAO,CAInB;IAED;;;OAGG;IACH,mBAEC;IAED;;;;OAIG;IACH,gBAFW,OAAO,sBAAsB,EAAE,eAAe,QAMxD;CACJ"}
|
|
@@ -4,10 +4,10 @@ import { assert } from "../../../../core/assert.js";
|
|
|
4
4
|
* Everything the GPU side knows about one {@link ./ParticleEmitter.js} that the emitter itself has
|
|
5
5
|
* no business knowing.
|
|
6
6
|
*
|
|
7
|
-
* An emitter is a
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
7
|
+
* An emitter is a description of an effect: what to run, how fast, how big, which attribute is
|
|
8
|
+
* the colour. None of that depends on a device. The rest — which row of the emitter table it was
|
|
9
|
+
* given, which tenancy of that row it is, where its program was placed in the program heap, which
|
|
10
|
+
* `transforms` row it was registered at, where its texture was packed into the atlas —
|
|
11
11
|
* is the particle system's bookkeeping, true only while the emitter is registered and only for the
|
|
12
12
|
* registry that registered it. Kept on the emitter it would travel with a saved effect, mean
|
|
13
13
|
* nothing when loaded, and be there for an author to set to a number the table has never heard of.
|
|
@@ -28,8 +28,7 @@ export class GPUParticleEmitterContext {
|
|
|
28
28
|
* registered — it is what every live particle's record header stores, so it cannot be
|
|
29
29
|
* renumbered while particles are in flight.
|
|
30
30
|
*
|
|
31
|
-
* Not to be confused with {@link
|
|
32
|
-
* identity and the key the scene context maps to a `transforms` row.
|
|
31
|
+
* Not to be confused with {@link transform_row}, which is where the emitter is.
|
|
33
32
|
*
|
|
34
33
|
* @type {number}
|
|
35
34
|
*/
|
|
@@ -45,9 +44,9 @@ export class GPUParticleEmitterContext {
|
|
|
45
44
|
generation = 0;
|
|
46
45
|
|
|
47
46
|
/**
|
|
48
|
-
* Row of the scene database's `transforms` table the emitter
|
|
49
|
-
*
|
|
50
|
-
*
|
|
47
|
+
* Row of the scene database's `transforms` table the emitter is placed at — its entity's,
|
|
48
|
+
* one on — what the record's `node` field carries. `0` (the scene root) until bound, so an
|
|
49
|
+
* emitter registered before it is placed still reads a valid row.
|
|
51
50
|
*
|
|
52
51
|
* @type {number}
|
|
53
52
|
*/
|
|
@@ -61,12 +60,12 @@ export class GPUParticleEmitterContext {
|
|
|
61
60
|
*
|
|
62
61
|
* @type {import("./ProgramPlacement.js").ProgramPlacement|null}
|
|
63
62
|
*/
|
|
64
|
-
placement = null;
|
|
65
|
-
|
|
66
|
-
/** Author's immutable program reference, distinct from the heap's owned copy.
|
|
67
|
-
* @type {import("../isa/ParticleProgram.js").ParticleProgram|null}
|
|
68
|
-
*/
|
|
69
|
-
program = null;
|
|
63
|
+
placement = null;
|
|
64
|
+
|
|
65
|
+
/** Author's immutable program reference, distinct from the heap's owned copy.
|
|
66
|
+
* @type {import("../isa/ParticleProgram.js").ParticleProgram|null}
|
|
67
|
+
*/
|
|
68
|
+
program = null;
|
|
70
69
|
|
|
71
70
|
/**
|
|
72
71
|
* Where {@link ./ParticleEmitter.js#texture} landed in the particle system's atlas: uv offset
|
|
@@ -82,20 +81,15 @@ export class GPUParticleEmitterContext {
|
|
|
82
81
|
atlas_region = new Float32Array([0, 0, 1, 1]);
|
|
83
82
|
|
|
84
83
|
/**
|
|
85
|
-
* The emitter's
|
|
84
|
+
* The emitter's version as of the last time its row was
|
|
86
85
|
* staged, or `-1` for a row that must be restaged whatever the emitter says.
|
|
87
86
|
*
|
|
88
87
|
* This is the whole of the dirty tracking: {@link ./EmitterRegistry.js#flush} restages an
|
|
89
|
-
* emitter whose version has moved since.
|
|
90
|
-
*
|
|
91
|
-
*
|
|
92
|
-
* way they mark any node change, with `needsUpdate = true`.
|
|
93
|
-
*
|
|
94
|
-
* The version is the node's, so it also moves when the node merely moves, and the row is
|
|
95
|
-
* restaged for a change it does not hold. That costs one row: an emitter that moved is an
|
|
96
|
-
* emitter whose `transforms` row the scene context is uploading this frame anyway.
|
|
88
|
+
* emitter whose version has moved since. The emitter counts its own changes, and a second
|
|
89
|
+
* flag saying the same thing would be one more thing to forget to set — so it carries none, and
|
|
90
|
+
* an author who changes a field marks it with `needsUpdate = true`.
|
|
97
91
|
*
|
|
98
|
-
* A version of `-1` is unreachable for
|
|
92
|
+
* A version of `-1` is unreachable for an emitter — the counter starts at 0 and only rises — so it
|
|
99
93
|
* is safe as the "not staged" sentinel, and it is what the fields above are set back to when
|
|
100
94
|
* one of *them* changes, since those move without the emitter moving.
|
|
101
95
|
*
|
|
@@ -22,20 +22,20 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS: {
|
|
|
22
22
|
[x: string]: number;
|
|
23
23
|
};
|
|
24
24
|
/**
|
|
25
|
-
* One particle emitter: a
|
|
25
|
+
* One particle emitter: a compiled effect, run at a place in the scene.
|
|
26
26
|
*
|
|
27
27
|
* **In a game, this is built for you.** An entity carrying
|
|
28
28
|
* {@link ../../../../engine/graphics/ecs/particles/ParticleEffect.js ParticleEffect} and a
|
|
29
29
|
* `Transform64` gets one of these from `engine/graphics3/GPUParticleEmitterSystem.js`, which owns it
|
|
30
30
|
* and keeps every field below in step with the component. Build one by hand for the cases with no
|
|
31
31
|
* ECS behind them — a playground, a tool, a spec — or reach for the one the system built through its
|
|
32
|
-
* `
|
|
32
|
+
* `emitter_of(entity)` when an entity reference cannot say what you mean.
|
|
33
33
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* pass composes
|
|
37
|
-
*
|
|
38
|
-
*
|
|
34
|
+
* Where it is comes from the `transforms` row it is registered at
|
|
35
|
+
* ({@link ../GPUParticleSystem.js#add_emitter}), which is an entity's row, one on. The hierarchy
|
|
36
|
+
* pass composes that row's world every frame — register an emitter at a joint's row and it moves
|
|
37
|
+
* with the joint, animation included, with nothing copied through the CPU. Unregister it and its
|
|
38
|
+
* row in the emitter table is retired, and its particles with it within a frame, because they
|
|
39
39
|
* carry that row's generation. There is no transform of its own to keep in step with anything.
|
|
40
40
|
*
|
|
41
41
|
* The rest is a description of an effect and nothing else: the attribute {@link layout} and the
|
|
@@ -53,7 +53,7 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS: {
|
|
|
53
53
|
* emitter opts into culling at all: `EMITTER_FLAG.CULL` in {@link flags}.
|
|
54
54
|
*
|
|
55
55
|
* **Nothing here is the GPU's.** Which table row the emitter was given, which tenancy of it, where
|
|
56
|
-
* its program was placed in the program heap, which `transforms` row
|
|
56
|
+
* its program was placed in the program heap, which `transforms` row it was registered at, where
|
|
57
57
|
* its texture was packed into the atlas — all of that is
|
|
58
58
|
* {@link ./GPUParticleEmitterContext.js GPUParticleEmitterContext}, held by the
|
|
59
59
|
* {@link ./EmitterRegistry.js} that registered the emitter and reachable through
|
|
@@ -62,12 +62,11 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS: {
|
|
|
62
62
|
* accumulator, age, sleep are {@link ../data/PARTICLE_EMITTER_STATE.js}, and they stay on the GPU.
|
|
63
63
|
*
|
|
64
64
|
* Fields are plain data with no setters. After changing any of them, set `needsUpdate = true` — the
|
|
65
|
-
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* field and ten cost the same upload.
|
|
65
|
+
* emitter's change counter — and {@link ./EmitterRegistry.js#flush} restages the row on its next
|
|
66
|
+
* flush. One counter rather than a setter per field because a row is restaged whole either way:
|
|
67
|
+
* one changed field and ten cost the same upload.
|
|
69
68
|
*/
|
|
70
|
-
export class ParticleEmitter
|
|
69
|
+
export class ParticleEmitter {
|
|
71
70
|
/**
|
|
72
71
|
* Build an emitter from a plain description. Every parameter is optional except the compiled
|
|
73
72
|
* effect — an emitter with no program has nothing to run.
|
|
@@ -106,6 +105,22 @@ export class ParticleEmitter extends Node3D {
|
|
|
106
105
|
flipbook?: ArrayLike<number>;
|
|
107
106
|
name?: string;
|
|
108
107
|
}): ParticleEmitter;
|
|
108
|
+
/**
|
|
109
|
+
* For a debugger, and for nothing else.
|
|
110
|
+
*
|
|
111
|
+
* @type {string}
|
|
112
|
+
*/
|
|
113
|
+
name: string;
|
|
114
|
+
/**
|
|
115
|
+
* @returns {number}
|
|
116
|
+
*/
|
|
117
|
+
get version(): number;
|
|
118
|
+
/**
|
|
119
|
+
* Say that a field changed. Reading it back answers nothing: the counter is the record.
|
|
120
|
+
*
|
|
121
|
+
* @param {boolean} value
|
|
122
|
+
*/
|
|
123
|
+
set needsUpdate(value: boolean);
|
|
109
124
|
/**
|
|
110
125
|
* The per-particle attribute schema: which named attributes a particle of this emitter has, how
|
|
111
126
|
* wide each is, and what word of the record it sits at.
|
|
@@ -215,10 +230,8 @@ export class ParticleEmitter extends Node3D {
|
|
|
215
230
|
* draws with, and how it is bound to the renderer. Two emitters that compare equal describe one
|
|
216
231
|
* effect in one place, and one row would serve both.
|
|
217
232
|
*
|
|
218
|
-
*
|
|
219
|
-
*
|
|
220
|
-
* be compared. {@link transform_global} is left out too, being derived from
|
|
221
|
-
* {@link transform_local} and the parent chain.
|
|
233
|
+
* Where it is registered is not part of it — the row says where an emitter is, not what it is
|
|
234
|
+
* — and neither is anything the GPU assigned it, which is not here to be compared.
|
|
222
235
|
*
|
|
223
236
|
* @param {ParticleEmitter} other
|
|
224
237
|
* @returns {boolean}
|
|
@@ -233,23 +246,20 @@ export class ParticleEmitter extends Node3D {
|
|
|
233
246
|
*/
|
|
234
247
|
hash(): number;
|
|
235
248
|
/**
|
|
236
|
-
* Make this emitter a copy of `other`: same effect, same settings
|
|
249
|
+
* Make this emitter a copy of `other`: same effect, same settings.
|
|
237
250
|
*
|
|
238
251
|
* The layout and the compiled program are shared rather than duplicated — both are immutable
|
|
239
252
|
* once compiled, and sharing them is what puts two emitters of one effect on one program id in
|
|
240
253
|
* the program heap, hence in one simulation bucket.
|
|
241
254
|
*
|
|
242
|
-
* What is not copied is
|
|
243
|
-
* parent, children), and anything a registry gave the original: a copy is a second emitter, not
|
|
255
|
+
* What is not copied is anything a registry gave the original: a copy is a second emitter, not
|
|
244
256
|
* a second reference to the first one's table row.
|
|
245
257
|
*
|
|
246
258
|
* @param {ParticleEmitter} other
|
|
247
259
|
*/
|
|
248
260
|
copy(other: ParticleEmitter): void;
|
|
249
261
|
/**
|
|
250
|
-
* A second emitter equal to this one, and registered with nothing.
|
|
251
|
-
* way {@link Node3D#clone} clones one — overridden only because the base builds a plain
|
|
252
|
-
* `Node3D`, which would keep the transform and drop the effect.
|
|
262
|
+
* A second emitter equal to this one, and registered with nothing.
|
|
253
263
|
*
|
|
254
264
|
* @returns {ParticleEmitter}
|
|
255
265
|
*/
|
|
@@ -259,6 +269,6 @@ export class ParticleEmitter extends Node3D {
|
|
|
259
269
|
* @type {boolean}
|
|
260
270
|
*/
|
|
261
271
|
readonly isParticleEmitter: boolean;
|
|
272
|
+
#private;
|
|
262
273
|
}
|
|
263
|
-
import { Node3D } from "../../scene/Node3D.js";
|
|
264
274
|
//# sourceMappingURL=ParticleEmitter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticleEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleEmitter.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticleEmitter.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/particles/runtime/ParticleEmitter.js"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,sCAFU,MAAM,EAAE,CAIf;AAEH;;;;;;;;;;;;GAYG;AACH;QAFiB,MAAM,GAAE,MAAM;EAS5B;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH;IA0RI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH;QAfwE,MAAM,EAAnE,OAAO,6BAA6B,EAAE,cAAc;QAEQ,OAAO,EAAnE,OAAO,2BAA2B,EAAE,eAAe;QAExB,QAAQ,GAAnC,UAAU,MAAM,CAAC;QACI,OAAO,GAA5B,MAAM,GAAC,IAAI;QACK,IAAI,GAApB,MAAM;QACU,UAAU,GAA1B,MAAM;QACU,OAAO,GAAvB,MAAM;QACU,KAAK,GAArB,MAAM;QACyB,MAAM;gBAA9B,MAAM,GAAC,MAAM;;QACO,QAAQ,GAAnC,UAAU,MAAM,CAAC;QACD,IAAI,GAApB,MAAM;QACJ,eAAe,CA+C3B;IA7VD;;;;OAIG;IACH,MAFU,MAAM,CAEN;IAUV;;OAEG;IACH,sBAEC;IAED;;;;OAIG;IACH,gCAIC;IAED;;;;;OAKG;IACH,QAFU,OAAO,6BAA6B,EAAE,cAAc,CAEvD;IAEP;;;;;OAKG;IACH,SAFU,OAAO,2BAA2B,EAAE,eAAe,CAErD;IAER;;;;;;;;;;;OAWG;IACH,SAFU,MAAM,GAAC,IAAI,CAEN;IAEf;;;;;;;;OAQG;IACH,MAFU,MAAM,CAEP;IAET;;;;OAIG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;;;;;;;;;;;;;;OAmBG;IACH,SAFU,MAAM,CAEJ;IAEZ;;;OAGG;IACH,OAFU,MAAM,CAEN;IAEV;;;;OAIG;IACH,UAFU,YAAY,CAEc;IAEpC,+FAA+F;IAC/F,iBADW,MAAM,CAC0B;IAC3C,gDAAgD;IAChD,aADW,MAAM,CACsB;IACvC,uDAAuD;IACvD,cADW,MAAM,CACuB;IACxC,+DAA+D;IAC/D,iBADW,MAAM,CAC0B;IAC3C,gEAAgE;IAChE,cADW,MAAM,CACuB;IACxC,sFAAsF;IACtF,iBADW,MAAM,CAC0B;IAE3C,mBAEC;IAED;;;;;;;;;;;;OAYG;IACH;YAHkB,MAAM,GAAC,MAAM;aA2B9B;IAED;;;;;;;;;;OAUG;IACH,cAHW,eAAe,GACb,OAAO,CAsBnB;IAED;;;;;;OAMG;IACH,QAFa,MAAM,CAsBlB;IAED;;;;;;;;;;;OAWG;IACH,YAFW,eAAe,QAsBzB;IAED;;;;OAIG;IACH,SAFa,eAAe,CAQ3B;IAyEL;;;OAGG;IACH,4BAFU,OAAO,CAE0B;;CAN1C"}
|
|
@@ -5,7 +5,6 @@ import { hash_mix2 } from "../../../../core/math/hash/hash_mix2.js";
|
|
|
5
5
|
import { hash_mix3 } from "../../../../core/math/hash/hash_mix3.js";
|
|
6
6
|
import { computeHashFloat } from "../../../../core/primitives/numbers/computeHashFloat.js";
|
|
7
7
|
import { computeStringHash } from "../../../../core/primitives/strings/computeStringHash.js";
|
|
8
|
-
import { Node3D } from "../../scene/Node3D.js";
|
|
9
8
|
import { EMITTER_ATTRIBUTE_ABSENT, make_emitter_flags } from "../data/PARTICLE_EMITTER_STRUCT.js";
|
|
10
9
|
|
|
11
10
|
/**
|
|
@@ -41,20 +40,20 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS = Object.freeze({
|
|
|
41
40
|
});
|
|
42
41
|
|
|
43
42
|
/**
|
|
44
|
-
* One particle emitter: a
|
|
43
|
+
* One particle emitter: a compiled effect, run at a place in the scene.
|
|
45
44
|
*
|
|
46
45
|
* **In a game, this is built for you.** An entity carrying
|
|
47
46
|
* {@link ../../../../engine/graphics/ecs/particles/ParticleEffect.js ParticleEffect} and a
|
|
48
47
|
* `Transform64` gets one of these from `engine/graphics3/GPUParticleEmitterSystem.js`, which owns it
|
|
49
48
|
* and keeps every field below in step with the component. Build one by hand for the cases with no
|
|
50
49
|
* ECS behind them — a playground, a tool, a spec — or reach for the one the system built through its
|
|
51
|
-
* `
|
|
50
|
+
* `emitter_of(entity)` when an entity reference cannot say what you mean.
|
|
52
51
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
* pass composes
|
|
56
|
-
*
|
|
57
|
-
*
|
|
52
|
+
* Where it is comes from the `transforms` row it is registered at
|
|
53
|
+
* ({@link ../GPUParticleSystem.js#add_emitter}), which is an entity's row, one on. The hierarchy
|
|
54
|
+
* pass composes that row's world every frame — register an emitter at a joint's row and it moves
|
|
55
|
+
* with the joint, animation included, with nothing copied through the CPU. Unregister it and its
|
|
56
|
+
* row in the emitter table is retired, and its particles with it within a frame, because they
|
|
58
57
|
* carry that row's generation. There is no transform of its own to keep in step with anything.
|
|
59
58
|
*
|
|
60
59
|
* The rest is a description of an effect and nothing else: the attribute {@link layout} and the
|
|
@@ -72,7 +71,7 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS = Object.freeze({
|
|
|
72
71
|
* emitter opts into culling at all: `EMITTER_FLAG.CULL` in {@link flags}.
|
|
73
72
|
*
|
|
74
73
|
* **Nothing here is the GPU's.** Which table row the emitter was given, which tenancy of it, where
|
|
75
|
-
* its program was placed in the program heap, which `transforms` row
|
|
74
|
+
* its program was placed in the program heap, which `transforms` row it was registered at, where
|
|
76
75
|
* its texture was packed into the atlas — all of that is
|
|
77
76
|
* {@link ./GPUParticleEmitterContext.js GPUParticleEmitterContext}, held by the
|
|
78
77
|
* {@link ./EmitterRegistry.js} that registered the emitter and reachable through
|
|
@@ -81,12 +80,43 @@ export const EMITTER_RENDER_CHANNEL_COMPONENTS = Object.freeze({
|
|
|
81
80
|
* accumulator, age, sleep are {@link ../data/PARTICLE_EMITTER_STATE.js}, and they stay on the GPU.
|
|
82
81
|
*
|
|
83
82
|
* Fields are plain data with no setters. After changing any of them, set `needsUpdate = true` — the
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* field and ten cost the same upload.
|
|
83
|
+
* emitter's change counter — and {@link ./EmitterRegistry.js#flush} restages the row on its next
|
|
84
|
+
* flush. One counter rather than a setter per field because a row is restaged whole either way:
|
|
85
|
+
* one changed field and ten cost the same upload.
|
|
88
86
|
*/
|
|
89
|
-
export class ParticleEmitter
|
|
87
|
+
export class ParticleEmitter {
|
|
88
|
+
/**
|
|
89
|
+
* For a debugger, and for nothing else.
|
|
90
|
+
*
|
|
91
|
+
* @type {string}
|
|
92
|
+
*/
|
|
93
|
+
name = "";
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Moved by every {@link needsUpdate}; what a registry compares against the version it last
|
|
97
|
+
* staged the row from.
|
|
98
|
+
*
|
|
99
|
+
* @type {number}
|
|
100
|
+
*/
|
|
101
|
+
#version = 0;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @returns {number}
|
|
105
|
+
*/
|
|
106
|
+
get version() {
|
|
107
|
+
return this.#version;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Say that a field changed. Reading it back answers nothing: the counter is the record.
|
|
112
|
+
*
|
|
113
|
+
* @param {boolean} value
|
|
114
|
+
*/
|
|
115
|
+
set needsUpdate(value) {
|
|
116
|
+
if (value) {
|
|
117
|
+
this.#version++;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
90
120
|
|
|
91
121
|
/**
|
|
92
122
|
* The per-particle attribute schema: which named attributes a particle of this emitter has, how
|
|
@@ -232,10 +262,8 @@ export class ParticleEmitter extends Node3D {
|
|
|
232
262
|
* draws with, and how it is bound to the renderer. Two emitters that compare equal describe one
|
|
233
263
|
* effect in one place, and one row would serve both.
|
|
234
264
|
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* be compared. {@link transform_global} is left out too, being derived from
|
|
238
|
-
* {@link transform_local} and the parent chain.
|
|
265
|
+
* Where it is registered is not part of it — the row says where an emitter is, not what it is
|
|
266
|
+
* — and neither is anything the GPU assigned it, which is not here to be compared.
|
|
239
267
|
*
|
|
240
268
|
* @param {ParticleEmitter} other
|
|
241
269
|
* @returns {boolean}
|
|
@@ -258,7 +286,6 @@ export class ParticleEmitter extends Node3D {
|
|
|
258
286
|
&& this.render_frame === other.render_frame
|
|
259
287
|
&& this.render_velocity === other.render_velocity
|
|
260
288
|
&& is_typed_array_equals(this.flipbook, other.flipbook)
|
|
261
|
-
&& this.transform_local.equals(other.transform_local)
|
|
262
289
|
&& this.layout.equals(other.layout)
|
|
263
290
|
&& this.program.equals(other.program);
|
|
264
291
|
}
|
|
@@ -287,27 +314,24 @@ export class ParticleEmitter extends Node3D {
|
|
|
287
314
|
|
|
288
315
|
return hash_mix3(
|
|
289
316
|
hash_mix2(bindings, flipbook),
|
|
290
|
-
|
|
317
|
+
appearance,
|
|
291
318
|
hash_mix2(this.layout.hash(), this.program.hash())
|
|
292
319
|
);
|
|
293
320
|
}
|
|
294
321
|
|
|
295
322
|
/**
|
|
296
|
-
* Make this emitter a copy of `other`: same effect, same settings
|
|
323
|
+
* Make this emitter a copy of `other`: same effect, same settings.
|
|
297
324
|
*
|
|
298
325
|
* The layout and the compiled program are shared rather than duplicated — both are immutable
|
|
299
326
|
* once compiled, and sharing them is what puts two emitters of one effect on one program id in
|
|
300
327
|
* the program heap, hence in one simulation bucket.
|
|
301
328
|
*
|
|
302
|
-
* What is not copied is
|
|
303
|
-
* parent, children), and anything a registry gave the original: a copy is a second emitter, not
|
|
329
|
+
* What is not copied is anything a registry gave the original: a copy is a second emitter, not
|
|
304
330
|
* a second reference to the first one's table row.
|
|
305
331
|
*
|
|
306
332
|
* @param {ParticleEmitter} other
|
|
307
333
|
*/
|
|
308
334
|
copy(other) {
|
|
309
|
-
super.copy(other);
|
|
310
|
-
|
|
311
335
|
this.name = other.name;
|
|
312
336
|
|
|
313
337
|
this.layout = other.layout;
|
|
@@ -330,9 +354,7 @@ export class ParticleEmitter extends Node3D {
|
|
|
330
354
|
}
|
|
331
355
|
|
|
332
356
|
/**
|
|
333
|
-
* A second emitter equal to this one, and registered with nothing.
|
|
334
|
-
* way {@link Node3D#clone} clones one — overridden only because the base builds a plain
|
|
335
|
-
* `Node3D`, which would keep the transform and drop the effect.
|
|
357
|
+
* A second emitter equal to this one, and registered with nothing.
|
|
336
358
|
*
|
|
337
359
|
* @returns {ParticleEmitter}
|
|
338
360
|
*/
|
|
@@ -341,14 +363,6 @@ export class ParticleEmitter extends Node3D {
|
|
|
341
363
|
|
|
342
364
|
r.copy(this);
|
|
343
365
|
|
|
344
|
-
for (const child of this.children) {
|
|
345
|
-
const clone = child.clone();
|
|
346
|
-
|
|
347
|
-
clone.parent = r;
|
|
348
|
-
|
|
349
|
-
r.children.push(clone);
|
|
350
|
-
}
|
|
351
|
-
|
|
352
366
|
return r;
|
|
353
367
|
}
|
|
354
368
|
|
|
@@ -393,10 +407,9 @@ export class ParticleEmitter extends Node3D {
|
|
|
393
407
|
emitter.texture = config.texture;
|
|
394
408
|
}
|
|
395
409
|
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
}
|
|
410
|
+
// an emitter is placed by the row it is registered at, which is an entity's; a position
|
|
411
|
+
// here would be a second placement nothing reads
|
|
412
|
+
assert.equal(config.position, undefined, "config.position: place the emitter's entity, not the emitter");
|
|
400
413
|
|
|
401
414
|
if (config.seed !== undefined) {
|
|
402
415
|
emitter.seed = config.seed;
|
|
@@ -376,7 +376,7 @@ export class AccumulatingPathTracer {
|
|
|
376
376
|
const r_materials = graphics.materials_resident;
|
|
377
377
|
const scene_ctx = view.scene;
|
|
378
378
|
|
|
379
|
-
r_materials.ensure_scene_materials(scene_ctx
|
|
379
|
+
r_materials.ensure_scene_materials(scene_ctx);
|
|
380
380
|
r_materials.update();
|
|
381
381
|
|
|
382
382
|
const geometries = scene_ctx.geometries;
|
|
@@ -128,7 +128,7 @@ export function graph_path_trace_scene({
|
|
|
128
128
|
|
|
129
129
|
const scene_ctx = view.scene;
|
|
130
130
|
|
|
131
|
-
r_materials.ensure_scene_materials(scene_ctx
|
|
131
|
+
r_materials.ensure_scene_materials(scene_ctx);
|
|
132
132
|
r_materials.update();
|
|
133
133
|
|
|
134
134
|
const geometries = scene_ctx.geometries;
|
|
@@ -53,7 +53,7 @@ export class NSS {
|
|
|
53
53
|
* @returns {number}
|
|
54
54
|
*/
|
|
55
55
|
static recommended_jitter_sequence_size(upscale_ratio: number): number;
|
|
56
|
-
static "__#
|
|
56
|
+
static "__#170@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
|
|
57
57
|
/**
|
|
58
58
|
* @param {GraphicsContext} graphics
|
|
59
59
|
*/
|
package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_meshes_classify_buckets.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACT,MAAM,EAAtB,MAAM;IACmB,SAAS;IACL,MAAM;IACjC,MAAM,
|
|
1
|
+
{"version":3,"file":"graph_meshes_classify_buckets.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js"],"names":[],"mappings":"AAmBA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACT,MAAM,EAAtB,MAAM;IACmB,SAAS;IACL,MAAM;IACjC,MAAM,CAwHlB"}
|
|
@@ -50,7 +50,8 @@ export function graph_meshes_classify_buckets({
|
|
|
50
50
|
|
|
51
51
|
const encoder = context.encoder;
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
// occupied mesh rows: the table the cull ran over, and everything a scene draws
|
|
54
|
+
const instance_count = scene_ctx.scene_database.get('meshes').count;
|
|
54
55
|
|
|
55
56
|
if (instance_count === 0) {
|
|
56
57
|
// nothing to do
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_scene_meshes_cull_and_classify_buckets.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACA,SAAS;IAClB,MAAM,EAAtB,MAAM;IACJ,MAAM,
|
|
1
|
+
{"version":3,"file":"graph_scene_meshes_cull_and_classify_buckets.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/rasterize/expand/bucket/mesh/graph_scene_meshes_cull_and_classify_buckets.js"],"names":[],"mappings":"AAiBA;;;;;;;;GAQG;AACH;IAN+B,KAAK;IACA,SAAS;IAClB,MAAM,EAAtB,MAAM;IACJ,MAAM,CAgIlB"}
|
|
@@ -114,10 +114,13 @@ export function graph_scene_meshes_cull_and_classify_buckets({
|
|
|
114
114
|
|
|
115
115
|
const pass = graph.add('classify mesh buckets', pass_data, execute);
|
|
116
116
|
|
|
117
|
+
// occupied mesh rows, as the buffers are sized when the graph is built
|
|
118
|
+
const instance_count = scene_ctx.scene_database.get('meshes').count;
|
|
119
|
+
|
|
117
120
|
pass_data.buffer_0 = pass.create(
|
|
118
121
|
'0',
|
|
119
122
|
BufferResourceDescriptor.from(
|
|
120
|
-
HEADER_0_SIZE + u32.size *
|
|
123
|
+
HEADER_0_SIZE + u32.size * instance_count,
|
|
121
124
|
GPUBufferUsage.STORAGE,
|
|
122
125
|
0, HEADER_0_SIZE,
|
|
123
126
|
)
|
|
@@ -127,7 +130,7 @@ export function graph_scene_meshes_cull_and_classify_buckets({
|
|
|
127
130
|
'1',
|
|
128
131
|
BufferResourceDescriptor.from(
|
|
129
132
|
round_up(
|
|
130
|
-
RASTERIZATION_BUCKET_SORT_OUTPUT_HEADER_STRUCT_WRITE.aligned_size + u32.size * Math.max(16,
|
|
133
|
+
RASTERIZATION_BUCKET_SORT_OUTPUT_HEADER_STRUCT_WRITE.aligned_size + u32.size * Math.max(16, instance_count),
|
|
131
134
|
RASTERIZATION_BUCKET_SORT_OUTPUT_STRUCT_WRITE.align,
|
|
132
135
|
),
|
|
133
136
|
GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
|
package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js
CHANGED
|
@@ -766,7 +766,7 @@ export function graph_rasterize_meshes_transparent_avboit({
|
|
|
766
766
|
*/
|
|
767
767
|
const materials_double = [];
|
|
768
768
|
|
|
769
|
-
const scene_materials = scene_ctx.
|
|
769
|
+
const scene_materials = scene_ctx.drawn_materials;
|
|
770
770
|
|
|
771
771
|
// Front-sided and double-sided materials need different pipeline states, so every raster pass
|
|
772
772
|
// below runs twice. `ShadeDrawSide.Back` is not drawn, the same as under MBOIT (plan §7).
|
|
@@ -68,7 +68,7 @@ export function graph_rasterize_meshes_alpha_tested({
|
|
|
68
68
|
* @type {ShadeMaterial[]}
|
|
69
69
|
*/
|
|
70
70
|
const relevant_materials = [];
|
|
71
|
-
const scene_materials = scene_ctx.
|
|
71
|
+
const scene_materials = scene_ctx.drawn_materials;
|
|
72
72
|
|
|
73
73
|
const material_count = filter_materials_by_bucket(
|
|
74
74
|
relevant_materials, 0,
|
|
@@ -481,7 +481,7 @@ export function graph_rasterize_meshes_transparent_oit({
|
|
|
481
481
|
*/
|
|
482
482
|
const materials_double = [];
|
|
483
483
|
|
|
484
|
-
const scene_materials = scene_ctx.
|
|
484
|
+
const scene_materials = scene_ctx.drawn_materials;
|
|
485
485
|
|
|
486
486
|
// we need to draw with different pipeline states, so the code is a little convoluted
|
|
487
487
|
// Essentially, we draw Double-side and Front-sided materials
|
|
@@ -48,7 +48,7 @@ export function graph_rasterize_scene({
|
|
|
48
48
|
const active_buckets = new Set();
|
|
49
49
|
|
|
50
50
|
const scene_ctx = view_ctx.scene;
|
|
51
|
-
const cached_materials = scene_ctx.
|
|
51
|
+
const cached_materials = scene_ctx.drawn_materials;
|
|
52
52
|
|
|
53
53
|
for (const material of cached_materials) {
|
|
54
54
|
const bucket_id = rasterization_material_bucket(material.transparency_mode, material.draw_mode, material.draw_side);
|