@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.
- package/CHANGELOG.md +111 -0
- package/package.json +1 -1
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/playground/probe_clipmap/README.md +3 -4
- package/src/shade/playground/probe_clipmap/index.html +5 -13
- package/src/shade/playground/probe_clipmap/main.d.ts.map +1 -1
- package/src/shade/playground/probe_clipmap/main.js +0 -5
- package/src/shade/playground/probe_clipmap_box/README.md +1 -1
- package/src/shade/playground/probe_clipmap_box/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +50 -11
- package/src/shade/renderer/fluid/GPUFluidCascade.d.ts +3 -3
- package/src/shade/renderer/fluid/GPUFluidCascadeStack.d.ts +1 -1
- package/src/shade/renderer/fluid/forcing/GPUFluidForcing.d.ts +6 -6
- package/src/shade/renderer/fluid/pressure/GPUFluidPressureSolve.d.ts +1 -1
- package/src/shade/renderer/fluid/query/GPUFluidQueries.d.ts +1 -1
- package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts +10 -0
- package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.d.ts.map +1 -0
- package/src/shade/renderer/geometry/meshlet/meshlet_batch_colored.js +54 -0
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +85 -36
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +813 -412
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts +7 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/MESH_SDF.js +8 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts +14 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_BRICK_KEY.js +35 -0
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/MESH_SDF_STRUCT.js +0 -4
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts +55 -10
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/MESH_SDF_BAKE.js +86 -16
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_bake.js +28 -2
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts +54 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/chunk_mesh_sdf_contents.js +146 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_classify.js +2 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts +18 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_content_rehash.js +66 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_count.js +66 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts +5 -3
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_evaluate.js +15 -14
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts +2 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_free.js +12 -3
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts +21 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_key.js +84 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts +53 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_resolve.js +343 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts +3 -3
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_store.js +9 -5
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts +2 -2
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_take.js +3 -2
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts +69 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bake/shader_mesh_sdf_upload.js +294 -0
- package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts +16 -0
- package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/MODEL_CACHE_BUNDLE.js +36 -0
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts +126 -0
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/ModelCacheBundle.js +148 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts +10 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_read.js +140 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts +8 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/bundle/model_cache_bundle_write.js +76 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts +9 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf.js +23 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts +13 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/chunk_mesh_sdf_brick_key.js +23 -0
- package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts +262 -0
- package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/GPUMeshSurfaceCaches.js +1819 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts +118 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BAKE.js +204 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts +66 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_BLOCK.js +103 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_RESOURCES.js +23 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/MESH_SURFACE_STRUCT.js +70 -0
- package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts +13 -0
- package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/SURFACE_MATERIAL.js +35 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts +32 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_block.js +111 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts +17 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_listed.js +49 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts +13 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_run_find.js +35 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts +24 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_sample.js +169 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_mesh_surface_texel_ray.js +49 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts +19 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_fit.js +67 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts +78 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_read.js +320 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts +15 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/chunk_surface_material_store.js +48 -0
- package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts +51 -0
- package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/mesh_surface_channels.js +109 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts +11 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_command.js +51 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts +26 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_encode.js +453 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts +12 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_list.js +99 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts +22 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_survey.js +140 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts +32 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.d.ts.map +1 -0
- package/src/shade/renderer/geometry/sdf/surface/shader_mesh_surface_trace.js +261 -0
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.d.ts +2 -2
- package/src/shade/renderer/geometry/virtual/runtime/VirtualGeometry.js +2 -2
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.d.ts +6 -6
- package/src/shade/renderer/geometry/virtual/sdf/VGeoSDFProxies.js +7 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts +15 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/GPUProbeClipmapGI.js +82 -17
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts +26 -19
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSceneHolds.js +226 -148
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts +25 -52
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/ProbeClipmapSettings.js +29 -69
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts +19 -16
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/BRICK_CLIPMAP.js +24 -21
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts +46 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js +49 -36
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts +3 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap.js +7 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts +8 -22
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/chunk_brick_clipmap_trace.js +15 -51
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts +1 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/MESH_BRICK.js +6 -13
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/chunk_mesh_brick_walk.js +0 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_batch.js +9 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts +4 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/mesh/shader_mesh_brick_resolve.js +15 -39
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_clear.js +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts +1 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_store.js +2 -6
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/brick/shader_brick_clipmap_take.js +5 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.d.ts +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/ProbeClipmapDebugView.js +16 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts +45 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_brick_material.js +208 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts +24 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_indirect.js +40 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts +34 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_surfaces.d.ts.map +1 -0
- 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
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts +61 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/GPUBrickMaterial.js +193 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts +67 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material.js +142 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts +32 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_cell.js +70 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts +30 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/chunk_brick_material_store.js +71 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts +26 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/material/shader_brick_material_gather.js +176 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts +18 -9
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js +63 -44
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts +21 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP.js +24 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts +10 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/PROBE_CLIPMAP_INDIRECT_LOBE.js +11 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts +11 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/ProbeClipmapIndirectLobe.js +15 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts +44 -7
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap.js +88 -11
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts +43 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_material.js +138 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts +21 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_indirect_lobe.js +49 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts +2 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_pick.js +10 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts +22 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.d.ts.map +1 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_select.js +50 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts +4 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_want.js +8 -8
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.d.ts +3 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_bounce.js +5 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts +2 -0
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js +5 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.d.ts +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_light.js +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts +7 -4
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_shade.js +30 -26
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts +6 -5
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_trace.js +22 -16
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +6 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.d.ts +2 -2
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want_hits.js +6 -6
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts +14 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_generate_next_linear_congruential_index.js +22 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts +37 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_atomic.js +122 -0
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.js +1 -11
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts +8 -0
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js +6 -4
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.d.ts.map +1 -1
- package/src/shade/renderer/material/resident/GPUResidentMaterialContext.js +2 -18
- package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts +17 -0
- package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.d.ts.map +1 -0
- package/src/shade/renderer/material/resident/NEUTRAL_SURFACE.js +16 -0
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.d.ts +1 -1
- package/src/shade/renderer/path_tracer/shader/INDIRECT_TEXTURE_FILTER.js +1 -1
- package/src/shade/renderer/path_tracer/shader/IndirectTextureFilter.js +1 -1
- package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts +20 -0
- package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.d.ts.map +1 -0
- package/src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.js +65 -0
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +1 -1
- package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/material/albedo_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/albedo_compress.js +26 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_compress.js +22 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts +15 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.js +23 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts +16 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.js +25 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_metal_rough_uncompress.js +36 -0
- package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts +11 -0
- package/src/shade/renderer/shader/chunk/material/metal_rough_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/metal_rough_compress.js +38 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot.js +35 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts +28 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_compress.js +79 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts +25 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_fit.js +89 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts +31 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/spherical_harmonics/pivot/chunk_sh2_color_pivot_uncompress.js +66 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_add.js +2 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/subgroup/chunk_subgroup_atomic_load.js +34 -0
- package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts +18 -0
- package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_frustum_unit_box_coverage_multisample.js +31 -23
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +5 -6
- package/src/shade/renderer/water/query/GPUWaterQueries.d.ts +1 -1
- package/src/shade/renderer/wind/GPUSceneWind.d.ts +1 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts +0 -213
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/GPUMeshCardSets.js +0 -1468
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts +0 -82
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARDS.js +0 -127
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts +0 -24
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_RESOURCES.js +0 -29
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts +0 -12
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MESH_CARD_SET_STRUCT.js +0 -31
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts +0 -11
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/MeshCardCaptureMode.js +0 -21
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts +0 -29
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_card_surface.js +0 -179
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts +0 -17
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/chunk_mesh_cards.js +0 -107
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts +0 -65
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/mesh_cards_raster_pass_descriptor.js +0 -376
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts +0 -40
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_capture.js +0 -301
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts +0 -19
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_compact.js +0 -61
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts +0 -18
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_histogram.js +0 -102
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts +0 -15
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_log.js +0 -65
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts +0 -22
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_merge.js +0 -136
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts +0 -20
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_pages.js +0 -104
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts +0 -20
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_args.js +0 -80
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts +0 -18
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_raster_scatter.js +0 -113
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts +0 -30
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.d.ts.map +0 -1
- package/src/shade/renderer/geometry/sdf/cards/shader_mesh_cards_split.js +0 -146
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts +0 -34
- package/src/shade/renderer/global_illumination/probe_clipmap/debug/graph_probe_clipmap_debug_mesh_cards.d.ts.map +0 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts +0 -31
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/chunk_probe_clipmap_hit_surface.d.ts.map +0 -1
- 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"}
|