@woosh/meep-engine 3.47.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 (619) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/editor/particles/effect/ParticleReferenceSimulation.d.ts +1 -2
  3. package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
  4. package/editor/particles/effect/ParticleReferenceSimulation.js +2 -4
  5. package/editor/view/particles/effect/ParticleGraphEditorView.js +1 -1
  6. package/package.json +1 -1
  7. package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +27 -11
  8. package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
  9. package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +11 -0
  10. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +2 -2
  11. package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
  12. package/src/engine/graphics/ecs/particles/ParticleEffect.js +7 -7
  13. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +8 -0
  14. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
  15. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +11 -3
  16. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +26 -0
  17. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts.map +1 -0
  18. package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +91 -0
  19. package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -2
  20. package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
  21. package/src/engine/graphics3/GraphicsEngine.js +8 -1
  22. package/src/engine/graphics3/ParticipatingMedia.d.ts +84 -1
  23. package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
  24. package/src/engine/graphics3/ParticipatingMedia.js +139 -5
  25. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +6 -2
  26. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -1
  27. package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +29 -4
  28. package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts +10 -0
  29. package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts.map +1 -0
  30. package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.js +38 -0
  31. package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
  32. package/src/engine/graphics3/ParticipatingMediaSystem.js +46 -3
  33. package/src/engine/network/NetworkSession.d.ts +16 -5
  34. package/src/engine/network/NetworkSession.d.ts.map +1 -1
  35. package/src/engine/network/NetworkSession.js +104 -7
  36. package/src/engine/network/README.md +27 -1
  37. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +40 -18
  38. package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
  39. package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +180 -190
  40. package/src/engine/network/replication/Replicator.d.ts +15 -4
  41. package/src/engine/network/replication/Replicator.d.ts.map +1 -1
  42. package/src/engine/network/replication/Replicator.js +50 -16
  43. package/src/engine/network/state/RecordArrivalRing.d.ts +57 -0
  44. package/src/engine/network/state/RecordArrivalRing.d.ts.map +1 -0
  45. package/src/engine/network/state/RecordArrivalRing.js +144 -0
  46. package/src/engine/physics/cloth/MEASUREMENTS.md +354 -0
  47. package/src/engine/physics/cloth/PLAN.md +85 -5
  48. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +0 -12
  49. package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
  50. package/src/engine/physics/cloth/ecs/ClothInstance.js +0 -13
  51. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +2 -1
  52. package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
  53. package/src/engine/physics/cloth/ecs/ClothSystem.js +7 -1
  54. package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
  55. package/src/engine/physics/cloth/ecs/ClothWorld.js +4 -15
  56. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +2 -1
  57. package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
  58. package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +6 -1
  59. package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
  60. package/src/engine/physics/cloth/ecs/cloth_build_rows.js +20 -10
  61. package/src/engine/physics/cloth/playground/collide.html +5 -3
  62. package/src/engine/physics/cloth/playground/collide_main.js +14 -13
  63. package/src/engine/physics/cloth/solver/ClothState.d.ts +30 -2
  64. package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
  65. package/src/engine/physics/cloth/solver/ClothState.js +62 -4
  66. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +11 -3
  67. package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
  68. package/src/engine/physics/cloth/solver/cloth_self_find.js +52 -11
  69. package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts +42 -0
  70. package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts.map +1 -0
  71. package/src/engine/physics/cloth/solver/cloth_self_radius.js +64 -0
  72. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +99 -24
  73. package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
  74. package/src/engine/physics/cloth/solver/cloth_solver_constants.js +102 -25
  75. package/src/engine/physics/cloth/solver/cloth_step.d.ts +5 -1
  76. package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
  77. package/src/engine/physics/cloth/solver/cloth_step.js +13 -3
  78. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +0 -1
  79. package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
  80. package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -14
  81. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +23 -4
  82. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
  83. package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +36 -8
  84. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
  85. package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +4 -2
  86. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  87. package/src/shade/device/mock/SoftwareGPUDevice.d.ts +15 -0
  88. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  89. package/src/shade/device/mock/SoftwareGPUDevice.js +21 -0
  90. package/src/shade/device/pipeline/ComputePipelineManager.d.ts +20 -0
  91. package/src/shade/device/pipeline/ComputePipelineManager.d.ts.map +1 -1
  92. package/src/shade/device/pipeline/ComputePipelineManager.js +80 -6
  93. package/src/shade/device/pipeline/PipelineEnquiry.d.ts +52 -0
  94. package/src/shade/device/pipeline/PipelineEnquiry.d.ts.map +1 -0
  95. package/src/shade/device/pipeline/PipelineEnquiry.js +63 -0
  96. package/src/shade/device/pipeline/RenderPipelineManager.d.ts +21 -0
  97. package/src/shade/device/pipeline/RenderPipelineManager.d.ts.map +1 -1
  98. package/src/shade/device/pipeline/RenderPipelineManager.js +84 -4
  99. package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts +137 -0
  100. package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts.map +1 -0
  101. package/src/shade/playground/contact_shadows/ContactShadowLab.js +654 -0
  102. package/src/shade/playground/contact_shadows/README.md +126 -0
  103. package/src/shade/playground/contact_shadows/index.html +191 -0
  104. package/src/shade/playground/contact_shadows/main.d.ts +2 -0
  105. package/src/shade/playground/contact_shadows/main.d.ts.map +1 -0
  106. package/src/shade/playground/contact_shadows/main.js +888 -0
  107. package/src/shade/playground/contact_shadows/scenes.d.ts +48 -0
  108. package/src/shade/playground/contact_shadows/scenes.d.ts.map +1 -0
  109. package/src/shade/playground/contact_shadows/scenes.js +620 -0
  110. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts +36 -0
  111. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -0
  112. package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +245 -0
  113. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts +15 -0
  114. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -0
  115. package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +120 -0
  116. package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts +55 -0
  117. package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts.map +1 -0
  118. package/src/shade/playground/contact_shadows/shader_contact_lab_stats.js +216 -0
  119. package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts +20 -0
  120. package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts.map +1 -0
  121. package/src/shade/playground/contact_shadows/shader_contact_lab_view.js +114 -0
  122. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts +11 -0
  123. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -0
  124. package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +90 -0
  125. package/src/shade/playground/contact_shadows/textures.d.ts +16 -0
  126. package/src/shade/playground/contact_shadows/textures.d.ts.map +1 -0
  127. package/src/shade/playground/contact_shadows/textures.js +123 -0
  128. package/src/shade/playground/particle_ecs/README.md +1 -1
  129. package/src/shade/playground/particle_ecs/effects/flame.json +1932 -1881
  130. package/src/shade/playground/particle_ecs/effects/smoke.json +99 -1
  131. package/src/shade/playground/particle_ecs/effects/soot.json +152 -145
  132. package/src/shade/playground/tonemap_sdr/README.md +90 -0
  133. package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts +105 -0
  134. package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts.map +1 -0
  135. package/src/shade/playground/tonemap_sdr/ToneMapCompare.js +380 -0
  136. package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts +32 -0
  137. package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts.map +1 -0
  138. package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js +104 -0
  139. package/src/shade/playground/tonemap_sdr/index.html +90 -0
  140. package/src/shade/playground/tonemap_sdr/main.d.ts +2 -0
  141. package/src/shade/playground/tonemap_sdr/main.d.ts.map +1 -0
  142. package/src/shade/playground/tonemap_sdr/main.js +306 -0
  143. package/src/shade/playground/tonemap_sdr/scenes.d.ts +26 -0
  144. package/src/shade/playground/tonemap_sdr/scenes.d.ts.map +1 -0
  145. package/src/shade/playground/tonemap_sdr/scenes.js +404 -0
  146. package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
  147. package/src/shade/playground/volumetrics_froxel/main.js +85 -4
  148. package/src/shade/playground/water_refraction/README.md +26 -18
  149. package/src/shade/playground/water_refraction/index.html +1 -1
  150. package/src/shade/renderer/Renderer.d.ts +35 -3
  151. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  152. package/src/shade/renderer/Renderer.js +208 -12
  153. package/src/shade/renderer/ShadeToneMappingMode.d.ts +14 -0
  154. package/src/shade/renderer/ShadeToneMappingMode.d.ts.map +1 -0
  155. package/src/shade/renderer/ShadeToneMappingMode.js +30 -0
  156. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +9 -0
  157. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  158. package/src/shade/renderer/animation/GPUAnimationManager.js +14 -0
  159. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
  160. package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +5 -3
  161. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +7 -0
  162. package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
  163. package/src/shade/renderer/buffer/table/GPUDatabase.js +12 -0
  164. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts +8 -0
  165. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
  166. package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +12 -0
  167. package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
  168. package/src/shade/renderer/camera/GPUCameraContext.js +19 -8
  169. package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
  170. package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +4 -0
  171. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
  172. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +4 -0
  173. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts.map +1 -1
  174. package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +4 -0
  175. package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
  176. package/src/shade/renderer/deferred/shader_deferred_main.js +3 -0
  177. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts +6 -0
  178. package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
  179. package/src/shade/renderer/deferred/shader_tonemap_HDR.js +13 -3
  180. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts +9 -0
  181. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +1 -0
  182. package/src/shade/renderer/deferred/shader_tonemap_HDR_none.js +63 -0
  183. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts +10 -0
  184. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
  185. package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.js +87 -0
  186. package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts +6 -0
  187. package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +1 -1
  188. package/src/shade/renderer/deferred/shader_tonemap_LDR.js +23 -5
  189. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts +9 -0
  190. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +1 -0
  191. package/src/shade/renderer/deferred/shader_tonemap_LDR_none.js +68 -0
  192. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts +10 -0
  193. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
  194. package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.js +73 -0
  195. package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
  196. package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +58 -9
  197. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +35 -25
  198. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  199. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +97 -196
  200. package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +1 -1
  201. package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +121 -129
  202. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
  203. package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +3 -0
  204. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
  205. package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -0
  206. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
  207. package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +4 -0
  208. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
  209. package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
  210. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
  211. package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -0
  212. package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.d.ts.map +1 -1
  213. package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.js +4 -0
  214. package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
  215. package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +4 -0
  216. package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +131 -1
  217. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +7 -0
  218. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -1
  219. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +45 -38
  220. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +2 -0
  221. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -1
  222. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +81 -79
  223. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +2 -0
  224. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -1
  225. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +5 -3
  226. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts +21 -0
  227. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts.map +1 -0
  228. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.js +42 -0
  229. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts +19 -0
  230. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts.map +1 -0
  231. package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.js +44 -0
  232. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +23 -5
  233. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -1
  234. package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +139 -23
  235. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts +25 -0
  236. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts.map +1 -0
  237. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +179 -0
  238. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
  239. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
  240. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +7 -16
  241. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +3 -4
  242. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
  243. package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +6 -23
  244. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +11 -0
  245. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
  246. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +14 -3
  247. package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts +10 -0
  248. package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts.map +1 -1
  249. package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.js +13 -3
  250. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +10 -0
  251. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
  252. package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +14 -0
  253. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts +26 -0
  254. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts.map +1 -0
  255. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.js +52 -0
  256. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts +32 -0
  257. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts.map +1 -0
  258. package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.js +89 -0
  259. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +10 -0
  260. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
  261. package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +20 -1
  262. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +10 -0
  263. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  264. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +294 -281
  265. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  266. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  267. package/src/shade/renderer/light/GPULightCollection.js +18 -1
  268. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts +8 -0
  269. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
  270. package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +234 -218
  271. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts +7 -0
  272. package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
  273. package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +13 -0
  274. package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts +7 -0
  275. package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts.map +1 -1
  276. package/src/shade/renderer/light/cluster/graph_build_light_clusters.js +16 -2
  277. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +10 -0
  278. package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
  279. package/src/shade/renderer/light/environment/execute_filter_environment_map.js +13 -0
  280. package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
  281. package/src/shade/renderer/lightmap/GPULightMap.js +3 -0
  282. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
  283. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
  284. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
  285. package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
  286. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  287. package/src/shade/renderer/material/GPUMaterialManager.d.ts +16 -4
  288. package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
  289. package/src/shade/renderer/material/GPUMaterialManager.js +38 -8
  290. package/src/shade/renderer/particles/DESIGN.md +49 -7
  291. package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +453 -0
  292. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +5 -1
  293. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
  294. package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +13 -5
  295. package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -2
  296. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
  297. package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +12 -0
  298. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +60 -0
  299. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
  300. package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +156 -0
  301. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +2 -2
  302. package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
  303. package/src/shade/renderer/particles/runtime/ParticleEmitter.js +8 -8
  304. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
  305. package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +6 -4
  306. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +7 -6
  307. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
  308. package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +91 -58
  309. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
  310. package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +10 -0
  311. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
  312. package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +5 -1
  313. package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
  314. package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +6 -0
  315. package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts +7 -0
  316. package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts.map +1 -1
  317. package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +18 -0
  318. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
  319. package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +1 -0
  320. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
  321. package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
  322. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts +11 -0
  323. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
  324. package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +16 -0
  325. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +10 -0
  326. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  327. package/src/shade/renderer/postprocess/gtao/GTAO.js +16 -0
  328. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  329. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +32 -10
  330. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  331. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
  332. package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -0
  333. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -1
  334. package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +6 -3
  335. package/src/shade/renderer/postprocess/taa/TAA.d.ts +12 -0
  336. package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
  337. package/src/shade/renderer/postprocess/taa/TAA.js +15 -0
  338. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -0
  339. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
  340. package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +13 -0
  341. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +31 -3
  342. package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
  343. package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +79 -4
  344. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +17 -0
  345. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
  346. package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +35 -4
  347. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts +7 -0
  348. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
  349. package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +182 -169
  350. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts +10 -0
  351. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
  352. package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +20 -1
  353. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +10 -0
  354. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -1
  355. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +18 -1
  356. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts +10 -0
  357. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
  358. package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +20 -1
  359. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts +7 -0
  360. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
  361. package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +187 -170
  362. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts +10 -0
  363. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
  364. package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +19 -1
  365. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +13 -0
  366. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
  367. package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +25 -1
  368. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts +10 -0
  369. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
  370. package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +20 -0
  371. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
  372. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -0
  373. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
  374. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -0
  375. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
  376. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
  377. package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
  378. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +7 -2
  379. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
  380. package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +12 -4
  381. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
  382. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +4 -3
  383. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
  384. package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +4 -3
  385. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +2 -1
  386. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
  387. package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +11 -3
  388. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
  389. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -3
  390. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
  391. package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -3
  392. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +15 -0
  393. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
  394. package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +35 -2
  395. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +14 -0
  396. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
  397. package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +32 -4
  398. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +17 -0
  399. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
  400. package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +34 -4
  401. package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts +5 -3
  402. package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts.map +1 -1
  403. package/src/shade/renderer/restir/di/chunk_restir_resolve.js +8 -3
  404. package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
  405. package/src/shade/renderer/restir/di/graph_restir_di.js +1 -0
  406. package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
  407. package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +5 -1
  408. package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
  409. package/src/shade/renderer/restir/reservoir/shader.js +7 -4
  410. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +7 -0
  411. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
  412. package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +13 -1
  413. package/src/shade/renderer/scene/GPUSceneContext.d.ts +10 -0
  414. package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
  415. package/src/shade/renderer/scene/GPUSceneContext.js +19 -0
  416. package/src/shade/renderer/scene/SceneManager.d.ts +9 -0
  417. package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
  418. package/src/shade/renderer/scene/SceneManager.js +11 -0
  419. package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts +11 -0
  420. package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts.map +1 -1
  421. package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.js +17 -0
  422. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +11 -0
  423. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
  424. package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +18 -1
  425. package/src/shade/renderer/shader/ComputeShader.d.ts +12 -0
  426. package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
  427. package/src/shade/renderer/shader/ComputeShader.js +53 -0
  428. package/src/shade/renderer/shader/ImageShader.d.ts +27 -8
  429. package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
  430. package/src/shade/renderer/shader/ImageShader.js +70 -1
  431. package/src/shade/renderer/shader/ShaderDescriptor.d.ts +21 -0
  432. package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
  433. package/src/shade/renderer/shader/ShaderDescriptor.js +71 -1
  434. package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts +17 -0
  435. package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts.map +1 -0
  436. package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.js +45 -0
  437. package/src/shade/renderer/shader/chunk/camera/chunk_screen_coordinate_to_view.js +3 -3
  438. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +1 -1
  439. package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -62
  440. package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +318 -0
  441. package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +237 -0
  442. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +17 -0
  443. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -0
  444. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +22 -0
  445. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts +14 -1
  446. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts.map +1 -1
  447. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js +28 -15
  448. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +12 -0
  449. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
  450. package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +128 -110
  451. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts +20 -0
  452. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts.map +1 -0
  453. package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js +33 -0
  454. package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts +4 -0
  455. package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts.map +1 -1
  456. package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js +12 -1
  457. package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.d.ts.map +1 -1
  458. package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js +7 -0
  459. package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +108 -0
  460. package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.d.ts.map +1 -1
  461. package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js +23 -4
  462. package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts +18 -0
  463. package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts.map +1 -0
  464. package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.js +56 -0
  465. package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.d.ts.map +1 -1
  466. package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js +2 -0
  467. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts +43 -0
  468. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts.map +1 -0
  469. package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.js +319 -0
  470. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +33 -0
  471. package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
  472. package/src/shade/renderer/shader/compiler/CodeChunk.js +140 -0
  473. package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts +74 -0
  474. package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts.map +1 -0
  475. package/src/shade/renderer/shader/compiler/CodeChunkChoice.js +166 -0
  476. package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +680 -0
  477. package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +86 -0
  478. package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts.map +1 -0
  479. package/src/shade/renderer/shader/compiler/ShaderSwitch.js +178 -0
  480. package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +67 -0
  481. package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts.map +1 -0
  482. package/src/shade/renderer/shader/compiler/ShaderSwitchSet.js +205 -0
  483. package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts +14 -0
  484. package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts.map +1 -0
  485. package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.js +13 -0
  486. package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts +65 -0
  487. package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts.map +1 -0
  488. package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.js +252 -0
  489. package/src/shade/renderer/shadow/contact/FINDINGS.md +413 -0
  490. package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts +29 -0
  491. package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts.map +1 -0
  492. package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.js +105 -0
  493. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +29 -0
  494. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -0
  495. package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +39 -0
  496. package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts +29 -0
  497. package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts.map +1 -0
  498. package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.js +92 -0
  499. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts +29 -0
  500. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -0
  501. package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +128 -0
  502. package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts +52 -0
  503. package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts.map +1 -0
  504. package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.js +358 -0
  505. package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts +10 -0
  506. package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts.map +1 -0
  507. package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.js +12 -0
  508. package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts +13 -0
  509. package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts.map +1 -0
  510. package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.js +14 -0
  511. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +14 -8
  512. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
  513. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +20 -86
  514. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts +14 -0
  515. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts.map +1 -0
  516. package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.js +79 -0
  517. package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
  518. package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +12 -12
  519. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
  520. package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +153 -151
  521. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts +13 -0
  522. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts.map +1 -0
  523. package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.js +48 -0
  524. package/src/shade/renderer/texture/GPUTextureContext.d.ts +10 -0
  525. package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
  526. package/src/shade/renderer/texture/GPUTextureContext.js +24 -0
  527. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +219 -0
  528. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -0
  529. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +671 -0
  530. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +26 -2
  531. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
  532. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +108 -4
  533. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +5 -1
  534. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  535. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +6 -0
  536. package/src/shade/renderer/volumetrics/NOTES.md +50 -0
  537. package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts.map +1 -1
  538. package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js +30 -1
  539. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +51 -13
  540. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
  541. package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +98 -13
  542. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +9 -0
  543. package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
  544. package/src/shade/renderer/volumetrics/SceneVolumetrics.js +78 -68
  545. package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +326 -0
  546. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +7 -4
  547. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -1
  548. package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +21 -9
  549. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts +19 -0
  550. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts.map +1 -0
  551. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.js +53 -0
  552. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +12 -3
  553. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -1
  554. package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +85 -48
  555. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +4 -1
  556. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -1
  557. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +4 -1
  558. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +4 -1
  559. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
  560. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +21 -1
  561. package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts +98 -0
  562. package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts.map +1 -0
  563. package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js +115 -0
  564. package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts +9 -0
  565. package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts.map +1 -0
  566. package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.js +24 -0
  567. package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts +27 -0
  568. package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts.map +1 -0
  569. package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.js +91 -0
  570. package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts +35 -0
  571. package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts.map +1 -0
  572. package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.js +92 -0
  573. package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts +10 -0
  574. package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts.map +1 -0
  575. package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.js +121 -0
  576. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  577. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -3
  578. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
  579. package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +311 -290
  580. package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.d.ts.map +1 -1
  581. package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.js +28 -49
  582. package/src/shade/renderer/water/GPUWaterRenderer.d.ts +3 -1
  583. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  584. package/src/shade/renderer/water/GPUWaterRenderer.js +24 -18
  585. package/src/shade/renderer/water/chunk_water_transport.d.ts +0 -1
  586. package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
  587. package/src/shade/renderer/water/chunk_water_transport.js +0 -17
  588. package/src/shade/renderer/water/shader_water.d.ts +4 -2
  589. package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
  590. package/src/shade/renderer/water/shader_water.js +27 -16
  591. package/src/shade/renderer/water/shader_water_avboit.d.ts +0 -4
  592. package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
  593. package/src/shade/renderer/water/shader_water_avboit.js +0 -63
  594. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
  595. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +43 -9
  596. package/src/engine/network/transport/Channel.d.ts +0 -85
  597. package/src/engine/network/transport/Channel.d.ts.map +0 -1
  598. package/src/engine/network/transport/ReliableCommandPipeline.d.ts +0 -155
  599. package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +0 -1
  600. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +0 -105
  601. package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +0 -1
  602. package/src/engine/network/transport/fragments/FragmentRetention.d.ts +0 -103
  603. package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +0 -1
  604. package/src/engine/network/transport/fragments/fragment_send.d.ts +0 -61
  605. package/src/engine/network/transport/fragments/fragment_send.d.ts.map +0 -1
  606. package/src/engine/network/transport/fragments/packet_size.d.ts +0 -99
  607. package/src/engine/network/transport/fragments/packet_size.d.ts.map +0 -1
  608. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts +0 -6
  609. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts.map +0 -1
  610. package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.js +0 -16
  611. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts +0 -7
  612. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts.map +0 -1
  613. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.js +0 -46
  614. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts +0 -10
  615. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts.map +0 -1
  616. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.js +0 -127
  617. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts +0 -7
  618. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts.map +0 -1
  619. package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.js +0 -39
