@woosh/meep-engine 3.60.6 → 3.60.8

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 (328) hide show
  1. package/build/bundle-worker-terrain.js +1 -1
  2. package/package.json +1 -1
  3. package/src/core/binary/BitSet.d.ts.map +1 -1
  4. package/src/core/binary/BitSet.js +2 -1
  5. package/src/{format/image/avif/av1/util → core/binary/operations}/ceil_log2.d.ts +2 -2
  6. package/src/core/binary/operations/ceil_log2.d.ts.map +1 -0
  7. package/src/{format/image/avif/av1/util → core/binary/operations}/ceil_log2.js +18 -18
  8. package/src/core/binary/zstd/ZstdReverseBitReader.d.ts.map +1 -1
  9. package/src/core/binary/zstd/ZstdReverseBitReader.js +225 -223
  10. package/src/core/binary/zstd/zstd_fse.d.ts.map +1 -1
  11. package/src/core/binary/zstd/zstd_fse.js +267 -265
  12. package/src/core/binary/zstd/zstd_huffman.d.ts.map +1 -1
  13. package/src/core/binary/zstd/zstd_huffman.js +246 -244
  14. package/src/core/bvh2/binary/2/BinaryUint32BVH.d.ts.map +1 -1
  15. package/src/core/bvh2/binary/2/BinaryUint32BVH.js +8 -2
  16. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.d.ts.map +1 -1
  17. package/src/core/bvh2/bvh3/ebvh_optimize_treelet.js +8 -7
  18. package/src/core/collection/PairUint32Map.d.ts.map +1 -1
  19. package/src/core/collection/PairUint32Map.js +2 -2
  20. package/src/core/collection/Uint32Map.d.ts.map +1 -1
  21. package/src/core/collection/Uint32Map.js +2 -4
  22. package/src/core/collection/heap/FibonacciHeap.d.ts.map +1 -1
  23. package/src/core/collection/heap/FibonacciHeap.js +2 -1
  24. package/src/core/geom/2d/r-tree/StaticR2Tree.d.ts.map +1 -1
  25. package/src/core/geom/2d/r-tree/StaticR2Tree.js +8 -2
  26. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.d.ts.map +1 -1
  27. package/src/core/geom/3d/shape/util/mesh_compute_triangle_edge_flags.js +2 -3
  28. package/src/engine/graphics/texture/atlas/TextureAtlas.d.ts.map +1 -1
  29. package/src/engine/graphics/texture/atlas/TextureAtlas.js +13 -14
  30. package/src/engine/graphics/texture/atlas/sprite_atlas_border.d.ts.map +1 -1
  31. package/src/engine/graphics/texture/atlas/sprite_atlas_border.js +70 -69
  32. package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.d.ts.map +1 -1
  33. package/src/engine/graphics/texture/reflection/convolve_equirectangular_reflection.js +2 -1
  34. package/src/engine/graphics3/GPUParticleEmitterSystem.d.ts.map +1 -1
  35. package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -1
  36. package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
  37. package/src/engine/graphics3/decal/GPUDecalRenderer.js +2 -1
  38. package/src/engine/graphics3/decal/chunk_decal_record.d.ts +14 -0
  39. package/src/engine/graphics3/decal/chunk_decal_record.d.ts.map +1 -0
  40. package/src/engine/graphics3/decal/chunk_decal_record.js +44 -0
  41. package/src/engine/graphics3/decal/shader_cluster_assign_decals.d.ts.map +1 -1
  42. package/src/engine/graphics3/decal/shader_cluster_assign_decals.js +2 -15
  43. package/src/engine/graphics3/decal/shader_cull_decals_frustum.d.ts.map +1 -1
  44. package/src/engine/graphics3/decal/shader_cull_decals_frustum.js +3 -16
  45. package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
  46. package/src/engine/graphics3/decal/shader_decal_composite.js +3 -23
  47. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.d.ts.map +1 -1
  48. package/src/engine/graphics3/terrain/TERRAIN_MATERIAL_TEMPLATE.js +2 -1
  49. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  50. package/src/engine/physics/queries/shape_cast.js +2 -2
  51. package/src/format/image/avif/av1/decode/decode_palette.js +442 -442
  52. package/src/format/image/avif/av1/entropy/SymbolWriter.d.ts.map +1 -1
  53. package/src/format/image/avif/av1/entropy/SymbolWriter.js +2 -1
  54. package/src/generation/foliage/material/foliage_tile.d.ts.map +1 -1
  55. package/src/generation/foliage/material/foliage_tile.js +2 -1
  56. package/src/generation/markers/GridActionRuleSet.d.ts.map +1 -1
  57. package/src/generation/markers/GridActionRuleSet.js +12 -3
  58. package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
  59. package/src/shade/device/mock/SoftwareGPUDevice.js +6 -13
  60. package/src/shade/playground/caldera/main.js +3 -2
  61. package/src/shade/playground/probe_clipmap/README.md +2 -1
  62. package/src/shade/playground/probe_clipmap/index.html +7 -2
  63. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  64. package/src/shade/playground/probe_clipmap/main.js +17 -7
  65. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.d.ts.map +1 -1
  66. package/src/shade/playground/sh_exponential/sh_exp_playground_shaders.js +7 -13
  67. package/src/shade/playground/vgeo_scene/main.js +2 -1
  68. package/src/shade/playground/vsm/VSMDebugOverlay.d.ts.map +1 -1
  69. package/src/shade/playground/vsm/VSMDebugOverlay.js +3 -1
  70. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  71. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  72. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  73. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  74. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_coarsest.d.ts.map +1 -1
  75. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_coarsest.js +5 -4
  76. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.d.ts.map +1 -1
  77. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_residual_restrict.js +168 -166
  78. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.d.ts.map +1 -1
  79. package/src/shade/renderer/fluid/pressure/shader_fluid_mg_smooth.js +221 -219
  80. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  81. package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
  82. package/src/shade/renderer/fow/shader_fog_of_war.js +8 -19
  83. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +6 -6
  85. package/src/shade/renderer/geometry/sdf/MeshSDFLayout.d.ts.map +1 -1
  86. package/src/shade/renderer/geometry/sdf/MeshSDFLayout.js +2 -1
  87. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.d.ts.map +1 -1
  88. package/src/shade/renderer/geometry/virtual/runtime/GPUVirtualGeometryRuntime.js +2 -1
  89. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.d.ts.map +1 -1
  90. package/src/shade/renderer/geometry/virtual/runtime/VGeoResidency.js +2 -1
  91. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.d.ts.map +1 -1
  92. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_decode_from_storage.js +10 -31
  93. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.d.ts.map +1 -1
  94. package/src/shade/renderer/global_illumination/brick4/gpu/encoding/v1/chunk_brick4_sh3_color_encode_to_storage.js +9 -15
  95. package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.d.ts +2 -1
  96. package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.d.ts.map +1 -1
  97. package/src/shade/renderer/global_illumination/clipmap/shader_debug_clipmap.js +6 -5
  98. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
  99. package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +2 -1
  100. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +15 -3
  101. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  102. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +168 -18
  103. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +98 -57
  104. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  105. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +168 -77
  106. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +4 -2
  107. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  108. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +27 -12
  109. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  110. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +12 -7
  111. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  112. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +8 -2
  113. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
  114. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +5 -2
  115. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +1 -1
  116. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.d.ts.map +1 -1
  117. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_gather.js +5 -3
  118. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +1 -1
  119. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.d.ts.map +1 -1
  120. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_free.js +1 -1
  121. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.d.ts.map +1 -1
  122. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_movers_command.js +4 -2
  123. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.d.ts.map +1 -1
  124. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_scroll.js +1 -1
  125. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
  126. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +1 -1
  127. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
  128. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +3 -1
  129. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.js +2 -2
  130. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +114 -41
  131. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  132. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +424 -207
  133. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +34 -25
  134. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  135. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +41 -31
  136. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts +7 -5
  137. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.d.ts.map +1 -1
  138. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_RESAMPLING.js +7 -5
  139. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.d.ts +47 -0
  140. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.d.ts.map +1 -0
  141. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapHitWants.js +84 -0
  142. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts +48 -0
  143. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.d.ts.map +1 -0
  144. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapScreenWants.js +101 -0
  145. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +58 -4
  146. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  147. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +127 -30
  148. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts +18 -7
  149. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.d.ts.map +1 -1
  150. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_cage.js +39 -13
  151. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +29 -8
  152. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
  153. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +112 -56
  154. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.d.ts +19 -0
  155. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.d.ts.map +1 -0
  156. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_resample.js +35 -0
  157. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.d.ts.map +1 -1
  158. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_sample_radiance.js +9 -3
  159. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +3 -3
  160. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +5 -5
  161. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts +8 -12
  162. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.d.ts.map +1 -1
  163. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_accumulate.js +23 -56
  164. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts +0 -3
  165. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.d.ts.map +1 -1
  166. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_admit.js +11 -15
  167. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +26 -0
  168. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts.map +1 -0
  169. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +173 -0
  170. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts +32 -0
  171. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.d.ts.map +1 -0
  172. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_candidate.js +166 -0
  173. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts +3 -4
  174. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.d.ts.map +1 -1
  175. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_due.js +3 -4
  176. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.d.ts.map +1 -1
  177. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_guide.js +3 -1
  178. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +6 -12
  179. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts.map +1 -1
  180. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +15 -65
  181. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.d.ts.map +1 -1
  182. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_order.js +7 -2
  183. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts +4 -4
  184. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.d.ts.map +1 -1
  185. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_project.js +24 -17
  186. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts +7 -5
  187. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.d.ts.map +1 -1
  188. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_publish.js +18 -10
  189. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts +2 -2
  190. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.d.ts.map +1 -1
  191. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_ray_layout.js +9 -5
  192. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts +3 -0
  193. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.d.ts.map +1 -1
  194. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_relocate.js +9 -6
  195. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts +1 -1
  196. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.d.ts.map +1 -1
  197. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample.js +16 -16
  198. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.d.ts +36 -0
  199. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.d.ts.map +1 -0
  200. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_resample_rays.js +233 -0
  201. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.d.ts.map +1 -1
  202. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_schedule.js +7 -5
  203. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  204. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +5 -3
  205. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  206. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +10 -4
  207. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts +2 -1
  208. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.d.ts.map +1 -1
  209. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace_command.js +12 -6
  210. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts +1 -2
  211. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
  212. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +5 -6
  213. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +14 -18
  214. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts.map +1 -1
  215. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +25 -35
  216. package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.d.ts +13 -0
  217. package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.d.ts.map +1 -0
  218. package/src/shade/renderer/gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.js +12 -0
  219. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +27 -2
  220. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
  221. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +62 -6
  222. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
  223. package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +10 -19
  224. package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.d.ts.map +1 -1
  225. package/src/shade/renderer/gpu_primitive/indirect/chunk_folded_dispatch.js +6 -3
  226. package/src/shade/renderer/hiz/hzb_pick_alignment.d.ts.map +1 -1
  227. package/src/shade/renderer/hiz/hzb_pick_alignment.js +149 -148
  228. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.d.ts.map +1 -1
  229. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_environment_cells.js +4 -2
  230. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.d.ts.map +1 -1
  231. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_log_floor.js +6 -5
  232. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.d.ts.map +1 -1
  233. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_project.js +3 -1
  234. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.d.ts.map +1 -1
  235. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_reference_reflectance.js +3 -1
  236. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.d.ts.map +1 -1
  237. package/src/shade/renderer/light/environment/sh_exponential/shader_sh_exp_solve.js +3 -1
  238. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts +0 -5
  239. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.d.ts.map +1 -1
  240. package/src/shade/renderer/light/world_cluster/WORLD_LIGHT_CLUSTER.js +0 -7
  241. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts +15 -2
  242. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.d.ts.map +1 -1
  243. package/src/shade/renderer/light/world_cluster/graph_build_world_light_clusters.js +51 -16
  244. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.d.ts.map +1 -1
  245. package/src/shade/renderer/light/world_cluster/shader_world_cluster_assign_lights.js +3 -2
  246. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  247. package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.d.ts +17 -0
  248. package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.d.ts.map +1 -0
  249. package/src/shade/renderer/postprocess/dof/raymarch/chunk_dof_lds_coc_cache.js +81 -0
  250. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
  251. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +5 -48
  252. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
  253. package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +4 -44
  254. package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.d.ts.map +1 -1
  255. package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.js +4 -1
  256. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
  257. package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +8 -7
  258. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  259. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.d.ts.map +1 -1
  260. package/src/shade/renderer/postprocess/nss/chunk_nss_luma_derivative.js +5 -7
  261. package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.d.ts +17 -0
  262. package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.d.ts.map +1 -0
  263. package/src/shade/renderer/postprocess/nss/chunk_nss_tonemap.js +56 -0
  264. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.d.ts.map +1 -1
  265. package/src/shade/renderer/postprocess/nss/shader_nss_postprocess.js +2 -22
  266. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.d.ts.map +1 -1
  267. package/src/shade/renderer/postprocess/nss/shader_nss_preprocess.js +2 -13
  268. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
  269. package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +10 -13
  270. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.d.ts.map +1 -1
  271. package/src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js +39 -38
  272. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.d.ts.map +1 -1
  273. package/src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js +7 -12
  274. package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.d.ts +8 -6
  275. package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.d.ts.map +1 -1
  276. package/src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js +10 -7
  277. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.d.ts +16 -0
  278. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.d.ts.map +1 -0
  279. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.js +35 -0
  280. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.d.ts +5 -2
  281. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.d.ts.map +1 -1
  282. package/src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.js +27 -18
  283. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.d.ts.map +1 -1
  284. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.js +5 -15
  285. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.d.ts.map +1 -1
  286. package/src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.js +5 -19
  287. package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.d.ts.map +1 -1
  288. package/src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.js +3 -22
  289. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -1
  290. package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +2 -1
  291. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.d.ts.map +1 -1
  292. package/src/shade/renderer/volumetrics/chunk_volumetrics_sun_shadow_group_list.js +154 -152
  293. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.d.ts.map +1 -1
  294. package/src/shade/renderer/volumetrics/irradiance_clipmap/GPUIrradianceClipmap.js +2 -1
  295. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts +3 -1
  296. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.d.ts.map +1 -1
  297. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP.js +4 -3
  298. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts +7 -1
  299. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.d.ts.map +1 -1
  300. package/src/shade/renderer/volumetrics/irradiance_clipmap/IRRADIANCE_CLIPMAP_STRUCT.js +54 -47
  301. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.d.ts.map +1 -1
  302. package/src/shade/renderer/volumetrics/irradiance_clipmap/chunk_irradiance_clipmap_sample.js +371 -370
  303. package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
  304. package/src/shade/renderer/water/GPUWaterRenderer.js +2 -1
  305. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  306. package/src/shade/renderer/water/surface/lod/shader_water_lod.d.ts.map +1 -1
  307. package/src/shade/renderer/water/surface/lod/shader_water_lod.js +12 -14
  308. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.d.ts.map +1 -1
  309. package/src/shade/renderer/water/surface/particles/GPUWaterParticles.js +2 -9
  310. package/src/shade/renderer/water/surface/particles/chunk_water_particle.d.ts.map +1 -1
  311. package/src/shade/renderer/water/surface/particles/chunk_water_particle.js +2 -1
  312. package/src/shade/renderer/wind/WIND_FIELD.d.ts +3 -1
  313. package/src/shade/renderer/wind/WIND_FIELD.d.ts.map +1 -1
  314. package/src/shade/renderer/wind/WIND_FIELD.js +4 -3
  315. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts +8 -2
  316. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.d.ts.map +1 -1
  317. package/src/shade/renderer/wind/WIND_FIELD_STRUCT.js +11 -4
  318. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts +2 -2
  319. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.d.ts.map +1 -1
  320. package/src/shade/renderer/wind/chunk_wind_field_sample_cascades.js +13 -4
  321. package/src/shade/util/texture_mip_extent.d.ts.map +1 -1
  322. package/src/shade/util/texture_mip_extent.js +88 -87
  323. package/src/shade/wgsl/emulator/WGSLLanguageCore.d.ts.map +1 -1
  324. package/src/shade/wgsl/emulator/WGSLLanguageCore.js +9 -7
  325. package/src/format/image/avif/av1/util/ceil_log2.d.ts.map +0 -1
  326. package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.d.ts +0 -1
  327. package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.d.ts.map +0 -1
  328. package/src/shade/renderer/shader/chunk/color/chunk_hash_squirrel3.js +0 -0
