@woosh/meep-engine 3.53.0 → 3.55.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 (249) 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/graphics/texture/atlas/CachingTextureAtlas.d.ts +6 -1
  6. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.d.ts.map +1 -1
  7. package/src/engine/graphics/texture/atlas/CachingTextureAtlas.js +363 -325
  8. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts +93 -14
  9. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.d.ts.map +1 -1
  10. package/src/engine/graphics/texture/atlas/ManagedTextureAtlas.js +322 -183
  11. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts +9 -0
  12. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.d.ts.map +1 -1
  13. package/src/engine/graphics/texture/atlas/ReferencedTextureAtlas.js +110 -83
  14. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts +42 -0
  15. package/src/engine/graphics/texture/atlas/SpriteAtlas.d.ts.map +1 -0
  16. package/src/engine/{graphics3/decal/DecalAtlas.js → graphics/texture/atlas/SpriteAtlas.js} +202 -194
  17. package/src/engine/{graphics3/decal/DecalAtlasFill.d.ts → graphics/texture/atlas/SpriteAtlasFill.d.ts} +4 -4
  18. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.d.ts.map +1 -0
  19. package/src/engine/graphics/texture/atlas/SpriteAtlasFill.js +30 -0
  20. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts +7 -0
  21. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  22. package/src/engine/graphics/texture/atlas/TextureAtlas.js +11 -1
  23. package/src/engine/{graphics3/decal/decal_atlas_border.d.ts → graphics/texture/atlas/sprite_atlas_border.d.ts} +12 -12
  24. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -0
  25. package/src/engine/{graphics3/decal/decal_atlas_border.js → graphics/texture/atlas/sprite_atlas_border.js} +69 -69
  26. package/src/engine/graphics3/DecalSystem.d.ts.map +1 -1
  27. package/src/engine/graphics3/DecalSystem.js +447 -450
  28. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts +9 -22
  29. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  30. package/src/engine/graphics3/GPUParticleEmitterSystem.js +892 -951
  31. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  32. package/src/generation/foliage/FOLIAGE_DESIGN.md +2 -1
  33. package/src/generation/foliage/config/BarkMaterialConfig.d.ts +4 -3
  34. package/src/generation/foliage/config/BarkMaterialConfig.d.ts.map +1 -1
  35. package/src/generation/foliage/config/BarkMaterialConfig.js +6 -6
  36. package/src/generation/foliage/config/FoliageBarkType.d.ts +11 -0
  37. package/src/generation/foliage/config/FoliageBarkType.d.ts.map +1 -0
  38. package/src/generation/foliage/config/FoliageBarkType.js +16 -0
  39. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts +58 -5
  40. package/src/generation/foliage/config/FoliageMaterialConfig.d.ts.map +1 -1
  41. package/src/generation/foliage/config/FoliageMaterialConfig.js +279 -181
  42. package/src/generation/foliage/index.d.ts +2 -1
  43. package/src/generation/foliage/index.js +44 -43
  44. package/src/generation/foliage/material/make_bark_material.d.ts.map +1 -1
  45. package/src/generation/foliage/material/make_bark_material.js +23 -95
  46. package/src/generation/foliage/material/make_foliage_material.d.ts +29 -3
  47. package/src/generation/foliage/material/make_foliage_material.d.ts.map +1 -1
  48. package/src/generation/foliage/material/make_foliage_material.js +605 -359
  49. package/src/generation/foliage/mesh/branch_collar_project.d.ts.map +1 -1
  50. package/src/generation/foliage/mesh/branch_collar_project.js +205 -203
  51. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts +15 -0
  52. package/src/generation/foliage/mesh/foliage_collect_attachments.d.ts.map +1 -1
  53. package/src/generation/foliage/mesh/foliage_collect_attachments.js +569 -502
  54. package/src/generation/foliage/mesh/tree_mesh_build_bark.d.ts.map +1 -1
  55. package/src/generation/foliage/mesh/tree_mesh_build_bark.js +1049 -1047
  56. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts +2 -1
  57. package/src/generation/foliage/mesh/tree_mesh_build_foliage.d.ts.map +1 -1
  58. package/src/generation/foliage/mesh/tree_mesh_build_foliage.js +454 -415
  59. package/src/generation/foliage/presets/make_tree_species_preset.d.ts.map +1 -1
  60. package/src/generation/foliage/presets/make_tree_species_preset.js +870 -837
  61. package/src/generation/foliage/skeleton/crown_envelope_evaluate.js +121 -121
  62. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts +10 -7
  63. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.d.ts.map +1 -1
  64. package/src/generation/foliage/skeleton/tree_skeleton_compute_pipe_radii.js +206 -179
  65. package/src/generation/foliage/skeleton/tree_skeleton_grow.d.ts.map +1 -1
  66. package/src/generation/foliage/skeleton/tree_skeleton_grow.js +1871 -1104
  67. package/src/shade/RENDERER_CONTRACT.md +5 -2
  68. package/src/shade/device/SHADE_DEVICE_FLOOR.d.ts.map +1 -1
  69. package/src/shade/device/SHADE_DEVICE_FLOOR.js +2 -0
  70. package/src/shade/playground/foliage_wind/foliage_world.d.ts +6 -0
  71. package/src/shade/playground/foliage_wind/foliage_world.d.ts.map +1 -1
  72. package/src/shade/playground/foliage_wind/foliage_world.js +602 -593
  73. package/src/shade/playground/foliage_wind/index.html +260 -254
  74. package/src/shade/playground/foliage_wind/main.js +275 -263
  75. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  76. package/src/shade/renderer/Renderer.js +1 -1
  77. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  78. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  79. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  80. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  81. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  82. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +1 -1
  83. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +3 -3
  84. package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
  85. package/src/shade/renderer/hiz/HierarchicalZBuffer.js +350 -294
  86. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts +0 -2
  87. package/src/shade/renderer/hiz/generate_downsampler_code.d.ts.map +1 -1
  88. package/src/shade/renderer/hiz/generate_downsampler_code.js +99 -100
  89. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts +15 -0
  90. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -0
  91. package/src/shade/renderer/hiz/hzb_pick_alignment.js +148 -0
  92. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts +28 -0
  93. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.d.ts.map +1 -0
  94. package/src/shade/renderer/hiz/hzb_plan_reduction_steps.js +58 -0
  95. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts +5 -5
  96. package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
  97. package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +57 -67
  98. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts +3 -3
  99. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
  100. package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +111 -112
  101. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts +5 -0
  102. package/src/shade/renderer/hiz/shader_hzb_spd.d.ts.map +1 -0
  103. package/src/shade/renderer/hiz/shader_hzb_spd.js +160 -0
  104. package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
  105. package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
  106. package/src/shade/renderer/light/GPULightCollection.js +67 -0
  107. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts +7 -0
  108. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.d.ts.map +1 -0
  109. package/src/shade/renderer/light/environment/FAR_FIELD_IRRADIANCE_SH_RESOURCE.js +13 -0
  110. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts +10 -0
  111. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.d.ts.map +1 -0
  112. package/src/shade/renderer/light/environment/shader_project_far_field_irradiance_sh.js +72 -0
  113. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +39 -0
  114. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -0
  115. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +90 -0
  116. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts +12 -0
  117. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.d.ts.map +1 -0
  118. package/src/shade/renderer/light/world_cluster/chunk_world_light_cluster_lookup.js +56 -0
  119. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +31 -0
  120. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -0
  121. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +196 -0
  122. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts +10 -0
  123. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -0
  124. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +163 -0
  125. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts +4 -0
  126. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.d.ts.map +1 -0
  127. package/src/shade/renderer/light/world_cluster/shader_world_cluster_cull_lights.js +137 -0
  128. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  129. package/src/shade/renderer/particles/GPUParticleSystem.d.ts.map +1 -1
  130. package/src/shade/renderer/particles/GPUParticleSystem.js +4 -3
  131. package/src/shade/renderer/particles/graph_particles_avboit.d.ts +4 -3
  132. package/src/shade/renderer/particles/graph_particles_avboit.d.ts.map +1 -1
  133. package/src/shade/renderer/particles/graph_particles_avboit.js +28 -11
  134. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts +9 -13
  135. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.d.ts.map +1 -1
  136. package/src/shade/renderer/particles/shaders/chunk_particle_lighting.js +25 -20
  137. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.d.ts.map +1 -1
  138. package/src/shade/renderer/particles/shaders/shader_particle_avboit_draw.js +21 -38
  139. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.d.ts.map +1 -1
  140. package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +154 -147
  141. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +2 -1
  142. package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
  143. package/src/shade/renderer/postprocess/gtao/GTAO.js +5 -1
  144. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts +8 -0
  145. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.d.ts.map +1 -1
  146. package/src/shade/renderer/postprocess/gtao/GTAO_CONSTANTS.js +10 -1
  147. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
  148. package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +5 -0
  149. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts +22 -0
  150. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.d.ts.map +1 -0
  151. package/src/shade/renderer/postprocess/gtao/chunk_gtao_compute_mip_level.js +33 -0
  152. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts +22 -0
  153. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.d.ts.map +1 -0
  154. package/src/shade/renderer/postprocess/gtao/chunk_gtao_resolve_hzb_depth.js +56 -0
  155. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts +13 -0
  156. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.d.ts.map +1 -0
  157. package/src/shade/renderer/postprocess/gtao/chunk_gtao_sample_depth.js +42 -0
  158. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts +2 -1
  159. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
  160. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +382 -357
  161. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  162. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +414 -410
  163. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  164. package/src/shade/renderer/postprocess/ssr/prefilter/NOTES.md +0 -7
  165. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.d.ts.map +1 -1
  166. package/src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js +62 -62
  167. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts +6 -0
  168. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.d.ts.map +1 -0
  169. package/src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js +19 -0
  170. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.d.ts.map +1 -1
  171. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js +16 -10
  172. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.d.ts.map +1 -1
  173. package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js +118 -117
  174. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +41 -7
  175. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -1
  176. package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +162 -58
  177. package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +1 -1
  178. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +10 -12
  179. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
  180. package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +583 -606
  181. package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +1 -1
  182. package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +640 -640
  183. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts +113 -0
  184. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -0
  185. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +484 -0
  186. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +50 -0
  187. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -0
  188. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +60 -0
  189. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +25 -0
  190. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -0
  191. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +47 -0
  192. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts +74 -0
  193. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.d.ts.map +1 -0
  194. package/src/shade/renderer/volumetrics/irradiance_clipmap/IrradianceCascadePlacement.js +173 -0
  195. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts +26 -0
  196. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.d.ts.map +1 -0
  197. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_gi_sample.js +83 -0
  198. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts +36 -0
  199. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.d.ts.map +1 -0
  200. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_local_light.js +129 -0
  201. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts +121 -0
  202. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -0
  203. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +370 -0
  204. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts +16 -0
  205. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.d.ts.map +1 -0
  206. package/src/shade/renderer/volumetrics/irradiance_clipmap/shader_irradiance_clipmap_build.js +191 -0
  207. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  208. package/src/shade/renderer/wind/GPUSceneWind.js +1 -1
  209. package/src/engine/graphics3/decal/DecalAtlas.d.ts +0 -43
  210. package/src/engine/graphics3/decal/DecalAtlas.d.ts.map +0 -1
  211. package/src/engine/graphics3/decal/DecalAtlasFill.d.ts.map +0 -1
  212. package/src/engine/graphics3/decal/DecalAtlasFill.js +0 -32
  213. package/src/engine/graphics3/decal/decal_atlas_border.d.ts.map +0 -1
  214. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts +0 -26
  215. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.d.ts.map +0 -1
  216. package/src/shade/renderer/postprocess/gtao/graph_build_depth_mipmap.js +0 -268
  217. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts +0 -3
  218. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.d.ts.map +0 -1
  219. package/src/shade/renderer/postprocess/ssr/copy_shader_f32.js +0 -32
  220. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts +0 -17
  221. package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +0 -1
  222. package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +0 -98
  223. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts +0 -23
  224. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.d.ts.map +0 -1
  225. package/src/shade/renderer/postprocess/ssr/graph_build_depth_max_pyramid.js +0 -118
  226. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts +0 -15
  227. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.d.ts.map +0 -1
  228. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_froxel_centre_ws.js +0 -49
  229. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts +0 -17
  230. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.d.ts.map +0 -1
  231. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi.js +0 -50
  232. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts +0 -35
  233. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.d.ts.map +0 -1
  234. package/src/shade/renderer/volumetrics/gi/chunk_volumetrics_gi_sample.js +0 -105
  235. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts +0 -35
  236. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.d.ts.map +0 -1
  237. package/src/shade/renderer/volumetrics/gi/graph_build_froxel_gi.js +0 -80
  238. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts +0 -10
  239. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.d.ts.map +0 -1
  240. package/src/shade/renderer/volumetrics/gi/shader_volumetrics_gi.js +0 -51
  241. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts +0 -28
  242. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.d.ts.map +0 -1
  243. package/src/shade/renderer/volumetrics/gi/volumetrics_gi_resources.js +0 -39
  244. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +0 -48
  245. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +0 -1
  246. package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +0 -121
  247. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts +0 -28
  248. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.d.ts.map +0 -1
  249. package/src/shade/renderer/volumetrics/shader_volumetrics_build_irradiance.js +0 -237
