@woosh/meep-engine 3.38.0 → 3.40.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/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BinaryBuffer.d.ts +11 -0
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +30 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js +28 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +15 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +41 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts +12 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.js +27 -0
- package/src/core/geom/3d/gjk/gjk.js +3 -3
- package/src/core/geom/3d/gjk/gjk_distance.d.ts +94 -0
- package/src/core/geom/3d/gjk/gjk_distance.d.ts.map +1 -0
- package/src/core/geom/3d/gjk/gjk_distance.js +782 -0
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts +5 -4
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +14 -9
- package/src/core/geom/3d/gjk/minkowski_support.d.ts +11 -7
- package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/minkowski_support.js +33 -9
- package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/mpr.js +26 -5
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +15 -0
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +106 -33
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts +2 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.js +4 -8
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts +32 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.js +85 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts +3 -3
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.js +24 -34
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts +17 -0
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_integrate.js +45 -4
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts +16 -0
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_multiply.js +25 -0
- package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts +18 -0
- package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_nlerp.js +45 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts +17 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.js +155 -94
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +12 -0
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +31 -0
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts +20 -6
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +20 -6
- package/src/core/geom/3d/shape/BoxShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/BoxShape3D.js +5 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.js +5 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +25 -11
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +392 -22
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts +8 -7
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CylinderShape3D.js +12 -7
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +51 -8
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +260 -14
- package/src/core/geom/3d/shape/MeshShape3D.d.ts +61 -7
- package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/MeshShape3D.js +111 -20
- package/src/core/geom/3d/shape/PointShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PointShape3D.js +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.d.ts +9 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +36 -6
- package/src/core/geom/3d/shape/SphereShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/SphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/SphereShape3D.js +5 -1
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +12 -10
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +53 -19
- package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -1
- package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/Triangle3D.js +5 -1
- package/src/core/geom/3d/shape/UnionShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +19 -2
- package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_box.js +67 -5
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.js +61 -3
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.js +63 -4
- package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts +15 -0
- package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_plane.js +64 -2
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts +21 -0
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.js +66 -3
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts +2 -0
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts.map +1 -1
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.js +7 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts +41 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +538 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts +31 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.js +85 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts +18 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.js +19 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts +49 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.js +55 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts +42 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.js +85 -0
- package/src/core/geom/3d/triangle/tri3_closest_point.d.ts +13 -0
- package/src/core/geom/3d/triangle/tri3_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_closest_point.js +36 -1
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts +14 -0
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +40 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts +19 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply.js +32 -0
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +19 -0
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +32 -0
- package/src/engine/EngineHarness.d.ts.map +1 -1
- package/src/engine/EngineHarness.js +17 -4
- package/src/engine/asset/loaders/image/avif/threaded_image_encoder.js +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +135 -10
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +338 -105
- package/src/engine/control/first-person/abilities/Ability.d.ts +14 -5
- package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Ability.js +14 -5
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +16 -12
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +5 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +92 -14
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +218 -37
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +5 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +17 -10
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +27 -13
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +8 -0
- package/src/engine/ecs/transform/Transform64.d.ts +4 -2
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +10 -16
- package/src/engine/graphics/ecs/water/Water.d.ts +31 -72
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +59 -84
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +11 -49
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -18
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_3_4.js +10 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +33 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWaves.js +46 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts +17 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +26 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts +22 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.js +43 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +29 -3
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +102 -14
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/sampler2d_to_avif.js +8 -5
- package/src/engine/graphics3/WaterSystem.d.ts +31 -48
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +177 -261
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationLog.js +12 -6
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationSystem.js +39 -8
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +4 -5
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +1131 -97
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +90 -22
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +84 -24
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +59 -47
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +62 -55
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
- package/src/engine/physics/cloth/playground/garment_build.js +6 -6
- package/src/engine/physics/cloth/playground/garment_main.js +18 -14
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
- package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +703 -429
- package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +32 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +16 -8
- package/src/engine/physics/ecs/Collider.d.ts +7 -2
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -2
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +779 -81
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +5 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
- package/src/engine/physics/integration/integrate_position.d.ts +18 -19
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +40 -37
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +13 -4
- package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +322 -19
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
- package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +57 -79
- package/src/engine/physics/queries/raycast.d.ts +10 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +133 -9
- package/src/engine/physics/queries/shape_cast.d.ts +55 -24
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +2061 -245
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
- package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
- package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +458 -234
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
- package/src/format/image/avif/api/convert_to_rgba.d.ts +2 -2
- package/src/format/image/avif/api/convert_to_rgba.d.ts.map +1 -1
- package/src/format/image/avif/api/convert_to_rgba.js +10 -9
- package/src/format/image/avif/api/decode_avif.d.ts +2 -2
- package/src/format/image/avif/api/decode_avif.d.ts.map +1 -1
- package/src/format/image/avif/api/decode_avif.js +1 -1
- package/src/shade/assets/textures/split_sum.bin +0 -0
- package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUQueue.js +2 -1
- package/src/shade/playground/path_traced_media/README.md +78 -0
- package/src/shade/playground/path_traced_media/capture_radiance.d.ts +33 -0
- package/src/shade/playground/path_traced_media/capture_radiance.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/capture_radiance.js +174 -0
- package/src/shade/playground/path_traced_media/checks.d.ts +160 -0
- package/src/shade/playground/path_traced_media/checks.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/checks.js +921 -0
- package/src/shade/playground/path_traced_media/index.html +71 -0
- package/src/shade/playground/path_traced_media/main.d.ts +2 -0
- package/src/shade/playground/path_traced_media/main.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/main.js +440 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts +26 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.js +117 -0
- package/src/shade/playground/path_traced_media/views.d.ts +21 -0
- package/src/shade/playground/path_traced_media/views.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/views.js +161 -0
- package/src/shade/playground/sh_exponential/README.md +43 -0
- package/src/shade/playground/sh_exponential/index.html +59 -0
- package/src/shade/playground/sh_exponential/main.d.ts +2 -0
- package/src/shade/playground/sh_exponential/main.d.ts.map +1 -0
- package/src/shade/playground/sh_exponential/main.js +571 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts +46 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +270 -0
- package/src/shade/playground/ssr_reprojection/README.md +111 -103
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +68 -68
- package/src/shade/playground/ssr_reprojection/index.html +80 -79
- package/src/shade/playground/ssr_reprojection/main.js +256 -247
- package/src/shade/playground/ssr_variance/capture.js +96 -96
- package/src/shade/playground/ssr_variance/reference.js +78 -78
- package/src/shade/playground/vsm/README.md +96 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts +49 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -0
- package/src/shade/playground/vsm/VSMDebugOverlay.js +351 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts +8 -0
- package/src/shade/playground/vsm/clipmap_panel.d.ts.map +1 -0
- package/src/shade/playground/vsm/clipmap_panel.js +138 -0
- package/src/shade/playground/vsm/index.html +170 -0
- package/src/shade/playground/vsm/main.d.ts +2 -0
- package/src/shade/playground/vsm/main.d.ts.map +1 -0
- package/src/shade/playground/vsm/main.js +389 -0
- package/src/shade/playground/vsm/scenes.d.ts +52 -0
- package/src/shade/playground/vsm/scenes.d.ts.map +1 -0
- package/src/shade/playground/vsm/scenes.js +320 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts +38 -0
- package/src/shade/playground/vsm/verify_vsm.d.ts.map +1 -0
- package/src/shade/playground/vsm/verify_vsm.js +305 -0
- package/src/shade/playground/water_refraction/README.md +76 -19
- package/src/shade/playground/water_refraction/index.html +6 -8
- package/src/shade/playground/water_refraction/main.js +22 -12
- package/src/shade/playground/water_refraction/world.d.ts +3 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +19 -5
- package/src/shade/renderer/Renderer.d.ts +21 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +95 -1
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +8 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +18 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts +7 -0
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +11 -0
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts +3 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/SKINNING_BINDING_STRUCT.js +10 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_read_code.js +28 -0
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/serde/table_wgsl_gen_write_code.js +31 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +9 -1
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts +3 -0
- package/src/shade/renderer/geometry/MeshletGeometry.d.ts.map +1 -1
- package/src/shade/renderer/geometry/MeshletGeometry.js +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.js +6 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts +7 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.js +12 -12
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts +4 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.js +13 -9
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +2 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -9
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +79 -11
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts +2 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.js +2 -1
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.d.ts +1 -1
- package/src/shade/renderer/light/environment/rgbe/parse_rgbe.js +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts +2 -2
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/rgbe_byte_to_rgb_half.js +6 -14
- package/src/shade/renderer/light/environment/sh_exponential/README.md +171 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts +170 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.js +377 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts +16 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.js +27 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts +21 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +57 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts +33 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.js +90 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts +28 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.js +92 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts +39 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.js +44 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts +42 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.js +123 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +30 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +147 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts +24 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +79 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts +17 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +99 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts +24 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +104 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts +12 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +93 -0
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts +1 -1
- package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts +15 -0
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +17 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +36 -2
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +218 -18
- package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.js +10 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.js +24 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts +24 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.js +18 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts +20 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.js +43 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts +111 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
- package/src/shade/renderer/medium/ParticipatingMedium.js +211 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts +13 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts.map +1 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.js +33 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts +32 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts.map +1 -0
- package/src/shade/renderer/medium/participating_medium_serialization.js +181 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts +48 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.js +42 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts +23 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.js +45 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts +30 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.js +58 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts +24 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.js +53 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts +21 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.js +43 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts +25 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.js +66 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts +9 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.js +21 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts +28 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.js +49 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts +10 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.js +25 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts +47 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.js +174 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts +57 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.js +242 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts +41 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.js +231 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts +66 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.js +223 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts +96 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.js +145 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_presets.js +119 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.js +341 -0
- package/src/shade/renderer/particles/DESIGN.md +4 -2
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.js +71 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +16 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +6 -13
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +520 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +2 -0
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +188 -185
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.js +4 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +29 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts +79 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +360 -70
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +4 -3
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.js +99 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts +68 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.js +263 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts +55 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.js +148 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts +17 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.js +41 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts +20 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.js +105 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts +28 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.js +97 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.js +46 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts +25 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.js +75 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts +54 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.js +245 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts +42 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.js +236 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.js +97 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts +57 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.js +222 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts +88 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.js +304 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts +35 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.js +137 -0
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_build_histogram.js +5 -35
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts +12 -4
- package/src/shade/renderer/postprocess/ssr/SSR.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/SSR.js +36 -8
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/SSR_DENOISE_TILE_SIZE.js +2 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts +8 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_denoise_tile_active.js +40 -0
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +85 -84
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +150 -137
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts +3 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_classify.js +44 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts +5 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/shader_ssr_denoise_tile_dilate.js +35 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts +26 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.d.ts.map +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_graph_denoise_tiles.js +42 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts +1 -0
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +113 -105
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts +2 -0
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +177 -167
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/DEPTH_STENCIL_STATE_SHADOW.js +10 -0
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts +1 -2
- package/src/shade/renderer/rasterize/RasterizationJob.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/RasterizationJob.js +1 -2
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts +5 -6
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/construct_primitive_state.js +5 -6
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +9 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +14 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +13 -4
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +16 -0
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/build_lut_fog_parameters_jendersie_deon.js +4 -5
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/generate_dfg_texture.js +1 -5
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts +30 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_importance.js +54 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +71 -37
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.d.ts.map +1 -1
- package/src/shade/renderer/shader/type/serde/read_gpu_typed_buffer.js +3 -2
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +7 -7
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +7 -7
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts +19 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/DIRECTIONAL_SHADOWMAP_STRUCT.js +27 -0
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +43 -10
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +108 -48
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +74 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +681 -77
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +3 -1
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +3 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts +30 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.js +52 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts +8 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.js +7 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +8 -6
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +28 -34
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts +8 -0
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_sample_shadowmap_atlas_for_light.js +34 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.js +19 -14
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +5 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +27 -7
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_point2.js +137 -133
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +4 -4
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +4 -4
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js +14 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/DEFAULT_VSM_PAGE_BUDGET.js +15 -0
- package/src/shade/renderer/shadow/vsm/PLAN.md +440 -0
- package/src/shade/renderer/shadow/vsm/REVIEW_LEDGER.md +43 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts +42 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMMoverTracker.js +153 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts +327 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSMPageManager.js +1408 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_COVER_LEVEL_STEP.js +13 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts +63 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_FEEDBACK_LAYOUT.js +70 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts +11 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_LEVEL_LIMIT.js +10 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts +54 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_MOVER_LAYOUT.js +75 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_RECORD_STRUCT.js +85 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts +16 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/VSM_SLOT_STRUCT.js +29 -0
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +136 -25
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +280 -100
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts +39 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/graph_vsm_feedback.js +289 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts +18 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_virtual.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_addressing.js +75 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts +14 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_append_mover.js +45 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts +17 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_find_page.js +100 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts +15 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_vsm_page_view_projection.js +47 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts +26 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_demand.js +156 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_gather_counts.js +65 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts +30 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_movers.js +184 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts +23 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_skinned_movers.js +109 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts +56 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/shader_vsm_stale.js +211 -0
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/decode_typed_gpu_data.js +3 -13
- package/src/shade/renderer/texture/format/infer_format_from_parameters.d.ts.map +1 -1
- package/src/shade/renderer/texture/format/infer_format_from_parameters.js +2 -3
- package/src/shade/renderer/texture/texture_write_to_gpu.d.ts.map +1 -1
- package/src/shade/renderer/texture/texture_write_to_gpu.js +16 -16
- package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts +1 -1
- package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts +18 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.js +24 -3
- package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts +1 -1
- package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts +0 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.js +2 -23
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts +11 -0
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts.map +1 -0
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.js +34 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts +4 -90
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VTPhysicalCache.js +6 -210
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts +119 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/VTPhysicalSlots.js +245 -0
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_chunk_vt_lookup.js +3 -19
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts +13 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.d.ts.map +1 -0
- package/src/shade/renderer/texture/virtual/chunk_vt_page_table_entry.js +34 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +17 -8
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +35 -64
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +21 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +70 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts +31 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.js +86 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +6 -7
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +7 -7
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +20 -3
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +84 -35
- package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_gi.js +56 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts +2 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +52 -41
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +15 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +64 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +4 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +10 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts +3 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_bodies.js +3 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts +9 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.js +55 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts +8 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.js +17 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +4 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +32 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts +4 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_meshlets.js +69 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts +28 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.js +124 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.d.ts +12 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.js +75 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +27 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +75 -0
- package/src/shade/renderer/water/shader_water.d.ts +11 -5
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +262 -156
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +19 -9
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +25 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +128 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts +6 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_RECORD_STRUCT.js +23 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_tessellation.js +144 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +13 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.js +40 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts +14 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/graph_water_tessellation.js +34 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts +4 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_tiles.js +123 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_batch.js +85 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts +6 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_domain.js +83 -0
- package/src/shade/renderer/water/water_height_texture_from_sampler.d.ts.map +1 -1
- package/src/shade/renderer/water/water_height_texture_from_sampler.js +4 -3
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts +17 -0
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts.map +1 -0
- package/src/shade/renderer/water/water_missing_receiver_path.js +40 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +247 -23
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +18 -14
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +48 -6
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts +0 -2
- package/src/engine/graphics/ecs/water/WATER_SIZE.d.ts.map +0 -1
- package/src/engine/graphics/ecs/water/WATER_SIZE.js +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.d.ts +0 -22
- package/src/shade/renderer/light/GPUViewLightContext.d.ts.map +0 -1
- package/src/shade/renderer/light/GPUViewLightContext.js +0 -62
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +0 -29
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +0 -43
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts +0 -7
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.js +0 -6
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts +0 -27
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +0 -125
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts +0 -7
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +0 -41
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_RESIDENCE_WORKGROUP_TILE_RESOLUTION.js +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts +0 -3
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +0 -7
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +0 -24
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +0 -103
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts +0 -8
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_coarse_bounds_buffer.js +0 -34
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts +0 -10
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +0 -64
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts +0 -11
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +0 -34
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts +0 -2
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/render/vms_render_tiles.js +0 -11
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts +0 -20
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +0 -187
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts +0 -25
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +0 -220
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts +0 -19
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +0 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +0 -115
- package/src/shade/renderer/texture/encode/ENCODE_NOTES_2026_09_02.md +0 -462
|
@@ -24,8 +24,13 @@ import { GPUTextureContext } from "../../texture/GPUTextureContext.js";
|
|
|
24
24
|
import { RenderTarget } from "../../texture/RenderTarget.js";
|
|
25
25
|
import { View } from "../../view/View.js";
|
|
26
26
|
import { ViewManager } from "../../view/ViewManager.js";
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
27
|
+
import { generate_record_writer } from "../../buffer/table/serde/generate_record_writer.js";
|
|
28
|
+
import {
|
|
29
|
+
CSM_CASCADE_STRUCT,
|
|
30
|
+
CSM_CASTER_RANGE_UNKNOWN,
|
|
31
|
+
CSM_CASTER_RANGE_UNKNOWN_BITS
|
|
32
|
+
} from "./csm/CSM_CASCADE_STRUCT.js";
|
|
33
|
+
import { SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT } from "./csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.js";
|
|
29
34
|
import {
|
|
30
35
|
CSM_CASTER_RANGE_SETTINGS_STRUCT,
|
|
31
36
|
CSM_CASTER_RANGE_WORKGROUP_SIZE,
|
|
@@ -58,6 +63,13 @@ import { ShadowmapDrawSelector } from "./ShadowmapDrawSelector.js";
|
|
|
58
63
|
import { ShadowmapRegistry } from "./ShadowmapRegistry.js";
|
|
59
64
|
import { ShadowmapResolutionPolicy } from "./ShadowmapResolutionPolicy.js";
|
|
60
65
|
import { SpotLightShadowmap } from "./SpotLightShadowmap.js";
|
|
66
|
+
import { DEFAULT_VSM_FIRST_TEXEL_SIZE } from "../vsm/DEFAULT_VSM_FIRST_TEXEL_SIZE.js";
|
|
67
|
+
import { DEFAULT_VSM_PAGE_BUDGET } from "../vsm/DEFAULT_VSM_PAGE_BUDGET.js";
|
|
68
|
+
import { graph_vsm_feedback } from "../vsm/graph_vsm_feedback.js";
|
|
69
|
+
import { VirtualShadowMap } from "../vsm/VirtualShadowMap.js";
|
|
70
|
+
import { VSMMoverTracker } from "../vsm/VSMMoverTracker.js";
|
|
71
|
+
import { VSM_DEFAULT_REQUEST_CAPACITY } from "../vsm/VSM_FEEDBACK_LAYOUT.js";
|
|
72
|
+
import { VSM_SLOT_EMPTY } from "../vsm/VSM_SLOT_STRUCT.js";
|
|
61
73
|
|
|
62
74
|
/**
|
|
63
75
|
* @typedef {import("../../../device/ShadeGPUCommandContext.js").ShadeGPUCommandContext} ShadeGPUCommandContext
|
|
@@ -67,6 +79,7 @@ import { SpotLightShadowmap } from "./SpotLightShadowmap.js";
|
|
|
67
79
|
* @typedef {import("../../light/model/Light.js").Light} Light
|
|
68
80
|
* @typedef {import("../../scene/GPUSceneContext.js").GPUSceneContext} GPUSceneContext
|
|
69
81
|
* @typedef {import("./Shadowmap.js").Shadowmap} Shadowmap
|
|
82
|
+
* @typedef {import("../../buffer/table/serde/generate_record_writer.js").GPURecordWriter} GPURecordWriter
|
|
70
83
|
*/
|
|
71
84
|
|
|
72
85
|
const DEFAULT_SHADOWMAP_ATLAS_RESOLUTION = 4096 * 2;
|
|
@@ -88,6 +101,49 @@ const DEFAULT_SHADOWMAP_DIRECTIONAL_RESOLUTION = [
|
|
|
88
101
|
*/
|
|
89
102
|
const DEFAULT_SHADOWMAP_LOCAL_RESOLUTION = 128;
|
|
90
103
|
|
|
104
|
+
/**
|
|
105
|
+
* How every shadow caster is culled: as the main view culls it, so a caster's front faces are what
|
|
106
|
+
* reach the shadow map and acne is the shared rasterizer slope bias's to prevent
|
|
107
|
+
* ({@link DEPTH_STENCIL_STATE_SHADOW}). Casting back faces on top of that bias pushed a caster's
|
|
108
|
+
* steep far face past the ground at its base, a gap of 1–1.5 shadow texels at every contact.
|
|
109
|
+
* @type {Readonly<Record<number, GPUCullMode>>}
|
|
110
|
+
*/
|
|
111
|
+
const SHADOW_CULL_POLICY = CullPolicy.Standard;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Writes the CPU's half of a `shadow_cascade` row and leaves `caster_near`, the GPU's, alone.
|
|
115
|
+
* @type {GPURecordWriter}
|
|
116
|
+
*/
|
|
117
|
+
const CASCADE_VIEW_WRITER = generate_record_writer(CSM_CASCADE_STRUCT, ['atlas', 'projection']);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* A virtual shadow map's clipmap: levels, and pages on a side of each level's window. Twelve levels
|
|
121
|
+
* of 64² pages at the default 1 cm first texel reach from 41 m windows at level 0 to 168 km at the
|
|
122
|
+
* coarsest; see {@link VirtualShadowMap}.
|
|
123
|
+
*/
|
|
124
|
+
const VSM_LEVEL_COUNT = 12;
|
|
125
|
+
const VSM_PAGES_PER_LEVEL = 64;
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Texels on a side of a virtual shadow map page — the reference's and UE's 128 — and of the pool
|
|
129
|
+
* the map claims in the atlas for them, 30 × 30 slots of 128 plus {@link SHADOWMAP_ATLAS_BORDER}
|
|
130
|
+
* each side. A device whose atlas is smaller gets a pool of what fits.
|
|
131
|
+
*/
|
|
132
|
+
const VSM_PAGE_SIZE = 128;
|
|
133
|
+
const VSM_POOL_SIZE = 30 * (VSM_PAGE_SIZE + 2 * SHADOWMAP_ATLAS_BORDER);
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* How far either side of the camera's snapped depth along the light a virtual shadow map's depth
|
|
137
|
+
* range reaches, in metres. Casters further toward the light than this are clipped.
|
|
138
|
+
*/
|
|
139
|
+
const VSM_DEPTH_EXTENT = 1000;
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Frames a page something looked at is safe from eviction for: longer than a reading takes to come
|
|
143
|
+
* back with three readbacks in flight.
|
|
144
|
+
*/
|
|
145
|
+
const VSM_PROTECT_FRAMES = 6;
|
|
146
|
+
|
|
91
147
|
/**
|
|
92
148
|
* Shadows for a single scene
|
|
93
149
|
*/
|
|
@@ -177,6 +233,102 @@ export class GPUSceneShadowmapContext {
|
|
|
177
233
|
*/
|
|
178
234
|
use_tetrahedron_point_shadows = false;
|
|
179
235
|
|
|
236
|
+
/**
|
|
237
|
+
* Gives directional lights virtual shadow maps instead of cascades. The renderer pushes this
|
|
238
|
+
* from its `feature_virtual_shadow_maps` flag before each light update, alongside
|
|
239
|
+
* {@link enabled}; a flip is picked up in {@link process_lights}, which rebuilds every
|
|
240
|
+
* directional map of the other kind on the same pass, as it does for the point-light generator.
|
|
241
|
+
* @type {boolean}
|
|
242
|
+
*/
|
|
243
|
+
use_virtual_shadow_maps = false;
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Pages the scene's virtual shadow maps may render per frame. See {@link virtual_page_budget}.
|
|
247
|
+
* @type {number}
|
|
248
|
+
*/
|
|
249
|
+
#virtual_page_budget = DEFAULT_VSM_PAGE_BUDGET;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* @returns {number} pages per frame, across the scene's virtual shadow maps
|
|
253
|
+
*/
|
|
254
|
+
get virtual_page_budget() {
|
|
255
|
+
return this.#virtual_page_budget;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* The renderer pushes this from {@link Renderer.shadow_virtual_page_budget} every frame. Pages a
|
|
260
|
+
* frame wants beyond it wait, best first, for the next.
|
|
261
|
+
*
|
|
262
|
+
* @param {number} v pages per frame; zero draws none and leaves every page as it is
|
|
263
|
+
*/
|
|
264
|
+
set virtual_page_budget(v) {
|
|
265
|
+
assert.isNonNegativeInteger(v, 'virtual_page_budget');
|
|
266
|
+
|
|
267
|
+
this.#virtual_page_budget = v;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Added to the level every point of a virtual shadow map selects; positive is coarser. Pushed by
|
|
272
|
+
* the renderer every frame and written into each map's record, so a change takes effect on the
|
|
273
|
+
* next frame's demand and sampling alike.
|
|
274
|
+
* @type {number}
|
|
275
|
+
*/
|
|
276
|
+
virtual_lod_bias = 0;
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* World size of a virtual shadow map's level-0 texel. See {@link virtual_first_texel_size}.
|
|
280
|
+
* @type {number}
|
|
281
|
+
*/
|
|
282
|
+
#virtual_first_texel_size = DEFAULT_VSM_FIRST_TEXEL_SIZE;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @returns {number}
|
|
286
|
+
*/
|
|
287
|
+
get virtual_first_texel_size() {
|
|
288
|
+
return this.#virtual_first_texel_size;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Pushed from {@link Renderer.shadow_virtual_first_texel_size}. A change rebuilds every virtual
|
|
293
|
+
* shadow map in {@link process_lights}: every page of the clipmap changes size.
|
|
294
|
+
*
|
|
295
|
+
* @param {number} v metres, positive
|
|
296
|
+
*/
|
|
297
|
+
set virtual_first_texel_size(v) {
|
|
298
|
+
assert.isNumber(v, 'virtual_first_texel_size');
|
|
299
|
+
assert.greaterThan(v, 0, 'virtual_first_texel_size');
|
|
300
|
+
|
|
301
|
+
this.#virtual_first_texel_size = v;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
/**
|
|
305
|
+
* How many cascades a directional shadow map is built with. See {@link cascade_count}.
|
|
306
|
+
* @type {number}
|
|
307
|
+
*/
|
|
308
|
+
#cascade_count = SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT;
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* @returns {number} cascades per directional shadow map
|
|
312
|
+
*/
|
|
313
|
+
get cascade_count() {
|
|
314
|
+
return this.#cascade_count;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* The renderer pushes this from {@link Renderer.shadow_cascade_count} before each light update,
|
|
319
|
+
* alongside {@link enabled}. A change is picked up in {@link process_lights}: every directional
|
|
320
|
+
* map built with another count is evicted and rebuilt with this one in the same pass, which
|
|
321
|
+
* gives its atlas rects back first. A rebuilt map has no caster range until its first readback
|
|
322
|
+
* lands, two frames on, so its near planes are its slices' own until then.
|
|
323
|
+
*
|
|
324
|
+
* @param {number} v at least one
|
|
325
|
+
*/
|
|
326
|
+
set cascade_count(v) {
|
|
327
|
+
assert.isPositiveInteger(v, 'cascade_count');
|
|
328
|
+
|
|
329
|
+
this.#cascade_count = v;
|
|
330
|
+
}
|
|
331
|
+
|
|
180
332
|
/**
|
|
181
333
|
* Frame index of the most recent {@link select_for_draw} call. Passed to {@link draw} via
|
|
182
334
|
* this field so we don't have to thread it through the call again — draw() stamps
|
|
@@ -247,36 +399,56 @@ export class GPUSceneShadowmapContext {
|
|
|
247
399
|
#scene_ctx;
|
|
248
400
|
|
|
249
401
|
/**
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
402
|
+
* One word per row of the light database's `shadow_cascade` table, the accumulate pass's
|
|
403
|
+
* scratch, holding plain f32 bit patterns seeded to {@link CSM_CASTER_RANGE_UNKNOWN} and reset
|
|
404
|
+
* to it by each publish.
|
|
405
|
+
* @type {GPUBuffer|null}
|
|
253
406
|
*/
|
|
254
|
-
#
|
|
407
|
+
#caster_scratch = null;
|
|
255
408
|
|
|
256
409
|
/**
|
|
257
|
-
*
|
|
410
|
+
* Cascade rows {@link #caster_scratch} has words for.
|
|
258
411
|
* @type {number}
|
|
259
412
|
*/
|
|
260
|
-
#
|
|
413
|
+
#caster_scratch_rows = 0;
|
|
261
414
|
|
|
262
415
|
/**
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
* @type {GPUBuffer|null}
|
|
416
|
+
* The readback service's handle for the `shadow_cascade` table, taken on first use.
|
|
417
|
+
* @type {number}
|
|
266
418
|
*/
|
|
267
|
-
#
|
|
419
|
+
#cascade_table = -1;
|
|
268
420
|
|
|
269
421
|
/**
|
|
270
|
-
*
|
|
271
|
-
* @type {number}
|
|
422
|
+
* Scratch for {@link #write_shadow_records}: the CPU's half of one cascade row.
|
|
423
|
+
* @type {{atlas: number[], projection: ArrayLike<number>}}
|
|
272
424
|
*/
|
|
273
|
-
#
|
|
425
|
+
#cascade_record = { atlas: [0, 0, 0, 0], projection: null };
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Scratch for {@link #write_virtual_rows}: one `shadow_virtual_slot` row, and one window corner.
|
|
429
|
+
*/
|
|
430
|
+
#virtual_slot_record = { level: 0, x: 0, y: 0 };
|
|
431
|
+
#virtual_level_record = [0, 0];
|
|
432
|
+
|
|
433
|
+
/**
|
|
434
|
+
* Where the scene's casters were last frame, for the virtual shadow maps' mover pass. Made on the
|
|
435
|
+
* first frame a virtual map asks for feedback.
|
|
436
|
+
* @type {VSMMoverTracker|null}
|
|
437
|
+
*/
|
|
438
|
+
#vsm_movers = null;
|
|
274
439
|
|
|
275
440
|
/**
|
|
276
|
-
*
|
|
441
|
+
* Which virtual map's turn it is to take the first of the page budget's remainder; advanced by
|
|
442
|
+
* every {@link select_for_draw}.
|
|
277
443
|
* @type {number}
|
|
278
444
|
*/
|
|
279
|
-
#
|
|
445
|
+
#virtual_budget_turn = 0;
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* Scratch for {@link graph_virtual_feedback}: the scene's virtual maps this frame.
|
|
449
|
+
* @type {VirtualShadowMap[]}
|
|
450
|
+
*/
|
|
451
|
+
#vsm_feedback_maps = [];
|
|
280
452
|
|
|
281
453
|
/**
|
|
282
454
|
* @returns {number} number of shadowmaps rasterized in the most recent draw pass
|
|
@@ -405,45 +577,54 @@ export class GPUSceneShadowmapContext {
|
|
|
405
577
|
}
|
|
406
578
|
|
|
407
579
|
/**
|
|
408
|
-
* The readback service's handle for the light database's `
|
|
409
|
-
*
|
|
580
|
+
* The readback service's handle for the light database's `shadow_cascade` table — what a
|
|
581
|
+
* directional map asks its caster range through.
|
|
410
582
|
*
|
|
411
583
|
* @returns {number}
|
|
412
584
|
*/
|
|
413
|
-
get
|
|
414
|
-
if (this.#
|
|
415
|
-
this.#
|
|
585
|
+
get cascade_table() {
|
|
586
|
+
if (this.#cascade_table === -1) {
|
|
587
|
+
this.#cascade_table = this.#owner.readback.table('shadow_cascade');
|
|
416
588
|
}
|
|
417
589
|
|
|
418
|
-
return this.#
|
|
590
|
+
return this.#cascade_table;
|
|
419
591
|
}
|
|
420
592
|
|
|
421
593
|
/**
|
|
422
|
-
* Give a directional map
|
|
594
|
+
* Give a directional map a run of `shadow_cascade` rows, one per cascade, and their words of
|
|
595
|
+
* the scratch.
|
|
423
596
|
*
|
|
424
597
|
* @param {DirectionalLightShadowmap} map
|
|
425
598
|
*/
|
|
426
|
-
#
|
|
427
|
-
const
|
|
428
|
-
const
|
|
599
|
+
#claim_cascades(map) {
|
|
600
|
+
const count = map.cascade_count;
|
|
601
|
+
const records = new Array(count);
|
|
602
|
+
|
|
603
|
+
for (let i = 0; i < count; i++) {
|
|
604
|
+
// The CPU writes the whole row once, its range unknown; from here on it writes only its
|
|
605
|
+
// own fields and the GPU writes the range. The atlas and projection are written by the
|
|
606
|
+
// map's first draw, before anything samples them.
|
|
607
|
+
records[i] = {
|
|
608
|
+
atlas: [0, 0, 0, 0],
|
|
609
|
+
projection: new Float32Array(16),
|
|
610
|
+
caster_near: CSM_CASTER_RANGE_UNKNOWN,
|
|
611
|
+
};
|
|
612
|
+
}
|
|
429
613
|
|
|
430
|
-
|
|
431
|
-
this.#owner.database.get('shadow_csm_caster_range').set(row, {
|
|
432
|
-
near: new Float32Array(SHADOWMAP_CSM_CASCADE_COUNT).fill(CSM_CASTER_RANGE_UNKNOWN),
|
|
433
|
-
});
|
|
614
|
+
const first = this.#owner.database.get('shadow_cascade').add_run(records);
|
|
434
615
|
|
|
435
|
-
map.
|
|
436
|
-
map.caster_settings.base =
|
|
616
|
+
map.first_cascade = first;
|
|
617
|
+
map.caster_settings.base = first;
|
|
437
618
|
map.caster_range_valid = false;
|
|
438
619
|
map.caster_range.fill(NaN);
|
|
439
620
|
|
|
440
|
-
const rows_needed =
|
|
621
|
+
const rows_needed = first + count;
|
|
441
622
|
|
|
442
623
|
if (rows_needed > this.#caster_scratch_rows) {
|
|
443
624
|
// Grown by replacement rather than copied: every claimed row's words are unknown
|
|
444
625
|
// between frames — the publish resets them — so a fresh seed loses nothing.
|
|
445
626
|
const rows = Math.max(rows_needed, this.#caster_scratch_rows * 2, 4);
|
|
446
|
-
const words = new Uint32Array(rows
|
|
627
|
+
const words = new Uint32Array(rows).fill(CSM_CASTER_RANGE_UNKNOWN_BITS);
|
|
447
628
|
const device = this.#graphics.device;
|
|
448
629
|
|
|
449
630
|
if (this.#caster_scratch !== null) {
|
|
@@ -463,27 +644,281 @@ export class GPUSceneShadowmapContext {
|
|
|
463
644
|
}
|
|
464
645
|
|
|
465
646
|
/**
|
|
466
|
-
* Take a directional map's
|
|
647
|
+
* Take a directional map's cascade rows back. A readback still in flight for one of them is
|
|
648
|
+
* dropped, its row's generation having moved.
|
|
467
649
|
*
|
|
468
650
|
* @param {DirectionalLightShadowmap} map
|
|
469
651
|
*/
|
|
470
|
-
#
|
|
471
|
-
const
|
|
652
|
+
#release_cascades(map) {
|
|
653
|
+
const first = map.first_cascade;
|
|
472
654
|
|
|
473
|
-
if (
|
|
655
|
+
if (first === -1) {
|
|
474
656
|
return;
|
|
475
657
|
}
|
|
476
658
|
|
|
477
|
-
this.#owner.database.get('
|
|
478
|
-
this.#caster_rows_free.push(row);
|
|
659
|
+
const table = this.#owner.database.get('shadow_cascade');
|
|
479
660
|
|
|
480
|
-
map.
|
|
661
|
+
for (let i = 0; i < map.cascade_count; i++) {
|
|
662
|
+
table.remove(first + i);
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
map.first_cascade = -1;
|
|
481
666
|
map.caster_range_valid = false;
|
|
482
667
|
}
|
|
483
668
|
|
|
484
669
|
/**
|
|
485
|
-
*
|
|
486
|
-
*
|
|
670
|
+
* Give a virtual shadow map its rows of the light database: its `shadow_virtual` record, and its
|
|
671
|
+
* runs of window corners, page-table entries — every cell empty — and slots — every slot empty.
|
|
672
|
+
* The record is written for real by the map's first draw, before anything samples it.
|
|
673
|
+
*
|
|
674
|
+
* @param {VirtualShadowMap} map
|
|
675
|
+
*/
|
|
676
|
+
#claim_virtual(map) {
|
|
677
|
+
const database = this.#owner.database;
|
|
678
|
+
const manager = map.manager;
|
|
679
|
+
|
|
680
|
+
const levels = new Array(manager.level_count);
|
|
681
|
+
|
|
682
|
+
for (let i = 0; i < levels.length; i++) {
|
|
683
|
+
levels[i] = [0, 0];
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
const pages = new Array(manager.cell_count).fill(0);
|
|
687
|
+
const slots = new Array(manager.slots.capacity);
|
|
688
|
+
|
|
689
|
+
for (let i = 0; i < slots.length; i++) {
|
|
690
|
+
slots[i] = { level: VSM_SLOT_EMPTY, x: 0, y: 0 };
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
map.first_level = database.get('shadow_virtual_level').add_run(levels);
|
|
694
|
+
map.first_page = database.get('shadow_virtual_page').add_run(pages);
|
|
695
|
+
map.first_slot = database.get('shadow_virtual_slot').add_run(slots);
|
|
696
|
+
map.record_row = database.get('shadow_virtual').add(map.make_virtual_record());
|
|
697
|
+
|
|
698
|
+
// zeroed at creation: no slot has a mover over it yet
|
|
699
|
+
map.stale_flags = this.#graphics.device.createBuffer({
|
|
700
|
+
label: 'VSM / stale flags',
|
|
701
|
+
size: manager.slots.capacity * Uint32Array.BYTES_PER_ELEMENT,
|
|
702
|
+
usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
|
|
703
|
+
});
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* Take a virtual shadow map's rows back. The page and slot rows the GPU reads go with the
|
|
708
|
+
* record that names them.
|
|
709
|
+
*
|
|
710
|
+
* @param {VirtualShadowMap} map
|
|
711
|
+
*/
|
|
712
|
+
#release_virtual(map) {
|
|
713
|
+
if (map.record_row === -1) {
|
|
714
|
+
return;
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
const database = this.#owner.database;
|
|
718
|
+
const manager = map.manager;
|
|
719
|
+
|
|
720
|
+
const t_levels = database.get('shadow_virtual_level');
|
|
721
|
+
const t_pages = database.get('shadow_virtual_page');
|
|
722
|
+
const t_slots = database.get('shadow_virtual_slot');
|
|
723
|
+
|
|
724
|
+
for (let i = 0; i < manager.level_count; i++) {
|
|
725
|
+
t_levels.remove(map.first_level + i);
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
for (let i = 0; i < manager.cell_count; i++) {
|
|
729
|
+
t_pages.remove(map.first_page + i);
|
|
730
|
+
}
|
|
731
|
+
|
|
732
|
+
for (let i = 0; i < manager.slots.capacity; i++) {
|
|
733
|
+
t_slots.remove(map.first_slot + i);
|
|
734
|
+
}
|
|
735
|
+
|
|
736
|
+
database.get('shadow_virtual').remove(map.record_row);
|
|
737
|
+
|
|
738
|
+
map.record_row = -1;
|
|
739
|
+
map.first_level = -1;
|
|
740
|
+
map.first_page = -1;
|
|
741
|
+
map.first_slot = -1;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
/**
|
|
745
|
+
* Write the rows of a virtual shadow map that changed since the last frame — page-table entries
|
|
746
|
+
* of cells installed, evicted or scrolled away, slots that changed hands, and window corners —
|
|
747
|
+
* and then its record.
|
|
748
|
+
*
|
|
749
|
+
* @param {VirtualShadowMap} map
|
|
750
|
+
* @param {GPUDatabase} database
|
|
751
|
+
*/
|
|
752
|
+
#write_virtual_rows(map, database) {
|
|
753
|
+
const manager = map.manager;
|
|
754
|
+
|
|
755
|
+
const t_pages = database.get('shadow_virtual_page');
|
|
756
|
+
const t_slots = database.get('shadow_virtual_slot');
|
|
757
|
+
|
|
758
|
+
for (let i = 0; i < manager.dirty_cell_count; i++) {
|
|
759
|
+
const cell = manager.dirty_cell(i);
|
|
760
|
+
|
|
761
|
+
t_pages.set(map.first_page + cell, manager.cell_entry(cell));
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
const slot_record = this.#virtual_slot_record;
|
|
765
|
+
|
|
766
|
+
for (let i = 0; i < manager.dirty_slot_count; i++) {
|
|
767
|
+
const slot = manager.dirty_slot(i);
|
|
768
|
+
const level = manager.slot_level(slot);
|
|
769
|
+
|
|
770
|
+
slot_record.level = level === -1 ? VSM_SLOT_EMPTY : level;
|
|
771
|
+
slot_record.x = manager.slot_x(slot);
|
|
772
|
+
slot_record.y = manager.slot_y(slot);
|
|
773
|
+
|
|
774
|
+
t_slots.set(map.first_slot + slot, slot_record);
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
if (manager.levels_dirty) {
|
|
778
|
+
const t_levels = database.get('shadow_virtual_level');
|
|
779
|
+
const corner = this.#virtual_level_record;
|
|
780
|
+
|
|
781
|
+
for (let level = 0; level < manager.level_count; level++) {
|
|
782
|
+
corner[0] = manager.origin_x(level);
|
|
783
|
+
corner[1] = manager.origin_y(level);
|
|
784
|
+
|
|
785
|
+
t_levels.set(map.first_level + level, corner);
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
|
|
789
|
+
manager.clear_dirty();
|
|
790
|
+
|
|
791
|
+
database.get('shadow_virtual').set(map.record_row, map.make_virtual_record());
|
|
792
|
+
}
|
|
793
|
+
|
|
794
|
+
/**
|
|
795
|
+
* Record this frame's virtual shadow map feedback — the casters that moved, the pages they made
|
|
796
|
+
* stale, the pages the view's pixels ask for — into the frame's `Shading` graph once the main
|
|
797
|
+
* view's depth exists, and read it back for the maps' next frames. Does nothing in a scene
|
|
798
|
+
* without virtual shadow maps. See {@link graph_vsm_feedback}.
|
|
799
|
+
*
|
|
800
|
+
* @param {Object} options
|
|
801
|
+
* @param {FrameGraph} options.graph
|
|
802
|
+
* @param {import("../../view/GPUViewContext.js").GPUViewContext} options.view the main view
|
|
803
|
+
* @param {number} options.depth graph handle of the main view's depth
|
|
804
|
+
*/
|
|
805
|
+
graph_virtual_feedback({ graph, view, depth }) {
|
|
806
|
+
const maps = this.#vsm_feedback_maps;
|
|
807
|
+
const all = this.#registry.maps;
|
|
808
|
+
|
|
809
|
+
maps.length = 0;
|
|
810
|
+
|
|
811
|
+
for (let i = 0; i < all.length; i++) {
|
|
812
|
+
if (all[i].isVirtualShadowMap === true) {
|
|
813
|
+
maps.push(all[i]);
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
if (maps.length === 0) {
|
|
818
|
+
// no virtual map to feed: the casters' memory goes, and starts afresh with the next map
|
|
819
|
+
if (this.#vsm_movers !== null) {
|
|
820
|
+
this.#vsm_movers.destroy();
|
|
821
|
+
this.#vsm_movers = null;
|
|
822
|
+
}
|
|
823
|
+
|
|
824
|
+
return;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
if (this.#vsm_movers === null) {
|
|
828
|
+
this.#vsm_movers = new VSMMoverTracker(this.#graphics.device);
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
graph_vsm_feedback({
|
|
832
|
+
graph,
|
|
833
|
+
view,
|
|
834
|
+
depth,
|
|
835
|
+
maps,
|
|
836
|
+
tracker: this.#vsm_movers,
|
|
837
|
+
light_database: this.#owner.database,
|
|
838
|
+
});
|
|
839
|
+
|
|
840
|
+
// the graph holds what it needs; don't keep the maps reachable from here until next frame
|
|
841
|
+
maps.length = 0;
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
/**
|
|
845
|
+
* Rasterize the pages a virtual shadow map chose this frame, each into its slot of the pool
|
|
846
|
+
* through a pooled view aimed at the page — the {@link #draw_direct} path, with the Fast
|
|
847
|
+
* pipeline: a pooled view's last depth belongs to some other page, and occlusion buys nothing on
|
|
848
|
+
* a slot.
|
|
849
|
+
*
|
|
850
|
+
* @param {VirtualShadowMap} map
|
|
851
|
+
* @param {ShadeGPUCommandContext} command_ctx
|
|
852
|
+
*/
|
|
853
|
+
#draw_virtual(map, command_ctx) {
|
|
854
|
+
const manager = map.manager;
|
|
855
|
+
const count = manager.job_count;
|
|
856
|
+
|
|
857
|
+
if (count === 0) {
|
|
858
|
+
return;
|
|
859
|
+
}
|
|
860
|
+
|
|
861
|
+
const views = map.views;
|
|
862
|
+
|
|
863
|
+
while (views.length < count) {
|
|
864
|
+
const camera = new OrthographicCamera();
|
|
865
|
+
camera.update();
|
|
866
|
+
|
|
867
|
+
const view = new View(camera, this.#scene);
|
|
868
|
+
view.label = `Virtual Shadow Page ${views.length}`;
|
|
869
|
+
|
|
870
|
+
views.push(view);
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
const graph = new FrameGraph("virtual shadow pages");
|
|
874
|
+
const jobs = new Array(count);
|
|
875
|
+
|
|
876
|
+
const pool = map.layout[0];
|
|
877
|
+
const slot_size = map.slot_size;
|
|
878
|
+
const per_axis = manager.slots.slots_per_axis;
|
|
879
|
+
|
|
880
|
+
for (let i = 0; i < count; i++) {
|
|
881
|
+
const view = views[i];
|
|
882
|
+
|
|
883
|
+
map.aim_page_camera(view.camera, manager.job_level(i), manager.job_x(i), manager.job_y(i));
|
|
884
|
+
|
|
885
|
+
const view_ctx = this.shadow_view_manager.obtain(view);
|
|
886
|
+
|
|
887
|
+
view_ctx.update(this.#graphics);
|
|
888
|
+
view_ctx.setViewportSize(slot_size, slot_size);
|
|
889
|
+
|
|
890
|
+
const slot = manager.job_slot(i);
|
|
891
|
+
|
|
892
|
+
const job = new RasterizationJob();
|
|
893
|
+
job.pipeline_type = RasterizationPipelineType.Fast;
|
|
894
|
+
job.opaque_pass = shadow_rasterization_pass_descriptor;
|
|
895
|
+
job.alpha_tested_pass = shadow_rasterization_alpha_tested_pass_descriptor;
|
|
896
|
+
job.cull_policy = SHADOW_CULL_POLICY;
|
|
897
|
+
job.render_target = this.#render_target;
|
|
898
|
+
job.view_ctx = view_ctx;
|
|
899
|
+
job.viewport = [
|
|
900
|
+
pool.x0 + (slot % per_axis) * slot_size,
|
|
901
|
+
pool.y0 + ((slot / per_axis) | 0) * slot_size,
|
|
902
|
+
slot_size,
|
|
903
|
+
slot_size,
|
|
904
|
+
];
|
|
905
|
+
|
|
906
|
+
jobs[i] = job;
|
|
907
|
+
}
|
|
908
|
+
|
|
909
|
+
execute_rasterization_jobs({
|
|
910
|
+
jobs,
|
|
911
|
+
limits: this.#graphics.collection_limits,
|
|
912
|
+
command_ctx,
|
|
913
|
+
graph,
|
|
914
|
+
});
|
|
915
|
+
|
|
916
|
+
command_ctx.encodeGraph(graph);
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
/**
|
|
920
|
+
* Measure this frame's casters against the map's cascades and publish the result to their
|
|
921
|
+
* rows, for the readback to carry to the next frame's fit.
|
|
487
922
|
*
|
|
488
923
|
* @param {DirectionalLightShadowmap} map
|
|
489
924
|
* @param {ShadeGPUCommandContext} command_ctx
|
|
@@ -494,14 +929,24 @@ export class GPUSceneShadowmapContext {
|
|
|
494
929
|
const group_count = meshes.dispatch_group_count(CSM_CASTER_RANGE_WORKGROUP_SIZE);
|
|
495
930
|
|
|
496
931
|
if (group_count === 0) {
|
|
497
|
-
// nothing to
|
|
932
|
+
// nothing to measure: the rows keep the last range published into them — unknown if
|
|
933
|
+
// there never was one, and otherwise stale, which pushes the near planes back further
|
|
934
|
+
// than they need to go and costs nothing but depth precision
|
|
498
935
|
return;
|
|
499
936
|
}
|
|
500
937
|
|
|
501
938
|
const ranges = this.#caster_scratch;
|
|
939
|
+
const caster_settings = map.caster_settings;
|
|
940
|
+
const planes_words = caster_settings.planes_words;
|
|
502
941
|
|
|
503
942
|
// transient: the frusta differ every frame, so there is nothing worth keeping between them
|
|
504
|
-
const settings = command_ctx.allocateTransientValueBuffer(CSM_CASTER_RANGE_SETTINGS_STRUCT,
|
|
943
|
+
const settings = command_ctx.allocateTransientValueBuffer(CSM_CASTER_RANGE_SETTINGS_STRUCT, caster_settings);
|
|
944
|
+
const planes = command_ctx.allocateTransientBufferAndLoad(
|
|
945
|
+
planes_words.buffer,
|
|
946
|
+
GPUBufferUsage.STORAGE,
|
|
947
|
+
planes_words.byteOffset,
|
|
948
|
+
planes_words.byteLength
|
|
949
|
+
);
|
|
505
950
|
|
|
506
951
|
shader_csm_caster_range_accumulate.dispatch({
|
|
507
952
|
encoder: command_ctx,
|
|
@@ -509,6 +954,7 @@ export class GPUSceneShadowmapContext {
|
|
|
509
954
|
bindings: {
|
|
510
955
|
scene_database: scene_ctx.scene_database_buffer,
|
|
511
956
|
settings,
|
|
957
|
+
planes,
|
|
512
958
|
ranges,
|
|
513
959
|
},
|
|
514
960
|
});
|
|
@@ -520,9 +966,8 @@ export class GPUSceneShadowmapContext {
|
|
|
520
966
|
ranges,
|
|
521
967
|
light_database: this.#owner.database.buffer,
|
|
522
968
|
publish: {
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
cascade_count: map.caster_settings.cascade_count,
|
|
969
|
+
first_cascade: map.first_cascade,
|
|
970
|
+
cascade_count: map.cascade_count,
|
|
526
971
|
},
|
|
527
972
|
},
|
|
528
973
|
});
|
|
@@ -607,7 +1052,8 @@ export class GPUSceneShadowmapContext {
|
|
|
607
1052
|
* up (no forced redraw).
|
|
608
1053
|
* 4. **Score + select.** Delegated to {@link ShadowmapDrawSelector}, which sets `should_draw`
|
|
609
1054
|
* on the winners and reports the view spend and whether any candidate went unmet:
|
|
610
|
-
* - **Directional** → always selected (infinite score);
|
|
1055
|
+
* - **Directional** → always selected (infinite score); its views are counted in the
|
|
1056
|
+
* frame's spend but not charged against the budget the local lights compete for.
|
|
611
1057
|
* - **Local, off-screen** (`projected_area_px <= 0`) → skipped entirely.
|
|
612
1058
|
* - **Local, in-view, invalid** → MUST draw. `is_invalid` means the committed layout
|
|
613
1059
|
* has never held valid depth (freshly created map); sampling it would display
|
|
@@ -654,9 +1100,44 @@ export class GPUSceneShadowmapContext {
|
|
|
654
1100
|
|
|
655
1101
|
// Step 2: recompute projected areas. Writing onto the map so the policy + scorer can
|
|
656
1102
|
// just read `map.projected_area_px` without threading a parallel array through.
|
|
1103
|
+
let virtual_maps = 0;
|
|
1104
|
+
|
|
657
1105
|
for (let i = 0; i < n; i++) {
|
|
658
1106
|
const m = shadowmaps[i];
|
|
659
1107
|
m.projected_area_px = compute_light_projected_area_px(m.light, main_camera, view_resolution);
|
|
1108
|
+
|
|
1109
|
+
if (m.isVirtualShadowMap === true) {
|
|
1110
|
+
virtual_maps++;
|
|
1111
|
+
}
|
|
1112
|
+
}
|
|
1113
|
+
|
|
1114
|
+
if (virtual_maps > 0) {
|
|
1115
|
+
// the scene's page budget, shared out between its virtual maps: all of it to the one
|
|
1116
|
+
// map of a scene with one sun; with several, the pages that do not divide evenly go
|
|
1117
|
+
// round them a frame at a time, so a budget below the suns' count starves none
|
|
1118
|
+
const budget = this.#virtual_page_budget;
|
|
1119
|
+
const share = Math.floor(budget / virtual_maps);
|
|
1120
|
+
const remainder = budget - share * virtual_maps;
|
|
1121
|
+
const first_extra = this.#virtual_budget_turn++ % virtual_maps;
|
|
1122
|
+
|
|
1123
|
+
let k = 0;
|
|
1124
|
+
|
|
1125
|
+
for (let i = 0; i < n; i++) {
|
|
1126
|
+
const m = shadowmaps[i];
|
|
1127
|
+
|
|
1128
|
+
if (m.isVirtualShadowMap !== true) {
|
|
1129
|
+
continue;
|
|
1130
|
+
}
|
|
1131
|
+
|
|
1132
|
+
const turn = (k - first_extra + virtual_maps) % virtual_maps;
|
|
1133
|
+
|
|
1134
|
+
// what its update works with this frame
|
|
1135
|
+
m.page_budget = share + (turn < remainder ? 1 : 0);
|
|
1136
|
+
m.lod_bias = this.virtual_lod_bias;
|
|
1137
|
+
m.view_height = view_resolution[1];
|
|
1138
|
+
|
|
1139
|
+
k++;
|
|
1140
|
+
}
|
|
660
1141
|
}
|
|
661
1142
|
|
|
662
1143
|
// Step 2b: a cached map whose last cut of virtual geometry was clamped, and under which pages
|
|
@@ -724,6 +1205,9 @@ export class GPUSceneShadowmapContext {
|
|
|
724
1205
|
const t_point = database.get('shadow_point');
|
|
725
1206
|
const t_spot = database.get('shadow_spot');
|
|
726
1207
|
const t_directional = database.get('shadow_directional');
|
|
1208
|
+
const t_cascade = database.get('shadow_cascade');
|
|
1209
|
+
|
|
1210
|
+
const cascade_record = this.#cascade_record;
|
|
727
1211
|
|
|
728
1212
|
const maps = this.#registry.maps;
|
|
729
1213
|
let pc = 0;
|
|
@@ -749,26 +1233,57 @@ export class GPUSceneShadowmapContext {
|
|
|
749
1233
|
continue;
|
|
750
1234
|
}
|
|
751
1235
|
|
|
1236
|
+
if (map.isVirtualShadowMap === true) {
|
|
1237
|
+
// its rows change with its pages, whether or not anything else about it did
|
|
1238
|
+
this.#write_virtual_rows(map, database);
|
|
1239
|
+
}
|
|
1240
|
+
|
|
752
1241
|
if (map.metadata_changed) {
|
|
753
1242
|
table.set(slot, map.make_record());
|
|
1243
|
+
|
|
1244
|
+
if (light.isDirectionalLight && map.isVirtualShadowMap !== true) {
|
|
1245
|
+
// the record names the cascades; their rows hold what to sample — written a
|
|
1246
|
+
// field at a time, since the GPU owns the rest of the row
|
|
1247
|
+
for (let j = 0; j < map.cascade_count; j++) {
|
|
1248
|
+
t_cascade.set_fields(map.first_cascade + j, map.make_cascade_record(j, cascade_record), CASCADE_VIEW_WRITER);
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
|
|
754
1252
|
map.metadata_changed = false;
|
|
755
1253
|
}
|
|
756
1254
|
}
|
|
757
1255
|
|
|
758
|
-
|
|
759
|
-
|
|
1256
|
+
this.#trim_shadow_records(database, pc, sc, dc);
|
|
1257
|
+
}
|
|
1258
|
+
|
|
1259
|
+
/**
|
|
1260
|
+
* Free the shadow_* slots past the counts given — slots a previous write filled that no map
|
|
1261
|
+
* holds any more — so disused entries don't leak. A `shadow_directional` slot left standing
|
|
1262
|
+
* would go on naming cascade rows its map gave back.
|
|
1263
|
+
*
|
|
1264
|
+
* @param {GPUDatabase} database
|
|
1265
|
+
* @param {number} point_count slots of `shadow_point` still in use
|
|
1266
|
+
* @param {number} spot_count slots of `shadow_spot` still in use
|
|
1267
|
+
* @param {number} directional_count slots of `shadow_directional` still in use
|
|
1268
|
+
*/
|
|
1269
|
+
#trim_shadow_records(database, point_count, spot_count, directional_count) {
|
|
1270
|
+
const t_point = database.get('shadow_point');
|
|
1271
|
+
const t_spot = database.get('shadow_spot');
|
|
1272
|
+
const t_directional = database.get('shadow_directional');
|
|
1273
|
+
|
|
1274
|
+
for (let i = point_count; i < this.#prev_point_count; i++) {
|
|
760
1275
|
t_point.remove(i);
|
|
761
1276
|
}
|
|
762
|
-
for (let i =
|
|
1277
|
+
for (let i = spot_count; i < this.#prev_spot_count; i++) {
|
|
763
1278
|
t_spot.remove(i);
|
|
764
1279
|
}
|
|
765
|
-
for (let i =
|
|
1280
|
+
for (let i = directional_count; i < this.#prev_directional_count; i++) {
|
|
766
1281
|
t_directional.remove(i);
|
|
767
1282
|
}
|
|
768
1283
|
|
|
769
|
-
this.#prev_point_count =
|
|
770
|
-
this.#prev_spot_count =
|
|
771
|
-
this.#prev_directional_count =
|
|
1284
|
+
this.#prev_point_count = point_count;
|
|
1285
|
+
this.#prev_spot_count = spot_count;
|
|
1286
|
+
this.#prev_directional_count = directional_count;
|
|
772
1287
|
}
|
|
773
1288
|
|
|
774
1289
|
/**
|
|
@@ -834,7 +1349,9 @@ export class GPUSceneShadowmapContext {
|
|
|
834
1349
|
|
|
835
1350
|
const light = map.light;
|
|
836
1351
|
|
|
837
|
-
if (
|
|
1352
|
+
if (map.isVirtualShadowMap === true) {
|
|
1353
|
+
this.#draw_virtual(map, command_ctx);
|
|
1354
|
+
} else if (light.isDirectionalLight || light.isSpotLight) {
|
|
838
1355
|
this.#draw_direct(map, command_ctx);
|
|
839
1356
|
} else if (light.isPointLight) {
|
|
840
1357
|
if (map.isTetrahedron) {
|
|
@@ -899,7 +1416,7 @@ export class GPUSceneShadowmapContext {
|
|
|
899
1416
|
* @param {ShadeGPUCommandContext} command_ctx
|
|
900
1417
|
*/
|
|
901
1418
|
#draw_direct(map, command_ctx) {
|
|
902
|
-
if (map.light.isDirectionalLight === true && map.
|
|
1419
|
+
if (map.light.isDirectionalLight === true && map.first_cascade !== -1) {
|
|
903
1420
|
// this frame's casters against this frame's cascades, for next frame's fit
|
|
904
1421
|
this.#measure_caster_range(map, command_ctx);
|
|
905
1422
|
}
|
|
@@ -924,7 +1441,7 @@ export class GPUSceneShadowmapContext {
|
|
|
924
1441
|
const job = new RasterizationJob();
|
|
925
1442
|
job.opaque_pass = shadow_rasterization_pass_descriptor;
|
|
926
1443
|
job.alpha_tested_pass = shadow_rasterization_alpha_tested_pass_descriptor;
|
|
927
|
-
job.cull_policy =
|
|
1444
|
+
job.cull_policy = SHADOW_CULL_POLICY;
|
|
928
1445
|
job.render_target = this.#render_target;
|
|
929
1446
|
job.view_ctx = view_ctx;
|
|
930
1447
|
job.viewport = [atlas_aabb.x0, atlas_aabb.y0, atlas_aabb.width, atlas_aabb.height];
|
|
@@ -1042,7 +1559,7 @@ export class GPUSceneShadowmapContext {
|
|
|
1042
1559
|
job.pipeline_type = RasterizationPipelineType.Fast;
|
|
1043
1560
|
job.opaque_pass = shadow_rasterization_pass_descriptor;
|
|
1044
1561
|
job.alpha_tested_pass = shadow_rasterization_alpha_tested_pass_descriptor;
|
|
1045
|
-
job.cull_policy =
|
|
1562
|
+
job.cull_policy = SHADOW_CULL_POLICY;
|
|
1046
1563
|
job.render_target = null;
|
|
1047
1564
|
job.view_ctx = view_ctx;
|
|
1048
1565
|
job.viewport = [
|
|
@@ -1188,7 +1705,7 @@ export class GPUSceneShadowmapContext {
|
|
|
1188
1705
|
job.pipeline_type = RasterizationPipelineType.Fast;
|
|
1189
1706
|
job.opaque_pass = shadow_rasterization_pass_descriptor;
|
|
1190
1707
|
job.alpha_tested_pass = shadow_rasterization_alpha_tested_pass_descriptor;
|
|
1191
|
-
job.cull_policy =
|
|
1708
|
+
job.cull_policy = SHADOW_CULL_POLICY;
|
|
1192
1709
|
job.render_target = null;
|
|
1193
1710
|
job.view_ctx = view_ctx;
|
|
1194
1711
|
job.viewport = [
|
|
@@ -1320,8 +1837,13 @@ export class GPUSceneShadowmapContext {
|
|
|
1320
1837
|
// free the per-view/-camera GPU contexts — without this an evicted map's buffers leak
|
|
1321
1838
|
this.#release_map_gpu_contexts(map);
|
|
1322
1839
|
|
|
1323
|
-
if (map.
|
|
1324
|
-
this.#
|
|
1840
|
+
if (map.isVirtualShadowMap === true) {
|
|
1841
|
+
this.#release_virtual(map);
|
|
1842
|
+
|
|
1843
|
+
// a reading of its feedback still on its way back finds the map gone and drops itself
|
|
1844
|
+
map.destroy();
|
|
1845
|
+
} else if (map.light.isDirectionalLight === true) {
|
|
1846
|
+
this.#release_cascades(map);
|
|
1325
1847
|
}
|
|
1326
1848
|
|
|
1327
1849
|
map.light._gpu_shadowmap_id = -1;
|
|
@@ -1362,6 +1884,12 @@ export class GPUSceneShadowmapContext {
|
|
|
1362
1884
|
this.#evict_map(shadowmaps[i]);
|
|
1363
1885
|
}
|
|
1364
1886
|
registry.clear();
|
|
1887
|
+
|
|
1888
|
+
// No draw runs while shadows are off, and the draw is what frees disused slots — so
|
|
1889
|
+
// they are freed here, or a directional slot would name the cascade rows just given
|
|
1890
|
+
// back for as long as shadows stay off.
|
|
1891
|
+
this.#trim_shadow_records(this.#owner.database, 0, 0, 0);
|
|
1892
|
+
|
|
1365
1893
|
return had_maps;
|
|
1366
1894
|
}
|
|
1367
1895
|
|
|
@@ -1370,8 +1898,42 @@ export class GPUSceneShadowmapContext {
|
|
|
1370
1898
|
let changed = false;
|
|
1371
1899
|
|
|
1372
1900
|
const use_tetra = this.use_tetrahedron_point_shadows;
|
|
1901
|
+
const use_virtual = this.use_virtual_shadow_maps;
|
|
1902
|
+
const cascade_count = this.#cascade_count;
|
|
1903
|
+
const first_texel_size = this.#virtual_first_texel_size;
|
|
1373
1904
|
const newcomers = this.#reconcile_newcomers;
|
|
1374
1905
|
|
|
1906
|
+
/**
|
|
1907
|
+
* Whether a map was built under settings that no longer hold — a point map by the other
|
|
1908
|
+
* generator (cube vs tetra), whose face count and draw path no longer match, a directional
|
|
1909
|
+
* map of the other kind (cascades vs virtual), one with another number of cascades, or a
|
|
1910
|
+
* virtual one with another first texel — and so must be rebuilt.
|
|
1911
|
+
*
|
|
1912
|
+
* @param {Shadowmap} map
|
|
1913
|
+
* @returns {boolean}
|
|
1914
|
+
*/
|
|
1915
|
+
const is_outdated = (map) => {
|
|
1916
|
+
const light = map.light;
|
|
1917
|
+
|
|
1918
|
+
if (light.isPointLight) {
|
|
1919
|
+
return Boolean(map.isTetrahedron) !== use_tetra;
|
|
1920
|
+
}
|
|
1921
|
+
|
|
1922
|
+
if (light.isDirectionalLight) {
|
|
1923
|
+
const is_virtual = map.isVirtualShadowMap === true;
|
|
1924
|
+
|
|
1925
|
+
if (is_virtual !== use_virtual) {
|
|
1926
|
+
return true;
|
|
1927
|
+
}
|
|
1928
|
+
|
|
1929
|
+
return is_virtual
|
|
1930
|
+
? map.manager.first_texel_size !== first_texel_size
|
|
1931
|
+
: map.cascade_count !== cascade_count;
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
return false;
|
|
1935
|
+
};
|
|
1936
|
+
|
|
1375
1937
|
registry.begin_reconcile();
|
|
1376
1938
|
newcomers.length = 0;
|
|
1377
1939
|
|
|
@@ -1395,10 +1957,10 @@ export class GPUSceneShadowmapContext {
|
|
|
1395
1957
|
continue;
|
|
1396
1958
|
}
|
|
1397
1959
|
|
|
1398
|
-
// A
|
|
1399
|
-
//
|
|
1400
|
-
//
|
|
1401
|
-
if (
|
|
1960
|
+
// A map built under settings that have since changed must be rebuilt. Pass 2 drops it
|
|
1961
|
+
// on the same test, giving its atlas rects back first; queueing the rebuild here lands
|
|
1962
|
+
// it in this pass rather than the next.
|
|
1963
|
+
if (is_outdated(map)) {
|
|
1402
1964
|
newcomers.push(light);
|
|
1403
1965
|
}
|
|
1404
1966
|
}
|
|
@@ -1408,12 +1970,8 @@ export class GPUSceneShadowmapContext {
|
|
|
1408
1970
|
// splice indices stay stable.
|
|
1409
1971
|
for (let i = shadowmaps.length - 1; i >= 0; i--) {
|
|
1410
1972
|
const map = shadowmaps[i];
|
|
1411
|
-
const light = map.light;
|
|
1412
|
-
|
|
1413
|
-
const generator_mismatch = light.isPointLight
|
|
1414
|
-
&& Boolean(map.isTetrahedron) !== use_tetra;
|
|
1415
1973
|
|
|
1416
|
-
if (registry.is_marked(map) && !
|
|
1974
|
+
if (registry.is_marked(map) && !is_outdated(map)) {
|
|
1417
1975
|
continue;
|
|
1418
1976
|
}
|
|
1419
1977
|
this.#evict_map(map);
|
|
@@ -1422,12 +1980,12 @@ export class GPUSceneShadowmapContext {
|
|
|
1422
1980
|
}
|
|
1423
1981
|
|
|
1424
1982
|
const add_directional = (light) => {
|
|
1425
|
-
const map = new DirectionalLightShadowmap();
|
|
1983
|
+
const map = new DirectionalLightShadowmap(cascade_count);
|
|
1426
1984
|
map.light = light;
|
|
1427
1985
|
|
|
1428
1986
|
const bound = [];
|
|
1429
1987
|
try {
|
|
1430
|
-
for (let j = 0; j <
|
|
1988
|
+
for (let j = 0; j < cascade_count; j++) {
|
|
1431
1989
|
const resolution_index = Math.min(j, DEFAULT_SHADOWMAP_DIRECTIONAL_RESOLUTION.length - 1);
|
|
1432
1990
|
const resolution = DEFAULT_SHADOWMAP_DIRECTIONAL_RESOLUTION[resolution_index];
|
|
1433
1991
|
|
|
@@ -1452,7 +2010,44 @@ export class GPUSceneShadowmapContext {
|
|
|
1452
2010
|
throw e;
|
|
1453
2011
|
}
|
|
1454
2012
|
|
|
1455
|
-
this.#
|
|
2013
|
+
this.#claim_cascades(map);
|
|
2014
|
+
registry.add(map);
|
|
2015
|
+
};
|
|
2016
|
+
|
|
2017
|
+
const add_virtual = (light) => {
|
|
2018
|
+
// the pool: as many whole slots as fit the default pool, or the atlas when it is smaller
|
|
2019
|
+
const slot_size = VSM_PAGE_SIZE + 2 * SHADOWMAP_ATLAS_BORDER;
|
|
2020
|
+
const pool_side = Math.floor(Math.min(VSM_POOL_SIZE, this.atlas.size.x, this.atlas.size.y) / slot_size) * slot_size;
|
|
2021
|
+
|
|
2022
|
+
// the pool first: an atlas without room for it throws here, every frame the sun is
|
|
2023
|
+
// retried, and the map's page bookkeeping — megabytes — is not built for nothing
|
|
2024
|
+
const pool = this.bind(pool_side);
|
|
2025
|
+
|
|
2026
|
+
let map;
|
|
2027
|
+
|
|
2028
|
+
try {
|
|
2029
|
+
map = new VirtualShadowMap({
|
|
2030
|
+
level_count: VSM_LEVEL_COUNT,
|
|
2031
|
+
pages_per_level: VSM_PAGES_PER_LEVEL,
|
|
2032
|
+
first_texel_size,
|
|
2033
|
+
page_size: VSM_PAGE_SIZE,
|
|
2034
|
+
border: SHADOWMAP_ATLAS_BORDER,
|
|
2035
|
+
pool_size: pool_side,
|
|
2036
|
+
request_capacity: VSM_DEFAULT_REQUEST_CAPACITY,
|
|
2037
|
+
protect_frames: VSM_PROTECT_FRAMES,
|
|
2038
|
+
depth_extent: VSM_DEPTH_EXTENT,
|
|
2039
|
+
});
|
|
2040
|
+
|
|
2041
|
+
map.light = light;
|
|
2042
|
+
map.layout[0] = pool;
|
|
2043
|
+
|
|
2044
|
+
this.#claim_virtual(map);
|
|
2045
|
+
} catch (e) {
|
|
2046
|
+
// nothing registered the map: give its pool back rather than leave an orphan rect
|
|
2047
|
+
this.atlas.remove(pool);
|
|
2048
|
+
throw e;
|
|
2049
|
+
}
|
|
2050
|
+
|
|
1456
2051
|
registry.add(map);
|
|
1457
2052
|
};
|
|
1458
2053
|
|
|
@@ -1515,7 +2110,11 @@ export class GPUSceneShadowmapContext {
|
|
|
1515
2110
|
}
|
|
1516
2111
|
|
|
1517
2112
|
if (light.isDirectionalLight) {
|
|
1518
|
-
|
|
2113
|
+
if (use_virtual) {
|
|
2114
|
+
add_virtual(light);
|
|
2115
|
+
} else {
|
|
2116
|
+
add_directional(light);
|
|
2117
|
+
}
|
|
1519
2118
|
changed = true;
|
|
1520
2119
|
} else if (light.isSpotLight) {
|
|
1521
2120
|
add_spot(light);
|
|
@@ -1599,6 +2198,11 @@ export class GPUSceneShadowmapContext {
|
|
|
1599
2198
|
this.#caster_scratch = null;
|
|
1600
2199
|
}
|
|
1601
2200
|
|
|
2201
|
+
if (this.#vsm_movers !== null) {
|
|
2202
|
+
this.#vsm_movers.destroy();
|
|
2203
|
+
this.#vsm_movers = null;
|
|
2204
|
+
}
|
|
2205
|
+
|
|
1602
2206
|
this.texture.destroy();
|
|
1603
2207
|
|
|
1604
2208
|
const maps = this.#registry.maps;
|