@@ -1,8 +1,8 @@
1
1
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
- import { F16_MAX_DEFINITION } from "../../shader/chunk/math/F16_MAX_DEFINITION.js";
3
2
  import { ComputeShader } from "../../shader/ComputeShader.js";
4
3
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
5
4
  import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
5
+ import { chunk_nss_tonemap } from "./chunk_nss_tonemap.js";
6
6
  import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
7
7
  import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
8
8
 
@@ -50,26 +50,6 @@ resources.createGroup()
50
50
  const body = CodeChunk.from(
51
51
  //language=WGSL
52
52
  `
53
- const NSS_EXPOSURE: f32 = 7.38905609893; // e^2
54
-
55
- // Karis tonemap (max-of-channels).
56
- // The guard is a FINITE clamp, not just a non-negative one: this target is rgba16float, so shading
57
- // above its range stores as +Inf and rgb / (1.0 + m) is Inf/Inf = NaN, which goes straight into the
58
- // next frame's history and stays there. NaN fails every comparison including with itself, which is
59
- // what the componentwise test below is.
60
- fn nss_tonemap(rgb: vec3<f32>) -> vec3<f32> {
61
- let finite = select(vec3<f32>(0.0), min(rgb, vec3<f32>(F16_MAX)), rgb == rgb);
62
- let m = max(max(finite.r, finite.g), finite.b);
63
- return finite / (1.0 + m);
64
- }
65
-
66
- // Karis inverse — clamp to dodge the inf at m == 1.0.
67
- fn nss_tonemap_inv(rgb: vec3<f32>) -> vec3<f32> {
68
- let c = clamp(rgb, vec3<f32>(0.0), vec3<f32>(0.99999));
69
- let m = max(max(c.r, c.g), c.b);
70
- return c / (1.0 - m);
71
- }
72
-
73
53
  fn nss_warped_history(prev_uv: vec2<f32>) -> vec3<f32> {
74
54
  let on_screen = all(prev_uv >= vec2<f32>(0.0)) && all(prev_uv <= vec2<f32>(1.0));
75
55
  if (!on_screen) {
@@ -282,7 +262,7 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
282
262
  textureStore(tOutput, out_st, vec4<f32>(final_rgb, theta));
283
263
  }
284
264
  `, [
285
- F16_MAX_DEFINITION,
265
+ chunk_nss_tonemap,
286
266
  NSS_SETTINGS_STRUCT.declaration_chunk,
287
267
  ]
288
268
  );
