@woosh/meep-engine 3.61.2 → 3.61.3

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 (389) hide show
  1. package/CHANGELOG.md +111 -0
  2. package/package.json +1 -1
  3. package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
  4. package/src/shade/playground/probe_clipmap/README.md +3 -4
  5. package/src/shade/playground/probe_clipmap/index.html +5 -13
  6. package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
  7. package/src/shade/playground/probe_clipmap/main.js +0 -5
  8. package/src/shade/playground/probe_clipmap_box/README.md +1 -1
  9. package/src/shade/playground/probe_clipmap_box/index.html +1 -1
  10. package/src/shade/renderer/Renderer.d.ts.map +1 -1
  11. package/src/shade/renderer/Renderer.js +50 -11
  12. package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
  13. package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
  14. package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
  15. package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
  16. package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
  17. package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts +10 -0
  18. package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts.map +1 -0
  19. package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.js +54 -0
  20. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +85 -36
  21. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
  22. package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +813 -412
  23. package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts +7 -0
  24. package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts.map +1 -1
  25. package/src/shade/renderer/geometry/sdf/MESH_SDF.js +8 -0
  26. package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts +14 -0
  27. package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts.map +1 -0
  28. package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.js +35 -0
  29. package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts.map +1 -1
  30. package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js +0 -4
  31. package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts +55 -10
  32. package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts.map +1 -1
  33. package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js +86 -16
  34. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts +2 -2
  35. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts.map +1 -1
  36. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js +28 -2
  37. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts +54 -0
  38. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts.map +1 -0
  39. package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.js +146 -0
  40. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts +1 -1
  41. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
  42. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +2 -1
  43. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts +18 -0
  44. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts.map +1 -0
  45. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.js +66 -0
  46. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts +17 -0
  47. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts.map +1 -0
  48. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.js +66 -0
  49. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts +5 -3
  50. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
  51. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +15 -14
  52. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts +2 -1
  53. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts.map +1 -1
  54. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.js +12 -3
  55. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts +21 -0
  56. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts.map +1 -0
  57. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.js +84 -0
  58. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts +53 -0
  59. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts.map +1 -0
  60. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.js +343 -0
  61. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts +3 -3
  62. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts.map +1 -1
  63. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js +9 -5
  64. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts +2 -2
  65. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts.map +1 -1
  66. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js +3 -2
  67. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts +69 -0
  68. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts.map +1 -0
  69. package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.js +294 -0
  70. package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts +16 -0
  71. package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts.map +1 -0
  72. package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.js +36 -0
  73. package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts +126 -0
  74. package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts.map +1 -0
  75. package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.js +148 -0
  76. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts +10 -0
  77. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts.map +1 -0
  78. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.js +140 -0
  79. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts +8 -0
  80. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts.map +1 -0
  81. package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.js +76 -0
  82. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts +9 -0
  83. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts.map +1 -1
  84. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js +23 -0
  85. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts +13 -0
  86. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts.map +1 -0
  87. package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.js +23 -0
  88. package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts +262 -0
  89. package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts.map +1 -0
  90. package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.js +1819 -0
  91. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts +118 -0
  92. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts.map +1 -0
  93. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.js +204 -0
  94. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts +66 -0
  95. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts.map +1 -0
  96. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.js +103 -0
  97. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts +19 -0
  98. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts.map +1 -0
  99. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.js +23 -0
  100. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts +15 -0
  101. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts.map +1 -0
  102. package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.js +70 -0
  103. package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts +13 -0
  104. package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts.map +1 -0
  105. package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.js +35 -0
  106. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts +32 -0
  107. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts.map +1 -0
  108. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.js +111 -0
  109. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts +17 -0
  110. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts.map +1 -0
  111. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.js +49 -0
  112. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts +13 -0
  113. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts.map +1 -0
  114. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.js +35 -0
  115. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts +24 -0
  116. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts.map +1 -0
  117. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.js +169 -0
  118. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts +19 -0
  119. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts.map +1 -0
  120. package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.js +49 -0
  121. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts +19 -0
  122. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts.map +1 -0
  123. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.js +67 -0
  124. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts +78 -0
  125. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts.map +1 -0
  126. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.js +320 -0
  127. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts +15 -0
  128. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts.map +1 -0
  129. package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.js +48 -0
  130. package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts +51 -0
  131. package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts.map +1 -0
  132. package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.js +109 -0
  133. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts +11 -0
  134. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts.map +1 -0
  135. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.js +51 -0
  136. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts +26 -0
  137. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts.map +1 -0
  138. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.js +453 -0
  139. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts +12 -0
  140. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts.map +1 -0
  141. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.js +99 -0
  142. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts +22 -0
  143. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts.map +1 -0
  144. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.js +140 -0
  145. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts +32 -0
  146. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -0
  147. package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +261 -0
  148. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +2 -2
  149. package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +2 -2
  150. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +6 -6
  151. package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +7 -7
  152. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +15 -7
  153. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
  154. package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +82 -17
  155. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +26 -19
  156. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
  157. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +226 -148
  158. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +25 -52
  159. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
  160. package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +29 -69
  161. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +19 -16
  162. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
  163. package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +24 -21
  164. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +46 -22
  165. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
  166. package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +49 -36
  167. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +3 -2
  168. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
  169. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +7 -6
  170. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +8 -22
  171. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
  172. package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +15 -51
  173. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +1 -6
  174. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
  175. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +6 -13
  176. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
  177. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +0 -2
  178. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +4 -4
  179. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -1
  180. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +9 -34
  181. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +4 -6
  182. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -1
  183. package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +15 -39
  184. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts +1 -1
  185. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js +1 -1
  186. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts +1 -2
  187. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
  188. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +2 -6
  189. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts +2 -2
  190. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
  191. package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +5 -2
  192. package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts +5 -1
  193. package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js +16 -2
  194. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts +45 -0
  195. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts.map +1 -0
  196. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js +208 -0
  197. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts +24 -0
  198. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts.map +1 -0
  199. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.js +40 -0
  200. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts +34 -0
  201. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts.map +1 -0
  202. package/src/shade/renderer/global_illumination/probe_clipmap/debug/{graph_probe_clipmap_debug_mesh_cards.js → graph_probe_clipmap_debug_mesh_surfaces.js} +38 -57
  203. package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts +61 -0
  204. package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts.map +1 -0
  205. package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js +193 -0
  206. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts +67 -0
  207. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts.map +1 -0
  208. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js +142 -0
  209. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts +32 -0
  210. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts.map +1 -0
  211. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.js +70 -0
  212. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts +30 -0
  213. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts.map +1 -0
  214. package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.js +71 -0
  215. package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts +26 -0
  216. package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts.map +1 -0
  217. package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js +176 -0
  218. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +18 -9
  219. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
  220. package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +63 -44
  221. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +21 -1
  222. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
  223. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +24 -1
  224. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts +10 -0
  225. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts.map +1 -0
  226. package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.js +11 -0
  227. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts +11 -0
  228. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts.map +1 -0
  229. package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.js +15 -0
  230. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +44 -7
  231. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
  232. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +88 -11
  233. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts +43 -0
  234. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts.map +1 -0
  235. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.js +138 -0
  236. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts +21 -0
  237. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts.map +1 -0
  238. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.js +49 -0
  239. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +2 -0
  240. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
  241. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +10 -4
  242. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts +22 -0
  243. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts.map +1 -0
  244. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.js +50 -0
  245. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +4 -4
  246. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -1
  247. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +8 -8
  248. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +3 -3
  249. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +5 -5
  250. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +2 -0
  251. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -1
  252. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +5 -1
  253. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +1 -1
  254. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +2 -2
  255. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +7 -4
  256. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
  257. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +30 -26
  258. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +6 -5
  259. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
  260. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +22 -16
  261. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
  262. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +6 -2
  263. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +2 -2
  264. package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +6 -6
  265. package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts +14 -0
  266. package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts.map +1 -0
  267. package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.js +22 -0
  268. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts +37 -0
  269. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts.map +1 -0
  270. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.js +122 -0
  271. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.d.ts.map +1 -1
  272. package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.js +1 -11
  273. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +8 -0
  274. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
  275. package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +6 -4
  276. package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
  277. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +1 -1
  278. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
  279. package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +2 -18
  280. package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts +17 -0
  281. package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts.map +1 -0
  282. package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.js +16 -0
  283. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +1 -1
  284. package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +1 -1
  285. package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +1 -1
  286. package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts +20 -0
  287. package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts.map +1 -0
  288. package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.js +65 -0
  289. package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
  290. package/src/shade/renderer/scene/GPUSceneContext.d.ts +1 -1
  291. package/src/shade/renderer/scene/GPUSceneContext.js +1 -1
  292. package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts +12 -0
  293. package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts.map +1 -0
  294. package/src/shade/renderer/shader/chunk/material/albedo_compress.js +26 -0
  295. package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts +16 -0
  296. package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts.map +1 -0
  297. package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.js +22 -0
  298. package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts +15 -0
  299. package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts.map +1 -0
  300. package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.js +23 -0
  301. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts +16 -0
  302. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts.map +1 -0
  303. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.js +25 -0
  304. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts +25 -0
  305. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts.map +1 -0
  306. package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.js +36 -0
  307. package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts +11 -0
  308. package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts.map +1 -0
  309. package/src/shade/renderer/shader/chunk/material/metal_rough_compress.js +38 -0
  310. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts +20 -0
  311. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts.map +1 -0
  312. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.js +35 -0
  313. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts +28 -0
  314. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts.map +1 -0
  315. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.js +79 -0
  316. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts +25 -0
  317. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts.map +1 -0
  318. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.js +89 -0
  319. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts +31 -0
  320. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts.map +1 -0
  321. package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.js +66 -0
  322. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.d.ts.map +1 -1
  323. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.js +2 -0
  324. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts +17 -0
  325. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts.map +1 -0
  326. package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.js +34 -0
  327. package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts +18 -0
  328. package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts.map +1 -1
  329. package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.js +31 -23
  330. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
  331. package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +5 -6
  332. package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
  333. package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
  334. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +0 -213
  335. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +0 -1
  336. package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +0 -1468
  337. package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts +0 -82
  338. package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts.map +0 -1
  339. package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.js +0 -127
  340. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts +0 -24
  341. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts.map +0 -1
  342. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.js +0 -29
  343. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts +0 -12
  344. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts.map +0 -1
  345. package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.js +0 -31
  346. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +0 -11
  347. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +0 -1
  348. package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +0 -21
  349. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts +0 -29
  350. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts.map +0 -1
  351. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.js +0 -179
  352. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts +0 -17
  353. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts.map +0 -1
  354. package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.js +0 -107
  355. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +0 -65
  356. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +0 -1
  357. package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +0 -376
  358. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +0 -40
  359. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +0 -1
  360. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +0 -301
  361. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts +0 -19
  362. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts.map +0 -1
  363. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.js +0 -61
  364. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +0 -18
  365. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts.map +0 -1
  366. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +0 -102
  367. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts +0 -15
  368. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts.map +0 -1
  369. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.js +0 -65
  370. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts +0 -22
  371. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts.map +0 -1
  372. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.js +0 -136
  373. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts +0 -20
  374. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts.map +0 -1
  375. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js +0 -104
  376. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +0 -20
  377. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +0 -1
  378. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +0 -80
  379. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +0 -18
  380. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +0 -1
  381. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +0 -113
  382. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts +0 -30
  383. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts.map +0 -1
  384. package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js +0 -146
  385. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts +0 -34
  386. package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts.map +0 -1
  387. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +0 -31
  388. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +0 -1
  389. package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.js +0 -82
