@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
|
@@ -62,7 +62,7 @@ export class PointLightShadowmap extends Shadowmap {
|
|
|
62
62
|
assert.defined(scene_ctx, 'scene_ctx');
|
|
63
63
|
|
|
64
64
|
const light = this.light;
|
|
65
|
-
const t = light.
|
|
65
|
+
const t = light.transform;
|
|
66
66
|
const px = t.translation_x;
|
|
67
67
|
const py = t.translation_y;
|
|
68
68
|
const pz = t.translation_z;
|
|
@@ -24,7 +24,7 @@ export class SpotLightShadowmap extends Shadowmap {
|
|
|
24
24
|
|
|
25
25
|
// both sides are Transform64 now, so this is one buffer copy rather than a component-by-
|
|
26
26
|
// component transfer across two representations
|
|
27
|
-
camera.transform.copy(light.
|
|
27
|
+
camera.transform.copy(light.transform);
|
|
28
28
|
|
|
29
29
|
camera.fov = light.angle * 2;
|
|
30
30
|
camera.aspect = 1;
|
|
@@ -38,7 +38,7 @@ export class TetrahedronPointLightShadowmap extends Shadowmap {
|
|
|
38
38
|
assert.defined(scene_ctx, 'scene_ctx');
|
|
39
39
|
|
|
40
40
|
const light = this.light;
|
|
41
|
-
const t = light.
|
|
41
|
+
const t = light.transform;
|
|
42
42
|
const px = t.translation_x;
|
|
43
43
|
const py = t.translation_y;
|
|
44
44
|
const pz = t.translation_z;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the caster-range pass publishes for one directional shadow map: per cascade, how near
|
|
3
|
+
* along the light's axis the nearest shadow caster inside the cascade's side planes reaches.
|
|
4
|
+
*
|
|
5
|
+
* A row of the light database's `shadow_csm_caster_range` table, written on the GPU by
|
|
6
|
+
* `shader_csm_caster_range_publish` and read back to the CPU, which fits the next frame's cascade
|
|
7
|
+
* near plane to it. The CPU writes it once, at {@link CSM_CASTER_RANGE_UNKNOWN}, when the row is
|
|
8
|
+
* claimed; a cascade nothing was measured for keeps that value, and a reader treats it as "no
|
|
9
|
+
* caster".
|
|
10
|
+
*
|
|
11
|
+
* @type {WebGPUStruct}
|
|
12
|
+
*/
|
|
13
|
+
export const CSM_CASTER_RANGE_STRUCT: WebGPUStruct;
|
|
14
|
+
/**
|
|
15
|
+
* The largest finite f32: what a cascade's slot holds before anything is merged into it, and after
|
|
16
|
+
* the publish reset it. Not +inf, because WGSL will not const-fold `bitcast<f32>(0x7F800000u)`;
|
|
17
|
+
* no world coordinate comes within orders of magnitude of it.
|
|
18
|
+
*
|
|
19
|
+
* @type {number}
|
|
20
|
+
*/
|
|
21
|
+
export const CSM_CASTER_RANGE_UNKNOWN: number;
|
|
22
|
+
/**
|
|
23
|
+
* {@link CSM_CASTER_RANGE_UNKNOWN} as the u32 bit pattern a scratch word is seeded with.
|
|
24
|
+
*
|
|
25
|
+
* @type {number}
|
|
26
|
+
*/
|
|
27
|
+
export const CSM_CASTER_RANGE_UNKNOWN_BITS: number;
|
|
28
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
29
|
+
//# sourceMappingURL=CSM_CASTER_RANGE_STRUCT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CSM_CASTER_RANGE_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;GAWG;AACH,sCAFU,YAAY,CAUM;AAE5B;;;;;;GAMG;AACH,uCAFU,MAAM,CAEoC;AAEpD;;;;GAIG;AACH,4CAFU,MAAM,CAEwC;6BAvC3B,sCAAsC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { FLOAT32_MAX } from "../../../../../core/binary/FLOAT32_MAX.js";
|
|
2
|
+
import { f32 } from "../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
3
|
+
import { WebGPUArray } from "../../../shader/type/WebGPUArray.js";
|
|
4
|
+
import { WebGPUStruct } from "../../../shader/type/WebGPUStruct.js";
|
|
5
|
+
import { SHADOWMAP_CSM_CASCADE_COUNT } from "./SHADOWMAP_CSM_CASCADE_COUNT.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* What the caster-range pass publishes for one directional shadow map: per cascade, how near
|
|
9
|
+
* along the light's axis the nearest shadow caster inside the cascade's side planes reaches.
|
|
10
|
+
*
|
|
11
|
+
* A row of the light database's `shadow_csm_caster_range` table, written on the GPU by
|
|
12
|
+
* `shader_csm_caster_range_publish` and read back to the CPU, which fits the next frame's cascade
|
|
13
|
+
* near plane to it. The CPU writes it once, at {@link CSM_CASTER_RANGE_UNKNOWN}, when the row is
|
|
14
|
+
* claimed; a cascade nothing was measured for keeps that value, and a reader treats it as "no
|
|
15
|
+
* caster".
|
|
16
|
+
*
|
|
17
|
+
* @type {WebGPUStruct}
|
|
18
|
+
*/
|
|
19
|
+
export const CSM_CASTER_RANGE_STRUCT = WebGPUStruct.from({
|
|
20
|
+
/**
|
|
21
|
+
* Per cascade, `min(dot(light_z_axis, corner))` over the corners of every mesh row's world
|
|
22
|
+
* bounds that intersect the cascade's four side planes — measured from the world origin, so
|
|
23
|
+
* that a cascade whose centre moved between the frame it was measured for and the frame it is
|
|
24
|
+
* applied to can add its own translation.
|
|
25
|
+
*/
|
|
26
|
+
near: WebGPUArray.from(f32, SHADOWMAP_CSM_CASCADE_COUNT),
|
|
27
|
+
}, "CSMCasterRange").pack();
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* The largest finite f32: what a cascade's slot holds before anything is merged into it, and after
|
|
31
|
+
* the publish reset it. Not +inf, because WGSL will not const-fold `bitcast<f32>(0x7F800000u)`;
|
|
32
|
+
* no world coordinate comes within orders of magnitude of it.
|
|
33
|
+
*
|
|
34
|
+
* @type {number}
|
|
35
|
+
*/
|
|
36
|
+
export const CSM_CASTER_RANGE_UNKNOWN = FLOAT32_MAX;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* {@link CSM_CASTER_RANGE_UNKNOWN} as the u32 bit pattern a scratch word is seeded with.
|
|
40
|
+
*
|
|
41
|
+
* @type {number}
|
|
42
|
+
*/
|
|
43
|
+
export const CSM_CASTER_RANGE_UNKNOWN_BITS = 0x7F7FFFFF;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How far past the measured nearest caster a cascade's near plane is pushed, as a fraction of the
|
|
3
|
+
* cascade's own depth.
|
|
4
|
+
*
|
|
5
|
+
* The caster range is measured on the GPU against one frame's cascade frusta and applied to the
|
|
6
|
+
* next frame's — a frame of camera motion between them, and a frame of caster motion too. The
|
|
7
|
+
* margin is what keeps a caster that edged past the measured range from flickering in and out of
|
|
8
|
+
* shadow; a GPU-built cascade matrix is the fix if it ever shows.
|
|
9
|
+
*
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION: number;
|
|
13
|
+
//# sourceMappingURL=SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION.js"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,yDAFU,MAAM,CAE8C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How far past the measured nearest caster a cascade's near plane is pushed, as a fraction of the
|
|
3
|
+
* cascade's own depth.
|
|
4
|
+
*
|
|
5
|
+
* The caster range is measured on the GPU against one frame's cascade frusta and applied to the
|
|
6
|
+
* next frame's — a frame of camera motion between them, and a frame of caster motion too. The
|
|
7
|
+
* margin is what keeps a caster that edged past the measured range from flickering in and out of
|
|
8
|
+
* shadow; a GPU-built cascade matrix is the fix if it ever shows.
|
|
9
|
+
*
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const SHADOWMAP_CSM_CASTER_RANGE_MARGIN_FRACTION = 0.1;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export const CSM_CASTER_RANGE_WORKGROUP_SIZE: number;
|
|
2
|
+
/**
|
|
3
|
+
* What one directional shadow map's accumulate pass runs with: the frusta the CPU fitted this
|
|
4
|
+
* frame, and where in the scratch buffer this map's cascades accumulate.
|
|
5
|
+
*
|
|
6
|
+
* @type {WebGPUStruct}
|
|
7
|
+
*/
|
|
8
|
+
export const CSM_CASTER_RANGE_SETTINGS_STRUCT: WebGPUStruct;
|
|
9
|
+
/**
|
|
10
|
+
* What the publish pass runs with.
|
|
11
|
+
*
|
|
12
|
+
* @type {WebGPUStruct}
|
|
13
|
+
*/
|
|
14
|
+
export const CSM_CASTER_RANGE_PUBLISH_STRUCT: WebGPUStruct;
|
|
15
|
+
/**
|
|
16
|
+
* Measure how near along the light every mesh row's world bounds reach, per cascade, over the
|
|
17
|
+
* rows that intersect the cascade's side planes.
|
|
18
|
+
*
|
|
19
|
+
* **This is what makes the cascade's near plane the GPU's to fit.** The CPU used to walk its own
|
|
20
|
+
* copy of the scene's bounds tree to tighten each cascade's near plane against the casters between
|
|
21
|
+
* the light and the view slice; that copy does not exist for a row the GPU composes — a skinned
|
|
22
|
+
* character under a clip, a subtree the CPU stopped composing — so the measure is taken where the
|
|
23
|
+
* bounds are: the `meshes` table, one thread per occupied row, after the bounds pass has refreshed
|
|
24
|
+
* it for the frame. The result is read back and applied to the next frame's fit, with a margin.
|
|
25
|
+
*
|
|
26
|
+
* The test per cascade is the one the tree walk made: a box survives the four fixed side planes if
|
|
27
|
+
* its corner furthest along each plane's normal is inside; the plane a survivor pushes is the
|
|
28
|
+
* near one, to the box corner nearest along the light's axis. Per-thread CAS minimum rather than
|
|
29
|
+
* a subgroup reduction first, because a scene has hundreds of rows and three cascades, and the
|
|
30
|
+
* same CAS helper already bounds the skinned meshes.
|
|
31
|
+
*
|
|
32
|
+
* Dispatch with {@link GPUTypedTable#dispatch_group_count} of the `meshes` table at
|
|
33
|
+
* {@link CSM_CASTER_RANGE_WORKGROUP_SIZE}, once per directional shadow map being drawn.
|
|
34
|
+
*
|
|
35
|
+
* @type {ComputeShader}
|
|
36
|
+
*/
|
|
37
|
+
export const shader_csm_caster_range_accumulate: ComputeShader;
|
|
38
|
+
/**
|
|
39
|
+
* Copy one map's accumulated ranges into its row of the light database's `shadow_csm_caster_range`
|
|
40
|
+
* table — where the readback reads them from — and reset the scratch for the next frame.
|
|
41
|
+
*
|
|
42
|
+
* One workgroup, one thread: the row is one record, written whole.
|
|
43
|
+
*
|
|
44
|
+
* @type {ComputeShader}
|
|
45
|
+
*/
|
|
46
|
+
export const shader_csm_caster_range_publish: ComputeShader;
|
|
47
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
48
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
49
|
+
//# sourceMappingURL=shader_csm_caster_range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shader_csm_caster_range.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js"],"names":[],"mappings":"AAaA,qDAAiF;AAEjF;;;;;GAKG;AACH,+CAFU,YAAY,CAmBc;AAEpC;;;;GAIG;AACH,8CAFU,YAAY,CAQa;AAenC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,iDAFU,aAAa,CA2DpB;AAUH;;;;;;;GAOG;AACH,8CAFU,aAAa,CAgCpB;6BA/L0B,yCAAyC;8BAGxC,qCAAqC"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { atomic_u32, u32, vec4f } from "../../../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
|
+
import { WebGPUArray } from "../../../../shader/type/WebGPUArray.js";
|
|
3
|
+
import { WebGPUStruct } from "../../../../shader/type/WebGPUStruct.js";
|
|
4
|
+
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
5
|
+
import { COMPUTE_SHADER_DEFAULT_GROUP_SIZE } from "../../../../shader/COMPUTE_SHADER_DEFAULT_GROUP_SIZE.js";
|
|
6
|
+
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
7
|
+
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
8
|
+
import { chunk_aabb_atomic_f32 } from "../../../../animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.js";
|
|
9
|
+
import { LIGHT_DATABASE_SPEC } from "../../../../light/LIGHT_DATABASE_SPEC.js";
|
|
10
|
+
import { MESHES_TABLE } from "../../../../scene/chunk_scene_database_access.js";
|
|
11
|
+
import { CSM_CASTER_RANGE_UNKNOWN } from "../CSM_CASTER_RANGE_STRUCT.js";
|
|
12
|
+
import { SHADOWMAP_CSM_CASCADE_COUNT } from "../SHADOWMAP_CSM_CASCADE_COUNT.js";
|
|
13
|
+
|
|
14
|
+
export const CSM_CASTER_RANGE_WORKGROUP_SIZE = COMPUTE_SHADER_DEFAULT_GROUP_SIZE;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* What one directional shadow map's accumulate pass runs with: the frusta the CPU fitted this
|
|
18
|
+
* frame, and where in the scratch buffer this map's cascades accumulate.
|
|
19
|
+
*
|
|
20
|
+
* @type {WebGPUStruct}
|
|
21
|
+
*/
|
|
22
|
+
export const CSM_CASTER_RANGE_SETTINGS_STRUCT = WebGPUStruct.from({
|
|
23
|
+
/**
|
|
24
|
+
* The light's z axis in world space — the axis a caster's light-view depth is measured along —
|
|
25
|
+
* without the cascade's own translation, which the CPU adds back when it applies the range.
|
|
26
|
+
* `w` is unused.
|
|
27
|
+
*/
|
|
28
|
+
z_axis: vec4f,
|
|
29
|
+
/**
|
|
30
|
+
* The four side planes of each cascade's light frustum, four per cascade in cascade order,
|
|
31
|
+
* inward: `dot(n, p) + w >= 0` is inside. Not normalized, and they need not be.
|
|
32
|
+
*/
|
|
33
|
+
planes: WebGPUArray.from(vec4f, SHADOWMAP_CSM_CASCADE_COUNT * 4),
|
|
34
|
+
/**
|
|
35
|
+
* First scratch word of this map's cascades: cascade `c` accumulates into `base + c`.
|
|
36
|
+
*/
|
|
37
|
+
base: u32,
|
|
38
|
+
cascade_count: u32,
|
|
39
|
+
}, "CSMCasterRangeSettings").pack();
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* What the publish pass runs with.
|
|
43
|
+
*
|
|
44
|
+
* @type {WebGPUStruct}
|
|
45
|
+
*/
|
|
46
|
+
export const CSM_CASTER_RANGE_PUBLISH_STRUCT = WebGPUStruct.from({
|
|
47
|
+
/** the map's row of the light database's `shadow_csm_caster_range` table */
|
|
48
|
+
row: u32,
|
|
49
|
+
/** see {@link CSM_CASTER_RANGE_SETTINGS_STRUCT#base} */
|
|
50
|
+
base: u32,
|
|
51
|
+
cascade_count: u32,
|
|
52
|
+
}, "CSMCasterRangePublish").pack();
|
|
53
|
+
|
|
54
|
+
const WG = CSM_CASTER_RANGE_WORKGROUP_SIZE;
|
|
55
|
+
const PG = MESHES_TABLE.page_iterator_symbol_prefix(WG);
|
|
56
|
+
const RANGE_TABLE = LIGHT_DATABASE_SPEC.get('shadow_csm_caster_range');
|
|
57
|
+
|
|
58
|
+
const accumulate_resources = new ShaderResourceSetDescriptor();
|
|
59
|
+
|
|
60
|
+
accumulate_resources.createGroup()
|
|
61
|
+
.addStorageBuffer('scene_database', WebGPUArray.from(u32), false)
|
|
62
|
+
.addUniform('settings', CSM_CASTER_RANGE_SETTINGS_STRUCT)
|
|
63
|
+
// one word per cascade per map, holding plain f32 bit patterns, seeded to the largest finite
|
|
64
|
+
// f32 and reset to it by the publish
|
|
65
|
+
.addStorageBuffer('ranges', WebGPUArray.from(atomic_u32), true);
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Measure how near along the light every mesh row's world bounds reach, per cascade, over the
|
|
69
|
+
* rows that intersect the cascade's side planes.
|
|
70
|
+
*
|
|
71
|
+
* **This is what makes the cascade's near plane the GPU's to fit.** The CPU used to walk its own
|
|
72
|
+
* copy of the scene's bounds tree to tighten each cascade's near plane against the casters between
|
|
73
|
+
* the light and the view slice; that copy does not exist for a row the GPU composes — a skinned
|
|
74
|
+
* character under a clip, a subtree the CPU stopped composing — so the measure is taken where the
|
|
75
|
+
* bounds are: the `meshes` table, one thread per occupied row, after the bounds pass has refreshed
|
|
76
|
+
* it for the frame. The result is read back and applied to the next frame's fit, with a margin.
|
|
77
|
+
*
|
|
78
|
+
* The test per cascade is the one the tree walk made: a box survives the four fixed side planes if
|
|
79
|
+
* its corner furthest along each plane's normal is inside; the plane a survivor pushes is the
|
|
80
|
+
* near one, to the box corner nearest along the light's axis. Per-thread CAS minimum rather than
|
|
81
|
+
* a subgroup reduction first, because a scene has hundreds of rows and three cascades, and the
|
|
82
|
+
* same CAS helper already bounds the skinned meshes.
|
|
83
|
+
*
|
|
84
|
+
* Dispatch with {@link GPUTypedTable#dispatch_group_count} of the `meshes` table at
|
|
85
|
+
* {@link CSM_CASTER_RANGE_WORKGROUP_SIZE}, once per directional shadow map being drawn.
|
|
86
|
+
*
|
|
87
|
+
* @type {ComputeShader}
|
|
88
|
+
*/
|
|
89
|
+
export const shader_csm_caster_range_accumulate = ComputeShader.from({
|
|
90
|
+
label: "CSM/CasterRangeAccumulate",
|
|
91
|
+
body: CodeChunk.from(
|
|
92
|
+
//language=WGSL
|
|
93
|
+
`
|
|
94
|
+
@compute @workgroup_size(${WG},1,1)
|
|
95
|
+
fn main(
|
|
96
|
+
@builtin(workgroup_id) wg_id: vec3<u32>,
|
|
97
|
+
@builtin(local_invocation_index) local_id: u32,
|
|
98
|
+
) {
|
|
99
|
+
// page_address is uniform across the workgroup, so this branch is uniform
|
|
100
|
+
if !${PG}_setup(&scene_database, wg_id.x, local_id) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
let slot = ${PG}_slot_in_page(local_id);
|
|
105
|
+
|
|
106
|
+
if slot >= ${PG}_ELEMENTS_PER_PAGE || !${PG}_is_occupied(slot) {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
let mesh = ${PG}_read(&scene_database, slot);
|
|
111
|
+
|
|
112
|
+
let low = vec3<f32>(mesh.bounding_box[0], mesh.bounding_box[1], mesh.bounding_box[2]);
|
|
113
|
+
let high = vec3<f32>(mesh.bounding_box[3], mesh.bounding_box[4], mesh.bounding_box[5]);
|
|
114
|
+
|
|
115
|
+
// the corner nearest along the light's axis: the low end wherever the axis points up
|
|
116
|
+
let axis = settings.z_axis.xyz;
|
|
117
|
+
let nearest = select(high, low, axis >= vec3<f32>(0.0));
|
|
118
|
+
let z = dot(axis, nearest);
|
|
119
|
+
|
|
120
|
+
let cascade_count = settings.cascade_count;
|
|
121
|
+
|
|
122
|
+
for (var c = 0u; c < cascade_count; c += 1u) {
|
|
123
|
+
var inside = true;
|
|
124
|
+
|
|
125
|
+
for (var p = 0u; p < 4u; p += 1u) {
|
|
126
|
+
let plane = settings.planes[c * 4u + p];
|
|
127
|
+
|
|
128
|
+
// the corner furthest along the normal decides whether any of the box is inside
|
|
129
|
+
let furthest = select(low, high, plane.xyz >= vec3<f32>(0.0));
|
|
130
|
+
|
|
131
|
+
if dot(plane.xyz, furthest) + plane.w < 0.0 {
|
|
132
|
+
inside = false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if inside {
|
|
137
|
+
aabb_atomic_min_f32(&ranges[settings.base + c], z);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
`, [
|
|
142
|
+
MESHES_TABLE.chunk_iterate(WG),
|
|
143
|
+
chunk_aabb_atomic_f32,
|
|
144
|
+
]),
|
|
145
|
+
resources: accumulate_resources,
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
const publish_resources = new ShaderResourceSetDescriptor();
|
|
149
|
+
|
|
150
|
+
publish_resources.setImmediate('publish', CSM_CASTER_RANGE_PUBLISH_STRUCT);
|
|
151
|
+
|
|
152
|
+
publish_resources.createGroup()
|
|
153
|
+
.addStorageBuffer('ranges', WebGPUArray.from(atomic_u32), true)
|
|
154
|
+
.addStorageBuffer('light_database', WebGPUArray.from(u32), true);
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Copy one map's accumulated ranges into its row of the light database's `shadow_csm_caster_range`
|
|
158
|
+
* table — where the readback reads them from — and reset the scratch for the next frame.
|
|
159
|
+
*
|
|
160
|
+
* One workgroup, one thread: the row is one record, written whole.
|
|
161
|
+
*
|
|
162
|
+
* @type {ComputeShader}
|
|
163
|
+
*/
|
|
164
|
+
export const shader_csm_caster_range_publish = ComputeShader.from({
|
|
165
|
+
label: "CSM/CasterRangePublish",
|
|
166
|
+
body: CodeChunk.from(
|
|
167
|
+
//language=WGSL
|
|
168
|
+
`
|
|
169
|
+
// the reset value: see CSM_CASTER_RANGE_UNKNOWN
|
|
170
|
+
const RANGE_UNKNOWN = ${CSM_CASTER_RANGE_UNKNOWN};
|
|
171
|
+
|
|
172
|
+
@compute @workgroup_size(1,1,1)
|
|
173
|
+
fn main() {
|
|
174
|
+
var near: array<f32, ${SHADOWMAP_CSM_CASCADE_COUNT}>;
|
|
175
|
+
|
|
176
|
+
for (var c = 0u; c < ${SHADOWMAP_CSM_CASCADE_COUNT}u; c += 1u) {
|
|
177
|
+
if c < publish.cascade_count {
|
|
178
|
+
let word = publish.base + c;
|
|
179
|
+
|
|
180
|
+
near[c] = bitcast<f32>(atomicLoad(&ranges[word]));
|
|
181
|
+
|
|
182
|
+
atomicStore(&ranges[word], bitcast<u32>(RANGE_UNKNOWN));
|
|
183
|
+
} else {
|
|
184
|
+
near[c] = RANGE_UNKNOWN;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
${RANGE_TABLE.marshalling_method_write_field('near')}(&light_database, publish.row, near);
|
|
189
|
+
}
|
|
190
|
+
`, [
|
|
191
|
+
RANGE_TABLE.wgsl_gen_write_field_code('near'),
|
|
192
|
+
]),
|
|
193
|
+
resources: publish_resources,
|
|
194
|
+
});
|
|
@@ -150,7 +150,7 @@ export function csm_debug_draw_preview({
|
|
|
150
150
|
Array.prototype.push.apply(vertices, polygons.map(l => l.points).flat());
|
|
151
151
|
|
|
152
152
|
const projection_matrix = new Float32Array(16);
|
|
153
|
-
m4_invert(projection_matrix, shadowmap.light.
|
|
153
|
+
m4_invert(projection_matrix, shadowmap.light.transform.matrix);
|
|
154
154
|
|
|
155
155
|
// project
|
|
156
156
|
for (let i = 0; i < vertices.length; i++) {
|
|
@@ -96,7 +96,7 @@ export function compute_light_projected_area_px(light, main_camera, view_resolut
|
|
|
96
96
|
return full_area;
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
const t = light.
|
|
99
|
+
const t = light.transform;
|
|
100
100
|
return compute_projected_sphere_area_pixels(
|
|
101
101
|
t.translation_x, t.translation_y, t.translation_z,
|
|
102
102
|
radius,
|
|
@@ -158,7 +158,7 @@ export class RTXShadows {
|
|
|
158
158
|
// (same one the path tracer uses) so glass occluders attenuate
|
|
159
159
|
// shadow rays via the view-Fresnel mix in ray_shaded_query_occluded.
|
|
160
160
|
const r_materials = context.graphics.materials_resident;
|
|
161
|
-
r_materials.ensure_scene_materials(scene_ctx
|
|
161
|
+
r_materials.ensure_scene_materials(scene_ctx);
|
|
162
162
|
r_materials.update();
|
|
163
163
|
|
|
164
164
|
shader_ray_shadow_code.dispatch({
|
|
@@ -43,7 +43,7 @@ export function graph_trace_rays({
|
|
|
43
43
|
// the path tracer uses, so a glass occluder's view-Fresnel coverage
|
|
44
44
|
// can be sampled inside the shadow trace.
|
|
45
45
|
const r_materials = context.graphics.materials_resident;
|
|
46
|
-
r_materials.ensure_scene_materials(scene_ctx
|
|
46
|
+
r_materials.ensure_scene_materials(scene_ctx);
|
|
47
47
|
r_materials.update();
|
|
48
48
|
|
|
49
49
|
// Per-frame seed for the stochastic alpha test along the shadow ray.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CascadedSceneSDF.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js"],"names":[],"mappings":"AAkBA;IAqDI;;;OAGG;IACH,+BAmCC;IArFD;;;OAGG;IACH,QAFU,KAAK,CAE8B;IAa7C,iCAEC;IAED;;;OAGG;IACH,yBAFW,MAAM,QAqBhB;IA2CD;;;;OAIG;IACH,oBAHW,sBAAsB,SACtB,eAAe,QAwDzB;IAED;;;;OAIG;IACH,WAHW,sBAAsB,SACtB,eAAe,
|
|
1
|
+
{"version":3,"file":"CascadedSceneSDF.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js"],"names":[],"mappings":"AAkBA;IAqDI;;;OAGG;IACH,+BAmCC;IArFD;;;OAGG;IACH,QAFU,KAAK,CAE8B;IAa7C,iCAEC;IAED;;;OAGG;IACH,yBAFW,MAAM,QAqBhB;IA2CD;;;;OAIG;IACH,oBAHW,sBAAsB,SACtB,eAAe,QAwDzB;IAED;;;;OAIG;IACH,WAHW,sBAAsB,SACtB,eAAe,QASzB;IAED;;;OAGG;IACH,kBAFW,YAAY,iBA4BtB;IAED,0BAQC;IAED;;;OAGG;IACH,oBAFW,YAAY,QAkEtB;IAED,gBAEC;;CACJ;8BAjSY,OAAO,mCAAmC,EAAE,eAAe;sBATlD,2CAA2C;kCAK/B,uCAAuC;uCAFlC,8CAA8C;6BANxD,4CAA4C"}
|
|
@@ -178,7 +178,9 @@ export class CascadedSceneSDF {
|
|
|
178
178
|
*/
|
|
179
179
|
build(ctx, scene) {
|
|
180
180
|
|
|
181
|
-
|
|
181
|
+
// sized to what the CPU placed, under the ECS's own composition — the rows' union, exact
|
|
182
|
+
// for a static scene, which is what a volume built once is for
|
|
183
|
+
scene.rows.compute_world_bounds(this.bounds);
|
|
182
184
|
this.update(ctx, scene);
|
|
183
185
|
|
|
184
186
|
}
|
|
@@ -126,17 +126,17 @@ export class GPUBindlessTextureManager {
|
|
|
126
126
|
const old_buffer = this.#data_buffer;
|
|
127
127
|
const old_size = old_buffer.size;
|
|
128
128
|
|
|
129
|
-
//
|
|
130
|
-
//
|
|
131
|
-
// Doubling on top of that keeps a run of small
|
|
132
|
-
// arena apiece. The ceiling is the device's:
|
|
133
|
-
// `maxBufferSize` with an *invalid* buffer rather than an
|
|
134
|
-
// those in would destroy the arena and leave the allocator
|
|
135
|
-
// there, silently.
|
|
129
|
+
// Room for exactly `required_size` can still be refused — the allocator bins free runs by
|
|
130
|
+
// rounding down and requests by rounding up — so the arena to ask for is the allocator's own
|
|
131
|
+
// answer rather than a margin worked out here. Doubling on top of that keeps a run of small
|
|
132
|
+
// textures from paying for a copy of the whole arena apiece. The ceiling is the device's:
|
|
133
|
+
// `createBuffer` answers a size past `maxBufferSize` with an *invalid* buffer rather than an
|
|
134
|
+
// exception, and swapping one of those in would destroy the arena and leave the allocator
|
|
135
|
+
// sized for space that is not there, silently.
|
|
136
136
|
const new_size = Math.min(
|
|
137
137
|
round_up_to_arena_granularity(Math.max(
|
|
138
138
|
old_size * 2,
|
|
139
|
-
|
|
139
|
+
this.#allocator.grow_target_for(required_size)
|
|
140
140
|
)),
|
|
141
141
|
Math.floor(device.limits.maxBufferSize / ARENA_GRANULARITY_BYTES) * ARENA_GRANULARITY_BYTES
|
|
142
142
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"AAiCA;IAkII;;;;OAIG;IACH,kBAHW,cAAc,qBAwBxB;IAxHD;;OAEG;IACH,4BAOC;IAjBD;;OAEG;IACH,2BAEC;IAsCD;;OAEG;IACH,0BAEC;IAZD;;OAEG;IACH,yBAEC;IAwFD,gBAWC;
|
|
1
|
+
{"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"AAiCA;IAkII;;;;OAIG;IACH,kBAHW,cAAc,qBAwBxB;IAxHD;;OAEG;IACH,4BAOC;IAjBD;;OAEG;IACH,2BAEC;IAsCD;;OAEG;IACH,0BAEC;IAZD;;OAEG;IACH,yBAEC;IAwFD,gBAWC;IA6ND;;;;;;;;OAQG;IACH;QAN+B,KAAK,EAAzB,UAAU;QACM,kBAAkB,EAAlC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,wBAAwB,EAAxC,MAAM;QACU,eAAe,EAA/B,MAAM;;;;MA2EhB;;CAEJ;yBAneY,OAAO,2DAA2D,EAAE,UAAU;6BAC9E,OAAO,2BAA2B,EAAE,cAAc"}
|
|
@@ -287,8 +287,9 @@ export class GPUViewVolumetrics {
|
|
|
287
287
|
const resolution = VOLUMETRICS_SUN_SHADOW_RESOLUTION;
|
|
288
288
|
|
|
289
289
|
// `forward` is the direction light TRAVELS — the same vector light_record_directional
|
|
290
|
-
// writes into the table, which the shader then negates to point at the light.
|
|
291
|
-
|
|
290
|
+
// writes into the table, which the shader then negates to point at the light. Read off the
|
|
291
|
+
// CPU copy of the pose: the cascade is built here, on this side.
|
|
292
|
+
const direction = sun.transform.forward;
|
|
292
293
|
|
|
293
294
|
const view_matrix = camera.view_matrix;
|
|
294
295
|
const position = camera.transform;
|
|
@@ -311,7 +312,7 @@ export class GPUViewVolumetrics {
|
|
|
311
312
|
this.#sun_shadow_step_ws[cascade] = build_volumetrics_sun_shadow_transform({
|
|
312
313
|
ws_to_uvw: this.#sun_shadow_ws_to_uvw[cascade],
|
|
313
314
|
uvw_to_ws: this.#sun_shadow_uvw_to_ws[cascade],
|
|
314
|
-
light_direction: [direction
|
|
315
|
+
light_direction: [direction[0], direction[1], direction[2]],
|
|
315
316
|
camera_position: [position.translation_x, position.translation_y, position.translation_z],
|
|
316
317
|
camera_forward,
|
|
317
318
|
fov_y: camera.fov,
|