@@ -1 +1 @@
1
- {"version":3,"file":"shader_nss_preprocess.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_preprocess.js"],"names":[],"mappings":"AAiPA,kDAIG;8BAnP2B,+BAA+B"}
1
+ {"version":3,"file":"shader_nss_preprocess.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/postprocess/nss/shader_nss_preprocess.js"],"names":[],"mappings":"AAsOA,kDAIG;8BAzO2B,+BAA+B"}
@@ -1,10 +1,10 @@
1
1
  import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
2
- import { F16_MAX_DEFINITION } from "../../shader/chunk/math/F16_MAX_DEFINITION.js";
3
2
  import { ComputeShader } from "../../shader/ComputeShader.js";
4
3
  import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
5
4
  import { SAMPLER_LINEAR_UPSCALE } from "../../texture/SAMPLER_LINEAR_UPSCALE.js";
6
5
  import { chunk_nss_find_nearest_depth } from "./chunk_nss_find_nearest_depth.js";
7
6
  import { chunk_nss_luma_derivative } from "./chunk_nss_luma_derivative.js";
7
+ import { chunk_nss_tonemap } from "./chunk_nss_tonemap.js";
8
8
  import { NSS_WORKGROUP_SIZE } from "./NSS_CONSTANTS.js";
9
9
  import { NSS_SETTINGS_STRUCT } from "./NSS_SETTINGS_STRUCT.js";
