@bloomengine/engine 0.3.1
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/LICENSE +21 -0
- package/README.md +169 -0
- package/native/android/Cargo.lock +1848 -0
- package/native/android/Cargo.toml +20 -0
- package/native/android/src/lib.rs +1747 -0
- package/native/ios/Cargo.lock +1688 -0
- package/native/ios/Cargo.toml +19 -0
- package/native/ios/src/lib.rs +2258 -0
- package/native/linux/Cargo.lock +1719 -0
- package/native/linux/Cargo.toml +22 -0
- package/native/linux/src/lib.rs +2236 -0
- package/native/macos/Cargo.lock +3310 -0
- package/native/macos/Cargo.toml +29 -0
- package/native/macos/src/lib.rs +3444 -0
- package/native/shared/Cargo.lock +1898 -0
- package/native/shared/Cargo.toml +42 -0
- package/native/shared/assets/default_font.ttf +0 -0
- package/native/shared/build.rs +77 -0
- package/native/shared/shaders/common/fog.wgsl +16 -0
- package/native/shared/shaders/common/imposter.wgsl +112 -0
- package/native/shared/shaders/common/pbr.wgsl +186 -0
- package/native/shared/shaders/common/shadows.wgsl +77 -0
- package/native/shared/shaders/common/sky.wgsl +8 -0
- package/native/shared/shaders/common/tonemap.wgsl +25 -0
- package/native/shared/shaders/impulse_field.wgsl +53 -0
- package/native/shared/shaders/material_abi.wgsl +360 -0
- package/native/shared/shaders/materials/test_minimal.wgsl +42 -0
- package/native/shared/src/audio.rs +363 -0
- package/native/shared/src/custom_shaders.rs +104 -0
- package/native/shared/src/drs.rs +211 -0
- package/native/shared/src/engine.rs +186 -0
- package/native/shared/src/frame_callbacks.rs +88 -0
- package/native/shared/src/geometry.rs +236 -0
- package/native/shared/src/handles.rs +76 -0
- package/native/shared/src/input.rs +273 -0
- package/native/shared/src/jolt_sys.rs +822 -0
- package/native/shared/src/lib.rs +43 -0
- package/native/shared/src/models.rs +1941 -0
- package/native/shared/src/physics_jolt.rs +1528 -0
- package/native/shared/src/picking.rs +298 -0
- package/native/shared/src/postfx.rs +339 -0
- package/native/shared/src/profiler.rs +416 -0
- package/native/shared/src/renderer/atmosphere_lut.rs +573 -0
- package/native/shared/src/renderer/brdf_lut.rs +154 -0
- package/native/shared/src/renderer/formats.rs +778 -0
- package/native/shared/src/renderer/graph.rs +465 -0
- package/native/shared/src/renderer/hot_reload.rs +390 -0
- package/native/shared/src/renderer/impulse_field.rs +455 -0
- package/native/shared/src/renderer/material_pipeline.rs +604 -0
- package/native/shared/src/renderer/material_system.rs +2106 -0
- package/native/shared/src/renderer/mod.rs +13923 -0
- package/native/shared/src/renderer/planar_reflection.rs +458 -0
- package/native/shared/src/renderer/post_pass.rs +249 -0
- package/native/shared/src/renderer/shader_include.rs +205 -0
- package/native/shared/src/renderer/shader_library.rs +134 -0
- package/native/shared/src/renderer/shaders.rs +5855 -0
- package/native/shared/src/renderer/transient.rs +576 -0
- package/native/shared/src/renderer/types.rs +259 -0
- package/native/shared/src/renderer/util.rs +151 -0
- package/native/shared/src/scene.rs +1066 -0
- package/native/shared/src/sdf_cache.rs +274 -0
- package/native/shared/src/shadows.rs +551 -0
- package/native/shared/src/staging.rs +90 -0
- package/native/shared/src/string_header.rs +35 -0
- package/native/shared/src/text_renderer.rs +456 -0
- package/native/shared/src/textures.rs +154 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.cpp +242 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.h +121 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeToBuffer.h +296 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/NodeCodec/NodeCodecQuadTreeHalfFloat.h +323 -0
- package/native/third_party/JoltPhysics/Jolt/AABBTree/TriangleCodec/TriangleCodecIndexed8BitPackSOA4Flags.h +555 -0
- package/native/third_party/JoltPhysics/Jolt/ConfigurationString.h +112 -0
- package/native/third_party/JoltPhysics/Jolt/Core/ARMNeon.h +94 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Array.h +713 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Atomics.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Core/BinaryHeap.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Core/ByteBuffer.h +74 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Color.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Color.h +98 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Core.h +652 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FPControlWord.h +143 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FPException.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FPFlushDenormals.h +43 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Factory.cpp +92 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Factory.h +54 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.h +122 -0
- package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.inl +215 -0
- package/native/third_party/JoltPhysics/Jolt/Core/HashCombine.h +234 -0
- package/native/third_party/JoltPhysics/Jolt/Core/HashTable.h +876 -0
- package/native/third_party/JoltPhysics/Jolt/Core/InsertionSort.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.cpp +27 -0
- package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.h +38 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.h +311 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.inl +56 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.cpp +65 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.h +62 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.cpp +364 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.cpp +230 -0
- package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.h +85 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.cpp +51 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.h +67 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.h +182 -0
- package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.inl +351 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Memory.cpp +85 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Memory.h +85 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Mutex.h +223 -0
- package/native/third_party/JoltPhysics/Jolt/Core/MutexArray.h +98 -0
- package/native/third_party/JoltPhysics/Jolt/Core/NonCopyable.h +18 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Profiler.cpp +677 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Profiler.h +301 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Profiler.inl +90 -0
- package/native/third_party/JoltPhysics/Jolt/Core/QuickSort.h +137 -0
- package/native/third_party/JoltPhysics/Jolt/Core/RTTI.cpp +149 -0
- package/native/third_party/JoltPhysics/Jolt/Core/RTTI.h +436 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Reference.h +244 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Result.h +174 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLAlignedAllocator.h +72 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLAllocator.h +127 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLLocalAllocator.h +170 -0
- package/native/third_party/JoltPhysics/Jolt/Core/STLTempAllocator.h +80 -0
- package/native/third_party/JoltPhysics/Jolt/Core/ScopeExit.h +49 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.cpp +135 -0
- package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.h +68 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StaticArray.h +329 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamIn.h +120 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamOut.h +97 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamUtils.h +168 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StreamWrapper.h +53 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StridedPtr.h +63 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StringTools.cpp +101 -0
- package/native/third_party/JoltPhysics/Jolt/Core/StringTools.h +38 -0
- package/native/third_party/JoltPhysics/Jolt/Core/TempAllocator.h +209 -0
- package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.cpp +37 -0
- package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Core/UnorderedMap.h +80 -0
- package/native/third_party/JoltPhysics/Jolt/Core/UnorderedSet.h +32 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/AABox.h +313 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/AABox4.h +224 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ClipPoly.h +200 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ClosestPoint.h +498 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.cpp +1467 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.h +276 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.cpp +335 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.h +105 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexSupport.h +188 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/EPAConvexHullBuilder.h +845 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/EPAPenetrationDepth.h +557 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Ellipse.h +77 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/GJKClosestPoint.h +945 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/IndexedTriangle.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.cpp +222 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.h +19 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/MortonCode.h +40 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.cpp +178 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.h +39 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Plane.h +104 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayAABox.h +241 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayCapsule.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayCylinder.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RaySphere.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/RayTriangle.h +158 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Sphere.h +72 -0
- package/native/third_party/JoltPhysics/Jolt/Geometry/Triangle.h +34 -0
- package/native/third_party/JoltPhysics/Jolt/Jolt.cmake +703 -0
- package/native/third_party/JoltPhysics/Jolt/Jolt.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Jolt.natvis +116 -0
- package/native/third_party/JoltPhysics/Jolt/Math/BVec16.h +99 -0
- package/native/third_party/JoltPhysics/Jolt/Math/BVec16.inl +177 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DMat44.h +158 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DMat44.inl +310 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DVec3.h +291 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DVec3.inl +941 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Double3.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Math/DynMatrix.h +31 -0
- package/native/third_party/JoltPhysics/Jolt/Math/EigenValueSymmetric.h +177 -0
- package/native/third_party/JoltPhysics/Jolt/Math/FindRoot.h +42 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Float2.h +36 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Float3.h +50 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Float4.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Math/GaussianElimination.h +102 -0
- package/native/third_party/JoltPhysics/Jolt/Math/HalfFloat.h +208 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Mat44.h +243 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Mat44.inl +952 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Math.h +208 -0
- package/native/third_party/JoltPhysics/Jolt/Math/MathTypes.h +32 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Matrix.h +259 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Quat.h +268 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Quat.inl +406 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Real.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Swizzle.h +19 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Trigonometry.h +79 -0
- package/native/third_party/JoltPhysics/Jolt/Math/UVec4.h +232 -0
- package/native/third_party/JoltPhysics/Jolt/Math/UVec4.inl +636 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec3.cpp +71 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec3.h +308 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec3.inl +942 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec4.h +320 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vec4.inl +1152 -0
- package/native/third_party/JoltPhysics/Jolt/Math/Vector.h +211 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/GetPrimitiveTypeOfType.h +54 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.h +337 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.cpp +252 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.h +57 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.cpp +165 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.h +57 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.cpp +635 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.h +148 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.cpp +166 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.cpp +418 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.h +55 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.cpp +255 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.h +62 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTypes.h +26 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttribute.h +111 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeEnum.h +67 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeTyped.h +60 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.cpp +15 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.h +170 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.cpp +70 -0
- package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.h +45 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/AllowedDOFs.h +68 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.cpp +426 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.h +452 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.inl +197 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyAccess.h +68 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyActivationListener.h +28 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.cpp +234 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.h +124 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyFilter.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyID.h +101 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.cpp +1099 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.h +324 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLock.h +111 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockInterface.h +134 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockMulti.h +120 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.cpp +1220 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.h +403 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyPair.h +36 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyType.h +19 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.cpp +185 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.cpp +92 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.h +308 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.inl +178 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionQuality.h +31 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionType.h +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.cpp +354 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.h +159 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.cpp +59 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.h +157 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterID.h +98 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.cpp +1933 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.h +752 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/AABoxCast.h +20 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdgeMode.h +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdges.h +114 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BackFaceMode.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.cpp +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.h +109 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp +313 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.h +38 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h +148 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceMask.h +92 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceTable.h +64 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp +629 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.h +108 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterMask.h +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterTable.h +66 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.cpp +1768 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.h +389 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.cpp +107 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.h +46 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastResult.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.cpp +223 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.h +49 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollectFacesMode.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.cpp +155 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.h +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollidePointResult.h +25 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShape.h +106 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShapeVsShapePerLeaf.h +94 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVertexIterator.h +110 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVerticesVsTriangles.h +102 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.cpp +121 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.h +50 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollector.h +109 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollectorImpl.h +219 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.cpp +107 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.h +97 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.cpp +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.h +97 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ContactListener.h +143 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.cpp +213 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.cpp +32 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.h +46 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/InternalEdgeRemovingCollector.h +279 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.cpp +271 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.h +44 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.cpp +448 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.h +77 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.cpp +62 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.h +110 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayer.h +111 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterMask.h +52 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterTable.h +78 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.cpp +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.h +57 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.cpp +38 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/RayCast.h +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.cpp +318 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.h +115 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.cpp +438 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.h +129 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.cpp +433 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.h +354 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShapeVisitors.h +461 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.cpp +1311 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.h +202 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.cpp +566 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.h +150 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.cpp +418 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.h +126 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.cpp +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.h +80 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.cpp +64 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.h +75 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/GetTrianglesContext.h +248 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.cpp +2754 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.h +380 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.cpp +1305 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.h +228 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.cpp +596 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.h +176 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp +217 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.h +140 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.cpp +541 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.h +147 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PolyhedronSubmergedVolumeCalculator.h +319 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.cpp +333 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.h +161 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaleHelpers.h +83 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.cpp +238 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.h +145 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.cpp +325 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.h +466 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.cpp +347 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.h +125 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.cpp +674 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.h +139 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeID.h +138 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeIDPair.h +65 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.cpp +453 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.gliffy +1 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.h +135 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.cpp +691 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.h +132 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.cpp +430 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.h +143 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeCast.h +173 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeFilter.h +73 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilter.h +40 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilterWrapper.h +58 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SortReverseAndStore.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.cpp +180 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.h +194 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/CalculateSolverSteps.h +70 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.cpp +246 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.h +133 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.cpp +73 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.h +243 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.cpp +289 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.h +100 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AngleConstraintPart.h +257 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AxisConstraintPart.h +682 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h +276 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/GearConstraintPart.h +195 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h +222 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/IndependentAxisConstraintPart.h +246 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/PointConstraintPart.h +239 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RackAndPinionConstraintPart.h +196 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h +283 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationQuatConstraintPart.h +246 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SpringPart.h +169 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h +597 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.cpp +1804 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.h +524 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.cpp +266 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.h +120 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.cpp +215 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.h +96 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.cpp +188 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.h +116 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.cpp +443 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.h +205 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.cpp +43 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.h +66 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.cpp +458 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.h +191 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.cpp +85 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.h +76 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.cpp +308 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.h +54 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.cpp +157 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.h +94 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.cpp +253 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.h +137 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.cpp +189 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.h +118 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.cpp +900 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.h +289 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.cpp +501 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.h +198 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.cpp +35 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.h +70 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.cpp +524 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.h +197 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.cpp +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.h +65 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.cpp +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.h +159 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/EActivation.h +16 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/EPhysicsUpdateError.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.cpp +492 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.h +144 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.cpp +582 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.h +187 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsLock.h +169 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.cpp +261 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.h +104 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSettings.h +125 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsStepListener.h +37 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.cpp +2915 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.h +391 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.cpp +25 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.h +176 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.cpp +744 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.h +245 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyContactListener.h +55 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp +128 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.h +75 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyManifold.h +74 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.cpp +1501 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.h +333 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.cpp +354 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.h +73 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.cpp +1487 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.h +390 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyUpdateContext.h +63 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyVertex.h +36 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorder.h +136 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.cpp +90 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.h +50 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.cpp +306 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.h +119 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.cpp +547 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.h +169 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.cpp +33 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.h +33 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.cpp +376 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.h +146 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.cpp +703 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.h +252 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.cpp +17 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.h +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.cpp +81 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.h +39 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.cpp +122 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.h +93 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.cpp +52 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.h +56 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.cpp +159 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.h +87 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.cpp +93 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.h +148 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.cpp +866 -0
- package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.h +205 -0
- package/native/third_party/JoltPhysics/Jolt/RegisterTypes.cpp +204 -0
- package/native/third_party/JoltPhysics/Jolt/RegisterTypes.h +29 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.cpp +1107 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.h +383 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.cpp +168 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.h +48 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.cpp +158 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.h +130 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.cpp +80 -0
- package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.h +88 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.cpp +165 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.h +91 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.cpp +82 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.h +72 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.cpp +237 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.h +145 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.cpp +87 -0
- package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.h +82 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.cpp +73 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.h +84 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.cpp +139 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.h +52 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.cpp +43 -0
- package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.h +28 -0
- package/native/third_party/JoltPhysics/LICENSE +7 -0
- package/native/third_party/JoltPhysics/README.md +173 -0
- package/native/third_party/bloom_jolt/CMakeLists.txt +78 -0
- package/native/third_party/bloom_jolt/include/bloom_jolt.h +519 -0
- package/native/third_party/bloom_jolt/src/bloom_jolt.cpp +1780 -0
- package/native/tvos/Cargo.lock +1692 -0
- package/native/tvos/Cargo.toml +22 -0
- package/native/tvos/src/lib.rs +3179 -0
- package/native/watchos/Cargo.lock +16 -0
- package/native/watchos/Cargo.toml +19 -0
- package/native/watchos/shaders/bloom_postfx.metal +99 -0
- package/native/watchos/src/BloomWatchApp.swift +1236 -0
- package/native/watchos/src/BloomWatchAudio.swift +179 -0
- package/native/watchos/src/audio.rs +55 -0
- package/native/watchos/src/draw_list.rs +223 -0
- package/native/watchos/src/ffi_stubs.rs +454 -0
- package/native/watchos/src/lib.rs +1013 -0
- package/native/watchos/src/models.rs +746 -0
- package/native/watchos/src/postfx.rs +91 -0
- package/native/watchos/src/scene.rs +534 -0
- package/native/watchos/src/textures.rs +184 -0
- package/native/web/Cargo.lock +1656 -0
- package/native/web/Cargo.toml +38 -0
- package/native/web/bloom_glue.js +218 -0
- package/native/web/build.sh +101 -0
- package/native/web/index.html +390 -0
- package/native/web/jolt_bridge.js +1311 -0
- package/native/web/src/lib.rs +2739 -0
- package/native/windows/Cargo.lock +1813 -0
- package/native/windows/Cargo.toml +31 -0
- package/native/windows/src/lib.rs +1933 -0
- package/package.json +558 -0
- package/src/audio/index.ts +151 -0
- package/src/core/colors.ts +56 -0
- package/src/core/index.ts +903 -0
- package/src/core/keys.ts +63 -0
- package/src/core/types.ts +102 -0
- package/src/index.ts +158 -0
- package/src/math/index.ts +502 -0
- package/src/mobile/index.ts +294 -0
- package/src/models/index.ts +859 -0
- package/src/physics/index.ts +1072 -0
- package/src/scene/index.ts +570 -0
- package/src/shapes/index.ts +120 -0
- package/src/text/index.ts +48 -0
- package/src/textures/index.ts +173 -0
- package/src/world/index.ts +22 -0
- package/src/world/loader.ts +385 -0
- package/src/world/prefab.ts +205 -0
- package/src/world/saver.ts +61 -0
- package/src/world/terrain.ts +254 -0
- package/src/world/types.ts +136 -0
- package/src/world/validate.ts +202 -0
- package/src/world/version.ts +47 -0
|
@@ -0,0 +1,573 @@
|
|
|
1
|
+
//! Hillaire 2020 atmosphere LUTs — transmittance + multi-scattering.
|
|
2
|
+
//!
|
|
3
|
+
//! Two CPU-baked tables that capture the time-invariant part of an
|
|
4
|
+
//! Earth-like atmosphere:
|
|
5
|
+
//!
|
|
6
|
+
//! - **Transmittance** `T(r, μ)` — fraction of light surviving the
|
|
7
|
+
//! journey from a point at radius `r` along a ray with zenith
|
|
8
|
+
//! cosine `μ` to the top of the atmosphere. Indexed by
|
|
9
|
+
//! `(view-zenith-cosine, altitude)`.
|
|
10
|
+
//! - **Multi-scattering** `ψ_ms(r, μ_s)` — Hillaire's energy-conserving
|
|
11
|
+
//! second-and-higher-order scattering term, sampled per pixel of the
|
|
12
|
+
//! sky-view LUT to add the bounce light that single-scattering alone
|
|
13
|
+
//! misses (the bright zenith on overcast days, dome glow at sunset).
|
|
14
|
+
//!
|
|
15
|
+
//! Both bake once at renderer init and never change, so they live
|
|
16
|
+
//! CPU-side. The pattern mirrors `brdf_lut.rs`: pure Rust producing
|
|
17
|
+
//! `Rgba16Float` texel data ready for `queue.write_texture`, parallel
|
|
18
|
+
//! across cores on native, single-thread on wasm.
|
|
19
|
+
//!
|
|
20
|
+
//! Sizes are platform-tiered (RFC 0002): desktop gets Hillaire's
|
|
21
|
+
//! defaults, web/mobile get a smaller tier to halve memory and bake
|
|
22
|
+
//! cost on the targets that hurt most.
|
|
23
|
+
|
|
24
|
+
use half::f16;
|
|
25
|
+
|
|
26
|
+
// ----------------------------------------------------------------------------
|
|
27
|
+
// Platform-tiered LUT dimensions (RFC 0002)
|
|
28
|
+
// ----------------------------------------------------------------------------
|
|
29
|
+
|
|
30
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
31
|
+
pub const TRANSMITTANCE_W: u32 = 128;
|
|
32
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
33
|
+
pub const TRANSMITTANCE_H: u32 = 32;
|
|
34
|
+
|
|
35
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
36
|
+
pub const TRANSMITTANCE_W: u32 = 256;
|
|
37
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
38
|
+
pub const TRANSMITTANCE_H: u32 = 64;
|
|
39
|
+
|
|
40
|
+
// Multi-scattering LUT is small enough to be the same across tiers.
|
|
41
|
+
pub const MULTI_SCATTERING_SIZE: u32 = 32;
|
|
42
|
+
|
|
43
|
+
// Sky-view LUT — recomputed every sun move via GPU compute pass.
|
|
44
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
45
|
+
pub const SKY_VIEW_W: u32 = 128;
|
|
46
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
47
|
+
pub const SKY_VIEW_H: u32 = 72;
|
|
48
|
+
|
|
49
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
50
|
+
pub const SKY_VIEW_W: u32 = 192;
|
|
51
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
52
|
+
pub const SKY_VIEW_H: u32 = 108;
|
|
53
|
+
|
|
54
|
+
// Aerial-perspective 3D LUT — recomputed each frame (camera moves).
|
|
55
|
+
// Indexed by (NDC.x, NDC.y, depth-slice). Stores per-voxel
|
|
56
|
+
// (in-scatter rgb, mean transmittance). Smaller tier on web/mobile
|
|
57
|
+
// keeps the per-frame compute under 1 ms on integrated GPUs.
|
|
58
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
59
|
+
pub const AERIAL_W: u32 = 16;
|
|
60
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
61
|
+
pub const AERIAL_H: u32 = 16;
|
|
62
|
+
#[cfg(any(target_arch = "wasm32", target_os = "ios", target_os = "android"))]
|
|
63
|
+
pub const AERIAL_D: u32 = 16;
|
|
64
|
+
|
|
65
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
66
|
+
pub const AERIAL_W: u32 = 32;
|
|
67
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
68
|
+
pub const AERIAL_H: u32 = 32;
|
|
69
|
+
#[cfg(not(any(target_arch = "wasm32", target_os = "ios", target_os = "android")))]
|
|
70
|
+
pub const AERIAL_D: u32 = 32;
|
|
71
|
+
|
|
72
|
+
/// Maximum view-space distance the aerial-perspective LUT covers, in
|
|
73
|
+
/// kilometres. Beyond this the shader clamps to the deepest slice (which
|
|
74
|
+
/// has the longest accumulated path, so it's a sensible fallback for
|
|
75
|
+
/// truly distant geometry like skybox-far mountains).
|
|
76
|
+
pub const AERIAL_MAX_DIST_KM: f32 = 32.0;
|
|
77
|
+
|
|
78
|
+
// ----------------------------------------------------------------------------
|
|
79
|
+
// Earth-like atmosphere constants (Hillaire 2020, Bruneton-derived)
|
|
80
|
+
// All distances in kilometres; coefficients in 1/km.
|
|
81
|
+
// ----------------------------------------------------------------------------
|
|
82
|
+
|
|
83
|
+
const GROUND_RADIUS: f32 = 6360.0;
|
|
84
|
+
const ATMOSPHERE_TOP: f32 = 6460.0;
|
|
85
|
+
const ATMOSPHERE_THICKNESS: f32 = ATMOSPHERE_TOP - GROUND_RADIUS;
|
|
86
|
+
|
|
87
|
+
const RAYLEIGH_SCALE_HEIGHT: f32 = 8.0;
|
|
88
|
+
const MIE_SCALE_HEIGHT: f32 = 1.2;
|
|
89
|
+
|
|
90
|
+
// Rayleigh scattering = extinction (no absorption).
|
|
91
|
+
const RAYLEIGH_SCATTERING: [f32; 3] = [5.802e-3, 13.558e-3, 33.100e-3];
|
|
92
|
+
|
|
93
|
+
// Mie is dust/aerosol — small absorption beyond scattering.
|
|
94
|
+
const MIE_SCATTERING: f32 = 3.996e-3;
|
|
95
|
+
const MIE_EXTINCTION: f32 = 4.440e-3;
|
|
96
|
+
|
|
97
|
+
// Ozone — triangular density profile peaked at 25 km, half-width 15 km.
|
|
98
|
+
// Pure absorption, no scattering. Tints sunsets blue at high zenith.
|
|
99
|
+
const OZONE_ABSORPTION: [f32; 3] = [0.650e-3, 1.881e-3, 0.085e-3];
|
|
100
|
+
const OZONE_PEAK_ALTITUDE: f32 = 25.0;
|
|
101
|
+
const OZONE_HALF_WIDTH: f32 = 15.0;
|
|
102
|
+
|
|
103
|
+
const TRANSMITTANCE_STEPS: u32 = 40;
|
|
104
|
+
const MULTI_SCATTERING_SQRT_SAMPLES: u32 = 8; // 64 sphere directions per texel
|
|
105
|
+
|
|
106
|
+
// ----------------------------------------------------------------------------
|
|
107
|
+
// Density profiles
|
|
108
|
+
// ----------------------------------------------------------------------------
|
|
109
|
+
|
|
110
|
+
#[inline]
|
|
111
|
+
fn rayleigh_density(altitude_km: f32) -> f32 {
|
|
112
|
+
(-altitude_km / RAYLEIGH_SCALE_HEIGHT).exp()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
#[inline]
|
|
116
|
+
fn mie_density(altitude_km: f32) -> f32 {
|
|
117
|
+
(-altitude_km / MIE_SCALE_HEIGHT).exp()
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
#[inline]
|
|
121
|
+
fn ozone_density(altitude_km: f32) -> f32 {
|
|
122
|
+
(1.0 - (altitude_km - OZONE_PEAK_ALTITUDE).abs() / OZONE_HALF_WIDTH).max(0.0)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Combined extinction at altitude (per channel, per km).
|
|
126
|
+
fn extinction(altitude_km: f32) -> [f32; 3] {
|
|
127
|
+
let r_d = rayleigh_density(altitude_km);
|
|
128
|
+
let m_d = mie_density(altitude_km);
|
|
129
|
+
let o_d = ozone_density(altitude_km);
|
|
130
|
+
[
|
|
131
|
+
RAYLEIGH_SCATTERING[0] * r_d + MIE_EXTINCTION * m_d + OZONE_ABSORPTION[0] * o_d,
|
|
132
|
+
RAYLEIGH_SCATTERING[1] * r_d + MIE_EXTINCTION * m_d + OZONE_ABSORPTION[1] * o_d,
|
|
133
|
+
RAYLEIGH_SCATTERING[2] * r_d + MIE_EXTINCTION * m_d + OZONE_ABSORPTION[2] * o_d,
|
|
134
|
+
]
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ----------------------------------------------------------------------------
|
|
138
|
+
// Ray-sphere intersection — distance from point at radius `r` with
|
|
139
|
+
// zenith cosine `mu` to either the atmosphere top or the planet ground.
|
|
140
|
+
// Returns None if the ray doesn't hit the target sphere.
|
|
141
|
+
// ----------------------------------------------------------------------------
|
|
142
|
+
|
|
143
|
+
fn ray_sphere_intersect(r: f32, mu: f32, sphere_radius: f32) -> Option<f32> {
|
|
144
|
+
let discriminant = r * r * (mu * mu - 1.0) + sphere_radius * sphere_radius;
|
|
145
|
+
if discriminant < 0.0 {
|
|
146
|
+
return None;
|
|
147
|
+
}
|
|
148
|
+
let sqrt_d = discriminant.sqrt();
|
|
149
|
+
let t1 = -r * mu - sqrt_d;
|
|
150
|
+
let t2 = -r * mu + sqrt_d;
|
|
151
|
+
// We want the first positive intersection ahead of us.
|
|
152
|
+
if t1 > 0.0 {
|
|
153
|
+
Some(t1)
|
|
154
|
+
} else if t2 > 0.0 {
|
|
155
|
+
Some(t2)
|
|
156
|
+
} else {
|
|
157
|
+
None
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// Distance from `(r, mu)` to whichever boundary the ray hits first.
|
|
162
|
+
/// If the ray hits the ground, returns the ground distance — caller
|
|
163
|
+
/// will see zero transmittance through opaque earth.
|
|
164
|
+
fn distance_to_boundary(r: f32, mu: f32) -> f32 {
|
|
165
|
+
let to_top = ray_sphere_intersect(r, mu, ATMOSPHERE_TOP);
|
|
166
|
+
let to_ground = ray_sphere_intersect(r, mu, GROUND_RADIUS);
|
|
167
|
+
match (to_top, to_ground) {
|
|
168
|
+
(Some(t), Some(g)) => t.min(g),
|
|
169
|
+
(Some(t), None) => t,
|
|
170
|
+
(None, Some(g)) => g,
|
|
171
|
+
(None, None) => 0.0,
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// ----------------------------------------------------------------------------
|
|
176
|
+
// Transmittance LUT
|
|
177
|
+
// ----------------------------------------------------------------------------
|
|
178
|
+
|
|
179
|
+
/// LUT parameterization (V1, simple linear):
|
|
180
|
+
/// u = (μ + 1) / 2 — view-zenith cosine in [-1, 1] linearly mapped to texel
|
|
181
|
+
/// v = (r - rg) / (rt - rg) — altitude fraction
|
|
182
|
+
fn transmittance_uv_to_state(u: f32, v: f32) -> (f32, f32) {
|
|
183
|
+
let r = GROUND_RADIUS + v * ATMOSPHERE_THICKNESS;
|
|
184
|
+
let mu = (u * 2.0 - 1.0).clamp(-1.0, 1.0);
|
|
185
|
+
(r, mu)
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/// Optical depth from `(r, mu)` along its ray to the atmosphere top
|
|
189
|
+
/// (or ground, whichever it hits first), per channel.
|
|
190
|
+
fn compute_optical_depth(r: f32, mu: f32) -> [f32; 3] {
|
|
191
|
+
let total_dist = distance_to_boundary(r, mu);
|
|
192
|
+
if total_dist <= 0.0 {
|
|
193
|
+
return [0.0; 3];
|
|
194
|
+
}
|
|
195
|
+
let dx = total_dist / TRANSMITTANCE_STEPS as f32;
|
|
196
|
+
let mut sum = [0.0_f32; 3];
|
|
197
|
+
// Trapezoidal rule — sample at midpoints of each segment.
|
|
198
|
+
for i in 0..TRANSMITTANCE_STEPS {
|
|
199
|
+
let d = (i as f32 + 0.5) * dx;
|
|
200
|
+
// Radius at distance d along the ray.
|
|
201
|
+
let r_d = (r * r + d * d + 2.0 * r * mu * d).sqrt();
|
|
202
|
+
let altitude = (r_d - GROUND_RADIUS).max(0.0);
|
|
203
|
+
let e = extinction(altitude);
|
|
204
|
+
sum[0] += e[0] * dx;
|
|
205
|
+
sum[1] += e[1] * dx;
|
|
206
|
+
sum[2] += e[2] * dx;
|
|
207
|
+
}
|
|
208
|
+
sum
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
fn build_transmittance_row(y: u32, w: u32, h: u32) -> Vec<u16> {
|
|
212
|
+
let v = (y as f32 + 0.5) / h as f32;
|
|
213
|
+
let mut row = Vec::with_capacity(w as usize * 4);
|
|
214
|
+
for x in 0..w {
|
|
215
|
+
let u = (x as f32 + 0.5) / w as f32;
|
|
216
|
+
let (r, mu) = transmittance_uv_to_state(u, v);
|
|
217
|
+
let tau = compute_optical_depth(r, mu);
|
|
218
|
+
let t = [(-tau[0]).exp(), (-tau[1]).exp(), (-tau[2]).exp()];
|
|
219
|
+
row.push(f16::from_f32(t[0]).to_bits());
|
|
220
|
+
row.push(f16::from_f32(t[1]).to_bits());
|
|
221
|
+
row.push(f16::from_f32(t[2]).to_bits());
|
|
222
|
+
row.push(f16::from_f32(1.0).to_bits()); // alpha unused
|
|
223
|
+
}
|
|
224
|
+
row
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Build the transmittance LUT as `Rgba16Float` texels, row-major,
|
|
228
|
+
/// suitable for `queue.write_texture`. Each texel stores per-channel
|
|
229
|
+
/// transmittance; alpha is unused (set to 1).
|
|
230
|
+
pub fn build_transmittance_lut(w: u32, h: u32) -> Vec<u16> {
|
|
231
|
+
#[cfg(not(target_arch = "wasm32"))]
|
|
232
|
+
{
|
|
233
|
+
let nthreads = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(4);
|
|
234
|
+
let rows_per_thread = (h as usize + nthreads - 1) / nthreads;
|
|
235
|
+
let mut all_rows: Vec<Option<Vec<Vec<u16>>>> = (0..nthreads).map(|_| None).collect();
|
|
236
|
+
std::thread::scope(|s| {
|
|
237
|
+
let mut handles = Vec::with_capacity(nthreads);
|
|
238
|
+
for t in 0..nthreads {
|
|
239
|
+
let y_start = (t * rows_per_thread) as u32;
|
|
240
|
+
let y_end = (((t + 1) * rows_per_thread).min(h as usize)) as u32;
|
|
241
|
+
let h_handle = s.spawn(move || {
|
|
242
|
+
(y_start..y_end)
|
|
243
|
+
.map(|y| build_transmittance_row(y, w, h))
|
|
244
|
+
.collect::<Vec<_>>()
|
|
245
|
+
});
|
|
246
|
+
handles.push(h_handle);
|
|
247
|
+
}
|
|
248
|
+
for (t, handle) in handles.into_iter().enumerate() {
|
|
249
|
+
all_rows[t] = Some(handle.join().unwrap());
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
all_rows.into_iter().flatten().flatten().flatten().collect()
|
|
253
|
+
}
|
|
254
|
+
#[cfg(target_arch = "wasm32")]
|
|
255
|
+
{
|
|
256
|
+
(0..h).flat_map(|y| build_transmittance_row(y, w, h)).collect()
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/// Sample the transmittance LUT bilinearly. Returns linear RGB
|
|
261
|
+
/// transmittance ∈ [0, 1]³. Used by tests and Phase 3 (sun-shaft +
|
|
262
|
+
/// directional-light coloring).
|
|
263
|
+
pub fn sample_transmittance_lut(lut: &[u16], w: u32, h: u32, r: f32, mu: f32) -> [f32; 3] {
|
|
264
|
+
let v = ((r - GROUND_RADIUS) / ATMOSPHERE_THICKNESS).clamp(0.0, 1.0);
|
|
265
|
+
let u = ((mu + 1.0) * 0.5).clamp(0.0, 1.0);
|
|
266
|
+
let fx = u * w as f32 - 0.5;
|
|
267
|
+
let fy = v * h as f32 - 0.5;
|
|
268
|
+
let x0 = (fx.floor() as i32).clamp(0, w as i32 - 1) as u32;
|
|
269
|
+
let y0 = (fy.floor() as i32).clamp(0, h as i32 - 1) as u32;
|
|
270
|
+
let x1 = (x0 + 1).min(w - 1);
|
|
271
|
+
let y1 = (y0 + 1).min(h - 1);
|
|
272
|
+
let tx = (fx - x0 as f32).clamp(0.0, 1.0);
|
|
273
|
+
let ty = (fy - y0 as f32).clamp(0.0, 1.0);
|
|
274
|
+
let fetch = |x: u32, y: u32| -> [f32; 3] {
|
|
275
|
+
let base = ((y * w + x) * 4) as usize;
|
|
276
|
+
[
|
|
277
|
+
f16::from_bits(lut[base]).to_f32(),
|
|
278
|
+
f16::from_bits(lut[base + 1]).to_f32(),
|
|
279
|
+
f16::from_bits(lut[base + 2]).to_f32(),
|
|
280
|
+
]
|
|
281
|
+
};
|
|
282
|
+
let c00 = fetch(x0, y0);
|
|
283
|
+
let c10 = fetch(x1, y0);
|
|
284
|
+
let c01 = fetch(x0, y1);
|
|
285
|
+
let c11 = fetch(x1, y1);
|
|
286
|
+
let lerp = |a: f32, b: f32, t: f32| a + (b - a) * t;
|
|
287
|
+
let lerp3 = |a: [f32; 3], b: [f32; 3], t: f32| {
|
|
288
|
+
[lerp(a[0], b[0], t), lerp(a[1], b[1], t), lerp(a[2], b[2], t)]
|
|
289
|
+
};
|
|
290
|
+
let bottom = lerp3(c00, c10, tx);
|
|
291
|
+
let top = lerp3(c01, c11, tx);
|
|
292
|
+
lerp3(bottom, top, ty)
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
// ----------------------------------------------------------------------------
|
|
296
|
+
// Multi-scattering LUT
|
|
297
|
+
// ----------------------------------------------------------------------------
|
|
298
|
+
//
|
|
299
|
+
// Hillaire's "F_ms" energy-conserving multi-scattering term. For each
|
|
300
|
+
// (μ_s, altitude) texel: place point P at that altitude with the sun
|
|
301
|
+
// at zenith cosine μ_s. Integrate over the unit sphere — for each
|
|
302
|
+
// sphere direction, ray-march and accumulate the single-scattering
|
|
303
|
+
// that would arrive along it from the sun. The integrated isotropic
|
|
304
|
+
// in-scattered light gives ψ_ms, which the per-frame sky-view LUT
|
|
305
|
+
// uses to add the multi-bounce contribution analytically.
|
|
306
|
+
//
|
|
307
|
+
// We use the Hillaire 2020 closed-form: integrate L_2 (single-
|
|
308
|
+
// scattered light hitting P from all sphere directions) and F_ms
|
|
309
|
+
// (the fraction of energy scattered back into each direction), then
|
|
310
|
+
// the total multi-scattering is L_2 / (1 - F_ms) — geometric series
|
|
311
|
+
// for infinite bounces under the isotropic-phase approximation.
|
|
312
|
+
|
|
313
|
+
fn ms_uv_to_state(u: f32, v: f32) -> (f32, f32) {
|
|
314
|
+
// u: μ_s ∈ [-1, 1] linear (sun zenith cosine)
|
|
315
|
+
// v: altitude fraction
|
|
316
|
+
let mu_s = (u * 2.0 - 1.0).clamp(-1.0, 1.0);
|
|
317
|
+
let r = GROUND_RADIUS + v * ATMOSPHERE_THICKNESS;
|
|
318
|
+
(r, mu_s)
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
fn scattering_at(altitude_km: f32) -> ([f32; 3], f32) {
|
|
322
|
+
// Returns (rayleigh_scattering, mie_scattering) coefficients at altitude.
|
|
323
|
+
let r_d = rayleigh_density(altitude_km);
|
|
324
|
+
let m_d = mie_density(altitude_km);
|
|
325
|
+
(
|
|
326
|
+
[
|
|
327
|
+
RAYLEIGH_SCATTERING[0] * r_d,
|
|
328
|
+
RAYLEIGH_SCATTERING[1] * r_d,
|
|
329
|
+
RAYLEIGH_SCATTERING[2] * r_d,
|
|
330
|
+
],
|
|
331
|
+
MIE_SCATTERING * m_d,
|
|
332
|
+
)
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/// March from `(r, mu)` toward the boundary, accumulating single-
|
|
336
|
+
/// scattered radiance from a sun at zenith cosine `mu_s`. Uses the
|
|
337
|
+
/// LUT (already-baked transmittance) for the sun-to-point path.
|
|
338
|
+
fn integrate_single_scatter_along_ray(
|
|
339
|
+
transmittance_lut: &[u16],
|
|
340
|
+
tw: u32,
|
|
341
|
+
th: u32,
|
|
342
|
+
r: f32,
|
|
343
|
+
mu: f32,
|
|
344
|
+
mu_s: f32,
|
|
345
|
+
nu: f32, // cos(angle between view ray and sun direction) — for phase
|
|
346
|
+
steps: u32,
|
|
347
|
+
) -> ([f32; 3], [f32; 3]) {
|
|
348
|
+
// Returns (L_2_contribution, F_ms_contribution) — both per-channel.
|
|
349
|
+
let total_dist = distance_to_boundary(r, mu);
|
|
350
|
+
if total_dist <= 0.0 {
|
|
351
|
+
return ([0.0; 3], [0.0; 3]);
|
|
352
|
+
}
|
|
353
|
+
let dx = total_dist / steps as f32;
|
|
354
|
+
let mut l_sum = [0.0_f32; 3];
|
|
355
|
+
let mut f_sum = [0.0_f32; 3];
|
|
356
|
+
let mut tau = [0.0_f32; 3]; // running optical depth from (r, mu) origin
|
|
357
|
+
for i in 0..steps {
|
|
358
|
+
let d = (i as f32 + 0.5) * dx;
|
|
359
|
+
let r_d = (r * r + d * d + 2.0 * r * mu * d).sqrt();
|
|
360
|
+
let altitude = (r_d - GROUND_RADIUS).max(0.0);
|
|
361
|
+
let e = extinction(altitude);
|
|
362
|
+
tau[0] += e[0] * dx;
|
|
363
|
+
tau[1] += e[1] * dx;
|
|
364
|
+
tau[2] += e[2] * dx;
|
|
365
|
+
let t_origin = [(-tau[0]).exp(), (-tau[1]).exp(), (-tau[2]).exp()];
|
|
366
|
+
|
|
367
|
+
// μ_s as seen from the new sample point (assuming sun direction stays fixed in
|
|
368
|
+
// world frame — to first order this is a good approximation since the atmosphere
|
|
369
|
+
// is thin compared to the planet radius).
|
|
370
|
+
let mu_s_at_p = ((r * mu_s + d * nu) / r_d).clamp(-1.0, 1.0);
|
|
371
|
+
let t_sun = sample_transmittance_lut(transmittance_lut, tw, th, r_d, mu_s_at_p);
|
|
372
|
+
|
|
373
|
+
let (sigma_r, sigma_m) = scattering_at(altitude);
|
|
374
|
+
// Isotropic phase = 1/(4π) — Hillaire's approximation for the multi-
|
|
375
|
+
// scattering bake. Folded into the L_2 / (1 - F_ms) formula at lookup time.
|
|
376
|
+
for ch in 0..3 {
|
|
377
|
+
let scattering = sigma_r[ch] + sigma_m;
|
|
378
|
+
l_sum[ch] += t_origin[ch] * t_sun[ch] * scattering * dx;
|
|
379
|
+
f_sum[ch] += t_origin[ch] * scattering * dx;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
(l_sum, f_sum)
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
fn build_multi_scattering_row(transmittance_lut: &[u16], tw: u32, th: u32, y: u32, size: u32) -> Vec<u16> {
|
|
386
|
+
let v = (y as f32 + 0.5) / size as f32;
|
|
387
|
+
let mut row = Vec::with_capacity(size as usize * 4);
|
|
388
|
+
let n_dirs = MULTI_SCATTERING_SQRT_SAMPLES;
|
|
389
|
+
let inv_n = 1.0 / (n_dirs * n_dirs) as f32;
|
|
390
|
+
for x in 0..size {
|
|
391
|
+
let u = (x as f32 + 0.5) / size as f32;
|
|
392
|
+
let (r, mu_s) = ms_uv_to_state(u, v);
|
|
393
|
+
|
|
394
|
+
let mut l_total = [0.0_f32; 3];
|
|
395
|
+
let mut f_total = [0.0_f32; 3];
|
|
396
|
+
// Spherical Fibonacci-like distribution over the unit sphere (n_dirs²
|
|
397
|
+
// samples). For each direction, integrate single-scattered radiance
|
|
398
|
+
// along that direction; accumulate L_2 and F_ms per channel.
|
|
399
|
+
for i in 0..n_dirs {
|
|
400
|
+
for j in 0..n_dirs {
|
|
401
|
+
let theta = std::f32::consts::PI * (i as f32 + 0.5) / n_dirs as f32;
|
|
402
|
+
let phi = 2.0 * std::f32::consts::PI * (j as f32 + 0.5) / n_dirs as f32;
|
|
403
|
+
let cos_theta = theta.cos();
|
|
404
|
+
let sin_theta = theta.sin();
|
|
405
|
+
// Direction in a frame where sun = (sin_su, 0, cos_su).
|
|
406
|
+
let sin_su = (1.0 - mu_s * mu_s).max(0.0).sqrt();
|
|
407
|
+
let dir = [sin_theta * phi.cos(), sin_theta * phi.sin(), cos_theta];
|
|
408
|
+
let mu = dir[2];
|
|
409
|
+
let nu = dir[0] * sin_su + dir[2] * mu_s;
|
|
410
|
+
let (l, f) = integrate_single_scatter_along_ray(
|
|
411
|
+
transmittance_lut,
|
|
412
|
+
tw,
|
|
413
|
+
th,
|
|
414
|
+
r,
|
|
415
|
+
mu,
|
|
416
|
+
mu_s,
|
|
417
|
+
nu,
|
|
418
|
+
20,
|
|
419
|
+
);
|
|
420
|
+
// Solid angle element sin(θ) dθ dφ; uniform sampling already.
|
|
421
|
+
let weight = sin_theta * inv_n * std::f32::consts::PI; // ∫sinθdθ over [0,π] = 2; π/n_dirs² normalises
|
|
422
|
+
for ch in 0..3 {
|
|
423
|
+
l_total[ch] += l[ch] * weight;
|
|
424
|
+
f_total[ch] += f[ch] * weight;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// Geometric series: total multi-scattering = L_2 / (1 - F_ms),
|
|
429
|
+
// clamped to avoid runaway when F_ms approaches 1 (deep
|
|
430
|
+
// atmosphere paths).
|
|
431
|
+
let mut psi_ms = [0.0_f32; 3];
|
|
432
|
+
for ch in 0..3 {
|
|
433
|
+
let denom = (1.0 - f_total[ch]).max(0.05);
|
|
434
|
+
psi_ms[ch] = (l_total[ch] / denom).max(0.0);
|
|
435
|
+
}
|
|
436
|
+
row.push(f16::from_f32(psi_ms[0]).to_bits());
|
|
437
|
+
row.push(f16::from_f32(psi_ms[1]).to_bits());
|
|
438
|
+
row.push(f16::from_f32(psi_ms[2]).to_bits());
|
|
439
|
+
row.push(f16::from_f32(1.0).to_bits());
|
|
440
|
+
}
|
|
441
|
+
row
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
/// Build the multi-scattering LUT as `Rgba16Float` texels, row-major.
|
|
445
|
+
/// Requires the transmittance LUT (must be built first); samples it
|
|
446
|
+
/// internally to get the sun-to-point transmittance for each integration step.
|
|
447
|
+
pub fn build_multi_scattering_lut(transmittance_lut: &[u16], tw: u32, th: u32, size: u32) -> Vec<u16> {
|
|
448
|
+
#[cfg(not(target_arch = "wasm32"))]
|
|
449
|
+
{
|
|
450
|
+
let nthreads = std::thread::available_parallelism().map(|n| n.get()).unwrap_or(4);
|
|
451
|
+
let rows_per_thread = (size as usize + nthreads - 1) / nthreads;
|
|
452
|
+
let mut all_rows: Vec<Option<Vec<Vec<u16>>>> = (0..nthreads).map(|_| None).collect();
|
|
453
|
+
std::thread::scope(|s| {
|
|
454
|
+
let mut handles = Vec::with_capacity(nthreads);
|
|
455
|
+
for t in 0..nthreads {
|
|
456
|
+
let y_start = (t * rows_per_thread) as u32;
|
|
457
|
+
let y_end = (((t + 1) * rows_per_thread).min(size as usize)) as u32;
|
|
458
|
+
let lut_ref = transmittance_lut;
|
|
459
|
+
let h_handle = s.spawn(move || {
|
|
460
|
+
(y_start..y_end)
|
|
461
|
+
.map(|y| build_multi_scattering_row(lut_ref, tw, th, y, size))
|
|
462
|
+
.collect::<Vec<_>>()
|
|
463
|
+
});
|
|
464
|
+
handles.push(h_handle);
|
|
465
|
+
}
|
|
466
|
+
for (t, handle) in handles.into_iter().enumerate() {
|
|
467
|
+
all_rows[t] = Some(handle.join().unwrap());
|
|
468
|
+
}
|
|
469
|
+
});
|
|
470
|
+
all_rows.into_iter().flatten().flatten().flatten().collect()
|
|
471
|
+
}
|
|
472
|
+
#[cfg(target_arch = "wasm32")]
|
|
473
|
+
{
|
|
474
|
+
(0..size)
|
|
475
|
+
.flat_map(|y| build_multi_scattering_row(transmittance_lut, tw, th, y, size))
|
|
476
|
+
.collect()
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
// ----------------------------------------------------------------------------
|
|
481
|
+
// Tests
|
|
482
|
+
// ----------------------------------------------------------------------------
|
|
483
|
+
|
|
484
|
+
#[cfg(test)]
|
|
485
|
+
mod tests {
|
|
486
|
+
use super::*;
|
|
487
|
+
|
|
488
|
+
fn lerp_lut_at(lut: &[u16], w: u32, h: u32, r: f32, mu: f32) -> [f32; 3] {
|
|
489
|
+
sample_transmittance_lut(lut, w, h, r, mu)
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
#[test]
|
|
493
|
+
fn transmittance_zenith_sea_level_matches_hillaire_reference() {
|
|
494
|
+
// Reference values derived analytically from Earth atmosphere
|
|
495
|
+
// constants (Rayleigh + Mie + ozone) at sea level looking up:
|
|
496
|
+
// τ_R ≈ scattering × scale_height (zenith path)
|
|
497
|
+
// τ_M ≈ extinction × scale_height
|
|
498
|
+
// τ_O ≈ absorption × half_width
|
|
499
|
+
// Per channel transmittance T = exp(-τ_total). Typical values
|
|
500
|
+
// are ~(0.94, 0.87, 0.76) — atmosphere is more transparent
|
|
501
|
+
// to red than blue, which is why the sky is blue.
|
|
502
|
+
let w = TRANSMITTANCE_W;
|
|
503
|
+
let h = TRANSMITTANCE_H;
|
|
504
|
+
let lut = build_transmittance_lut(w, h);
|
|
505
|
+
let t = lerp_lut_at(&lut, w, h, GROUND_RADIUS, 1.0);
|
|
506
|
+
// Loose tolerance — exact values depend on integration step
|
|
507
|
+
// count, ozone profile shape, and bilinear bias near the edge.
|
|
508
|
+
assert!((t[0] - 0.94).abs() < 0.05, "R channel: got {}, expected ~0.94", t[0]);
|
|
509
|
+
assert!((t[1] - 0.87).abs() < 0.05, "G channel: got {}, expected ~0.87", t[1]);
|
|
510
|
+
assert!((t[2] - 0.76).abs() < 0.05, "B channel: got {}, expected ~0.76", t[2]);
|
|
511
|
+
// R > G > B — Rayleigh scattering scales with 1/λ⁴.
|
|
512
|
+
assert!(t[0] > t[1] && t[1] > t[2], "expected R > G > B, got {:?}", t);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
#[test]
|
|
516
|
+
fn transmittance_decreases_toward_horizon() {
|
|
517
|
+
// At sea level, transmittance must monotonically drop as we
|
|
518
|
+
// tilt from zenith (μ=1) down toward grazing (μ→0): longer
|
|
519
|
+
// path through atmosphere = more extinction.
|
|
520
|
+
let w = TRANSMITTANCE_W;
|
|
521
|
+
let h = TRANSMITTANCE_H;
|
|
522
|
+
let lut = build_transmittance_lut(w, h);
|
|
523
|
+
let mu_samples = [1.0_f32, 0.8, 0.5, 0.3, 0.1];
|
|
524
|
+
let mut prev = f32::INFINITY;
|
|
525
|
+
for &mu in &mu_samples {
|
|
526
|
+
let t = lerp_lut_at(&lut, w, h, GROUND_RADIUS, mu);
|
|
527
|
+
// Use green channel as representative.
|
|
528
|
+
assert!(
|
|
529
|
+
t[1] < prev,
|
|
530
|
+
"transmittance not decreasing: μ={} t.g={} (prev {})",
|
|
531
|
+
mu,
|
|
532
|
+
t[1],
|
|
533
|
+
prev
|
|
534
|
+
);
|
|
535
|
+
prev = t[1];
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
#[test]
|
|
540
|
+
fn transmittance_grazing_horizon_substantially_attenuated() {
|
|
541
|
+
// A grazing ray near the horizon traverses the longest path
|
|
542
|
+
// through the densest atmosphere — blue should drop hard
|
|
543
|
+
// (Rayleigh ~λ⁻⁴ over a long path), red survives more. This
|
|
544
|
+
// is what makes sunrises and sunsets red: the sun's blue is
|
|
545
|
+
// scattered out before it reaches the eye.
|
|
546
|
+
let w = TRANSMITTANCE_W;
|
|
547
|
+
let h = TRANSMITTANCE_H;
|
|
548
|
+
let lut = build_transmittance_lut(w, h);
|
|
549
|
+
let t = lerp_lut_at(&lut, w, h, GROUND_RADIUS, 0.05);
|
|
550
|
+
assert!(t[2] < 0.2, "blue should be heavily attenuated at horizon, got {}", t[2]);
|
|
551
|
+
assert!(t[0] > t[1] && t[1] > t[2], "horizon transmittance should still preserve R>G>B ordering, got {:?}", t);
|
|
552
|
+
assert!(t[0] - t[2] > 0.2, "expected strong red/blue separation at horizon, got R-B={}", t[0] - t[2]);
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
#[test]
|
|
556
|
+
fn multi_scattering_non_negative_and_finite() {
|
|
557
|
+
// Multi-scattering is energy added on top of single-scattering;
|
|
558
|
+
// it must be ≥ 0 everywhere and finite (the F_ms denominator
|
|
559
|
+
// clamp guards against blow-up).
|
|
560
|
+
let tw = TRANSMITTANCE_W;
|
|
561
|
+
let th = TRANSMITTANCE_H;
|
|
562
|
+
let t_lut = build_transmittance_lut(tw, th);
|
|
563
|
+
let ms = build_multi_scattering_lut(&t_lut, tw, th, MULTI_SCATTERING_SIZE);
|
|
564
|
+
assert_eq!(ms.len() as u32, MULTI_SCATTERING_SIZE * MULTI_SCATTERING_SIZE * 4);
|
|
565
|
+
for chunk in ms.chunks(4) {
|
|
566
|
+
for &bits in &chunk[..3] {
|
|
567
|
+
let v = f16::from_bits(bits).to_f32();
|
|
568
|
+
assert!(v.is_finite(), "non-finite multi-scattering value");
|
|
569
|
+
assert!(v >= 0.0, "negative multi-scattering value: {}", v);
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
}
|