@woosh/meep-engine 3.46.0 → 3.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (827) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/actions/concrete/TransformModifyAction.d.ts.map +1 -1
  3. package/editor/actions/concrete/TransformModifyAction.js +10 -2
  4. package/editor/ecs/component/FieldDescriptor.js +15 -0
  5. package/editor/ecs/component/createObjectEditor.js +41 -12
  6. package/editor/ecs/component/editors/ecs/Transform64Editor.d.ts.map +1 -1
  7. package/editor/ecs/component/editors/ecs/Transform64Editor.js +77 -70
  8. package/editor/particles/effect/ParticleReferenceSimulation.d.ts +1 -2
  9. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
  10. package/editor/particles/effect/ParticleReferenceSimulation.js +2 -4
  11. package/editor/tools/TransformToolV2.d.ts.map +1 -1
  12. package/editor/tools/TransformToolV2.js +4 -0
  13. package/editor/tools/v2/TransformControls.d.ts.map +1 -1
  14. package/editor/tools/v2/TransformControls.js +7 -0
  15. package/editor/view/ecs/EntityEditor.d.ts.map +1 -1
  16. package/editor/view/ecs/EntityEditor.js +4 -2
  17. package/editor/view/particles/effect/ParticleGraphEditorView.js +1 -1
  18. package/package.json +1 -1
  19. package/src/core/collection/array/array_insert_at.d.ts +16 -0
  20. package/src/core/collection/array/array_insert_at.d.ts.map +1 -0
  21. package/src/core/collection/array/array_insert_at.js +32 -0
  22. package/src/core/collection/array/array_remove_at.d.ts +15 -0
  23. package/src/core/collection/array/array_remove_at.d.ts.map +1 -0
  24. package/src/core/collection/array/array_remove_at.js +30 -0
  25. package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts +37 -0
  26. package/src/core/geom/3d/quaternion/quat3_look_rotation.d.ts.map +1 -0
  27. package/src/core/geom/3d/quaternion/quat3_look_rotation.js +172 -0
  28. package/src/core/geom/Quaternion.d.ts +1 -0
  29. package/src/core/geom/Quaternion.d.ts.map +1 -1
  30. package/src/core/geom/Quaternion.js +12 -48
  31. package/src/engine/Engine.d.ts.map +1 -1
  32. package/src/engine/Engine.js +9 -4
  33. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +27 -11
  34. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  35. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +21 -0
  36. package/src/engine/ecs/transform/t64_look_rotation.d.ts +4 -4
  37. package/src/engine/ecs/transform/t64_look_rotation.d.ts.map +1 -1
  38. package/src/engine/ecs/transform/t64_look_rotation.js +7 -18
  39. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.d.ts.map +1 -1
  40. package/src/engine/graphics/ecs/camera/topdown/TopDownCameraControllerSystem.js +30 -1
  41. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +2 -2
  42. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
  43. package/src/engine/graphics/ecs/particles/ParticleEffect.js +7 -7
  44. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +8 -0
  45. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
  46. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +11 -3
  47. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +26 -0
  48. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts.map +1 -0
  49. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +91 -0
  50. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +6 -0
  51. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  52. package/src/engine/graphics3/GPUParticleEmitterSystem.js +72 -29
  53. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  54. package/src/engine/graphics3/GraphicsEngine.js +8 -1
  55. package/src/engine/graphics3/ParticipatingMedia.d.ts +84 -1
  56. package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
  57. package/src/engine/graphics3/ParticipatingMedia.js +139 -5
  58. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +6 -2
  59. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -1
  60. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +29 -4
  61. package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts +10 -0
  62. package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts.map +1 -0
  63. package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.js +38 -0
  64. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
  65. package/src/engine/graphics3/ParticipatingMediaSystem.js +46 -3
  66. package/src/engine/input/devices/KeyboardDevice.d.ts +1 -0
  67. package/src/engine/input/devices/KeyboardDevice.d.ts.map +1 -1
  68. package/src/engine/input/devices/KeyboardDevice.js +7 -6
  69. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.d.ts.map +1 -1
  70. package/src/engine/navigation/ecs/path_following/PathFollowingSystem.js +15 -2
  71. package/src/engine/network/CONGESTION_CONTROL.md +9 -9
  72. package/src/engine/network/MESSAGE_TRANSPORT.md +364 -0
  73. package/src/engine/network/NetworkSession.d.ts +47 -16
  74. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  75. package/src/engine/network/NetworkSession.js +556 -292
  76. package/src/engine/network/README.md +104 -28
  77. package/src/engine/network/SMOOTHNESS_DESIGN.md +13 -5
  78. package/src/engine/network/diagnostics/BandwidthMeter.d.ts +1 -1
  79. package/src/engine/network/diagnostics/BandwidthMeter.js +1 -1
  80. package/src/engine/network/orchestrator/HostJoin.d.ts +111 -0
  81. package/src/engine/network/orchestrator/HostJoin.d.ts.map +1 -0
  82. package/src/engine/network/orchestrator/HostJoin.js +271 -0
  83. package/src/engine/network/orchestrator/NetworkPeer.d.ts +151 -112
  84. package/src/engine/network/orchestrator/NetworkPeer.d.ts.map +1 -1
  85. package/src/engine/network/orchestrator/NetworkPeer.js +450 -499
  86. package/src/engine/network/orchestrator/PendingSlices.d.ts +30 -0
  87. package/src/engine/network/orchestrator/PendingSlices.d.ts.map +1 -0
  88. package/src/engine/network/orchestrator/PendingSlices.js +83 -0
  89. package/src/engine/network/orchestrator/ReliableFrames.d.ts +34 -0
  90. package/src/engine/network/orchestrator/ReliableFrames.d.ts.map +1 -0
  91. package/src/engine/network/orchestrator/ReliableFrames.js +96 -0
  92. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts +77 -10
  93. package/src/engine/network/orchestrator/ServerAuthoritativeClient.d.ts.map +1 -1
  94. package/src/engine/network/orchestrator/ServerAuthoritativeClient.js +236 -61
  95. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +59 -23
  96. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  97. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +213 -198
  98. package/src/engine/network/replication/Replicator.d.ts +15 -4
  99. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  100. package/src/engine/network/replication/Replicator.js +57 -17
  101. package/src/engine/network/sim/ActionLog.d.ts +32 -5
  102. package/src/engine/network/sim/ActionLog.d.ts.map +1 -1
  103. package/src/engine/network/sim/ActionLog.js +47 -5
  104. package/src/engine/network/sim/SimActionExecutor.d.ts +42 -2
  105. package/src/engine/network/sim/SimActionExecutor.d.ts.map +1 -1
  106. package/src/engine/network/sim/SimActionExecutor.js +100 -4
  107. package/src/engine/network/sim/Snapshotter.d.ts +12 -0
  108. package/src/engine/network/sim/Snapshotter.d.ts.map +1 -1
  109. package/src/engine/network/sim/Snapshotter.js +43 -0
  110. package/src/engine/network/state/Baseline.d.ts +1 -1
  111. package/src/engine/network/state/Baseline.js +1 -1
  112. package/src/engine/network/state/FrameBufferRing.d.ts +25 -6
  113. package/src/engine/network/state/FrameBufferRing.d.ts.map +1 -1
  114. package/src/engine/network/state/FrameBufferRing.js +51 -6
  115. package/src/engine/network/state/InputRing.d.ts +4 -0
  116. package/src/engine/network/state/InputRing.d.ts.map +1 -1
  117. package/src/engine/network/state/InputRing.js +7 -0
  118. package/src/engine/network/state/RecordArrivalRing.d.ts +57 -0
  119. package/src/engine/network/state/RecordArrivalRing.d.ts.map +1 -0
  120. package/src/engine/network/state/RecordArrivalRing.js +144 -0
  121. package/src/engine/network/transport/DeferredTransport.d.ts.map +1 -1
  122. package/src/engine/network/transport/DeferredTransport.js +1 -0
  123. package/src/engine/network/transport/LoopbackTransport.d.ts.map +1 -1
  124. package/src/engine/network/transport/LoopbackTransport.js +4 -2
  125. package/src/engine/network/transport/Transport.d.ts +7 -0
  126. package/src/engine/network/transport/Transport.d.ts.map +1 -1
  127. package/src/engine/network/transport/Transport.js +8 -0
  128. package/src/engine/network/transport/adapters/NodeUDPTransport.d.ts.map +1 -1
  129. package/src/engine/network/transport/adapters/NodeUDPTransport.js +20 -5
  130. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.d.ts.map +1 -1
  131. package/src/engine/network/transport/adapters/WebRTCDataChannelTransport.js +8 -0
  132. package/src/engine/network/transport/adapters/WebTransportTransport.d.ts.map +1 -1
  133. package/src/engine/network/transport/adapters/WebTransportTransport.js +6 -0
  134. package/src/engine/network/transport/connection/Connection.d.ts +191 -0
  135. package/src/engine/network/transport/connection/Connection.d.ts.map +1 -0
  136. package/src/engine/network/transport/connection/Connection.js +1262 -0
  137. package/src/engine/network/transport/connection/RangeSet.d.ts +94 -0
  138. package/src/engine/network/transport/connection/RangeSet.d.ts.map +1 -0
  139. package/src/engine/network/transport/connection/RangeSet.js +260 -0
  140. package/src/engine/network/transport/connection/RxStream.d.ts +48 -0
  141. package/src/engine/network/transport/connection/RxStream.d.ts.map +1 -0
  142. package/src/engine/network/transport/connection/RxStream.js +211 -0
  143. package/src/engine/network/transport/connection/TxStream.d.ts +90 -0
  144. package/src/engine/network/transport/connection/TxStream.d.ts.map +1 -0
  145. package/src/engine/network/transport/connection/TxStream.js +243 -0
  146. package/src/engine/network/transport/connection/bytes_copy.d.ts +17 -0
  147. package/src/engine/network/transport/connection/bytes_copy.d.ts.map +1 -0
  148. package/src/engine/network/transport/connection/bytes_copy.js +34 -0
  149. package/src/engine/network/transport/connection/varint.d.ts +46 -0
  150. package/src/engine/network/transport/connection/varint.d.ts.map +1 -0
  151. package/src/engine/network/transport/connection/varint.js +107 -0
  152. package/src/engine/physics/cloth/MEASUREMENTS.md +354 -0
  153. package/src/engine/physics/cloth/PLAN.md +85 -5
  154. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +0 -12
  155. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  156. package/src/engine/physics/cloth/ecs/ClothInstance.js +0 -13
  157. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +2 -1
  158. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  159. package/src/engine/physics/cloth/ecs/ClothSystem.js +7 -1
  160. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  161. package/src/engine/physics/cloth/ecs/ClothWorld.js +4 -15
  162. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +2 -1
  163. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
  164. package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +6 -1
  165. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  166. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +20 -10
  167. package/src/engine/physics/cloth/playground/collide.html +5 -3
  168. package/src/engine/physics/cloth/playground/collide_main.js +14 -13
  169. package/src/engine/physics/cloth/solver/ClothState.d.ts +30 -2
  170. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  171. package/src/engine/physics/cloth/solver/ClothState.js +62 -4
  172. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +11 -3
  173. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
  174. package/src/engine/physics/cloth/solver/cloth_self_find.js +52 -11
  175. package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts +42 -0
  176. package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts.map +1 -0
  177. package/src/engine/physics/cloth/solver/cloth_self_radius.js +64 -0
  178. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +99 -24
  179. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
  180. package/src/engine/physics/cloth/solver/cloth_solver_constants.js +102 -25
  181. package/src/engine/physics/cloth/solver/cloth_step.d.ts +5 -1
  182. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  183. package/src/engine/physics/cloth/solver/cloth_step.js +13 -3
  184. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +0 -1
  185. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
  186. package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -14
  187. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +23 -4
  188. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  189. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +36 -8
  190. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
  191. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +4 -2
  192. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  193. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts +38 -7
  194. package/src/engine/sound/ecs/audio/AudioEmitter.d.ts.map +1 -1
  195. package/src/engine/sound/ecs/audio/AudioEmitter.js +35 -7
  196. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.d.ts.map +1 -1
  197. package/src/engine/sound/ecs/audio/AudioEmitterSerializationAdapter.js +5 -1
  198. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts +18 -0
  199. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.d.ts.map +1 -0
  200. package/src/engine/sound/ecs/audio/AudioEmitterSerializationUpgrader_0_1.js +48 -0
  201. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts +12 -2
  202. package/src/engine/sound/ecs/audio/AudioEmitterSystem.d.ts.map +1 -1
  203. package/src/engine/sound/ecs/audio/AudioEmitterSystem.js +173 -9
  204. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts +9 -3
  205. package/src/engine/sound/ecs/audio/LiveEmitterSet.d.ts.map +1 -1
  206. package/src/engine/sound/ecs/audio/LiveEmitterSet.js +28 -8
  207. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts +8 -0
  208. package/src/engine/sound/ecs/trigger/AudioEventTrigger.d.ts.map +1 -1
  209. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.d.ts.map +1 -1
  210. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationAdapter.js +5 -1
  211. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts +18 -0
  212. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.d.ts.map +1 -0
  213. package/src/engine/sound/ecs/trigger/AudioEventTriggerSerializationUpgrader_0_1.js +51 -0
  214. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.d.ts.map +1 -1
  215. package/src/engine/sound/ecs/trigger/AudioEventTriggerSystem.js +15 -1
  216. package/src/engine/sound/sopra/README.md +768 -644
  217. package/src/engine/sound/sopra/SopraEngine.d.ts +104 -8
  218. package/src/engine/sound/sopra/SopraEngine.d.ts.map +1 -1
  219. package/src/engine/sound/sopra/SopraEngine.js +327 -12
  220. package/src/engine/sound/sopra/definition/EventDescription.d.ts +28 -2
  221. package/src/engine/sound/sopra/definition/EventDescription.d.ts.map +1 -1
  222. package/src/engine/sound/sopra/definition/EventDescription.js +55 -5
  223. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts +10 -0
  224. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.d.ts.map +1 -1
  225. package/src/engine/sound/sopra/definition/EventDescriptionSerializationAdapter.js +77 -55
  226. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts +31 -0
  227. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.d.ts.map +1 -0
  228. package/src/engine/sound/sopra/definition/EventDescriptionSerializationUpgrader_0_1.js +75 -0
  229. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts +38 -9
  230. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.d.ts.map +1 -1
  231. package/src/engine/sound/sopra/definition/effect/AbstractAudioEffect.js +34 -5
  232. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts +7 -2
  233. package/src/engine/sound/sopra/definition/effect/CompressorEffect.d.ts.map +1 -1
  234. package/src/engine/sound/sopra/definition/effect/CompressorEffect.js +137 -122
  235. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts +3 -1
  236. package/src/engine/sound/sopra/definition/effect/EqEffect.d.ts.map +1 -1
  237. package/src/engine/sound/sopra/definition/effect/EqEffect.js +146 -131
  238. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts +1 -0
  239. package/src/engine/sound/sopra/definition/effect/ReverbEffect.d.ts.map +1 -1
  240. package/src/engine/sound/sopra/definition/effect/ReverbEffect.js +6 -1
  241. package/src/engine/sound/sopra/runtime/BusGraph.d.ts +44 -2
  242. package/src/engine/sound/sopra/runtime/BusGraph.d.ts.map +1 -1
  243. package/src/engine/sound/sopra/runtime/BusGraph.js +83 -43
  244. package/src/engine/sound/sopra/runtime/EffectChain.d.ts +96 -0
  245. package/src/engine/sound/sopra/runtime/EffectChain.d.ts.map +1 -0
  246. package/src/engine/sound/sopra/runtime/EffectChain.js +286 -0
  247. package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts +123 -0
  248. package/src/engine/sound/sopra/runtime/EffectParamOverrides.d.ts.map +1 -0
  249. package/src/engine/sound/sopra/runtime/EffectParamOverrides.js +320 -0
  250. package/src/engine/sound/sopra/runtime/EventInstance.d.ts +55 -5
  251. package/src/engine/sound/sopra/runtime/EventInstance.d.ts.map +1 -1
  252. package/src/engine/sound/sopra/runtime/EventInstance.js +201 -26
  253. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts +2 -1
  254. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.d.ts.map +1 -1
  255. package/src/engine/sound/sopra/serialization/populateSopraSerializationRegistry.js +6 -1
  256. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts +15 -0
  257. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.d.ts.map +1 -1
  258. package/src/engine/sound/sopra/serialization/sopraSerializationHarness.js +32 -0
  259. package/src/engine/sound/sopra/util/MockAudioContext.d.ts.map +1 -1
  260. package/src/engine/sound/sopra/util/MockAudioContext.js +3 -0
  261. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts +13 -3
  262. package/src/engine/sound/sopra/util/fadeOutAndStop.d.ts.map +1 -1
  263. package/src/engine/sound/sopra/util/fadeOutAndStop.js +25 -13
  264. package/src/shade/RENDERER_CONTRACT.md +6 -3
  265. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts +24 -0
  266. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -0
  267. package/src/shade/device/SHADE_DEVICE_FLOOR.js +34 -0
  268. package/src/shade/device/ShadeDeviceFailure.d.ts +12 -5
  269. package/src/shade/device/ShadeDeviceFailure.d.ts.map +1 -1
  270. package/src/shade/device/ShadeDeviceFailure.js +17 -8
  271. package/src/shade/device/ShadeDeviceFailureReason.d.ts +1 -1
  272. package/src/shade/device/ShadeDeviceFailureReason.js +2 -2
  273. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +15 -0
  274. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  275. package/src/shade/device/mock/SoftwareGPUDevice.js +21 -0
  276. package/src/shade/device/pipeline/ComputePipelineManager.d.ts +20 -0
  277. package/src/shade/device/pipeline/ComputePipelineManager.d.ts.map +1 -1
  278. package/src/shade/device/pipeline/ComputePipelineManager.js +80 -6
  279. package/src/shade/device/pipeline/PipelineEnquiry.d.ts +52 -0
  280. package/src/shade/device/pipeline/PipelineEnquiry.d.ts.map +1 -0
  281. package/src/shade/device/pipeline/PipelineEnquiry.js +63 -0
  282. package/src/shade/device/pipeline/RenderPipelineManager.d.ts +21 -0
  283. package/src/shade/device/pipeline/RenderPipelineManager.d.ts.map +1 -1
  284. package/src/shade/device/pipeline/RenderPipelineManager.js +84 -4
  285. package/src/shade/device/shade_device_floor_unmet.d.ts +13 -0
  286. package/src/shade/device/shade_device_floor_unmet.d.ts.map +1 -0
  287. package/src/shade/device/shade_device_floor_unmet.js +32 -0
  288. package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts +137 -0
  289. package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts.map +1 -0
  290. package/src/shade/playground/contact_shadows/ContactShadowLab.js +654 -0
  291. package/src/shade/playground/contact_shadows/README.md +126 -0
  292. package/src/shade/playground/contact_shadows/index.html +191 -0
  293. package/src/shade/playground/contact_shadows/main.d.ts +2 -0
  294. package/src/shade/playground/contact_shadows/main.d.ts.map +1 -0
  295. package/src/shade/playground/contact_shadows/main.js +888 -0
  296. package/src/shade/playground/contact_shadows/scenes.d.ts +48 -0
  297. package/src/shade/playground/contact_shadows/scenes.d.ts.map +1 -0
  298. package/src/shade/playground/contact_shadows/scenes.js +620 -0
  299. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts +36 -0
  300. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -0
  301. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +245 -0
  302. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts +15 -0
  303. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -0
  304. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +120 -0
  305. package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts +55 -0
  306. package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts.map +1 -0
  307. package/src/shade/playground/contact_shadows/shader_contact_lab_stats.js +216 -0
  308. package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts +20 -0
  309. package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts.map +1 -0
  310. package/src/shade/playground/contact_shadows/shader_contact_lab_view.js +114 -0
  311. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts +11 -0
  312. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -0
  313. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +90 -0
  314. package/src/shade/playground/contact_shadows/textures.d.ts +16 -0
  315. package/src/shade/playground/contact_shadows/textures.d.ts.map +1 -0
  316. package/src/shade/playground/contact_shadows/textures.js +123 -0
  317. package/src/shade/playground/particle_ecs/README.md +1 -1
  318. package/src/shade/playground/particle_ecs/effects/flame.json +1932 -1881
  319. package/src/shade/playground/particle_ecs/effects/smoke.json +99 -1
  320. package/src/shade/playground/particle_ecs/effects/soot.json +152 -145
  321. package/src/shade/playground/tonemap_sdr/README.md +90 -0
  322. package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts +105 -0
  323. package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts.map +1 -0
  324. package/src/shade/playground/tonemap_sdr/ToneMapCompare.js +380 -0
  325. package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts +32 -0
  326. package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts.map +1 -0
  327. package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js +104 -0
  328. package/src/shade/playground/tonemap_sdr/index.html +90 -0
  329. package/src/shade/playground/tonemap_sdr/main.d.ts +2 -0
  330. package/src/shade/playground/tonemap_sdr/main.d.ts.map +1 -0
  331. package/src/shade/playground/tonemap_sdr/main.js +306 -0
  332. package/src/shade/playground/tonemap_sdr/scenes.d.ts +26 -0
  333. package/src/shade/playground/tonemap_sdr/scenes.d.ts.map +1 -0
  334. package/src/shade/playground/tonemap_sdr/scenes.js +404 -0
  335. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  336. package/src/shade/playground/volumetrics_froxel/main.js +85 -4
  337. package/src/shade/playground/water_refraction/README.md +26 -18
  338. package/src/shade/playground/water_refraction/index.html +1 -1
  339. package/src/shade/renderer/Renderer.d.ts +37 -3
  340. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  341. package/src/shade/renderer/Renderer.js +237 -67
  342. package/src/shade/renderer/ShadeToneMappingMode.d.ts +14 -0
  343. package/src/shade/renderer/ShadeToneMappingMode.d.ts.map +1 -0
  344. package/src/shade/renderer/ShadeToneMappingMode.js +30 -0
  345. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +9 -0
  346. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  347. package/src/shade/renderer/animation/GPUAnimationManager.js +14 -0
  348. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  349. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -3
  350. package/src/shade/renderer/buffer/GPUBufferAllocator.d.ts.map +1 -1
  351. package/src/shade/renderer/buffer/GPUBufferAllocator.js +9 -0
  352. package/src/shade/renderer/buffer/buffer_pool_ops.d.ts +21 -12
  353. package/src/shade/renderer/buffer/buffer_pool_ops.d.ts.map +1 -1
  354. package/src/shade/renderer/buffer/buffer_pool_ops.js +18 -19
  355. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +7 -0
  356. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  357. package/src/shade/renderer/buffer/table/GPUDatabase.js +12 -0
  358. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts +8 -0
  359. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  360. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +12 -0
  361. package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
  362. package/src/shade/renderer/camera/GPUCameraContext.js +19 -8
  363. package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
  364. package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +4 -0
  365. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
  366. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +4 -0
  367. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts.map +1 -1
  368. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +4 -0
  369. package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
  370. package/src/shade/renderer/deferred/shader_deferred_main.js +3 -0
  371. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts +6 -0
  372. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  373. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +13 -3
  374. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts +9 -0
  375. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +1 -0
  376. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.js +63 -0
  377. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts +10 -0
  378. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
  379. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.js +87 -0
  380. package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts +6 -0
  381. package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +1 -1
  382. package/src/shade/renderer/deferred/shader_tonemap_LDR.js +23 -5
  383. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts +9 -0
  384. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +1 -0
  385. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.js +68 -0
  386. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts +10 -0
  387. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
  388. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.js +73 -0
  389. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  390. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +58 -9
  391. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +35 -25
  392. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  393. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +97 -196
  394. package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +1 -1
  395. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +121 -129
  396. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  397. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +3 -0
  398. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  399. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -0
  400. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
  401. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +4 -0
  402. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  403. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
  404. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
  405. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -0
  406. package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.d.ts.map +1 -1
  407. package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.js +4 -0
  408. package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
  409. package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +4 -0
  410. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +131 -1
  411. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +7 -0
  412. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -1
  413. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +45 -38
  414. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +2 -0
  415. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -1
  416. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +81 -79
  417. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +2 -0
  418. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -1
  419. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +5 -3
  420. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts +21 -0
  421. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts.map +1 -0
  422. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.js +42 -0
  423. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts +19 -0
  424. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts.map +1 -0
  425. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.js +44 -0
  426. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +23 -5
  427. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -1
  428. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +139 -23
  429. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts +25 -0
  430. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts.map +1 -0
  431. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +179 -0
  432. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  433. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  434. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +7 -16
  435. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +3 -4
  436. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  437. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +6 -23
  438. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +11 -0
  439. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
  440. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +14 -3
  441. package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts +10 -0
  442. package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts.map +1 -1
  443. package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.js +13 -3
  444. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +10 -0
  445. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
  446. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +14 -0
  447. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts +26 -0
  448. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts.map +1 -0
  449. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.js +52 -0
  450. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts +32 -0
  451. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts.map +1 -0
  452. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.js +89 -0
  453. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +10 -0
  454. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  455. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +20 -1
  456. package/src/shade/renderer/gpu_primitive/test/gpu_test.d.ts.map +1 -1
  457. package/src/shade/renderer/gpu_primitive/test/gpu_test.js +8 -11
  458. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +10 -0
  459. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  460. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +294 -281
  461. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  462. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  463. package/src/shade/renderer/light/GPULightCollection.js +18 -1
  464. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts +8 -0
  465. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  466. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +234 -218
  467. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts +7 -0
  468. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  469. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +13 -0
  470. package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts +7 -0
  471. package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts.map +1 -1
  472. package/src/shade/renderer/light/cluster/graph_build_light_clusters.js +16 -2
  473. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +10 -0
  474. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  475. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +13 -0
  476. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  477. package/src/shade/renderer/lightmap/GPULightMap.js +3 -0
  478. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
  479. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
  480. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
  481. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
  482. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  483. package/src/shade/renderer/material/GPUMaterialManager.d.ts +16 -4
  484. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  485. package/src/shade/renderer/material/GPUMaterialManager.js +38 -8
  486. package/src/shade/renderer/particles/DESIGN.md +49 -7
  487. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +453 -0
  488. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +5 -1
  489. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  490. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +13 -5
  491. package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -2
  492. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
  493. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +12 -0
  494. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +60 -0
  495. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
  496. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +156 -0
  497. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +2 -2
  498. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  499. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +8 -8
  500. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  501. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +6 -4
  502. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +7 -6
  503. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  504. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +91 -58
  505. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  506. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +10 -0
  507. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  508. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +5 -1
  509. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  510. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +6 -0
  511. package/src/shade/renderer/pool/TransientResourcePool.d.ts +24 -0
  512. package/src/shade/renderer/pool/TransientResourcePool.d.ts.map +1 -1
  513. package/src/shade/renderer/pool/TransientResourcePool.js +41 -10
  514. package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts +7 -0
  515. package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts.map +1 -1
  516. package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +18 -0
  517. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
  518. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +1 -0
  519. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
  520. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
  521. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +11 -0
  522. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  523. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +16 -0
  524. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +10 -0
  525. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  526. package/src/shade/renderer/postprocess/gtao/GTAO.js +16 -0
  527. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  528. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +32 -10
  529. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  530. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  531. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -0
  532. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -1
  533. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +6 -3
  534. package/src/shade/renderer/postprocess/taa/TAA.d.ts +12 -0
  535. package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
  536. package/src/shade/renderer/postprocess/taa/TAA.js +15 -0
  537. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -0
  538. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  539. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +13 -0
  540. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +31 -3
  541. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
  542. package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +79 -4
  543. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +17 -0
  544. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
  545. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +35 -4
  546. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts +7 -0
  547. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  548. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +182 -169
  549. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts +10 -0
  550. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
  551. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +20 -1
  552. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +10 -0
  553. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -1
  554. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +18 -1
  555. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts +10 -0
  556. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
  557. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +20 -1
  558. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts +7 -0
  559. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  560. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +187 -170
  561. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts +10 -0
  562. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
  563. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +19 -1
  564. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +13 -0
  565. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
  566. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +25 -1
  567. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts +10 -0
  568. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  569. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +20 -0
  570. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  571. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -0
  572. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  573. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -0
  574. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
  575. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  576. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
  577. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +7 -2
  578. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  579. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +12 -4
  580. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
  581. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +4 -3
  582. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
  583. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +4 -3
  584. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +2 -1
  585. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  586. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +11 -3
  587. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
  588. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -3
  589. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
  590. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -3
  591. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +15 -0
  592. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  593. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +35 -2
  594. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +14 -0
  595. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  596. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +32 -4
  597. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +17 -0
  598. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  599. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +34 -4
  600. package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts +5 -3
  601. package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts.map +1 -1
  602. package/src/shade/renderer/restir/di/chunk_restir_resolve.js +8 -3
  603. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  604. package/src/shade/renderer/restir/di/graph_restir_di.js +1 -0
  605. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  606. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +5 -1
  607. package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
  608. package/src/shade/renderer/restir/reservoir/shader.js +7 -4
  609. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +7 -0
  610. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  611. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +13 -1
  612. package/src/shade/renderer/scene/GPUSceneContext.d.ts +10 -0
  613. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  614. package/src/shade/renderer/scene/GPUSceneContext.js +19 -0
  615. package/src/shade/renderer/scene/SceneManager.d.ts +9 -0
  616. package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
  617. package/src/shade/renderer/scene/SceneManager.js +11 -0
  618. package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts +11 -0
  619. package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts.map +1 -1
  620. package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.js +17 -0
  621. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +11 -0
  622. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
  623. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +18 -1
  624. package/src/shade/renderer/shader/ComputeShader.d.ts +12 -0
  625. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  626. package/src/shade/renderer/shader/ComputeShader.js +71 -2
  627. package/src/shade/renderer/shader/ImageShader.d.ts +27 -8
  628. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  629. package/src/shade/renderer/shader/ImageShader.js +299 -218
  630. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +21 -0
  631. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  632. package/src/shade/renderer/shader/ShaderDescriptor.js +71 -1
  633. package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts +17 -0
  634. package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts.map +1 -0
  635. package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.js +45 -0
  636. package/src/shade/renderer/shader/chunk/camera/chunk_screen_coordinate_to_view.js +3 -3
  637. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +1 -1
  638. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -62
  639. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +318 -0
  640. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +237 -0
  641. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +17 -0
  642. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -0
  643. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +22 -0
  644. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts +14 -1
  645. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts.map +1 -1
  646. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js +28 -15
  647. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +12 -0
  648. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
  649. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +128 -110
  650. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts +20 -0
  651. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts.map +1 -0
  652. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js +33 -0
  653. package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts +4 -0
  654. package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts.map +1 -1
  655. package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js +12 -1
  656. package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.d.ts.map +1 -1
  657. package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js +7 -0
  658. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +108 -0
  659. package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.d.ts.map +1 -1
  660. package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js +23 -4
  661. package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts +18 -0
  662. package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts.map +1 -0
  663. package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.js +56 -0
  664. package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.d.ts.map +1 -1
  665. package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js +2 -0
  666. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts +43 -0
  667. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts.map +1 -0
  668. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.js +319 -0
  669. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +33 -0
  670. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  671. package/src/shade/renderer/shader/compiler/CodeChunk.js +140 -0
  672. package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts +74 -0
  673. package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts.map +1 -0
  674. package/src/shade/renderer/shader/compiler/CodeChunkChoice.js +166 -0
  675. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +680 -0
  676. package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +86 -0
  677. package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts.map +1 -0
  678. package/src/shade/renderer/shader/compiler/ShaderSwitch.js +178 -0
  679. package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +67 -0
  680. package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts.map +1 -0
  681. package/src/shade/renderer/shader/compiler/ShaderSwitchSet.js +205 -0
  682. package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts +14 -0
  683. package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts.map +1 -0
  684. package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.js +13 -0
  685. package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts +65 -0
  686. package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts.map +1 -0
  687. package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.js +252 -0
  688. package/src/shade/renderer/shadow/contact/FINDINGS.md +413 -0
  689. package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts +29 -0
  690. package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts.map +1 -0
  691. package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.js +105 -0
  692. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +29 -0
  693. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -0
  694. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +39 -0
  695. package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts +29 -0
  696. package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts.map +1 -0
  697. package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.js +92 -0
  698. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts +29 -0
  699. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -0
  700. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +128 -0
  701. package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts +52 -0
  702. package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts.map +1 -0
  703. package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.js +358 -0
  704. package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts +10 -0
  705. package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts.map +1 -0
  706. package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.js +12 -0
  707. package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts +13 -0
  708. package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts.map +1 -0
  709. package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.js +14 -0
  710. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +14 -8
  711. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  712. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +20 -86
  713. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts +14 -0
  714. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts.map +1 -0
  715. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.js +79 -0
  716. package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
  717. package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +12 -12
  718. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  719. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +153 -151
  720. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts +13 -0
  721. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts.map +1 -0
  722. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.js +48 -0
  723. package/src/shade/renderer/texture/GPUTextureContext.d.ts +10 -0
  724. package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
  725. package/src/shade/renderer/texture/GPUTextureContext.js +24 -0
  726. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +219 -0
  727. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -0
  728. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +671 -0
  729. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +26 -2
  730. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  731. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +108 -4
  732. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +5 -1
  733. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  734. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +6 -0
  735. package/src/shade/renderer/volumetrics/NOTES.md +50 -0
  736. package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts.map +1 -1
  737. package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js +30 -1
  738. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +51 -13
  739. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  740. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +98 -13
  741. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +9 -0
  742. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
  743. package/src/shade/renderer/volumetrics/SceneVolumetrics.js +78 -68
  744. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +326 -0
  745. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +7 -4
  746. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -1
  747. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +21 -9
  748. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts +19 -0
  749. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts.map +1 -0
  750. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.js +53 -0
  751. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +12 -3
  752. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -1
  753. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +85 -48
  754. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +4 -1
  755. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -1
  756. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +4 -1
  757. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +4 -1
  758. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  759. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +21 -1
  760. package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts +98 -0
  761. package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts.map +1 -0
  762. package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js +115 -0
  763. package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts +9 -0
  764. package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts.map +1 -0
  765. package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.js +24 -0
  766. package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts +27 -0
  767. package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts.map +1 -0
  768. package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.js +91 -0
  769. package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts +35 -0
  770. package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts.map +1 -0
  771. package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.js +92 -0
  772. package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts +10 -0
  773. package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts.map +1 -0
  774. package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.js +121 -0
  775. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  776. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -3
  777. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
  778. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +311 -290
  779. package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.d.ts.map +1 -1
  780. package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.js +28 -49
  781. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +3 -1
  782. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  783. package/src/shade/renderer/water/GPUWaterRenderer.js +24 -18
  784. package/src/shade/renderer/water/chunk_water_transport.d.ts +0 -1
  785. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
  786. package/src/shade/renderer/water/chunk_water_transport.js +0 -17
  787. package/src/shade/renderer/water/shader_water.d.ts +4 -2
  788. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  789. package/src/shade/renderer/water/shader_water.js +27 -16
  790. package/src/shade/renderer/water/shader_water_avboit.d.ts +0 -4
  791. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  792. package/src/shade/renderer/water/shader_water_avboit.js +0 -63
  793. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  794. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +43 -9
  795. package/src/view/graphics/GraphicsContextFailureView.d.ts +1 -2
  796. package/src/view/graphics/GraphicsContextFailureView.d.ts.map +1 -1
  797. package/src/view/graphics/GraphicsContextFailureView.js +1 -2
  798. package/src/engine/network/transport/Channel.d.ts +0 -85
  799. package/src/engine/network/transport/Channel.d.ts.map +0 -1
  800. package/src/engine/network/transport/Channel.js +0 -336
  801. package/src/engine/network/transport/ReliableCommandPipeline.d.ts +0 -155
  802. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +0 -1
  803. package/src/engine/network/transport/ReliableCommandPipeline.js +0 -335
  804. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +0 -105
  805. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +0 -1
  806. package/src/engine/network/transport/fragments/FragmentAssembler.js +0 -350
  807. package/src/engine/network/transport/fragments/FragmentRetention.d.ts +0 -103
  808. package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +0 -1
  809. package/src/engine/network/transport/fragments/FragmentRetention.js +0 -191
  810. package/src/engine/network/transport/fragments/fragment_send.d.ts +0 -61
  811. package/src/engine/network/transport/fragments/fragment_send.d.ts.map +0 -1
  812. package/src/engine/network/transport/fragments/fragment_send.js +0 -157
  813. package/src/engine/network/transport/fragments/packet_size.d.ts +0 -99
  814. package/src/engine/network/transport/fragments/packet_size.d.ts.map +0 -1
  815. package/src/engine/network/transport/fragments/packet_size.js +0 -107
  816. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts +0 -6
  817. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts.map +0 -1
  818. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.js +0 -16
  819. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts +0 -7
  820. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts.map +0 -1
  821. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.js +0 -46
  822. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts +0 -10
  823. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts.map +0 -1
  824. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.js +0 -127
  825. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts +0 -7
  826. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts.map +0 -1
  827. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.js +0 -39