10
10
 
@@ -68,17 +68,6 @@ resources.createGroup()
68
68
  const body = CodeChunk.from(
69
69
  //language=WGSL
70
70
  `
71
- const NSS_EXPOSURE: f32 = 7.38905609893; // e^2
72
-
73
- // Karis tonemap (max-of-channels), applied to EXPOSURE-scaled colour.
74
- // ARM's training distribution: Tonemap(EXPOSURE * raw) -> network input.
75
- fn nss_tonemap_exposure(rgb: vec3<f32>) -> vec3<f32> {
76
- let finite = select(vec3<f32>(0.0), clamp(rgb, vec3<f32>(0.0), vec3<f32>(F16_MAX)), rgb == rgb);
77
- let scaled = finite * NSS_EXPOSURE;
78
- let m = max(max(scaled.r, scaled.g), scaled.b);
79
- return scaled / (1.0 + m);
80
- }
81
-
82
71
  // ARM's network was trained against inputs that go through their Quantize
83
72
  // formula: int8 = round(fp * 255 - 128). The conv then sees (uint8 - 128)
84
73
  // = signed int8 in [-128, 127] - i.e. fp 0 -> -128, fp 0.5 -> 0, fp 1 -> 127.
@@ -232,9 +221,9 @@ fn main(@builtin(global_invocation_id) gid: vec3<u32>) {
232
221
  textureStore(tNearestOffset, st, vec4<f32>(nearest_packed, 0.0, 0.0));
233
222
  }
234
223
  `, [
235
- F16_MAX_DEFINITION,
236
224
  chunk_nss_find_nearest_depth,
237
225
  chunk_nss_luma_derivative,
226
+ chunk_nss_tonemap,
238
227
  NSS_SETTINGS_STRUCT.declaration_chunk,
239
228
  ]
240
229
  );
@@ -1 +1 @@
1
- {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AA+BA;;;;;;;;;;;;;;;GAeG;AACH,uKAJa;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAC,CA2VnH"}
1
+ {"version":3,"file":"prepare_meshlet_draw_commands_by_material.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js"],"names":[],"mappings":"AAiCA;;;;;;;;;;;;;;;GAeG;AACH,uKAJa;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAC;IAAC,wBAAwB,EAAE,MAAM,CAAA;CAAC,CAsVnH"}
@@ -1,10 +1,12 @@
1
1
  import { assert } from "../../../../core/assert.js";
2
- import { ceilPowerOfTwo } from "../../../../core/binary/operations/ceilPowerOfTwo.js";
3
2
  import { round_up } from "../../../../core/math/round_up.js";
4
3
  import { BufferResourceDescriptor } from "../../../device/graph/BufferResourceDescriptor.js";
5
4
  import { u32 } from "../../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
6
5
  import { STRUCT_UNINDEXED_DRAW_COMMAND } from "../../gpu_primitive/indirect/STRUCT_UNINDEXED_DRAW_COMMAND.js";