@@ -53,7 +53,7 @@ export class NSS {
53
53
  * @returns {number}
54
54
  */
55
55
  static recommended_jitter_sequence_size(upscale_ratio: number): number;
56
- static "__#201@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
56
+ static "__#203@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
57
57
  /**
58
58
  * @param {GraphicsContext} graphics
59
59
  */
@@ -37,10 +37,3 @@ It has drifted against the live pipeline in one way that a reader will not notic
37
37
  directory: the à-trous path grew `chunk_ssr_metadata`, and the variance/metadata contract the
38
38
  prefilter expects predates it. Reconcile those before wiring the pass in, rather than after.
39
39
 
40
- ## Sibling trap, same territory
41
-
42
- `graph_build_depth_max_pyramid.js` (also one directory up, also unreferenced) builds a
43
- **single-channel `r32float`** max-depth chain, while the live `HierarchicalZBuffer` the SSR trace
44
- actually reads is **two-channel** — `chunk_ffx_sssr_load_depth` reads its `.y`. The two are not
45
- interchangeable, and swapping one in for the other gives a silently zero `.y` rather than an error.
46
- That file's own header says the same thing.
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_query_depth_from_screen_space_bb.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js"],"names":[],"mappings":"AAMA;;;GAGG;AACH,qDAFU,SAAS,CAqDZ;0BA7DmB,6BAA6B"}
1
+ {"version":3,"file":"chunk_query_depth_from_screen_space_bb.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/depth/chunk_query_depth_from_screen_space_bb.js"],"names":[],"mappings":"AAKA;;;GAGG;AACH,qDAFU,SAAS,CAsDZ;0BA7DmB,6BAA6B"}
@@ -1,62 +1,62 @@
1
- import { CodeChunk } from "../../compiler/CodeChunk.js";
2
- import { AABB3_STRUCT } from "../geometry/aabb3/AABB3_STRUCT.js";
3
- import { chunk_min4 } from "../math/chunk_min4.js";
4
- import { chunk_ndc_to_uv } from "../texture/chunk_ndc_to_uv.js";
5
- import { chunk_uv_to_texel_coordinate } from "../texture/chunk_uv_to_texel_coordinate.js";
6
-
7
- /**
8
- * TODO check out this post https://x.com/anki3d/status/1713238150418518023
9
- * @type {CodeChunk}
10
- */
11
- export const chunk_query_depth_from_screen_space_bb = CodeChunk.from(
12
- //language=WGSL
13
- `
14
- fn query_depth_from_screen_space_bb(
15
- pb: ${AABB3_STRUCT.wgsl_ref},
16
- hzb: texture_2d<f32>,
17
- ) -> f32 {
18
- var n_min = saturate( ndc_to_uv(pb.min.xy) );
19
- var n_max = saturate( ndc_to_uv(pb.max.xy) );
20
-
21
- let bb_dim = abs(n_max - n_min);
22
-
23
- let hzb_size_u = textureDimensions(hzb);
24
- let hzb_size_f = vec2<f32>(hzb_size_u);
25
-
26
- let bb_dim_hz = bb_dim * hzb_size_f;
27
-
28
- let longest_edge = max(bb_dim_hz.x, bb_dim_hz.y);
29
-
30
- let mip_level_count = textureNumLevels(hzb);
31
-
32
- let mip_level = min(
33
- u32( ceil(log2( max(longest_edge, 1.0) ) ) ),
34
- mip_level_count - 1
35
- );
36
-
37
- let mip_resolution = hzb_size_u >> vec2(mip_level);
38
-
39
- // sample 4 corners, we know that they fit in a 2x2 footprint at most
40
- let p0 = vec2<u32>((uv_to_texel_coordinate( n_min, mip_resolution)));
41
- let p3 = vec2<u32>((uv_to_texel_coordinate( n_max, mip_resolution)));
42
- let p1 = vec2(p3.x, p0.y);
43
- let p2 = vec2(p0.x, p3.y);
44
-
45
- let d0 = textureLoad(hzb, p0, mip_level).x;
46
- let d1 = textureLoad(hzb, p1, mip_level).x;
47
- let d2 = textureLoad(hzb, p2, mip_level).x;
48
- let d3 = textureLoad(hzb, p3, mip_level).x;
49
-
50
- // value that's most far away from us
51
- let min_depth = min4(d0, d1, d2, d3);
52
-
53
- let depth_delta = pb.max.z - min_depth;
54
-
55
- return depth_delta;
56
- }
57
- `, [
58
- AABB3_STRUCT.declaration_chunk,
59
- chunk_min4,
60
- chunk_uv_to_texel_coordinate,
61
- chunk_ndc_to_uv
62
- ]);
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { AABB3_STRUCT } from "../geometry/aabb3/AABB3_STRUCT.js";
3
+ import { chunk_min4 } from "../math/chunk_min4.js";
4
+ import { chunk_ndc_to_uv } from "../texture/chunk_ndc_to_uv.js";
5
+
6
+ /**
7
+ * TODO check out this post https://x.com/anki3d/status/1713238150418518023
8
+ * @type {CodeChunk}
9
+ */
10
+ export const chunk_query_depth_from_screen_space_bb = CodeChunk.from(
11
+ //language=WGSL
12
+ `
13
+ fn query_depth_from_screen_space_bb(
14
+ pb: ${AABB3_STRUCT.wgsl_ref},
15
+ hzb: texture_2d<f32>,
16
+ ) -> f32 {
17
+ var n_min = saturate( ndc_to_uv(pb.min.xy) );
18
+ var n_max = saturate( ndc_to_uv(pb.max.xy) );
19
+
20
+ let bb_dim = abs(n_max - n_min);
21
+
22
+ let hzb_size_u = textureDimensions(hzb);
23
+ let hzb_size_f = vec2<f32>(hzb_size_u);
24
+
25
+ let bb_dim_hz = bb_dim * hzb_size_f;
26
+
27
+ let longest_edge = max(bb_dim_hz.x, bb_dim_hz.y);
28
+
29
+ let mip_level_count = textureNumLevels(hzb);
30
+
31
+ let mip_level = min(
32
+ u32( ceil(log2( max(longest_edge, 1.0) ) ) ),
33
+ mip_level_count - 1
34
+ );
35
+
36
+ let mip_resolution = textureDimensions(hzb, mip_level);
37
+ let mip_resolution_f = vec2<f32>(mip_resolution);
38
+ let max_coord = mip_resolution - vec2(1u);
39
+
40
+ // sample 4 corners, we know that they fit in a 2x2 footprint at most
41
+ let p0 = min(vec2<u32>(n_min * mip_resolution_f), max_coord);
42
+ let p3 = min(vec2<u32>(n_max * mip_resolution_f), max_coord);
43
+ let p1 = vec2(p3.x, p0.y);
44
+ let p2 = vec2(p0.x, p3.y);
45
+
46
+ let d0 = textureLoad(hzb, p0, mip_level).x;
47
+ let d1 = textureLoad(hzb, p1, mip_level).x;
48
+ let d2 = textureLoad(hzb, p2, mip_level).x;
49
+ let d3 = textureLoad(hzb, p3, mip_level).x;
50
+
51
+ // value that's most far away from us
52
+ let min_depth = min4(d0, d1, d2, d3);
53
+
54
+ let depth_delta = pb.max.z - min_depth;
55
+
56
+ return depth_delta;
57
+ }
58
+ `, [
59
+ AABB3_STRUCT.declaration_chunk,
60
+ chunk_min4,
61
+ chunk_ndc_to_uv
62
+ ]);
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @type {CodeChunk}
3
+ */
4
+ export const chunk_hash_lowbias32_vec2u: CodeChunk;
5
+ import { CodeChunk } from "../../../compiler/CodeChunk.js";
6
+ //# sourceMappingURL=chunk_hash_lowbias32_vec2u.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_hash_lowbias32_vec2u.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/random/lowbias/chunk_hash_lowbias32_vec2u.js"],"names":[],"mappings":"AAGA;;GAEG;AACH,yCAFU,SAAS,CAclB;0BAlByB,gCAAgC"}
@@ -0,0 +1,19 @@
1
+ import { CodeChunk } from "../../../compiler/CodeChunk.js";
2
+ import { chunk_hash_lowbias32 } from "../chunk_hash_lowbias32.js";
3
+
4
+ /**
5
+ * @type {CodeChunk}
6
+ */
7
+ export const chunk_hash_lowbias32_vec2u = CodeChunk.from(
8
+ //language=WGSL
9
+ `
10
+ fn hash_lowbias32_vec2u(v:vec2<u32>) -> u32{
11
+ let combined = v.x * 0x85ebca6bu +
12
+ v.y * 0xc2b2ae35u;
13
+
14
+ return hash_lowbias32(combined);
15
+ }
16
+ `,[
17
+ chunk_hash_lowbias32,
18
+ ]
19
+ )
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_ffx_sssr_get_mip_resolution.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js"],"names":[],"mappings":"AAEA,0DAOE;0BATwB,6BAA6B"}
1
+ {"version":3,"file":"chunk_ffx_sssr_get_mip_resolution.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_get_mip_resolution.js"],"names":[],"mappings":"AAGA,0DAUE;0BAbwB,6BAA6B"}
@@ -1,10 +1,16 @@
1
- import { CodeChunk } from "../../compiler/CodeChunk.js";
2
-
3
- export const chunk_ffx_sssr_get_mip_resolution = CodeChunk.from(
4
- //language=WGSL
5
- `
6
- fn ffx_sssr_get_mip_resolution(screen_dimensions:vec2<f32>, mip_level:i32) -> vec2<f32>{
7
- return screen_dimensions * pow(0.5, f32(mip_level));
8
- }
9
- `
10
- );
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { SCREEN_HZB_RESOURCE } from "./SCREEN_SPACE_RESOURCES.js";
3
+
4
+ export const chunk_ffx_sssr_get_mip_resolution = CodeChunk.from(
5
+ //language=WGSL
6
+ `
7
+ fn ffx_sssr_get_mip_resolution(screen_dimensions:vec2<f32>, mip_level:i32) -> vec2<f32>{
8
+ if (mip_level <= 0) {
9
+ return screen_dimensions;
10
+ }
11
+ return vec2<f32>(textureDimensions(tHZB, mip_level - 1));
12
+ }
13
+ `
14
+ );
15
+
16
+ chunk_ffx_sssr_get_mip_resolution.requireResource(SCREEN_HZB_RESOURCE);
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_ffx_sssr_hierarchical_raymarch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,mDAFU,SAAS,CAqGZ;0BAlHmB,6BAA6B"}
1
+ {"version":3,"file":"chunk_ffx_sssr_hierarchical_raymarch.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_hierarchical_raymarch.js"],"names":[],"mappings":"AASA;;;;;;GAMG;AACH,mDAFU,SAAS,CAuGZ;0BApHmB,6BAA6B"}
@@ -1,117 +1,118 @@
1
- import { chunk_is_background } from "../depth/chunk_is_background.js";
2
- import { CodeChunk } from "../../compiler/CodeChunk.js";
3
- import { chunk_rcp_v2 } from "../geometry/vec2/chunk_rcp_v2.js";
4
- import { F32_MAX_DEFINITION } from "../math/F32_MAX_DEFINITION.js";
5
- import { chunk_ffx_sssr_advance_ray } from "./chunk_ffx_sssr_advance_ray.js";
6
- import { chunk_ffx_sssr_get_mip_resolution } from "./chunk_ffx_sssr_get_mip_resolution.js";
7
- import { chunk_ffx_sssr_initial_advance_ray } from "./chunk_ffx_sssr_initial_advance_ray.js";
8
- import { chunk_ffx_sssr_load_depth } from "./chunk_ffx_sssr_load_depth.js";
9
-
10
- /**
11
- *
12
- * Requires origin and direction of the ray to be in screen space [0, 1] x [0, 1]
13
- * NOTE: "low occupancy" exit was removed, as WebGPU doesn't have pre-requisite API for it
14
- * @see https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/blob/1bbe66e7ea0d358e84af4471a90aa9c35b583de0/samples/hybridreflections/shaders/ffx_sssr_intersect.h#L110
15
- * @type {CodeChunk}
16
- */
17
- export const chunk_ffx_sssr_hierarchical_raymarch = CodeChunk.from(
18
- //language=WGSL
19
- `
20
- fn ffx_sssr_hierarchical_raymarch(
21
- origin: vec3<f32>,
22
- direction: vec3<f32>,
23
- screen_size: vec2<f32>,
24
- most_detailed_mip: i32,
25
- max_traversal_intersections:u32,
26
- valid_hit: ptr<function, bool>,
27
- _num_iters: ptr<function, u32>,
28
- ) -> vec3<f32> {
29
-
30
- let inv_direction = select( vec3(F32_MAX), 1.0 / direction, abs(direction) > vec3(1.0e-12));
31
-
32
- // Start on mip with highest detail.
33
- var current_mip = most_detailed_mip;
34
-
35
- // Could recompute these every iteration, but it's faster to hoist them out and update them.
36
- var current_mip_resolution = ffx_sssr_get_mip_resolution(screen_size, current_mip);
37
- var current_mip_resolution_inv = 1.0 / (current_mip_resolution);
38
-
39
- // Offset to the bounding boxes uv space to intersect the ray with the center of the next pixel.
40
- // This means we ever so slightly over shoot into the next region.
41
- var uv_offset = 0.005 * exp2(f32(most_detailed_mip)) / screen_size;
42
- uv_offset = select( uv_offset, -uv_offset, direction.xy < vec2(0.0) );
43
-
44
- // Offset applied depending on current mip resolution to move the boundary to the left/right upper/lower border depending on ray direction.
45
- let floor_offset = select(vec2(1.0), vec2(0.0), direction.xy < vec2(0.0)); // TODO can replace with 'step'
46
-
47
- // Initially advance ray to avoid immediate self intersections.
48
- var current_t:f32;
49
- var position:vec3<f32>;
50
-
51
- ffx_sssr_initial_advance_ray(
52
- origin,
53
- direction,
54
- inv_direction,
55
- current_mip_resolution,
56
- current_mip_resolution_inv,
57
- floor_offset,
58
- uv_offset,
59
- &position,
60
- &current_t
61
- );
62
-
63
- var i = 0u;
64
- for (
65
- ;
66
- i < max_traversal_intersections && current_mip >= most_detailed_mip;
67
- i++
68
- ) {
69
-
70
- if (any(position.xy > vec2(1.0, 1.0)) || any(position.xy < vec2(0.0, 0.0))){
71
- // outside of the viewport
72
- break;
73
- }
74
-
75
- if (is_background(position.z)){
76
- // hit sky/background, out of Z bounds basically
77
- break;
78
- }
79
-
80
- let current_mip_position = current_mip_resolution * position.xy;
81
- let surface_z = ffx_sssr_load_depth(vec2<i32>(current_mip_position), current_mip);
82
-
83
- let skipped_tile = ffx_sssr_advance_ray(
84
- origin,
85
- direction,
86
- inv_direction,
87
- current_mip_position,
88
- current_mip_resolution_inv,
89
- floor_offset,
90
- uv_offset,
91
- surface_z,
92
- &position,
93
- &current_t
94
- );
95
-
96
- current_mip += select(-1, 1, skipped_tile );
97
- current_mip_resolution *= select(2.0, 0.5, skipped_tile);
98
- current_mip_resolution_inv *= select(0.5, 2.0, skipped_tile);
99
-
100
- }
101
-
102
- *_num_iters = i;
103
-
104
- *valid_hit = (current_mip <= most_detailed_mip && i > 0);
105
-
106
- return position;
107
- }
108
- `, [
109
- F32_MAX_DEFINITION,
110
- chunk_rcp_v2,
111
- chunk_ffx_sssr_get_mip_resolution,
112
- chunk_ffx_sssr_initial_advance_ray,
113
- chunk_ffx_sssr_advance_ray,
114
- chunk_ffx_sssr_load_depth,
115
- chunk_is_background
116
- ]);
117
-
1
+ import { chunk_is_background } from "../depth/chunk_is_background.js";
2
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
3
+ import { chunk_rcp_v2 } from "../geometry/vec2/chunk_rcp_v2.js";
4
+ import { F32_MAX_DEFINITION } from "../math/F32_MAX_DEFINITION.js";
5
+ import { chunk_ffx_sssr_advance_ray } from "./chunk_ffx_sssr_advance_ray.js";
6
+ import { chunk_ffx_sssr_get_mip_resolution } from "./chunk_ffx_sssr_get_mip_resolution.js";
7
+ import { chunk_ffx_sssr_initial_advance_ray } from "./chunk_ffx_sssr_initial_advance_ray.js";
8
+ import { chunk_ffx_sssr_load_depth } from "./chunk_ffx_sssr_load_depth.js";
9
+
10
+ /**
11
+ *
12
+ * Requires origin and direction of the ray to be in screen space [0, 1] x [0, 1]
13
+ * NOTE: "low occupancy" exit was removed, as WebGPU doesn't have pre-requisite API for it
14
+ * @see https://github.com/GPUOpen-LibrariesAndSDKs/FidelityFX-SDK/blob/1bbe66e7ea0d358e84af4471a90aa9c35b583de0/samples/hybridreflections/shaders/ffx_sssr_intersect.h#L110
15
+ * @type {CodeChunk}
16
+ */
17
+ export const chunk_ffx_sssr_hierarchical_raymarch = CodeChunk.from(
18
+ //language=WGSL
19
+ `
20
+ fn ffx_sssr_hierarchical_raymarch(
21
+ origin: vec3<f32>,
22
+ direction: vec3<f32>,
23
+ screen_size: vec2<f32>,
24
+ most_detailed_mip: i32,
25
+ max_traversal_intersections:u32,
26
+ valid_hit: ptr<function, bool>,
27
+ _num_iters: ptr<function, u32>,
28
+ ) -> vec3<f32> {
29
+
30
+ let inv_direction = select( vec3(F32_MAX), 1.0 / direction, abs(direction) > vec3(1.0e-12));
31
+ let max_mip = i32(textureNumLevels(tHZB));
32
+
33
+ // Start on mip with highest detail.
34
+ var current_mip = min(most_detailed_mip, max_mip);
35
+
36
+ var current_mip_resolution = ffx_sssr_get_mip_resolution(screen_size, current_mip);
37
+ var current_mip_resolution_inv = 1.0 / (current_mip_resolution);
38
+
39
+ // Offset to the bounding boxes uv space to intersect the ray with the center of the next pixel.
40
+ // This means we ever so slightly over shoot into the next region.
41
+ var uv_offset = 0.005 * exp2(f32(most_detailed_mip)) / screen_size;
42
+ uv_offset = select( uv_offset, -uv_offset, direction.xy < vec2(0.0) );
43
+
44
+ // Offset applied depending on current mip resolution to move the boundary to the left/right upper/lower border depending on ray direction.
45
+ let floor_offset = select(vec2(1.0), vec2(0.0), direction.xy < vec2(0.0)); // TODO can replace with 'step'
46
+
47
+ // Initially advance ray to avoid immediate self intersections.
48
+ var current_t:f32;
49
+ var position:vec3<f32>;
50
+
51
+ ffx_sssr_initial_advance_ray(
52
+ origin,
53
+ direction,
54
+ inv_direction,
55
+ current_mip_resolution,
56
+ current_mip_resolution_inv,
57
+ floor_offset,
58
+ uv_offset,
59
+ &position,
60
+ &current_t
61
+ );
62
+
63
+ var i = 0u;
64
+ for (
65
+ ;
66
+ i < max_traversal_intersections && current_mip >= most_detailed_mip;
67
+ i++
68
+ ) {
69
+
70
+ if (any(position.xy > vec2(1.0, 1.0)) || any(position.xy < vec2(0.0, 0.0))){
71
+ // outside of the viewport
72
+ break;
73
+ }
74
+
75
+ if (is_background(position.z)){
76
+ // hit sky/background, out of Z bounds basically
77
+ break;
78
+ }
79
+
80
+ let current_mip_position = current_mip_resolution * position.xy;
81
+ let surface_z = ffx_sssr_load_depth(vec2<i32>(current_mip_position), current_mip);
82
+
83
+ let skipped_tile = ffx_sssr_advance_ray(
84
+ origin,
85
+ direction,
86
+ inv_direction,
87
+ current_mip_position,
88
+ current_mip_resolution_inv,
89
+ floor_offset,
90
+ uv_offset,
91
+ surface_z,
92
+ &position,
93
+ &current_t
94
+ );
95
+
96
+ current_mip = min(current_mip + select(-1, 1, skipped_tile), max_mip);
97
+ if (current_mip >= most_detailed_mip) {
98
+ current_mip_resolution = ffx_sssr_get_mip_resolution(screen_size, current_mip);
99
+ current_mip_resolution_inv = 1.0 / current_mip_resolution;
100
+ }
101
+
102
+ }
103
+
104
+ *_num_iters = i;
105
+
106
+ *valid_hit = (current_mip <= most_detailed_mip && i > 0);
107
+
108
+ return position;
109
+ }
110
+ `, [
111
+ F32_MAX_DEFINITION,
112
+ chunk_rcp_v2,
113
+ chunk_ffx_sssr_get_mip_resolution,
114
+ chunk_ffx_sssr_initial_advance_ray,
115
+ chunk_ffx_sssr_advance_ray,
116
+ chunk_ffx_sssr_load_depth,
117
+ chunk_is_background
118
+ ]);
@@ -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"}