@@ -1,111 +1,129 @@
1
- import { CodeChunk } from "../../../../compiler/CodeChunk.js";
2
- import { chunk_CRM_FROM_REC2020_TO_REC709 } from "../../conversion/chunk_CRM_FROM_REC2020_TO_REC709.js";
3
- import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
4
- import { chunk_eotfSt2084 } from "../../iCtCp/chunk_eotf_st2084.js";
5
- import { chunk_iCtCp_to_rgb } from "../../iCtCp/chunk_iCtCp_to_rgb.js";
6
- import { chunk_inverseEotfSt2084 } from "../../iCtCp/chunk_inverse_eotf_st2084.js";
7
- import { chunk_rgb_to_iCtCp } from "../../iCtCp/chunk_rgb_to_iCtCp.js";
8
- import { chunk_gt_evaluate_curve } from "./chunk_gt_evaluate_curve.js";
9
- import { GT7_TONE_MAPPING_CURVE_STRUCT } from "./GT7_TONE_MAPPING_CURVE_STRUCT.js";
10
-
11
- /**
12
- * `REF_LUMINANCE` is the paper's "Standard 1.0 unit" and must stay equal to the `REFERENCE_LUMINANCE` in
13
- * {@link chunk_eotfSt2084} / {@link chunk_inverseEotfSt2084}, which this function round-trips through. It is
14
- * not the BT.2408 SDR white of 203 nits used on the CPU side; see the note on `chunk_eotfSt2084` for how the
15
- * three reference whites in this engine relate.
16
- *
17
- * @see "Driving Toward Reality: Physically Based Tone Mapping and Perceptual Fidelity in Gran Turismo 7"
18
- * @see chunk_eotfSt2084
19
- * @type {CodeChunk}
20
- */
21
- export const chunk_tonemap_gt7 = CodeChunk.from(
22
- //language=WGSL
23
- `
24
- fn tonemap_gt7(
25
- rgb_rec709:vec3<f32>,
26
- peak_nits: f32,
27
- paper_white_nits: f32,
28
- ) -> vec3<f32>{
29
-
30
- // Constants for the GT7 "Standard" 1.0 unit
31
- const REF_LUMINANCE: f32 = 100.0;
32
-
33
- // input is in rec.709, the tonemapper is in rec.2020
34
- var color_linear = CRM_FROM_REC709_TO_REC2020 * rgb_rec709;
35
-
36
- // normalize to paper white
37
- let paper_white = paper_white_nits / REF_LUMINANCE;
38
- color_linear *= paper_white;
39
-
40
- var curve: ${GT7_TONE_MAPPING_CURVE_STRUCT.wgsl_ref};
41
- // initialize curve
42
- const alpha = 0.25;
43
- const gray_point = 0.538;
44
- const linear_section = 0.444;
45
- const toe_strength = 1.280;
46
-
47
- let peak_intensity = peak_nits / REF_LUMINANCE;
48
-
49
- //
50
- curve.peakIntensity = peak_intensity;
51
- curve.midPoint = gray_point;
52
- curve.linearSection = linear_section;
53
- curve.toeStrength = toe_strength;
54
-
55
- // Pre-compute constants for the shoulder region.
56
- let k = (linear_section - 1.0) / (alpha - 1.0);
57
- curve.kA = peak_intensity * linear_section + peak_intensity * k;
58
- curve.kB = -peak_intensity * k * exp(linear_section / k);
59
- curve.kC = -1.0 / (k * peak_intensity);
60
-
61
- //
62
- // PATH A: Create "Twisted" RGB (Per-channel Mapping)
63
- // This creates the "film/camera-like" look where highlights shift to CMY/White
64
- var rgb_twisted: vec3<f32>;
65
- rgb_twisted.r = gt_evaluate_curve(&curve, color_linear.r);
66
- rgb_twisted.g = gt_evaluate_curve(&curve, color_linear.g);
67
- rgb_twisted.b = gt_evaluate_curve(&curve, color_linear.b);
68
-
69
- // PATH B: Create "Untwisted" RGB (Luminance from Twisted, Chroma from Original)
70
- // 1. Get ICtCp for both Original and Twisted
71
- let ictcp_original = rgb_to_iCtCp(color_linear);
72
- let ictcp_twisted = rgb_to_iCtCp(rgb_twisted);
73
-
74
- const CHROMA_START_PQ = 0.7;
75
- const CHROMA_END_PQ = 1.0;
76
-
77
- // 2. Calculate Whitening Scale based on Original Luminance (PQ encoded)
78
- // As luminance increases, we reduce chroma to avoid artifacts and simulate saturation limit
79
- let luminance_pq = ictcp_original.x; // rgb_to_iCtCp returns PQ encoding in X
80
- let shoulder_saturation_scale = 1.0 - smoothstep(CHROMA_START_PQ, CHROMA_END_PQ, luminance_pq);
81
-
82
- // Blend Ratio: 0.0 = Fully Untwisted (Preserves hue/sat), 1.0 = Fully Twisted (Camera-like shift)
83
- const BLEND_RATIO = 0.7;
84
-
85
- // Mix between the Twisted (Per-channel) and Untwisted (ICtCp reconstructed) versions
86
- let ictcp_final = vec3<f32>(
87
- ictcp_twisted.x,
88
- mix(ictcp_original.yz * shoulder_saturation_scale, ictcp_twisted.yz, BLEND_RATIO)
89
- );
90
-
91
- var final_color = iCtCp_to_rgb(ictcp_final);
92
-
93
- // renormalize
94
- final_color /= paper_white;
95
-
96
- // go back to rec.709
97
- final_color = CRM_FROM_REC2020_TO_REC709 * final_color;
98
-
99
- return final_color;
100
- }
101
- `, [
102
- chunk_CRM_FROM_REC709_TO_REC2020,
103
- chunk_CRM_FROM_REC2020_TO_REC709,
104
- GT7_TONE_MAPPING_CURVE_STRUCT.declaration_chunk,
105
- chunk_gt_evaluate_curve,
106
- chunk_iCtCp_to_rgb,
107
- chunk_rgb_to_iCtCp,
108
- chunk_eotfSt2084,
109
- chunk_inverseEotfSt2084,
110
- ]
1
+ import { CodeChunk } from "../../../../compiler/CodeChunk.js";
2
+ import { chunk_CRM_FROM_REC2020_TO_REC709 } from "../../conversion/chunk_CRM_FROM_REC2020_TO_REC709.js";
3
+ import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
4
+ import { chunk_eotfSt2084 } from "../../iCtCp/chunk_eotf_st2084.js";
5
+ import { chunk_iCtCp_to_rgb } from "../../iCtCp/chunk_iCtCp_to_rgb.js";
6
+ import { chunk_inverseEotfSt2084 } from "../../iCtCp/chunk_inverse_eotf_st2084.js";
7
+ import { chunk_rgb_to_iCtCp } from "../../iCtCp/chunk_rgb_to_iCtCp.js";
8
+ import { chunk_gt_evaluate_curve } from "./chunk_gt_evaluate_curve.js";
9
+ import { GT7_TONE_MAPPING_CURVE_STRUCT } from "./GT7_TONE_MAPPING_CURVE_STRUCT.js";
10
+
11
+ /**
12
+ * GT7 tone mapping, after Polyphony's sample code (`gt7_tone_mapping.cpp`, SIGGRAPH 2025 PBS course).
13
+ *
14
+ * One function for every display, which is the point of the operator: `peak_nits` is the display's peak, and
15
+ * `paper_white_nits` is the luminance the input's 1.0 shows at. The output is in units of that paper white, in
16
+ * Rec.709. SDR is the sample code's `initializeAsSDR()`: peak and paper white both at {@link chunk_PAPER_WHITE_NITS},
17
+ * so the output reaches 1.0 and no further. HDR keeps the same paper white and raises the peak, so everything below
18
+ * the SDR shoulder comes out the same on both.
19
+ *
20
+ * It follows the sample code in the curve, the chroma fade, the blend ratio and the clamp at the target. It blends
21
+ * in ICtCp where the sample code blends in RGB. That costs up to 0.3 sRGB codes in the mid-tones and up to 14 in
22
+ * saturated highlights, measured against the compiled sample code over 648 inputs.
23
+ *
24
+ * `REF_LUMINANCE` is the paper's "Standard 1.0 unit" and must stay equal to the `REFERENCE_LUMINANCE` in
25
+ * {@link chunk_eotfSt2084} / {@link chunk_inverseEotfSt2084}, which this function round-trips through. It is
26
+ * not the BT.2408 SDR white of 203 nits used on the CPU side; see the note on `chunk_eotfSt2084` for how the
27
+ * three reference whites in this engine relate.
28
+ *
29
+ * @see "Driving Toward Reality: Physically Based Tone Mapping and Perceptual Fidelity in Gran Turismo 7"
30
+ * @see chunk_eotfSt2084
31
+ * @type {CodeChunk}
32
+ */
33
+ export const chunk_tonemap_gt7 = CodeChunk.from(
34
+ //language=WGSL
35
+ `
36
+ fn tonemap_gt7(
37
+ rgb_rec709:vec3<f32>,
38
+ peak_nits: f32,
39
+ paper_white_nits: f32,
40
+ ) -> vec3<f32>{
41
+
42
+ // Constants for the GT7 "Standard" 1.0 unit
43
+ const REF_LUMINANCE: f32 = 100.0;
44
+
45
+ // input is in rec.709, the tonemapper is in rec.2020
46
+ var color_linear = CRM_FROM_REC709_TO_REC2020 * rgb_rec709;
47
+
48
+ // normalize to paper white
49
+ let paper_white = paper_white_nits / REF_LUMINANCE;
50
+ color_linear *= paper_white;
51
+
52
+ var curve: ${GT7_TONE_MAPPING_CURVE_STRUCT.wgsl_ref};
53
+ // initialize curve
54
+ const alpha = 0.25;
55
+ const gray_point = 0.538;
56
+ const linear_section = 0.444;
57
+ const toe_strength = 1.280;
58
+
59
+ let peak_intensity = peak_nits / REF_LUMINANCE;
60
+
61
+ //
62
+ curve.peakIntensity = peak_intensity;
63
+ curve.midPoint = gray_point;
64
+ curve.linearSection = linear_section;
65
+ curve.toeStrength = toe_strength;
66
+
67
+ // Pre-compute constants for the shoulder region.
68
+ let k = (linear_section - 1.0) / (alpha - 1.0);
69
+ curve.kA = peak_intensity * linear_section + peak_intensity * k;
70
+ curve.kB = -peak_intensity * k * exp(linear_section / k);
71
+ curve.kC = -1.0 / (k * peak_intensity);
72
+
73
+ //
74
+ // PATH A: Create "Twisted" RGB (Per-channel Mapping)
75
+ // This creates the "film/camera-like" look where highlights shift to CMY/White
76
+ var rgb_twisted: vec3<f32>;
77
+ rgb_twisted.r = gt_evaluate_curve(&curve, color_linear.r);
78
+ rgb_twisted.g = gt_evaluate_curve(&curve, color_linear.g);
79
+ rgb_twisted.b = gt_evaluate_curve(&curve, color_linear.b);
80
+
81
+ // PATH B: Create "Untwisted" RGB (Luminance from Twisted, Chroma from Original)
82
+ // 1. Get ICtCp for both Original and Twisted
83
+ let ictcp_original = rgb_to_iCtCp(color_linear);
84
+ let ictcp_twisted = rgb_to_iCtCp(rgb_twisted);
85
+
86
+ // GT7ToneMapping::fadeStart_ and fadeEnd_, as fractions of the target's own intensity
87
+ const FADE_START = 0.98;
88
+ const FADE_END = 1.16;
89
+
90
+ // 2. Fade the original's chroma toward white as its intensity reaches the target's. Relative to the target,
91
+ // so the fade sits at the shoulder for every peak, a 250 cd/m² SDR target as much as a 1000 cd/m² display.
92
+ let target_intensity = rgb_to_iCtCp(vec3<f32>(peak_intensity)).x;
93
+ let shoulder_saturation_scale = 1.0 - smoothstep(FADE_START, FADE_END, ictcp_original.x / target_intensity);
94
+
95
+ // GT7ToneMapping::blendRatio_: the untwisted colour's share, 0.6, so the twisted colour keeps 0.4
96
+ const BLEND_RATIO = 0.6;
97
+
98
+ // Mix between the Twisted (Per-channel) and Untwisted (ICtCp reconstructed) versions. The sample code blends
99
+ // in RGB; this blends in ICtCp, which the talk says works as well (slides 150 and 153).
100
+ let ictcp_final = vec3<f32>(
101
+ ictcp_twisted.x,
102
+ mix(ictcp_twisted.yz, ictcp_original.yz * shoulder_saturation_scale, BLEND_RATIO)
103
+ );
104
+
105
+ var final_color = iCtCp_to_rgb(ictcp_final);
106
+
107
+ // never past the target: the sample code's min(blended, framebufferLuminanceTarget_). The shoulder converges
108
+ // on 1.185 times the peak, so without this a white overshoots the display by 18.5%.
109
+ final_color = min(final_color, vec3<f32>(peak_intensity));
110
+
111
+ // renormalize
112
+ final_color /= paper_white;
113
+
114
+ // go back to rec.709
115
+ final_color = CRM_FROM_REC2020_TO_REC709 * final_color;
116
+
117
+ return final_color;
118
+ }
119
+ `, [
120
+ chunk_CRM_FROM_REC709_TO_REC2020,
121
+ chunk_CRM_FROM_REC2020_TO_REC709,
122
+ GT7_TONE_MAPPING_CURVE_STRUCT.declaration_chunk,
123
+ chunk_gt_evaluate_curve,
124
+ chunk_iCtCp_to_rgb,
125
+ chunk_rgb_to_iCtCp,
126
+ chunk_eotfSt2084,
127
+ chunk_inverseEotfSt2084,
128
+ ]
111
129
  )
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Where a ray starts from a surface position rebuilt from the depth buffer.
3
+ *
4
+ * {@link chunk_offset_ray} offsets in proportion to the position's own magnitude, which is the error of
5
+ * a ray's hit. A position rebuilt from depth is off by an amount that grows with its distance from the
6
+ * camera instead, so ground near the world's origin seen from far away gets almost no offset (1.5e-5 m
7
+ * at y = 0, whatever the distance), starts under its own surface and shadows itself. This first steps
8
+ * along the geometric normal in proportion to that distance.
9
+ *
10
+ * `DEPTH_RAY_NORMAL_OFFSET` is measured: on an RTX 4090 at 1578×802 (contact-shadow playground, still
11
+ * camera), counting pixels a ray toward the sun's centre finds shadowed, `offset_ray` alone gives
12
+ * 180,140 in `combine` and 96,352 in `grazing` (the far ground shadowing itself); 43,101 and 45,579 at
13
+ * 1e-6 of the distance; 25,166 and 9,709 at 1e-5, where both settle (3e-5 … 3e-4 within 0.2% of it); at
14
+ * 1e-3 real contacts start to go. 3e-5 is three times the onset.
15
+ *
16
+ * @type {CodeChunk}
17
+ */
18
+ export const chunk_offset_ray_from_depth: CodeChunk;
19
+ import { CodeChunk } from "../../../compiler/CodeChunk.js";
20
+ //# sourceMappingURL=chunk_offset_ray_from_depth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_offset_ray_from_depth.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;GAgBG;AACH,0CAFU,SAAS,CAcZ;0BAhCmB,gCAAgC"}
@@ -0,0 +1,33 @@
1
+ import { CodeChunk } from "../../../compiler/CodeChunk.js";
2
+ import { chunk_offset_ray } from "./chunk_offset_ray.js";
3
+
4
+ /**
5
+ * Where a ray starts from a surface position rebuilt from the depth buffer.
6
+ *
7
+ * {@link chunk_offset_ray} offsets in proportion to the position's own magnitude, which is the error of
8
+ * a ray's hit. A position rebuilt from depth is off by an amount that grows with its distance from the
9
+ * camera instead, so ground near the world's origin seen from far away gets almost no offset (1.5e-5 m
10
+ * at y = 0, whatever the distance), starts under its own surface and shadows itself. This first steps
11
+ * along the geometric normal in proportion to that distance.
12
+ *
13
+ * `DEPTH_RAY_NORMAL_OFFSET` is measured: on an RTX 4090 at 1578×802 (contact-shadow playground, still
14
+ * camera), counting pixels a ray toward the sun's centre finds shadowed, `offset_ray` alone gives
15
+ * 180,140 in `combine` and 96,352 in `grazing` (the far ground shadowing itself); 43,101 and 45,579 at
16
+ * 1e-6 of the distance; 25,166 and 9,709 at 1e-5, where both settle (3e-5 … 3e-4 within 0.2% of it); at
17
+ * 1e-3 real contacts start to go. 3e-5 is three times the onset.
18
+ *
19
+ * @type {CodeChunk}
20
+ */
21
+ export const chunk_offset_ray_from_depth = CodeChunk.from(
22
+ //language=WGSL
23
+ `
24
+ const DEPTH_RAY_NORMAL_OFFSET: f32 = 3e-5;
25
+
26
+ fn offset_ray_from_depth(position: vec3<f32>, geometric_normal: vec3<f32>, camera_position: vec3<f32>) -> vec3<f32> {
27
+ let view_distance = length(position - camera_position);
28
+
29
+ return offset_ray(position + geometric_normal * (DEPTH_RAY_NORMAL_OFFSET * view_distance), geometric_normal);
30
+ }
31
+ `, [
32
+ chunk_offset_ray
33
+ ]);
@@ -1,6 +1,10 @@
1
1
  /**
2
2
  * @see "Practical multiple scattering compensation for microfacet models" by Emmanuel Turquin
3
3
  * Approximates multiple-scattering to preserve energy.
4
+ *
5
+ * `specularF0` is the surface's F0, the metalness blend of `specularF0_dielectric` and `specularF0_metal`.
6
+ * The pure two are needed because the term is quadratic in F0 while metalness blends linearly; see
7
+ * `MULTISCATTER.md` in `chunk/material`.
4
8
  */