7
- import { cpu_build_hash_table } from "../../gpu_primitive/hash_table/cpu_build_hash_table.js";
6
+ import {
7
+ cpu_hash_table_create,
8
+ cpu_hash_table_word_count
9
+ } from "../../gpu_primitive/hash_table/cpu_build_hash_table.js";
8
10
  import {
9
11
  graph_prefix_scan_csdldf,
10
12
  prefix_scan_csdldf_output_descriptor
@@ -215,21 +217,16 @@ export function graph_prepare_meshlet_draw_commands_by_material({
215
217
  // 2. build material lookup table
216
218
  const material_ids = materials.map(m => m.id);
217
219
  const material_count = material_ids.length;
218
- const HASH_TABLE_SLACK = 1.3;
219
- const material_table_size = ceilPowerOfTwo(Math.max(1, material_count * HASH_TABLE_SLACK));
220
- const material_lookup_data = new ArrayBuffer((material_table_size * 2 + 2) * 4)
221
- const material_lookup = new Uint32Array(material_lookup_data);
222
- cpu_build_hash_table(
223
- material_lookup, 0,
224
- material_table_size,
225
- material_ids,
226
- material_count,
227
- );
220
+ let material_lookup = new Uint32Array(cpu_hash_table_word_count(material_count));
221
+
222
+ while (!cpu_hash_table_create(material_lookup, material_ids, material_count)) {
223
+ material_lookup = new Uint32Array(material_lookup.length * 2);
224
+ }
228
225
 
229
226
  // TODO build the table on the GPU
230
227
  const gr_material_lookup = graph_import_raw_buffer({
231
228
  graph,
232
- value: material_lookup_data,
229
+ value: material_lookup.buffer,
233
230
  usage: GPUBufferUsage.STORAGE,
234
231
  });
235
232
 
@@ -1 +1 @@
1
- {"version":3,"file":"RASTERIZATION_BUCKET_LIMIT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js"],"names":[],"mappings":"AAkBA,+DAA0F;AAC1F,8DAAsF;AAEtF;;;;;;;;GAQG;AACH,0DAFU,MAAM,CAE6C;AAE7D;;;;GAIG;AACH,yCAFU,MAAM,CAEsK"}
1
+ {"version":3,"file":"RASTERIZATION_BUCKET_LIMIT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/bucket/RASTERIZATION_BUCKET_LIMIT.js"],"names":[],"mappings":"AAmBA,+DAA0F;AAC1F,8DAAsF;AAEtF;;;;;;;;GAQG;AACH,0DAFU,MAAM,CAE6C;AAE7D;;;;GAIG;AACH,yCAFU,MAAM,CAEsK"}
@@ -1,38 +1,39 @@
1
- import { assert } from "../../../../../core/assert.js";
2
- import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
3
- import { TransparencyMode } from "../../../material/TransparencyMode.js";
4
-
5
- /**
6
- *
7
- * @param {Object} e enum
8
- * @return {number} number of bits required to represent it
9
- */
10
- function enum_bit_count(e) {
11
- const max = Math.max.apply(null, Object.values(e));
12
-
13
- assert.isNonNegativeInteger(max, 'max');
14
- assert.lessThanOrEqual(max, 5, "the bucket count is going to be absurd");
15
-
16
- return 32 - Math.clz32(max);
17
- }
18
-
19
- export const RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE = enum_bit_count(TransparencyMode);
20
- export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE = enum_bit_count(ShadeDrawMode);
21
-
22
- /**
23
- * One bit, not the two {@link ShadeDrawSide} would need. Only double-sided geometry needs a
24
- * pipeline of its own — `cullMode: 'none'` has no winding equivalent. `Front` and `Back` share
25
- * one: a back-sided material is a front-sided one drawn with its winding reversed, and the
26
- * vertex shader does the reversing.
27
- *
28
- * @see rasterization_material_bucket
29
- * @type {number}
30
- */
31
- export const RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED = 1;
32
-
33
- /**
34
- * Maximum number of rasterization buckets. This is a number of permutations of different alpha and draw modes.
35
- * See Northlight talk on "Alan Wake 2" meshlet shading.
36
- * @type {number}
37
- */
38
- export const RASTERIZATION_BUCKET_LIMIT = (1 << (RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED));
1
+ import { assert } from "../../../../../core/assert.js";
2
+ import { ShadeDrawMode } from "../../../material/ShadeDrawMode.js";
3
+ import { TransparencyMode } from "../../../material/TransparencyMode.js";
4
+ import { ceil_log2 } from "../../../../../core/binary/operations/ceil_log2.js";
5
+
6
+ /**
7
+ *
8
+ * @param {Object} e enum
9
+ * @return {number} number of bits required to represent it
10
+ */
11
+ function enum_bit_count(e) {
12
+ const max = Math.max.apply(null, Object.values(e));
13
+
14
+ assert.isNonNegativeInteger(max, 'max');
15
+ assert.lessThanOrEqual(max, 5, "the bucket count is going to be absurd");
16
+
17
+ return ceil_log2(max + 1);
18
+ }
19
+
20
+ export const RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE = enum_bit_count(TransparencyMode);
21
+ export const RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE = enum_bit_count(ShadeDrawMode);
22
+
23
+ /**
24
+ * One bit, not the two {@link ShadeDrawSide} would need. Only double-sided geometry needs a
25
+ * pipeline of its own — `cullMode: 'none'` has no winding equivalent. `Front` and `Back` share
26
+ * one: a back-sided material is a front-sided one drawn with its winding reversed, and the
27
+ * vertex shader does the reversing.
28
+ *
29
+ * @see rasterization_material_bucket
30
+ * @type {number}
31
+ */
32
+ export const RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED = 1;
33
+
34
+ /**
35
+ * Maximum number of rasterization buckets. This is a number of permutations of different alpha and draw modes.
36
+ * See Northlight talk on "Alan Wake 2" meshlet shading.
37
+ * @type {number}
38
+ */
39
+ export const RASTERIZATION_BUCKET_LIMIT = (1 << (RASTERIZATION_BUCKET_BIT_COUNT_ALPHA_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DRAW_MODE + RASTERIZATION_BUCKET_BIT_COUNT_DOUBLE_SIDED));
@@ -1 +1 @@
1
- {"version":3,"file":"shader_prefix_sum_to_command.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js"],"names":[],"mappings":"AA8DA,yDAIG;8BA1D2B,kCAAkC"}
1
+ {"version":3,"file":"shader_prefix_sum_to_command.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/rasterize/expand/mesh/shader_prefix_sum_to_command.js"],"names":[],"mappings":"AAyDA,yDAIG;8BAvD2B,kCAAkC"}
@@ -1,6 +1,4 @@
1
- import {
2
- WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION
3
- } from "../../../gpu_primitive/indirect/WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION.js";
1
+ import { chunk_folded_dispatch } from "../../../gpu_primitive/indirect/chunk_folded_dispatch.js";
4
2
  import { STRUCT_DISPATCH_COMPUTE_COMMAND } from "../../../gpu_primitive/indirect/STRUCT_DISPATCH_COMPUTE_COMMAND.js";
5
3
  import { COLLECTION_U32_STRUCT_READ } from "../../../gpu_primitive/COLLECTION_U32_STRUCT_READ.js";
6
4
  import { chunk_divide_round_up_u32 } from "../../../shader/chunk/math/chunk_divide_round_up_u32.js";
@@ -43,20 +41,17 @@ fn main(){
43
41
  It is also the stride folded_workgroup_index flattens by, so the two builders have to agree on
44
42
  it: a row of x shorter than that would leave a gap in the index.
45
43
  */
46
- const LIMIT = ${WEBGPU_GUARANTEED_MAX_COMPUTE_WORKGROUPS_PER_DIMENSION}u;
47
-
48
44
  let desired_groups = divide_round_up_u32(total_count, TARGET_GROUP_SIZE);
45
+ let folded = folded_dispatch(desired_groups);
49
46
 
50
- let rows = divide_round_up_u32(desired_groups, LIMIT);
51
- let slices = divide_round_up_u32(rows, LIMIT);
52
-
53
- command.workgroupCountX = min( desired_groups, LIMIT );
54
- command.workgroupCountY = min( max( rows, 1u ), LIMIT );
55
- command.workgroupCountZ = max( slices, 1u );
47
+ command.workgroupCountX = folded.x;
48
+ command.workgroupCountY = folded.y;
49
+ command.workgroupCountZ = folded.z;
56
50
 
57
51
  }
