@woosh/meep-engine 3.37.0 → 3.39.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/bundle-worker-image-decoder.js +1 -1
- package/build/bundle-worker-terrain.js +1 -1
- package/package.json +1 -1
- package/src/core/binary/BinaryBuffer.d.ts +11 -0
- package/src/core/binary/BinaryBuffer.d.ts.map +1 -1
- package/src/core/binary/BinaryBuffer.js +30 -0
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.d.ts.map +1 -1
- package/src/core/bvh2/bvh3/query/bvh_query_user_data_intersects_aabb.js +28 -7
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts +15 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented.js +41 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts +12 -0
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.d.ts.map +1 -1
- package/src/core/geom/3d/aabb/aabb3_transform_oriented_inverse.js +27 -0
- package/src/core/geom/3d/gjk/gjk.js +3 -3
- package/src/core/geom/3d/gjk/gjk_distance.d.ts +94 -0
- package/src/core/geom/3d/gjk/gjk_distance.d.ts.map +1 -0
- package/src/core/geom/3d/gjk/gjk_distance.js +782 -0
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts +5 -4
- package/src/core/geom/3d/gjk/gjk_epa_penetration.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/gjk_epa_penetration.js +14 -9
- package/src/core/geom/3d/gjk/minkowski_support.d.ts +11 -7
- package/src/core/geom/3d/gjk/minkowski_support.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/minkowski_support.js +33 -9
- package/src/core/geom/3d/gjk/mpr.d.ts.map +1 -1
- package/src/core/geom/3d/gjk/mpr.js +26 -5
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts +15 -0
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.d.ts.map +1 -1
- package/src/core/geom/3d/line/line3_compute_segment_closest_point_to_aabb3_t.js +106 -33
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts +2 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale.js +4 -8
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts +32 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.d.ts.map +1 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_array.js +85 -0
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts +3 -3
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.d.ts.map +1 -1
- package/src/core/geom/3d/mat4/m4_from_rotation_translation_scale_scalar.js +24 -34
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts +17 -0
- package/src/core/geom/3d/quaternion/quat3_integrate.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_integrate.js +45 -4
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts +16 -0
- package/src/core/geom/3d/quaternion/quat3_multiply.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_multiply.js +25 -0
- package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts +18 -0
- package/src/core/geom/3d/quaternion/quat3_nlerp.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_nlerp.js +45 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts +17 -0
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_shortest_arc.js +155 -94
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts +12 -0
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.d.ts.map +1 -1
- package/src/core/geom/3d/quaternion/quat3_to_matrix3.js +31 -0
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts +20 -6
- package/src/core/geom/3d/shape/AbstractShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/AbstractShape3D.js +20 -6
- package/src/core/geom/3d/shape/BoxShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/BoxShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/BoxShape3D.js +5 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CapsuleShape3D.js +5 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts +25 -11
- package/src/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +392 -22
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts +8 -7
- package/src/core/geom/3d/shape/CylinderShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/CylinderShape3D.js +12 -7
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts +51 -8
- package/src/core/geom/3d/shape/HeightMapShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/HeightMapShape3D.js +260 -14
- package/src/core/geom/3d/shape/MeshShape3D.d.ts +61 -7
- package/src/core/geom/3d/shape/MeshShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/MeshShape3D.js +111 -20
- package/src/core/geom/3d/shape/PointShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/PointShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PointShape3D.js +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.d.ts +9 -0
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +36 -6
- package/src/core/geom/3d/shape/SphereShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/SphereShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/SphereShape3D.js +5 -1
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts +12 -10
- package/src/core/geom/3d/shape/TransformedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/TransformedShape3D.js +53 -19
- package/src/core/geom/3d/shape/Triangle3D.d.ts +1 -1
- package/src/core/geom/3d/shape/Triangle3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/Triangle3D.js +5 -1
- package/src/core/geom/3d/shape/UnionShape3D.d.ts +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/UnionShape3D.js +19 -2
- package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_box.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_box.js +67 -5
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_capsule.js +61 -3
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts +14 -0
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_cylinder.js +63 -4
- package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts +15 -0
- package/src/core/geom/3d/shape/sdf/sdf3_plane.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_plane.js +64 -2
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts +21 -0
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.d.ts.map +1 -1
- package/src/core/geom/3d/shape/sdf/sdf3_sphere.js +66 -3
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts +2 -0
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.d.ts.map +1 -1
- package/src/core/geom/3d/shape/shape3_mesh_from_geometry.js +7 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts +41 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -0
- package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +538 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts +31 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_basis_at.js +85 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts +18 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.d.ts.map +1 -0
- package/src/core/geom/3d/sphere/harmonics/sh_vmf_window.js +19 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts +49 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/TriangleEdgeFlags.js +55 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts +42 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.d.ts.map +1 -0
- package/src/core/geom/3d/triangle/tri3_classify_shared_edge.js +85 -0
- package/src/core/geom/3d/triangle/tri3_closest_point.d.ts +13 -0
- package/src/core/geom/3d/triangle/tri3_closest_point.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_closest_point.js +36 -1
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts +14 -0
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.d.ts.map +1 -1
- package/src/core/geom/3d/triangle/tri3_closest_point_barycentric.js +40 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts +19 -0
- package/src/core/geom/vec3/v3_quaternion_apply.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply.js +32 -0
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts +19 -0
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.d.ts.map +1 -1
- package/src/core/geom/vec3/v3_quaternion_apply_inverse.js +32 -0
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts +135 -10
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/FirstPersonPlayerControllerSystem.js +338 -105
- package/src/engine/control/first-person/abilities/Ability.d.ts +14 -5
- package/src/engine/control/first-person/abilities/Ability.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Ability.js +14 -5
- package/src/engine/control/first-person/abilities/LedgeGrab.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/LedgeGrab.js +16 -12
- package/src/engine/control/first-person/abilities/Mantle.d.ts.map +1 -1
- package/src/engine/control/first-person/abilities/Mantle.js +5 -1
- package/src/engine/control/first-person/abilities/Slide.js +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.d.ts +92 -14
- package/src/engine/control/first-person/collision/KinematicMover.d.ts.map +1 -1
- package/src/engine/control/first-person/collision/KinematicMover.js +218 -37
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts +5 -0
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.d.ts.map +1 -1
- package/src/engine/control/first-person/sensors/FirstPersonSensorsSystem.js +17 -10
- package/src/engine/ecs/EntityComponentDataset.d.ts.map +1 -1
- package/src/engine/ecs/EntityComponentDataset.js +27 -13
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +6 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts +11 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.d.ts.map +1 -0
- package/src/engine/ecs/transform/TRANSFORM64_EVENT_PLACED.js +10 -0
- package/src/engine/ecs/transform/Transform64.d.ts +4 -2
- package/src/engine/ecs/transform/Transform64.d.ts.map +1 -1
- package/src/engine/ecs/transform/Transform64.js +10 -16
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.d.ts.map +1 -1
- package/src/engine/ecs/transform-attachment/TransformAttachmentSystem.js +16 -0
- package/src/engine/graphics/ecs/water/Water.d.ts +26 -34
- package/src/engine/graphics/ecs/water/Water.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/Water.js +42 -36
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/water/WaterSerializationAdapter.js +38 -62
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts +6 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_1_2.js +27 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts +12 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterSerializationUpgrader_2_3.js +45 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts +33 -0
- package/src/engine/graphics/ecs/water/WaterWaves.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWaves.js +46 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts +17 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.d.ts.map +1 -0
- package/src/engine/graphics/ecs/water/WaterWavesSerializationAdapter.js +26 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts +22 -0
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.d.ts.map +1 -1
- package/src/engine/graphics/texture/3d/scs3d_sample_linear.js +43 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts +29 -3
- package/src/engine/graphics/texture/sampler/Sampler2D.d.ts.map +1 -1
- package/src/engine/graphics/texture/sampler/Sampler2D.js +102 -14
- package/src/engine/graphics3/WaterSystem.d.ts +58 -6
- package/src/engine/graphics3/WaterSystem.d.ts.map +1 -1
- package/src/engine/graphics3/WaterSystem.js +423 -293
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts +10 -4
- package/src/engine/interpolation/BinaryInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/BinaryInterpolationAdapter.js +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts +11 -5
- package/src/engine/interpolation/InterpolationLog.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationLog.js +12 -6
- package/src/engine/interpolation/InterpolationSystem.d.ts.map +1 -1
- package/src/engine/interpolation/InterpolationSystem.js +39 -8
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/PoseInterpolationAdapter.js +51 -22
- package/src/engine/interpolation/TransformPoseSerializationAdapter.d.ts.map +1 -1
- package/src/engine/interpolation/TransformPoseSerializationAdapter.js +18 -23
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/QuaternionInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/TransformInterpolationAdapter.js +3 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.d.ts.map +1 -1
- package/src/engine/network/adapters/Vector3InterpolationAdapter.js +5 -2
- package/src/engine/physics/body/SolverBodyState.d.ts.map +1 -1
- package/src/engine/physics/body/SolverBodyState.js +4 -5
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts +12 -0
- package/src/engine/physics/broadphase/compute_fat_world_aabb.d.ts.map +1 -1
- package/src/engine/physics/broadphase/compute_fat_world_aabb.js +28 -3
- package/src/engine/physics/ccd/linear_sweep.d.ts +42 -12
- package/src/engine/physics/ccd/linear_sweep.d.ts.map +1 -1
- package/src/engine/physics/ccd/linear_sweep.js +1131 -97
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts +26 -14
- package/src/engine/physics/cloth/collider/ClothColliderIndex.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/ClothColliderIndex.js +221 -52
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts +30 -0
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_bounds.js +117 -24
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts +46 -3
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.d.ts.map +1 -1
- package/src/engine/physics/cloth/collider/cloth_collider_sdf.js +116 -68
- package/src/engine/physics/cloth/ecs/ClothColliderFlags.js +2 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts +10 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothColliderSystem.js +36 -14
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +15 -2
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +17 -2
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +78 -53
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts +18 -20
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_gather_colliders.js +185 -128
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_reconstruct_pose.js +46 -39
- package/src/engine/physics/cloth/ecs/cloth_write_back.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_write_back.js +41 -36
- package/src/engine/physics/cloth/playground/garment_build.js +6 -6
- package/src/engine/physics/cloth/playground/garment_main.js +18 -14
- package/src/engine/physics/cloth/solver/cloth_contact_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_contact_find.js +8 -5
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solve_vertex.js +8 -5
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +15 -15
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts +5 -0
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/find_non_finite_cloth_state.js +32 -9
- package/src/engine/physics/constraint/solve_constraints.d.ts +50 -8
- package/src/engine/physics/constraint/solve_constraints.d.ts.map +1 -1
- package/src/engine/physics/constraint/solve_constraints.js +703 -429
- package/src/engine/physics/contact/ManifoldStore.d.ts +12 -0
- package/src/engine/physics/contact/ManifoldStore.d.ts.map +1 -1
- package/src/engine/physics/contact/ManifoldStore.js +32 -0
- package/src/engine/physics/ecs/BodyKind.d.ts +16 -8
- package/src/engine/physics/ecs/BodyKind.d.ts.map +1 -1
- package/src/engine/physics/ecs/BodyKind.js +16 -8
- package/src/engine/physics/ecs/Collider.d.ts +7 -2
- package/src/engine/physics/ecs/Collider.d.ts.map +1 -1
- package/src/engine/physics/ecs/Collider.js +7 -2
- package/src/engine/physics/ecs/PhysicsEvents.d.ts +13 -0
- package/src/engine/physics/ecs/PhysicsEvents.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsEvents.js +13 -0
- package/src/engine/physics/ecs/PhysicsSystem.d.ts +320 -36
- package/src/engine/physics/ecs/PhysicsSystem.d.ts.map +1 -1
- package/src/engine/physics/ecs/PhysicsSystem.js +810 -96
- package/src/engine/physics/fluid/FluidField.d.ts.map +1 -1
- package/src/engine/physics/fluid/FluidField.js +5 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +11 -9
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.js +7 -5
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.d.ts.map +1 -1
- package/src/engine/physics/fluid/ecs/fluid_reanchor_field.js +9 -7
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/ImpulseFluidEffector.js +3 -4
- package/src/engine/physics/fluid/effector/WakeFluidEffector.d.ts.map +1 -1
- package/src/engine/physics/fluid/effector/WakeFluidEffector.js +9 -7
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.d.ts.map +1 -1
- package/src/engine/physics/fluid/solver/v3_mac_advect_maccormack_velocity.js +65 -43
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts +23 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.d.ts.map +1 -0
- package/src/engine/physics/inertia/MASS_PROPERTIES_SIZE.js +22 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts +29 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/convex_hull_mass_properties.js +117 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts +24 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.d.ts.map +1 -0
- package/src/engine/physics/inertia/mass_properties_accumulate.js +93 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts +46 -0
- package/src/engine/physics/inertia/primitive_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/primitive_mass_properties.js +118 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts +27 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.d.ts.map +1 -0
- package/src/engine/physics/inertia/rigid_body_set_mass_properties.js +62 -0
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts +67 -25
- package/src/engine/physics/inertia/world_inverse_inertia.d.ts.map +1 -1
- package/src/engine/physics/inertia/world_inverse_inertia.js +149 -26
- package/src/engine/physics/integration/integrate_position.d.ts +18 -19
- package/src/engine/physics/integration/integrate_position.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_position.js +40 -37
- package/src/engine/physics/integration/integrate_velocity.d.ts.map +1 -1
- package/src/engine/physics/integration/integrate_velocity.js +13 -4
- package/src/engine/physics/island/IslandBuilder.d.ts +124 -6
- package/src/engine/physics/island/IslandBuilder.d.ts.map +1 -1
- package/src/engine/physics/island/IslandBuilder.js +322 -19
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts +13 -0
- package/src/engine/physics/narrowphase/box_box_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_box_manifold.js +95 -39
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts +40 -0
- package/src/engine/physics/narrowphase/box_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/box_triangle_contact.js +415 -120
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts +63 -0
- package/src/engine/physics/narrowphase/capsule_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_contacts.js +234 -46
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts +13 -0
- package/src/engine/physics/narrowphase/capsule_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/capsule_triangle_contact.js +141 -93
- package/src/engine/physics/narrowphase/compute_penetration.d.ts +29 -11
- package/src/engine/physics/narrowphase/compute_penetration.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/compute_penetration.js +157 -34
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts +76 -0
- package/src/engine/physics/narrowphase/convex_convex_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/convex_convex_manifold.js +243 -48
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/decompose_to_triangles.js +28 -12
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts +13 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/heightmap_enumerate_triangles.js +27 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts +42 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/heightmap_triangle_edge_flags.js +250 -0
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts +27 -11
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/mesh_enumerate_triangles.js +291 -12
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_buffer_layout.js +7 -1
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts +35 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/decomposition/triangle_edge_flags.js +61 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts +54 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/hull_sphere_contact.js +244 -0
- package/src/engine/physics/narrowphase/mesh_convex_hull.js +5 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts +2 -0
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/mesh_mesh_tet_manifold.js +56 -31
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts +6 -5
- package/src/engine/physics/narrowphase/narrowphase_step.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/narrowphase_step.js +2185 -483
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts +56 -5
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/reduce_manifold_contacts.js +546 -5
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts +29 -2
- package/src/engine/physics/narrowphase/refine_ray_concave.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_concave.js +628 -75
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts +3 -2
- package/src/engine/physics/narrowphase/refine_ray_hit.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/refine_ray_hit.js +3 -2
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts +27 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/rigid_subject_pose.js +96 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts +14 -0
- package/src/engine/physics/narrowphase/sphere_box_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_box_contact.js +51 -5
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_sphere_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_sphere_contact.js +30 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts +12 -0
- package/src/engine/physics/narrowphase/sphere_triangle_contact.d.ts.map +1 -1
- package/src/engine/physics/narrowphase/sphere_triangle_contact.js +37 -8
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts +139 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.d.ts.map +1 -0
- package/src/engine/physics/narrowphase/support_feature_manifold.js +949 -0
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts +32 -13
- package/src/engine/physics/queries/PhysicsSurfacePoint.d.ts.map +1 -1
- package/src/engine/physics/queries/PhysicsSurfacePoint.js +36 -13
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts +27 -0
- package/src/engine/physics/queries/convex_overlaps_shape.d.ts.map +1 -0
- package/src/engine/physics/queries/convex_overlaps_shape.js +169 -0
- package/src/engine/physics/queries/overlap_shape.d.ts.map +1 -1
- package/src/engine/physics/queries/overlap_shape.js +57 -79
- package/src/engine/physics/queries/raycast.d.ts +10 -4
- package/src/engine/physics/queries/raycast.d.ts.map +1 -1
- package/src/engine/physics/queries/raycast.js +133 -9
- package/src/engine/physics/queries/shape_cast.d.ts +55 -24
- package/src/engine/physics/queries/shape_cast.d.ts.map +1 -1
- package/src/engine/physics/queries/shape_cast.js +2061 -245
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts +32 -10
- package/src/engine/physics/solver/apply_impulse_to_body.d.ts.map +1 -1
- package/src/engine/physics/solver/apply_impulse_to_body.js +69 -28
- package/src/engine/physics/solver/solve_contacts.d.ts +65 -18
- package/src/engine/physics/solver/solve_contacts.d.ts.map +1 -1
- package/src/engine/physics/solver/solve_contacts.js +458 -234
- package/src/engine/physics/vehicle/RaycastVehicle.d.ts.map +1 -1
- package/src/engine/physics/vehicle/RaycastVehicle.js +5 -6
- package/src/shade/assets/textures/split_sum.bin +0 -0
- package/src/shade/device/mock/SoftwareGPUQueue.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUQueue.js +2 -1
- package/src/shade/playground/path_traced_media/README.md +78 -0
- package/src/shade/playground/path_traced_media/capture_radiance.d.ts +33 -0
- package/src/shade/playground/path_traced_media/capture_radiance.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/capture_radiance.js +174 -0
- package/src/shade/playground/path_traced_media/checks.d.ts +160 -0
- package/src/shade/playground/path_traced_media/checks.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/checks.js +921 -0
- package/src/shade/playground/path_traced_media/index.html +71 -0
- package/src/shade/playground/path_traced_media/main.d.ts +2 -0
- package/src/shade/playground/path_traced_media/main.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/main.js +440 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts +26 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/make_wave_pool_geometry.js +117 -0
- package/src/shade/playground/path_traced_media/views.d.ts +21 -0
- package/src/shade/playground/path_traced_media/views.d.ts.map +1 -0
- package/src/shade/playground/path_traced_media/views.js +161 -0
- package/src/shade/playground/sh_exponential/README.md +43 -0
- package/src/shade/playground/sh_exponential/index.html +59 -0
- package/src/shade/playground/sh_exponential/main.d.ts +2 -0
- package/src/shade/playground/sh_exponential/main.d.ts.map +1 -0
- package/src/shade/playground/sh_exponential/main.js +571 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts +46 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -0
- package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +270 -0
- package/src/shade/playground/water_refraction/README.md +158 -0
- package/src/shade/playground/water_refraction/index.html +40 -0
- package/src/shade/playground/water_refraction/main.d.ts +2 -0
- package/src/shade/playground/water_refraction/main.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/main.js +202 -0
- package/src/shade/playground/water_refraction/world.d.ts +39 -0
- package/src/shade/playground/water_refraction/world.d.ts.map +1 -0
- package/src/shade/playground/water_refraction/world.js +141 -0
- package/src/shade/renderer/Renderer.d.ts +2 -0
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +27 -0
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts +2 -3
- package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/shader_dynamic_mesh_avboit_draw.js +9 -1
- package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_scene_point_query_volume_sign.js +6 -4
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +1 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts +7 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_rand1.js +12 -12
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts +4 -0
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/sampling/chunk_direction_by_index_spherical.js +13 -9
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +2 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -9
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/light/LIGHT_DATABASE_SPEC.js +20 -10
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts +8 -0
- package/src/shade/renderer/light/environment/chunk_roughness_to_mip_ratio.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts +0 -6
- package/src/shade/renderer/light/environment/chunk_sphere_probe_roughness_to_lod.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts +2 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/rgbe/load_environment_map.js +2 -1
- package/src/shade/renderer/light/environment/sh_exponential/README.md +171 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts +170 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/SHExpEncoder.js +377 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts +16 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/SH_EXP_ENCODE_PARAMETERS_STRUCT.js +27 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts +21 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/chunk_sh_exp_workgroup_sum.js +53 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts +33 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_design_row.js +90 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts +28 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_fit_samples.js +92 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts +39 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_layout.js +44 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts +42 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/sh_exp_solve_matrix.js +123 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts +30 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +147 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts +24 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +79 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts +17 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +99 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts +24 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +104 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts +12 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -0
- package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +93 -0
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +1 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts +1 -1
- package/src/shade/renderer/material/PIXEL_TEXTURE_ORM.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts +15 -0
- package/src/shade/renderer/material/StandardShadeMaterial.d.ts.map +1 -1
- package/src/shade/renderer/material/StandardShadeMaterial.js +17 -0
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +36 -2
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +218 -18
- package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/INDIRECT_MATERIAL_STRUCT.js +10 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIA_TABLE_STRUCT.js +24 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts +24 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIUM_PHASE_LOBE_KIND.js +18 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts +20 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/medium/MEDIUM_STRUCT.js +43 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts +108 -0
- package/src/shade/renderer/medium/ParticipatingMedium.d.ts.map +1 -0
- package/src/shade/renderer/medium/ParticipatingMedium.js +204 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts +13 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.d.ts.map +1 -0
- package/src/shade/renderer/medium/chunk_medium_lobe_phase.js +33 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts +32 -0
- package/src/shade/renderer/medium/participating_medium_serialization.d.ts.map +1 -0
- package/src/shade/renderer/medium/participating_medium_serialization.js +181 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts +48 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/MediumPhaseFunction.js +42 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts +23 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseCornetteShanks.js +45 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts +30 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseDraine.js +58 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts +24 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseFournierForand.js +53 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts +21 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseHenyeyGreenstein.js +43 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts +25 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseJendersieDeon.js +66 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts +9 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseRayleigh.js +21 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts +28 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.d.ts.map +1 -0
- package/src/shade/renderer/medium/phase/PhaseWaterMolecular.js +49 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts +10 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/WATER_DEFAULT_PATH_LENGTHS.js +25 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts +47 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_appearance.js +174 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts +57 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_from_constituents.js +242 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts +41 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_jerlov.js +231 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts +66 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_iop_spectral_reference.js +223 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts +96 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_medium_from_iop.js +145 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_presets.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_presets.js +119 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts +69 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.d.ts.map +1 -0
- package/src/shade/renderer/medium/water/water_rgb_from_spectral.js +341 -0
- package/src/shade/renderer/particles/DESIGN.md +4 -2
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts +1 -1
- package/src/shade/renderer/particles/bounds/chunk_particle_bounds.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts +26 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.d.ts.map +1 -0
- package/src/shade/renderer/particles/shaders/chunk_particle_avboit_voxel_fade.js +71 -0
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +16 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_avboit_splat.js +6 -13
- package/src/shade/renderer/path_tracer/PATH_TRACED_MEDIA_PLAN_2026_10_02.md +520 -0
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +1 -0
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +2 -0
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +188 -185
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/STANDARD_MATERIAL_DATA_STRUCT.js +4 -1
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts +13 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_indirect_sample_tangent_normal.js +29 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts +79 -0
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_render_trace_path.js +360 -70
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_sample_material_data.js +4 -3
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_beam.js +99 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts +68 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_connect.js +263 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts +55 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_constraint.js +148 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts +17 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light.js +41 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts +20 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_light_sample.js +105 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts +28 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle.js +97 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts +12 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/manifold/chunk_manifold_triangle_of_hit.js +46 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts +25 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_interface.js +75 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts +54 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_path.js +245 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts +42 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_phase.js +236 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts +24 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_scatter_nee.js +97 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts +57 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_stack.js +222 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts +88 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_transport.js +304 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts +35 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/media/chunk_medium_volumes.js +137 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_sample_history.js +85 -84
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts +8 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSettings.js +9 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +28 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +17 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_CONSTANTS.js +13 -7
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_LEDGER.md +309 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOIT_PLAN_2026_09_03.md +54 -9
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +9 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts +33 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_footprint_bias.js +45 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_integral_depth_coordinate.js +6 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_renormalization.js +11 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_rgb_contribution.js +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_sample_transmittance.js +4 -2
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_splat_slice.js +5 -3
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts +4 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_split_counts.js +8 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts +14 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_level_word.js +28 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_lut_entry.js +18 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts +19 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_marks.js +44 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts +10 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/native/avboit/chunk_avboit_warp_step_count.js +17 -0
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +23 -2
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_build_warp.js +163 -64
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_resolve.js +4 -8
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +4 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.d.ts.map +1 -1
- package/src/shade/renderer/scene/SCENE_DATABASE_SPEC.js +5 -0
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts +12 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/C_MIE_SCATTERING_DECLARATION.js +22 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/chunk_sample_henyey_greenstein_cos.js +31 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_phase_fournier_forand.js +153 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/chunk_sample_fournier_forand.js +57 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts +45 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/ff/fournier_forand_parameters_from_backscatter.js +109 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js +6 -3
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine.js +49 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/atmosphere/phase/jd/chunk_sample_draine_cos.js +18 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_add_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_max_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/atomic/chunk_atomic_min_f32_storage.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/chunk_integrate_brdf.js +3 -0
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/brdf/dfg/shader_split_sum_dgf_lut.js +3 -1
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts +24 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/brdf/fresnel/chunk_F_dielectric.js +53 -0
- package/src/shade/renderer/shader/chunk/geometry/plane/{plane_ray_raycast.d.ts → chunk_plane_ray_raycast.d.ts} +2 -2
- package/src/shade/renderer/shader/chunk/geometry/plane/chunk_plane_ray_raycast.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_scene_point_query_is_inside_geometry.js +12 -60
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts +26 -6
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/sphere/chunk_compute_spherical_excess.js +30 -20
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_directional.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_point.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_importance_spot.js +3 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_light_receiver_cosine.js +25 -0
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts +9 -2
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/sample/chunk_select_light_importance.js +33 -10
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts +4 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +135 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_band_of_index.js +30 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_basis_function.js +73 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts +19 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh_vmf_window.js +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/SH_EXP_P4Q2_PROBE_STRUCT.js +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts +26 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_p4q2_base_reflectance.js +55 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts +52 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/exponential/chunk_sh_exp_split_sum.js +65 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_basis_at.js +229 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh10_color_evaluate_vmf.js +278 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh2_color_evaluate_vmf.js +58 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh3_color_evaluate_vmf.js +75 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_basis_at.js +70 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh4_color_evaluate_vmf.js +95 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_basis_at.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh5_color_evaluate_vmf.js +118 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_basis_at.js +111 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh6_color_evaluate_vmf.js +144 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_basis_at.js +136 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh7_color_evaluate_vmf.js +173 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_basis_at.js +164 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh8_color_evaluate_vmf.js +205 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_basis_at.js +195 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts +23 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/generated/chunk_sh9_color_evaluate_vmf.js +240 -0
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts +0 -6
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceGroupDescriptor.js +46 -1
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.d.ts +7 -7
- package/src/shade/renderer/shadow/map/DEFAULT_SHADOWMAP_UPDATE_BUDGET.js +7 -7
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts +42 -10
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/DirectionalLightShadowmap.js +104 -48
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +20 -4
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +186 -74
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +2 -1
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +2 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts +30 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_CASCADE_STRUCT.js +52 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts +14 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/CSM_SHADOWMAP_STRUCT.js +20 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts +8 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_DEFAULT_CASCADE_COUNT.js +7 -0
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts +8 -6
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/csm/shader/shader_csm_caster_range.js +28 -34
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts +3 -2
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_csm_compute_cascade_blended.js +19 -14
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +4 -3
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +12 -7
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.d.ts +4 -4
- package/src/shade/renderer/shadow/map/shadowmap_budget_carry_over.js +4 -4
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUViewShadowMaps.js +39 -17
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/GPUVirtualShadowTextureResidence.js +5 -36
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VSM_UNIFORMS_STRUCT.js +3 -2
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowMap.js +49 -35
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts +4 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/VirtualShadowmapRenderer.js +8 -9
- package/src/shade/renderer/shadow/vsm/debug_inspect_residence_buffer.js +2 -2
- package/src/shade/renderer/shadow/vsm/decode_tile_address.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/decode_tile_address.js +15 -23
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vms_pipeline_compute_coarse_bounds.js +6 -9
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vsm_residence_pipeline.js +19 -9
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.d.ts.map +1 -1
- package/src/shade/renderer/shadow/vsm/vsm_tile_allocation_pipeline.js +18 -6
- package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts +1 -1
- package/src/shade/renderer/texture/util/BLACK_PIXEL_TEXTURE.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts +18 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/PIXEL_TEXTURE_NORMAL.js +24 -3
- package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts +1 -1
- package/src/shade/renderer/texture/util/WHITE_PIXEL_TEXTURE.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts +0 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.d.ts.map +1 -1
- package/src/shade/renderer/texture/util/get_single_pixel_texture.js +2 -23
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts +11 -0
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.d.ts.map +1 -0
- package/src/shade/renderer/texture/util/single_pixel_texture_from_sampler.js +34 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +17 -8
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +35 -64
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +21 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +70 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts +31 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volumes_iterate.js +86 -0
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +6 -7
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_scattering_lut.js +7 -7
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +72 -27
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +275 -138
- package/src/shade/renderer/water/chunk_water_gi.d.ts +14 -0
- package/src/shade/renderer/water/chunk_water_gi.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_gi.js +56 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts +7 -0
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -0
- package/src/shade/renderer/water/chunk_water_transport.js +105 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts +29 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/GPUWaterBodies.js +116 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts +23 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/WATER_BODIES_STRUCT.js +42 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts +9 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_derived.js +55 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts +8 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/chunk_water_medium_scattering.js +17 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts +8 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.d.ts.map +1 -0
- package/src/shade/renderer/water/medium/shader_water_bodies_derive.js +30 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts +28 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_inscatter.js +123 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts +23 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts +18 -0
- package/src/shade/renderer/water/optics/chunk_water_light_transmittance_dry.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.d.ts +12 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_optics.js +75 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts +27 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.d.ts.map +1 -0
- package/src/shade/renderer/water/optics/chunk_water_receiver_downwelling.js +74 -0
- package/src/shade/renderer/water/shader_water.d.ts +15 -26
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +373 -213
- package/src/shade/renderer/water/shader_water_avboit.d.ts +12 -0
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -0
- package/src/shade/renderer/water/shader_water_avboit.js +268 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts +98 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/GPUWaterWaveSimulation.js +408 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts +12 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_SURFACE_VERTEX_STRUCT.js +27 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts +14 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/WATER_WAVE_PARAMETERS_STRUCT.js +49 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts +15 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_wave.js +48 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts +9 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/chunk_water_wave_grid.js +47 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts +10 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_surface_write.js +51 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts +12 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/shader_water_wave_step.js +54 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts +13 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.d.ts.map +1 -0
- package/src/shade/renderer/water/surface/water_surface_grid_indices.js +39 -0
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts +17 -0
- package/src/shade/renderer/water/water_missing_receiver_path.d.ts.map +1 -0
- package/src/shade/renderer/water/water_missing_receiver_path.js +40 -0
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +247 -23
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts +18 -14
- package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLLanguageCore.js +61 -6
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts +0 -29
- package/src/shade/renderer/animation/skinning/bounds_refresh/chunk_aabb_atomic_f32.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/geometry/plane/plane_ray_raycast.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts +0 -29
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/CSM_CASTER_RANGE_STRUCT.js +0 -43
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts +0 -7
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.d.ts.map +0 -1
- package/src/shade/renderer/shadow/map/csm/SHADOWMAP_CSM_CASCADE_COUNT.js +0 -6
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
# Participating media in the path tracer: design brief
|
|
2
|
+
|
|
3
|
+
Revision 3, 2026-10-02, against `b0bb299a7`. Paths are relative to `packages/meep-engine/src/shade/renderer/` unless
|
|
4
|
+
they start with `src/`.
|
|
5
|
+
|
|
6
|
+
**Decisions, settled 2026-10-02 (§8):**
|
|
7
|
+
|
|
8
|
+
| Fork | Decision |
|
|
9
|
+
|---|---|
|
|
10
|
+
| F1 | IOR on the boundary material (`ior_factor`) |
|
|
11
|
+
| F2 | Without a medium, transmission stays thin-walled |
|
|
12
|
+
| F3 | **(c) Full manifold NEE** with the curvature Jacobian, because waves are coming. Runtime cost is a design constraint (§3.5) |
|
|
13
|
+
| F4 | Later, one shared density chunk |
|
|
14
|
+
| F5 | Shared chunks. Draine already exists and is reused, not rewritten |
|
|
15
|
+
| F6 | Fog volumes become a table in the scene's `GPUDatabase` |
|
|
16
|
+
| F7 | The bakes gain media |
|
|
17
|
+
| F8 | D1–D3 are fixed in separate sessions. Stage 2, which extends the resident material table, starts after D1/D2 land. Stages 1 and 3 are independent of them |
|
|
18
|
+
|
|
19
|
+
**Status, 2026-10-03.** Stages 0–5 have landed, and an adversarial review after them (below). Stage 6 (glTF volume
|
|
20
|
+
import) is optional.
|
|
21
|
+
|
|
22
|
+
| Stage | Commits |
|
|
23
|
+
|---|---|
|
|
24
|
+
| 0 | `54d98588a` (D1, D2), `9c2c65836` (D3), in their own sessions |
|
|
25
|
+
| 1 | `6bedc1393` Fresnel, `d62cf6000` Draine sampler, `92e7267da` Fournier–Forand |
|
|
26
|
+
| 2 | `a7cae0ff3` medium model, `ff1bdd259` material medium and resident media, `886a83b45` fog volumes in the scene database (F6) |
|
|
27
|
+
| 3 | `6ce0819e7` transport chunks |
|
|
28
|
+
| 4 | the tracer, the consumers and `playground/path_traced_media/` (§5, §6) |
|
|
29
|
+
| 5 | manifold NEE through one interface (`path_tracer/shader/manifold/`), the water checks, the wave pool |
|
|
30
|
+
|
|
31
|
+
What stage 5 measured:
|
|
32
|
+
|
|
33
|
+
- **Through flat water the connection meets the closed form**: the sun at 30° and 60° to 0.04%, a lamp overhead to
|
|
34
|
+
0.01%, ratios against the same tile dry (§5 check 3, as a small tile so that the floor's light does not come back).
|
|
35
|
+
Two things had to come out of the check first: the tile's rough diffuse lobe (the sun arrives at 60° dry and 40° wet)
|
|
36
|
+
and the default normal map's lean — `Color(0.5, 0.5, 1)` in eight bits decodes to a normal 0.3° off the
|
|
37
|
+
geometric one, +0.38% with the sun from +x and −0.30% from −x; two mirrored suns cancel it. The lean is an engine
|
|
38
|
+
defect of its own, flagged separately.
|
|
39
|
+
- **The tolerance is 1e-4, not 1e-5.** On the device, for a lamp straight over the receiver, f32 stalled the residual
|
|
40
|
+
just above 1e-5, and every connection was given up — 26% of the lamp's light lost. In the emulator the same solve
|
|
41
|
+
reached 3e-6 to 1.3e-5. (Not, as first written here, because the half vector nearly cancels: n_light wi + n_receiver
|
|
42
|
+
wo is 0.33 long there.) 1e-4 rad moves the vertex a tenth of a millimetre at a metre. Far from the origin the
|
|
43
|
+
tolerance now widens with what f32 resolves (review, below).
|
|
44
|
+
- **Cost:** in the wave pool, about 11 ms a 256×256 tile with connections and 5–7 ms without — a connection is 2–3
|
|
45
|
+
Newton casts and two legs where a straight sample is one shadow ray. Limits: 8 steps a connection, 4 connections a
|
|
46
|
+
path. The tracer reports no per-connection counters (§3.5 planned them); the frame time is the measure.
|
|
47
|
+
- **As built:** the Jacobian of the constraint is by forward differences within the triangle's plane, where the
|
|
48
|
+
interpolated normal is affine, rather than analytic; the beam's weight is carried by ray differentials (Igehy) from
|
|
49
|
+
the light across the refraction — curvature from the interpolated normal's derivative — to the receiver, which gives
|
|
50
|
+
the generalized geometric term without the manifold's block matrices. Both are pinned against tracing in f64.
|
|
51
|
+
|
|
52
|
+
**Adversarial review, 2026-10-03.** Three reviewers read the work against the code, the emulator and the device. What
|
|
53
|
+
they found, each fix pinned by a spec or a device check that failed before it:
|
|
54
|
+
|
|
55
|
+
- **Fixed — media and optics.** A path entering a medium of lower priority than the one it was in put it on top of
|
|
56
|
+
its stack, so the glass-to-water interface of water modelled into a glass wall vanished; the stack now inserts by
|
|
57
|
+
priority. The origin probe counted media as a set, so a camera inside two overlapping meshes of one water thought
|
|
58
|
+
itself in air on leaving one; it counts meshes, as the path does. The Draine lobe's Henyey-Greenstein denominator
|
|
59
|
+
cancelled in f32 — Inf at g 0.9999, 10% low at 0.999 — and phases accepted parameters the GPU or the sampler cannot
|
|
60
|
+
hold (g rounding to one, Draine alpha < 0, Fournier-Forand backscatter the solve does not reach, a lobe count
|
|
61
|
+
reached by editing a lobe). A participating-media volume scaled to nothing put the whole world inside it.
|
|
62
|
+
- **Fixed — volumes.** Past 8 pieces a flight took the rest of its ray as one piece whose null collisions grow as the
|
|
63
|
+
square of the volumes left, and the 64-collision limit cut it: ten separate fog volumes on a line of sight came out
|
|
64
|
+
dark, twenty black. 64 pieces now; past 32 volumes the cliff remains, stated at the constant.
|
|
65
|
+
- **Fixed — manifold NEE.** Full Newton steps diverged from the straight seed once the sun was about 60° from overhead
|
|
66
|
+
(57° through glass): a step is now halved in the triangle's plane until the constraint falls, and again if it does
|
|
67
|
+
not fall on the surface — through flat water to 85°, in 3–7 casts. The Jacobian's difference step was a fraction of
|
|
68
|
+
the triangle's first edge, wrong for a receiver close under a large triangle and below f32 far from the origin; it
|
|
69
|
+
is a fraction of the receiver's distance, with an f32 floor, and the tolerance widens with what f32 resolves. A
|
|
70
|
+
probe meeting any other mesh — an index-matched box in the water — gave the connection up; probes pass such
|
|
71
|
+
surfaces, within 16 casts a connection. A sphere light's beam and distance window are taken from its centre, as
|
|
72
|
+
straight NEE takes them.
|
|
73
|
+
- **Fixed — the tracer.** A surface inside a medium chose its light, and gated its shadow ray, by the straight line
|
|
74
|
+
to it, so an underwater slope facing away from a low sun never saw its refracted light; it now chooses with no
|
|
75
|
+
receiver cosine and looks for the interface along its horizon. A surface inside a medium reflected as if in air
|
|
76
|
+
(§3.3 promised the relative index); it reflects by the ratio. And, older than this work: the specular bounce's
|
|
77
|
+
weight lost the NoL·NoV term of G2 / G1, so every smooth reflection the path tracer followed carried half its light.
|
|
78
|
+
- **New checks:** the sun at 75° and 85°, an underwater slope, an index-matched box in the way, overlapping water
|
|
79
|
+
around the camera, a glass slab at 45°, a smooth black tile in air and under water, and a sunlit scattering
|
|
80
|
+
half-space against Chandrasekhar's H-function — the first check of light reaching scattering points.
|
|
81
|
+
- **The checks' noise is the run's own.** A rectangle's standard error came from the spread of its pixels, which
|
|
82
|
+
counts structure across it — a dark arc where the answer is flat — as noise, widening the tolerance for exactly the
|
|
83
|
+
error it should find. It now comes from the accumulation read at half the frames and at the end, and a run that
|
|
84
|
+
accumulated fewer samples than frames fails. With it, the numbers the allowances rested on were stale: the clear
|
|
85
|
+
sphere's outline holds 0.1% on every side, not 1.4% (its 2% allowance is gone); the scattering glass sphere is 0.5%
|
|
86
|
+
low in its middle and up to 0.73% at its outline, not 0.27% and 0.4% (still within its 0.6% beyond the noise).
|
|
87
|
+
Neither moved with the review's changes: the stage-5 code reads the same.
|
|
88
|
+
- **Stated, not fixed.** Four manifold connections a path: light behind an interface reaches no scattering past the
|
|
89
|
+
fourth (estimated 18–22% of the sunlight scattered in the playground's milky sphere, 31–55% in deep water of albedo
|
|
90
|
+
0.9–0.99), since every light is reached only by NEE. A spot's cone and a surface outside every medium lit through an
|
|
91
|
+
interface by a light in one are still judged along the straight line. A shadow ray whose channels' extinctions are
|
|
92
|
+
20 times apart is cut whole when its strongest channel is. Interfaces are smooth whatever the material's roughness
|
|
93
|
+
(§3.3's GGX BTDF is not built), alpha on a medium-bounding surface is ignored (§3.3's holes are not built), and
|
|
94
|
+
`serialize_scene` keeps a material's index but neither its medium nor the scene's volumes.
|
|
95
|
+
|
|
96
|
+
What stage 4 measured, on an RTX 4090 through headless Chrome, 256×256:
|
|
97
|
+
|
|
98
|
+
- All nine checks of the playground pass against their closed forms (§5, tier 4).
|
|
99
|
+
- **Every loop has a fixed limit (superseding the next bullet).** The scene to look at took 95 ms a 256×256 tile,
|
|
100
|
+
long enough to stall the desktop: every table walk read the tables' whole page capacity (4,096 pages, twice per
|
|
101
|
+
light sample, and once per segment, collision and shadow segment for the volumes), and the limits were safety nets
|
|
102
|
+
in the hundreds and thousands. Walks now stop at the pages in use — lights are packed from row 0, the volume table
|
|
103
|
+
is rewritten whole, so the page headers' live counts are the counts — and the limits are 32 scattering events,
|
|
104
|
+
16 interface events (4 smooth), 8 pass-throughs, 8 probe hits, 8 shadow hits from a scattering point (32 from a
|
|
105
|
+
surface, as before), 64 collisions and 8 volume pieces a flight. 11 ms a tile; the checks 1.2–4 ms. Cost of the
|
|
106
|
+
limits: 1.4% at the tessellated outline, 0.3% of the scattering glass sphere (the interface limit).
|
|
107
|
+
- **The interface limit is 64, not 16.** A scattering sphere at n = 1.333 traps light by total internal reflection
|
|
108
|
+
(a sphere preserves the angle of incidence, so a ray past the critical angle circles until it scatters). The white
|
|
109
|
+
furnace for it measured 0.60% low at 16 events, 0.13% at 64 and 0.10% at 256, at 48, 60 and 75 ms a frame. At 4096
|
|
110
|
+
the device was lost: an uncapped path runs past the TDR limit.
|
|
111
|
+
- **What stays below 0.1% is not the stack or the interface.** A clear glass sphere closes exactly in its middle;
|
|
112
|
+
an index-matched scattering sphere or box closes to 1e-4–3e-4, a few standard errors, the same with Henyey-Greenstein
|
|
113
|
+
lobes alone.
|
|
114
|
+
- **Tessellation traps light by total internal reflection.** The first furnace regions missed the clear sphere's
|
|
115
|
+
outline; covering it showed a dark arc on one side, 4.4% low, unchanged at a limit of 256. Light entering near the
|
|
116
|
+
outline refracts to just under the critical angle, the interpolated normals tip it over at the far side and then
|
|
117
|
+
hold its angle, so it circles indefinitely. Past 8 interface events a path now takes them about the triangle's own
|
|
118
|
+
normal (`PATH_INTERFACE_SMOOTH_EVENT_LIMIT`), which lets it out: 1.1% low and 13 ms a frame against 50. A shading
|
|
119
|
+
normal that would turn an event back across the triangle falls back to the triangle's normal too
|
|
120
|
+
(`chunk_medium_interface`). Part of the scattering sphere's loss above was this.
|
|
121
|
+
- Two consumers do not compile on the device, for reasons that predate this work: the lightmap viz bakes read
|
|
122
|
+
`mesh.lightmap_uvs`, which `MESH_INSTANCE_METADATA_STRUCT` does not have, and the deprecated LPV trace declares its
|
|
123
|
+
own ray-tracing group without `meshlet_data`.
|
|
124
|
+
|
|
125
|
+
What changed from revision 1:
|
|
126
|
+
|
|
127
|
+
- glTF no longer argues any decision; volume import is an optional last stage.
|
|
128
|
+
- A survey of the engine replaced assumptions with a reuse map (§1), which found three constraints the first
|
|
129
|
+
revision missed:
|
|
130
|
+
- The path tracer's core chunk is shared with the Brick4 and lightmap bakes, and those are at the storage-buffer
|
|
131
|
+
and bind-group limits.
|
|
132
|
+
- The resident material table has two defects the medium index would inherit.
|
|
133
|
+
- One live bake shader cannot link as it stands.
|
|
134
|
+
- The forks are now eight (§8).
|
|
135
|
+
|
|
136
|
+
## 0. Summary
|
|
137
|
+
|
|
138
|
+
The accumulating path tracer gets one volume system that water, fog, clouds and glass all use:
|
|
139
|
+
|
|
140
|
+
1. **A medium is data**: RGB absorption `σ_a` (m⁻¹), a priority, and up to four scattering lobes, each an RGB
|
|
141
|
+
scattering coefficient `σ_s` (m⁻¹) with a phase function. Water is a molecular lobe plus a Fournier–Forand lobe.
|
|
142
|
+
Fog is one HG lobe. Glass has no lobes.
|
|
143
|
+
2. **Two kinds of boundary, set by the physics.** Where the index of refraction jumps there is a surface: a closed
|
|
144
|
+
mesh whose material references a medium, giving a dielectric interface (exact Fresnel, refraction, TIR, n² law).
|
|
145
|
+
Where it does not jump there is no surface event: a fog volume (`ParticipatingMediaVolume`) contributes by position.
|
|
146
|
+
3. **One overlap rule.** A priority stack picks the one interface-bounded medium at each point. Fog volumes add on top,
|
|
147
|
+
as the froxel builder already adds them.
|
|
148
|
+
4. **One transport.** Free flight uses the null-scattering formulation with per-channel majorants and hero-channel MIS,
|
|
149
|
+
so homogeneous media take no null collisions. Shadow rays use residual ratio tracking, which is exact in homogeneous
|
|
150
|
+
media.
|
|
151
|
+
5. **Everything that calls `render_trace_path` gets media**: the reference tracer and the Brick4 and lightmap bakes,
|
|
152
|
+
through one chunk, with no second tracer.
|
|
153
|
+
|
|
154
|
+
Water is declared lobe by lobe through the same API as everything else; the framework contains no water code.
|
|
155
|
+
|
|
156
|
+
## 1. What exists, and what it means for this work
|
|
157
|
+
|
|
158
|
+
### 1.1 Reuse map
|
|
159
|
+
|
|
160
|
+
| Need | Existing code | Use |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| Analytic phase evaluation | `phase_draine(cos, g, α)` (`shader/chunk/atmosphere/phase/jd/chunk_phase_draine.js`) covers HG (α=0), Cornette–Shanks (α=1), Rayleigh (g=0, α=1) and the molecular water phase (g=0, α=k) | As-is, as the one evaluator. It also sidesteps the `fn phase_mie` collision between the HG and CS chunks. No spec exists: normalization specs added |
|
|
163
|
+
| Phase sampling | `sample_draine_cos` (`jd/chunk_sample_draine_cos.js`), singular at g=0 and α=0, no consumer, no spec | Wrapped: HG inverse at α=0 (new, a few lines); the g=0 cubic by Cardano on `cbrt` (`shader/chunk/math/chunk_cbrt.js`) |
|
|
164
|
+
| Jendersie–d'Eon cloud/fog phase | `get_fog_params_jendersie_deon` (JS) | Encodes on the CPU into two Draine lobes. The LUT texture (`mie_phase_lookup_texture`, no importer) is not needed |
|
|
165
|
+
| Particle optics for presets | `MIE_PARTICLES_STANDARD_PRECOMPUTED` (20 particles) through `VolumetricsParticleSpec.fromMeep`; `compute_mie_particle_properties_rgb` (D65 × CIE spectral integration, returns the host medium's absorption as `extinction_intercept`); `ri_water`, `ri_brine` | Presets come from these rather than invented numbers. The playground's pure-water absorption is `ri_water` through the RGB integrator. Calibrated water RGB stays the water line's fitting tool |
|
|
166
|
+
| Direction from (cos θ, φ) | `build_orthonormal_matrix_n`, `spherical_direction` | As-is |
|
|
167
|
+
| Isotropic direction | `uniform_sample_cone(uv, -1)` | As-is |
|
|
168
|
+
| Microfacet pieces | `D_GGX`, `V_GGX_SmithCorrelated`, `sample_ggx_vndf_hemisphere` (returns H; the tracer's `sample_reflection_vector` hides it), `BSDF_ROUGHNESS_MINIMUM` | The dielectric BTDF is composed from these. The transmission pdf's half-vector Jacobian is new |
|
|
169
|
+
| Refraction | WGSL `refract` (the emulator implements it, TIR → zero vector) | As-is |
|
|
170
|
+
| F0 at a relative IOR | `dielectric_specular_color(ior, …)`: `((n−1)/(n+1))²` holds for relative n | Called with the relative IOR |
|
|
171
|
+
| Fog volume data | `GPUSceneVolumetrics` table and `PARTICIPATING_MEDIA_VOLUME_STRUCT`; `far_sample_volumes` in `volumetrics/shader_volumetrics_build_scattering_lut.js` is a pointwise lookup (inverse transform, unit box, density, no fade) | Same record. How the tracer reaches it is fork F6 |
|
|
172
|
+
| Ray vs box interval | `aabb3_slab_span` (NaN-guarded slab); no oriented-box interval chunk exists | New small chunk on top of it |
|
|
173
|
+
| RNG | `random()` returns [0, 1 − 2⁻²⁴], so `log(1 − random())` is finite | As-is |
|
|
174
|
+
| Russian roulette | `russian_roulette` | As-is, fed `β / mean(r_u)` |
|
|
175
|
+
| Inside test | `scene_point_query_volume_sign` answers "inside any geometry" | Not usable for "inside which medium". The stack uses a probe ray (§3.2) |
|
|
176
|
+
| Statistics, KS, quadrature | None in `core/`; spec-local copies only | Written into each spec that needs them (no shared helper module ships) |
|
|
177
|
+
| CPU mirror of the shader RNG | `pcg_next`, `u32_to_unit_f32` in `particles/vm/ParticleVMReference.js` | CPU oracles that replay the shader's stream |
|
|
178
|
+
| Furnace precedent | CPU tracer `src/engine/graphics/sh3/path_tracer/PathTracer.spec.js` (Lambert only, no media) | Same idea, on the GPU tracer |
|
|
179
|
+
| Constant environment | `make_flat_environment` / `use_flat_environment` (`src/shade/playground/skinned_blas_refit/flat_environment.js`) | Device furnace |
|
|
180
|
+
| Tracer readback | `render_and_read` (`src/shade/playground/skinned_blas_refit/diff_traced_against_rasterized.js`) | Device checks |
|
|
181
|
+
| Spec patterns | Emulator library mode for pure chunks; storage-budget assertion (`geometry/virtual/runtime/cut/vgeo_cut_shaders.compile.spec.js`); software-device view recipe (`volumetrics/gi/graph_build_froxel_gi.spec.js`); resident-row readback (`src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.spec.js`) | Followed |
|
|
182
|
+
|
|
183
|
+
**Searched for and absent, so new here:**
|
|
184
|
+
|
|
185
|
+
- Exact dielectric Fresnel, in WGSL or JS.
|
|
186
|
+
- Any BTDF, relative-IOR handling or TIR logic.
|
|
187
|
+
- The Fournier–Forand and molecular water phases.
|
|
188
|
+
- An HG sampler.
|
|
189
|
+
- Any tracking estimator: delta, ratio or residual ratio tracking, majorants, free-flight sampling.
|
|
190
|
+
- A medium stack or nested dielectrics.
|
|
191
|
+
- Light selection without a normal: passing a zero normal yields pdf 0, so NEE silently skips.
|
|
192
|
+
- Refracted shadow connections.
|
|
193
|
+
- Any medium data on materials.
|
|
194
|
+
|
|
195
|
+
`chunk_screen_space_newton_ray` is screen-space (fixed ray against the G-buffer). It cannot connect a light through an
|
|
196
|
+
interface; only its plane helpers are reusable.
|
|
197
|
+
|
|
198
|
+
### 1.2 Constraints the design has to respect
|
|
199
|
+
|
|
200
|
+
| Fact (verified in code) | Consequence |
|
|
201
|
+
|---|---|
|
|
202
|
+
| `render_trace_path` has six importers. Two are live bakes: Brick4 probe bake (`global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js`) and the lightmap bake (`lightmap/bake/shader_lightmap_viz_to_sh.js`, used by `GPULightMap`). The other four are the accumulating tracer, the unimported `graph_path_trace_scene`, the unimported `shader_lightmap_viz_to_irradiance_flat`, and a deprecated LPV probe trace | Every global the chunk references must be bound by all six; the bakes gain media too (F7) |
|
|
203
|
+
| The Brick4 bake binds 10 storage buffers (7 ray-tracing, `light_data`, `probe_positions`, `output`) in 4 bind groups. The engine requires 10 and never raises `maxBindGroups` from 4 | No new storage binding and no new group inside `render_trace_path`. The media table goes in as a uniform in the existing `materials` group (uniforms are 1–2 of 12) |
|
|
204
|
+
| The software device reports 8 storage buffers and cannot be raised | Tier-3 specs can encode the accumulating tracer only while it stays at 8 |
|
|
205
|
+
| `ray_shaded_query_occluded` also serves the ray-traced shadow shaders (`shadow/ray/`) | It stays boolean and unchanged. The tracer gets a transmittance query built on the same per-hit step, lifted into a shared chunk rather than copied |
|
|
206
|
+
| `sample_material_data` flips normals on back-face hits and drops the flag | The flag is added to `STANDARD_MATERIAL_DATA_STRUCT`: entering vs exiting needs it |
|
|
207
|
+
| No spec covers any tracer module, and no validity spec includes them | Validity coverage of the tracer and its six consumers is new work |
|
|
208
|
+
| `min_accumulation_alpha` turns the running mean into an EMA after 1/α samples; the output is flood-filled from coarser mips where luminance is zero; RR truncates at `bounce_limit − 1`; misses are clamped at luminance 10 | Device checks read the history, set α small, use non-zero backgrounds, and keep environments under the clamp |
|
|
209
|
+
|
|
210
|
+
### 1.3 Defects found on the way (verified by reading the code, not yet pinned by a failing spec)
|
|
211
|
+
|
|
212
|
+
- **D1, resident material table, in-place edits.** `GPUResidentMaterialContext` bumps its version only when a material
|
|
213
|
+
misses its cache (`#pack_material`). Editing `roughness_factor`, `metallic_factor`, `transmission_factor`, `ior_factor`
|
|
214
|
+
or `emissive_factor` on a resident material never reaches `INDIRECT_MATERIAL_STRUCT`. The tracer, the bakes and the
|
|
215
|
+
ray-traced shadows keep the old values. A medium edit would be lost the same way.
|
|
216
|
+
- **D2, resident material table, equal materials.** The cache is keyed by `equals()`, but mesh rows store each
|
|
217
|
+
material's own `id` (`scene/rows/GPUSceneRows.js:923`), and the table is written only at the cached entry's id. A
|
|
218
|
+
second material equal to the first (a clone, say) leaves its own row zeroed, so its opacity is 0 and rays pass
|
|
219
|
+
through it. Whether `medium` takes part in `equals()` decides which materials would collapse.
|
|
220
|
+
- **D3, lightmap bake does not link.** `shader_lightmap_viz_to_sh` and `shader_lightmap_viz_to_irradiance_flat` call
|
|
221
|
+
`get_biased_normal_sample`, whose chunk nothing imports. The live one is a `render_trace_path` consumer this work
|
|
222
|
+
must keep compiling.
|
|
223
|
+
|
|
224
|
+
### 1.4 Outside this work (verified in code; consequence not measured)
|
|
225
|
+
|
|
226
|
+
- **Atmosphere Mie extinction.** `C_MIE_ABSORPTION = 4.4e-6` is Hillaire's Mie *extinction*, and `compute_extinction`
|
|
227
|
+
adds it to the scattering 3.996e-6, giving 8.396e-6 m⁻¹ against Hillaire's 4.44e-6. The engine's own unused
|
|
228
|
+
`atmosphere/hillaire/ATMOSPHERE_EARTH.js` has the right split.
|
|
229
|
+
- **LPV probe placement inside test.** `scene_point_query_is_inside_geometry` dots a geometry-space face normal with a
|
|
230
|
+
world-space ray, so rotated or mirrored instances get the wrong vote.
|
|
231
|
+
- **Brick4 `rand1` bake sampler.** It passes a uniform azimuth into `spherical_to_cartesian`'s polar-angle argument,
|
|
232
|
+
so its random rotation axes are not uniform.
|
|
233
|
+
|
|
234
|
+
## 2. Medium model
|
|
235
|
+
|
|
236
|
+
### 2.1 Medium
|
|
237
|
+
|
|
238
|
+
```text
|
|
239
|
+
ParticipatingMedium
|
|
240
|
+
absorption: RGB m⁻¹ total σ_a
|
|
241
|
+
priority: integer, default 0 who wins where interface-bounded media overlap (§3.2)
|
|
242
|
+
lobes: ≤ 4 × { scattering: RGB m⁻¹, phase }
|
|
243
|
+
σ_t = σ_a + Σ σ_s,l; phase per channel = Σ σ_s,l p_l / Σ σ_s,l
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Lobes are declared one at a time (`medium.add_lobe(scattering, phase)`), each with one explicit phase object:
|
|
247
|
+
`PhaseHenyeyGreenstein({g})`, `PhaseDraine({g, alpha})`, `PhaseRayleigh()`, `PhaseWaterMolecular({depolarization})`,
|
|
248
|
+
`PhaseFournierForand({backscatter_fraction})`, `PhaseJendersieDeon({diameter_micron})`. On the GPU, these reduce to two
|
|
249
|
+
kinds:
|
|
250
|
+
|
|
251
|
+
- **Draine (g, α)**: every analytic lobe, and Jendersie–d'Eon, which expands into two Draine lobes.
|
|
252
|
+
- **Fournier–Forand (ν, κ = 4/(3(n−1)²))**: (μ, n) is solved on the CPU from `B_p` on Mobley 2002's line.
|
|
253
|
+
|
|
254
|
+
The name `ParticipatingMedium` does not collide: the only other "medium" in the engine is `AcousticMedium`.
|
|
255
|
+
|
|
256
|
+
### 2.2 Interface-bounded media and volume primitives
|
|
257
|
+
|
|
258
|
+
**Interface-bounded media.** A closed mesh bounds a medium when its material references one
|
|
259
|
+
(`StandardShadeMaterial.medium`). The mesh's outward face normal says which side is inside. The material's transmission
|
|
260
|
+
lobe becomes the dielectric interface into that medium (§3.3).
|
|
261
|
+
|
|
262
|
+
**Volume primitives.** `ParticipatingMediaVolume` is unchanged.
|
|
263
|
+
|
|
264
|
+
- **Coefficients.** The tracer maps it to `σ_s = scattering · density · f(x)` and
|
|
265
|
+
`σ_a = (extinction − scattering) · density · f(x)`, with one HG lobe at the volume's `g`.
|
|
266
|
+
- **The fade `f(x)`.** It is the pointwise smoothstep edge fade, which the froxel builder's midpoint evaluation
|
|
267
|
+
discretizes.
|
|
268
|
+
- **What both sides share.** The reference and the froxels read the same coefficients, the same fade and the same
|
|
269
|
+
single-scattering phase. The reference does true multiple scattering where the froxels use Wrenninge octaves, which
|
|
270
|
+
makes it a check on those octaves.
|
|
271
|
+
|
|
272
|
+
### 2.3 The consumers, in the API
|
|
273
|
+
|
|
274
|
+
```js
|
|
275
|
+
// water: §4.1 of the water optics plan; b_w is the water line's fitted RGB, passed in
|
|
276
|
+
water.absorption.set(a_r, a_g, a_b);
|
|
277
|
+
water.add_lobe(b_w, new PhaseWaterMolecular({ depolarization: 0.039 }));
|
|
278
|
+
water.add_lobe(b_minus_b_w, new PhaseFournierForand({ backscatter_fraction: 0.0183 }));
|
|
279
|
+
|
|
280
|
+
// glass: Beer–Lambert interior, entered through a material with transmission
|
|
281
|
+
tinted_glass.absorption.set(0.9, 0.1, 0.4);
|
|
282
|
+
|
|
283
|
+
// fog and clouds: a ParticipatingMediaVolume authored from the existing Mie particle table, as today
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## 3. Transport
|
|
287
|
+
|
|
288
|
+
### 3.1 Estimators
|
|
289
|
+
|
|
290
|
+
**Free flight: null scattering with hero-channel MIS.**
|
|
291
|
+
- **Method.** This is the null-scattering formulation of Miller, Georgiev & Jarosz 2019, as PBRT-v4's
|
|
292
|
+
`VolPathIntegrator` implements it.
|
|
293
|
+
- **Hero channel.** Each path picks one uniformly. Distances come from the hero's majorant, and absorb/scatter/null is
|
|
294
|
+
decided with the hero's probabilities.
|
|
295
|
+
- **Per-channel bookkeeping.** Each channel keeps its β and its rescaled path probability `r_u`, and every
|
|
296
|
+
contribution is divided by `mean(r_u)`.
|
|
297
|
+
- **Homogeneous media.** The majorant equals `σ_t`, so there are no null collisions.
|
|
298
|
+
|
|
299
|
+
**Why not a scalar majorant.** Spectral tracking (Kutz 2017) uses one majorant for all channels. With illustrative
|
|
300
|
+
clear-water coefficients (σ_a ≈ 0.35/0.067/0.019, σ_s ≈ 0.05 m⁻¹) that majorant is red's 0.40 m⁻¹. Each tentative
|
|
301
|
+
collision then absorbs with p ≈ 0.48, so half the blue paths end every 2.5 m, against blue's own 14.5 m mean free path.
|
|
302
|
+
|
|
303
|
+
**Shadow-ray transmittance: residual ratio tracking** (Novák et al. 2014).
|
|
304
|
+
- The control is the segment's homogeneous part, `exp(−σ_t d)` per channel.
|
|
305
|
+
- The residual is the fog volumes, ratio-tracked against one scalar majorant, so each per-channel factor stays in
|
|
306
|
+
[0, 1].
|
|
307
|
+
- With no volumes on the segment it is exact and takes zero iterations.
|
|
308
|
+
- No MIS bookkeeping is needed: lights are delta and reachable only by NEE, while the environment and emissive meshes
|
|
309
|
+
are reachable only by sampled rays.
|
|
310
|
+
|
|
311
|
+
**Majorant pieces.** A segment is split at the sorted entry and exit distances of the volume boxes it crosses. Without
|
|
312
|
+
the split, a small dense box would cost null collisions all the way to a distant hit.
|
|
313
|
+
|
|
314
|
+
**Phase sampling.**
|
|
315
|
+
- The lobe is chosen with channel-independent probability (the mean of its `σ_s`), so `r_u` is untouched.
|
|
316
|
+
- The direction is sampled exactly from that lobe.
|
|
317
|
+
- Each channel is weighted by `Σ σ_s,l p_l / Σ q_l p_l`.
|
|
318
|
+
- Fournier–Forand is sampled by Newton with a bisection fallback on its analytic CDF in `sin²(ψ/2)`. That CDF was
|
|
319
|
+
checked for this brief: it matches quadrature, and `B_p = 0.0183` lands on n = 1.100, μ = 3.583, Mobley's Petzold
|
|
320
|
+
fit. It is 0/0 at δ = 1, so the WGSL needs a series branch there.
|
|
321
|
+
|
|
322
|
+
### 3.2 The medium stack
|
|
323
|
+
|
|
324
|
+
Each path carries up to three interface-bounded media, packed into a `u32` pair and manipulated with shifts only. At a
|
|
325
|
+
hit on a medium-bounding mesh:
|
|
326
|
+
|
|
327
|
+
| Hit | Rule |
|
|
328
|
+
|---|---|
|
|
329
|
+
| Entering (front face), new medium's priority lower than the top's | False intersection: record it, no refraction |
|
|
330
|
+
| Entering, priority equal or higher | The interface is `n_top → n_new` |
|
|
331
|
+
| Exiting (back face) a medium on the stack | Pop it. The interface is real only if it was the top |
|
|
332
|
+
| Same medium as the top, or exiting one not on the stack | Index-matched: pass straight through |
|
|
333
|
+
| Depth past 3 | Further entries count as false intersections |
|
|
334
|
+
|
|
335
|
+
**Stack initialisation.** `render_trace_path` traces one probe ray from each path's origin: a medium whose first
|
|
336
|
+
boundary along the probe is a back face contains the origin. The origin is the camera for the tracer and a probe or
|
|
337
|
+
texel for the bakes. The probe is skipped when no resident material has a medium. Open meshes leave this undefined,
|
|
338
|
+
which is why media must be bounded by closed meshes.
|
|
339
|
+
|
|
340
|
+
Fog volumes are found by position, so they need no stack.
|
|
341
|
+
|
|
342
|
+
### 3.3 Surfaces
|
|
343
|
+
|
|
344
|
+
- **Dielectric interface.** A medium-bounding material's transmission lobe is one dielectric BSDF covering reflection
|
|
345
|
+
and refraction.
|
|
346
|
+
- Fresnel is the exact unpolarized form at the relative IOR, with TIR.
|
|
347
|
+
- Roughness uses the GGX BTDF (Walter et al. 2007), built from the existing D, Smith and VNDF chunks. It falls back
|
|
348
|
+
to the smooth limit below the engine's `BSDF_ROUGHNESS_MINIMUM`.
|
|
349
|
+
- In radiance transport the transmitted weight is divided by η². That gives the camera `t/n²` of in-water radiance
|
|
350
|
+
(water plan §4.2).
|
|
351
|
+
- **The rest of the material.** The `(1 − transmission)` part keeps today's specular and diffuse lobes. Its F0 uses the
|
|
352
|
+
IOR relative to the current medium, so a stone under water reflects as wet stone.
|
|
353
|
+
- **Holes.** Alpha coverage is a hole, not an interface: the stack is untouched.
|
|
354
|
+
|
|
355
|
+
### 3.4 NEE
|
|
356
|
+
|
|
357
|
+
- **Points without a normal.** Light selection gains a receiver with no normal (no cosine in the importance), without
|
|
358
|
+
copying the two-pass selection loop.
|
|
359
|
+
- **Through media.** Transmittance follows §3.1. Thin-walled glass keeps its stochastic coverage.
|
|
360
|
+
- **Shadow ray reaching a refracting boundary:** fork F3.
|
|
361
|
+
|
|
362
|
+
### 3.5 Manifold NEE (F3 c), with runtime cost as a constraint
|
|
363
|
+
|
|
364
|
+
Manifold NEE (Hanika et al. 2015) handles one smooth specular interface between the shading point and the light: the
|
|
365
|
+
water surface, waves included. Chains of two (glass) use the same block-tridiagonal Newton step and are designed in,
|
|
366
|
+
but are not enabled in the first cut.
|
|
367
|
+
|
|
368
|
+
**The solve.**
|
|
369
|
+
- **Seed.** The first medium-bounding smooth dielectric hit of the straight shadow ray. Nothing else ever invokes MNEE,
|
|
370
|
+
so a scene without such an interface pays nothing.
|
|
371
|
+
- **Constraint.** The generalized half-vector at the vertex. It is solved by Newton in the hit triangle's tangent
|
|
372
|
+
plane, using its interpolated normal and that normal's derivative across the triangle.
|
|
373
|
+
- **Re-projection.** Each step re-projects onto the real surface by tracing from the shading point toward the updated
|
|
374
|
+
vertex: one ray cast per iteration.
|
|
375
|
+
- **Termination.** The iteration cap is a renderer setting, initially 8. A flat interface converges in one step, so it
|
|
376
|
+
costs one extra cast.
|
|
377
|
+
|
|
378
|
+
**The estimate.**
|
|
379
|
+
- **Weight.** The generalized geometric term comes from the constraint's derivative. That is what produces caustic
|
|
380
|
+
focusing, and with a directional light it uses the light-direction form.
|
|
381
|
+
- **Shadowing.** Both legs, shading point to vertex and vertex to light, get medium transmittance and occlusion.
|
|
382
|
+
|
|
383
|
+
**Cost and bias, stated.**
|
|
384
|
+
- Hanika's MNEE finds one solution per seed, so it is biased where several exist (steep, overlapping waves).
|
|
385
|
+
- Specular manifold sampling (Zeltner et al. 2020) removes that bias with Bernoulli trials, at several more solves per
|
|
386
|
+
sample. It is the named upgrade if a measured preset needs it, not the default.
|
|
387
|
+
- The per-NEE cost (iterations, casts, convergence failures) is reported by the tracer and measured in the playground,
|
|
388
|
+
including in the Brick4 bake, which runs the same code.
|
|
389
|
+
|
|
390
|
+
### 3.6 Budgets
|
|
391
|
+
|
|
392
|
+
Diffuse and glossy bounces stay at each caller's limit, so references and bakes without media are unchanged.
|
|
393
|
+
Interface events (64, measured — see the status above), medium scattering events (256) and pass-throughs of
|
|
394
|
+
medium-bounding surfaces with no interface (32) get their own limits. Surface bounces and medium scattering use Russian
|
|
395
|
+
roulette on `β / mean(r_u)`; interface events carry weight 1 and are bounded by their limit alone.
|
|
396
|
+
|
|
397
|
+
Null collisions are capped per segment as a TDR guard: a render pass that runs past ~2 s resets the device.
|
|
398
|
+
`MediumPathState.capped` counts the flights a path cut; nothing reads it out yet.
|
|
399
|
+
|
|
400
|
+
## 4. GPU layout and bindings
|
|
401
|
+
|
|
402
|
+
```text
|
|
403
|
+
PHASE_LOBE { scattering: vec3f, kind: u32, p0: f32, p1: f32 } 32 B
|
|
404
|
+
MEDIUM { absorption: vec3f, priority: u32, lobe_count: u32, lobes: array<PHASE_LOBE, 4> } 160 B
|
|
405
|
+
INDIRECT_MATERIAL_STRUCT.medium: u32 in the existing tail padding (still 80 B, 819 materials); 0xFFFFFFFF = none
|
|
406
|
+
STANDARD_MATERIAL_DATA_STRUCT.front_facing
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
- **Media table.** A 64 KiB uniform array of 409 media, owned by `GPUResidentMaterialContext` beside the material
|
|
410
|
+
table: media are reached only through materials.
|
|
411
|
+
- Every `render_trace_path` consumer declares it in its existing `materials` group. That adds no storage buffer and
|
|
412
|
+
no bind group.
|
|
413
|
+
- Slots are dense (an `IdPool`, as textures use), not global ids.
|
|
414
|
+
- Change detection depends on D1.
|
|
415
|
+
- **Fog volumes:** F6.
|
|
416
|
+
|
|
417
|
+
## 5. Validation
|
|
418
|
+
|
|
419
|
+
**Tier 1.** One validity spec covers the tracer, all six `render_trace_path` consumers and every new chunk. A
|
|
420
|
+
storage-budget assertion pins the accumulating tracer at 8 and the Brick4 bake at 10.
|
|
421
|
+
|
|
422
|
+
As built (`chunk_render_trace_path.consumers.spec.js`): five of the six consumers, each valid and binding `media` as a
|
|
423
|
+
uniform within the engine's 10 storage buffers. `graph_path_trace_scene` keeps its shader module-private, so it is
|
|
424
|
+
covered by the shared chunk and the device compile of the accumulating tracer only. The validator caught a reserved
|
|
425
|
+
word (`target`) in the stage-3 phase chunk that no shader had compiled yet.
|
|
426
|
+
|
|
427
|
+
**Tier 2, emulator, library mode, against CPU oracles.** Transport chunks are pure: segment in, event out. Spec harness
|
|
428
|
+
kernels walk them between analytic planes, with no BVH.
|
|
429
|
+
|
|
430
|
+
| Item | Oracle |
|
|
431
|
+
|---|---|
|
|
432
|
+
| Phase normalization, every lobe kind including g=0 and α=0 | Quadrature in the spec |
|
|
433
|
+
| Fournier–Forand backscatter | Integral = `B_p` over 0.005–0.05; finite and continuous at δ = 1 ± ε |
|
|
434
|
+
| Samplers | KS test against each analytic CDF (spec-local KS) |
|
|
435
|
+
| Jendersie–d'Eon encoding | Two Draine lobes evaluate equal to `phase_mie_jendersie_deon_evaluate_params` |
|
|
436
|
+
| Exact Fresnel | Independent JS formula; R + T = 1; TIR at the critical angle |
|
|
437
|
+
| Chromatic infinite medium | MIS-weighted scattering count per channel = ϖ_c / (1 − ϖ_c), σ_t spread 10:1 |
|
|
438
|
+
| Homogeneous slab | Ballistic `e^(−τ)` exactly; total transmittance against an f64 analog Monte Carlo in the spec, within combined standard error |
|
|
439
|
+
| Faded fog box | Ratio tracking against quadrature of ∫σ_t |
|
|
440
|
+
| Homogeneous transmittance | Zero iterations, exact |
|
|
441
|
+
| Stack | Every §3.2 rule as a case |
|
|
442
|
+
|
|
443
|
+
**Tier 3, `SoftwareGPUDevice`.**
|
|
444
|
+
- A material's row carries its medium slot; a material without one carries the sentinel.
|
|
445
|
+
- The media bytes match the encoding, and editing a medium re-uploads them (needs D1).
|
|
446
|
+
- Two equal materials both get rows (D2).
|
|
447
|
+
- The tracer dispatch binds the media uniform and stays at 8 storage buffers.
|
|
448
|
+
|
|
449
|
+
**Tier 4, headless Chrome.** A playground `src/shade/playground/path_traced_media/` follows the AVBOIT page's pattern.
|
|
450
|
+
It reads values back numerically.
|
|
451
|
+
|
|
452
|
+
As built: `run_checks()` renders each scene to convergence with the accumulating tracer, reads the radiance before the
|
|
453
|
+
tone map at full precision, and compares rectangles with the closed form — per pixel where the answer depends on the
|
|
454
|
+
view ray's angle, as a ratio against a control render where it depends on units. The nine checks: an index-matched
|
|
455
|
+
absorbing slab, the same behind n = 1.5 glass with every internal reflection summed, an underwater camera (the origin
|
|
456
|
+
probe), white furnaces for a clear glass sphere, an index-matched scattering sphere, a scattering n = 1.333 sphere and
|
|
457
|
+
a fog volume, and the sun through an index-matched absorbing box and through an absorbing fog volume. Check 3 below
|
|
458
|
+
waits for stage 5. As planned:
|
|
459
|
+
|
|
460
|
+
1. **White furnace.** A lossless scattering sphere at IOR 1 and at IOR 1.333 under a flat environment of 1 should give
|
|
461
|
+
1 everywhere, within 3 standard errors.
|
|
462
|
+
2. **Beer–Lambert slab.** Over a background of 1, the result should be `(1 − F)² e^(−σ_a d) / (1 − F² e^(−2σ_a d))`.
|
|
463
|
+
3. **Water floor round trip** (after stage 5). Water with b = 0, sun at 30° and 60°, black environment, diffuse-bounce
|
|
464
|
+
limit 1. The result should be `t(θ_v)/n² · t(θ_s) · (ρ/π) · E cos θ_s · e^(−a(z/cos θ_w + z/cos θ_v,w))`.
|
|
465
|
+
|
|
466
|
+
The water presets render as references only. Raster water belongs to the water line, which consumes this through
|
|
467
|
+
§2.3.
|
|
468
|
+
|
|
469
|
+
## 6. Stages
|
|
470
|
+
|
|
471
|
+
Each stage is committed on its own, with specs red-then-green where they pin behaviour.
|
|
472
|
+
|
|
473
|
+
| Stage | Work | Gate |
|
|
474
|
+
|---|---|---|
|
|
475
|
+
| 0 (F8) | D1, D2 and D3 fixed, each pinned by a spec that is red first. Validity coverage of the tracer and its consumers | Tier 1, tier 3 |
|
|
476
|
+
| 1. Optics chunks | Exact Fresnel; Draine sampler wrapper (HG at α=0, Cardano on `cbrt` at g=0); Fournier–Forand evaluate/CDF/sample plus the CPU solve | Tier 2 phase and Fresnel rows |
|
|
477
|
+
| 2. Medium model | `ParticipatingMedium`, phase classes and encoding, `StandardShadeMaterial.medium`, media uniform table, material slot, front-facing flag | Unit specs, tier 3 |
|
|
478
|
+
| 3. Transport chunks | Free flight, residual ratio tracking, majorant pieces, phase mixture, volume density, box interval, stack ops | Tier 2 transport rows |
|
|
479
|
+
| 4. Tracer and playground | Medium segments and scattering vertices, dielectric interface, relative-IOR F0, fog volumes (per F6), origin probe, receiver without a normal, budgets and caps; shadow rays block at refracting boundaries | Tier 1, tier 3, tier 4 checks 1–2; mean unchanged for a scene without media |
|
|
480
|
+
| 5. Manifold NEE | One-interface MNEE per §3.5, with cost counters | Tier 2: constraint solve on flat and curved interfaces, the geometric term against finite differences of the irradiance; tier 4: check 3 and a wave-shaped interface; cost measured |
|
|
481
|
+
| 6. (optional) glTF `KHR_materials_volume` import | Absorption from `attenuationColor` and `attenuationDistance` | Importer spec |
|
|
482
|
+
|
|
483
|
+
## 7. Not in scope, and stated limits
|
|
484
|
+
|
|
485
|
+
- ~~**Caustic focusing** through curved interfaces (needs the MNEE Jacobian, F3).~~ Built in stage 5.
|
|
486
|
+
- **Delta lights through two or more refracting boundaries.** These leave black shadows, the standard unidirectional
|
|
487
|
+
limit. Thin-walled glass is unaffected.
|
|
488
|
+
- **Until stage 5, delta lights through any refracting boundary.** A shadow ray blocks at an interface between
|
|
489
|
+
different indices, so the sun reaches what is under water only as sky light and bounces.
|
|
490
|
+
- **Light trapped past 64 interface events**, which only a smooth curved body that scatters inside produces (status
|
|
491
|
+
above).
|
|
492
|
+
- **The opaque remainder of a medium-bounding surface** (`transmission_factor` < 1) takes its specular F0 from
|
|
493
|
+
`ior_factor` against vacuum, not against the medium on its other side.
|
|
494
|
+
- **Environment NEE and volume emission.** For volume emission, `σ_a L_e` at absorption events is the hook.
|
|
495
|
+
- **Spectral rendering and dispersion.**
|
|
496
|
+
- **The raster side of media.** AVBOIT glass does not refract or absorb.
|
|
497
|
+
- **Heterogeneous density beyond the fade** (F4).
|
|
498
|
+
|
|
499
|
+
## 8. Forks
|
|
500
|
+
|
|
501
|
+
| # | Question | Options | Recommendation |
|
|
502
|
+
|---|---|---|---|
|
|
503
|
+
| F1 | Where does an interface's IOR live? You described media as "IOR plus scattering and absorption" | **(a) On the boundary material** (`ior_factor`): the medium is coefficients, phase and priority. **(b) On the medium**: then `ior_factor` stops mattering on those materials' transmission lobe | **(a).** Every raster path (forward, AVBOIT, MBOIT) and the tracer's F0 already read `ior_factor`, so one value per surface keeps raster and reference in agreement on reflectance. Under (b) a field's meaning would depend on another field. The cost of (a): two materials could enter one medium at different IORs. Physically IOR belongs to the substance, which is the case for (b) |
|
|
504
|
+
| F2 | A transmissive material without a medium | **(a) Stays thin-walled**, as it is in the tracer, forward, AVBOIT, MBOIT and shadows today. **(b) Becomes a solid** | **(a).** (b) would change every existing scene and require every pane to be a closed mesh: a one-plane window has no inside, and the stack would corrupt. Thin-walled is the correct limit for a sheet thinner than the footprint, and a solid is exactly "transmission + medium" |
|
|
505
|
+
| F3 | NEE through a refracting boundary | **(a)** Straight-line pass-through: in-water path 2z instead of 1.315z for a 60° sun, which mis-validates the downwelling the water plan needs checked. **(b)** Connection through one smooth interface by Newton on the local tangent plane: exact on flat water, no focusing on curved surfaces, directional, point and spot alike. **(c)** Full manifold NEE with the curvature Jacobian: caustics | **(b) now**, in stage 5. **(c) when waves exist and the reference should show caustics.** Raster water has none (water plan §1). Rough interfaces need neither: NEE at the interface vertex goes through the rough BTDF |
|
|
506
|
+
| F4 | Cloud density from noise or a grid | Today neither side has it: the noise fields on `ParticipatingMediaVolume` are never uploaded. **(a) Later**, as one density chunk read by the froxels and the tracer alike (the 3-D `psrdnoise3` chunk exists, unused). **(b) Now**, tracer only | **(a).** The estimators already treat the fade as heterogeneous, so a density source changes no transport code |
|
|
507
|
+
| F5 | Shared chunks with water stage 1b | Exact Fresnel, Fournier–Forand and the molecular phase (a Draine parameter set, no code) land in stage 1 in `shader/chunk/brdf/fresnel/` and `shader/chunk/atmosphere/phase/`, pinned by the specs water §8 asks for | Yes, unless the water line already has its own in flight. Please confirm |
|
|
508
|
+
| F6 | How fog volumes reach `render_trace_path`, given the Brick4 bake has no storage slot left | **(a) A table in the scene's `GPUDatabase`**, which every tracer consumer already binds; `GPUSceneVolumetrics` writes it, and the two froxel passes reading `scene_volumes` read it there instead (net zero bindings). A volume becomes an entity's row, as meshes and lights already are; linking it to its transforms row would later also lift its no-hierarchy limitation. **(b) A second, uniform copy** of the volume table (≈340 volumes in 64 KiB), bound in each consumer's light group | **(a).** One copy of the data, no cap, and the direction the engine has already taken for lights. It is a raster-side change to the volumetrics plumbing, which is why it is your call. The light database would also work; the scene database fits "a volume is a scene record" better |
|
|
509
|
+
| F7 | The bakes gain media too | **(a) Yes**, by sharing `render_trace_path`. Scenes with fog volumes bake differently: fog scatters and attenuates in Brick4 probes and lightmaps, and bakes cost more where fog is. **(b) No**: a second concrete tracer chunk for references only | **(a).** (b) duplicates a 380-line chunk and makes the reference disagree with the bakes it should judge: the exception you asked to avoid |
|
|
510
|
+
| F8 | Stage 0: fix D1, D2 and D3 first | They sit in the table and the shader this work extends | **Yes.** Each starts with a failing spec; if a spec will not go red, that item is dropped and reported |
|
|
511
|
+
|
|
512
|
+
Decided here, each with what would reverse it:
|
|
513
|
+
|
|
514
|
+
| Decision | Reversal condition |
|
|
515
|
+
|---|---|
|
|
516
|
+
| RGB with hero-channel MIS | Measured chromatic noise in the presets that it does not remove |
|
|
517
|
+
| Fog keeps the raster's HG phase | Moves to Jendersie–d'Eon only together with the froxels |
|
|
518
|
+
| Priority on the medium | A scene needing two priorities for one medium |
|
|
519
|
+
| Media table uniform in the `materials` group | Media outgrowing 409 |
|
|
520
|
+
| Budgets per §3.6 | A preset hitting a cap |
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AccumulatingPathTracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;GAcG;AACH;IA8EI;;;OAGG;IACH,sBAFW,eAAe,EAkBzB;IAhGD;;;;OAIG;IACH,kBAFU,MAAM,CAEO;IAEvB;;;;OAIG;IACH,wBAFU,MAAM,CAEc;IAE9B;;;;OAIG;IACH,eAFU,OAAO,CAEK;IA+NtB;;;;;;;OAOG;IACH,+BAgBC;IAED;;;;;;;OAOG;IACH;QAJmC,IAAI,EAA5B,cAAc;QACM,KAAK,EAAzB,UAAU;QACR,MAAM,
|
|
1
|
+
{"version":3,"file":"AccumulatingPathTracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;;;GAcG;AACH;IA8EI;;;OAGG;IACH,sBAFW,eAAe,EAkBzB;IAhGD;;;;OAIG;IACH,kBAFU,MAAM,CAEO;IAEvB;;;;OAIG;IACH,wBAFU,MAAM,CAEc;IAE9B;;;;OAIG;IACH,eAFU,OAAO,CAEK;IA+NtB;;;;;;;OAOG;IACH,+BAgBC;IAED;;;;;;;OAOG;IACH;QAJmC,IAAI,EAA5B,cAAc;QACM,KAAK,EAAzB,UAAU;QACR,MAAM,CA0JlB;;CACJ;yBAzcY,OAAO,8DAA8D,EAAE,UAAU;8BAIjF,OAAO,0BAA0B,EAAE,eAAe;6BAClD,OAAO,8BAA8B,EAAE,cAAc"}
|
package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_accumulating_path_tracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_accumulating_path_tracer.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js"],"names":[],"mappings":"AAkBA,2DAKG;AA+EH,4DAIG;6BAxG0B,mCAAmC;8BAOlC,+BAA+B"}
|
|
@@ -11,6 +11,7 @@ import { ComputeShader } from "../../shader/ComputeShader.js";
|
|
|
11
11
|
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
12
12
|
import { sr_create_group_RTX } from "../../geometry/sr_create_group_RTX.js";
|
|
13
13
|
import { INDIRECT_MATERIAL_ARRAY_TYPE } from "../../material/resident/INDIRECT_MATERIAL_ARRAY_TYPE.js";
|
|
14
|
+
import { MEDIA_TABLE_STRUCT } from "../../medium/MEDIA_TABLE_STRUCT.js";
|
|
14
15
|
import { chunk_render_trace_path } from "../shader/chunk_render_trace_path.js";
|
|
15
16
|
|
|
16
17
|
const resources = new ShaderResourceSetDescriptor();
|
|
@@ -30,6 +31,7 @@ sr_create_group_RTX(resources);
|
|
|
30
31
|
|
|
31
32
|
resources.createGroup()
|
|
32
33
|
.addUniform("materials", INDIRECT_MATERIAL_ARRAY_TYPE)
|
|
34
|
+
.addUniform("media", MEDIA_TABLE_STRUCT)
|
|
33
35
|
.addTexture("textures", "unfilterable-float", "2d-array");
|
|
34
36
|
|
|
35
37
|
resources.createGroup()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph_path_trace_scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/path_tracer/graph_path_trace_scene.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph_path_trace_scene.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/path_tracer/graph_path_trace_scene.js"],"names":[],"mappings":"AAkGA;;;;;;GAMG;AACH;IAJ+B,KAAK;IACD,IAAI;IAC1B,MAAM,CAqFlB"}
|