@@ -0,0 +1,105 @@
1
+ /**
2
+ * The operators this page compares, in the order the shader's `switch` takes them.
3
+ *
4
+ * {@link GT7 } and {@link PBRNeutral } take a peak, {@link ToneMapCompareheadroom }; at 1 they are what the renderer runs
5
+ * on an SDR display. {@link GT7Reference } is SDR only and ignores it.
6
+ */
7
+ export type CompareOperator = number;
8
+ export namespace CompareOperator {
9
+ let GT7Reference: number;
10
+ let GT7: number;
11
+ let PBRNeutral: number;
12
+ }
13
+ export const COMPARE_OPERATOR_LABELS: string[];
14
+ /**
15
+ * The exposure that puts an exposed 0.18 at 0.18 out, per operator, as a multiplier. Solved by bisection on CPU ports
16
+ * of the same functions (each port checked against its source; the GT7 one against Polyphony's compiled sample code
17
+ * to 1.8e-4). Used only when "match mid-grey" is on. Both engine operators write mid-grey the same at every peak.
18
+ *
19
+ * @type {number[]}
20
+ */
21
+ export const MID_GREY_GAIN: number[];
22
+ /**
23
+ * How the comparison is laid out.
24
+ */
25
+ export type CompareLayout = number;
26
+ export namespace CompareLayout {
27
+ let Pair: number;
28
+ let Single: number;
29
+ let Split: number;
30
+ }
31
+ /**
32
+ * Draws the scene through the engine's tone mapping operators, in place of the engine's own tonemap.
33
+ *
34
+ * The engine still tonemaps the frame; this overwrites the canvas afterwards from the same HDR colour, so every
35
+ * operator sees exactly the input the renderer's tonemap pass sees. Exposure is the page's own, fixed: turn the engine's
36
+ * automatic exposure off, or the engine's picture and this one will not agree.
37
+ */
38
+ export class ToneMapCompare {
39
+ /**
40
+ * Off: the engine's own output is left on the canvas.
41
+ * @type {boolean}
42
+ */
43
+ enabled: boolean;
44
+ /**
45
+ * @type {CompareLayout}
46
+ */
47
+ layout: CompareLayout;
48
+ /**
49
+ * Which operator {@link CompareLayout.Single} and {@link CompareLayout.Split} show.
50
+ * @type {CompareOperator}
51
+ */
52
+ operator: CompareOperator;
53
+ /**
54
+ * The display's peak in units of SDR white, for the operators that take one. 1 is their SDR form. 4 is a
55
+ * 1000 cd/m² display under the 250 cd/m² paper white, which is what the renderer assumes for HDR.
56
+ *
57
+ * {@link CompareLayout.Single} shows the operator at this peak, clipped to SDR white; {@link CompareLayout.Split}
58
+ * shows it on the right half only, beside the SDR form.
59
+ * @type {number}
60
+ */
61
+ headroom: number;
62
+ /**
63
+ * In f-stops, over a scene value of 1.
64
+ * @type {number}
65
+ */
66
+ exposure_ev: number;
67
+ /**
68
+ * Give each operator the exposure that puts 0.18 at 0.18 out, so the pair compares shapes rather than brightness.
69
+ * @type {boolean}
70
+ */
71
+ match_mid_grey: boolean;
72
+ /**
73
+ * Convert to Display P3 before encoding. Right for a canvas configured `display-p3`, which is how the engine
74
+ * configures its canvas; every tonemap pass converts the same way. Off writes Rec.709 values into it, as
75
+ * `shader_tonemap_LDR` did before it converted.
76
+ * @type {boolean}
77
+ */
78
+ convert_to_p3: boolean;
79
+ extensions: (CaptureToneMapInput | DrawToneMapCompare)[];
80
+ }
81
+ /**
82
+ * The last thing at {@link FramePhase.BeforePresent}: hold on to the HDR colour the tonemapper is about to read.
83
+ */
84
+ declare class CaptureToneMapInput extends RenderExtension {
85
+ /**
86
+ * @param {ToneMapCompare} owner
87
+ */
88
+ constructor(owner: ToneMapCompare);
89
+ record(frame: any): void;
90
+ #private;
91
+ }
92
+ /**
93
+ * The first thing at {@link FramePhase.Overlay}: draw the comparison over the canvas the engine's tonemapper wrote.
94
+ */
95
+ declare class DrawToneMapCompare extends RenderExtension {
96
+ /**
97
+ * @param {ToneMapCompare} owner
98
+ */
99
+ constructor(owner: ToneMapCompare);
100
+ record(frame: any): void;
101
+ #private;
102
+ }
103
+ import { RenderExtension } from "../../renderer/extension/RenderExtension.js";
104
+ export {};
105
+ //# sourceMappingURL=ToneMapCompare.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToneMapCompare.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/tonemap_sdr/ToneMapCompare.js"],"names":[],"mappings":";;;;;;8BA6BU,MAAM;;;;;;AAiBhB,+CAIE;AAEF;;;;;;GAMG;AACH,4BAFU,MAAM,EAAE,CAEoC;;;;4BAK5C,MAAM;;;;;;AAiQhB;;;;;;GAMG;AACH;IACI;;;OAGG;IACH,SAFU,OAAO,CAEF;IAEf;;OAEG;IACH,QAFU,aAAa,CAEK;IAE5B;;;OAGG;IACH,UAFU,eAAe,CAEa;IAEtC;;;;;;;OAOG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,gBAFU,OAAO,CAEM;IAEvB;;;;;OAKG;IACH,eAFU,OAAO,CAEI;IAGjB,yDAA+E;CAEtF;AAhJD;;GAEG;AACH;IAUI;;OAEG;IACH,mBAFW,cAAc,EAMxB;IAED,yBAMC;;CACJ;AAED;;GAEG;AACH;IAUI;;OAEG;IACH,mBAFW,cAAc,EAMxB;IAED,yBA8BC;;CACJ;gCA5T+B,6CAA6C"}
@@ -0,0 +1,380 @@
1
+ import { FramePhase } from "../../renderer/extension/FramePhase.js";
2
+ import { FrameRecord } from "../../renderer/extension/FrameRecord.js";
3
+ import { PresentTarget } from "../../renderer/extension/PresentTarget.js";
4
+ import { RenderExtension } from "../../renderer/extension/RenderExtension.js";
5
+ import { SceneColor } from "../../renderer/extension/SceneColor.js";
6
+ import { chunk_CRM_FROM_REC2020_TO_P3 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC2020_TO_P3.js";
7
+ import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
8
+ import { chunk_sRGBTransferOETF } from "../../renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
9
+ import { chunk_PAPER_WHITE_NITS } from "../../renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
10
+ import { chunk_tonemap_khronos_pbr } from "../../renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js";
11
+ import { chunk_tonemap_gt7 } from "../../renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js";
12
+ import {
13
+ chunk_dither_color_8bit_triangle_noise
14
+ } from "../../renderer/shader/chunk/texture/dither/chunk_dither_color_8bit_triangle_noise.js";
15
+ import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
16
+ import { graph_image_pass } from "../../renderer/shader/graph/graph_image_pass.js";
17
+ import { ImageShader } from "../../renderer/shader/ImageShader.js";
18
+ import { ShaderResourceSetDescriptor } from "../../renderer/shader/resource/ShaderResourceSetDescriptor.js";
19
+ import { ShaderDescriptor } from "../../renderer/shader/ShaderDescriptor.js";
20
+ import { f32, u32 } from "../../renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
21
+ import { WebGPUStruct } from "../../renderer/shader/type/WebGPUStruct.js";
22
+ import { chunk_tonemap_gt7_sdr_reference } from "./chunk_tonemap_gt7_sdr_reference.js";
23
+
24
+ /**
25
+ * The operators this page compares, in the order the shader's `switch` takes them.
26
+ *
27
+ * {@link GT7} and {@link PBRNeutral} take a peak, {@link ToneMapCompare#headroom}; at 1 they are what the renderer runs
28
+ * on an SDR display. {@link GT7Reference} is SDR only and ignores it.
29
+ *
30
+ * @enum {number}
31
+ */
32
+ export const CompareOperator = {
33
+ /** GT7's sample code in SDR mode, {@link chunk_tonemap_gt7_sdr_reference}: a reference for the engine's GT7 */
34
+ GT7Reference: 0,
35
+ /**
36
+ * the engine's `tonemap_gt7` with the paper white at `PAPER_WHITE_NITS` and the peak at the headroom times that:
37
+ * what `ShadeToneMappingMode.GT7` runs
38
+ */
39
+ GT7: 1,
40
+ /**
41
+ * the engine's `tonemap_khronos_pbr` at the headroom: what `ShadeToneMappingMode.PBR_NEUTRAL` runs, and at
42
+ * headroom 1 the Khronos specification
43
+ */
44
+ PBRNeutral: 2,
45
+ };
46
+
47
+ export const COMPARE_OPERATOR_LABELS = [
48
+ 'GT7 SDR (Polyphony sample)',
49
+ 'GT7 (engine)',
50
+ 'PBR Neutral (engine)',
51
+ ];
52
+
53
+ /**
54
+ * The exposure that puts an exposed 0.18 at 0.18 out, per operator, as a multiplier. Solved by bisection on CPU ports
55
+ * of the same functions (each port checked against its source; the GT7 one against Polyphony's compiled sample code
56
+ * to 1.8e-4). Used only when "match mid-grey" is on. Both engine operators write mid-grey the same at every peak.
57
+ *
58
+ * @type {number[]}
59
+ */
60
+ export const MID_GREY_GAIN = [1.0033, 1.0033, 1.2222];
61
+
62
+ /**
63
+ * How the comparison is laid out.
64
+ *
65
+ * @enum {number}
66
+ */
67
+ export const CompareLayout = {
68
+ /**
69
+ * the engine's two operators side by side, {@link CompareOperator.GT7} on the left and
70
+ * {@link CompareOperator.PBRNeutral} on the right, each the whole frame at half size
71
+ */
72
+ Pair: 0,
73
+ /** one operator, full size */
74
+ Single: 1,
75
+ /**
76
+ * one operator, its SDR form on the left half and its form at {@link ToneMapCompare#headroom} on the right, both
77
+ * clipped to SDR white: what an HDR display shows below SDR white. Where the two forms agree, the seam is invisible.
78
+ */
79
+ Split: 2,
80
+ };
81
+
82
+ const SETTINGS = WebGPUStruct.from({
83
+ exposure: f32,
84
+ gain_0: f32,
85
+ gain_1: f32,
86
+ gain_2: f32,
87
+ /** the display's peak in units of SDR white, for the operators that take one */
88
+ headroom: f32,
89
+ layout_index: u32,
90
+ operator_index: u32,
91
+ /** 1: convert Rec.709 to Display P3 before encoding, for a canvas configured `display-p3` */
92
+ to_p3: u32,
93
+ });
94
+
95
+ const resources = new ShaderResourceSetDescriptor();
96
+
97
+ resources.setImmediate("settings", SETTINGS);
98
+ resources.createGroup()
99
+ .addTexture("input_color", "float");
100
+
101
+ const shader_tonemap_compare = new ImageShader({
102
+ descriptor: ShaderDescriptor.from({
103
+ label: "tonemap_sdr/compare",
104
+ resources,
105
+ body: CodeChunk.from(
106
+ //language=WGSL
107
+ `
108
+ fn compare_gain(op: u32) -> f32 {
109
+ switch op {
110
+ case 0u: { return settings.gain_0; }
111
+ case 1u: { return settings.gain_1; }
112
+ default: { return settings.gain_2; }
113
+ }
114
+ }
115
+
116
+ // headroom: the peak in units of SDR white, 1 for the SDR form. Every result is clipped to SDR white, so above 1 this
117
+ // is what an HDR display shows below SDR white.
118
+ fn compare_tonemap(op: u32, c: vec3<f32>, headroom: f32) -> vec3<f32> {
119
+ switch op {
120
+ case 0u: { return tonemap_gt7_sdr_reference(c); }
121
+ case 1u: { return saturate(tonemap_gt7(c, PAPER_WHITE_NITS * headroom, PAPER_WHITE_NITS)); }
122
+ default: { return saturate(tonemap_khronos_pbr(c, headroom)); }
123
+ }
124
+ }
125
+
126
+ @fragment
127
+ fn main(
128
+ @builtin(position) coord : vec4<f32>,
129
+ ) -> @location(0) vec4<f32> {
130
+
131
+ let size = vec2<i32>(textureDimensions(input_color));
132
+ let pixel = vec2<i32>(coord.xy);
133
+ let half_size = size / 2;
134
+
135
+ var op = settings.operator_index;
136
+ var headroom = settings.headroom;
137
+ var color: vec3<f32>;
138
+
139
+ // a dark rule down the middle of the two-sided layouts
140
+ if (settings.layout_index != 1u && abs(pixel.x - half_size.x) < 1) {
141
+ return vec4<f32>(0.0, 0.0, 0.0, 1.0);
142
+ }
143
+
144
+ if (settings.layout_index == 0u) {
145
+ // GT7 on the left, PBR Neutral on the right
146
+ let right = pixel.x >= half_size.x;
147
+
148
+ op = select(1u, 2u, right);
149
+
150
+ // the whole frame on each side at half size, centred vertically: a 2x2 box of scene texels per output
151
+ // pixel, averaged in linear light
152
+ let origin = vec2<i32>(select(0, half_size.x, right), size.y / 4);
153
+ let local = pixel - origin;
154
+
155
+ if (local.y < 0 || local.y >= half_size.y) {
156
+ return vec4<f32>(0.0, 0.0, 0.0, 1.0);
157
+ }
158
+
159
+ let source = local * 2;
160
+ let last = size - vec2<i32>(1);
161
+
162
+ color = (
163
+ textureLoad(input_color, min(source, last), 0).rgb
164
+ + textureLoad(input_color, min(source + vec2<i32>(1, 0), last), 0).rgb
165
+ + textureLoad(input_color, min(source + vec2<i32>(0, 1), last), 0).rgb
166
+ + textureLoad(input_color, min(source + vec2<i32>(1, 1), last), 0).rgb
167
+ ) * 0.25;
168
+ } else {
169
+ if (settings.layout_index == 2u) {
170
+ // the SDR form on the left, the form at the headroom on the right
171
+ headroom = select(1.0, settings.headroom, pixel.x > half_size.x);
172
+ }
173
+
174
+ color = textureLoad(input_color, pixel, 0).rgb;
175
+ }
176
+
177
+ color = max(color, vec3<f32>(0.0)) * (settings.exposure * compare_gain(op));
178
+
179
+ color = compare_tonemap(op, color, headroom);
180
+
181
+ if (settings.to_p3 == 1u) {
182
+ color = CRM_FROM_REC2020_TO_P3 * (CRM_FROM_REC709_TO_REC2020 * color);
183
+ }
184
+
185
+ color = sRGBTransferOETF(color);
186
+
187
+ color += dither_color_8bit_triangle_noise(coord.xy);
188
+
189
+ return vec4<f32>(color, 1.0);
190
+ }
191
+ `,
192
+ [
193
+ chunk_tonemap_gt7_sdr_reference,
194
+ chunk_tonemap_gt7,
195
+ chunk_tonemap_khronos_pbr,
196
+ chunk_PAPER_WHITE_NITS,
197
+ chunk_CRM_FROM_REC709_TO_REC2020,
198
+ chunk_CRM_FROM_REC2020_TO_P3,
199
+ chunk_sRGBTransferOETF,
200
+ chunk_dither_color_8bit_triangle_noise,
201
+ ]
202
+ ),
203
+ }),
204
+ targets: [
205
+ {
206
+ label: "tonemap_sdr compare",
207
+ format: "rgba8unorm",
208
+ }
209
+ ],
210
+ });
211
+
212
+ /**
213
+ * The scene colour as the engine's tonemapper is given it, carried on to the overlay phase.
214
+ *
215
+ * {@link SceneColor} is not carried past {@link FramePhase.BeforePresent}; a record of one's own is carried at every
216
+ * phase.
217
+ */
218
+ class ToneMapInput extends FrameRecord {
219
+ #color = -1;
220
+
221
+ /**
222
+ * @returns {number}
223
+ */
224
+ get color() {
225
+ return this.read(this.#color);
226
+ }
227
+
228
+ /**
229
+ * @param {number} handle
230
+ */
231
+ set color(handle) {
232
+ this.#color = this.publish(handle);
233
+ }
234
+ }
235
+
236
+ /**
237
+ * The last thing at {@link FramePhase.BeforePresent}: hold on to the HDR colour the tonemapper is about to read.
238
+ */
239
+ class CaptureToneMapInput extends RenderExtension {
240
+ name = 'tonemap_sdr/capture';
241
+ phase = FramePhase.BeforePresent;
242
+ relative_order = Number.MAX_SAFE_INTEGER;
243
+
244
+ /**
245
+ * @type {ToneMapCompare}
246
+ */
247
+ #owner;
248
+
249
+ /**
250
+ * @param {ToneMapCompare} owner
251
+ */
252
+ constructor(owner) {
253
+ super();
254
+
255
+ this.#owner = owner;
256
+ }
257
+
258
+ record(frame) {
259
+ if (!this.#owner.enabled) {
260
+ return;
261
+ }
262
+
263
+ frame.create(ToneMapInput).color = frame.get(SceneColor).color;
264
+ }
265
+ }
266
+
267
+ /**
268
+ * The first thing at {@link FramePhase.Overlay}: draw the comparison over the canvas the engine's tonemapper wrote.
269
+ */
270
+ class DrawToneMapCompare extends RenderExtension {
271
+ name = 'tonemap_sdr/draw';
272
+ phase = FramePhase.Overlay;
273
+ relative_order = -Number.MAX_SAFE_INTEGER;
274
+
275
+ /**
276
+ * @type {ToneMapCompare}
277
+ */
278
+ #owner;
279
+
280
+ /**
281
+ * @param {ToneMapCompare} owner
282
+ */
283
+ constructor(owner) {
284
+ super();
285
+
286
+ this.#owner = owner;
287
+ }
288
+
289
+ record(frame) {
290
+ const owner = this.#owner;
291
+
292
+ if (!owner.enabled) {
293
+ return;
294
+ }
295
+
296
+ const present = frame.get(PresentTarget);
297
+ const gains = owner.match_mid_grey ? MID_GREY_GAIN : [1, 1, 1];
298
+
299
+ const [canvas] = graph_image_pass({
300
+ graph: frame.graph,
301
+ shader: shader_tonemap_compare,
302
+ inputs: {
303
+ input_color: frame.get(ToneMapInput).color,
304
+ settings: {
305
+ exposure: Math.pow(2, owner.exposure_ev),
306
+ gain_0: gains[0],
307
+ gain_1: gains[1],
308
+ gain_2: gains[2],
309
+ headroom: owner.headroom,
310
+ layout_index: owner.layout,
311
+ operator_index: owner.operator,
312
+ to_p3: owner.convert_to_p3 ? 1 : 0,
313
+ },
314
+ },
315
+ output: [present.canvas],
316
+ });
317
+
318
+ present.canvas = canvas;
319
+ }
320
+ }
321
+
322
+ /**
323
+ * Draws the scene through the engine's tone mapping operators, in place of the engine's own tonemap.
324
+ *
325
+ * The engine still tonemaps the frame; this overwrites the canvas afterwards from the same HDR colour, so every
326
+ * operator sees exactly the input the renderer's tonemap pass sees. Exposure is the page's own, fixed: turn the engine's
327
+ * automatic exposure off, or the engine's picture and this one will not agree.
328
+ */
329
+ export class ToneMapCompare {
330
+ /**
331
+ * Off: the engine's own output is left on the canvas.
332
+ * @type {boolean}
333
+ */
334
+ enabled = true;
335
+
336
+ /**
337
+ * @type {CompareLayout}
338
+ */
339
+ layout = CompareLayout.Pair;
340
+
341
+ /**
342
+ * Which operator {@link CompareLayout.Single} and {@link CompareLayout.Split} show.
343
+ * @type {CompareOperator}
344
+ */
345
+ operator = CompareOperator.PBRNeutral;
346
+
347
+ /**
348
+ * The display's peak in units of SDR white, for the operators that take one. 1 is their SDR form. 4 is a
349
+ * 1000 cd/m² display under the 250 cd/m² paper white, which is what the renderer assumes for HDR.
350
+ *
351
+ * {@link CompareLayout.Single} shows the operator at this peak, clipped to SDR white; {@link CompareLayout.Split}
352
+ * shows it on the right half only, beside the SDR form.
353
+ * @type {number}
354
+ */
355
+ headroom = 1;
356
+
357
+ /**
358
+ * In f-stops, over a scene value of 1.
359
+ * @type {number}
360
+ */
361
+ exposure_ev = 0;
362
+
363
+ /**
364
+ * Give each operator the exposure that puts 0.18 at 0.18 out, so the pair compares shapes rather than brightness.
365
+ * @type {boolean}
366
+ */
367
+ match_mid_grey = false;
368
+
369
+ /**
370
+ * Convert to Display P3 before encoding. Right for a canvas configured `display-p3`, which is how the engine
371
+ * configures its canvas; every tonemap pass converts the same way. Off writes Rec.709 values into it, as
372
+ * `shader_tonemap_LDR` did before it converted.
373
+ * @type {boolean}
374
+ */
375
+ convert_to_p3 = true;
376
+
377
+ constructor() {
378
+ this.extensions = [new CaptureToneMapInput(this), new DrawToneMapCompare(this)];
379
+ }
380
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * GT7 tone mapping in its SDR mode, as Polyphony's sample code defines it: `GT7ToneMapping::initializeAsSDR()`
3
+ * followed by `applyToneMapping()`, ICtCp as the UCS.
4
+ *
5
+ * This is a comparison port for the playground, not the engine's operator. The engine's `tonemap_gt7` departs from
6
+ * the sample code in four places:
7
+ * - it weights the per-channel colour 0.7, where the sample weights it 0.4 (`blendRatio_` 0.6 is the untwisted one's);
8
+ * - it fades chroma over a fixed PQ window of 0.7–1.0, where the sample fades over 0.98–1.16 of the target's own
9
+ * intensity;
10
+ * - it does not clamp at the target;
11
+ * - its final blend is in ICtCp, where the sample's is in linear Rec.2020 RGB. The talk tried the UCS, preferred RGB
12
+ * (slide 150), and says a UCS blend works as well (slide 153, hidden in the presented deck).
13
+ *
14
+ * At SDR the first three carry nearly all of the difference. The playground shows both.
15
+ *
16
+ * What the sample says about SDR, and what this keeps:
17
+ * - the curve is initialized with the SDR paper white, 250 cd/m², as its peak — 2.5 frame-buffer units, where
18
+ * GT7's frame buffer has 1.0 = 100 cd/m²;
19
+ * - the result is multiplied by 1 / 2.5, so the paper white lands at 1.0 for the sRGB encoding.
20
+ *
21
+ * Shade's exposed scene value has 1.0 at the paper white rather than at 100 cd/m², so the input is scaled by 2.5
22
+ * before the curve. That puts an exposed 0.18 at 0.179 out.
23
+ *
24
+ * Input: exposed linear Rec.709. Output: display-linear Rec.709 in [0, 1].
25
+ *
26
+ * @see https://blog.selfshadow.com/publications/s2025-shading-course/pdi/supplemental/gt7_tone_mapping.cpp
27
+ * @see "Driving Toward Reality: Physically Based Tone Mapping and Perceptual Fidelity in Gran Turismo 7", slide 153
28
+ * @type {CodeChunk}
29
+ */
30
+ export const chunk_tonemap_gt7_sdr_reference: CodeChunk;
31
+ import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
32
+ //# sourceMappingURL=chunk_tonemap_gt7_sdr_reference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_tonemap_gt7_sdr_reference.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,8CAFU,SAAS,CAoEjB;0BAjGwB,6CAA6C"}
@@ -0,0 +1,104 @@
1
+ import { chunk_CRM_FROM_REC2020_TO_REC709 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC2020_TO_REC709.js";
2
+ import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
3
+ import { chunk_iCtCp_to_rgb } from "../../renderer/shader/chunk/color/iCtCp/chunk_iCtCp_to_rgb.js";
4
+ import { chunk_rgb_to_iCtCp } from "../../renderer/shader/chunk/color/iCtCp/chunk_rgb_to_iCtCp.js";
5
+ import { chunk_gt_evaluate_curve } from "../../renderer/shader/chunk/color/tonemap/gt7/chunk_gt_evaluate_curve.js";
6
+ import { GT7_TONE_MAPPING_CURVE_STRUCT } from "../../renderer/shader/chunk/color/tonemap/gt7/GT7_TONE_MAPPING_CURVE_STRUCT.js";
7
+ import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
8
+
9
+ /**
10
+ * GT7 tone mapping in its SDR mode, as Polyphony's sample code defines it: `GT7ToneMapping::initializeAsSDR()`
11
+ * followed by `applyToneMapping()`, ICtCp as the UCS.
12
+ *
13
+ * This is a comparison port for the playground, not the engine's operator. The engine's `tonemap_gt7` departs from
14
+ * the sample code in four places:
15
+ * - it weights the per-channel colour 0.7, where the sample weights it 0.4 (`blendRatio_` 0.6 is the untwisted one's);
16
+ * - it fades chroma over a fixed PQ window of 0.7–1.0, where the sample fades over 0.98–1.16 of the target's own
17
+ * intensity;
18
+ * - it does not clamp at the target;
19
+ * - its final blend is in ICtCp, where the sample's is in linear Rec.2020 RGB. The talk tried the UCS, preferred RGB
20
+ * (slide 150), and says a UCS blend works as well (slide 153, hidden in the presented deck).
21
+ *
22
+ * At SDR the first three carry nearly all of the difference. The playground shows both.
23
+ *
24
+ * What the sample says about SDR, and what this keeps:
25
+ * - the curve is initialized with the SDR paper white, 250 cd/m², as its peak — 2.5 frame-buffer units, where
26
+ * GT7's frame buffer has 1.0 = 100 cd/m²;
27
+ * - the result is multiplied by 1 / 2.5, so the paper white lands at 1.0 for the sRGB encoding.
28
+ *
29
+ * Shade's exposed scene value has 1.0 at the paper white rather than at 100 cd/m², so the input is scaled by 2.5
30
+ * before the curve. That puts an exposed 0.18 at 0.179 out.
31
+ *
32
+ * Input: exposed linear Rec.709. Output: display-linear Rec.709 in [0, 1].
33
+ *
34
+ * @see https://blog.selfshadow.com/publications/s2025-shading-course/pdi/supplemental/gt7_tone_mapping.cpp
35
+ * @see "Driving Toward Reality: Physically Based Tone Mapping and Perceptual Fidelity in Gran Turismo 7", slide 153
36
+ * @type {CodeChunk}
37
+ */
38
+ export const chunk_tonemap_gt7_sdr_reference = CodeChunk.from(
39
+ //language=WGSL
40
+ `
41
+ fn tonemap_gt7_sdr_reference(rgb_rec709: vec3<f32>) -> vec3<f32> {
42
+
43
+ // GRAN_TURISMO_SDR_PAPER_WHITE / REFERENCE_LUMINANCE
44
+ const SDR_TARGET: f32 = 2.5;
45
+
46
+ // GT7ToneMapping::initializeParameters
47
+ const BLEND_RATIO: f32 = 0.6;
48
+ const FADE_START: f32 = 0.98;
49
+ const FADE_END: f32 = 1.16;
50
+
51
+ // GTToneMappingCurveV2::initializeCurve(SDR_TARGET, 0.25, 0.538, 0.444, 1.280)
52
+ const alpha = 0.25;
53
+ const linear_section = 0.444;
54
+
55
+ var curve: ${GT7_TONE_MAPPING_CURVE_STRUCT.wgsl_ref};
56
+
57
+ curve.peakIntensity = SDR_TARGET;
58
+ curve.midPoint = 0.538;
59
+ curve.linearSection = linear_section;
60
+ curve.toeStrength = 1.280;
61
+
62
+ let k = (linear_section - 1.0) / (alpha - 1.0);
63
+ curve.kA = SDR_TARGET * linear_section + SDR_TARGET * k;
64
+ curve.kB = -SDR_TARGET * k * exp(linear_section / k);
65
+ curve.kC = -1.0 / (k * SDR_TARGET);
66
+
67
+ // the paper white is 1.0 here and 2.5 in GT7's frame buffer
68
+ let rgb = (CRM_FROM_REC709_TO_REC2020 * rgb_rec709) * SDR_TARGET;
69
+
70
+ let ucs = rgb_to_iCtCp(rgb);
71
+
72
+ // per channel: the "skewed" colour
73
+ let skewed = vec3<f32>(
74
+ gt_evaluate_curve(&curve, rgb.r),
75
+ gt_evaluate_curve(&curve, rgb.g),
76
+ gt_evaluate_curve(&curve, rgb.b),
77
+ );
78
+
79
+ let skewed_ucs = rgb_to_iCtCp(skewed);
80
+
81
+ let target_ucs = rgb_to_iCtCp(vec3<f32>(SDR_TARGET)).x;
82
+
83
+ let chroma_scale = 1.0 - smoothstep(FADE_START, FADE_END, ucs.x / target_ucs);
84
+
85
+ // intensity from the skewed colour, chroma from the original, faded toward the target
86
+ let scaled = iCtCp_to_rgb(vec3<f32>(skewed_ucs.x, ucs.yz * chroma_scale));
87
+
88
+ let blended = mix(skewed, scaled, BLEND_RATIO);
89
+
90
+ // the SDR correction: the target lands at 1.0
91
+ let display_2020 = min(blended, vec3<f32>(SDR_TARGET)) / SDR_TARGET;
92
+
93
+ return saturate(CRM_FROM_REC2020_TO_REC709 * display_2020);
94
+ }
95
+ `,
96
+ [
97
+ GT7_TONE_MAPPING_CURVE_STRUCT.declaration_chunk,
98
+ chunk_gt_evaluate_curve,
99
+ chunk_rgb_to_iCtCp,
100
+ chunk_iCtCp_to_rgb,
101
+ chunk_CRM_FROM_REC709_TO_REC2020,
102
+ chunk_CRM_FROM_REC2020_TO_REC709,
103
+ ]
104
+ );