58
52
  `, [
59
- chunk_divide_round_up_u32
53
+ chunk_divide_round_up_u32,
54
+ chunk_folded_dispatch,
60
55
  ]
61
56
  )
62
57
 
@@ -1,8 +1,3 @@
1
- /**
2
- * Levels a clipmap table holds at most, and how far `clipmap_select_finest` walks.
3
- * @type {number}
4
- */
5
- export const CLIPMAP_LEVEL_LIMIT: number;
6
1
  /**
7
2
  * One level of a clipmap as a shader reads it: the level's window, and how big its cell is. Levels
8
3
  * sit finest first in a {@link CLIPMAP_LEVEL_ARRAY}.
@@ -13,7 +8,14 @@ export const CLIPMAP_LEVEL_LIMIT: number;
13
8
  */
14
9
  export const CLIPMAP_LEVEL_STRUCT: WebGPUStruct;
15
10
  /**
16
- * A clipmap's table of levels, as a field of the uniform that carries it.
11
+ * Levels a clipmap table holds: as many as fill the uniform binding every device allows, 2,048. The
12
+ * table is a uniform, whose length its type fixes, so this is the most levels any clipmap can have;
13
+ * a walk over it stops at the clipmap's own count, and a writer uploads only the levels it has.
14
+ * @type {number}
15
+ */
16
+ export const CLIPMAP_LEVEL_LIMIT: number;
17
+ /**
18
+ * A clipmap's table of levels, a uniform of its own, {@link CLIPMAP_LEVEL_LIMIT} long.
17
19
  * @type {WebGPUArray}
18
20
  */
19
21
  export const CLIPMAP_LEVEL_ARRAY: WebGPUArray;
@@ -1 +1 @@
1
- {"version":3,"file":"CLIPMAP_LEVEL_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,kCAFU,MAAM,CAEsB;AAEtC;;;;;;;GAOG;AACH,mCAFU,YAAY,CAeH;AAEnB;;;GAGG;AACH,kCAFU,WAAW,CAE0E;6BAnClE,4BAA4B;4BAD7B,2BAA2B"}
1
+ {"version":3,"file":"CLIPMAP_LEVEL_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/clipmap/CLIPMAP_LEVEL_STRUCT.js"],"names":[],"mappings":"AAKA;;;;;;;GAOG;AACH,mCAFU,YAAY,CAeH;AAEnB;;;;;GAKG;AACH,kCAFU,MAAM,CAEqH;AAErI;;;GAGG;AACH,kCAFU,WAAW,CAE0E;6BArClE,4BAA4B;4BAD7B,2BAA2B"}
@@ -1,13 +1,8 @@
1
+ import { WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE } from "../../../gpu_primitive/WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE.js";
1
2
  import { f32, vec3i } from "../../type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
2
3
  import { WebGPUArray } from "../../type/WebGPUArray.js";
3
4
  import { WebGPUStruct } from "../../type/WebGPUStruct.js";
4
5
 
5
- /**
6
- * Levels a clipmap table holds at most, and how far `clipmap_select_finest` walks.
7
- * @type {number}
8
- */
9
- export const CLIPMAP_LEVEL_LIMIT = 16;
10
-
11
6
  /**
12
7
  * One level of a clipmap as a shader reads it: the level's window, and how big its cell is. Levels
13
8
  * sit finest first in a {@link CLIPMAP_LEVEL_ARRAY}.
@@ -32,7 +27,15 @@ export const CLIPMAP_LEVEL_STRUCT = WebGPUStruct.from({
32
27
  }, "ClipmapLevel");
33
28
 
34
29
  /**
35
- * A clipmap's table of levels, as a field of the uniform that carries it.
30
+ * Levels a clipmap table holds: as many as fill the uniform binding every device allows, 2,048. The
31
+ * table is a uniform, whose length its type fixes, so this is the most levels any clipmap can have;
32
+ * a walk over it stops at the clipmap's own count, and a writer uploads only the levels it has.
33
+ * @type {number}
34
+ */
35
+ export const CLIPMAP_LEVEL_LIMIT = Math.floor(WEBGPU_GUARANTEED_MAX_UNIFORM_BUFFER_BINDING_SIZE / CLIPMAP_LEVEL_STRUCT.aligned_size);
36
+
37
+ /**
38
+ * A clipmap's table of levels, a uniform of its own, {@link CLIPMAP_LEVEL_LIMIT} long.
36
39
  * @type {WebGPUArray}
37
40
  */
38
41
  export const CLIPMAP_LEVEL_ARRAY = WebGPUArray.from(CLIPMAP_LEVEL_STRUCT, CLIPMAP_LEVEL_LIMIT);
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Shared key packing/unpacking and stacked 3D indirection texel coordinates for clipmap cascades
3
+ * of cubic window resolution `resolution`:
4
+ *
5
+ * ```wgsl
6
+ * fn clipmap_key(cascade: u32, storage: vec3<u32>, resolution: u32) -> u32
7
+ * fn clipmap_key_cascade(key: u32, resolution: u32) -> u32
8
+ * fn clipmap_key_storage(key: u32, resolution: u32) -> vec3<u32>
9
+ * fn clipmap_stacked_texel(cascade: u32, storage: vec3<u32>, resolution: u32) -> vec3<u32>
10
+ * ```
11
+ *
12
+ * @type {CodeChunk}
13
+ */
14
+ export const chunk_clipmap_key: CodeChunk;
15
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
16
+ //# sourceMappingURL=chunk_clipmap_key.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_clipmap_key.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_key.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,gCAFU,SAAS,CAqBjB;0BAlCwB,6BAA6B"}
@@ -0,0 +1,35 @@
1
+ import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+
3
+ /**
4
+ * Shared key packing/unpacking and stacked 3D indirection texel coordinates for clipmap cascades
5
+ * of cubic window resolution `resolution`:
6
+ *
7
+ * ```wgsl
8
+ * fn clipmap_key(cascade: u32, storage: vec3<u32>, resolution: u32) -> u32
9
+ * fn clipmap_key_cascade(key: u32, resolution: u32) -> u32
10
+ * fn clipmap_key_storage(key: u32, resolution: u32) -> vec3<u32>
11
+ * fn clipmap_stacked_texel(cascade: u32, storage: vec3<u32>, resolution: u32) -> vec3<u32>
12
+ * ```
13
+ *
14
+ * @type {CodeChunk}
15
+ */
16
+ export const chunk_clipmap_key = CodeChunk.from(
17
+ //language=WGSL
18
+ `
19
+ fn clipmap_key(cascade: u32, storage: vec3<u32>, resolution: u32) -> u32 {
20
+ return (cascade * resolution + storage.z) * resolution * resolution + storage.y * resolution + storage.x;
21
+ }
22
+
23
+ fn clipmap_key_cascade(key: u32, resolution: u32) -> u32 {
24
+ return key / (resolution * resolution * resolution);
25
+ }
26
+
27
+ fn clipmap_key_storage(key: u32, resolution: u32) -> vec3<u32> {
28
+ return vec3<u32>(key % resolution, (key / resolution) % resolution, (key / (resolution * resolution)) % resolution);
29
+ }
30
+
31
+ fn clipmap_stacked_texel(cascade: u32, storage: vec3<u32>, resolution: u32) -> vec3<u32> {
32
+ return vec3<u32>(storage.x, storage.y, storage.z + cascade * resolution);
33
+ }
34
+ `
35
+ );
@@ -2,14 +2,17 @@
2
2
  * The finest level of a clipmap whose window holds a world point, and how far into that window's
3
3
  * edge band the point is.
4
4
  *
5
- * Walks the first `count` levels of the table, finest first, at most {@link CLIPMAP_LEVEL_LIMIT}; the
6
- * first whose window holds the cell the point is in answers. Its `edge_weight` is the point's distance
5
+ * Walks the first `count` levels of the table, finest first; the first whose window holds the cell the
6
+ * point is in answers. Its `edge_weight` is the point's distance
7
7
  * to the window's nearest face, in the level's cells, through a linear ramp: 0 at `band_width` cells
8
8
  * or deeper, 1 on the face. It is how much a reader blends toward the next coarser source — the
9
9
  * parent level, or whatever stands outside the coarsest. `band_width` is positive.
10
10
  *
11
11
  * A point no level holds answers `CLIPMAP_LEVEL_NONE`, with a weight of 0.
12
12
  *
13
+ * `clipmap_level_select` is one level's test, for a table that is not a {@link CLIPMAP_LEVEL_ARRAY} of its
14
+ * own: the edge weight of a point the level's window holds, or a negative one for a point it does not.
15
+ *
13
16
  * The CPU twin is `clipmap_select_finest` in `core/geom/clipmap/`.
14
17
  *
15
18
  * @type {CodeChunk}
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_clipmap_select_finest.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AACH,0CAFU,SAAS,CAoDjB;0BAtEwB,6BAA6B"}
1
+ {"version":3,"file":"chunk_clipmap_select_finest.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/clipmap/chunk_clipmap_select_finest.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;GAkBG;AACH,0CAFU,SAAS,CA0DjB;0BA/EwB,6BAA6B"}
@@ -6,14 +6,17 @@ import { chunk_clipmap_contains } from "./chunk_clipmap_contains.js";
6
6
  * The finest level of a clipmap whose window holds a world point, and how far into that window's
7
7
  * edge band the point is.
8
8
  *
9
- * Walks the first `count` levels of the table, finest first, at most {@link CLIPMAP_LEVEL_LIMIT}; the
10
- * first whose window holds the cell the point is in answers. Its `edge_weight` is the point's distance
9
+ * Walks the first `count` levels of the table, finest first; the first whose window holds the cell the
10
+ * point is in answers. Its `edge_weight` is the point's distance
11
11
  * to the window's nearest face, in the level's cells, through a linear ramp: 0 at `band_width` cells
12
12
  * or deeper, 1 on the face. It is how much a reader blends toward the next coarser source — the
13
13
  * parent level, or whatever stands outside the coarsest. `band_width` is positive.
14
14
  *
15
15
  * A point no level holds answers `CLIPMAP_LEVEL_NONE`, with a weight of 0.
16
16
  *
17
+ * `clipmap_level_select` is one level's test, for a table that is not a {@link CLIPMAP_LEVEL_ARRAY} of its
18
+ * own: the edge weight of a point the level's window holds, or a negative one for a point it does not.
19
+ *
17
20
  * The CPU twin is `clipmap_select_finest` in `core/geom/clipmap/`.
18
21
  *
19
22
  * @type {CodeChunk}
@@ -30,6 +33,25 @@ struct ClipmapSelection {
30
33
  edge_weight: f32,
31
34
  }
32
35
 
36
+ fn clipmap_level_select(level: ClipmapLevel, position_ws: vec3f, band_width: f32) -> f32 {
37
+ // the point in the level's cells
38
+ let position_cells = position_ws / level.cell_size;
39
+
40
+ if (!clipmap_contains(vec3<i32>(floor(position_cells)), level.corner, level.size)) {
41
+ return -1.0;
42
+ }
43
+
44
+ let from_corner = position_cells - vec3f(level.corner);
45
+ let to_far_corner = vec3f(level.size) - from_corner;
46
+
47
+ let edge = min(
48
+ min(min(from_corner.x, from_corner.y), from_corner.z),
49
+ min(min(to_far_corner.x, to_far_corner.y), to_far_corner.z)
50
+ );
51
+
52
+ return saturate(1.0 - edge / band_width);
53
+ }
54
+
33
55
  fn clipmap_select_finest(
34
56
  levels: ptr<uniform, ${CLIPMAP_LEVEL_ARRAY.wgsl_ref}>,
35
57
  count: u32,
@@ -42,24 +64,11 @@ fn clipmap_select_finest(
42
64
  break;
43
65
  }
44
66
 
45
- let level = (*levels)[i];
46
-
47
- // the point in the level's cells
48
- let position_cells = position_ws / level.cell_size;
67
+ let weight = clipmap_level_select((*levels)[i], position_ws, band_width);
49
68
 
50
- if (!clipmap_contains(vec3<i32>(floor(position_cells)), level.corner, level.size)) {
51
- continue;
69
+ if (weight >= 0.0) {
70
+ return ClipmapSelection(i, weight);
52
71
  }
53
-
54
- let from_corner = position_cells - vec3f(level.corner);
55
- let to_far_corner = vec3f(level.size) - from_corner;
56
-
57
- let edge = min(
58
- min(min(from_corner.x, from_corner.y), from_corner.z),
59
- min(min(to_far_corner.x, to_far_corner.y), to_far_corner.z)
60
- );
61
-
62
- return ClipmapSelection(i, saturate(1.0 - edge / band_width));
63
72
  }
64
73
 
65
74
  return ClipmapSelection(CLIPMAP_LEVEL_NONE, 0.0);
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_sh2_color_get_irradiance_at.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,gDAFU,SAAS,CAqBhB;0BAzBuB,6BAA6B"}
1
+ {"version":3,"file":"chunk_sh2_color_get_irradiance_at.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh2_color_get_irradiance_at.js"],"names":[],"mappings":"AAGA;;;GAGG;AACH,gDAFU,SAAS,CAUhB;0BAfuB,6BAA6B"}
@@ -1,4 +1,5 @@
1
1
  import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { chunk_sh2_color_irradiance } from "./chunk_sh2_color_irradiance.js";
2
3
 
3
4
  /**
4
5
  * Kernel is cosine convolved
@@ -8,19 +9,8 @@ export const chunk_sh2_color_get_irradiance_at = CodeChunk.from(
8
9
  //language=WGSL
9
10
  `