@@ -0,0 +1,35 @@
1
+ /*
2
+ A surface material texel: what a texel of a sparse field keeps of the surface it holds, its diffuse
3
+ albedo, metalness, roughness and emissive, each a constant over the texel's tent, L0. Each codec owns a
4
+ plane of its own, a texture of the atlas that holds the texels, on the lattice the field's bricks use,
5
+ 8³ a tile:
6
+
7
+ albedo r32uint the diffuse albedo, `albedo_compress`
8
+ metal_rough r8uint metalness and roughness, `metal_rough_compress`
9
+ emissive r32uint the emissive radiance, RGB9E5, `rgbe9995_encode`
10
+
11
+ The brick clipmap's material keeps all three planes, a tile of each for every slot, and a texel that
12
+ holds no material there is 0 throughout: the albedo codec never writes a code of 0, so the albedo plane
13
+ says which texels hold a material, for every plane.
14
+
15
+ A Model Surface Cache keeps a plane only where it varies over its surface, block-coded, a block for each
16
+ 4³ of its geometry's field's bricks some texel of which can hold surface, and a presence bit for each
17
+ texel to say which hold a material (`MESH_SURFACE_BLOCK.js`); a plane it does not keep is one code for
18
+ every texel (`MESH_SURFACE_STRUCT.js`).
19
+ */
20
+
21
+ /**
22
+ * The planes' formats, in the order {@link SURFACE_MATERIAL_ALBEDO_PLANE},
23
+ * {@link SURFACE_MATERIAL_METAL_ROUGH_PLANE} and {@link SURFACE_MATERIAL_EMISSIVE_PLANE} name them.
24
+ * @type {ReadonlyArray<GPUTextureFormat>}
25
+ */
26
+ export const SURFACE_MATERIAL_FORMATS = Object.freeze(["r32uint", "r8uint", "r32uint"]);
27
+
28
+ /** The plane of the albedo codes. */
29
+ export const SURFACE_MATERIAL_ALBEDO_PLANE = 0;
30
+
31
+ /** The plane of the metalness and roughness codes. */
32
+ export const SURFACE_MATERIAL_METAL_ROUGH_PLANE = 1;
33
+
34
+ /** The plane of the emissive codes. */
35
+ export const SURFACE_MATERIAL_EMISSIVE_PLANE = 2;
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Where a brick texel's material is among a cache's blocks (`MESH_SURFACE_BLOCK.js`):
3
+ *
4
+ * ```wgsl
5
+ * fn mesh_surface_block_of(t: vec3<u32>) -> u32 // its block of the brick, 0..7
6
+ * fn mesh_surface_block_texel(t: vec3<u32>) -> u32 // its texel of the block, 0..63
7
+ * fn mesh_surface_block_number(table: u32, block: u32) -> u32 // the block's number, or MESH_SURFACE_NO_BLOCK
8
+ * ```
9
+ *
10
+ * `table` is the brick's table word.
11
+ *
12
+ * @type {CodeChunk}
13
+ */
14
+ export const chunk_mesh_surface_block_index: CodeChunk;
15
+ /**
16
+ * A texel of a cache's blocks, read from `mesh_surface_data` (`MESH_SURFACE_BLOCK.js`):
17
+ *
18
+ * ```wgsl
19
+ * fn mesh_surface_present_at(presence_blocks: u32, block: u32, texel: u32) -> bool
20
+ * fn mesh_surface_albedo_at(albedo_blocks: u32, block: u32, texel: u32) -> vec3<f32> // linear
21
+ * fn mesh_surface_metal_rough_at(metal_rough_blocks: u32, block: u32, texel: u32) -> vec2<f32>
22
+ * fn mesh_surface_emissive_at(emissive_blocks: u32, block: u32, texel: u32) -> vec3<f32>
23
+ * ```
24
+ *
25
+ * The first argument is the record's word of the plane's block 0, `block` the block's number, `texel`
26
+ * its texel of the block.
27
+ *
28
+ * @type {CodeChunk}
29
+ */
30
+ export const chunk_mesh_surface_block: CodeChunk;
31
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
32
+ //# sourceMappingURL=chunk_mesh_surface_block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_surface_block.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.js"],"names":[],"mappings":"AAeA;;;;;;;;;;;;GAYG;AACH,6CAFU,SAAS,CA0BhB;AAEH;;;;;;;;;;;;;;GAcG;AACH,uCAFU,SAAS,CAyCZ;0BA3GmB,uCAAuC"}
@@ -0,0 +1,111 @@
1
+ import { chunk_rgbe9995_decode } from "../../../shader/chunk/color/rgbe9995/chunk_rgbe9995_decode.js";
2
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
3
+ import {
4
+ MESH_SURFACE_ALBEDO_BLOCK_WORDS,
5
+ MESH_SURFACE_ALBEDO_ENDPOINT_WORDS,
6
+ MESH_SURFACE_ALBEDO_LEVELS,
7
+ MESH_SURFACE_EMISSIVE_BLOCK_WORDS,
8
+ MESH_SURFACE_METAL_ROUGH_BLOCK_WORDS,
9
+ MESH_SURFACE_METAL_ROUGH_LEVELS,
10
+ MESH_SURFACE_NO_BLOCK,
11
+ MESH_SURFACE_PRESENCE_BLOCK_WORDS,
12
+ MESH_SURFACE_TABLE_MASK_BITS
13
+ } from "./MESH_SURFACE_BLOCK.js";
14
+ import { MESH_SURFACE_DATA_RESOURCE } from "./MESH_SURFACE_RESOURCES.js";
15
+
16
+ /**
17
+ * Where a brick texel's material is among a cache's blocks (`MESH_SURFACE_BLOCK.js`):
18
+ *
19
+ * ```wgsl
20
+ * fn mesh_surface_block_of(t: vec3<u32>) -> u32 // its block of the brick, 0..7
21
+ * fn mesh_surface_block_texel(t: vec3<u32>) -> u32 // its texel of the block, 0..63
22
+ * fn mesh_surface_block_number(table: u32, block: u32) -> u32 // the block's number, or MESH_SURFACE_NO_BLOCK
23
+ * ```
24
+ *
25
+ * `table` is the brick's table word.
26
+ *
27
+ * @type {CodeChunk}
28
+ */
29
+ export const chunk_mesh_surface_block_index = CodeChunk.from(
30
+ //language=WGSL
31
+ `
32
+ fn mesh_surface_block_of(t: vec3<u32>) -> u32 {
33
+ let b = t >> vec3<u32>(2u);
34
+
35
+ return b.x + 2u * (b.y + 2u * b.z);
36
+ }
37
+
38
+ fn mesh_surface_block_texel(t: vec3<u32>) -> u32 {
39
+ let l = t & vec3<u32>(3u);
40
+
41
+ return l.x + 4u * (l.y + 4u * l.z);
42
+ }
43
+
44
+ fn mesh_surface_block_number(table: u32, block: u32) -> u32 {
45
+ let bit = 1u << block;
46
+
47
+ if ((table & bit) == 0u) {
48
+ return ${MESH_SURFACE_NO_BLOCK}u;
49
+ }
50
+
51
+ return (table >> ${MESH_SURFACE_TABLE_MASK_BITS}u) + countOneBits(table & (bit - 1u));
52
+ }
53
+ `);
54
+
55
+ /**
56
+ * A texel of a cache's blocks, read from `mesh_surface_data` (`MESH_SURFACE_BLOCK.js`):
57
+ *
58
+ * ```wgsl
59
+ * fn mesh_surface_present_at(presence_blocks: u32, block: u32, texel: u32) -> bool
60
+ * fn mesh_surface_albedo_at(albedo_blocks: u32, block: u32, texel: u32) -> vec3<f32> // linear
61
+ * fn mesh_surface_metal_rough_at(metal_rough_blocks: u32, block: u32, texel: u32) -> vec2<f32>
62
+ * fn mesh_surface_emissive_at(emissive_blocks: u32, block: u32, texel: u32) -> vec3<f32>
63
+ * ```
64
+ *
65
+ * The first argument is the record's word of the plane's block 0, `block` the block's number, `texel`
66
+ * its texel of the block.
67
+ *
68
+ * @type {CodeChunk}
69
+ */
70
+ export const chunk_mesh_surface_block = CodeChunk.from(
71
+ //language=WGSL
72
+ `
73
+ fn mesh_surface_present_at(presence_blocks: u32, block: u32, texel: u32) -> bool {
74
+ let word = mesh_surface_data[presence_blocks + block * ${MESH_SURFACE_PRESENCE_BLOCK_WORDS}u + (texel >> 5u)];
75
+
76
+ return ((word >> (texel & 31u)) & 1u) != 0u;
77
+ }
78
+
79
+ fn mesh_surface_albedo_at(albedo_blocks: u32, block: u32, texel: u32) -> vec3<f32> {
80
+ let at = albedo_blocks + block * ${MESH_SURFACE_ALBEDO_BLOCK_WORDS}u;
81
+
82
+ // a 4-bit field a texel after the endpoints: its subset above its level
83
+ let field = (mesh_surface_data[at + ${MESH_SURFACE_ALBEDO_ENDPOINT_WORDS}u + (texel >> 3u)] >> (4u * (texel & 7u))) & 15u;
84
+ let ends = at + 2u * (field >> 3u);
85
+ let e0 = unpack4x8unorm(mesh_surface_data[ends]).rgb;
86
+ let e1 = unpack4x8unorm(mesh_surface_data[ends + 1u]).rgb;
87
+ let root = mix(e0, e1, f32(field & 7u) / ${MESH_SURFACE_ALBEDO_LEVELS - 1}.0);
88
+
89
+ return root * root;
90
+ }
91
+
92
+ fn mesh_surface_metal_rough_at(metal_rough_blocks: u32, block: u32, texel: u32) -> vec2<f32> {
93
+ let at = metal_rough_blocks + block * ${MESH_SURFACE_METAL_ROUGH_BLOCK_WORDS}u;
94
+ let ends = mesh_surface_data[at];
95
+ let e0 = vec2<f32>(f32(ends & 15u), f32((ends >> 4u) & 15u)) / 15.0;
96
+ let e1 = vec2<f32>(f32((ends >> 8u) & 15u), f32((ends >> 12u) & 15u)) / 15.0;
97
+
98
+ let bit = 2u * texel;
99
+ let index = (mesh_surface_data[at + 1u + (bit >> 5u)] >> (bit & 31u)) & 3u;
100
+
101
+ return mix(e0, e1, f32(index) / ${MESH_SURFACE_METAL_ROUGH_LEVELS - 1}.0);
102
+ }
103
+
104
+ fn mesh_surface_emissive_at(emissive_blocks: u32, block: u32, texel: u32) -> vec3<f32> {
105
+ return rgbe9995_decode(mesh_surface_data[emissive_blocks + block * ${MESH_SURFACE_EMISSIVE_BLOCK_WORDS}u + texel]);
106
+ }
107
+ `, [
108
+ chunk_rgbe9995_decode,
109
+ ]);
110
+
111
+ chunk_mesh_surface_block.requireResource(MESH_SURFACE_DATA_RESOURCE);
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Whether a texel of a field's brick can hold surface, as a Model Surface Cache's bake and survey take
3
+ * it: its nearest surface point is under its tent. The field's distance d at the texel, its own byte,
4
+ * and the field's normal n there put that point d against n, which the tent holds when
5
+ * |d|·|n|∞ < 1 voxel of the brick's level.
6
+ *
7
+ * ```wgsl
8
+ * fn mesh_surface_listed(header: MeshSDF, b: u32, texel: vec3<u32>) -> bool
9
+ * ```
10
+ *
11
+ * `b` is the brick's index in the field's layout, stored; `texel` the texel of the brick.
12
+ *
13
+ * @type {CodeChunk}
14
+ */
15
+ export const chunk_mesh_surface_listed: CodeChunk;
16
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
17
+ //# sourceMappingURL=chunk_mesh_surface_listed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_surface_listed.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;GAaG;AACH,wCAFU,SAAS,CAyBZ;0BA7CmB,uCAAuC"}
@@ -0,0 +1,49 @@
1
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
2
+ import { chunk_tile_atlas_slot_origin } from "../../../texture/atlas/chunk_tile_atlas_slot_origin.js";
3
+ import { chunk_mesh_sdf } from "../chunk_mesh_sdf.js";
4
+ import { chunk_mesh_sdf_normal } from "../chunk_mesh_sdf_normal.js";
5
+ import { MESH_SDF_BRICK_TEXELS } from "../MESH_SDF.js";
6
+ import { MESH_SDF_ATLAS_RESOURCE, MESH_SDF_INDIRECTION_RESOURCE } from "../MESH_SDF_RESOURCES.js";
7
+ import { MESH_SDF_STRUCT } from "../MESH_SDF_STRUCT.js";
8
+
9
+ /**
10
+ * Whether a texel of a field's brick can hold surface, as a Model Surface Cache's bake and survey take
11
+ * it: its nearest surface point is under its tent. The field's distance d at the texel, its own byte,
12
+ * and the field's normal n there put that point d against n, which the tent holds when
13
+ * |d|·|n|∞ < 1 voxel of the brick's level.
14
+ *
15
+ * ```wgsl
16
+ * fn mesh_surface_listed(header: MeshSDF, b: u32, texel: vec3<u32>) -> bool
17
+ * ```
18
+ *
19
+ * `b` is the brick's index in the field's layout, stored; `texel` the texel of the brick.
20
+ *
21
+ * @type {CodeChunk}
22
+ */
23
+ export const chunk_mesh_surface_listed = CodeChunk.from(
24
+ //language=WGSL
25
+ `
26
+ fn mesh_surface_listed(header: ${MESH_SDF_STRUCT.wgsl_ref}, b: u32, texel: vec3<u32>) -> bool {
27
+ let slot = mesh_sdf_indirection[header.indirection + b];
28
+ let brick = mesh_sdf_brick_of(header, b);
29
+ let voxel = mesh_sdf_level_voxel(header, brick.x);
30
+
31
+ let t = ${MESH_SDF_BRICK_TEXELS}u;
32
+
33
+ // the texel's own byte, in voxels of its level
34
+ let field = tile_atlas_slot_origin(slot, textureDimensions(mesh_sdf_atlas, 0).xy / t, vec3<u32>(t)) + texel;
35
+ let d = mesh_sdf_decode(textureLoad(mesh_sdf_atlas, field, 0).r, 1.0);
36
+ let n = mesh_sdf_normal(header, brick.x, mesh_sdf_brick_corner(header, brick) + vec3<f32>(texel) * voxel);
37
+
38
+ // a flat field has no normal, and its NaN compares false
39
+ return abs(d) * max(max(abs(n.x), abs(n.y)), abs(n.z)) < 1.0;
40
+ }
41
+ `, [
42
+ MESH_SDF_STRUCT.declaration_chunk,
43
+ chunk_mesh_sdf,
44
+ chunk_mesh_sdf_normal,
45
+ chunk_tile_atlas_slot_origin,
46
+ ]);
47
+
48
+ chunk_mesh_surface_listed.requireResource(MESH_SDF_INDIRECTION_RESOURCE);
49
+ chunk_mesh_surface_listed.requireResource(MESH_SDF_ATLAS_RESOURCE);
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The run of a pass's `mesh_surface_runs` a thread is in: the last run starting at or before it, the
3
+ * runs being in order of their first thread, the first at 0.
4
+ *
5
+ * ```wgsl
6
+ * fn mesh_surface_run_find(count: u32, thread: u32) -> u32
7
+ * ```
8
+ *
9
+ * @type {CodeChunk}
10
+ */
11
+ export const chunk_mesh_surface_run_find: CodeChunk;
12
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
13
+ //# sourceMappingURL=chunk_mesh_surface_run_find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_surface_run_find.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.js"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,0CAFU,SAAS,CAqBhB;0BAhCuB,uCAAuC"}
@@ -0,0 +1,35 @@
1
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
2
+ import { MESH_SURFACE_RUNS_RESOURCE } from "./MESH_SURFACE_BAKE.js";
3
+
4
+ /**
5
+ * The run of a pass's `mesh_surface_runs` a thread is in: the last run starting at or before it, the
6
+ * runs being in order of their first thread, the first at 0.
7
+ *
8
+ * ```wgsl
9
+ * fn mesh_surface_run_find(count: u32, thread: u32) -> u32
10
+ * ```
11
+ *
12
+ * @type {CodeChunk}
13
+ */
14
+ export const chunk_mesh_surface_run_find = CodeChunk.from(
15
+ //language=WGSL
16
+ `
17
+ fn mesh_surface_run_find(count: u32, thread: u32) -> u32 {
18
+ var low = 0u;
19
+ var high = count;
20
+
21
+ while (high - low > 1u) {
22
+ let middle = (low + high) / 2u;
23
+
24
+ if (mesh_surface_runs[middle].x <= thread) {
25
+ low = middle;
26
+ } else {
27
+ high = middle;
28
+ }
29
+ }
30
+
31
+ return low;
32
+ }
33
+ `);
34
+
35
+ chunk_mesh_surface_run_find.requireResource(MESH_SURFACE_RUNS_RESOURCE);
@@ -0,0 +1,24 @@
1
+ /**
2
+ * A Model Surface Cache's material at a point of its geometry's local space, at one level of the field:
3
+ *
4
+ * ```wgsl
5
+ * struct MeshSurfaceSample { found: bool, albedo: vec3<f32>, metal_rough: vec2<f32>, emissive: vec3<f32> }
6
+ * fn mesh_surface_sample(cache: MeshSurface, header: MeshSDF, level: u32, position: vec3<f32>, tolerance: f32) -> MeshSurfaceSample
7
+ * ```
8
+ *
9
+ * The brick of the level holding the point, as `mesh_sdf_sample` finds it. A cache that keeps no plane
10
+ * holds its record's material there. Otherwise the point is moved onto the surface by the field's
11
+ * distance against its normal there, and of the 8 texels around it (`surface_material_corners`) those
12
+ * that hold a material — their blocks kept by the brick's table word, their presence bits set — and
13
+ * whose surfaces lie within `tolerance` voxels of the nearest one's are blended: each plane the cache
14
+ * keeps decoded from its blocks (`MESH_SURFACE_BLOCK.js`), each other plane its record's code. `found`
15
+ * is false outside the grid, in a brick the field left EMPTY, and where no corner holds a material.
16
+ *
17
+ * `header` is the cache's geometry's, resident. Reads `mesh_sdf_indirection`, `mesh_sdf_atlas` and what
18
+ * `mesh_sdf_normal` reads, and the caches' words.
19
+ *
20
+ * @type {CodeChunk}
21
+ */
22
+ export const chunk_mesh_surface_sample: CodeChunk;
23
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
24
+ //# sourceMappingURL=chunk_mesh_surface_sample.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_surface_sample.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.js"],"names":[],"mappings":"AAoBA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wCAFU,SAAS,CA8HZ;0BAlKmB,uCAAuC"}
@@ -0,0 +1,169 @@
1
+ import { chunk_rgbe9995_decode } from "../../../shader/chunk/color/rgbe9995/chunk_rgbe9995_decode.js";
2
+ import { chunk_albedo_uncompress } from "../../../shader/chunk/material/chunk_albedo_uncompress.js";
3
+ import { chunk_metal_rough_uncompress } from "../../../shader/chunk/material/chunk_metal_rough_uncompress.js";
4
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
5
+ import { chunk_tile_atlas_slot_origin } from "../../../texture/atlas/chunk_tile_atlas_slot_origin.js";
6
+ import { chunk_mesh_sdf } from "../chunk_mesh_sdf.js";
7
+ import { chunk_mesh_sdf_normal } from "../chunk_mesh_sdf_normal.js";
8
+ import { MESH_SDF_BRICK_TEXELS } from "../MESH_SDF.js";
9
+ import { MESH_SDF_ATLAS_RESOURCE, MESH_SDF_INDIRECTION_RESOURCE } from "../MESH_SDF_RESOURCES.js";
10
+ import { MESH_SDF_STRUCT } from "../MESH_SDF_STRUCT.js";
11
+ import { chunk_mesh_surface_block, chunk_mesh_surface_block_index } from "./chunk_mesh_surface_block.js";
12
+ import { chunk_surface_material_corners } from "./chunk_surface_material_read.js";
13
+ import { MESH_SURFACE_NO_BLOCK } from "./MESH_SURFACE_BLOCK.js";
14
+ import { MESH_SURFACE_STRUCT } from "./MESH_SURFACE_STRUCT.js";
15
+ import {
16
+ SURFACE_MATERIAL_ALBEDO_PLANE,
17
+ SURFACE_MATERIAL_EMISSIVE_PLANE,
18
+ SURFACE_MATERIAL_METAL_ROUGH_PLANE
19
+ } from "./SURFACE_MATERIAL.js";
20
+
21
+ /**
22
+ * A Model Surface Cache's material at a point of its geometry's local space, at one level of the field:
23
+ *
24
+ * ```wgsl
25
+ * struct MeshSurfaceSample { found: bool, albedo: vec3<f32>, metal_rough: vec2<f32>, emissive: vec3<f32> }
26
+ * fn mesh_surface_sample(cache: MeshSurface, header: MeshSDF, level: u32, position: vec3<f32>, tolerance: f32) -> MeshSurfaceSample
27
+ * ```
28
+ *
29
+ * The brick of the level holding the point, as `mesh_sdf_sample` finds it. A cache that keeps no plane
30
+ * holds its record's material there. Otherwise the point is moved onto the surface by the field's
31
+ * distance against its normal there, and of the 8 texels around it (`surface_material_corners`) those
32
+ * that hold a material — their blocks kept by the brick's table word, their presence bits set — and
33
+ * whose surfaces lie within `tolerance` voxels of the nearest one's are blended: each plane the cache
34
+ * keeps decoded from its blocks (`MESH_SURFACE_BLOCK.js`), each other plane its record's code. `found`
35
+ * is false outside the grid, in a brick the field left EMPTY, and where no corner holds a material.
36
+ *
37
+ * `header` is the cache's geometry's, resident. Reads `mesh_sdf_indirection`, `mesh_sdf_atlas` and what
38
+ * `mesh_sdf_normal` reads, and the caches' words.
39
+ *
40
+ * @type {CodeChunk}
41
+ */
42
+ export const chunk_mesh_surface_sample = CodeChunk.from(
43
+ //language=WGSL
44
+ `
45
+ struct MeshSurfaceSample {
46
+ found: bool,
47
+ albedo: vec3<f32>,
48
+ /** (metalness, roughness) */
49
+ metal_rough: vec2<f32>,
50
+ emissive: vec3<f32>,
51
+ }
52
+
53
+ fn mesh_surface_sample(cache: ${MESH_SURFACE_STRUCT.wgsl_ref}, header: ${MESH_SDF_STRUCT.wgsl_ref}, level: u32, position: vec3<f32>, tolerance: f32) -> MeshSurfaceSample {
54
+ var out: MeshSurfaceSample;
55
+
56
+ let voxel = mesh_sdf_level_voxel(header, level);
57
+ let bricks = mesh_sdf_level_bricks(header, level);
58
+ let voxels = (position - header.origin) / voxel;
59
+
60
+ if (any(voxels < vec3<f32>(0.0)) || any(voxels > vec3<f32>(bricks * MESH_SDF_BRICK_VOXELS))) {
61
+ return out;
62
+ }
63
+
64
+ // the brick holding the point, a point on the grid's far face in the last brick, as mesh_sdf_sample finds it
65
+ let brick = min(vec3<u32>(voxels / f32(MESH_SDF_BRICK_VOXELS)), bricks - vec3<u32>(1u));
66
+ let b = mesh_sdf_level_offset(header, level) - header.indirection + brick.x + bricks.x * (brick.y + bricks.y * brick.z);
67
+ let slot = mesh_sdf_indirection[header.indirection + b];
68
+
69
+ if (!mesh_sdf_entry_holds_slot(slot)) {
70
+ return out;
71
+ }
72
+
73
+ if (cache.texels == 0u) {
74
+ // nothing varies: the record's material wherever the field holds the surface
75
+ out.found = true;
76
+ out.albedo = albedo_uncompress(cache.albedo);
77
+ out.metal_rough = metal_rough_uncompress(cache.metal_rough);
78
+ out.emissive = rgbe9995_decode(cache.emissive);
79
+
80
+ return out;
81
+ }
82
+
83
+ let number = mesh_sdf_indirection[mesh_sdf_numbers(header) + b];
84
+ let table = mesh_surface_data[cache.table + number];
85
+ let t = ${MESH_SDF_BRICK_TEXELS}u;
86
+ let field = tile_atlas_slot_origin(slot, textureDimensions(mesh_sdf_atlas, 0).xy / t, vec3<u32>(t));
87
+
88
+ let local = voxels - vec3<f32>(brick * MESH_SDF_BRICK_VOXELS);
89
+ let distance = mesh_sdf_sample(header, level, position) / voxel;
90
+ let gradient = mesh_sdf_normal(header, level, position);
91
+
92
+ // a flat field has no normal: the point is taken where it is
93
+ let normal = select(vec3<f32>(0.0), gradient, gradient == gradient);
94
+
95
+ let point = surface_material_point(local, distance, normal);
96
+ let base = surface_material_base(point);
97
+
98
+ var present = 0u;
99
+
100
+ for (var c = 0u; c < 8u; c++) {
101
+ let corner = base + vec3<u32>(c & 1u, (c >> 1u) & 1u, c >> 2u);
102
+ let block = mesh_surface_block_number(table, mesh_surface_block_of(corner));
103
+
104
+ if (block != ${MESH_SURFACE_NO_BLOCK}u && mesh_surface_present_at(cache.presence_blocks, block, mesh_surface_block_texel(corner))) {
105
+ present |= 1u << c;
106
+ }
107
+ }
108
+
109
+ let corners = surface_material_corners(mesh_sdf_atlas, field, point, present, normal, tolerance);
110
+
111
+ let keeps_albedo = (cache.texels & ${1 << SURFACE_MATERIAL_ALBEDO_PLANE}u) != 0u;
112
+ let keeps_metal_rough = (cache.texels & ${1 << SURFACE_MATERIAL_METAL_ROUGH_PLANE}u) != 0u;
113
+ let keeps_emissive = (cache.texels & ${1 << SURFACE_MATERIAL_EMISSIVE_PLANE}u) != 0u;
114
+
115
+ var albedo = vec3<f32>(0.0);
116
+ var metal_rough = vec2<f32>(0.0);
117
+ var emissive = vec3<f32>(0.0);
118
+ var weight = 0.0;
119
+
120
+ for (var c = 0u; c < 8u; c++) {
121
+ let corner = vec3<u32>(c & 1u, (c >> 1u) & 1u, c >> 2u);
122
+ let w = surface_material_corner_weight(mesh_sdf_atlas, corners, corner);
123
+
124
+ if (w > 0.0) {
125
+ let at = corners.base + corner;
126
+ let block = mesh_surface_block_number(table, mesh_surface_block_of(at));
127
+ let texel = mesh_surface_block_texel(at);
128
+
129
+ if (keeps_albedo) {
130
+ albedo += w * mesh_surface_albedo_at(cache.albedo_blocks, block, texel);
131
+ }
132
+
133
+ if (keeps_metal_rough) {
134
+ metal_rough += w * mesh_surface_metal_rough_at(cache.metal_rough_blocks, block, texel);
135
+ }
136
+
137
+ if (keeps_emissive) {
138
+ emissive += w * mesh_surface_emissive_at(cache.emissive_blocks, block, texel);
139
+ }
140
+
141
+ weight += w;
142
+ }
143
+ }
144
+
145
+ out.found = weight > 0.0;
146
+
147
+ if (out.found) {
148
+ out.albedo = select(albedo_uncompress(cache.albedo), albedo / weight, keeps_albedo);
149
+ out.metal_rough = select(metal_rough_uncompress(cache.metal_rough), metal_rough / weight, keeps_metal_rough);
150
+ out.emissive = select(rgbe9995_decode(cache.emissive), emissive / weight, keeps_emissive);
151
+ }
152
+
153
+ return out;
154
+ }
155
+ `, [
156
+ MESH_SURFACE_STRUCT.declaration_chunk,
157
+ chunk_mesh_sdf,
158
+ chunk_mesh_sdf_normal,
159
+ chunk_tile_atlas_slot_origin,
160
+ chunk_surface_material_corners,
161
+ chunk_mesh_surface_block_index,
162
+ chunk_mesh_surface_block,
163
+ chunk_albedo_uncompress,
164
+ chunk_metal_rough_uncompress,
165
+ chunk_rgbe9995_decode,
166
+ ]);
167
+
168
+ chunk_mesh_surface_sample.requireResource(MESH_SDF_INDIRECTION_RESOURCE);
169
+ chunk_mesh_surface_sample.requireResource(MESH_SDF_ATLAS_RESOURCE);
@@ -0,0 +1,19 @@
1
+ /**
2
+ * The direction ray `ray` of a texel's {@link MESH_SURFACE_TEXEL_RAYS} leaves in, into the surface whose
3
+ * field normal is `n`:
4
+ *
5
+ * ```wgsl
6
+ * fn mesh_surface_texel_ray(seed: vec3<u32>, ray: u32, n: vec3<f32>) -> vec3<f32>
7
+ * ```
8
+ *
9
+ * A Fibonacci set over the hemisphere facing the surface: ray i in the i-th of
10
+ * {@link MESH_SURFACE_TEXEL_RAYS} bands of equal solid angle, counted from -n out to the horizon. The
11
+ * texel's `seed` turns the whole set about n by one random angle and shifts every ray through its band
12
+ * by one random fraction, so that no two texels take the same directions, neither in azimuth nor in
13
+ * elevation. Initializes the random stream at `seed` and takes its first two draws.
14
+ *
15
+ * @type {CodeChunk}
16
+ */
17
+ export const chunk_mesh_surface_texel_ray: CodeChunk;
18
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
19
+ //# sourceMappingURL=chunk_mesh_surface_texel_ray.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_mesh_surface_texel_ray.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;GAeG;AACH,2CAFU,SAAS,CA0BZ;0BA3CmB,uCAAuC"}
@@ -0,0 +1,49 @@
1
+ import { chunk_build_orthonormal_matrix_n } from "../../../shader/chunk/geometry/normal/chunk_build_orthonormal_matrix_n.js";
2
+ import { chunk_sphere_fibonacci_point } from "../../../shader/chunk/geometry/sphere/chunk_sphere_fibonacci_point.js";
3
+ import { PI_DECLARATION } from "../../../shader/chunk/math/PI_DECLARATION.js";
4
+ import { chunk_random } from "../../../shader/chunk/random/chunk_random.js";
5
+ import { chunk_random_initialize } from "../../../shader/chunk/random/chunk_random_initialize.js";
6
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
7
+ import { MESH_SURFACE_TEXEL_RAYS } from "./MESH_SURFACE_BAKE.js";
8
+
9
+ /**
10
+ * The direction ray `ray` of a texel's {@link MESH_SURFACE_TEXEL_RAYS} leaves in, into the surface whose
11
+ * field normal is `n`:
12
+ *
13
+ * ```wgsl
14
+ * fn mesh_surface_texel_ray(seed: vec3<u32>, ray: u32, n: vec3<f32>) -> vec3<f32>
15
+ * ```
16
+ *
17
+ * A Fibonacci set over the hemisphere facing the surface: ray i in the i-th of
18
+ * {@link MESH_SURFACE_TEXEL_RAYS} bands of equal solid angle, counted from -n out to the horizon. The
19
+ * texel's `seed` turns the whole set about n by one random angle and shifts every ray through its band
20
+ * by one random fraction, so that no two texels take the same directions, neither in azimuth nor in
21
+ * elevation. Initializes the random stream at `seed` and takes its first two draws.
22
+ *
23
+ * @type {CodeChunk}
24
+ */
25
+ export const chunk_mesh_surface_texel_ray = CodeChunk.from(
26
+ //language=WGSL
27
+ `
28
+ fn mesh_surface_texel_ray(seed: vec3<u32>, ray: u32, n: vec3<f32>) -> vec3<f32> {
29
+ random_initialize(seed, vec3<u32>(0u));
30
+
31
+ let turn = 2.0 * PI * random();
32
+ // the point of a 2N-point Fibonacci sphere is the middle of its band, which spans its index ± 0.5
33
+ let shift = random() - 0.5;
34
+ let point = sphere_fibonacci_point(f32(ray) + shift, ${2 * MESH_SURFACE_TEXEL_RAYS}.0);
35
+ let turned = vec3<f32>(
36
+ cos(turn) * point.x - sin(turn) * point.y,
37
+ sin(turn) * point.x + cos(turn) * point.y,
38
+ point.z,
39
+ );
40
+
41
+ return normalize(build_orthonormal_matrix_n(-n) * turned);
42
+ }
43
+ `, [
44
+ PI_DECLARATION,
45
+ chunk_random,
46
+ chunk_random_initialize,
47
+ chunk_sphere_fibonacci_point,
48
+ chunk_build_orthonormal_matrix_n,
49
+ ]);
@@ -0,0 +1,19 @@
1
+ /**
2
+ * A surface material texel fitted from weighted surface samples (`SURFACE_MATERIAL.js`):
3
+ *
4
+ * ```wgsl
5
+ * fn surface_material_fit_add(fit: ptr<function, SurfaceMaterialFit>, weight: f32, albedo: vec3<f32>, metal_rough: vec2<f32>, emissive: vec3<f32>)
6
+ * fn surface_material_fit_solve(fit: SurfaceMaterialFit) -> SurfaceMaterialFitted
7
+ * ```
8
+ *
9
+ * A sample is a point of the surface under the texel's tent and the material there. Every property is
10
+ * fitted as a constant, the least-squares one: the samples' weighted mean. The sums add in any order,
11
+ * so a fit can be split and joined.
12
+ *
13
+ * `covered` is false for a fit of no weight: no surface was sampled under the tent.
14
+ *
15
+ * @type {CodeChunk}
16
+ */
17
+ export const chunk_surface_material_fit: CodeChunk;
18
+ import { CodeChunk } from "../../../shader/compiler/CodeChunk.js";
19
+ //# sourceMappingURL=chunk_surface_material_fit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk_surface_material_fit.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AACH,yCAFU,SAAS,CAkDhB;0BAlEuB,uCAAuC"}