@woosh/meep-engine 3.52.0 → 3.54.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 (515) hide show
  1. package/package.json +1 -1
  2. package/src/core/math/noise/worley_noise_2d.d.ts +14 -0
  3. package/src/core/math/noise/worley_noise_2d.d.ts.map +1 -0
  4. package/src/core/math/noise/worley_noise_2d.js +74 -0
  5. package/src/engine/ecs/animation/Animation.d.ts +4 -25
  6. package/src/engine/ecs/animation/Animation.d.ts.map +1 -1
  7. package/src/engine/ecs/animation/Animation.js +9 -41
  8. package/src/engine/ecs/ik/IKGoalSystem.d.ts +4 -5
  9. package/src/engine/ecs/ik/IKGoalSystem.d.ts.map +1 -1
  10. package/src/engine/ecs/ik/IKGoalSystem.js +4 -6
  11. package/src/engine/graphics/ecs/mesh/assetTypeByPath.js +1 -1
  12. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
  13. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
  14. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
  15. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
  16. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
  17. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
  18. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
  19. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
  20. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
  21. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
  22. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
  23. package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
  24. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts +12 -0
  25. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
  26. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
  27. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
  28. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  29. package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
  30. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts +52 -0
  31. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
  32. package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
  33. package/src/engine/graphics3/AnimationGraphSystem.d.ts +9 -22
  34. package/src/engine/graphics3/AnimationGraphSystem.d.ts.map +1 -1
  35. package/src/engine/graphics3/AnimationGraphSystem.js +58 -203
  36. package/src/engine/graphics3/AnimationSystem.d.ts +7 -18
  37. package/src/engine/graphics3/AnimationSystem.d.ts.map +1 -1
  38. package/src/engine/graphics3/AnimationSystem.js +62 -243
  39. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  40. package/src/engine/graphics3/DecalSystem.js +447 -450
  41. package/src/engine/graphics3/FoliageWindSystem.d.ts +67 -0
  42. package/src/engine/graphics3/FoliageWindSystem.d.ts.map +1 -0
  43. package/src/engine/graphics3/FoliageWindSystem.js +257 -0
  44. package/src/engine/graphics3/GPUFluidSystem.d.ts +7 -0
  45. package/src/engine/graphics3/GPUFluidSystem.d.ts.map +1 -1
  46. package/src/engine/graphics3/GPUFluidSystem.js +39 -1
  47. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -23
  48. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  49. package/src/engine/graphics3/GPUParticleEmitterSystem.js +904 -949
  50. package/src/engine/graphics3/animation/AnimationClips.d.ts +107 -13
  51. package/src/engine/graphics3/animation/AnimationClips.d.ts.map +1 -1
  52. package/src/engine/graphics3/animation/AnimationClips.js +207 -10
  53. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts +89 -0
  54. package/src/engine/graphics3/animation/AnimationClipsSink.d.ts.map +1 -0
  55. package/src/engine/graphics3/animation/AnimationClipsSink.js +205 -0
  56. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts +43 -0
  57. package/src/engine/graphics3/animation/FoliageWindRigs.d.ts.map +1 -0
  58. package/src/engine/graphics3/animation/FoliageWindRigs.js +69 -0
  59. package/src/engine/graphics3/animation/write_clip_playback.d.ts +17 -11
  60. package/src/engine/graphics3/animation/write_clip_playback.d.ts.map +1 -1
  61. package/src/engine/graphics3/animation/write_clip_playback.js +36 -27
  62. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  63. package/src/engine/graphics3/decal/GPUDecalRenderer.js +8 -6
  64. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  65. package/src/engine/graphics3/decal/shader_decal_composite.js +11 -5
  66. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts +7 -7
  67. package/src/engine/graphics3/pose/collect_entity_playbacks.d.ts.map +1 -1
  68. package/src/engine/graphics3/pose/collect_entity_playbacks.js +14 -15
  69. package/src/engine/graphics3/prefab/Prefab.d.ts +6 -0
  70. package/src/engine/graphics3/prefab/Prefab.d.ts.map +1 -1
  71. package/src/engine/graphics3/prefab/Prefab.js +169 -162
  72. package/src/engine/graphics3/prefab/prefab_compile.d.ts.map +1 -1
  73. package/src/engine/graphics3/prefab/prefab_compile.js +369 -334
  74. package/src/engine/graphics3/prefab/prefab_instantiate.d.ts.map +1 -1
  75. package/src/engine/graphics3/prefab/prefab_instantiate.js +43 -2
  76. package/src/engine/graphics3/terrain/chunk_terrain_material_surface.js +2 -2
  77. package/src/engine/physics/ecs/ContactProbeSystem.d.ts +2 -3
  78. package/src/engine/physics/ecs/ContactProbeSystem.d.ts.map +1 -1
  79. package/src/engine/physics/ecs/ContactProbeSystem.js +2 -4
  80. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  81. package/src/engine/sound/simulation/PROBE_PLACEMENT.md +4 -4
  82. package/src/engine/sound/simulation/README.md +1 -1
  83. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts +22 -8
  84. package/src/engine/sound/simulation/probe/bakeProbeField.d.ts.map +1 -1
  85. package/src/engine/sound/simulation/probe/bakeProbeField.js +60 -15
  86. package/src/engine/sound/simulation/probe/bakeProbeReflectors.d.ts.map +1 -1
  87. package/src/engine/sound/simulation/probe/bakeProbeReflectors.js +19 -23
  88. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts +63 -17
  89. package/src/engine/sound/simulation/probe/probe_sdf_grid.d.ts.map +1 -1
  90. package/src/engine/sound/simulation/probe/probe_sdf_grid.js +67 -17
  91. package/src/generation/foliage/FOLIAGE_DESIGN.md +319 -0
  92. package/src/generation/foliage/FOLIAGE_PLAN.md +198 -0
  93. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts +20 -0
  94. package/src/generation/foliage/animation/build_tree_wind_rig.d.ts.map +1 -0
  95. package/src/generation/foliage/animation/build_tree_wind_rig.js +108 -0
  96. package/src/generation/foliage/asset/TreeAsset.d.ts +86 -0
  97. package/src/generation/foliage/asset/TreeAsset.d.ts.map +1 -0
  98. package/src/generation/foliage/asset/TreeAsset.js +111 -0
  99. package/src/generation/foliage/asset/TreeLODAsset.d.ts +115 -0
  100. package/src/generation/foliage/asset/TreeLODAsset.d.ts.map +1 -0
  101. package/src/generation/foliage/asset/TreeLODAsset.js +346 -0
  102. package/src/generation/foliage/asset/generate_tree.d.ts +15 -0
  103. package/src/generation/foliage/asset/generate_tree.d.ts.map +1 -0
  104. package/src/generation/foliage/asset/generate_tree.js +93 -0
  105. package/src/generation/foliage/asset/place_tree.d.ts +82 -0
  106. package/src/generation/foliage/asset/place_tree.d.ts.map +1 -0
  107. package/src/generation/foliage/asset/place_tree.js +194 -0
  108. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +121 -0
  109. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -0
  110. package/src/generation/foliage/config/BarkMaterialConfig.js +250 -0
  111. package/src/generation/foliage/config/BranchLevelConfig.d.ts +288 -0
  112. package/src/generation/foliage/config/BranchLevelConfig.d.ts.map +1 -0
  113. package/src/generation/foliage/config/BranchLevelConfig.js +536 -0
  114. package/src/generation/foliage/config/CrownConfig.d.ts +100 -0
  115. package/src/generation/foliage/config/CrownConfig.d.ts.map +1 -0
  116. package/src/generation/foliage/config/CrownConfig.js +186 -0
  117. package/src/generation/foliage/config/CrownEnvelopeType.d.ts +16 -0
  118. package/src/generation/foliage/config/CrownEnvelopeType.d.ts.map +1 -0
  119. package/src/generation/foliage/config/CrownEnvelopeType.js +17 -0
  120. package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
  121. package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
  122. package/src/generation/foliage/config/FoliageBarkType.js +16 -0
  123. package/src/generation/foliage/config/FoliageCardType.d.ts +12 -0
  124. package/src/generation/foliage/config/FoliageCardType.d.ts.map +1 -0
  125. package/src/generation/foliage/config/FoliageCardType.js +18 -0
  126. package/src/generation/foliage/config/FoliageConfig.d.ts +151 -0
  127. package/src/generation/foliage/config/FoliageConfig.d.ts.map +1 -0
  128. package/src/generation/foliage/config/FoliageConfig.js +283 -0
  129. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +143 -0
  130. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -0
  131. package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -0
  132. package/src/generation/foliage/config/PhyllotaxisMode.d.ts +13 -0
  133. package/src/generation/foliage/config/PhyllotaxisMode.d.ts.map +1 -0
  134. package/src/generation/foliage/config/PhyllotaxisMode.js +20 -0
  135. package/src/generation/foliage/config/TreeLODConfig.d.ts +87 -0
  136. package/src/generation/foliage/config/TreeLODConfig.d.ts.map +1 -0
  137. package/src/generation/foliage/config/TreeLODConfig.js +211 -0
  138. package/src/generation/foliage/config/TreePreset.d.ts +16 -0
  139. package/src/generation/foliage/config/TreePreset.d.ts.map +1 -0
  140. package/src/generation/foliage/config/TreePreset.js +17 -0
  141. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts +109 -0
  142. package/src/generation/foliage/config/TreeSpeciesConfig.d.ts.map +1 -0
  143. package/src/generation/foliage/config/TreeSpeciesConfig.js +400 -0
  144. package/src/generation/foliage/config/TreeWindConfig.d.ts +84 -0
  145. package/src/generation/foliage/config/TreeWindConfig.d.ts.map +1 -0
  146. package/src/generation/foliage/config/TreeWindConfig.js +157 -0
  147. package/src/generation/foliage/index.d.ts +39 -0
  148. package/src/generation/foliage/index.d.ts.map +1 -0
  149. package/src/generation/foliage/index.js +44 -0
  150. package/src/generation/foliage/material/make_bark_material.d.ts +37 -0
  151. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -0
  152. package/src/generation/foliage/material/make_bark_material.js +730 -0
  153. package/src/generation/foliage/material/make_foliage_material.d.ts +40 -0
  154. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -0
  155. package/src/generation/foliage/material/make_foliage_material.js +605 -0
  156. package/src/generation/foliage/mesh/branch_collar_project.d.ts +42 -0
  157. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -0
  158. package/src/generation/foliage/mesh/branch_collar_project.js +205 -0
  159. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts +35 -0
  160. package/src/generation/foliage/mesh/branch_ring_triangulate.d.ts.map +1 -0
  161. package/src/generation/foliage/mesh/branch_ring_triangulate.js +72 -0
  162. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +95 -0
  163. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -0
  164. package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -0
  165. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts +19 -0
  166. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.d.ts.map +1 -0
  167. package/src/generation/foliage/mesh/tree_mesh_apply_canopy_ao.js +150 -0
  168. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts +55 -0
  169. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -0
  170. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -0
  171. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +22 -0
  172. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -0
  173. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -0
  174. package/src/generation/foliage/presets/make_tree_species_preset.d.ts +13 -0
  175. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -0
  176. package/src/generation/foliage/presets/make_tree_species_preset.js +870 -0
  177. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts +443 -0
  178. package/src/generation/foliage/skeleton/TreeSkeleton.d.ts.map +1 -0
  179. package/src/generation/foliage/skeleton/TreeSkeleton.js +1100 -0
  180. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts +27 -0
  181. package/src/generation/foliage/skeleton/crown_envelope_evaluate.d.ts.map +1 -0
  182. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -0
  183. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts +32 -0
  184. package/src/generation/foliage/skeleton/spine_frame_double_reflection.d.ts.map +1 -0
  185. package/src/generation/foliage/skeleton/spine_frame_double_reflection.js +87 -0
  186. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts +33 -0
  187. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.d.ts.map +1 -0
  188. package/src/generation/foliage/skeleton/tree_skeleton_assign_skin_joints.js +205 -0
  189. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +17 -0
  190. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -0
  191. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -0
  192. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts +18 -0
  193. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -0
  194. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -0
  195. package/src/shade/playground/additive_blending/index.html +197 -0
  196. package/src/shade/playground/additive_blending/main.d.ts +2 -0
  197. package/src/shade/playground/additive_blending/main.d.ts.map +1 -0
  198. package/src/shade/playground/additive_blending/main.js +529 -0
  199. package/src/shade/playground/foliage_wind/README.md +18 -0
  200. package/src/shade/playground/foliage_wind/foliage_world.d.ts +133 -0
  201. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -0
  202. package/src/shade/playground/foliage_wind/foliage_world.js +602 -0
  203. package/src/shade/playground/foliage_wind/index.html +260 -0
  204. package/src/shade/playground/foliage_wind/main.d.ts +2 -0
  205. package/src/shade/playground/foliage_wind/main.d.ts.map +1 -0
  206. package/src/shade/playground/foliage_wind/main.js +275 -0
  207. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  208. package/src/shade/renderer/Renderer.js +45 -16
  209. package/src/shade/renderer/animation/ADDITIVE_BLENDING_PLAN.md +145 -0
  210. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts +9 -1
  211. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.d.ts.map +1 -1
  212. package/src/shade/renderer/animation/ANIMATION_DATABASE_SPEC.js +53 -1
  213. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts +8 -0
  214. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.d.ts.map +1 -0
  215. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_JOINT_STRUCT.js +71 -0
  216. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts +11 -0
  217. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.d.ts.map +1 -0
  218. package/src/shade/renderer/animation/ANIMATION_FOLIAGE_RIG_STRUCT.js +32 -0
  219. package/src/shade/renderer/animation/GPUAnimationManager.d.ts +30 -3
  220. package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
  221. package/src/shade/renderer/animation/GPUAnimationManager.js +532 -79
  222. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts +19 -12
  223. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.d.ts.map +1 -1
  224. package/src/shade/renderer/animation/POSE_ACCUMULATOR_LAYOUT.js +20 -13
  225. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts +35 -8
  226. package/src/shade/renderer/animation/ShadeAnimationClip.d.ts.map +1 -1
  227. package/src/shade/renderer/animation/ShadeAnimationClip.js +433 -2
  228. package/src/shade/renderer/animation/chunk_pose_accumulator.d.ts.map +1 -1
  229. package/src/shade/renderer/animation/chunk_pose_accumulator.js +40 -32
  230. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts +97 -0
  231. package/src/shade/renderer/animation/foliage/FoliageWindJoint.d.ts.map +1 -0
  232. package/src/shade/renderer/animation/foliage/FoliageWindJoint.js +161 -0
  233. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts +65 -0
  234. package/src/shade/renderer/animation/foliage/FoliageWindRig.d.ts.map +1 -0
  235. package/src/shade/renderer/animation/foliage/FoliageWindRig.js +89 -0
  236. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts +19 -0
  237. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.d.ts.map +1 -0
  238. package/src/shade/renderer/animation/foliage/chunk_foliage_wind_step.js +143 -0
  239. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts +14 -0
  240. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.d.ts.map +1 -0
  241. package/src/shade/renderer/animation/foliage/shader_foliage_wind_apply.js +116 -0
  242. package/src/shade/renderer/animation/pose/pose_evaluate_local.d.ts.map +1 -1
  243. package/src/shade/renderer/animation/pose/pose_evaluate_local.js +39 -29
  244. package/src/shade/renderer/animation/shader_animation_pose_resolve.js +37 -37
  245. package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +2 -2
  246. package/src/shade/renderer/extension/RenderExtension.d.ts +7 -0
  247. package/src/shade/renderer/extension/RenderExtension.d.ts.map +1 -1
  248. package/src/shade/renderer/extension/RenderExtension.js +9 -0
  249. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts +6 -0
  250. package/src/shade/renderer/extension/RenderExtensionRegistry.d.ts.map +1 -1
  251. package/src/shade/renderer/extension/RenderExtensionRegistry.js +15 -0
  252. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +10 -3
  253. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts.map +1 -1
  254. package/src/shade/renderer/fluid/GPUFluidCascade.js +15 -0
  255. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +8 -1
  256. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts.map +1 -1
  257. package/src/shade/renderer/fluid/GPUFluidCascadeStack.js +11 -0
  258. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.d.ts.map +1 -1
  259. package/src/shade/renderer/fluid/coupling/chunk_fluid_cascade_parent.js +51 -48
  260. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  261. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts +6 -0
  262. package/src/shade/renderer/fluid/mac/FluidMacPasses.d.ts.map +1 -1
  263. package/src/shade/renderer/fluid/mac/FluidMacPasses.js +16 -0
  264. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.d.ts.map +1 -1
  265. package/src/shade/renderer/fluid/mac/chunk_fluid_mac_seams.js +15 -3
  266. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.d.ts.map +1 -1
  267. package/src/shade/renderer/fluid/mac/chunk_v3_mac_lattice_corners.js +102 -96
  268. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_correct.js +12 -12
  269. package/src/shade/renderer/fluid/mac/shader_fluid_mac_advect_predict.js +12 -12
  270. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +8 -1
  271. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts.map +1 -1
  272. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.js +16 -0
  273. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts +7 -0
  274. package/src/shade/renderer/fluid/publish/FluidWindPublish.d.ts.map +1 -1
  275. package/src/shade/renderer/fluid/publish/FluidWindPublish.js +10 -0
  276. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  277. package/src/shade/renderer/geometry/bvh/GPUBLASRefitBatch.js +2 -2
  278. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
  279. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
  280. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  281. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
  282. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
  283. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
  284. package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
  285. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
  286. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
  287. package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
  288. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
  289. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
  290. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
  291. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
  292. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  293. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
  294. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
  295. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  296. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
  297. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
  298. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
  299. package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
  300. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  301. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  302. package/src/shade/renderer/light/GPULightCollection.js +67 -0
  303. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
  304. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
  305. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
  306. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
  307. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
  308. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
  309. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
  310. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
  311. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
  312. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
  313. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
  314. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
  315. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
  316. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
  317. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
  318. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
  319. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
  320. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
  321. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
  322. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
  323. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
  324. package/src/shade/renderer/loader/SceneBundle.d.ts +7 -0
  325. package/src/shade/renderer/loader/SceneBundle.d.ts.map +1 -1
  326. package/src/shade/renderer/loader/SceneBundle.js +119 -111
  327. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  328. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts +4 -0
  329. package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
  330. package/src/shade/renderer/material/standard/fragment_gbuffer.js +6 -5
  331. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts +8 -7
  332. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.d.ts.map +1 -1
  333. package/src/shade/renderer/object_property/chunk_write_object_property_node3d.js +9 -8
  334. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  335. package/src/shade/renderer/particles/GPUParticleSystem.js +4 -1
  336. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
  337. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  338. package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
  339. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
  340. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  341. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
  342. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  343. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +22 -34
  344. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  345. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.d.ts.map +1 -1
  346. package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +9 -7
  347. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.d.ts.map +1 -1
  348. package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment.js +15 -7
  349. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.d.ts.map +1 -1
  350. package/src/shade/renderer/rasterize/native/avboit/avboit_draw_fragment_body.js +6 -4
  351. package/src/shade/renderer/rasterize/native/oit/oit_resolve_fragment_body.js +3 -3
  352. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.d.ts.map +1 -1
  353. package/src/shade/renderer/rasterize/native/oit/shader_oit_generate_moments.js +8 -5
  354. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
  355. package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +4 -3
  356. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
  357. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
  358. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
  359. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
  360. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
  361. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
  362. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
  363. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
  364. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
  365. package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1 -1
  366. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts +9 -0
  367. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.d.ts.map +1 -0
  368. package/src/shade/renderer/texture/SAMPLER_ANISOTROPIC_CLAMP.js +17 -0
  369. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts +8 -0
  370. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.d.ts.map +1 -1
  371. package/src/shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js +28 -20
  372. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts +8 -0
  373. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.d.ts.map +1 -0
  374. package/src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js +15 -0
  375. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
  376. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
  377. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
  378. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts +21 -0
  379. package/src/shade/renderer/view/chunk_view_mip_bias.d.ts.map +1 -0
  380. package/src/shade/renderer/view/chunk_view_mip_bias.js +44 -0
  381. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
  382. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
  383. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  384. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
  385. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts +24 -0
  386. package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_sample.d.ts.map +1 -0
  387. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +1 -1
  388. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
  389. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
  390. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
  391. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
  392. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
  393. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
  394. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
  395. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
  396. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
  397. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
  398. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
  399. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
  400. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
  401. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
  402. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
  403. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
  404. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
  405. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +31 -0
  406. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
  407. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +113 -0
  408. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
  409. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
  410. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +356 -0
  411. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
  412. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
  413. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
  414. package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts +16 -0
  415. package/src/shade/renderer/volumetrics/shader_volumetrics_classify_froxels.d.ts.map +1 -0
  416. package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts +23 -0
  417. package/src/shade/renderer/volumetrics/shader_volumetrics_lighting_regimes.d.ts.map +1 -0
  418. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  419. package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
  420. package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +1 -1
  421. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  422. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +105 -26
  423. package/src/engine/graphics/composit/CompositingStages.d.ts +0 -6
  424. package/src/engine/graphics/composit/CompositingStages.d.ts.map +0 -1
  425. package/src/engine/graphics/composit/CompositingStages.js +0 -8
  426. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts +0 -7
  427. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.d.ts.map +0 -1
  428. package/src/engine/graphics/geometry/buffered/computeBufferAttributeHash.js +0 -24
  429. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts +0 -8
  430. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.d.ts.map +0 -1
  431. package/src/engine/graphics/geometry/buffered/computeGeometryBoundingSphereMiniball.js +0 -17
  432. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts +0 -8
  433. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.d.ts.map +0 -1
  434. package/src/engine/graphics/geometry/buffered/computeGeometryEquality.js +0 -60
  435. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts +0 -7
  436. package/src/engine/graphics/geometry/buffered/computeGeometryHash.d.ts.map +0 -1
  437. package/src/engine/graphics/geometry/buffered/computeGeometryHash.js +0 -26
  438. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts +0 -7
  439. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.d.ts.map +0 -1
  440. package/src/engine/graphics/geometry/buffered/compute_buffer_geometry_byte_size.js +0 -23
  441. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts +0 -7
  442. package/src/engine/graphics/geometry/instancing/geometry_copy.d.ts.map +0 -1
  443. package/src/engine/graphics/geometry/instancing/geometry_copy.js +0 -15
  444. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts +0 -2
  445. package/src/engine/graphics/geometry/instancing/rewriteMaterial.d.ts.map +0 -1
  446. package/src/engine/graphics/geometry/instancing/rewriteMaterial.js +0 -57
  447. package/src/engine/graphics/geometry/ribbon/Quad.d.ts +0 -96
  448. package/src/engine/graphics/geometry/ribbon/Quad.d.ts.map +0 -1
  449. package/src/engine/graphics/geometry/ribbon/Quad.js +0 -213
  450. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts +0 -9
  451. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.d.ts.map +0 -1
  452. package/src/engine/graphics/geometry/ribbon/copyAttributeV3.js +0 -12
  453. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts +0 -10
  454. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.d.ts.map +0 -1
  455. package/src/engine/graphics/geometry/ribbon/copyAttributeValue.js +0 -17
  456. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts +0 -10
  457. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.d.ts.map +0 -1
  458. package/src/engine/graphics/geometry/ribbon/equalAttributeV3.js +0 -13
  459. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts +0 -11
  460. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.d.ts.map +0 -1
  461. package/src/engine/graphics/geometry/ribbon/equalAttributeValue.js +0 -24
  462. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts +0 -6
  463. package/src/engine/graphics/geometry/ribbon/rotateRibbon.d.ts.map +0 -1
  464. package/src/engine/graphics/geometry/ribbon/rotateRibbon.js +0 -37
  465. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts +0 -9
  466. package/src/engine/graphics/geometry/ribbon/updateTipPosition.d.ts.map +0 -1
  467. package/src/engine/graphics/geometry/ribbon/updateTipPosition.js +0 -52
  468. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts +0 -8
  469. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.d.ts.map +0 -1
  470. package/src/engine/graphics/geometry/skining/computeSkinnedMeshVertices.js +0 -54
  471. package/src/engine/graphics/render/RenderPassType.d.ts +0 -6
  472. package/src/engine/graphics/render/RenderPassType.d.ts.map +0 -1
  473. package/src/engine/graphics/render/RenderPassType.js +0 -8
  474. package/src/engine/graphics/render/layers/RenderLayer.d.ts +0 -78
  475. package/src/engine/graphics/render/layers/RenderLayer.d.ts.map +0 -1
  476. package/src/engine/graphics/render/layers/RenderLayer.js +0 -95
  477. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts +0 -72
  478. package/src/engine/graphics/render/layers/RenderLayerManager.d.ts.map +0 -1
  479. package/src/engine/graphics/render/layers/RenderLayerManager.js +0 -160
  480. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts +0 -18
  481. package/src/engine/graphics/render/layers/RenderLayerManagerState.d.ts.map +0 -1
  482. package/src/engine/graphics/render/layers/RenderLayerManagerState.js +0 -48
  483. package/src/engine/graphics/render/layers/RenderLayerState.d.ts +0 -18
  484. package/src/engine/graphics/render/layers/RenderLayerState.d.ts.map +0 -1
  485. package/src/engine/graphics/render/layers/RenderLayerState.js +0 -27
  486. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts +0 -8
  487. package/src/engine/graphics/render/layers/RenderLayerUtils.d.ts.map +0 -1
  488. package/src/engine/graphics/render/layers/RenderLayerUtils.js +0 -103
  489. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts +0 -10
  490. package/src/engine/graphics/render/make_bvh_visibility_builder.d.ts.map +0 -1
  491. package/src/engine/graphics/render/make_bvh_visibility_builder.js +0 -64
  492. package/src/engine/graphics/render/view/CameraViewFlags.d.ts +0 -7
  493. package/src/engine/graphics/render/view/CameraViewFlags.d.ts.map +0 -1
  494. package/src/engine/graphics/render/view/CameraViewFlags.js +0 -9
  495. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts +0 -143
  496. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.d.ts.map +0 -1
  497. package/src/engine/graphics/render/visibility/IncrementalDeltaSet.js +0 -328
  498. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts +0 -39
  499. package/src/engine/graphics/render/visibility/VisibilityComputer.d.ts.map +0 -1
  500. package/src/engine/graphics/render/visibility/VisibilityComputer.js +0 -80
  501. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts +0 -29
  502. package/src/engine/graphics/render/visibility/VisibilityFilter.d.ts.map +0 -1
  503. package/src/engine/graphics/render/visibility/VisibilityFilter.js +0 -37
  504. package/src/engine/graphics3/animation/write_graph_playback.d.ts +0 -24
  505. package/src/engine/graphics3/animation/write_graph_playback.d.ts.map +0 -1
  506. package/src/engine/graphics3/animation/write_graph_playback.js +0 -48
  507. package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
  508. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
  509. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
  510. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
  511. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
  512. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
  513. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
  514. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
  515. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
