@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.
Files changed (562) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +169 -0
  3. package/native/android/Cargo.lock +1848 -0
  4. package/native/android/Cargo.toml +20 -0
  5. package/native/android/src/lib.rs +1747 -0
  6. package/native/ios/Cargo.lock +1688 -0
  7. package/native/ios/Cargo.toml +19 -0
  8. package/native/ios/src/lib.rs +2258 -0
  9. package/native/linux/Cargo.lock +1719 -0
  10. package/native/linux/Cargo.toml +22 -0
  11. package/native/linux/src/lib.rs +2236 -0
  12. package/native/macos/Cargo.lock +3310 -0
  13. package/native/macos/Cargo.toml +29 -0
  14. package/native/macos/src/lib.rs +3444 -0
  15. package/native/shared/Cargo.lock +1898 -0
  16. package/native/shared/Cargo.toml +42 -0
  17. package/native/shared/assets/default_font.ttf +0 -0
  18. package/native/shared/build.rs +77 -0
  19. package/native/shared/shaders/common/fog.wgsl +16 -0
  20. package/native/shared/shaders/common/imposter.wgsl +112 -0
  21. package/native/shared/shaders/common/pbr.wgsl +186 -0
  22. package/native/shared/shaders/common/shadows.wgsl +77 -0
  23. package/native/shared/shaders/common/sky.wgsl +8 -0
  24. package/native/shared/shaders/common/tonemap.wgsl +25 -0
  25. package/native/shared/shaders/impulse_field.wgsl +53 -0
  26. package/native/shared/shaders/material_abi.wgsl +360 -0
  27. package/native/shared/shaders/materials/test_minimal.wgsl +42 -0
  28. package/native/shared/src/audio.rs +363 -0
  29. package/native/shared/src/custom_shaders.rs +104 -0
  30. package/native/shared/src/drs.rs +211 -0
  31. package/native/shared/src/engine.rs +186 -0
  32. package/native/shared/src/frame_callbacks.rs +88 -0
  33. package/native/shared/src/geometry.rs +236 -0
  34. package/native/shared/src/handles.rs +76 -0
  35. package/native/shared/src/input.rs +273 -0
  36. package/native/shared/src/jolt_sys.rs +822 -0
  37. package/native/shared/src/lib.rs +43 -0
  38. package/native/shared/src/models.rs +1941 -0
  39. package/native/shared/src/physics_jolt.rs +1528 -0
  40. package/native/shared/src/picking.rs +298 -0
  41. package/native/shared/src/postfx.rs +339 -0
  42. package/native/shared/src/profiler.rs +416 -0
  43. package/native/shared/src/renderer/atmosphere_lut.rs +573 -0
  44. package/native/shared/src/renderer/brdf_lut.rs +154 -0
  45. package/native/shared/src/renderer/formats.rs +778 -0
  46. package/native/shared/src/renderer/graph.rs +465 -0
  47. package/native/shared/src/renderer/hot_reload.rs +390 -0
  48. package/native/shared/src/renderer/impulse_field.rs +455 -0
  49. package/native/shared/src/renderer/material_pipeline.rs +604 -0
  50. package/native/shared/src/renderer/material_system.rs +2106 -0
  51. package/native/shared/src/renderer/mod.rs +13923 -0
  52. package/native/shared/src/renderer/planar_reflection.rs +458 -0
  53. package/native/shared/src/renderer/post_pass.rs +249 -0
  54. package/native/shared/src/renderer/shader_include.rs +205 -0
  55. package/native/shared/src/renderer/shader_library.rs +134 -0
  56. package/native/shared/src/renderer/shaders.rs +5855 -0
  57. package/native/shared/src/renderer/transient.rs +576 -0
  58. package/native/shared/src/renderer/types.rs +259 -0
  59. package/native/shared/src/renderer/util.rs +151 -0
  60. package/native/shared/src/scene.rs +1066 -0
  61. package/native/shared/src/sdf_cache.rs +274 -0
  62. package/native/shared/src/shadows.rs +551 -0
  63. package/native/shared/src/staging.rs +90 -0
  64. package/native/shared/src/string_header.rs +35 -0
  65. package/native/shared/src/text_renderer.rs +456 -0
  66. package/native/shared/src/textures.rs +154 -0
  67. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.cpp +242 -0
  68. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeBuilder.h +121 -0
  69. package/native/third_party/JoltPhysics/Jolt/AABBTree/AABBTreeToBuffer.h +296 -0
  70. package/native/third_party/JoltPhysics/Jolt/AABBTree/NodeCodec/NodeCodecQuadTreeHalfFloat.h +323 -0
  71. package/native/third_party/JoltPhysics/Jolt/AABBTree/TriangleCodec/TriangleCodecIndexed8BitPackSOA4Flags.h +555 -0
  72. package/native/third_party/JoltPhysics/Jolt/ConfigurationString.h +112 -0
  73. package/native/third_party/JoltPhysics/Jolt/Core/ARMNeon.h +94 -0
  74. package/native/third_party/JoltPhysics/Jolt/Core/Array.h +713 -0
  75. package/native/third_party/JoltPhysics/Jolt/Core/Atomics.h +44 -0
  76. package/native/third_party/JoltPhysics/Jolt/Core/BinaryHeap.h +96 -0
  77. package/native/third_party/JoltPhysics/Jolt/Core/ByteBuffer.h +74 -0
  78. package/native/third_party/JoltPhysics/Jolt/Core/Color.cpp +38 -0
  79. package/native/third_party/JoltPhysics/Jolt/Core/Color.h +98 -0
  80. package/native/third_party/JoltPhysics/Jolt/Core/Core.h +652 -0
  81. package/native/third_party/JoltPhysics/Jolt/Core/FPControlWord.h +143 -0
  82. package/native/third_party/JoltPhysics/Jolt/Core/FPException.h +96 -0
  83. package/native/third_party/JoltPhysics/Jolt/Core/FPFlushDenormals.h +43 -0
  84. package/native/third_party/JoltPhysics/Jolt/Core/Factory.cpp +92 -0
  85. package/native/third_party/JoltPhysics/Jolt/Core/Factory.h +54 -0
  86. package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.h +122 -0
  87. package/native/third_party/JoltPhysics/Jolt/Core/FixedSizeFreeList.inl +215 -0
  88. package/native/third_party/JoltPhysics/Jolt/Core/HashCombine.h +234 -0
  89. package/native/third_party/JoltPhysics/Jolt/Core/HashTable.h +876 -0
  90. package/native/third_party/JoltPhysics/Jolt/Core/InsertionSort.h +58 -0
  91. package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.cpp +27 -0
  92. package/native/third_party/JoltPhysics/Jolt/Core/IssueReporting.h +38 -0
  93. package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.h +311 -0
  94. package/native/third_party/JoltPhysics/Jolt/Core/JobSystem.inl +56 -0
  95. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.cpp +65 -0
  96. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemSingleThreaded.h +62 -0
  97. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.cpp +364 -0
  98. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemThreadPool.h +101 -0
  99. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.cpp +230 -0
  100. package/native/third_party/JoltPhysics/Jolt/Core/JobSystemWithBarrier.h +85 -0
  101. package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.cpp +51 -0
  102. package/native/third_party/JoltPhysics/Jolt/Core/LinearCurve.h +67 -0
  103. package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.h +182 -0
  104. package/native/third_party/JoltPhysics/Jolt/Core/LockFreeHashMap.inl +351 -0
  105. package/native/third_party/JoltPhysics/Jolt/Core/Memory.cpp +85 -0
  106. package/native/third_party/JoltPhysics/Jolt/Core/Memory.h +85 -0
  107. package/native/third_party/JoltPhysics/Jolt/Core/Mutex.h +223 -0
  108. package/native/third_party/JoltPhysics/Jolt/Core/MutexArray.h +98 -0
  109. package/native/third_party/JoltPhysics/Jolt/Core/NonCopyable.h +18 -0
  110. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.cpp +677 -0
  111. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.h +301 -0
  112. package/native/third_party/JoltPhysics/Jolt/Core/Profiler.inl +90 -0
  113. package/native/third_party/JoltPhysics/Jolt/Core/QuickSort.h +137 -0
  114. package/native/third_party/JoltPhysics/Jolt/Core/RTTI.cpp +149 -0
  115. package/native/third_party/JoltPhysics/Jolt/Core/RTTI.h +436 -0
  116. package/native/third_party/JoltPhysics/Jolt/Core/Reference.h +244 -0
  117. package/native/third_party/JoltPhysics/Jolt/Core/Result.h +174 -0
  118. package/native/third_party/JoltPhysics/Jolt/Core/STLAlignedAllocator.h +72 -0
  119. package/native/third_party/JoltPhysics/Jolt/Core/STLAllocator.h +127 -0
  120. package/native/third_party/JoltPhysics/Jolt/Core/STLLocalAllocator.h +170 -0
  121. package/native/third_party/JoltPhysics/Jolt/Core/STLTempAllocator.h +80 -0
  122. package/native/third_party/JoltPhysics/Jolt/Core/ScopeExit.h +49 -0
  123. package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.cpp +135 -0
  124. package/native/third_party/JoltPhysics/Jolt/Core/Semaphore.h +68 -0
  125. package/native/third_party/JoltPhysics/Jolt/Core/StaticArray.h +329 -0
  126. package/native/third_party/JoltPhysics/Jolt/Core/StreamIn.h +120 -0
  127. package/native/third_party/JoltPhysics/Jolt/Core/StreamOut.h +97 -0
  128. package/native/third_party/JoltPhysics/Jolt/Core/StreamUtils.h +168 -0
  129. package/native/third_party/JoltPhysics/Jolt/Core/StreamWrapper.h +53 -0
  130. package/native/third_party/JoltPhysics/Jolt/Core/StridedPtr.h +63 -0
  131. package/native/third_party/JoltPhysics/Jolt/Core/StringTools.cpp +101 -0
  132. package/native/third_party/JoltPhysics/Jolt/Core/StringTools.h +38 -0
  133. package/native/third_party/JoltPhysics/Jolt/Core/TempAllocator.h +209 -0
  134. package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.cpp +37 -0
  135. package/native/third_party/JoltPhysics/Jolt/Core/TickCounter.h +58 -0
  136. package/native/third_party/JoltPhysics/Jolt/Core/UnorderedMap.h +80 -0
  137. package/native/third_party/JoltPhysics/Jolt/Core/UnorderedSet.h +32 -0
  138. package/native/third_party/JoltPhysics/Jolt/Geometry/AABox.h +313 -0
  139. package/native/third_party/JoltPhysics/Jolt/Geometry/AABox4.h +224 -0
  140. package/native/third_party/JoltPhysics/Jolt/Geometry/ClipPoly.h +200 -0
  141. package/native/third_party/JoltPhysics/Jolt/Geometry/ClosestPoint.h +498 -0
  142. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.cpp +1467 -0
  143. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder.h +276 -0
  144. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.cpp +335 -0
  145. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexHullBuilder2D.h +105 -0
  146. package/native/third_party/JoltPhysics/Jolt/Geometry/ConvexSupport.h +188 -0
  147. package/native/third_party/JoltPhysics/Jolt/Geometry/EPAConvexHullBuilder.h +845 -0
  148. package/native/third_party/JoltPhysics/Jolt/Geometry/EPAPenetrationDepth.h +557 -0
  149. package/native/third_party/JoltPhysics/Jolt/Geometry/Ellipse.h +77 -0
  150. package/native/third_party/JoltPhysics/Jolt/Geometry/GJKClosestPoint.h +945 -0
  151. package/native/third_party/JoltPhysics/Jolt/Geometry/IndexedTriangle.h +130 -0
  152. package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.cpp +222 -0
  153. package/native/third_party/JoltPhysics/Jolt/Geometry/Indexify.h +19 -0
  154. package/native/third_party/JoltPhysics/Jolt/Geometry/MortonCode.h +40 -0
  155. package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.cpp +178 -0
  156. package/native/third_party/JoltPhysics/Jolt/Geometry/OrientedBox.h +39 -0
  157. package/native/third_party/JoltPhysics/Jolt/Geometry/Plane.h +104 -0
  158. package/native/third_party/JoltPhysics/Jolt/Geometry/RayAABox.h +241 -0
  159. package/native/third_party/JoltPhysics/Jolt/Geometry/RayCapsule.h +37 -0
  160. package/native/third_party/JoltPhysics/Jolt/Geometry/RayCylinder.h +101 -0
  161. package/native/third_party/JoltPhysics/Jolt/Geometry/RaySphere.h +96 -0
  162. package/native/third_party/JoltPhysics/Jolt/Geometry/RayTriangle.h +158 -0
  163. package/native/third_party/JoltPhysics/Jolt/Geometry/Sphere.h +72 -0
  164. package/native/third_party/JoltPhysics/Jolt/Geometry/Triangle.h +34 -0
  165. package/native/third_party/JoltPhysics/Jolt/Jolt.cmake +703 -0
  166. package/native/third_party/JoltPhysics/Jolt/Jolt.h +16 -0
  167. package/native/third_party/JoltPhysics/Jolt/Jolt.natvis +116 -0
  168. package/native/third_party/JoltPhysics/Jolt/Math/BVec16.h +99 -0
  169. package/native/third_party/JoltPhysics/Jolt/Math/BVec16.inl +177 -0
  170. package/native/third_party/JoltPhysics/Jolt/Math/DMat44.h +158 -0
  171. package/native/third_party/JoltPhysics/Jolt/Math/DMat44.inl +310 -0
  172. package/native/third_party/JoltPhysics/Jolt/Math/DVec3.h +291 -0
  173. package/native/third_party/JoltPhysics/Jolt/Math/DVec3.inl +941 -0
  174. package/native/third_party/JoltPhysics/Jolt/Math/Double3.h +48 -0
  175. package/native/third_party/JoltPhysics/Jolt/Math/DynMatrix.h +31 -0
  176. package/native/third_party/JoltPhysics/Jolt/Math/EigenValueSymmetric.h +177 -0
  177. package/native/third_party/JoltPhysics/Jolt/Math/FindRoot.h +42 -0
  178. package/native/third_party/JoltPhysics/Jolt/Math/Float2.h +36 -0
  179. package/native/third_party/JoltPhysics/Jolt/Math/Float3.h +50 -0
  180. package/native/third_party/JoltPhysics/Jolt/Math/Float4.h +44 -0
  181. package/native/third_party/JoltPhysics/Jolt/Math/GaussianElimination.h +102 -0
  182. package/native/third_party/JoltPhysics/Jolt/Math/HalfFloat.h +208 -0
  183. package/native/third_party/JoltPhysics/Jolt/Math/Mat44.h +243 -0
  184. package/native/third_party/JoltPhysics/Jolt/Math/Mat44.inl +952 -0
  185. package/native/third_party/JoltPhysics/Jolt/Math/Math.h +208 -0
  186. package/native/third_party/JoltPhysics/Jolt/Math/MathTypes.h +32 -0
  187. package/native/third_party/JoltPhysics/Jolt/Math/Matrix.h +259 -0
  188. package/native/third_party/JoltPhysics/Jolt/Math/Quat.h +268 -0
  189. package/native/third_party/JoltPhysics/Jolt/Math/Quat.inl +406 -0
  190. package/native/third_party/JoltPhysics/Jolt/Math/Real.h +44 -0
  191. package/native/third_party/JoltPhysics/Jolt/Math/Swizzle.h +19 -0
  192. package/native/third_party/JoltPhysics/Jolt/Math/Trigonometry.h +79 -0
  193. package/native/third_party/JoltPhysics/Jolt/Math/UVec4.h +232 -0
  194. package/native/third_party/JoltPhysics/Jolt/Math/UVec4.inl +636 -0
  195. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.cpp +71 -0
  196. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.h +308 -0
  197. package/native/third_party/JoltPhysics/Jolt/Math/Vec3.inl +942 -0
  198. package/native/third_party/JoltPhysics/Jolt/Math/Vec4.h +320 -0
  199. package/native/third_party/JoltPhysics/Jolt/Math/Vec4.inl +1152 -0
  200. package/native/third_party/JoltPhysics/Jolt/Math/Vector.h +211 -0
  201. package/native/third_party/JoltPhysics/Jolt/ObjectStream/GetPrimitiveTypeOfType.h +54 -0
  202. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.cpp +38 -0
  203. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStream.h +337 -0
  204. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.cpp +252 -0
  205. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryIn.h +57 -0
  206. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.cpp +165 -0
  207. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamBinaryOut.h +57 -0
  208. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.cpp +635 -0
  209. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamIn.h +148 -0
  210. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.cpp +166 -0
  211. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamOut.h +101 -0
  212. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.cpp +418 -0
  213. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextIn.h +55 -0
  214. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.cpp +255 -0
  215. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTextOut.h +62 -0
  216. package/native/third_party/JoltPhysics/Jolt/ObjectStream/ObjectStreamTypes.h +26 -0
  217. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttribute.h +111 -0
  218. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeEnum.h +67 -0
  219. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableAttributeTyped.h +60 -0
  220. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.cpp +15 -0
  221. package/native/third_party/JoltPhysics/Jolt/ObjectStream/SerializableObject.h +170 -0
  222. package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.cpp +70 -0
  223. package/native/third_party/JoltPhysics/Jolt/ObjectStream/TypeDeclarations.h +45 -0
  224. package/native/third_party/JoltPhysics/Jolt/Physics/Body/AllowedDOFs.h +68 -0
  225. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.cpp +426 -0
  226. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.h +452 -0
  227. package/native/third_party/JoltPhysics/Jolt/Physics/Body/Body.inl +197 -0
  228. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyAccess.h +68 -0
  229. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyActivationListener.h +28 -0
  230. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.cpp +234 -0
  231. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyCreationSettings.h +124 -0
  232. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyFilter.h +130 -0
  233. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyID.h +101 -0
  234. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.cpp +1099 -0
  235. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyInterface.h +324 -0
  236. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLock.h +111 -0
  237. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockInterface.h +134 -0
  238. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyLockMulti.h +120 -0
  239. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.cpp +1220 -0
  240. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyManager.h +403 -0
  241. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyPair.h +36 -0
  242. package/native/third_party/JoltPhysics/Jolt/Physics/Body/BodyType.h +19 -0
  243. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.cpp +185 -0
  244. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MassProperties.h +58 -0
  245. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.cpp +92 -0
  246. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.h +308 -0
  247. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionProperties.inl +178 -0
  248. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionQuality.h +31 -0
  249. package/native/third_party/JoltPhysics/Jolt/Physics/Body/MotionType.h +17 -0
  250. package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.cpp +354 -0
  251. package/native/third_party/JoltPhysics/Jolt/Physics/Character/Character.h +159 -0
  252. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.cpp +59 -0
  253. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterBase.h +157 -0
  254. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterID.h +98 -0
  255. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.cpp +1933 -0
  256. package/native/third_party/JoltPhysics/Jolt/Physics/Character/CharacterVirtual.h +752 -0
  257. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/AABoxCast.h +20 -0
  258. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdgeMode.h +17 -0
  259. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ActiveEdges.h +114 -0
  260. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BackFaceMode.h +16 -0
  261. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.cpp +16 -0
  262. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhase.h +109 -0
  263. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.cpp +313 -0
  264. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseBruteForce.h +38 -0
  265. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayer.h +148 -0
  266. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceMask.h +92 -0
  267. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseLayerInterfaceTable.h +64 -0
  268. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.cpp +629 -0
  269. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuadTree.h +108 -0
  270. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/BroadPhaseQuery.h +56 -0
  271. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterMask.h +35 -0
  272. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/ObjectVsBroadPhaseLayerFilterTable.h +66 -0
  273. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.cpp +1768 -0
  274. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/BroadPhase/QuadTree.h +389 -0
  275. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.cpp +107 -0
  276. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastConvexVsTriangles.h +46 -0
  277. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastResult.h +37 -0
  278. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.cpp +223 -0
  279. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CastSphereVsTriangles.h +49 -0
  280. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollectFacesMode.h +16 -0
  281. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.cpp +155 -0
  282. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideConvexVsTriangles.h +56 -0
  283. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollidePointResult.h +25 -0
  284. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShape.h +106 -0
  285. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideShapeVsShapePerLeaf.h +94 -0
  286. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVertexIterator.h +110 -0
  287. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSoftBodyVerticesVsTriangles.h +102 -0
  288. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.cpp +121 -0
  289. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollideSphereVsTriangles.h +50 -0
  290. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollector.h +109 -0
  291. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionCollectorImpl.h +219 -0
  292. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.cpp +107 -0
  293. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionDispatch.h +97 -0
  294. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.cpp +35 -0
  295. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/CollisionGroup.h +97 -0
  296. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ContactListener.h +143 -0
  297. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.cpp +213 -0
  298. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/EstimateCollisionResponse.h +48 -0
  299. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.cpp +32 -0
  300. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilter.h +46 -0
  301. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.cpp +38 -0
  302. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/GroupFilterTable.h +130 -0
  303. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/InternalEdgeRemovingCollector.h +279 -0
  304. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.cpp +271 -0
  305. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ManifoldBetweenTwoFaces.h +44 -0
  306. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.cpp +448 -0
  307. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseQuery.h +77 -0
  308. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.cpp +62 -0
  309. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/NarrowPhaseStats.h +110 -0
  310. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayer.h +111 -0
  311. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterMask.h +52 -0
  312. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ObjectLayerPairFilterTable.h +78 -0
  313. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.cpp +35 -0
  314. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterial.h +57 -0
  315. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.cpp +38 -0
  316. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/PhysicsMaterialSimple.h +37 -0
  317. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/RayCast.h +87 -0
  318. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.cpp +318 -0
  319. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/BoxShape.h +115 -0
  320. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.cpp +438 -0
  321. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CapsuleShape.h +129 -0
  322. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.cpp +433 -0
  323. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShape.h +354 -0
  324. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CompoundShapeVisitors.h +461 -0
  325. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.cpp +1311 -0
  326. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexHullShape.h +202 -0
  327. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.cpp +566 -0
  328. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ConvexShape.h +150 -0
  329. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.cpp +418 -0
  330. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/CylinderShape.h +126 -0
  331. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.cpp +87 -0
  332. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/DecoratedShape.h +80 -0
  333. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.cpp +64 -0
  334. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/EmptyShape.h +75 -0
  335. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/GetTrianglesContext.h +248 -0
  336. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.cpp +2754 -0
  337. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/HeightFieldShape.h +380 -0
  338. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.cpp +1305 -0
  339. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MeshShape.h +228 -0
  340. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.cpp +596 -0
  341. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/MutableCompoundShape.h +176 -0
  342. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.cpp +217 -0
  343. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/OffsetCenterOfMassShape.h +140 -0
  344. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.cpp +541 -0
  345. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PlaneShape.h +147 -0
  346. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/PolyhedronSubmergedVolumeCalculator.h +319 -0
  347. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.cpp +333 -0
  348. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/RotatedTranslatedShape.h +161 -0
  349. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaleHelpers.h +83 -0
  350. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.cpp +238 -0
  351. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/ScaledShape.h +145 -0
  352. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.cpp +325 -0
  353. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/Shape.h +466 -0
  354. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.cpp +347 -0
  355. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SphereShape.h +125 -0
  356. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.cpp +674 -0
  357. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/StaticCompoundShape.h +139 -0
  358. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeID.h +138 -0
  359. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/SubShapeIDPair.h +65 -0
  360. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.cpp +453 -0
  361. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.gliffy +1 -0
  362. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCapsuleShape.h +135 -0
  363. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.cpp +691 -0
  364. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TaperedCylinderShape.h +132 -0
  365. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.cpp +430 -0
  366. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/Shape/TriangleShape.h +143 -0
  367. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeCast.h +173 -0
  368. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/ShapeFilter.h +73 -0
  369. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilter.h +40 -0
  370. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SimShapeFilterWrapper.h +58 -0
  371. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/SortReverseAndStore.h +48 -0
  372. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.cpp +180 -0
  373. package/native/third_party/JoltPhysics/Jolt/Physics/Collision/TransformedShape.h +194 -0
  374. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/CalculateSolverSteps.h +70 -0
  375. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.cpp +246 -0
  376. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConeConstraint.h +133 -0
  377. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.cpp +73 -0
  378. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/Constraint.h +243 -0
  379. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.cpp +289 -0
  380. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintManager.h +100 -0
  381. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AngleConstraintPart.h +257 -0
  382. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/AxisConstraintPart.h +682 -0
  383. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/DualAxisConstraintPart.h +276 -0
  384. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/GearConstraintPart.h +195 -0
  385. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/HingeRotationConstraintPart.h +222 -0
  386. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/IndependentAxisConstraintPart.h +246 -0
  387. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/PointConstraintPart.h +239 -0
  388. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RackAndPinionConstraintPart.h +196 -0
  389. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationEulerConstraintPart.h +283 -0
  390. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/RotationQuatConstraintPart.h +246 -0
  391. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SpringPart.h +169 -0
  392. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ConstraintPart/SwingTwistConstraintPart.h +597 -0
  393. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.cpp +1804 -0
  394. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/ContactConstraintManager.h +524 -0
  395. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.cpp +266 -0
  396. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/DistanceConstraint.h +120 -0
  397. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.cpp +215 -0
  398. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/FixedConstraint.h +96 -0
  399. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.cpp +188 -0
  400. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/GearConstraint.h +116 -0
  401. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.cpp +443 -0
  402. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/HingeConstraint.h +205 -0
  403. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.cpp +43 -0
  404. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/MotorSettings.h +66 -0
  405. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.cpp +458 -0
  406. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraint.h +191 -0
  407. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.cpp +85 -0
  408. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPath.h +76 -0
  409. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.cpp +308 -0
  410. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PathConstraintPathHermite.h +54 -0
  411. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.cpp +157 -0
  412. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PointConstraint.h +94 -0
  413. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.cpp +253 -0
  414. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/PulleyConstraint.h +137 -0
  415. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.cpp +189 -0
  416. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/RackAndPinionConstraint.h +118 -0
  417. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.cpp +900 -0
  418. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SixDOFConstraint.h +289 -0
  419. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.cpp +501 -0
  420. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SliderConstraint.h +198 -0
  421. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.cpp +35 -0
  422. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SpringSettings.h +70 -0
  423. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.cpp +524 -0
  424. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/SwingTwistConstraint.h +197 -0
  425. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.cpp +56 -0
  426. package/native/third_party/JoltPhysics/Jolt/Physics/Constraints/TwoBodyConstraint.h +65 -0
  427. package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.cpp +17 -0
  428. package/native/third_party/JoltPhysics/Jolt/Physics/DeterminismLog.h +159 -0
  429. package/native/third_party/JoltPhysics/Jolt/Physics/EActivation.h +16 -0
  430. package/native/third_party/JoltPhysics/Jolt/Physics/EPhysicsUpdateError.h +37 -0
  431. package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.cpp +492 -0
  432. package/native/third_party/JoltPhysics/Jolt/Physics/IslandBuilder.h +144 -0
  433. package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.cpp +582 -0
  434. package/native/third_party/JoltPhysics/Jolt/Physics/LargeIslandSplitter.h +187 -0
  435. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsLock.h +169 -0
  436. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.cpp +261 -0
  437. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsScene.h +104 -0
  438. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSettings.h +125 -0
  439. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsStepListener.h +37 -0
  440. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.cpp +2915 -0
  441. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsSystem.h +391 -0
  442. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.cpp +25 -0
  443. package/native/third_party/JoltPhysics/Jolt/Physics/PhysicsUpdateContext.h +176 -0
  444. package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.cpp +744 -0
  445. package/native/third_party/JoltPhysics/Jolt/Physics/Ragdoll/Ragdoll.h +245 -0
  446. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyContactListener.h +55 -0
  447. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.cpp +128 -0
  448. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyCreationSettings.h +75 -0
  449. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyManifold.h +74 -0
  450. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.cpp +1501 -0
  451. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyMotionProperties.h +333 -0
  452. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.cpp +354 -0
  453. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyShape.h +73 -0
  454. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.cpp +1487 -0
  455. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodySharedSettings.h +390 -0
  456. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyUpdateContext.h +63 -0
  457. package/native/third_party/JoltPhysics/Jolt/Physics/SoftBody/SoftBodyVertex.h +36 -0
  458. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorder.h +136 -0
  459. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.cpp +90 -0
  460. package/native/third_party/JoltPhysics/Jolt/Physics/StateRecorderImpl.h +50 -0
  461. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.cpp +306 -0
  462. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/MotorcycleController.h +119 -0
  463. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.cpp +547 -0
  464. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/TrackedVehicleController.h +169 -0
  465. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.cpp +33 -0
  466. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleAntiRollBar.h +33 -0
  467. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.cpp +376 -0
  468. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleCollisionTester.h +146 -0
  469. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.cpp +703 -0
  470. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleConstraint.h +252 -0
  471. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.cpp +17 -0
  472. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleController.h +87 -0
  473. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.cpp +81 -0
  474. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleDifferential.h +39 -0
  475. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.cpp +122 -0
  476. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleEngine.h +93 -0
  477. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.cpp +52 -0
  478. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTrack.h +56 -0
  479. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.cpp +159 -0
  480. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/VehicleTransmission.h +87 -0
  481. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.cpp +93 -0
  482. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/Wheel.h +148 -0
  483. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.cpp +866 -0
  484. package/native/third_party/JoltPhysics/Jolt/Physics/Vehicle/WheeledVehicleController.h +205 -0
  485. package/native/third_party/JoltPhysics/Jolt/RegisterTypes.cpp +204 -0
  486. package/native/third_party/JoltPhysics/Jolt/RegisterTypes.h +29 -0
  487. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.cpp +1107 -0
  488. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRenderer.h +383 -0
  489. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.cpp +168 -0
  490. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererPlayback.h +48 -0
  491. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.cpp +158 -0
  492. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererRecorder.h +130 -0
  493. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.cpp +80 -0
  494. package/native/third_party/JoltPhysics/Jolt/Renderer/DebugRendererSimple.h +88 -0
  495. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.cpp +165 -0
  496. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletalAnimation.h +91 -0
  497. package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.cpp +82 -0
  498. package/native/third_party/JoltPhysics/Jolt/Skeleton/Skeleton.h +72 -0
  499. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.cpp +237 -0
  500. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonMapper.h +145 -0
  501. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.cpp +87 -0
  502. package/native/third_party/JoltPhysics/Jolt/Skeleton/SkeletonPose.h +82 -0
  503. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.cpp +73 -0
  504. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitter.h +84 -0
  505. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.cpp +139 -0
  506. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterBinning.h +52 -0
  507. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.cpp +43 -0
  508. package/native/third_party/JoltPhysics/Jolt/TriangleSplitter/TriangleSplitterMean.h +28 -0
  509. package/native/third_party/JoltPhysics/LICENSE +7 -0
  510. package/native/third_party/JoltPhysics/README.md +173 -0
  511. package/native/third_party/bloom_jolt/CMakeLists.txt +78 -0
  512. package/native/third_party/bloom_jolt/include/bloom_jolt.h +519 -0
  513. package/native/third_party/bloom_jolt/src/bloom_jolt.cpp +1780 -0
  514. package/native/tvos/Cargo.lock +1692 -0
  515. package/native/tvos/Cargo.toml +22 -0
  516. package/native/tvos/src/lib.rs +3179 -0
  517. package/native/watchos/Cargo.lock +16 -0
  518. package/native/watchos/Cargo.toml +19 -0
  519. package/native/watchos/shaders/bloom_postfx.metal +99 -0
  520. package/native/watchos/src/BloomWatchApp.swift +1236 -0
  521. package/native/watchos/src/BloomWatchAudio.swift +179 -0
  522. package/native/watchos/src/audio.rs +55 -0
  523. package/native/watchos/src/draw_list.rs +223 -0
  524. package/native/watchos/src/ffi_stubs.rs +454 -0
  525. package/native/watchos/src/lib.rs +1013 -0
  526. package/native/watchos/src/models.rs +746 -0
  527. package/native/watchos/src/postfx.rs +91 -0
  528. package/native/watchos/src/scene.rs +534 -0
  529. package/native/watchos/src/textures.rs +184 -0
  530. package/native/web/Cargo.lock +1656 -0
  531. package/native/web/Cargo.toml +38 -0
  532. package/native/web/bloom_glue.js +218 -0
  533. package/native/web/build.sh +101 -0
  534. package/native/web/index.html +390 -0
  535. package/native/web/jolt_bridge.js +1311 -0
  536. package/native/web/src/lib.rs +2739 -0
  537. package/native/windows/Cargo.lock +1813 -0
  538. package/native/windows/Cargo.toml +31 -0
  539. package/native/windows/src/lib.rs +1933 -0
  540. package/package.json +558 -0
  541. package/src/audio/index.ts +151 -0
  542. package/src/core/colors.ts +56 -0
  543. package/src/core/index.ts +903 -0
  544. package/src/core/keys.ts +63 -0
  545. package/src/core/types.ts +102 -0
  546. package/src/index.ts +158 -0
  547. package/src/math/index.ts +502 -0
  548. package/src/mobile/index.ts +294 -0
  549. package/src/models/index.ts +859 -0
  550. package/src/physics/index.ts +1072 -0
  551. package/src/scene/index.ts +570 -0
  552. package/src/shapes/index.ts +120 -0
  553. package/src/text/index.ts +48 -0
  554. package/src/textures/index.ts +173 -0
  555. package/src/world/index.ts +22 -0
  556. package/src/world/loader.ts +385 -0
  557. package/src/world/prefab.ts +205 -0
  558. package/src/world/saver.ts +61 -0
  559. package/src/world/terrain.ts +254 -0
  560. package/src/world/types.ts +136 -0
  561. package/src/world/validate.ts +202 -0
  562. 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
+ }