@woosh/meep-engine 3.37.0 → 3.39.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/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 +6 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts +11 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts.map +1 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js +10 -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/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +16 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +26 -34
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +42 -36
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -62
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -0
- 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/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/graphics3/WaterSystem.d.ts +58 -6
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +423 -293
- 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 +26 -14
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +221 -52
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts +30 -0
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +117 -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/ClothColliderFlags.js +2 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +10 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +36 -14
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +15 -2
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +17 -2
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +78 -53
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +18 -20
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +185 -128
- 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 +810 -96
- 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/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/water_refraction/README.md +158 -0
- package/src/shade/playground/water_refraction/index.html +40 -0
- package/src/shade/playground/water_refraction/main.d.ts +2 -0
- package/src/shade/playground/water_refraction/main.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/main.js +202 -0
- package/src/shade/playground/water_refraction/world.d.ts +39 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/world.js +141 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +27 -0
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts +2 -3
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -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/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 +20 -10
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts +8 -0
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts +0 -6
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts.map +1 -1
- 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/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 +53 -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 +108 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
- package/src/shade/renderer/medium/ParticipatingMedium.js +204 -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/bounds/chunk_particle_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -1
- 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/nss/NSS.d.ts +1 -1
- 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/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 +28 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +17 -1
- 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_renormalization.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.js +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.js +19 -0
- 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_splat_slice.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +5 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.js +8 -0
- 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 +1 -1
- 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 +23 -2
- 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/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +4 -8
- 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 +5 -0
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- 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/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/atomic/chunk_atomic_add_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts.map +1 -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/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/plane/{plane_ray_raycast.d.ts → chunk_plane_ray_raycast.d.ts} +2 -2
- package/src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.d.ts.map +1 -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_space_newton_ray.d.ts +4 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +135 -0
- 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/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/DirectionalLightShadowmap.d.ts +42 -10
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +104 -48
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +20 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +186 -74
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +2 -1
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +2 -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/CSM_SHADOWMAP_STRUCT.d.ts +14 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +20 -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_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 +4 -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 +12 -7
- 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/GPUViewShadowMaps.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +39 -17
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +5 -36
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +3 -2
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +49 -35
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +4 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +8 -9
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +2 -2
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +15 -23
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +6 -9
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +19 -9
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +18 -6
- 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/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 +72 -27
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +275 -138
- 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 +7 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_transport.js +105 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +29 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +116 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +23 -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 +42 -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 +8 -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 +30 -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 +123 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +23 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +18 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +1 -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 +74 -0
- package/src/shade/renderer/water/shader_water.d.ts +15 -26
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +373 -213
- package/src/shade/renderer/water/shader_water_avboit.d.ts +12 -0
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -0
- package/src/shade/renderer/water/shader_water_avboit.js +268 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +98 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +408 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +12 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +27 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +14 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +15 -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 +48 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +47 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +10 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.js +51 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +12 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.js +54 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +13 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.js +39 -0
- 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 +61 -6
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts +0 -29
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/geometry/plane/plane_ray_raycast.d.ts.map +0 -1
- 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
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { COLUMN_CHILD_1, COLUMN_CHILD_2, COLUMN_USER_DATA, ELEMENT_WORD_COUNT, NULL_NODE } from "../../../core/bvh2/bvh3/BVH.js";
|
|
1
2
|
import { v3_length } from "../../../core/geom/vec3/v3_length.js";
|
|
2
3
|
import { v3_quaternion_apply } from "../../../core/geom/vec3/v3_quaternion_apply.js";
|
|
3
4
|
import { v3_quaternion_apply_inverse } from "../../../core/geom/vec3/v3_quaternion_apply_inverse.js";
|
|
4
|
-
import { TRIANGLE_FLOAT_STRIDE } from "./decomposition/triangle_buffer_layout.js";
|
|
5
|
-
import { mesh_enumerate_triangles } from "./decomposition/mesh_enumerate_triangles.js";
|
|
5
|
+
import { TRIANGLE_FEATURE_ID_OFFSET, TRIANGLE_FLOAT_STRIDE } from "./decomposition/triangle_buffer_layout.js";
|
|
6
6
|
import { heightmap_enumerate_triangles } from "./decomposition/heightmap_enumerate_triangles.js";
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -13,15 +13,21 @@ import { heightmap_enumerate_triangles } from "./decomposition/heightmap_enumera
|
|
|
13
13
|
* local frame:
|
|
14
14
|
* 1. clip the ray to the shape's local bounding box (a quick reject, and a
|
|
15
15
|
* finite query segment even when `tMax` is unbounded);
|
|
16
|
-
* 2.
|
|
17
|
-
*
|
|
16
|
+
* 2. gather the triangles overlapping that segment's AABB — a heightmap's
|
|
17
|
+
* through `heightmap_enumerate_triangles`, a mesh's by walking its
|
|
18
|
+
* surface BVH (see {@link walk_mesh}; the same triangles the mesh
|
|
19
|
+
* enumerator would give, without scanning the mesh);
|
|
18
20
|
* 3. two-sided Möller–Trumbore each, keeping the nearest crossing;
|
|
19
21
|
* 4. return its distance and the world surface normal (the triangle's
|
|
20
22
|
* geometric normal, oriented to face the ray).
|
|
21
23
|
*
|
|
22
|
-
* The triangle scratch grows on saturation and is bounded by {@link MAX_TRIS}
|
|
23
|
-
*
|
|
24
|
-
*
|
|
24
|
+
* The heightmap's triangle scratch grows on saturation and is bounded by {@link MAX_TRIS}.
|
|
25
|
+
* A segment's box is not bounded by anything that small: a long shallow ray
|
|
26
|
+
* over terrain boxes in the terrain's whole area (256 m at 1 m cells is
|
|
27
|
+
* 131,072 triangles). Past the bound the segment is tested a piece at a time
|
|
28
|
+
* — each sized so its box fits — instead of being cut off; the scratch
|
|
29
|
+
* used to stop at 65,536 and drop the rest, so the ray missed any surface it
|
|
30
|
+
* met beyond them.
|
|
25
31
|
*
|
|
26
32
|
* @author Alex Goldring
|
|
27
33
|
* @copyright Company Named Limited (c) 2026
|
|
@@ -35,14 +41,73 @@ const INITIAL_TRIS = 1024;
|
|
|
35
41
|
const MAX_TRIS = 1 << 16;
|
|
36
42
|
let tri_buf = new Float64Array(INITIAL_TRIS * TRIANGLE_FLOAT_STRIDE);
|
|
37
43
|
|
|
44
|
+
/**
|
|
45
|
+
* Shortest piece of the clipped segment worth splitting further, as a fraction
|
|
46
|
+
* of the segment. A piece this short whose box still overlaps more than
|
|
47
|
+
* {@link MAX_TRIS} triangles is not a long ray, it is a pile of triangles in one
|
|
48
|
+
* spot; it is tested against the first {@link MAX_TRIS} and reported once.
|
|
49
|
+
* @type {number}
|
|
50
|
+
*/
|
|
51
|
+
const MIN_PIECE_FRACTION = 1 / (1 << 20);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Whether a piece too short to split has overflowed (once per process).
|
|
55
|
+
* @type {boolean}
|
|
56
|
+
*/
|
|
57
|
+
let overflow_reported = false;
|
|
58
|
+
|
|
38
59
|
const EPS = 1e-12;
|
|
39
60
|
const AABB_FATTEN = 1e-5; // guards triangles whose AABB just abuts the segment
|
|
40
61
|
|
|
62
|
+
/**
|
|
63
|
+
* How far past its entry into the shape's box, along its fastest axis, a ray
|
|
64
|
+
* with an unbounded reach is walked when nothing in the shape's bounds ends it:
|
|
65
|
+
* far past any surface a body could carry, and far enough short of float64's
|
|
66
|
+
* 1.8e308 that the segment's box stays finite.
|
|
67
|
+
* @type {number}
|
|
68
|
+
*/
|
|
69
|
+
const UNBOUNDED_REACH = 1e300;
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* One float32 ULP, relative: BVH node boxes are float32, rounded to nearest
|
|
73
|
+
* from the mesh's positions, so a node test widened by this much (and then
|
|
74
|
+
* the exact float64 test at the leaf) can only admit, never lose, a triangle.
|
|
75
|
+
* @type {number}
|
|
76
|
+
*/
|
|
77
|
+
const F32_RELATIVE_SLACK = 1 / (1 << 23);
|
|
78
|
+
|
|
79
|
+
/** Float32's largest finite value; a float64 position past it has an infinite BVH box bound. */
|
|
80
|
+
const F32_MAX = 3.4028234663852886e38;
|
|
81
|
+
|
|
82
|
+
// Overflow to ±Infinity by multiplying (3.4e38 × 1e300), not with the
|
|
83
|
+
// `Infinity` constant, which makes V8 box the bounds (see the enumerator's).
|
|
84
|
+
|
|
85
|
+
/** @param {number} max a widened query maximum @returns {number} */
|
|
86
|
+
function f32_reach_up(max) {
|
|
87
|
+
return max >= F32_MAX ? max * 1e300 : max;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** @param {number} min a widened query minimum @returns {number} */
|
|
91
|
+
function f32_reach_down(min) {
|
|
92
|
+
return min <= -F32_MAX ? min * 1e300 : min;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* {@link walk_mesh}'s own node stack. It must not be
|
|
97
|
+
* SCRATCH_UINT32_TRAVERSAL_STACK: the physics raycast reaches this from inside
|
|
98
|
+
* its broadphase walk, which keeps that stack's pointer in a local — a nested
|
|
99
|
+
* walk there writes over the entries it has yet to pop (it looped forever).
|
|
100
|
+
* At most one pending sibling per level, so near the tree's height; grown on
|
|
101
|
+
* demand.
|
|
102
|
+
* @type {Uint32Array}
|
|
103
|
+
*/
|
|
104
|
+
let stack = new Uint32Array(64);
|
|
105
|
+
|
|
41
106
|
/**
|
|
42
107
|
* @param {AbstractShape3D} shape a concave shape (`is_convex === false`)
|
|
43
108
|
* @param {ArrayLike<number>} position body world position, indexed as
|
|
44
109
|
* [x, y, z] — read by index like `rotation`, so an `{x, y, z}` object
|
|
45
|
-
*
|
|
110
|
+
* makes a NaN ray, which misses (`Infinity`)
|
|
46
111
|
* @param {ArrayLike<number>} rotation body rotation quaternion (x,y,z,w)
|
|
47
112
|
* @param {number} ox ray origin x (world)
|
|
48
113
|
* @param {number} oy ray origin y (world)
|
|
@@ -50,7 +115,7 @@ const AABB_FATTEN = 1e-5; // guards triangles whose AABB just abuts the segment
|
|
|
50
115
|
* @param {number} dx ray dir x (world, unit)
|
|
51
116
|
* @param {number} dy ray dir y (world, unit)
|
|
52
117
|
* @param {number} dz ray dir z (world, unit)
|
|
53
|
-
* @param {number} tMax
|
|
118
|
+
* @param {number} tMax reach; NaN reaches nothing (a miss)
|
|
54
119
|
* @param {Float64Array|Vector3} outNormal world surface normal, written on hit
|
|
55
120
|
* @returns {number} hit distance, or `Infinity` on miss
|
|
56
121
|
*/
|
|
@@ -62,33 +127,215 @@ export function refine_ray_concave(shape, position, rotation, ox, oy, oz, dx, dy
|
|
|
62
127
|
const lox = lo[0], loy = lo[1], loz = lo[2];
|
|
63
128
|
const ldx = ld[0], ldy = ld[1], ldz = ld[2];
|
|
64
129
|
|
|
130
|
+
// A NaN anywhere in the ray (or the pose it was taken through), or an
|
|
131
|
+
// infinite direction, makes a NaN query box, which overlaps everything: the
|
|
132
|
+
// walks below would test the whole shape — and the heightmap's piece walk,
|
|
133
|
+
// splitting a box that never shrinks, would take a million pieces to finish.
|
|
134
|
+
// Such a ray crosses nothing. (An infinite origin is the clip's business.)
|
|
135
|
+
if (lox !== lox || loy !== loy || loz !== loz || !Number.isFinite(ldx + ldy + ldz)) return Infinity;
|
|
136
|
+
|
|
65
137
|
// Clip the local ray to the shape's local AABB → segment [tEnter, tExit].
|
|
138
|
+
// Only an axis the ray does not move along at all is held to the origin's
|
|
139
|
+
// slab, as in walk_mesh: a component however small still crosses a face,
|
|
140
|
+
// and a large surface is met far along it (1 nm above a 200 km floor at
|
|
141
|
+
// 1e-13 a metre is a hit 10 km on; Möller–Trumbore's det there is 4e-3).
|
|
142
|
+
// Divided, not multiplied by a reciprocal: a subnormal component's
|
|
143
|
+
// reciprocal is infinite, and 0 × Infinity, an origin on a face, is NaN.
|
|
66
144
|
shape.compute_bounding_box(bounds);
|
|
67
145
|
let tEnter = 0, tExit = tMax;
|
|
68
|
-
if (ldx
|
|
69
|
-
|
|
70
|
-
let t1 = (bounds[0] - lox) * inv, t2 = (bounds[3] - lox) * inv;
|
|
146
|
+
if (ldx !== 0) {
|
|
147
|
+
let t1 = (bounds[0] - lox) / ldx, t2 = (bounds[3] - lox) / ldx;
|
|
71
148
|
if (t1 > t2) { const s = t1; t1 = t2; t2 = s; }
|
|
72
149
|
if (t1 > tEnter) tEnter = t1;
|
|
73
150
|
if (t2 < tExit) tExit = t2;
|
|
74
151
|
} else if (lox < bounds[0] || lox > bounds[3]) return Infinity;
|
|
75
|
-
if (ldy
|
|
76
|
-
|
|
77
|
-
let t1 = (bounds[1] - loy) * inv, t2 = (bounds[4] - loy) * inv;
|
|
152
|
+
if (ldy !== 0) {
|
|
153
|
+
let t1 = (bounds[1] - loy) / ldy, t2 = (bounds[4] - loy) / ldy;
|
|
78
154
|
if (t1 > t2) { const s = t1; t1 = t2; t2 = s; }
|
|
79
155
|
if (t1 > tEnter) tEnter = t1;
|
|
80
156
|
if (t2 < tExit) tExit = t2;
|
|
81
157
|
} else if (loy < bounds[1] || loy > bounds[4]) return Infinity;
|
|
82
|
-
if (ldz
|
|
83
|
-
|
|
84
|
-
let t1 = (bounds[2] - loz) * inv, t2 = (bounds[5] - loz) * inv;
|
|
158
|
+
if (ldz !== 0) {
|
|
159
|
+
let t1 = (bounds[2] - loz) / ldz, t2 = (bounds[5] - loz) / ldz;
|
|
85
160
|
if (t1 > t2) { const s = t1; t1 = t2; t2 = s; }
|
|
86
161
|
if (t1 > tEnter) tEnter = t1;
|
|
87
162
|
if (t2 < tExit) tExit = t2;
|
|
88
163
|
} else if (loz < bounds[2] || loz > bounds[5]) return Infinity;
|
|
89
|
-
|
|
164
|
+
// The ray misses the shape's AABB entirely — or its reach is NaN, which
|
|
165
|
+
// nothing passes: tEnter is never NaN (it only takes clip values greater
|
|
166
|
+
// than it), so `!(tExit >= tEnter)` catches a NaN tExit, which the piece
|
|
167
|
+
// walk would otherwise never reach the end of.
|
|
168
|
+
if (!(tExit >= tEnter)) return Infinity;
|
|
169
|
+
|
|
170
|
+
if (!(tExit < Infinity)) {
|
|
171
|
+
// An unbounded reach and no face to leave the box through: the shape's
|
|
172
|
+
// bounds are infinite or NaN on every axis the ray moves along — an
|
|
173
|
+
// infinite mesh vertex; an infinite height sample, which the filter
|
|
174
|
+
// makes NaN; an infinite heightmap size. The ray still meets what
|
|
175
|
+
// finite surface lies along it, but its box would hold 0 × Infinity =
|
|
176
|
+
// NaN on an axis it does not move along, which covers everything. End
|
|
177
|
+
// it UNBOUNDED_REACH past where it enters: its box stays finite.
|
|
178
|
+
tExit = tEnter + UNBOUNDED_REACH / Math.max(Math.abs(ldx), Math.abs(ldy), Math.abs(ldz));
|
|
179
|
+
|
|
180
|
+
// A zero direction goes nowhere (nor, in effect, does a subnormal one).
|
|
181
|
+
if (!(tExit < Infinity)) return Infinity;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
ray[0] = lox; ray[1] = loy; ray[2] = loz;
|
|
185
|
+
ray[3] = ldx; ray[4] = ldy; ray[5] = ldz;
|
|
186
|
+
|
|
187
|
+
nearest[NEAREST_T] = tMax;
|
|
188
|
+
nearest[NEAREST_FID] = 0;
|
|
189
|
+
nearest[NEAREST_FOUND] = 0;
|
|
190
|
+
|
|
191
|
+
if (shape.isHeightMapShape3D === true) {
|
|
192
|
+
walk_heightmap(shape, tEnter, tExit);
|
|
193
|
+
} else {
|
|
194
|
+
walk_mesh(shape, tEnter, tExit);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
if (nearest[NEAREST_FOUND] === 0) return Infinity;
|
|
198
|
+
|
|
199
|
+
hit_feature = nearest[NEAREST_FID];
|
|
200
|
+
|
|
201
|
+
// Normalise, orient to face the ray, then rotate the local normal to world.
|
|
202
|
+
let nx = nearest[NEAREST_NX], ny = nearest[NEAREST_NY], nz = nearest[NEAREST_NZ];
|
|
203
|
+
let nl = v3_length(nx, ny, nz);
|
|
204
|
+
if (nl === 0) nl = 1;
|
|
205
|
+
nx /= nl; ny /= nl; nz /= nl;
|
|
206
|
+
if (nx * ldx + ny * ldy + nz * ldz > 0) { nx = -nx; ny = -ny; nz = -nz; }
|
|
207
|
+
v3_quaternion_apply(outNormal, 0, nx, ny, nz, qx, qy, qz, qw);
|
|
208
|
+
return nearest[NEAREST_T];
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// ── The query in progress (single-threaded; refine_ray_concave is not re-entered) ──
|
|
212
|
+
//
|
|
213
|
+
// Held in typed arrays rather than module-level `let`s: a module-level binding
|
|
214
|
+
// holding a double is a boxed heap number, so every write to one — and every
|
|
215
|
+
// read of one into a local that is then reassigned — allocates. As `let`s these
|
|
216
|
+
// cost a mesh ray ~3 KB of garbage.
|
|
217
|
+
|
|
218
|
+
/** The ray, shape-local: origin xyz, direction xyz. @type {Float64Array} */
|
|
219
|
+
const ray = new Float64Array(6);
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* The nearest crossing so far: its distance (starts at tMax, exclusive), its
|
|
223
|
+
* triangle's feature id, whether there is one (0/1), and its geometric normal
|
|
224
|
+
* e1 × e2, unnormalised.
|
|
225
|
+
* @type {Float64Array}
|
|
226
|
+
*/
|
|
227
|
+
const nearest = new Float64Array(6);
|
|
228
|
+
const NEAREST_T = 0;
|
|
229
|
+
const NEAREST_FID = 1;
|
|
230
|
+
const NEAREST_FOUND = 2;
|
|
231
|
+
const NEAREST_NX = 3;
|
|
232
|
+
const NEAREST_NY = 4;
|
|
233
|
+
const NEAREST_NZ = 5;
|
|
90
234
|
|
|
91
|
-
|
|
235
|
+
/** The feature id of the triangle the last call to hit anything struck. */
|
|
236
|
+
let hit_feature = 0;
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* The feature id of the triangle the most recent {@link refine_ray_concave}
|
|
240
|
+
* that returned a hit struck — the enumerators' id, the triangle's index in
|
|
241
|
+
* its shape's triangulation plus one. Read straight after that call: a later
|
|
242
|
+
* hit overwrites it, a miss leaves it alone.
|
|
243
|
+
*
|
|
244
|
+
* @returns {number}
|
|
245
|
+
*/
|
|
246
|
+
export function refine_ray_concave_hit_feature() {
|
|
247
|
+
return hit_feature;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Two-sided Möller–Trumbore of the query ray against one triangle (shape-local
|
|
252
|
+
* vertices), keeping it if it is the nearest crossing so far. A tie at one
|
|
253
|
+
* distance goes to the lower feature id — the order both enumerators emit in,
|
|
254
|
+
* so the answer does not depend on the order triangles are tested in, and a
|
|
255
|
+
* single in-order pass keeps the first one it met.
|
|
256
|
+
*
|
|
257
|
+
* The vertices are read from where they are stored, by index: passed as nine
|
|
258
|
+
* doubles to a call V8 does not inline, each is boxed into a heap number — a
|
|
259
|
+
* mesh ray allocated 330 bytes that way, a heightmap ray 190 more than it needs.
|
|
260
|
+
*
|
|
261
|
+
* @param {ArrayLike<number>} p the array holding the vertices
|
|
262
|
+
* @param {number} ia index of vertex a's x in `p`; y and z follow
|
|
263
|
+
* @param {number} ib index of vertex b's x
|
|
264
|
+
* @param {number} ic index of vertex c's x
|
|
265
|
+
* @param {number} fid the triangle's feature id
|
|
266
|
+
*/
|
|
267
|
+
function test_triangle(p, ia, ib, ic, fid) {
|
|
268
|
+
const ax = p[ia], ay = p[ia + 1], az = p[ia + 2];
|
|
269
|
+
const bx = p[ib], by = p[ib + 1], bz = p[ib + 2];
|
|
270
|
+
const cx = p[ic], cy = p[ic + 1], cz = p[ic + 2];
|
|
271
|
+
const ldx = ray[3], ldy = ray[4], ldz = ray[5];
|
|
272
|
+
|
|
273
|
+
const e1x = bx - ax, e1y = by - ay, e1z = bz - az;
|
|
274
|
+
const e2x = cx - ax, e2y = cy - ay, e2z = cz - az;
|
|
275
|
+
|
|
276
|
+
const px = ldy * e2z - ldz * e2y, py = ldz * e2x - ldx * e2z, pz = ldx * e2y - ldy * e2x;
|
|
277
|
+
const det = e1x * px + e1y * py + e1z * pz;
|
|
278
|
+
if (det < EPS && det > -EPS) return; // ray parallel to the triangle
|
|
279
|
+
// det can overflow to ±Infinity on finite edges (1e154 and more); 1/det is
|
|
280
|
+
// then ±0 and u, v and t all come out 0 — a "crossing" at the ray's origin.
|
|
281
|
+
// No answer can be had from such a triangle here; it is not crossed.
|
|
282
|
+
if (!(det > -Infinity && det < Infinity)) return;
|
|
283
|
+
const invDet = 1 / det;
|
|
284
|
+
|
|
285
|
+
const tvx = ray[0] - ax, tvy = ray[1] - ay, tvz = ray[2] - az;
|
|
286
|
+
const u = (tvx * px + tvy * py + tvz * pz) * invDet;
|
|
287
|
+
if (u < 0 || u > 1) return;
|
|
288
|
+
|
|
289
|
+
const wx = tvy * e1z - tvz * e1y, wy = tvz * e1x - tvx * e1z, wz = tvx * e1y - tvy * e1x;
|
|
290
|
+
const v = (ldx * wx + ldy * wy + ldz * wz) * invDet;
|
|
291
|
+
if (v < 0 || u + v > 1) return;
|
|
292
|
+
|
|
293
|
+
const best = nearest[NEAREST_T];
|
|
294
|
+
const t = (e2x * wx + e2y * wy + e2z * wz) * invDet;
|
|
295
|
+
// A NaN or infinite vertex (a bad height sample, a NaN in a mesh) leaves t
|
|
296
|
+
// NaN — through det, or through w — and such a triangle is not there. The
|
|
297
|
+
// comparisons above are all false for NaN, so this is where it is turned
|
|
298
|
+
// away: taken, at a NaN distance, no later crossing could compare nearer.
|
|
299
|
+
if (!(t >= 0) || t > best) return;
|
|
300
|
+
if (t === best && !(nearest[NEAREST_FOUND] !== 0 && fid < nearest[NEAREST_FID])) return;
|
|
301
|
+
|
|
302
|
+
nearest[NEAREST_T] = t;
|
|
303
|
+
nearest[NEAREST_FID] = fid;
|
|
304
|
+
nearest[NEAREST_FOUND] = 1;
|
|
305
|
+
// Geometric normal e1 × e2 (local, unnormalised).
|
|
306
|
+
nearest[NEAREST_NX] = e1y * e2z - e1z * e2y;
|
|
307
|
+
nearest[NEAREST_NY] = e1z * e2x - e1x * e2z;
|
|
308
|
+
nearest[NEAREST_NZ] = e1x * e2y - e1y * e2x;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* A mesh: walk its surface BVH ({@link MeshShape3D#get_surface_bvh}) for the
|
|
313
|
+
* triangles the clipped segment [tEnter, tExit] can cross, instead of
|
|
314
|
+
* enumerating every triangle under the segment's box — which for the mesh was
|
|
315
|
+
* a scan of every triangle in it (1.1 ms a ray on 200k triangles).
|
|
316
|
+
*
|
|
317
|
+
* The candidates are the ones enumeration filtered to — triangles whose box
|
|
318
|
+
* overlaps the segment's box (fattened by {@link AABB_FATTEN}) — less those
|
|
319
|
+
* whose BVH ancestor the ray provably does not enter before the nearest
|
|
320
|
+
* crossing so far. A crossing lies on its triangle, so inside every ancestor's
|
|
321
|
+
* box; the ancestors are tested fattened by {@link AABB_FATTEN} plus a float32
|
|
322
|
+
* ULP (node boxes are float32), far beyond Möller–Trumbore's rounding, so no
|
|
323
|
+
* crossing is culled. With the order-independent tie-break in
|
|
324
|
+
* {@link test_triangle}, the answer is the enumeration's, bit for bit.
|
|
325
|
+
*
|
|
326
|
+
* @param {MeshShape3D} shape
|
|
327
|
+
* @param {number} tEnter
|
|
328
|
+
* @param {number} tExit
|
|
329
|
+
*/
|
|
330
|
+
function walk_mesh(shape, tEnter, tExit) {
|
|
331
|
+
const indices = shape.indices;
|
|
332
|
+
|
|
333
|
+
if (indices.length < 3) return;
|
|
334
|
+
|
|
335
|
+
const lox = ray[0], loy = ray[1], loz = ray[2];
|
|
336
|
+
const ldx = ray[3], ldy = ray[4], ldz = ray[5];
|
|
337
|
+
|
|
338
|
+
// The segment's box, as enumeration filtered by.
|
|
92
339
|
const sax = lox + ldx * tEnter, say = loy + ldy * tEnter, saz = loz + ldz * tEnter;
|
|
93
340
|
const sbx = lox + ldx * tExit, sby = loy + ldy * tExit, sbz = loz + ldz * tExit;
|
|
94
341
|
const qminx = (sax < sbx ? sax : sbx) - AABB_FATTEN;
|
|
@@ -98,63 +345,369 @@ export function refine_ray_concave(shape, position, rotation, ox, oy, oz, dx, dy
|
|
|
98
345
|
const qmaxy = (say > sby ? say : sby) + AABB_FATTEN;
|
|
99
346
|
const qmaxz = (saz > sbz ? saz : sbz) + AABB_FATTEN;
|
|
100
347
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
348
|
+
// The same box widened by a float32 ULP, for the node test only. No floor
|
|
349
|
+
// at float32's subnormal step is needed here, unlike the enumerator's: these
|
|
350
|
+
// bounds carry ±AABB_FATTEN, so the nearest one to zero that is not zero is
|
|
351
|
+
// an ULP of 1e-5 (1.7e-21), a normal float32. A bound at or past float32's
|
|
352
|
+
// range reaches to infinity, as in the enumerator: a node wholly past it has
|
|
353
|
+
// a box of [+Infinity, +Infinity] (or the negative), beyond any finite bound.
|
|
354
|
+
const wminx = f32_reach_down(qminx - Math.abs(qminx) * F32_RELATIVE_SLACK);
|
|
355
|
+
const wminy = f32_reach_down(qminy - Math.abs(qminy) * F32_RELATIVE_SLACK);
|
|
356
|
+
const wminz = f32_reach_down(qminz - Math.abs(qminz) * F32_RELATIVE_SLACK);
|
|
357
|
+
const wmaxx = f32_reach_up(qmaxx + Math.abs(qmaxx) * F32_RELATIVE_SLACK);
|
|
358
|
+
const wmaxy = f32_reach_up(qmaxy + Math.abs(qmaxy) * F32_RELATIVE_SLACK);
|
|
359
|
+
const wmaxz = f32_reach_up(qmaxz + Math.abs(qmaxz) * F32_RELATIVE_SLACK);
|
|
360
|
+
|
|
361
|
+
// Only an axis the ray does not move along at all is held to the origin's
|
|
362
|
+
// slab. Treating a component under EPS as zero here, as the clip does, would
|
|
363
|
+
// cull nodes such a ray does reach at the 1e12-unit distances a direction
|
|
364
|
+
// that short crosses at; with an exact test the slab bounds stay exact.
|
|
365
|
+
const parallel_x = ldx === 0;
|
|
366
|
+
const parallel_y = ldy === 0;
|
|
367
|
+
const parallel_z = ldz === 0;
|
|
368
|
+
const inv_x = 1 / ldx, inv_y = 1 / ldy, inv_z = 1 / ldz;
|
|
369
|
+
const forward_x = ldx > 0, forward_y = ldy > 0, forward_z = ldz > 0;
|
|
370
|
+
// A component under 2^-1024 has an infinite reciprocal: a slab distance
|
|
371
|
+
// times it is ±Infinity (NaN at zero), where the true one, the gap over the
|
|
372
|
+
// component, is finite — 1e305 for a gap of 1e-5 at 1e-310 — and a node it
|
|
373
|
+
// reaches read as entered past any finite reach. Such an axis divides.
|
|
374
|
+
const divide_x = !(inv_x > -Infinity && inv_x < Infinity);
|
|
375
|
+
const divide_y = !(inv_y > -Infinity && inv_y < Infinity);
|
|
376
|
+
const divide_z = !(inv_z > -Infinity && inv_z < Infinity);
|
|
377
|
+
|
|
378
|
+
const positions = shape.positions;
|
|
379
|
+
const bvh = shape.get_surface_bvh();
|
|
380
|
+
const root = bvh.root;
|
|
381
|
+
|
|
382
|
+
if (root === NULL_NODE) return;
|
|
383
|
+
|
|
384
|
+
// Read the node columns directly, as ebvh_geometry_query_nearest_triangle_ray does.
|
|
385
|
+
const float32 = bvh.__data_float32;
|
|
386
|
+
const uint32 = bvh.__data_uint32;
|
|
387
|
+
|
|
388
|
+
let pointer = 0;
|
|
389
|
+
stack[pointer++] = root;
|
|
390
|
+
|
|
391
|
+
while (pointer > 0) {
|
|
392
|
+
const node = stack[--pointer];
|
|
393
|
+
const address = node * ELEMENT_WORD_COUNT;
|
|
394
|
+
|
|
395
|
+
const x0 = float32[address], y0 = float32[address + 1], z0 = float32[address + 2];
|
|
396
|
+
const x1 = float32[address + 3], y1 = float32[address + 4], z1 = float32[address + 5];
|
|
397
|
+
|
|
398
|
+
if (x0 > wmaxx || x1 < wminx || y0 > wmaxy || y1 < wminy || z0 > wmaxz || z1 < wminz) continue;
|
|
399
|
+
|
|
400
|
+
// Does the ray enter the (fattened) node box over [0, nearest so far]?
|
|
401
|
+
// Each axis's entry face is the one the ray's sign says it comes in
|
|
402
|
+
// through, not the nearer of the two distances: a node wholly past
|
|
403
|
+
// float32's range has a minimum of +Infinity (or a maximum of
|
|
404
|
+
// -Infinity), which fattened is Infinity - Infinity = NaN, and a NaN
|
|
405
|
+
// distance must bound nothing. Ordering by comparison, a ray coming
|
|
406
|
+
// back toward the origin took the other, infinite face's -Infinity
|
|
407
|
+
// for its exit and never entered such a node.
|
|
408
|
+
let t_near = 0;
|
|
409
|
+
let t_far = nearest[NEAREST_T];
|
|
410
|
+
|
|
411
|
+
{
|
|
412
|
+
const lo_x = x0 - AABB_FATTEN - Math.abs(x0) * F32_RELATIVE_SLACK;
|
|
413
|
+
const hi_x = x1 + AABB_FATTEN + Math.abs(x1) * F32_RELATIVE_SLACK;
|
|
414
|
+
if (parallel_x) {
|
|
415
|
+
if (lox < lo_x || lox > hi_x) continue;
|
|
416
|
+
} else {
|
|
417
|
+
const near = (forward_x ? lo_x : hi_x) - lox, far = (forward_x ? hi_x : lo_x) - lox;
|
|
418
|
+
const t_in = divide_x ? near / ldx : near * inv_x;
|
|
419
|
+
const t_out = divide_x ? far / ldx : far * inv_x;
|
|
420
|
+
if (t_in > t_near) t_near = t_in;
|
|
421
|
+
if (t_out < t_far) t_far = t_out;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const lo_y = y0 - AABB_FATTEN - Math.abs(y0) * F32_RELATIVE_SLACK;
|
|
425
|
+
const hi_y = y1 + AABB_FATTEN + Math.abs(y1) * F32_RELATIVE_SLACK;
|
|
426
|
+
if (parallel_y) {
|
|
427
|
+
if (loy < lo_y || loy > hi_y) continue;
|
|
428
|
+
} else {
|
|
429
|
+
const near = (forward_y ? lo_y : hi_y) - loy, far = (forward_y ? hi_y : lo_y) - loy;
|
|
430
|
+
const t_in = divide_y ? near / ldy : near * inv_y;
|
|
431
|
+
const t_out = divide_y ? far / ldy : far * inv_y;
|
|
432
|
+
if (t_in > t_near) t_near = t_in;
|
|
433
|
+
if (t_out < t_far) t_far = t_out;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
const lo_z = z0 - AABB_FATTEN - Math.abs(z0) * F32_RELATIVE_SLACK;
|
|
437
|
+
const hi_z = z1 + AABB_FATTEN + Math.abs(z1) * F32_RELATIVE_SLACK;
|
|
438
|
+
if (parallel_z) {
|
|
439
|
+
if (loz < lo_z || loz > hi_z) continue;
|
|
440
|
+
} else {
|
|
441
|
+
const near = (forward_z ? lo_z : hi_z) - loz, far = (forward_z ? hi_z : lo_z) - loz;
|
|
442
|
+
const t_in = divide_z ? near / ldz : near * inv_z;
|
|
443
|
+
const t_out = divide_z ? far / ldz : far * inv_z;
|
|
444
|
+
if (t_in > t_near) t_near = t_in;
|
|
445
|
+
if (t_out < t_far) t_far = t_out;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
if (t_near > t_far) continue;
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
const child_1 = uint32[address + COLUMN_CHILD_1];
|
|
452
|
+
|
|
453
|
+
if (child_1 !== NULL_NODE) {
|
|
454
|
+
if (pointer + 2 > stack.length) {
|
|
455
|
+
const grown = new Uint32Array(stack.length * 2);
|
|
456
|
+
grown.set(stack);
|
|
457
|
+
stack = grown;
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
stack[pointer++] = child_1;
|
|
461
|
+
stack[pointer++] = uint32[address + COLUMN_CHILD_2];
|
|
462
|
+
continue;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
const tri = uint32[address + COLUMN_USER_DATA];
|
|
466
|
+
|
|
467
|
+
const i_a = indices[tri * 3] * 3;
|
|
468
|
+
const i_b = indices[tri * 3 + 1] * 3;
|
|
469
|
+
const i_c = indices[tri * 3 + 2] * 3;
|
|
470
|
+
|
|
471
|
+
const ax = positions[i_a], ay = positions[i_a + 1], az = positions[i_a + 2];
|
|
472
|
+
const bx = positions[i_b], by = positions[i_b + 1], bz = positions[i_b + 2];
|
|
473
|
+
const cx = positions[i_c], cy = positions[i_c + 1], cz = positions[i_c + 2];
|
|
474
|
+
|
|
475
|
+
// the exact filter enumeration applied: the triangle's box against the segment's
|
|
476
|
+
if ((ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx)) > qmaxx) continue;
|
|
477
|
+
if ((ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx)) < qminx) continue;
|
|
478
|
+
if ((ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy)) > qmaxy) continue;
|
|
479
|
+
if ((ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy)) < qminy) continue;
|
|
480
|
+
if ((az < bz ? (az < cz ? az : cz) : (bz < cz ? bz : cz)) > qmaxz) continue;
|
|
481
|
+
if ((az > bz ? (az > cz ? az : cz) : (bz > cz ? bz : cz)) < qminz) continue;
|
|
482
|
+
|
|
483
|
+
test_triangle(positions, i_a, i_b, i_c, tri + 1);
|
|
111
484
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
//
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* A heightmap: enumerate the triangles under the clipped segment's box and
|
|
489
|
+
* test each. The segment [tEnter, tExit] is one piece unless its box overlaps
|
|
490
|
+
* more than MAX_TRIS triangles; then it is walked in ray order in pieces sized
|
|
491
|
+
* to fit. A crossing at distance t lies on the piece covering t,
|
|
492
|
+
* so its triangle overlaps that piece's box — every crossing is tested — and
|
|
493
|
+
* once the nearest so far lies before a piece's end, no later piece can come
|
|
494
|
+
* nearer.
|
|
495
|
+
*
|
|
496
|
+
* @param {HeightMapShape3D} shape
|
|
497
|
+
* @param {number} tEnter
|
|
498
|
+
* @param {number} tExit
|
|
499
|
+
*/
|
|
500
|
+
function walk_heightmap(shape, tEnter, tExit) {
|
|
501
|
+
const lox = ray[0], loy = ray[1], loz = ray[2];
|
|
502
|
+
const ldx = ray[3], ldy = ray[4], ldz = ray[5];
|
|
503
|
+
|
|
504
|
+
const segment = tExit - tEnter;
|
|
505
|
+
let piece = segment;
|
|
506
|
+
let t0 = tEnter;
|
|
507
|
+
|
|
508
|
+
// Set once a piece cannot be made to fit: shortening no longer shrinks its
|
|
509
|
+
// box below MAX_TRIS triangles (they all lie within the box's fattening,
|
|
510
|
+
// say), so walking on in short pieces would take a million of them, each
|
|
511
|
+
// enumerating the same box. The rest of the segment then goes as one piece,
|
|
512
|
+
// tested as far as the scratch holds, and the walk ends.
|
|
513
|
+
let saturated = false;
|
|
514
|
+
|
|
515
|
+
for (; ;) {
|
|
516
|
+
let t1 = saturated || !(piece < tExit - t0) ? tExit : t0 + piece;
|
|
517
|
+
|
|
518
|
+
// Size the piece before enumerating it: shrink it until its box holds
|
|
519
|
+
// at most MAX_TRIS triangles, counted in O(1) (heightmap_box_triangles),
|
|
520
|
+
// rather than enumerating an over-full box only to learn it was over
|
|
521
|
+
// full — that, once per halving, cost more than the whole old capped
|
|
522
|
+
// enumeration. A box's count grows at most with the square of its
|
|
523
|
+
// length, so scaling the length by sqrt(MAX_TRIS / count) shrinks a
|
|
524
|
+
// diagonal box to fit in one step and an axis-aligned one in a few. A
|
|
525
|
+
// segment that fits is still one piece, enumerated once, as before.
|
|
526
|
+
let in_box = saturated ? 0 : heightmap_piece_triangles(shape, lox, loy, loz, ldx, ldy, ldz, t0, t1);
|
|
527
|
+
while (in_box > MAX_TRIS) {
|
|
528
|
+
const shorter = (t1 - t0) * Math.sqrt(MAX_TRIS / in_box) * 0.9;
|
|
529
|
+
// `tExit - shorter < tExit`: it still moves `t` at the segment's
|
|
530
|
+
// magnitude, so the walk advances.
|
|
531
|
+
if (!(shorter > segment * MIN_PIECE_FRACTION && tExit - shorter < tExit)) {
|
|
532
|
+
saturated = true;
|
|
533
|
+
t1 = tExit;
|
|
534
|
+
break;
|
|
535
|
+
}
|
|
536
|
+
t1 = t0 + shorter;
|
|
537
|
+
in_box = heightmap_piece_triangles(shape, lox, loy, loz, ldx, ldy, ldz, t0, t1);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// Query AABB = bbox of this piece of the local segment.
|
|
541
|
+
const sax = lox + ldx * t0, say = loy + ldy * t0, saz = loz + ldz * t0;
|
|
542
|
+
const sbx = lox + ldx * t1, sby = loy + ldy * t1, sbz = loz + ldz * t1;
|
|
543
|
+
const qminx = (sax < sbx ? sax : sbx) - AABB_FATTEN;
|
|
544
|
+
const qminy = (say < sby ? say : sby) - AABB_FATTEN;
|
|
545
|
+
const qminz = (saz < sbz ? saz : sbz) - AABB_FATTEN;
|
|
546
|
+
const qmaxx = (sax > sbx ? sax : sbx) + AABB_FATTEN;
|
|
547
|
+
const qmaxy = (say > sby ? say : sby) + AABB_FATTEN;
|
|
548
|
+
const qmaxz = (saz > sbz ? saz : sbz) + AABB_FATTEN;
|
|
549
|
+
|
|
550
|
+
const cap = (tri_buf.length / TRIANGLE_FLOAT_STRIDE) | 0;
|
|
551
|
+
// The enumerator returns the TRUE overlap count, which can EXCEED the
|
|
552
|
+
// buffer capacity (writes past the end are silently dropped).
|
|
553
|
+
let n_tris = heightmap_enumerate_triangles(tri_buf, 0, shape, qminx, qminy, qminz, qmaxx, qmaxy, qmaxz);
|
|
554
|
+
|
|
555
|
+
if (n_tris > cap) {
|
|
556
|
+
if (cap < MAX_TRIS) {
|
|
557
|
+
// grow, and enumerate this piece again
|
|
558
|
+
tri_buf = new Float64Array(Math.min(MAX_TRIS, Math.max(n_tris, cap * 2)) * TRIANGLE_FLOAT_STRIDE);
|
|
559
|
+
continue;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
if (!saturated) {
|
|
563
|
+
const half = (t1 - t0) * 0.5;
|
|
564
|
+
// `tExit - half < tExit`: the half still moves `t` at the segment's
|
|
565
|
+
// magnitude, so the walk advances.
|
|
566
|
+
if (half > segment * MIN_PIECE_FRACTION && tExit - half < tExit) {
|
|
567
|
+
piece = half;
|
|
568
|
+
continue;
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
// too short to split: the rest of the segment as one piece
|
|
572
|
+
saturated = true;
|
|
573
|
+
continue;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// The saturated last piece: test what fits, never read past it.
|
|
577
|
+
if (!overflow_reported) {
|
|
578
|
+
overflow_reported = true;
|
|
579
|
+
console.warn(
|
|
580
|
+
`refine_ray_concave: ${n_tris} triangles of a ${shape.constructor.name} lie in a stretch of`
|
|
581
|
+
+ ` ray ${t1 - t0} long; ${cap} are tested and the rest are not.`
|
|
582
|
+
);
|
|
583
|
+
}
|
|
584
|
+
n_tris = cap;
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
for (let i = 0; i < n_tris; i++) {
|
|
588
|
+
const o = i * TRIANGLE_FLOAT_STRIDE;
|
|
589
|
+
test_triangle(tri_buf, o, o + 3, o + 6, tri_buf[o + TRIANGLE_FEATURE_ID_OFFSET]);
|
|
590
|
+
}
|
|
591
|
+
|
|
592
|
+
if (t1 >= tExit || (nearest[NEAREST_FOUND] !== 0 && nearest[NEAREST_T] < t1)) break;
|
|
593
|
+
|
|
594
|
+
// Offer the next piece twice this one's length; the sizing above takes
|
|
595
|
+
// it back down where the terrain is denser.
|
|
596
|
+
piece = 2 * (t1 - t0);
|
|
597
|
+
t0 = t1;
|
|
149
598
|
}
|
|
599
|
+
}
|
|
150
600
|
|
|
151
|
-
|
|
601
|
+
/**
|
|
602
|
+
* How many triangles {@link heightmap_box_triangles} counts for the box of the
|
|
603
|
+
* ray piece [t0, t1], fattened by {@link AABB_FATTEN} as the walk queries it.
|
|
604
|
+
*
|
|
605
|
+
* @param {HeightMapShape3D} shape
|
|
606
|
+
* @param {number} lox
|
|
607
|
+
* @param {number} loy
|
|
608
|
+
* @param {number} loz
|
|
609
|
+
* @param {number} ldx
|
|
610
|
+
* @param {number} ldy
|
|
611
|
+
* @param {number} ldz
|
|
612
|
+
* @param {number} t0
|
|
613
|
+
* @param {number} t1
|
|
614
|
+
* @returns {number}
|
|
615
|
+
*/
|
|
616
|
+
function heightmap_piece_triangles(shape, lox, loy, loz, ldx, ldy, ldz, t0, t1) {
|
|
617
|
+
const sax = lox + ldx * t0, say = loy + ldy * t0, saz = loz + ldz * t0;
|
|
618
|
+
const sbx = lox + ldx * t1, sby = loy + ldy * t1, sbz = loz + ldz * t1;
|
|
152
619
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
620
|
+
return heightmap_box_triangles(
|
|
621
|
+
shape,
|
|
622
|
+
(sax < sbx ? sax : sbx) - AABB_FATTEN,
|
|
623
|
+
(say < sby ? say : sby) - AABB_FATTEN,
|
|
624
|
+
(saz < sbz ? saz : sbz) - AABB_FATTEN,
|
|
625
|
+
(sax > sbx ? sax : sbx) + AABB_FATTEN,
|
|
626
|
+
(say > sby ? say : sby) + AABB_FATTEN,
|
|
627
|
+
(saz > sbz ? saz : sbz) + AABB_FATTEN
|
|
628
|
+
);
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/**
|
|
632
|
+
* How many triangles {@link heightmap_enumerate_triangles} emits for a query box
|
|
633
|
+
* in the heightmap's own frame, in O(1): the enumerator's own cell-range
|
|
634
|
+
* arithmetic, expression for expression, without the emitting — so the same
|
|
635
|
+
* number for the same box. For sizing a walk's pieces before enumerating any
|
|
636
|
+
* (this one's, and `shape_cast`'s over a heightmap): enumerating an over-full
|
|
637
|
+
* box only to learn that it was samples every height in it.
|
|
638
|
+
*
|
|
639
|
+
* @param {HeightMapShape3D} shape
|
|
640
|
+
* @param {number} aabb_min_x query box in the heightmap's frame
|
|
641
|
+
* @param {number} aabb_min_y
|
|
642
|
+
* @param {number} aabb_min_z
|
|
643
|
+
* @param {number} aabb_max_x
|
|
644
|
+
* @param {number} aabb_max_y
|
|
645
|
+
* @param {number} aabb_max_z
|
|
646
|
+
* @returns {number}
|
|
647
|
+
*/
|
|
648
|
+
export function heightmap_box_triangles(shape, aabb_min_x, aabb_min_y, aabb_min_z, aabb_max_x, aabb_max_y, aabb_max_z) {
|
|
649
|
+
const sampler = shape.sampler;
|
|
650
|
+
if (sampler === null) return 0;
|
|
651
|
+
|
|
652
|
+
const W = sampler.width;
|
|
653
|
+
const H = sampler.height;
|
|
654
|
+
if (W < 2 || H < 2) return 0;
|
|
655
|
+
|
|
656
|
+
const size_x = shape.size[0];
|
|
657
|
+
const size_z = shape.size[2];
|
|
658
|
+
if (size_x <= 0 || size_z <= 0) return 0;
|
|
659
|
+
|
|
660
|
+
const N = shape.tessellation;
|
|
661
|
+
const seg_u = (W - 1) * N;
|
|
662
|
+
const seg_v = (H - 1) * N;
|
|
663
|
+
|
|
664
|
+
shape._ensure_basis();
|
|
665
|
+
const b = shape._basis;
|
|
666
|
+
|
|
667
|
+
const c_x = 0.5 * (aabb_min_x + aabb_max_x);
|
|
668
|
+
const c_y = 0.5 * (aabb_min_y + aabb_max_y);
|
|
669
|
+
const c_z = 0.5 * (aabb_min_z + aabb_max_z);
|
|
670
|
+
|
|
671
|
+
const h_x = 0.5 * (aabb_max_x - aabb_min_x);
|
|
672
|
+
const h_y = 0.5 * (aabb_max_y - aabb_min_y);
|
|
673
|
+
const h_z = 0.5 * (aabb_max_z - aabb_min_z);
|
|
674
|
+
|
|
675
|
+
const u_c = b[0] * c_x + b[1] * c_y + b[2] * c_z;
|
|
676
|
+
const v_c = b[3] * c_x + b[4] * c_y + b[5] * c_z;
|
|
677
|
+
|
|
678
|
+
const u_e = Math.abs(b[0]) * h_x + Math.abs(b[1]) * h_y + Math.abs(b[2]) * h_z;
|
|
679
|
+
const v_e = Math.abs(b[3]) * h_x + Math.abs(b[4]) * h_y + Math.abs(b[5]) * h_z;
|
|
680
|
+
|
|
681
|
+
const half_u = size_x * 0.5;
|
|
682
|
+
const half_v = size_z * 0.5;
|
|
683
|
+
|
|
684
|
+
const u_lo_q = u_c - u_e;
|
|
685
|
+
const u_hi_q = u_c + u_e;
|
|
686
|
+
const v_lo_q = v_c - v_e;
|
|
687
|
+
const v_hi_q = v_c + v_e;
|
|
688
|
+
|
|
689
|
+
if (u_lo_q > half_u || u_hi_q < -half_u) return 0;
|
|
690
|
+
if (v_lo_q > half_v || v_hi_q < -half_v) return 0;
|
|
691
|
+
|
|
692
|
+
const u_lo = u_lo_q > -half_u ? u_lo_q : -half_u;
|
|
693
|
+
const u_hi = u_hi_q < +half_u ? u_hi_q : +half_u;
|
|
694
|
+
const v_lo = v_lo_q > -half_v ? v_lo_q : -half_v;
|
|
695
|
+
const v_hi = v_hi_q < +half_v ? v_hi_q : +half_v;
|
|
696
|
+
|
|
697
|
+
const inv_cell_u = seg_u / size_x;
|
|
698
|
+
const inv_cell_v = seg_v / size_z;
|
|
699
|
+
|
|
700
|
+
let i_first = Math.floor((u_lo + half_u) * inv_cell_u);
|
|
701
|
+
let i_last = Math.ceil((u_hi + half_u) * inv_cell_u) - 1;
|
|
702
|
+
let j_first = Math.floor((v_lo + half_v) * inv_cell_v);
|
|
703
|
+
let j_last = Math.ceil((v_hi + half_v) * inv_cell_v) - 1;
|
|
704
|
+
|
|
705
|
+
if (i_first < 0) i_first = 0;
|
|
706
|
+
if (j_first < 0) j_first = 0;
|
|
707
|
+
if (i_last > seg_u - 1) i_last = seg_u - 1;
|
|
708
|
+
if (j_last > seg_v - 1) j_last = seg_v - 1;
|
|
709
|
+
|
|
710
|
+
if (i_first > i_last || j_first > j_last) return 0;
|
|
711
|
+
|
|
712
|
+
return (i_last - i_first + 1) * (j_last - j_first + 1) * 2;
|
|
160
713
|
}
|