@woosh/meep-engine 3.38.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 +4 -0
- package/src/engine/ecs/transform/Transform64.d.ts +4 -2
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +10 -16
- package/src/engine/graphics/ecs/water/Water.d.ts +25 -63
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +110 -125
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -74
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -18
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
- package/src/engine/graphics/ecs/water/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 +39 -3
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +134 -25
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationLog.js +12 -6
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationSystem.js +39 -8
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +4 -5
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +1131 -97
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +13 -0
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +90 -22
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +84 -24
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +59 -47
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +62 -55
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
- package/src/engine/physics/cloth/playground/garment_build.js +6 -6
- package/src/engine/physics/cloth/playground/garment_main.js +18 -14
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
- package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +703 -429
- package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +32 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +16 -8
- package/src/engine/physics/ecs/Collider.d.ts +7 -2
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -2
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +779 -81
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +5 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
- package/src/engine/physics/integration/integrate_position.d.ts +18 -19
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +40 -37
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +13 -4
- package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +322 -19
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
- package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +57 -79
- package/src/engine/physics/queries/raycast.d.ts +10 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +133 -9
- package/src/engine/physics/queries/shape_cast.d.ts +55 -24
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +2061 -245
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
- package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
- package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +458 -234
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
- package/src/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 +24 -15
- package/src/shade/playground/water_refraction/index.html +6 -8
- package/src/shade/playground/water_refraction/main.js +12 -11
- package/src/shade/playground/water_refraction/world.d.ts +2 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -1
- package/src/shade/playground/water_refraction/world.js +8 -4
- 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 +23 -0
- 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/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/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 +12 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +12 -3
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +3 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +5 -0
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +71 -37
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
- package/src/shade/renderer/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 +13 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +74 -25
- package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_gi.js +56 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts +2 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +51 -40
- 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 +10 -4
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +406 -384
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +19 -9
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +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 +48 -6
- 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
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The spectral grid every water tool works on: 380 to 780 nm in 5 nm steps. That is the range the
|
|
5
|
+
* CIE 1931 colour matching functions carry visible weight over, and the range the Mie colour
|
|
6
|
+
* precedent (`compute_mie_particle_properties_rgb`) integrates, so the red end of the red channel is
|
|
7
|
+
* covered.
|
|
8
|
+
* @type {number}
|
|
9
|
+
*/
|
|
10
|
+
export const WATER_SPECTRAL_WAVELENGTH_MIN = 380;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @type {number}
|
|
14
|
+
*/
|
|
15
|
+
export const WATER_SPECTRAL_WAVELENGTH_MAX = 780;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @type {number}
|
|
19
|
+
*/
|
|
20
|
+
export const WATER_SPECTRAL_WAVELENGTH_STEP = 5;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* What the water is, as far as its molecules are concerned: sea salt adds scattering, it does not
|
|
24
|
+
* change absorption in the visible.
|
|
25
|
+
* @readonly
|
|
26
|
+
* @type {ReadonlyArray<string>}
|
|
27
|
+
*/
|
|
28
|
+
export const WATER_KINDS = Object.freeze(['sea', 'fresh']);
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Absorption coefficient of pure water, 380 to 700 nm in 2.5 nm steps, in 1/cm exactly as printed.
|
|
32
|
+
*
|
|
33
|
+
* Pope, R. M. and Fry, E. S. (1997), "Absorption spectrum (380–700 nm) of pure water. II. Integrating
|
|
34
|
+
* cavity measurements", Appl. Opt. 36(33), 8710–8723. Transcription:
|
|
35
|
+
* https://omlc.org/spectra/water/data/pope97.txt (checked: 450, 550 and 650 nm give 0.00922, 0.0565
|
|
36
|
+
* and 0.340 1/m, the anchors the water optics plan quotes). That transcription also lists values from
|
|
37
|
+
* 702.5 to 727.5 nm; they are not used, because the paper's stated range ends at 700 nm, and Smith &
|
|
38
|
+
* Baker take over there.
|
|
39
|
+
*
|
|
40
|
+
* Mason, Cone & Fry 2016 (Appl. Opt. 55(25)) remeasured below 550 nm and found lower values in the
|
|
41
|
+
* violet. Their table was not obtained, so Pope & Fry is used down to 380 nm; in natural water the
|
|
42
|
+
* dissolved and particulate absorption there is larger than either.
|
|
43
|
+
*
|
|
44
|
+
* @type {ReadonlyArray<number>}
|
|
45
|
+
*/
|
|
46
|
+
const POPE_FRY_1997_PER_CM = Object.freeze([
|
|
47
|
+
0.0001137, 0.0001044, 0.0000941, 0.0000917, 0.0000851, 0.0000829, 0.0000813, 0.0000775,
|
|
48
|
+
0.0000663, 0.0000579, 0.000053, 0.0000503, 0.0000473, 0.0000452, 0.0000444, 0.0000442,
|
|
49
|
+
0.0000454, 0.0000474, 0.0000478, 0.0000482, 0.0000495, 0.0000504, 0.000053, 0.000058,
|
|
50
|
+
0.0000635, 0.0000696, 0.0000751, 0.000083, 0.0000922, 0.0000969, 0.0000962, 0.0000957,
|
|
51
|
+
0.0000979, 0.0001005, 0.0001011, 0.000102, 0.000106, 0.000109, 0.000114, 0.000121,
|
|
52
|
+
0.000127, 0.000131, 0.000136, 0.000144, 0.00015, 0.000162, 0.000173, 0.000191,
|
|
53
|
+
0.000204, 0.000228, 0.000256, 0.00028, 0.000325, 0.000372, 0.000396, 0.000399,
|
|
54
|
+
0.000409, 0.000416, 0.000417, 0.000428, 0.000434, 0.000447, 0.000452, 0.000466,
|
|
55
|
+
0.000474, 0.000489, 0.000511, 0.000537, 0.000565, 0.000593, 0.000596, 0.000606,
|
|
56
|
+
0.000619, 0.00064, 0.000642, 0.000672, 0.000695, 0.000733, 0.000772, 0.000836,
|
|
57
|
+
0.000896, 0.000989, 0.0011, 0.00122, 0.001351, 0.001516, 0.001672, 0.001925,
|
|
58
|
+
0.002224, 0.00247, 0.002577, 0.002629, 0.002644, 0.002665, 0.002678, 0.002707,
|
|
59
|
+
0.002755, 0.00281, 0.002834, 0.002904, 0.002916, 0.002995, 0.003012, 0.003077,
|
|
60
|
+
0.003108, 0.00322, 0.00325, 0.00335, 0.0034, 0.00358, 0.00371, 0.00393,
|
|
61
|
+
0.0041, 0.00424, 0.00429, 0.00436, 0.00439, 0.00448, 0.00448, 0.00461,
|
|
62
|
+
0.00465, 0.00478, 0.00486, 0.00502, 0.00516, 0.00538, 0.00559, 0.00592,
|
|
63
|
+
0.00624,
|
|
64
|
+
]);
|
|
65
|
+
|
|
66
|
+
const POPE_FRY_MIN_NM = 380;
|
|
67
|
+
const POPE_FRY_MAX_NM = 700;
|
|
68
|
+
const POPE_FRY_STEP_NM = 2.5;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Absorption coefficient of the clearest natural water, 710 to 800 nm in 10 nm steps, in 1/cm
|
|
72
|
+
* exactly as printed. Used above Pope & Fry's 700 nm.
|
|
73
|
+
*
|
|
74
|
+
* Smith, R. C. and Baker, K. S. (1981), "Optical properties of the clearest natural waters
|
|
75
|
+
* (200–800 nm)", Appl. Opt. 20(2), 177–184. Transcription:
|
|
76
|
+
* https://omlc.org/spectra/water/data/smith81.txt
|
|
77
|
+
*
|
|
78
|
+
* Between Pope & Fry's last value (700 nm) and Smith & Baker's first used one (710 nm) the two are
|
|
79
|
+
* joined linearly. At 700 nm the sources differ by 4% (0.624 against 0.65 1/m), small beside the
|
|
80
|
+
* 0.6 1/m itself: nothing red survives a metre or two there anyway.
|
|
81
|
+
*
|
|
82
|
+
* @type {ReadonlyArray<number>}
|
|
83
|
+
*/
|
|
84
|
+
const SMITH_BAKER_1981_PER_CM = Object.freeze([
|
|
85
|
+
0.00839, 0.01169, 0.01799, 0.0238, 0.0247, 0.0255, 0.0251, 0.0236, 0.0216, 0.0207,
|
|
86
|
+
]);
|
|
87
|
+
|
|
88
|
+
const SMITH_BAKER_MIN_NM = 710;
|
|
89
|
+
const SMITH_BAKER_STEP_NM = 10;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Scattering coefficient of pure sea water at 500 nm, 1/m, and the exponent of its wavelength
|
|
93
|
+
* dependence: b_w(λ) = 0.00288 (λ / 500)^-4.32.
|
|
94
|
+
*
|
|
95
|
+
* Morel, A. (1974), "Optical properties of pure water and pure sea water", in Optical Aspects of
|
|
96
|
+
* Oceanography, Jerlov & Steemann Nielsen (eds.), 1–24; as given by Mobley's lecture "Scattering
|
|
97
|
+
* models" (https://misclab.umeoce.maine.edu/ftp/classes/OO2011/Lectures/Mobley_Lec7_Scattering_Models.pdf),
|
|
98
|
+
* b_w(λ) = 75.5e-4 (λ / 400)^-4.32, which is the same law (0.00755 · 1.25^-4.32 = 0.00288).
|
|
99
|
+
* @type {number}
|
|
100
|
+
*/
|
|
101
|
+
const SEAWATER_SCATTERING_500 = 0.00288;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* @type {number}
|
|
105
|
+
*/
|
|
106
|
+
const MOLECULAR_SCATTERING_EXPONENT = -4.32;
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* How much more sea water scatters than fresh water. Morel measured natural sea water of salinity
|
|
110
|
+
* 38.4 at five wavelengths from 366 to 578 nm and found it scattered on average 30% more than pure
|
|
111
|
+
* water (Zhang, Hu & He 2009, "Scattering by pure seawater: effect of salinity", Opt. Express 17(7),
|
|
112
|
+
* 5698–5710, which also confirms Morel's measurement to 1% with an independent theory). Fresh water
|
|
113
|
+
* therefore scatters 1 / 1.30 of sea water, with the same wavelength law.
|
|
114
|
+
* @type {number}
|
|
115
|
+
*/
|
|
116
|
+
const SEAWATER_OVER_FRESH_WATER_SCATTERING = 1.3;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Molecular scattering coefficient of pure water, 1/m.
|
|
120
|
+
*
|
|
121
|
+
* @param {Object} options
|
|
122
|
+
* @param {number} options.wavelength nm
|
|
123
|
+
* @param {string} options.water_kind one of {@link WATER_KINDS}
|
|
124
|
+
* @returns {number}
|
|
125
|
+
*/
|
|
126
|
+
export function water_molecular_scattering({ wavelength, water_kind }) {
|
|
127
|
+
assert.isNumber(wavelength, 'wavelength');
|
|
128
|
+
assert.greaterThan(wavelength, 0, 'wavelength');
|
|
129
|
+
assert.isOneOf(water_kind, WATER_KINDS.slice(), 'water_kind');
|
|
130
|
+
|
|
131
|
+
const sea = SEAWATER_SCATTERING_500 * Math.pow(wavelength / 500, MOLECULAR_SCATTERING_EXPONENT);
|
|
132
|
+
|
|
133
|
+
if (water_kind === 'sea') {
|
|
134
|
+
return sea;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
return sea / SEAWATER_OVER_FRESH_WATER_SCATTERING;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Absorption coefficient of pure water, 1/m: Pope & Fry 1997 from 380 to 700 nm, Smith & Baker
|
|
142
|
+
* 1981 above, linear between tabulated values.
|
|
143
|
+
*
|
|
144
|
+
* @param {Object} options
|
|
145
|
+
* @param {number} options.wavelength nm, within [{@link WATER_SPECTRAL_WAVELENGTH_MIN}, {@link WATER_SPECTRAL_WAVELENGTH_MAX}]
|
|
146
|
+
* @returns {number}
|
|
147
|
+
*/
|
|
148
|
+
export function water_pure_absorption({ wavelength }) {
|
|
149
|
+
assert.isNumber(wavelength, 'wavelength');
|
|
150
|
+
assert.greaterThanOrEqual(wavelength, WATER_SPECTRAL_WAVELENGTH_MIN, 'wavelength');
|
|
151
|
+
assert.lessThanOrEqual(wavelength, WATER_SPECTRAL_WAVELENGTH_MAX, 'wavelength');
|
|
152
|
+
|
|
153
|
+
let per_cm;
|
|
154
|
+
|
|
155
|
+
if (wavelength <= POPE_FRY_MAX_NM) {
|
|
156
|
+
const x = (wavelength - POPE_FRY_MIN_NM) / POPE_FRY_STEP_NM;
|
|
157
|
+
const i0 = Math.min(Math.floor(x), POPE_FRY_1997_PER_CM.length - 2);
|
|
158
|
+
const t = x - i0;
|
|
159
|
+
|
|
160
|
+
per_cm = POPE_FRY_1997_PER_CM[i0] * (1 - t) + POPE_FRY_1997_PER_CM[i0 + 1] * t;
|
|
161
|
+
} else if (wavelength < SMITH_BAKER_MIN_NM) {
|
|
162
|
+
// the seam: Pope & Fry's 700 nm to Smith & Baker's 710 nm
|
|
163
|
+
const t = (wavelength - POPE_FRY_MAX_NM) / (SMITH_BAKER_MIN_NM - POPE_FRY_MAX_NM);
|
|
164
|
+
|
|
165
|
+
per_cm = POPE_FRY_1997_PER_CM[POPE_FRY_1997_PER_CM.length - 1] * (1 - t) + SMITH_BAKER_1981_PER_CM[0] * t;
|
|
166
|
+
} else {
|
|
167
|
+
const x = (wavelength - SMITH_BAKER_MIN_NM) / SMITH_BAKER_STEP_NM;
|
|
168
|
+
const i0 = Math.min(Math.floor(x), SMITH_BAKER_1981_PER_CM.length - 2);
|
|
169
|
+
const t = x - i0;
|
|
170
|
+
|
|
171
|
+
per_cm = SMITH_BAKER_1981_PER_CM[i0] * (1 - t) + SMITH_BAKER_1981_PER_CM[i0 + 1] * t;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// 1/cm to 1/m
|
|
175
|
+
return per_cm * 100;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* The wavelengths of the water tools' spectral grid, nm. A new array on every call.
|
|
180
|
+
*
|
|
181
|
+
* @returns {Float64Array}
|
|
182
|
+
*/
|
|
183
|
+
export function water_spectral_wavelengths() {
|
|
184
|
+
const count = (WATER_SPECTRAL_WAVELENGTH_MAX - WATER_SPECTRAL_WAVELENGTH_MIN) / WATER_SPECTRAL_WAVELENGTH_STEP + 1;
|
|
185
|
+
const wavelengths = new Float64Array(count);
|
|
186
|
+
|
|
187
|
+
for (let i = 0; i < count; i++) {
|
|
188
|
+
wavelengths[i] = WATER_SPECTRAL_WAVELENGTH_MIN + i * WATER_SPECTRAL_WAVELENGTH_STEP;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return wavelengths;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/**
|
|
195
|
+
* The tabulated optics of water itself on the 5 nm grid: absorption of pure water and molecular
|
|
196
|
+
* scattering of pure sea water and of fresh water. New arrays on every call.
|
|
197
|
+
*
|
|
198
|
+
* @returns {{wavelengths: Float64Array, pure_water_absorption: Float64Array, seawater_scattering: Float64Array, fresh_water_scattering: Float64Array}}
|
|
199
|
+
* coefficients in 1/m, wavelengths in nm
|
|
200
|
+
*/
|
|
201
|
+
export function water_iop_spectral_reference() {
|
|
202
|
+
const wavelengths = water_spectral_wavelengths();
|
|
203
|
+
const count = wavelengths.length;
|
|
204
|
+
|
|
205
|
+
const pure_water_absorption = new Float64Array(count);
|
|
206
|
+
const seawater_scattering = new Float64Array(count);
|
|
207
|
+
const fresh_water_scattering = new Float64Array(count);
|
|
208
|
+
|
|
209
|
+
for (let i = 0; i < count; i++) {
|
|
210
|
+
const wavelength = wavelengths[i];
|
|
211
|
+
|
|
212
|
+
pure_water_absorption[i] = water_pure_absorption({ wavelength });
|
|
213
|
+
seawater_scattering[i] = water_molecular_scattering({ wavelength, water_kind: 'sea' });
|
|
214
|
+
fresh_water_scattering[i] = water_molecular_scattering({ wavelength, water_kind: 'fresh' });
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
return {
|
|
218
|
+
wavelengths,
|
|
219
|
+
pure_water_absorption,
|
|
220
|
+
seawater_scattering,
|
|
221
|
+
fresh_water_scattering,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fit each spectral coefficient of a water description to RGB with {@link water_rgb_from_spectral},
|
|
3
|
+
* one at a time: absorption, molecular scattering and particle scattering. Each is fitted on its
|
|
4
|
+
* own because each becomes its own field of the medium. The fit is not linear, so the sum of the
|
|
5
|
+
* three fits is not the fit of the summed beam attenuation: for Jerlov II they agree within 1% in
|
|
6
|
+
* green and 2% in blue, and the sum is 8% higher in red.
|
|
7
|
+
*
|
|
8
|
+
* @param {Object} options
|
|
9
|
+
* @param {WaterSpectralIOP} options.iop
|
|
10
|
+
* @param {ArrayLike<number>} options.path_lengths metres
|
|
11
|
+
* @returns {{iop: WaterRgbIOP, residual: {absorption: number, molecular_scattering: number, particle_scattering: number}}}
|
|
12
|
+
* the RGB description, and each fit's worst ΔE*ab over the path lengths
|
|
13
|
+
*/
|
|
14
|
+
export function water_rgb_iop_from_spectral({ iop, path_lengths }: {
|
|
15
|
+
iop: WaterSpectralIOP;
|
|
16
|
+
path_lengths: ArrayLike<number>;
|
|
17
|
+
}): {
|
|
18
|
+
iop: WaterRgbIOP;
|
|
19
|
+
residual: {
|
|
20
|
+
absorption: number;
|
|
21
|
+
molecular_scattering: number;
|
|
22
|
+
particle_scattering: number;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Build the engine's medium from an RGB water description: the absorption, then the water's own
|
|
27
|
+
* scattering with the molecular phase (depolarization 0.039), then the particles' scattering with
|
|
28
|
+
* the Fournier-Forand phase of their backscatter fraction. Both lobes are always present, a zero
|
|
29
|
+
* coefficient included, so every water medium has the same shape.
|
|
30
|
+
*
|
|
31
|
+
* @param {Object} options
|
|
32
|
+
* @param {WaterRgbIOP} options.iop
|
|
33
|
+
* @returns {ParticipatingMedium}
|
|
34
|
+
*/
|
|
35
|
+
export function water_medium_from_rgb_iop({ iop }: {
|
|
36
|
+
iop: WaterRgbIOP;
|
|
37
|
+
}): ParticipatingMedium;
|
|
38
|
+
/**
|
|
39
|
+
* Build the engine's medium from a spectral water description, fitting it to RGB over the given
|
|
40
|
+
* path lengths ({@link water_rgb_iop_from_spectral}, then {@link water_medium_from_rgb_iop}).
|
|
41
|
+
*
|
|
42
|
+
* @param {Object} options
|
|
43
|
+
* @param {WaterSpectralIOP} options.iop
|
|
44
|
+
* @param {ArrayLike<number>} options.path_lengths metres; `WATER_DEFAULT_PATH_LENGTHS` unless there
|
|
45
|
+
* is a reason to weigh other distances
|
|
46
|
+
* @returns {ParticipatingMedium}
|
|
47
|
+
*/
|
|
48
|
+
export function water_medium_from_iop({ iop, path_lengths }: {
|
|
49
|
+
iop: WaterSpectralIOP;
|
|
50
|
+
path_lengths: ArrayLike<number>;
|
|
51
|
+
}): ParticipatingMedium;
|
|
52
|
+
/**
|
|
53
|
+
* @typedef {import("./water_iop_from_constituents.js").WaterSpectralIOP} WaterSpectralIOP
|
|
54
|
+
*/
|
|
55
|
+
/**
|
|
56
|
+
* The inherent optical properties of a water body in the engine's linear RGB working space, what a
|
|
57
|
+
* {@link ParticipatingMedium} is built from.
|
|
58
|
+
*
|
|
59
|
+
* @typedef {Object} WaterRgbIOP
|
|
60
|
+
* @property {number[]} absorption total absorption a, RGB, 1/m
|
|
61
|
+
* @property {number[]} molecular_scattering scattering by the water itself b_w, RGB, 1/m
|
|
62
|
+
* @property {number[]} particle_scattering scattering by suspended particles b_p, RGB, 1/m
|
|
63
|
+
* @property {number} particle_backscatter_fraction B_p of the particles' Fournier-Forand phase
|
|
64
|
+
*/
|
|
65
|
+
/**
|
|
66
|
+
* Depolarization ratio of water's molecular scattering, which fixes the shape of its phase function
|
|
67
|
+
* (1 + 0.925 cos²ψ): 0.039, Farinato & Rowell 1976, as adopted by Zhang et al. 2009 (Opt. Express
|
|
68
|
+
* 17(7)) and the water optics plan (§3.2).
|
|
69
|
+
* @type {number}
|
|
70
|
+
*/
|
|
71
|
+
export const WATER_MOLECULAR_DEPOLARIZATION: number;
|
|
72
|
+
export type WaterSpectralIOP = import("./water_iop_from_constituents.js").WaterSpectralIOP;
|
|
73
|
+
/**
|
|
74
|
+
* The inherent optical properties of a water body in the engine's linear RGB working space, what a
|
|
75
|
+
* {@link ParticipatingMedium } is built from.
|
|
76
|
+
*/
|
|
77
|
+
export type WaterRgbIOP = {
|
|
78
|
+
/**
|
|
79
|
+
* total absorption a, RGB, 1/m
|
|
80
|
+
*/
|
|
81
|
+
absorption: number[];
|
|
82
|
+
/**
|
|
83
|
+
* scattering by the water itself b_w, RGB, 1/m
|
|
84
|
+
*/
|
|
85
|
+
molecular_scattering: number[];
|
|
86
|
+
/**
|
|
87
|
+
* scattering by suspended particles b_p, RGB, 1/m
|
|
88
|
+
*/
|
|
89
|
+
particle_scattering: number[];
|
|
90
|
+
/**
|
|
91
|
+
* B_p of the particles' Fournier-Forand phase
|
|
92
|
+
*/
|
|
93
|
+
particle_backscatter_fraction: number;
|
|
94
|
+
};
|
|
95
|
+
import { ParticipatingMedium } from "../ParticipatingMedium.js";
|
|
96
|
+
//# sourceMappingURL=water_medium_from_iop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"water_medium_from_iop.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/medium/water/water_medium_from_iop.js"],"names":[],"mappings":"AA+CA;;;;;;;;;;;;GAYG;AACH;IALqC,GAAG,EAA7B,gBAAgB;IACW,YAAY,EAAvC,UAAU,MAAM,CAAC;IACf;IAAC,GAAG,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAC,CAAA;CAAC,CAsCzH;AAED;;;;;;;;;GASG;AACH;IAHgC,GAAG,EAAxB,WAAW;IACT,mBAAmB,CAuB/B;AAED;;;;;;;;;GASG;AACH;IALqC,GAAG,EAA7B,gBAAgB;IACW,YAAY,EAAvC,UAAU,MAAM,CAAC;IAEf,mBAAmB,CAM/B;AAtID;;GAEG;AAEH;;;;;;;;;GASG;AAEH;;;;;GAKG;AACH,6CAFU,MAAM,CAEoC;+BApBvC,OAAO,kCAAkC,EAAE,gBAAgB;;;;;;;;;gBAQ1D,MAAM,EAAE;;;;0BACR,MAAM,EAAE;;;;yBACR,MAAM,EAAE;;;;mCACR,MAAM;;oCAjBgB,2BAA2B"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import {
|
|
3
|
+
FOURNIER_FORAND_BACKSCATTER_MAX,
|
|
4
|
+
FOURNIER_FORAND_BACKSCATTER_MIN
|
|
5
|
+
} from "../../shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js";
|
|
6
|
+
import { ParticipatingMedium } from "../ParticipatingMedium.js";
|
|
7
|
+
import { PhaseFournierForand } from "../phase/PhaseFournierForand.js";
|
|
8
|
+
import { PhaseWaterMolecular } from "../phase/PhaseWaterMolecular.js";
|
|
9
|
+
import { water_rgb_from_spectral } from "./water_rgb_from_spectral.js";
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @typedef {import("./water_iop_from_constituents.js").WaterSpectralIOP} WaterSpectralIOP
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The inherent optical properties of a water body in the engine's linear RGB working space, what a
|
|
17
|
+
* {@link ParticipatingMedium} is built from.
|
|
18
|
+
*
|
|
19
|
+
* @typedef {Object} WaterRgbIOP
|
|
20
|
+
* @property {number[]} absorption total absorption a, RGB, 1/m
|
|
21
|
+
* @property {number[]} molecular_scattering scattering by the water itself b_w, RGB, 1/m
|
|
22
|
+
* @property {number[]} particle_scattering scattering by suspended particles b_p, RGB, 1/m
|
|
23
|
+
* @property {number} particle_backscatter_fraction B_p of the particles' Fournier-Forand phase
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Depolarization ratio of water's molecular scattering, which fixes the shape of its phase function
|
|
28
|
+
* (1 + 0.925 cos²ψ): 0.039, Farinato & Rowell 1976, as adopted by Zhang et al. 2009 (Opt. Express
|
|
29
|
+
* 17(7)) and the water optics plan (§3.2).
|
|
30
|
+
* @type {number}
|
|
31
|
+
*/
|
|
32
|
+
export const WATER_MOLECULAR_DEPOLARIZATION = 0.039;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @param {number[]} rgb
|
|
36
|
+
* @param {string} name
|
|
37
|
+
*/
|
|
38
|
+
function assert_rgb_coefficient(rgb, name) {
|
|
39
|
+
assert.isArrayLike(rgb, name);
|
|
40
|
+
assert.equal(rgb.length, 3, `${name}.length`);
|
|
41
|
+
|
|
42
|
+
for (let i = 0; i < 3; i++) {
|
|
43
|
+
assert.isFinite(rgb[i], `${name}[${i}]`);
|
|
44
|
+
assert.greaterThanOrEqual(rgb[i], 0, `${name}[${i}]`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Fit each spectral coefficient of a water description to RGB with {@link water_rgb_from_spectral},
|
|
50
|
+
* one at a time: absorption, molecular scattering and particle scattering. Each is fitted on its
|
|
51
|
+
* own because each becomes its own field of the medium. The fit is not linear, so the sum of the
|
|
52
|
+
* three fits is not the fit of the summed beam attenuation: for Jerlov II they agree within 1% in
|
|
53
|
+
* green and 2% in blue, and the sum is 8% higher in red.
|
|
54
|
+
*
|
|
55
|
+
* @param {Object} options
|
|
56
|
+
* @param {WaterSpectralIOP} options.iop
|
|
57
|
+
* @param {ArrayLike<number>} options.path_lengths metres
|
|
58
|
+
* @returns {{iop: WaterRgbIOP, residual: {absorption: number, molecular_scattering: number, particle_scattering: number}}}
|
|
59
|
+
* the RGB description, and each fit's worst ΔE*ab over the path lengths
|
|
60
|
+
*/
|
|
61
|
+
export function water_rgb_iop_from_spectral({ iop, path_lengths }) {
|
|
62
|
+
assert.defined(iop, 'iop');
|
|
63
|
+
assert.isNumber(iop.particle_backscatter_fraction, 'iop.particle_backscatter_fraction');
|
|
64
|
+
|
|
65
|
+
const absorption = water_rgb_from_spectral({
|
|
66
|
+
wavelengths: iop.wavelengths,
|
|
67
|
+
coefficient: iop.absorption,
|
|
68
|
+
path_lengths,
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
const molecular_scattering = water_rgb_from_spectral({
|
|
72
|
+
wavelengths: iop.wavelengths,
|
|
73
|
+
coefficient: iop.molecular_scattering,
|
|
74
|
+
path_lengths,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const particle_scattering = water_rgb_from_spectral({
|
|
78
|
+
wavelengths: iop.wavelengths,
|
|
79
|
+
coefficient: iop.particle_scattering,
|
|
80
|
+
path_lengths,
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
return {
|
|
84
|
+
iop: {
|
|
85
|
+
absorption: absorption.coefficient,
|
|
86
|
+
molecular_scattering: molecular_scattering.coefficient,
|
|
87
|
+
particle_scattering: particle_scattering.coefficient,
|
|
88
|
+
particle_backscatter_fraction: iop.particle_backscatter_fraction,
|
|
89
|
+
},
|
|
90
|
+
residual: {
|
|
91
|
+
absorption: absorption.residual,
|
|
92
|
+
molecular_scattering: molecular_scattering.residual,
|
|
93
|
+
particle_scattering: particle_scattering.residual,
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Build the engine's medium from an RGB water description: the absorption, then the water's own
|
|
100
|
+
* scattering with the molecular phase (depolarization 0.039), then the particles' scattering with
|
|
101
|
+
* the Fournier-Forand phase of their backscatter fraction. Both lobes are always present, a zero
|
|
102
|
+
* coefficient included, so every water medium has the same shape.
|
|
103
|
+
*
|
|
104
|
+
* @param {Object} options
|
|
105
|
+
* @param {WaterRgbIOP} options.iop
|
|
106
|
+
* @returns {ParticipatingMedium}
|
|
107
|
+
*/
|
|
108
|
+
export function water_medium_from_rgb_iop({ iop }) {
|
|
109
|
+
assert.defined(iop, 'iop');
|
|
110
|
+
assert_rgb_coefficient(iop.absorption, 'iop.absorption');
|
|
111
|
+
assert_rgb_coefficient(iop.molecular_scattering, 'iop.molecular_scattering');
|
|
112
|
+
assert_rgb_coefficient(iop.particle_scattering, 'iop.particle_scattering');
|
|
113
|
+
|
|
114
|
+
const backscatter_fraction = iop.particle_backscatter_fraction;
|
|
115
|
+
|
|
116
|
+
assert.isNumber(backscatter_fraction, 'iop.particle_backscatter_fraction');
|
|
117
|
+
assert.greaterThanOrEqual(backscatter_fraction, FOURNIER_FORAND_BACKSCATTER_MIN, 'iop.particle_backscatter_fraction below what Fournier-Forand reaches');
|
|
118
|
+
assert.lessThanOrEqual(backscatter_fraction, FOURNIER_FORAND_BACKSCATTER_MAX, 'iop.particle_backscatter_fraction above what Fournier-Forand reaches');
|
|
119
|
+
|
|
120
|
+
const medium = new ParticipatingMedium();
|
|
121
|
+
|
|
122
|
+
medium.absorption = iop.absorption.slice();
|
|
123
|
+
medium.needsUpdate = true;
|
|
124
|
+
|
|
125
|
+
medium.add_lobe(iop.molecular_scattering, new PhaseWaterMolecular({ depolarization: WATER_MOLECULAR_DEPOLARIZATION }));
|
|
126
|
+
medium.add_lobe(iop.particle_scattering, new PhaseFournierForand({ backscatter_fraction }));
|
|
127
|
+
|
|
128
|
+
return medium;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Build the engine's medium from a spectral water description, fitting it to RGB over the given
|
|
133
|
+
* path lengths ({@link water_rgb_iop_from_spectral}, then {@link water_medium_from_rgb_iop}).
|
|
134
|
+
*
|
|
135
|
+
* @param {Object} options
|
|
136
|
+
* @param {WaterSpectralIOP} options.iop
|
|
137
|
+
* @param {ArrayLike<number>} options.path_lengths metres; `WATER_DEFAULT_PATH_LENGTHS` unless there
|
|
138
|
+
* is a reason to weigh other distances
|
|
139
|
+
* @returns {ParticipatingMedium}
|
|
140
|
+
*/
|
|
141
|
+
export function water_medium_from_iop({ iop, path_lengths }) {
|
|
142
|
+
const fitted = water_rgb_iop_from_spectral({ iop, path_lengths });
|
|
143
|
+
|
|
144
|
+
return water_medium_from_rgb_iop({ iop: fitted.iop });
|
|
145
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The spectral description of a preset.
|
|
3
|
+
*
|
|
4
|
+
* @param {Object} options
|
|
5
|
+
* @param {string} options.preset one of {@link WATER_PRESETS}
|
|
6
|
+
* @returns {WaterSpectralIOP}
|
|
7
|
+
*/
|
|
8
|
+
export function water_iop_preset({ preset }: {
|
|
9
|
+
preset: string;
|
|
10
|
+
}): WaterSpectralIOP;
|
|
11
|
+
/**
|
|
12
|
+
* The medium of a preset, fitted to RGB over {@link WATER_DEFAULT_PATH_LENGTHS}. Fitting takes tens
|
|
13
|
+
* of milliseconds; it is an authoring step, not something to call per frame.
|
|
14
|
+
*
|
|
15
|
+
* @param {Object} options
|
|
16
|
+
* @param {string} options.preset one of {@link WATER_PRESETS}
|
|
17
|
+
* @returns {ParticipatingMedium}
|
|
18
|
+
*/
|
|
19
|
+
export function water_medium_preset({ preset }: {
|
|
20
|
+
preset: string;
|
|
21
|
+
}): ParticipatingMedium;
|
|
22
|
+
/**
|
|
23
|
+
* The medium a `Water` body has unless told otherwise: clear natural open ocean, chlorophyll 0.3 mg/m³.
|
|
24
|
+
*
|
|
25
|
+
* @returns {ParticipatingMedium}
|
|
26
|
+
*/
|
|
27
|
+
export function water_medium_default(): ParticipatingMedium;
|
|
28
|
+
/**
|
|
29
|
+
* @typedef {import("./water_iop_from_constituents.js").WaterSpectralIOP} WaterSpectralIOP
|
|
30
|
+
* @typedef {import("./water_medium_from_iop.js").WaterRgbIOP} WaterRgbIOP
|
|
31
|
+
* @typedef {import("../ParticipatingMedium.js").ParticipatingMedium} ParticipatingMedium
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* The named water presets of the water optics plan (§7.4), each a physical description, never an
|
|
35
|
+
* art value:
|
|
36
|
+
*
|
|
37
|
+
* | Preset | Built from |
|
|
38
|
+
* |---|---|
|
|
39
|
+
* | `swimming_pool` | pure fresh water: no chlorophyll, CDOM or minerals |
|
|
40
|
+
* | `clear_ocean` | Jerlov IB |
|
|
41
|
+
* | `open_ocean` | chlorophyll 0.3 mg/m³ with CDOM a_g(440) 0.0055 1/m (Case 1: a fifth of the particles' absorption at 440 nm), sea; the `Water` default |
|
|
42
|
+
* | `coastal` | Jerlov 3C |
|
|
43
|
+
* | `tropical_lagoon` | Jerlov IB: the water is clear ocean water; what makes a lagoon (shallow, over sand) belongs to the scene |
|
|
44
|
+
* | `green_lake` | chlorophyll 5 mg/m³, CDOM a_g(440) 0.3 1/m, fresh |
|
|
45
|
+
* | `turbid_river` | minerals 30 g/m³, fresh |
|
|
46
|
+
*
|
|
47
|
+
* @readonly
|
|
48
|
+
* @type {ReadonlyArray<string>}
|
|
49
|
+
*/
|
|
50
|
+
export const WATER_PRESETS: ReadonlyArray<string>;
|
|
51
|
+
/**
|
|
52
|
+
* The `Water` default, `open_ocean` fitted over {@link WATER_DEFAULT_PATH_LENGTHS},
|
|
53
|
+
* recorded so that making a water body does not run the fit. The spec checks these numbers against
|
|
54
|
+
* the fit itself, so a change to the data or the fit that moves them fails until they are
|
|
55
|
+
* re-recorded. Recorded 2026-10-03.
|
|
56
|
+
*
|
|
57
|
+
* @readonly
|
|
58
|
+
* @type {Readonly<{absorption: ReadonlyArray<number>, molecular_scattering: ReadonlyArray<number>, particle_scattering: ReadonlyArray<number>, particle_backscatter_fraction: number}>}
|
|
59
|
+
*/
|
|
60
|
+
export const WATER_DEFAULT_RGB_IOP: Readonly<{
|
|
61
|
+
absorption: ReadonlyArray<number>;
|
|
62
|
+
molecular_scattering: ReadonlyArray<number>;
|
|
63
|
+
particle_scattering: ReadonlyArray<number>;
|
|
64
|
+
particle_backscatter_fraction: number;
|
|
65
|
+
}>;
|
|
66
|
+
export type WaterSpectralIOP = import("./water_iop_from_constituents.js").WaterSpectralIOP;
|
|
67
|
+
export type WaterRgbIOP = import("./water_medium_from_iop.js").WaterRgbIOP;
|
|
68
|
+
export type ParticipatingMedium = import("../ParticipatingMedium.js").ParticipatingMedium;
|
|
69
|
+
//# sourceMappingURL=water_presets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"water_presets.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/medium/water/water_presets.js"],"names":[],"mappings":"AAuCA;;;;;;GAMG;AACH;IAH2B,MAAM,EAAtB,MAAM;IACJ,gBAAgB,CA2B5B;AAED;;;;;;;GAOG;AACH;IAH2B,MAAM,EAAtB,MAAM;IACJ,mBAAmB,CAO/B;AAkBD;;;;GAIG;AACH,wCAFa,mBAAmB,CAW/B;AAhHD;;;;GAIG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,4BAFU,cAAc,MAAM,CAAC,CAU5B;AAmDH;;;;;;;;GAQG;AACH,oCAFU,SAAS;IAAC,UAAU,EAAE,cAAc,MAAM,CAAC,CAAC;IAAC,oBAAoB,EAAE,cAAc,MAAM,CAAC,CAAC;IAAC,mBAAmB,EAAE,cAAc,MAAM,CAAC,CAAC;IAAC,6BAA6B,EAAE,MAAM,CAAA;CAAC,CAAC,CAOpL;+BA/FU,OAAO,kCAAkC,EAAE,gBAAgB;0BAC3D,OAAO,4BAA4B,EAAE,WAAW;kCAChD,OAAO,2BAA2B,EAAE,mBAAmB"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { assert } from "../../../../core/assert.js";
|
|
2
|
+
import { WATER_DEFAULT_PATH_LENGTHS } from "./WATER_DEFAULT_PATH_LENGTHS.js";
|
|
3
|
+
import { water_iop_from_constituents } from "./water_iop_from_constituents.js";
|
|
4
|
+
import { water_iop_jerlov } from "./water_iop_jerlov.js";
|
|
5
|
+
import { water_medium_from_iop, water_medium_from_rgb_iop } from "./water_medium_from_iop.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {import("./water_iop_from_constituents.js").WaterSpectralIOP} WaterSpectralIOP
|
|
9
|
+
* @typedef {import("./water_medium_from_iop.js").WaterRgbIOP} WaterRgbIOP
|
|
10
|
+
* @typedef {import("../ParticipatingMedium.js").ParticipatingMedium} ParticipatingMedium
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The named water presets of the water optics plan (§7.4), each a physical description, never an
|
|
15
|
+
* art value:
|
|
16
|
+
*
|
|
17
|
+
* | Preset | Built from |
|
|
18
|
+
* |---|---|
|
|
19
|
+
* | `swimming_pool` | pure fresh water: no chlorophyll, CDOM or minerals |
|
|
20
|
+
* | `clear_ocean` | Jerlov IB |
|
|
21
|
+
* | `open_ocean` | chlorophyll 0.3 mg/m³ with CDOM a_g(440) 0.0055 1/m (Case 1: a fifth of the particles' absorption at 440 nm), sea; the `Water` default |
|
|
22
|
+
* | `coastal` | Jerlov 3C |
|
|
23
|
+
* | `tropical_lagoon` | Jerlov IB: the water is clear ocean water; what makes a lagoon (shallow, over sand) belongs to the scene |
|
|
24
|
+
* | `green_lake` | chlorophyll 5 mg/m³, CDOM a_g(440) 0.3 1/m, fresh |
|
|
25
|
+
* | `turbid_river` | minerals 30 g/m³, fresh |
|
|
26
|
+
*
|
|
27
|
+
* @readonly
|
|
28
|
+
* @type {ReadonlyArray<string>}
|
|
29
|
+
*/
|
|
30
|
+
export const WATER_PRESETS = Object.freeze([
|
|
31
|
+
'swimming_pool',
|
|
32
|
+
'clear_ocean',
|
|
33
|
+
'open_ocean',
|
|
34
|
+
'coastal',
|
|
35
|
+
'tropical_lagoon',
|
|
36
|
+
'green_lake',
|
|
37
|
+
'turbid_river',
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* The spectral description of a preset.
|
|
42
|
+
*
|
|
43
|
+
* @param {Object} options
|
|
44
|
+
* @param {string} options.preset one of {@link WATER_PRESETS}
|
|
45
|
+
* @returns {WaterSpectralIOP}
|
|
46
|
+
*/
|
|
47
|
+
export function water_iop_preset({ preset }) {
|
|
48
|
+
assert.isOneOf(preset, WATER_PRESETS.slice(), 'preset');
|
|
49
|
+
|
|
50
|
+
switch (preset) {
|
|
51
|
+
case 'swimming_pool':
|
|
52
|
+
return water_iop_from_constituents({ chlorophyll: 0, cdom_440: 0, mineral: 0, water_kind: 'fresh' });
|
|
53
|
+
case 'clear_ocean':
|
|
54
|
+
return water_iop_jerlov({ type: 'IB' });
|
|
55
|
+
case 'open_ocean':
|
|
56
|
+
// Not Jerlov II: its tables pair near-pure-water absorption with large scattering, which
|
|
57
|
+
// Gordon's relation cannot reconcile with its own diffuse attenuation for any measured
|
|
58
|
+
// particle backscatter fraction, and which reads murky (beam attenuation 0.42 1/m in
|
|
59
|
+
// green). The bio-optical model meets Morel & Maritorena's measured attenuation within 11%.
|
|
60
|
+
return water_iop_from_constituents({ chlorophyll: 0.3, cdom_440: 0.0055, mineral: 0, water_kind: 'sea' });
|
|
61
|
+
case 'coastal':
|
|
62
|
+
return water_iop_jerlov({ type: '3C' });
|
|
63
|
+
case 'tropical_lagoon':
|
|
64
|
+
return water_iop_jerlov({ type: 'IB' });
|
|
65
|
+
case 'green_lake':
|
|
66
|
+
return water_iop_from_constituents({ chlorophyll: 5, cdom_440: 0.3, mineral: 0, water_kind: 'fresh' });
|
|
67
|
+
case 'turbid_river':
|
|
68
|
+
return water_iop_from_constituents({ chlorophyll: 0, cdom_440: 0, mineral: 30, water_kind: 'fresh' });
|
|
69
|
+
default:
|
|
70
|
+
throw new Error(`unhandled preset '${preset}'`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* The medium of a preset, fitted to RGB over {@link WATER_DEFAULT_PATH_LENGTHS}. Fitting takes tens
|
|
76
|
+
* of milliseconds; it is an authoring step, not something to call per frame.
|
|
77
|
+
*
|
|
78
|
+
* @param {Object} options
|
|
79
|
+
* @param {string} options.preset one of {@link WATER_PRESETS}
|
|
80
|
+
* @returns {ParticipatingMedium}
|
|
81
|
+
*/
|
|
82
|
+
export function water_medium_preset({ preset }) {
|
|
83
|
+
return water_medium_from_iop({
|
|
84
|
+
iop: water_iop_preset({ preset }),
|
|
85
|
+
path_lengths: WATER_DEFAULT_PATH_LENGTHS,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* The `Water` default, `open_ocean` fitted over {@link WATER_DEFAULT_PATH_LENGTHS},
|
|
91
|
+
* recorded so that making a water body does not run the fit. The spec checks these numbers against
|
|
92
|
+
* the fit itself, so a change to the data or the fit that moves them fails until they are
|
|
93
|
+
* re-recorded. Recorded 2026-10-03.
|
|
94
|
+
*
|
|
95
|
+
* @readonly
|
|
96
|
+
* @type {Readonly<{absorption: ReadonlyArray<number>, molecular_scattering: ReadonlyArray<number>, particle_scattering: ReadonlyArray<number>, particle_backscatter_fraction: number}>}
|
|
97
|
+
*/
|
|
98
|
+
export const WATER_DEFAULT_RGB_IOP = Object.freeze({
|
|
99
|
+
absorption: Object.freeze([0.335154, 0.0584947, 0.0358503]),
|
|
100
|
+
molecular_scattering: Object.freeze([0.000883043, 0.00196275, 0.00481488]),
|
|
101
|
+
particle_scattering: Object.freeze([0.141817, 0.16761, 0.206582]),
|
|
102
|
+
particle_backscatter_fraction: 0.008307196863200843,
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* The medium a `Water` body has unless told otherwise: clear natural open ocean, chlorophyll 0.3 mg/m³.
|
|
107
|
+
*
|
|
108
|
+
* @returns {ParticipatingMedium}
|
|
109
|
+
*/
|
|
110
|
+
export function water_medium_default() {
|
|
111
|
+
return water_medium_from_rgb_iop({
|
|
112
|
+
iop: {
|
|
113
|
+
absorption: WATER_DEFAULT_RGB_IOP.absorption.slice(),
|
|
114
|
+
molecular_scattering: WATER_DEFAULT_RGB_IOP.molecular_scattering.slice(),
|
|
115
|
+
particle_scattering: WATER_DEFAULT_RGB_IOP.particle_scattering.slice(),
|
|
116
|
+
particle_backscatter_fraction: WATER_DEFAULT_RGB_IOP.particle_backscatter_fraction,
|
|
117
|
+
},
|
|
118
|
+
});
|
|
119
|
+
}
|