@@ -1,20 +1,28 @@
1
- import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
-
3
- export const SAMPLER_LINEAR_UPSCALE = Object.freeze(SamplerDescriptor.from({
4
- magFilter: "linear",
5
- addressModeU: "clamp-to-edge",
6
- addressModeV: "clamp-to-edge",
7
- addressModeW: "clamp-to-edge",
8
- }));
9
-
10
- export const SAMPLER_LINEAR_DOWNSCALE = Object.freeze(SamplerDescriptor.from({
11
- minFilter: "linear",
12
- addressModeU: "clamp-to-edge",
13
- addressModeV: "clamp-to-edge"
14
- }))
15
-
16
- export const SAMPLER_NEAREST = Object.freeze(SamplerDescriptor.from({
17
- magFilter: "nearest",
18
- addressModeU: "clamp-to-edge",
19
- addressModeV: "clamp-to-edge"
20
- }));
1
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
+
3
+ /**
4
+ * Magnification-only linear clamp sampler (`magFilter: "linear"`, `minFilter: "nearest"`,
5
+ * `mipmapFilter: "nearest"`, `maxAnisotropy: 1`).
6
+ *
7
+ * Intended ONLY for upscaling single-mip 2D render targets (e.g. post-processing upsampling).
8
+ * Do NOT use for 3D scene textures, atlases, or mipmapped targets that undergo minification —
9
+ * use `SAMPLER_TRILINEAR_CLAMP` or `SAMPLER_ANISOTROPIC_CLAMP` instead.
10
+ */
11
+ export const SAMPLER_LINEAR_UPSCALE = Object.freeze(SamplerDescriptor.from({
12
+ magFilter: "linear",
13
+ addressModeU: "clamp-to-edge",
14
+ addressModeV: "clamp-to-edge",
15
+ addressModeW: "clamp-to-edge",
16
+ }));
17
+
18
+ export const SAMPLER_LINEAR_DOWNSCALE = Object.freeze(SamplerDescriptor.from({
19
+ minFilter: "linear",
20
+ addressModeU: "clamp-to-edge",
21
+ addressModeV: "clamp-to-edge"
22
+ }))
23
+
24
+ export const SAMPLER_NEAREST = Object.freeze(SamplerDescriptor.from({
25
+ magFilter: "nearest",
26
+ addressModeU: "clamp-to-edge",
27
+ addressModeV: "clamp-to-edge"
28
+ }));
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Trilinear clamp-to-edge sampler (`magFilter: "linear"`, `minFilter: "linear"`, `mipmapFilter: "linear"`).
3
+ * Use for mipmapped 2D render targets and LUTs where linear filtering is required across both
4
+ * magnification/minification and mip levels without anisotropic footprint expansion.
5
+ */
6
+ export const SAMPLER_TRILINEAR_CLAMP: Readonly<SamplerDescriptor>;
7
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
8
+ //# sourceMappingURL=SAMPLER_TRILINEAR_CLAMP.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SAMPLER_TRILINEAR_CLAMP.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/texture/SAMPLER_TRILINEAR_CLAMP.js"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,kEAOI;kCAd8B,+CAA+C"}
@@ -0,0 +1,15 @@
1
+ import { SamplerDescriptor } from "../../descriptor/texture/SamplerDescriptor.js";
2
+
3
+ /**
4
+ * Trilinear clamp-to-edge sampler (`magFilter: "linear"`, `minFilter: "linear"`, `mipmapFilter: "linear"`).
5
+ * Use for mipmapped 2D render targets and LUTs where linear filtering is required across both
6
+ * magnification/minification and mip levels without anisotropic footprint expansion.
7
+ */
8
+ export const SAMPLER_TRILINEAR_CLAMP = Object.freeze(SamplerDescriptor.from({
9
+ addressModeU: "clamp-to-edge",
10
+ addressModeV: "clamp-to-edge",
11
+ addressModeW: "clamp-to-edge",
12
+ magFilter: "linear",
13
+ minFilter: "linear",
14
+ mipmapFilter: "linear",
15
+ }));
@@ -92,12 +92,15 @@ export function tile_atlas_bordered_block(content: Uint8Array, content_size: Arr
92
92
  */
93
93
  export class GPUTileAtlas3D {
94
94
  /**
95
- * Every argument is required: an atlas is declared, not configured.
95
+ * Every argument is required: an atlas is declared, not configured. Either `format` (one texture)
96
+ * or `formats` (one or more synchronized textures sharing the same slot grid) must be given.
96
97
  *
97
98
  * @param {object} options
98
99
  * @param {GPUDevice} options.device
99
- * @param {GPUTextureFormat} options.format an uncompressed, copyable format — what a 3-D texture
100
- * allows, and what {@link write} sizes its block by
100
+ * @param {GPUTextureFormat} [options.format] an uncompressed, copyable format — what a 3-D texture
101
+ * allows, and what {@link write} sizes its block by (mutually exclusive with `formats`)
102
+ * @param {GPUTextureFormat[]} [options.formats] one or more uncompressed, copyable formats for a
103
+ * multi-texture atlas (mutually exclusive with `format`)
101
104
  * @param {number[]} options.content_size texels of content along x, y and z of a tile, three
102
105
  * positive integers; a cubic tile is `[n, n, n]`. Copied: the array stays the caller's
103
106
  * @param {number} options.border texels of skirt on each side of the content, at least 1 for a
@@ -114,9 +117,10 @@ export class GPUTileAtlas3D {
114
117
  * are copies
115
118
  * @param {string} options.label the texture's label
116
119
  */
117
- constructor({ device, format, content_size, border, slots_x, slots_y, capacity, usage, label }: {
120
+ constructor({ device, formats, content_size, border, slots_x, slots_y, capacity, usage, label }: {
118
121
  device: GPUDevice;
119
- format: GPUTextureFormat;
122
+ format?: GPUTextureFormat;
123
+ formats?: GPUTextureFormat[];
120
124
  content_size: number[];
121
125
  border: number;
122
126
  slots_x: number;
@@ -129,14 +133,42 @@ export class GPUTileAtlas3D {
129
133
  * @returns {GPUTextureContext}
130
134
  */
131
135
  get texture(): GPUTextureContext;
136
+ /**
137
+ * All synchronized textures of the atlas.
138
+ * @returns {readonly GPUTextureContext[]}
139
+ */
140
+ get textures(): readonly GPUTextureContext[];
141
+ /**
142
+ * @returns {number}
143
+ */
144
+ get texture_count(): number;
145
+ /**
146
+ * @param {number} index
147
+ * @returns {GPUTextureContext}
148
+ */
149
+ texture_at(index: number): GPUTextureContext;
132
150
  /**
133
151
  * @returns {GPUTextureFormat}
134
152
  */
135
153
  get format(): GPUTextureFormat;
154
+ /**
155
+ * @returns {readonly GPUTextureFormat[]}
156
+ */
157
+ get formats(): readonly GPUTextureFormat[];
158
+ /**
159
+ * @param {number} index
160
+ * @returns {GPUTextureFormat}
161
+ */
162
+ format_at(index: number): GPUTextureFormat;
136
163
  /**
137
164
  * @returns {number}
138
165
  */
139
166
  get bytes_per_texel(): number;
167
+ /**
168
+ * @param {number} index
169
+ * @returns {number}
170
+ */
171
+ bytes_per_texel_at(index: number): number;
140
172
  /**
141
173
  * Texels of content along x, y and z of a tile. Frozen: the atlas's own, not a copy.
142
174
  * @returns {readonly number[]}
@@ -216,8 +248,9 @@ export class GPUTileAtlas3D {
216
248
  * @param {number} slot a live slot
217
249
  * @param {Uint8Array} content `content_size[0] · content_size[1] · content_size[2] ·
218
250
  * bytes_per_texel` bytes, x fastest, then y, then z
251
+ * @param {number} [texture_index=0] which texture of the atlas to write into
219
252
  */
220
- write(slot: number, content: Uint8Array): void;
253
+ write(slot: number, content: Uint8Array, texture_index?: number): void;
221
254
  /**
222
255
  * Put a whole tile, skirt included, into a slot from a buffer on the device — the way a compute
223
256
  * bake lands: it writes the `tile_size` block into a storage buffer, rows padded to the copy
@@ -229,8 +262,9 @@ export class GPUTileAtlas3D {
229
262
  * @param {number} byte_offset where the block starts in the buffer
230
263
  * @param {number} bytes_per_row stride of a row of `tile_size[0]` texels, a multiple of
231
264
  * `COPY_BYTES_PER_ROW_ALIGNMENT`; rows per image is `tile_size[1]`
265
+ * @param {number} [texture_index=0] which texture of the atlas to copy into
232
266
  */
233
- copy_from_buffer(encoder: GPUCommandEncoder, slot: number, buffer: GPUBuffer, byte_offset: number, bytes_per_row: number): void;
267
+ copy_from_buffer(encoder: GPUCommandEncoder, slot: number, buffer: GPUBuffer, byte_offset: number, bytes_per_row: number, texture_index?: number): void;
234
268
  destroy(): void;
235
269
  #private;
236
270
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GPUTileAtlas3D.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/atlas/GPUTileAtlas3D.js"],"names":[],"mappings":"AA8lBA;;;;;;;;GAQG;AACH,2CANW,MAAM,WACN,MAAM,WACN,MAAM,OACN,MAAM,EAAE,GAAC,WAAW,GAClB,MAAM,EAAE,GAAC,WAAW,CAchC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,sDARW,MAAM,WACN,MAAM,eACN,MAAM,eACN,MAAM,iBACN,MAAM,OACN,MAAM,EAAE,GACN,OAAO,CAoCnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,mDATW,UAAU,gBAEV,UAAU,MAAM,CAAC,UACjB,MAAM,mBACN,MAAM,OACN,UAAU,GAER,UAAU,CAkDtB;AAtuBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH;IA4FI;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH;QAnB8B,MAAM;QACC,MAAM;QAEd,YAAY,EAA9B,MAAM,EAAE;QAEQ,MAAM,EAAtB,MAAM;QAEU,OAAO,EAAvB,MAAM;QAEU,OAAO,EAAvB,MAAM;QAEU,QAAQ,EAAxB,MAAM;QAEwB,KAAK;QAInB,KAAK,EAArB,MAAM;OA0EhB;IAED;;OAEG;IACH,iCAEC;IAED;;OAEG;IACH,+BAEC;IAED;;OAEG;IACH,8BAEC;IAED;;;OAGG;IACH,sCAEC;IAED;;OAEG;IACH,qBAEC;IAED;;;;OAIG;IACH,mCAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;;OAKG;IACH,6BAEC;IAED;;OAEG;IACH,yBAEC;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;;OAKG;IACH,YAFa,MAAM,CAkBlB;IAED;;OAEG;IACH,WAFW,MAAM,QAOhB;IAED;;;;;;;;OAQG;IACH,kBAJW,MAAM,OACN,MAAM,EAAE,GAAC,WAAW,GAClB,MAAM,EAAE,GAAC,WAAW,CAehC;IAED;;;;;;;OAOG;IACH,YAJW,MAAM,WACN,UAAU,QAiCpB;IAED;;;;;;;;;;;OAWG;IACH,mDANW,MAAM,kCAEN,MAAM,iBACN,MAAM,QA+BhB;IAED,gBAEC;;CAsHJ;kCA1lBiC,yBAAyB"}
1
+ {"version":3,"file":"GPUTileAtlas3D.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/texture/atlas/GPUTileAtlas3D.js"],"names":[],"mappings":"AAssBA;;;;;;;;GAQG;AACH,2CANW,MAAM,WACN,MAAM,WACN,MAAM,OACN,MAAM,EAAE,GAAC,WAAW,GAClB,MAAM,EAAE,GAAC,WAAW,CAchC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,sDARW,MAAM,WACN,MAAM,eACN,MAAM,eACN,MAAM,iBACN,MAAM,OACN,MAAM,EAAE,GACN,OAAO,CAoCnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,mDATW,UAAU,gBAEV,UAAU,MAAM,CAAC,UACjB,MAAM,mBACN,MAAM,OACN,UAAU,GAER,UAAU,CAkDtB;AA90BD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH;IA4FI;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH;QArB8B,MAAM;QACE,MAAM;QAEJ,OAAO,GAApC,kBAAkB;QAEA,YAAY,EAA9B,MAAM,EAAE;QAEQ,MAAM,EAAtB,MAAM;QAEU,OAAO,EAAvB,MAAM;QAEU,OAAO,EAAvB,MAAM;QAEU,QAAQ,EAAxB,MAAM;QAEwB,KAAK;QAInB,KAAK,EAArB,MAAM;OAiGhB;IAED;;OAEG;IACH,iCAEC;IAED;;;OAGG;IACH,6CAEC;IAED;;OAEG;IACH,4BAEC;IAED;;;OAGG;IACH,kBAHW,MAAM,GACJ,iBAAiB,CAO7B;IAED;;OAEG;IACH,+BAEC;IAED;;OAEG;IACH,2CAEC;IAED;;;OAGG;IACH,iBAHW,MAAM,oBAQhB;IAED;;OAEG;IACH,8BAEC;IAED;;;OAGG;IACH,0BAHW,MAAM,GACJ,MAAM,CAOlB;IAED;;;OAGG;IACH,sCAEC;IAED;;OAEG;IACH,qBAEC;IAED;;;;OAIG;IACH,mCAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,sBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;;OAKG;IACH,6BAEC;IAED;;OAEG;IACH,yBAEC;IAED;;;OAGG;IACH,cAHW,MAAM,GACJ,OAAO,CAMnB;IAED;;;;;OAKG;IACH,YAFa,MAAM,CAkBlB;IAED;;OAEG;IACH,WAFW,MAAM,QAOhB;IAED;;;;;;;;OAQG;IACH,kBAJW,MAAM,OACN,MAAM,EAAE,GAAC,WAAW,GAClB,MAAM,EAAE,GAAC,WAAW,CAehC;IAED;;;;;;;;OAQG;IACH,YALW,MAAM,WACN,UAAU,kBAEV,MAAM,QAkChB;IAED;;;;;;;;;;;;OAYG;IACH,mDAPW,MAAM,kCAEN,MAAM,iBACN,MAAM,kBAEN,MAAM,QAgChB;IAED,gBAIC;;CAqIJ;kCAlsBiC,yBAAyB"}
@@ -56,19 +56,19 @@ export class GPUTileAtlas3D {
56
56
  #device;
57
57
 
58
58
  /**
59
- * @type {GPUTextureContext}
59
+ * @type {readonly GPUTextureContext[]}
60
60
  */
61
- #texture;
61
+ #textures;
62
62
 
63
63
  /**
64
- * @type {GPUTextureFormat}
64
+ * @type {readonly GPUTextureFormat[]}
65
65
  */
66
- #format;
66
+ #formats;
67
67
 
68
68
  /**
69
- * @type {number}
69
+ * @type {readonly number[]}
70
70
  */
71
- #bytes_per_texel;
71
+ #bytes_per_texel_list;
72
72
 
73
73
  /**
74
74
  * Texels of content along x, y and z.
@@ -142,12 +142,15 @@ export class GPUTileAtlas3D {
142
142
  #label;
143
143
 
144
144
  /**
145
- * Every argument is required: an atlas is declared, not configured.
145
+ * Every argument is required: an atlas is declared, not configured. Either `format` (one texture)
146
+ * or `formats` (one or more synchronized textures sharing the same slot grid) must be given.
146
147
  *
147
148
  * @param {object} options
148
149
  * @param {GPUDevice} options.device
149
- * @param {GPUTextureFormat} options.format an uncompressed, copyable format — what a 3-D texture
150
- * allows, and what {@link write} sizes its block by
150
+ * @param {GPUTextureFormat} [options.format] an uncompressed, copyable format — what a 3-D texture
151
+ * allows, and what {@link write} sizes its block by (mutually exclusive with `formats`)
152
+ * @param {GPUTextureFormat[]} [options.formats] one or more uncompressed, copyable formats for a
153
+ * multi-texture atlas (mutually exclusive with `format`)
151
154
  * @param {number[]} options.content_size texels of content along x, y and z of a tile, three
152
155
  * positive integers; a cubic tile is `[n, n, n]`. Copied: the array stays the caller's
153
156
  * @param {number} options.border texels of skirt on each side of the content, at least 1 for a
@@ -164,9 +167,19 @@ export class GPUTileAtlas3D {
164
167
  * are copies
165
168
  * @param {string} options.label the texture's label
166
169
  */
167
- constructor({ device, format, content_size, border, slots_x, slots_y, capacity, usage, label }) {
170
+ constructor({ device, formats, content_size, border, slots_x, slots_y, capacity, usage, label }) {
168
171
  assert.defined(device, 'device');
169
- assert.isString(format, 'format');
172
+ const format_list = formats;
173
+
174
+
175
+
176
+ assert.isArrayLike(format_list, 'formats');
177
+ assert.greaterThan(format_list.length, 0, 'formats must not be empty');
178
+
179
+ for (let i = 0; i < format_list.length; i++) {
180
+ assert.isString(format_list[i], `formats[${i}]`);
181
+ }
182
+
170
183
  assert.isArrayLike(content_size, 'content_size');
171
184
  assert.equal(content_size.length, 3, 'content_size is texels along x, y and z');
172
185
  assert.isPositiveInteger(content_size[0], 'content_size[0]');
@@ -184,14 +197,21 @@ export class GPUTileAtlas3D {
184
197
  assert.greaterThan(usage, 0, 'usage: a texture no shader binds is not an atlas anyone reads');
185
198
  assert.isString(label, 'label');
186
199
 
187
- const info = gpu_texture_format_info(format);
200
+ const bytes_per_texel_list = [];
201
+
202
+ for (let i = 0; i < format_list.length; i++) {
203
+ const fmt = format_list[i];
204
+ const info = gpu_texture_format_info(fmt);
205
+
206
+ assert.equal(info.block_width, 1, `${fmt} is block-compressed; a 3-D texture cannot be`);
207
+ assert.equal(info.copyable, true, `${fmt} cannot be copied into, and a tile is written by copy`);
188
208
 
189
- assert.equal(info.block_width, 1, `${format} is block-compressed; a 3-D texture cannot be`);
190
- assert.equal(info.copyable, true, `${format} cannot be copied into, and a tile is written by copy`);
209
+ bytes_per_texel_list.push(info.bytes_per_block);
210
+ }
191
211
 
192
212
  this.#device = device;
193
- this.#format = format;
194
- this.#bytes_per_texel = info.bytes_per_block;
213
+ this.#formats = Object.freeze([...format_list]);
214
+ this.#bytes_per_texel_list = Object.freeze(bytes_per_texel_list);
195
215
  this.#content_size = Object.freeze([content_size[0], content_size[1], content_size[2]]);
196
216
  this.#border = border;
197
217
 
@@ -212,20 +232,26 @@ export class GPUTileAtlas3D {
212
232
  this.#slots_y = slots_y;
213
233
  this.#label = label;
214
234
 
215
- const texture = new GPUTextureContext(device);
216
- const td = texture.descriptor;
235
+ const textures = [];
236
+
237
+ for (let i = 0; i < format_list.length; i++) {
238
+ const texture = new GPUTextureContext(device);
239
+ const td = texture.descriptor;
240
+
241
+ td.label = format_list.length === 1 ? label : `${label}[${i}]`;
242
+ td.format = format_list[i];
243
+ td.dimension = "3d";
244
+ td.mipLevelCount = 1;
245
+ // bound however the clients said, written by host writes and device copies, and copied out
246
+ // of itself when it grows
247
+ td.usage = usage
248
+ | GPUTextureUsage.COPY_DST
249
+ | GPUTextureUsage.COPY_SRC;
217
250
 
218
- td.label = label;
219
- td.format = format;
220
- td.dimension = "3d";
221
- td.mipLevelCount = 1;
222
- // bound however the clients said, written by host writes and device copies, and copied out
223
- // of itself when it grows
224
- td.usage = usage
225
- | GPUTextureUsage.COPY_DST
226
- | GPUTextureUsage.COPY_SRC;
251
+ textures.push(texture);
252
+ }
227
253
 
228
- this.#texture = texture;
254
+ this.#textures = Object.freeze(textures);
229
255
 
230
256
  assert.lessThanOrEqual(slots_x, this.#limit_x, `slots_x ${slots_x} of ${tile_x} texels exceed maxTextureDimension3D ${max_dimension}`);
231
257
  assert.lessThanOrEqual(slots_y, this.#limit_y, `slots_y ${slots_y} of ${tile_y} texels exceed maxTextureDimension3D ${max_dimension}`);
@@ -242,21 +268,76 @@ export class GPUTileAtlas3D {
242
268
  * @returns {GPUTextureContext}
243
269
  */
244
270
  get texture() {
245
- return this.#texture;
271
+ return this.#textures[0];
272
+ }
273
+
274
+ /**
275
+ * All synchronized textures of the atlas.
276
+ * @returns {readonly GPUTextureContext[]}
277
+ */
278
+ get textures() {
279
+ return this.#textures;
280
+ }
281
+
282
+ /**
283
+ * @returns {number}
284
+ */
285
+ get texture_count() {
286
+ return this.#textures.length;
287
+ }
288
+
289
+ /**
290
+ * @param {number} index
291
+ * @returns {GPUTextureContext}
292
+ */
293
+ texture_at(index) {
294
+ assert.isNonNegativeInteger(index, 'index');
295
+ assert.lessThan(index, this.#textures.length, 'index');
296
+
297
+ return this.#textures[index];
246
298
  }
247
299
 
248
300
  /**
249
301
  * @returns {GPUTextureFormat}
250
302
  */
251
303
  get format() {
252
- return this.#format;
304
+ return this.#formats[0];
305
+ }
306
+
307
+ /**
308
+ * @returns {readonly GPUTextureFormat[]}
309
+ */
310
+ get formats() {
311
+ return this.#formats;
312
+ }
313
+
314
+ /**
315
+ * @param {number} index
316
+ * @returns {GPUTextureFormat}
317
+ */
318
+ format_at(index) {
319
+ assert.isNonNegativeInteger(index, 'index');
320
+ assert.lessThan(index, this.#formats.length, 'index');
321
+
322
+ return this.#formats[index];
253
323
  }
254
324
 
255
325
  /**
256
326
  * @returns {number}
257
327
  */
258
328
  get bytes_per_texel() {
259
- return this.#bytes_per_texel;
329
+ return this.#bytes_per_texel_list[0];
330
+ }
331
+
332
+ /**
333
+ * @param {number} index
334
+ * @returns {number}
335
+ */
336
+ bytes_per_texel_at(index) {
337
+ assert.isNonNegativeInteger(index, 'index');
338
+ assert.lessThan(index, this.#bytes_per_texel_list.length, 'index');
339
+
340
+ return this.#bytes_per_texel_list[index];
260
341
  }
261
342
 
262
343
  /**
@@ -407,13 +488,16 @@ export class GPUTileAtlas3D {
407
488
  * @param {number} slot a live slot
408
489
  * @param {Uint8Array} content `content_size[0] · content_size[1] · content_size[2] ·
409
490
  * bytes_per_texel` bytes, x fastest, then y, then z
491
+ * @param {number} [texture_index=0] which texture of the atlas to write into
410
492
  */
411
- write(slot, content) {
493
+ write(slot, content, texture_index = 0) {
412
494
  assert.ok(this.is_live(slot), `slot ${slot} is not allocated`);
413
495
  assert.isInstanceOf(content, Uint8Array, 'content');
496
+ assert.isNonNegativeInteger(texture_index, 'texture_index');
497
+ assert.lessThan(texture_index, this.#textures.length, 'texture_index');
414
498
 
415
499
  const n = this.#content_size;
416
- const bpt = this.#bytes_per_texel;
500
+ const bpt = this.#bytes_per_texel_list[texture_index];
417
501
 
418
502
  assert.equal(content.length, n[0] * n[1] * n[2] * bpt, `content holds ${content.length} bytes; a tile's content is ${n[0]}×${n[1]}×${n[2]} texels of ${bpt} bytes`);
419
503
 
@@ -426,7 +510,7 @@ export class GPUTileAtlas3D {
426
510
 
427
511
  this.#device.queue.writeTexture(
428
512
  {
429
- texture: this.#texture.gpu_texture,
513
+ texture: this.#textures[texture_index].gpu_texture,
430
514
  mipLevel: 0,
431
515
  origin: this.slot_origin(slot, [0, 0, 0]),
432
516
  },
@@ -451,20 +535,23 @@ export class GPUTileAtlas3D {
451
535
  * @param {number} byte_offset where the block starts in the buffer
452
536
  * @param {number} bytes_per_row stride of a row of `tile_size[0]` texels, a multiple of
453
537
  * `COPY_BYTES_PER_ROW_ALIGNMENT`; rows per image is `tile_size[1]`
538
+ * @param {number} [texture_index=0] which texture of the atlas to copy into
454
539
  */
455
- copy_from_buffer(encoder, slot, buffer, byte_offset, bytes_per_row) {
540
+ copy_from_buffer(encoder, slot, buffer, byte_offset, bytes_per_row, texture_index = 0) {
456
541
  assert.defined(encoder, 'encoder');
457
542
  assert.ok(this.is_live(slot), `slot ${slot} is not allocated`);
458
543
  assert.defined(buffer, 'buffer');
459
544
  assert.isNonNegativeInteger(byte_offset, 'byte_offset');
460
545
  assert.isNonNegativeInteger(bytes_per_row, 'bytes_per_row');
546
+ assert.isNonNegativeInteger(texture_index, 'texture_index');
547
+ assert.lessThan(texture_index, this.#textures.length, 'texture_index');
461
548
 
462
549
  const tile = this.#tile_size;
463
550
  const tx = tile[0];
464
551
  const ty = tile[1];
465
552
  const tz = tile[2];
466
553
 
467
- assert.greaterThanOrEqual(bytes_per_row, tx * this.#bytes_per_texel, 'bytes_per_row is shorter than a row of the tile');
554
+ assert.greaterThanOrEqual(bytes_per_row, tx * this.#bytes_per_texel_list[texture_index], 'bytes_per_row is shorter than a row of the tile');
468
555
 
469
556
  encoder.copyBufferToTexture(
470
557
  {
@@ -474,7 +561,7 @@ export class GPUTileAtlas3D {
474
561
  rowsPerImage: ty,
475
562
  },
476
563
  {
477
- texture: this.#texture.gpu_texture,
564
+ texture: this.#textures[texture_index].gpu_texture,
478
565
  mipLevel: 0,
479
566
  origin: this.slot_origin(slot, [0, 0, 0]),
480
567
  },
@@ -483,7 +570,9 @@ export class GPUTileAtlas3D {
483
570
  }
484
571
 
485
572
  destroy() {
486
- this.#texture.destroy();
573
+ for (let i = 0; i < this.#textures.length; i++) {
574
+ this.#textures[i].destroy();
575
+ }
487
576
  }
488
577
 
489
578
  /**
@@ -508,8 +597,14 @@ export class GPUTileAtlas3D {
508
597
  this.#slots_z = layers;
509
598
  this.#resize_live();
510
599
 
600
+ const width = this.#slots_x * tile[0];
601
+ const height = this.#slots_y * tile[1];
602
+ const depth = layers * tile[2];
603
+
511
604
  // preserve: a new layer keeps every tile where it was, because x and y do not change
512
- this.#texture.resize(this.#slots_x * tile[0], this.#slots_y * tile[1], layers * tile[2], true);
605
+ for (let i = 0; i < this.#textures.length; i++) {
606
+ this.#textures[i].resize(width, height, depth, true);
607
+ }
513
608
  }
514
609
 
515
610
  /**
@@ -538,13 +633,18 @@ export class GPUTileAtlas3D {
538
633
  const layers = Math.ceil((this.capacity + 1) / (nx * ny));
539
634
 
540
635
  const device = this.#device;
541
- const texture = this.#texture;
542
-
543
- const source = texture.gpu_texture;
636
+ const textures = this.#textures;
637
+ const texture_count = textures.length;
544
638
 
545
- texture.descriptor.size = [nx * tx, ny * ty, layers * tz];
639
+ const sources = new Array(texture_count);
640
+ const destinations = new Array(texture_count);
546
641
 
547
- const destination = device.createTexture(texture.descriptor);
642
+ for (let i = 0; i < texture_count; i++) {
643
+ const texture = textures[i];
644
+ sources[i] = texture.gpu_texture;
645
+ texture.descriptor.size = [nx * tx, ny * ty, layers * tz];
646
+ destinations[i] = device.createTexture(texture.descriptor);
647
+ }
548
648
 
549
649
  const encoder = device.createCommandEncoder({
550
650
  label: `${this.#label} / widen`
@@ -562,19 +662,21 @@ export class GPUTileAtlas3D {
562
662
 
563
663
  const run = Math.min(sx - from[0], nx - to[0], count - slot);
564
664
 
565
- encoder.copyTextureToTexture(
566
- {
567
- texture: source,
568
- mipLevel: 0,
569
- origin: [from[0] * tx, from[1] * ty, from[2] * tz],
570
- },
571
- {
572
- texture: destination,
573
- mipLevel: 0,
574
- origin: [to[0] * tx, to[1] * ty, to[2] * tz],
575
- },
576
- [run * tx, ty, tz]
577
- );
665
+ for (let i = 0; i < texture_count; i++) {
666
+ encoder.copyTextureToTexture(
667
+ {
668
+ texture: sources[i],
669
+ mipLevel: 0,
670
+ origin: [from[0] * tx, from[1] * ty, from[2] * tz],
671
+ },
672
+ {
673
+ texture: destinations[i],
674
+ mipLevel: 0,
675
+ origin: [to[0] * tx, to[1] * ty, to[2] * tz],
676
+ },
677
+ [run * tx, ty, tz]
678
+ );
679
+ }
578
680
 
579
681
  slot += run;
580
682
  }
@@ -582,7 +684,9 @@ export class GPUTileAtlas3D {
582
684
  device.queue.submit([encoder.finish()]);
583
685
 
584
686
  // destroys the old texture; the copies out of it were submitted first
585
- texture.replace(destination);
687
+ for (let i = 0; i < texture_count; i++) {
688
+ textures[i].replace(destinations[i]);
689
+ }
586
690
 
587
691
  this.#slots_x = nx;
588
692
  this.#slots_y = ny;
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Multiplier applied to screen-space UV derivatives before dividing by `view.upscale_ratio`
3
+ * to bias texture mip selection for temporal super-sampling (TAAU / NSS).
4
+ *
5
+ * @type {number}
6
+ */
7
+ export const RENDER_MIP_DERIVATIVE_BIAS: number;
8
+ /**
9
+ * Shared WGSL helpers for biasing screen-space UV derivatives and mip levels according to
10
+ * the active internal resolution scale (`view.upscale_ratio = output_resolution / internal_resolution`)
11
+ * and global TAA mip bias ({@link RENDER_GLOBAL_MIP_BIAS}).
12
+ *
13
+ * When rendering at reduced internal resolution (`upscale_ratio > 1.0`), raw screen-space
14
+ * derivatives (`dpdx` / `dpdy` or finite differences across internal pixels) measure the
15
+ * coarser internal pixel footprint rather than the final output pixel footprint reconstructed
16
+ * by temporal upscaling. Scaling derivatives by `view_uv_derivative_bias(view.upscale_ratio)`
17
+ * ensures mip selection and anisotropic filtering match the target output resolution.
18
+ */
19
+ export const chunk_view_mip_bias: CodeChunk;
20
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
21
+ //# sourceMappingURL=chunk_view_mip_bias.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_view_mip_bias.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/view/chunk_view_mip_bias.js"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,yCAFU,MAAM,CAE2D;AAE3E;;;;;;;;;;GAUG;AACH,4CAqBE;0BA1CwB,iCAAiC"}
@@ -0,0 +1,44 @@
1
+ import { RENDER_GLOBAL_MIP_BIAS } from "../postprocess/taa/RENDER_GLOBAL_MIP_BIAS.js";
2
+ import { CodeChunk } from "../shader/compiler/CodeChunk.js";
3
+
4
+ /**
5
+ * Multiplier applied to screen-space UV derivatives before dividing by `view.upscale_ratio`
6
+ * to bias texture mip selection for temporal super-sampling (TAAU / NSS).
7
+ *
8
+ * @type {number}
9
+ */
10
+ export const RENDER_MIP_DERIVATIVE_BIAS = 1 / (1 - RENDER_GLOBAL_MIP_BIAS);
11
+
12
+ /**
13
+ * Shared WGSL helpers for biasing screen-space UV derivatives and mip levels according to
14
+ * the active internal resolution scale (`view.upscale_ratio = output_resolution / internal_resolution`)
15
+ * and global TAA mip bias ({@link RENDER_GLOBAL_MIP_BIAS}).
16
+ *
17
+ * When rendering at reduced internal resolution (`upscale_ratio > 1.0`), raw screen-space
18
+ * derivatives (`dpdx` / `dpdy` or finite differences across internal pixels) measure the
19
+ * coarser internal pixel footprint rather than the final output pixel footprint reconstructed
20
+ * by temporal upscaling. Scaling derivatives by `view_uv_derivative_bias(view.upscale_ratio)`
21
+ * ensures mip selection and anisotropic filtering match the target output resolution.
22
+ */
23
+ export const chunk_view_mip_bias = CodeChunk.from(
24
+ //language=WGSL
25
+ `
26
+ const RENDER_MIP_DERIVATIVE_BIAS: f32 = ${RENDER_MIP_DERIVATIVE_BIAS.toFixed(8)};
27
+ const RENDER_GLOBAL_MIP_BIAS: f32 = ${RENDER_GLOBAL_MIP_BIAS.toFixed(8)};
28
+
29
+ /**
30
+ * Per-axis multiplier for screen-space UV gradients (\`ddx\` by \`.x\`, \`ddy\` by \`.y\`)
31
+ * that accounts for both temporal upscaling (\`upscale_ratio\`) and global TAA mip bias.
32
+ */
33
+ fn view_uv_derivative_bias(upscale_ratio: vec2<f32>) -> vec2<f32> {
34
+ return vec2<f32>(RENDER_MIP_DERIVATIVE_BIAS) / upscale_ratio;
35
+ }
36
+
37
+ /**
38
+ * Scalar LOD bias (in mip levels) corresponding to \`upscale_ratio\` and global TAA mip bias.
39
+ */
40
+ fn view_mip_bias(upscale_ratio: vec2<f32>) -> f32 {
41
+ return -log2(max(upscale_ratio.x, upscale_ratio.y)) + RENDER_GLOBAL_MIP_BIAS;
42
+ }
43
+ `
44
+ );
@@ -137,7 +137,7 @@ export class GPUSceneVolumetrics {
137
137
 
138
138
  this.#noise_atlas = new GPUTileAtlas3D({
139
139
  device,
140
- format: PARTICIPATING_MEDIA_NOISE_TILE_FORMAT,
140
+ formats: [PARTICIPATING_MEDIA_NOISE_TILE_FORMAT],
141
141
  // a cube: the bake makes the same number of features along every edge
142
142
  content_size: [PARTICIPATING_MEDIA_NOISE_TILE_CONTENT_SIZE, PARTICIPATING_MEDIA_NOISE_TILE_CONTENT_SIZE, PARTICIPATING_MEDIA_NOISE_TILE_CONTENT_SIZE],
143
143
  border: PARTICIPATING_MEDIA_NOISE_TILE_BORDER,