10
11
  fn sh2_color_get_irradiance_at(normal: vec3<f32>, coefficients: array< vec3<f32>, 4 >) -> vec3<f32>{
11
- // normal is assumed to have unit length
12
- let x = normal.x;
13
- let y = normal.y;
14
- let z = normal.z;
15
-
16
- // band 0
17
- var result = coefficients[0] * 0.8862269254527579;
18
-
19
- // band 1
20
- result += coefficients[1] * 1.0233267079464885 * y;
21
- result += coefficients[2] * 1.0233267079464885 * z;
22
- result += coefficients[3] * 1.0233267079464885 * x;
23
-
24
- return max(vec3(0),result);
12
+ return max(vec3(0), sh2_color_irradiance(normal, coefficients));
25
13
  }
26
- `);
14
+ `, [
15
+ chunk_sh2_color_irradiance,
16
+ ]);
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_sh3_convolve_with_cosine_kernel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.js"],"names":[],"mappings":"AAMA,8DAuBG;AAEH,oEA4CC;0BA3EyB,6BAA6B"}
1
+ {"version":3,"file":"chunk_sh3_convolve_with_cosine_kernel.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/spherical_harmonics/chunk_sh3_convolve_with_cosine_kernel.js"],"names":[],"mappings":"AAOA,8DAQG;AAEH,oEA4CC;0BA7DyB,6BAA6B"}
@@ -1,4 +1,5 @@
1
1
  import { CodeChunk } from "../../compiler/CodeChunk.js";