5
9
  export const chunk_compute_multiscattering_specular: CodeChunk;
6
10
  import { CodeChunk } from "../../compiler/CodeChunk.js";
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_compute_multiscattering_specular.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,+DAoCC;0BA1CyB,6BAA6B"}
1
+ {"version":3,"file":"chunk_compute_multiscattering_specular.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,+DA2CC;0BArDyB,6BAA6B"}
@@ -3,6 +3,10 @@ import { CodeChunk } from "../../compiler/CodeChunk.js";
3
3
  /**
4
4
  * @see "Practical multiple scattering compensation for microfacet models" by Emmanuel Turquin
5
5
  * Approximates multiple-scattering to preserve energy.
6
+ *
7
+ * `specularF0` is the surface's F0, the metalness blend of `specularF0_dielectric` and `specularF0_metal`.
8
+ * The pure two are needed because the term is quadratic in F0 while metalness blends linearly; see
9
+ * `MULTISCATTER.md` in `chunk/material`.
6
10
  */
7
11
  export const chunk_compute_multiscattering_specular = CodeChunk.from(
8
12
  // language=WGSL
@@ -10,6 +14,8 @@ export const chunk_compute_multiscattering_specular = CodeChunk.from(
10
14
  fn compute_multiscattering_specular(
11
15
  AB: vec2<f32>,
12
16
  specularF0: vec3<f32>,
17
+ specularF0_dielectric: vec3<f32>,
18
+ specularF0_metal: vec3<f32>,
13
19
  specularF90: f32,
14
20
  single_scatter: ptr<function, vec3<f32>>,
15
21
  multi_scatter: ptr<function, vec3<f32>>
@@ -30,13 +36,18 @@ fn compute_multiscattering_specular(
30
36
 
31
37
  let Ess_clamped = max(Ess, 1e-4); // Avoid div by zero
32
38
  let Kms = Ems / Ess_clamped;
39
+
40
+ // Fms = F0 makes the term quadratic in F0, so at the metalness blend of two F0s it is not the blend of
41
+ // the term at each: it falls short by Kms * A * m(1 - m)(F0_metal - F0_dielectric)^2. That is the
42
+ // product below, written without the metalness; zero for a pure dielectric and for a pure metal.
43
+ let F0_variance = (f0 - specularF0_dielectric) * (specularF0_metal - f0);
33
44
 
34
45
  // write out
35
46
  *single_scatter += FssEss;
36
47
 
37
48
  // The multi-scattering contribution is the single scattering scaled by (Fms * Kms).
38
49
  // Note: This maintains the "shape" of the specular highlight.
39
- *multi_scatter += FssEss * (Fms * Kms);
50
+ *multi_scatter += FssEss * (Fms * Kms) + Kms * AB.x * F0_variance;
40
51
 
41
52
  }
42
53
  `
@@ -1 +1 @@
1
- {"version":3,"file":"MATERIAL_SHADING_INFO_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js"],"names":[],"mappings":"AAIA,wDAgB0B;6BAnBG,4BAA4B"}
1
+ {"version":3,"file":"MATERIAL_SHADING_INFO_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js"],"names":[],"mappings":"AAIA,wDAuB0B;6BA1BG,4BAA4B"}
@@ -16,6 +16,13 @@ export const MATERIAL_SHADING_INFO_STRUCT = WebGPUStruct.from({
16
16
  specularF0: vec3f,
17
17
  specularF90: f32,
18
18
 
19
+ /**
20
+ * The two F0s that `specularF0` blends by metalness: the dielectric's (from its IOR) and the metal's (its
21
+ * base color). Multiple-scattering compensation needs them apart, see `compute_multiscattering_specular`.
22
+ */
23
+ specularF0_dielectric: vec3f,
24
+ specularF0_metal: vec3f,
25
+
19
26
  emissive: vec3f,
20
27
  opacity: f32,
21
28
  }, "MaterialShadingInfo");
@@ -0,0 +1,108 @@
1
+ # Multiple-scattering specular compensation
2
+
3
+ Single-scattering GGX loses the light that bounces between microfacets more than once, and it loses the most
4
+ on rough metals: a white metal at roughness 1 reflects 0.31 of a uniform sky (1 − ln 2 at N·V = 1). Both
5
+ paths now restore it with Turquin's compensation (2019, eq. 16), from the split-sum LUT `tSplitSum`:
6
+
7
+ - **Indirect**, `compute_indirect_specular` → `compute_multiscattering_specular`, as before.
8
+ - **Direct**, `re_direct_multiscatter`: one LUT fetch per pass that shades direct light, after its last
9
+ light, scales the accumulated direct specular by (single + multiple) / single scattering. The ratio
10
+ depends on N·V, roughness and F0 alone, so it serves every light. It is called by
11
+ `shade_standard_material_direct` (the deferred and the forward paths), its ReSTIR twin, and
12
+ `restir_resolve`, so a ReSTIR pixel fetches twice (its directional lights, then its resampled light);
13
+ that cost is not measured. Not by the ReSTIR target function: that is a resampling weight, and the
14
+ compensation is a per-pixel scale of one lobe.
15
+
16
+ It uses the material's roughness, not the roughness a sphere light widens it to in `re_direct_physical`.
17
+
18
+ ## Why GI does not already cover it
19
+
20
+ The indirect path's compensation scales the environment's light. The sun and local lights reach a pixel
21
+ only through `re_direct_physical`, a separate additive pass. Measured in the Sponza playground with its
22
+ shipped sun (intensity 7.2) and default IBL environment, the G-buffer read as rough gold
23
+ (F0 1.0, 0.766, 0.336) in both the deferred pass and the indirect resolve, each pass replayed into cleared
24
+ targets so that each pass's own contribution is measured. Means over shaded pixels, linear:
25
+
26
+ | view | roughness | direct red, before → after | indirect red | direct share | luminance lost before |
27
+ |---|---|---|---|---|---|
28
+ | sunlit exterior | 0.8 | 0.734 → 1.193 | 0.577 | 64% | 22% (26% in red) |
29
+ | sunlit exterior | 0.5 | 0.939 → 1.063 | 0.576 | 61% | 6% |
30
+ | shaded atrium | 0.8 | 0.013 → 0.022 | 1.170 | 2% | 0.6% |
31
+
32
+ Where the sun does not reach, GI dominates and the loss was already compensated. On sunlit rough metal,
33
+ direct light is most of the pixel. Dielectrics barely move: Turquin's scale at F0 0.04 is at most 1.09.
34
+
35
+ ## Metalness
36
+
37
+ Turquin's Fms = F0 makes the term quadratic in F0; metalness blends a dielectric F0 and a metal F0
38
+ linearly. Evaluated at the blend, the term falls short by Kms · A · m(1 − m)(F0_metal − F0_dielectric)², so
39
+ `compute_multiscattering_specular` takes both pure F0s (`specularF0_dielectric` and `specularF0_metal` on
40
+ `MaterialShadingInfo`) and adds that back, written as a product that needs no metalness. EEVEE, Frostbite
41
+ and three.js (#32190) evaluate the two separately and mix. For the albedo this is the same sum: exactly so
42
+ in the indirect path, and in the direct path summed over a sky. Per light it is not, because the direct
43
+ path applies the sum as one per-pixel ratio to the blend's lobe: under one directional light, a white
44
+ surface at metalness 0.5 comes out −1.8% to +7.8% of the separately evaluated mix (worst at roughness 1,
45
+ N·V 0.2, the light in the mirror direction). The blended F0 it replaced was up to 30% short there (roughness
46
+ 1, N·V 0.9, lit from beside the viewer).
47
+
48
+ The indirect diffuse sits under the dielectric part only, so it keeps what the *dielectric's* specular
49
+ leaves, not the blend's: the blend's also subtracted the metal's reflection, which the `1 − metalness` in
50
+ `diffuse` had already removed.
51
+
52
+ Measured against applying the term at the blended F0 (`deferred/white_furnace.spec.js`, white base,
53
+ metalness 0.5): the direct specular came up to 0.157 of the sky short, the indirect resolve up to 0.33.
54
+ Split, the direct is within 0.0028 of the blend and the indirect is the blend to one f32 ulp.
55
+
56
+ ## What the furnace holds
57
+
58
+ `deferred/white_furnace.spec.js` lights one texel through the real passes: `shader_deferred_main` (a
59
+ uniform sky as directional lights from GGX visible-normal sampling, or one point light through the cluster)
60
+ and `shader_resolve_indirect_lighting`. It holds:
61
+
62
+ 1. a white metal's direct light is the sky less only `F_Hauber`'s dip over the half vectors that view can
63
+ reach, a floor derived per N·V (0.32 – 0.99 before, 0.93 – 1.00 now);
64
+ 2. the direct specular at any metalness is the blend of the pure dielectric's and the pure metal's, white
65
+ and gold, every channel, to the 0.0028 the Fresnel offset leaves (1.7e-5 without it);
66
+ 3. the indirect resolve is that blend to float rounding (0.67 – 0.90 of the sky at metalness 0.25 – 0.75
67
+ before);
68
+ 4. for a pure dielectric and a pure gold, the indirect specular exceeds the direct by no less than 0 and no
69
+ more than the Fresnel dip the LUT drops: this, not the white furnace, is what sees where the LUT is read;
70
+ 5. a point light is compensated as a directional light is;
71
+ 6. the ReSTIR twin shades its directional lights as the brute-force pass does;
72
+ 7. each channel is shaded by its own colour alone.
73
+
74
+ Every mutant of the adversarial review is killed — the call doubled or moved ahead of the cluster loop, F0
75
+ for the variance, the variance's sign or half of it, either path's LUT read with its coordinates swapped or at
76
+ roughness², the guard at 1e-1, the diffuse coupled to the blend, a dielectric F0 of 0.08, the term at
77
+ 0.5, 0.9, 0.97 or 1.1 of itself, Fms = 1, the diffuse compensated too, a metal F0 of 1 in either path, one
78
+ channel's ratio for all or none for blue, the ReSTIR twin's call removed — but one: `restir_resolve`'s own
79
+ call. That pass needs the ray-tracing group and is not run at this tier.
80
+
81
+ What is left on purpose:
82
+
83
+ - **The direct lobe's Fresnel dip.** `F_Hauber(1, 1, VoH) = 1 − VoH (1 − VoH)⁴` is below 1, least at
84
+ VoH = 1/5 (1 − 256/3125); the compensation does not hide it. That is the 0.93 at low roughness, grazing.
85
+ - **The LUT's edge.** Texel centres are (i + 0.5) / 64, so roughness 1 reads 0.992's albedo: 3% at
86
+ roughness 1, N·V 1.
87
+ - **The resolve's horizon occlusion.** Its bent-normal specular occlusion cuts a lobe reaching under the
88
+ horizon even with nothing there: 0.0041 at roughness 0.51, N·V 0.10. The spec divides it out.
89
+
90
+ ## Cost
91
+
92
+ RTX 4090, Sponza from inside the atrium at 1898 × 982 (every pixel shaded), one sun, "Shade From G-Buffer"
93
+ with and without the call, interleaved in one capture (4-frame blocks, alternating order, 4 captures per
94
+ view): 79.8 against 74.6 µs and 89.6 against 83.0 µs, +7%, ~0.2% of the frame. A byte-identical twin read
95
+ 0.997 – 1.009 of the shipped pass.
96
+
97
+ ## Measured and not changed here
98
+
99
+ - **Direct diffuse is not coupled to the specular.** EON's albedo is the base colour, and the direct
100
+ path adds the specular on top, so a white dielectric returns 1.01 – 1.49 of a uniform sky through direct
101
+ light (the most at low roughness, grazing). The indirect path couples them.
102
+ - **Direct and indirect Fresnel differ.** The LUT splits `F_Hauber` into `f0 · A + f90 · B` and drops its
103
+ `− VoH (1 − VoH)⁴` term, so the indirect specular is up to 0.068 of the sky above the direct for the same
104
+ dielectric (0.288 against 0.220 at roughness 0.26, N·V 0.26).
105
+ - **Light the LPV injects is single-scattering.** `graph_lpv_shade.js` shades a probe ray's hit with its own
106
+ `BRDF_GGX` and (1 − F) diffuse, so in LPV mode a rough metal bounces its uncompensated direct light.
107
+ - **The path tracer is single-scattering**, so for rough metals it is not the reference: it reflects what
108
+ the rasterizer did before this.
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_compute_indirect_specular.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js"],"names":[],"mappings":"AAKA,wDAmDC;0BAxDyB,6BAA6B"}
1
+ {"version":3,"file":"chunk_compute_indirect_specular.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js"],"names":[],"mappings":"AAKA,wDAsEC;0BA3EyB,6BAA6B"}
@@ -13,6 +13,8 @@ fn compute_indirect_specular(
13
13
  view_direction: vec3<f32>,
14
14
  material_diffuse: vec3<f32>,
15
15
  material_specularF0: vec3<f32>,
16
+ material_specularF0_dielectric: vec3<f32>,
17
+ material_specularF0_metal: vec3<f32>,
16
18
  material_specularF90: f32,
17
19
  material_roughness: f32
18
20
  ) -> mat2x3<f32> {
@@ -28,17 +30,34 @@ fn compute_indirect_specular(
28
30
  compute_multiscattering_specular(
29
31
  f_ab,
30
32
  material_specularF0,
33
+ material_specularF0_dielectric,
34
+ material_specularF0_metal,
31
35
  material_specularF90,
32
36
  &single_scattering,
33
- &multi_scattering
37
+ &multi_scattering
34
38
  );
35
39
 
36
40
  let totalScattering = single_scattering + multi_scattering;
37
-
41
+
38
42
  var indirect_specular = radiance * totalScattering;
39
-
43
+
44
+ // diffuse lies under the dielectric part of the surface only (material_diffuse carries its 1 - metalness),
45
+ // so it keeps what the dielectric's specular leaves; the blend's would subtract the metal's reflection too
46
+ var single_scattering_dielectric = vec3<f32>( 0.0 );
47
+ var multi_scattering_dielectric = vec3<f32>( 0.0 );
48
+
49
+ compute_multiscattering_specular(
50
+ f_ab,
51
+ material_specularF0_dielectric,
52
+ material_specularF0_dielectric,
53
+ material_specularF0_dielectric,
54
+ material_specularF90,
55
+ &single_scattering_dielectric,
56
+ &multi_scattering_dielectric
57
+ );
58
+
40
59
  // diffuse refelections will only be a portion of whatever remain after spec
41
- let conservation_factor = saturate(vec3<f32>(1.0) - totalScattering);
60
+ let conservation_factor = saturate(vec3<f32>(1.0) - (single_scattering_dielectric + multi_scattering_dielectric));
42
61
 
43
62
  let cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;
44
63
  let diffuse = material_diffuse * conservation_factor;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Multiple-scattering compensation for the direct specular, once per pixel after the last light.
3
+ *
4
+ * `re_direct_physical` evaluates single-scattering GGX per light, which loses the energy that bounces
5
+ * between microfacets more than once: a rough white metal reflects 0.31 of a uniform sky. Turquin's
6
+ * compensation (2019, eq. 16) scales the single-scattering lobe by the ratio of the lobe's total albedo to its
7
+ * single-scattering albedo, both from the split-sum LUT the indirect path already samples. The ratio depends
8
+ * on N·V, roughness and the material's F0s alone, so one LUT fetch here serves every light the pass
9
+ * accumulated, and the indirect path's `compute_multiscattering_specular` supplies it, so the two paths cannot
10
+ * disagree.
11
+ *
12
+ * Requires `tSplitSum` and `sLinear` in the shader's resources. See `MULTISCATTER.md` beside this chunk.
13
+ *
14
+ * @type {CodeChunk}
15
+ */
16
+ export const chunk_re_direct_multiscatter: CodeChunk;
17
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
18
+ //# sourceMappingURL=chunk_re_direct_multiscatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_re_direct_multiscatter.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,2CAFU,SAAS,CAoCjB;0BAvDwB,6BAA6B"}
@@ -0,0 +1,56 @@
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { chunk_compute_multiscattering_specular } from "../light/chunk_compute_multiscattering_specular.js";
3
+ import { REFLECTED_LIGHT_STRUCT } from "../light/REFLECTED_LIGHT_STRUCT.js";
4
+ import { GEOMETRIC_SHADING_INFO_STRUCT } from "./GEOMETRIC_SHADING_INFO_STRUCT.js";
5
+ import { MATERIAL_SHADING_INFO_STRUCT } from "./MATERIAL_SHADING_INFO_STRUCT.js";
6
+
7
+ /**
8
+ * Multiple-scattering compensation for the direct specular, once per pixel after the last light.
9
+ *
10
+ * `re_direct_physical` evaluates single-scattering GGX per light, which loses the energy that bounces
11
+ * between microfacets more than once: a rough white metal reflects 0.31 of a uniform sky. Turquin's
12
+ * compensation (2019, eq. 16) scales the single-scattering lobe by the ratio of the lobe's total albedo to its
13
+ * single-scattering albedo, both from the split-sum LUT the indirect path already samples. The ratio depends
14
+ * on N·V, roughness and the material's F0s alone, so one LUT fetch here serves every light the pass
15
+ * accumulated, and the indirect path's `compute_multiscattering_specular` supplies it, so the two paths cannot
16
+ * disagree.
17
+ *
18
+ * Requires `tSplitSum` and `sLinear` in the shader's resources. See `MULTISCATTER.md` beside this chunk.
19
+ *
20
+ * @type {CodeChunk}
21
+ */
22
+ export const chunk_re_direct_multiscatter = CodeChunk.from(
23
+ //language=WGSL
24
+ `
25
+ fn re_direct_multiscatter(
26
+ geometry: ${GEOMETRIC_SHADING_INFO_STRUCT.wgsl_ref},
27
+ material: ${MATERIAL_SHADING_INFO_STRUCT.wgsl_ref},
28
+ reflectedLight: ptr<function, ${REFLECTED_LIGHT_STRUCT.wgsl_ref}>
29
+ ) {
30
+ let NoV = saturate( dot( geometry.shading_normal, geometry.view_direction ) );
31
+
32
+ let f_ab = textureSampleLevel( tSplitSum, sLinear, vec2( NoV, material.roughness ), 0.0 ).rg;
33
+
34
+ var single_scattering = vec3<f32>( 0.0 );
35
+ var multi_scattering = vec3<f32>( 0.0 );
36
+
37
+ compute_multiscattering_specular(
38
+ f_ab,
39
+ material.specularF0,
40
+ material.specularF0_dielectric,
41
+ material.specularF0_metal,
42
+ material.specularF90,
43
+ &single_scattering,
44
+ &multi_scattering
45
+ );
46
+
47
+ // single scattering is at least F0 * A, so this guards only an F0 of 0, whose multiple scattering is 0 too
48
+ (*reflectedLight).specular *= 1.0 + multi_scattering / max( single_scattering, vec3<f32>( 1e-4 ) );
49
+ }
50
+ `, [
51
+ GEOMETRIC_SHADING_INFO_STRUCT.declaration_chunk,
52
+ MATERIAL_SHADING_INFO_STRUCT.declaration_chunk,
53
+ REFLECTED_LIGHT_STRUCT.declaration_chunk,
54
+ chunk_compute_multiscattering_specular,
55
+ ]
56
+ );
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_re_indirect_specular_physical.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,kDAFU,SAAS,CAiCZ;0BAzCmB,6BAA6B"}
1
+ {"version":3,"file":"chunk_re_indirect_specular_physical.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,kDAFU,SAAS,CAmCZ;0BA3CmB,6BAA6B"}