2
+ import { chunk_sh3_convolve_with_zh } from "./chunk_sh3_convolve_with_zh.js";
2
3
 
3
4
  const sh_cosineA0 = Math.PI;
4
5
  const sh_cosineA1 = (2.0 * Math.PI) / 3.0;
@@ -8,26 +9,11 @@ export const chunk_sh3_convolve_with_cosine_kernel = CodeChunk.from(
8
9
  //language=WGSL
9
10
  `
10
11
  fn sh3_convolve_with_cosine_kernel(sh: array<f32,9>) -> array<f32, 9>{
11
- return array<f32,9>(
12
-
13
- // band 0
14
- sh[0]*${sh_cosineA0},
15
-
16
- // band 1
17
- sh[1]*${sh_cosineA1},
18
- sh[2]*${sh_cosineA1},
19
- sh[3]*${sh_cosineA1},
20
-
21
- // band 2
22
- sh[4]*${sh_cosineA2},
23
- sh[5]*${sh_cosineA2},
24
- sh[6]*${sh_cosineA2},
25
- sh[7]*${sh_cosineA2},
26
- sh[8]*${sh_cosineA2},
27
-
28
- );
12
+ return sh3_convolve_with_zh(sh, vec3<f32>(${sh_cosineA0}, ${sh_cosineA1}, ${sh_cosineA2}));
29
13
  }
30
- `);
14
+ `, [
15
+ chunk_sh3_convolve_with_zh,
16
+ ]);
31
17
 
32
18
  export const chunk_sh3_color_convolve_with_cosine_kernel = CodeChunk.from(
33
19
  //language=WGSL
@@ -1 +1 @@
1
- {"version":3,"file":"chunk_sh3_windowing.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.js"],"names":[],"mappings":"AAIA,4CA4BO;0BAhCmB,gCAAgC"}
1
+ {"version":3,"file":"chunk_sh3_windowing.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/shader/chunk/spherical_harmonics/dering/chunk_sh3_windowing.js"],"names":[],"mappings":"AAIA,4CASO;0BAbmB,gCAAgC"}
@@ -1,34 +1,15 @@
1
1
  import { CodeChunk } from "../../../compiler/CodeChunk.js";
2
- import { chunk_sh_index } from "../chunk_sh_index.js";
2
+ import { chunk_sh3_convolve_with_zh } from "../chunk_sh3_convolve_with_zh.js";
3
3
  import { chunk_sinc_window } from "./chunk_sinc_window.js";
4
4
 
5
5
  export const chunk_sh3_windowing = CodeChunk.from(
6
6
  //language=WGSL
7
7
  `
8
8
  fn sh3_windowing( f:array<f32, 9>, cutoff:f32 ) -> array<f32, 9>{
9
-
10
- // scale each band individually
11
- let w0 = 1.0; //first band is always unchanged
12
- let w1 = sinc_window(1, cutoff);
13
- let w2 = sinc_window(2, cutoff);
14
-
15
- return array<f32,9>(
16
- // band 0
17
- f[0] * w0,
18
- // band 1
19
- f[1] * w1,
20
- f[2] * w1,
21
- f[3] * w1,
22
- // band 2
23
- f[4] * w2,
24
- f[5] * w2,
25
- f[6] * w2,
26
- f[7] * w2,
27
- f[8] * w2,
28
- );
9
+ return sh3_convolve_with_zh(f, vec3<f32>(1.0, sinc_window(1, cutoff), sinc_window(2, cutoff)));
29
10
  }
30
11
  `, [
12
+ chunk_sh3_convolve_with_zh,
31
13
  chunk_sinc_window,
32
- chunk_sh_index,
33
14
  ]);
34
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"ShadowmapDrawSelector.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/ShadowmapDrawSelector.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IACI;;;;OAIG;IACH,UAFU,WAAW,CAEP;IAEd;;;;OAIG;IACH,aAFU,MAAM,CAEA;IAEhB;;;;;;OAMG;IACH,sBAFU,MAAM,CAES;IAEzB;;;;;OAKG;IACH,sBAFU,OAAO,CAEY;IAsC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,mBALW,WAAW,eAEX,MAAM,gBACN,MAAM,QAkFhB;;CACJ"}
1
+ {"version":3,"file":"ShadowmapDrawSelector.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/shadow/map/ShadowmapDrawSelector.js"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH;IACI;;;;OAIG;IACH,UAFU,WAAW,CAEP;IAEd;;;;OAIG;IACH,aAFU,MAAM,CAEA;IAEhB;;;;;;OAMG;IACH,sBAFU,MAAM,CAES;IAEzB;;;;;OAKG;IACH,sBAFU,OAAO,CAEY;IAsC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;OA2BG;IACH,mBALW,WAAW,eAEX,MAAM,gBACN,MAAM,QAkFhB;;CACJ"}
@@ -1,5 +1,6 @@
1
1
  import { IndexedFloatMaxHeap } from "../../../../core/collection/heap/IndexedFloatMaxHeap.js";
2
2
  import { compute_shadowmap_update_score } from "./shadowmap_update_score.js";
3
+ import { ceilPowerOfTwo } from "../../../../core/binary/operations/ceilPowerOfTwo.js";
3
4
 
4
5
  /**
5
6
  * Picks which shadowmaps get rasterized this frame, given a view budget.
@@ -92,7 +93,7 @@ export class ShadowmapDrawSelector {
92
93
  return;
93
94
  }
94
95
 
95
- const capacity = Math.max(64, 1 << (32 - Math.clz32(count - 1)));
96
+ const capacity = Math.max(64, ceilPowerOfTwo(count));
96
97
 
97
98
  this.#heap = new IndexedFloatMaxHeap(capacity);
98
99
  this.#heap_capacity = capacity;