@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,122 @@
|
|
|
1
|
+
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
2
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
3
|
+
import { chunk_generate_next_linear_congruential_index } from "./chunk_generate_next_linear_congruential_index.js";
|
|
4
|
+
import { HASH_TABLE_MISS, HASH_TABLE_PROBE_LIMIT } from "./cpu_build_hash_table.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The encoded key of a record removed from a table the device keeps ({@link chunk_hash_table_atomic}):
|
|
8
|
+
* a probe passes over it as over another key's record, and an insert may take its place. No key
|
|
9
|
+
* encodes to it, keys staying below `0xFFFFFFFE`.
|
|
10
|
+
* @type {number}
|
|
11
|
+
*/
|
|
12
|
+
export const HASH_TABLE_REMOVED = 0xFFFFFFFF;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The table `cpu_build_hash_table` lays out (`[element_count, table_size]`, then `table_size` records
|
|
16
|
+
* of `(key + 1, value)`, an empty record 0) kept on the device: inserted into and removed from by
|
|
17
|
+
* atomics, on `hash_table_get`'s probe sequence and limit. A key may hold several records, which find
|
|
18
|
+
* visits in turn; the caller tells them apart by what their values name. `element_count` counts the
|
|
19
|
+
* records held.
|
|
20
|
+
*
|
|
21
|
+
* ```wgsl
|
|
22
|
+
* fn hash_table_atomic_start(table, offset: u32, key: u32) -> vec2<u32> // a cursor at the key's first record
|
|
23
|
+
* fn hash_table_atomic_find(table, offset: u32, key: u32, cursor: ptr<function, vec2<u32>>) -> u32 // the key's next record, or HASH_TABLE_MISS
|
|
24
|
+
* fn hash_table_atomic_value(table, record: u32) -> u32
|
|
25
|
+
* fn hash_table_atomic_insert(table, offset: u32, key: u32, value: u32) -> bool // false: no record free within the probe limit
|
|
26
|
+
* fn hash_table_atomic_remove(table, offset: u32, record: u32)
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* `table` is a `ptr<storage, array<atomic<u32>>, read_write>`, and a record is named by the word it
|
|
30
|
+
* starts at. Insert claims the first empty or removed record of the key's sequence by
|
|
31
|
+
* compare-exchange on its key and stores the value after it, so a find racing that insert in one
|
|
32
|
+
* dispatch may read the value before it lands: a caller whose inserts share a dispatch with its finds
|
|
33
|
+
* checks what a value names before trusting it. Inserts and removes of different records may share a
|
|
34
|
+
* dispatch. A find ends at the sequence's first empty record or at the probe limit.
|
|
35
|
+
*
|
|
36
|
+
* A table holds at least `HASH_TABLE_PROBE_LIMIT` records, a power of two, so that the probes of a
|
|
37
|
+
* key's sequence meet no record twice.
|
|
38
|
+
*
|
|
39
|
+
* @type {CodeChunk}
|
|
40
|
+
*/
|
|
41
|
+
export const chunk_hash_table_atomic = CodeChunk.from(
|
|
42
|
+
//language=WGSL
|
|
43
|
+
`
|
|
44
|
+
const HASH_TABLE_MISS = ${HASH_TABLE_MISS}u;
|
|
45
|
+
const HASH_TABLE_REMOVED = ${HASH_TABLE_REMOVED}u;
|
|
46
|
+
const HASH_TABLE_PROBE_LIMIT = ${HASH_TABLE_PROBE_LIMIT}u;
|
|
47
|
+
|
|
48
|
+
fn hash_table_atomic_start(table: ptr<storage, array<atomic<u32>>, read_write>, offset: u32, key: u32) -> vec2<u32> {
|
|
49
|
+
let mask = atomicLoad(&(*table)[offset + 1u]) - 1u;
|
|
50
|
+
|
|
51
|
+
// the record index, then the probes taken
|
|
52
|
+
return vec2<u32>(hash_lowbias32(key) & mask, 0u);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
fn hash_table_atomic_find(table: ptr<storage, array<atomic<u32>>, read_write>, offset: u32, key: u32, cursor: ptr<function, vec2<u32>>) -> u32 {
|
|
56
|
+
let mask = atomicLoad(&(*table)[offset + 1u]) - 1u;
|
|
57
|
+
let encoded = key + 1u;
|
|
58
|
+
|
|
59
|
+
while ((*cursor).y < HASH_TABLE_PROBE_LIMIT) {
|
|
60
|
+
let record = offset + 2u + 2u * (*cursor).x;
|
|
61
|
+
let stored = atomicLoad(&(*table)[record]);
|
|
62
|
+
|
|
63
|
+
*cursor = vec2<u32>(generate_next_linear_congruential_index((*cursor).x, mask), (*cursor).y + 1u);
|
|
64
|
+
|
|
65
|
+
if (stored == 0u) {
|
|
66
|
+
// the key's sequence ends at its first empty record
|
|
67
|
+
(*cursor).y = HASH_TABLE_PROBE_LIMIT;
|
|
68
|
+
|
|
69
|
+
return HASH_TABLE_MISS;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if (stored == encoded) {
|
|
73
|
+
return record;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return HASH_TABLE_MISS;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
fn hash_table_atomic_value(table: ptr<storage, array<atomic<u32>>, read_write>, record: u32) -> u32 {
|
|
81
|
+
return atomicLoad(&(*table)[record + 1u]);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
fn hash_table_atomic_insert(table: ptr<storage, array<atomic<u32>>, read_write>, offset: u32, key: u32, value: u32) -> bool {
|
|
85
|
+
let mask = atomicLoad(&(*table)[offset + 1u]) - 1u;
|
|
86
|
+
|
|
87
|
+
var index = hash_lowbias32(key) & mask;
|
|
88
|
+
|
|
89
|
+
for (var probe = 0u; probe < HASH_TABLE_PROBE_LIMIT; probe++) {
|
|
90
|
+
let record = offset + 2u + 2u * index;
|
|
91
|
+
let stored = atomicLoad(&(*table)[record]);
|
|
92
|
+
|
|
93
|
+
if (stored == 0u || stored == HASH_TABLE_REMOVED) {
|
|
94
|
+
let claim = atomicCompareExchangeWeak(&(*table)[record], stored, key + 1u);
|
|
95
|
+
|
|
96
|
+
if (claim.exchanged) {
|
|
97
|
+
atomicStore(&(*table)[record + 1u], value);
|
|
98
|
+
atomicAdd(&(*table)[offset], 1u);
|
|
99
|
+
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
if (claim.old_value == stored) {
|
|
104
|
+
// a weak exchange may fail on a record that still holds what it read: the same record again
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
index = generate_next_linear_congruential_index(index, mask);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
fn hash_table_atomic_remove(table: ptr<storage, array<atomic<u32>>, read_write>, offset: u32, record: u32) {
|
|
116
|
+
atomicStore(&(*table)[record], HASH_TABLE_REMOVED);
|
|
117
|
+
atomicSub(&(*table)[offset], 1u);
|
|
118
|
+
}
|
|
119
|
+
`, [
|
|
120
|
+
chunk_generate_next_linear_congruential_index,
|
|
121
|
+
chunk_hash_lowbias32,
|
|
122
|
+
]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_hash_table_get.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_hash_table_get.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/hash_table/chunk_hash_table_get.js"],"names":[],"mappings":"AAIA;;;GAGG;AACH,mCAFU,SAAS,CAkDlB;0BAvDyB,oCAAoC"}
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import { chunk_hash_lowbias32 } from "../../shader/chunk/random/chunk_hash_lowbias32.js";
|
|
2
2
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
3
|
-
|
|
4
|
-
const chunk_generate_next_linear_congruential_index = CodeChunk.from(
|
|
5
|
-
//language=WGSL
|
|
6
|
-
`
|
|
7
|
-
fn generate_next_linear_congruential_index(index:u32, mask: u32) -> u32{
|
|
8
|
-
let index5 = index * 5;
|
|
9
|
-
|
|
10
|
-
return (index5 + 1) & mask;
|
|
11
|
-
}
|
|
12
|
-
`
|
|
13
|
-
)
|
|
3
|
+
import { chunk_generate_next_linear_congruential_index } from "./chunk_generate_next_linear_congruential_index.js";
|
|
14
4
|
|
|
15
5
|
/**
|
|
16
6
|
* @see cpu_build_hash_table
|
|
@@ -40,6 +40,14 @@ export function cpu_hash_table_word_count(input_size: number): number;
|
|
|
40
40
|
* @see cpu_build_hash_table to build at a given size
|
|
41
41
|
*/
|
|
42
42
|
export function cpu_hash_table_create(table: Uint32Array, inputs: number[], input_size: number): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Maximum number of slots visited per operation.
|
|
45
|
+
* Must match the WGSL twins ({@link chunk_hash_table_get}, `chunk_hash_table_atomic`): a lookup probes
|
|
46
|
+
* at most this many slots, so an insert that cannot place a record within the limit must report it —
|
|
47
|
+
* otherwise it would create an entry that lookups can never reach.
|
|
48
|
+
* @type {number}
|
|
49
|
+
*/
|
|
50
|
+
export const HASH_TABLE_PROBE_LIMIT: number;
|
|
43
51
|
/**
|
|
44
52
|
* Sentinel returned on lookup miss.
|
|
45
53
|
* Must match the WGSL twin ({@link chunk_hash_table_get}).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cpu_build_hash_table.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cpu_build_hash_table.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/gpu_primitive/hash_table/cpu_build_hash_table.js"],"names":[],"mappings":"AAsEA;;;;;;GAMG;AACH,0CALW,WAAW,UACX,MAAM,OACN,MAAM,GACJ,MAAM,CAsClB;AAED;;;;;;;;;GASG;AACH,6CARW,WAAW,iBACX,MAAM,cACN,MAAM,UACN,MAAM,EAAE,cACR,MAAM,GACJ,OAAO,CA2BnB;AAWD;;;;;GAKG;AACH,sDAHW,MAAM,GACJ,MAAM,CAIlB;AAED;;;;;;;;;;;;;;GAcG;AACH,6CARW,WAAW,UACX,MAAM,EAAE,cACR,MAAM,GACJ,OAAO,CAkBnB;AA9LD;;;;;;GAMG;AACH,qCAFU,MAAM,CAEyB;AAIzC;;;;GAIG;AACH,8BAFU,MAAM,CAE0B"}
|
|
@@ -8,12 +8,14 @@ import { isPowerOfTwo } from "../../../../core/math/isPowerOfTwo.js";
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Maximum number of slots visited per operation.
|
|
11
|
-
* Must match the WGSL
|
|
12
|
-
* so an insert that cannot place a record within the limit must report it —
|
|
13
|
-
* create an entry that lookups can never reach.
|
|
11
|
+
* Must match the WGSL twins ({@link chunk_hash_table_get}, `chunk_hash_table_atomic`): a lookup probes
|
|
12
|
+
* at most this many slots, so an insert that cannot place a record within the limit must report it —
|
|
13
|
+
* otherwise it would create an entry that lookups can never reach.
|
|
14
14
|
* @type {number}
|
|
15
15
|
*/
|
|
16
|
-
const
|
|
16
|
+
export const HASH_TABLE_PROBE_LIMIT = 32;
|
|
17
|
+
|
|
18
|
+
const PROBE_LIMIT = HASH_TABLE_PROBE_LIMIT;
|
|
17
19
|
|
|
18
20
|
/**
|
|
19
21
|
* Sentinel returned on lookup miss.
|
|
@@ -13,7 +13,7 @@ export class TinyGltf {
|
|
|
13
13
|
* @readonly
|
|
14
14
|
* @type {TextureFormat}
|
|
15
15
|
*/
|
|
16
|
-
static readonly "__#
|
|
16
|
+
static readonly "__#308@#UNCOMPRESSED_TARGET": TextureFormat;
|
|
17
17
|
/**
|
|
18
18
|
* @param {AssetManager} assetManager
|
|
19
19
|
* @param {AssetRequestScope} [scope]
|
|
@@ -45,7 +45,7 @@ export class GPUResidentMaterialContext {
|
|
|
45
45
|
* the same contract {@link GPUMaterialManager} restages by. A hit used to be final, so a factor
|
|
46
46
|
* set after the first pack never reached the row. Every caller re-obtains what it needs before
|
|
47
47
|
* {@link update} or {@link commit}: the scene's drawn list, the manager's materials whenever its
|
|
48
|
-
* version moves, or what a
|
|
48
|
+
* version moves, or what a surface bake traces, so the check rides on walks that already happen.
|
|
49
49
|
*
|
|
50
50
|
* @param {ShadeMaterial} material
|
|
51
51
|
* @returns {MaterialInfo}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUResidentMaterialContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/GPUResidentMaterialContext.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUResidentMaterialContext.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/GPUResidentMaterialContext.js"],"names":[],"mappings":"AAgHA;IAqKI;;;;OAIG;IACH,yCAFW,eAAe,EAkDzB;IA9LD;;;OAGG;IACH,6BAEC;IAQD;;;OAGG;IACH,kCAEC;IAQD;;;OAGG;IACH,yCAEC;IAED;;;OAGG;IACH,kCAIC;IAmED;;;;;OAKG;IACH,0BAEC;IAOD;;;;;;OAMG;IACH,8BAEC;IAsJD;;;;;;;;;OASG;IACH,0BAHW,aAAa,GACX,YAAY,CAmBxB;IAgBD;;;;OAIG;IACH,wBAHW,YAAY,GACV,WAAW,CAIvB;IAGD,uBA0DC;IAuFD,wBA8EC;IAED;;;;OAIG;IACH,sCAFW,eAAe,QAUzB;IAoCD;;;;OAIG;IACH,eAGC;IAED;;;OAGG;IACH,eAGC;IAGD,gBAIC;;CACJ;8BA7uBY,OAAO,0BAA0B,EAAE,eAAe;8BAClD,OAAO,gCAAgC,EAAE,eAAe;2BACxD,OAAO,+BAA+B,EAAE,YAAY;4BACpD,OAAO,qBAAqB,EAAE,aAAa;oCAC3C,OAAO,6BAA6B,EAAE,qBAAqB;kCAC3D,OAAO,qCAAqC,EAAE,mBAAmB;kCAnB5C,oCAAoC;AAatE;;;;;;;GAOG;AAEH;IACI,WAAM;IAEN;;;OAGG;IACH,SAFU,MAAM,CAEJ;IAEZ;;OAEG;IACH,QAFU,qBAAqB,CAExB;IAEP;;OAEG;IACH,gBAFU,WAAW,CAEP;IAEd;;OAEG;IACH,aAFU,WAAW,CAEV;IAEX;;;;OAIG;IACH,gBAFU,WAAW,GAAC,IAAI,CAEZ;IACd;;OAEG;IACH,kBAFU,WAAW,CAEL;IAEhB;;;OAGG;IACH,aAFU,MAAM,CAEe;CAClC;AAqBD;IACI,WAAO;IAEP;;OAEG;IACH,QAFU,YAAY,CAEf;CACV"}
|
|
@@ -17,6 +17,7 @@ import { sampler_descriptor_pack } from "../../texture/format/sampler_descriptor
|
|
|
17
17
|
import { WHITE_PIXEL_TEXTURE } from "../../texture/util/WHITE_PIXEL_TEXTURE.js";
|
|
18
18
|
import { INDIRECT_MATERIAL_ARRAY_TYPE } from "./INDIRECT_MATERIAL_ARRAY_TYPE.js";
|
|
19
19
|
import { INDIRECT_MATERIAL_STRUCT } from "./INDIRECT_MATERIAL_STRUCT.js";
|
|
20
|
+
import { NEUTRAL_SURFACE } from "./NEUTRAL_SURFACE.js";
|
|
20
21
|
import {
|
|
21
22
|
RESIDENT_MATERIAL_TEXTURE_LAYER_SIZE,
|
|
22
23
|
RESIDENT_MATERIAL_TEXTURE_LEVEL_COUNT,
|
|
@@ -109,23 +110,6 @@ class TextureInfo {
|
|
|
109
110
|
*/
|
|
110
111
|
const MEDIA_TABLE_RECORDS_OFFSET = MEDIA_TABLE_STRUCT.fields.find(f => f.name === 'records').offset;
|
|
111
112
|
|
|
112
|
-
/**
|
|
113
|
-
* What a material that is not standard contributes to the ray passes: white, opaque, fully rough,
|
|
114
|
-
* not metallic, not transmissive, not emissive — through the default textures its missing slots
|
|
115
|
-
* already resolve to. Without it the fields the row is written from are absent and skipped into a
|
|
116
|
-
* zeroed buffer, and an opacity of 0 is a surface the rays pass through: a terrain would stop
|
|
117
|
-
* casting ray-traced shadows, and a bake would see it black. The same values a flat standard
|
|
118
|
-
* material gives, which is what the terrain drew with before it had a template of its own.
|
|
119
|
-
*/
|
|
120
|
-
const NEUTRAL_SURFACE = Object.freeze({
|
|
121
|
-
diffuse_color: Object.freeze([1, 1, 1, 1]),
|
|
122
|
-
roughness_factor: 1,
|
|
123
|
-
metallic_factor: 0,
|
|
124
|
-
transmission_factor: 0,
|
|
125
|
-
ior_factor: 1.5,
|
|
126
|
-
emissive_factor: Object.freeze([0, 0, 0]),
|
|
127
|
-
});
|
|
128
|
-
|
|
129
113
|
export class GPUResidentMaterialContext {
|
|
130
114
|
|
|
131
115
|
/**
|
|
@@ -444,7 +428,7 @@ export class GPUResidentMaterialContext {
|
|
|
444
428
|
* the same contract {@link GPUMaterialManager} restages by. A hit used to be final, so a factor
|
|
445
429
|
* set after the first pack never reached the row. Every caller re-obtains what it needs before
|
|
446
430
|
* {@link update} or {@link commit}: the scene's drawn list, the manager's materials whenever its
|
|
447
|
-
* version moves, or what a
|
|
431
|
+
* version moves, or what a surface bake traces, so the check rides on walks that already happen.
|
|
448
432
|
*
|
|
449
433
|
* @param {ShadeMaterial} material
|
|
450
434
|
* @returns {MaterialInfo}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a material that is not standard contributes to the ray passes: white, opaque, fully rough,
|
|
3
|
+
* not metallic, not transmissive, not emissive — through the default textures its missing slots
|
|
4
|
+
* already resolve to. Without it the fields the row is written from are absent and skipped into a
|
|
5
|
+
* zeroed buffer, and an opacity of 0 is a surface the rays pass through: a terrain would stop
|
|
6
|
+
* casting ray-traced shadows, and a bake would see it black. The same values a flat standard
|
|
7
|
+
* material gives, which is what the terrain drew with before it had a template of its own.
|
|
8
|
+
*/
|
|
9
|
+
export const NEUTRAL_SURFACE: Readonly<{
|
|
10
|
+
diffuse_color: readonly number[];
|
|
11
|
+
roughness_factor: 1;
|
|
12
|
+
metallic_factor: 0;
|
|
13
|
+
transmission_factor: 0;
|
|
14
|
+
ior_factor: 1.5;
|
|
15
|
+
emissive_factor: readonly number[];
|
|
16
|
+
}>;
|
|
17
|
+
//# sourceMappingURL=NEUTRAL_SURFACE.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NEUTRAL_SURFACE.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/material/resident/NEUTRAL_SURFACE.js"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH;;;;;;;GAOG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a material that is not standard contributes to the ray passes: white, opaque, fully rough,
|
|
3
|
+
* not metallic, not transmissive, not emissive — through the default textures its missing slots
|
|
4
|
+
* already resolve to. Without it the fields the row is written from are absent and skipped into a
|
|
5
|
+
* zeroed buffer, and an opacity of 0 is a surface the rays pass through: a terrain would stop
|
|
6
|
+
* casting ray-traced shadows, and a bake would see it black. The same values a flat standard
|
|
7
|
+
* material gives, which is what the terrain drew with before it had a template of its own.
|
|
8
|
+
*/
|
|
9
|
+
export const NEUTRAL_SURFACE = Object.freeze({
|
|
10
|
+
diffuse_color: Object.freeze([1, 1, 1, 1]),
|
|
11
|
+
roughness_factor: 1,
|
|
12
|
+
metallic_factor: 0,
|
|
13
|
+
transmission_factor: 0,
|
|
14
|
+
ior_factor: 1.5,
|
|
15
|
+
emissive_factor: Object.freeze([0, 0, 0]),
|
|
16
|
+
});
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* or the other by the pipeline they are linked into.
|
|
5
5
|
*
|
|
6
6
|
* Whether the pass averages its reads is the pass's, so it is fixed per shader: `Stochastic`, the
|
|
7
|
-
* default, for every pass that never sets it; `Exact` for the
|
|
7
|
+
* default, for every pass that never sets it; `Exact` for the surface caches' bake, which stores each read.
|
|
8
8
|
*
|
|
9
9
|
* @type {ShaderSwitch}
|
|
10
10
|
*/
|
|
@@ -7,7 +7,7 @@ import { IndirectTextureFilter } from "./IndirectTextureFilter.js";
|
|
|
7
7
|
* or the other by the pipeline they are linked into.
|
|
8
8
|
*
|
|
9
9
|
* Whether the pass averages its reads is the pass's, so it is fixed per shader: `Stochastic`, the
|
|
10
|
-
* default, for every pass that never sets it; `Exact` for the
|
|
10
|
+
* default, for every pass that never sets it; `Exact` for the surface caches' bake, which stores each read.
|
|
11
11
|
*
|
|
12
12
|
* @type {ShaderSwitch}
|
|
13
13
|
*/
|
|
@@ -10,6 +10,6 @@ export const IndirectTextureFilter = {
|
|
|
10
10
|
* gives on average, for a pass that averages many reads into each result — the path tracer.
|
|
11
11
|
*/
|
|
12
12
|
Stochastic: 0,
|
|
13
|
-
/** The filter itself, every tap weighed: for a pass that keeps each read as it is — the
|
|
13
|
+
/** The filter itself, every tap weighed: for a pass that keeps each read as it is — the surface caches' bake. */
|
|
14
14
|
Exact: 1,
|
|
15
15
|
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The resident material texture level a beam reads a triangle's material at: its footprint on the
|
|
3
|
+
* triangle, in texels of a slot's level 0, as `sample_material_data` and `sample_material_alpha` take
|
|
4
|
+
* their `texture_level`:
|
|
5
|
+
*
|
|
6
|
+
* ```wgsl
|
|
7
|
+
* fn beam_texture_level(triangle: TriangleVertices, along: vec3<f32>, step_u: vec3<f32>, step_v: vec3<f32>) -> f32
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* The beam runs along `along` and spans `step_u` and `step_v` across, all in the triangle's space;
|
|
11
|
+
* `along` need not be unit length. Each step is carried along the beam onto the triangle's plane and
|
|
12
|
+
* through the triangle's uv per position. For a step s, direction d and normal n that is
|
|
13
|
+
* s − d (n·s)/(n·d) on the plane, taken here times n·d, so a triangle turning edge-on, whose footprint
|
|
14
|
+
* grows without bound, reaches the last level with nothing divided by 0, as a raster's would.
|
|
15
|
+
*
|
|
16
|
+
* @type {CodeChunk}
|
|
17
|
+
*/
|
|
18
|
+
export const chunk_beam_texture_level: CodeChunk;
|
|
19
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
20
|
+
//# sourceMappingURL=chunk_beam_texture_level.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_beam_texture_level.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/renderer/path_tracer/shader/chunk_beam_texture_level.js"],"names":[],"mappings":"AAOA;;;;;;;;;;;;;;;;GAgBG;AACH,uCAFU,SAAS,CA0CZ;0BA3DmB,oCAAoC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RESIDENT_MATERIAL_TEXTURE_LEVEL_COUNT,
|
|
3
|
+
RESIDENT_MATERIAL_TEXTURE_RESOLUTION
|
|
4
|
+
} from "../../material/resident/RESIDENT_MATERIAL_TEXTURE_LAYOUT.js";
|
|
5
|
+
import { TRIANGLE_VERTICES_STRUCT } from "../../shader/chunk/geometry/triangle/TRIANGLE_VERTICES_STRUCT.js";
|
|
6
|
+
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The resident material texture level a beam reads a triangle's material at: its footprint on the
|
|
10
|
+
* triangle, in texels of a slot's level 0, as `sample_material_data` and `sample_material_alpha` take
|
|
11
|
+
* their `texture_level`:
|
|
12
|
+
*
|
|
13
|
+
* ```wgsl
|
|
14
|
+
* fn beam_texture_level(triangle: TriangleVertices, along: vec3<f32>, step_u: vec3<f32>, step_v: vec3<f32>) -> f32
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* The beam runs along `along` and spans `step_u` and `step_v` across, all in the triangle's space;
|
|
18
|
+
* `along` need not be unit length. Each step is carried along the beam onto the triangle's plane and
|
|
19
|
+
* through the triangle's uv per position. For a step s, direction d and normal n that is
|
|
20
|
+
* s − d (n·s)/(n·d) on the plane, taken here times n·d, so a triangle turning edge-on, whose footprint
|
|
21
|
+
* grows without bound, reaches the last level with nothing divided by 0, as a raster's would.
|
|
22
|
+
*
|
|
23
|
+
* @type {CodeChunk}
|
|
24
|
+
*/
|
|
25
|
+
export const chunk_beam_texture_level = CodeChunk.from(
|
|
26
|
+
//language=WGSL
|
|
27
|
+
`
|
|
28
|
+
fn beam_texture_level(
|
|
29
|
+
triangle: ${TRIANGLE_VERTICES_STRUCT.wgsl_ref},
|
|
30
|
+
along: vec3<f32>,
|
|
31
|
+
step_u: vec3<f32>,
|
|
32
|
+
step_v: vec3<f32>,
|
|
33
|
+
) -> f32 {
|
|
34
|
+
let edge_1 = triangle.b.position - triangle.a.position;
|
|
35
|
+
let edge_2 = triangle.c.position - triangle.a.position;
|
|
36
|
+
let normal = cross(edge_1, edge_2);
|
|
37
|
+
|
|
38
|
+
// an offset in the plane is a·edge_1 + b·edge_2, a and b its dots with these
|
|
39
|
+
let dual_1 = cross(edge_2, normal) / dot(normal, normal);
|
|
40
|
+
let dual_2 = cross(normal, edge_1) / dot(normal, normal);
|
|
41
|
+
|
|
42
|
+
let uv_1 = triangle.b.uv - triangle.a.uv;
|
|
43
|
+
let uv_2 = triangle.c.uv - triangle.a.uv;
|
|
44
|
+
|
|
45
|
+
let facing = dot(normal, along);
|
|
46
|
+
|
|
47
|
+
let on_plane_u = facing * step_u - along * dot(normal, step_u);
|
|
48
|
+
let on_plane_v = facing * step_v - along * dot(normal, step_v);
|
|
49
|
+
|
|
50
|
+
let uv_step_u = dot(on_plane_u, dual_1) * uv_1 + dot(on_plane_u, dual_2) * uv_2;
|
|
51
|
+
let uv_step_v = dot(on_plane_v, dual_1) * uv_1 + dot(on_plane_v, dual_2) * uv_2;
|
|
52
|
+
|
|
53
|
+
let span = ${RESIDENT_MATERIAL_TEXTURE_RESOLUTION}.0 * max(length(uv_step_u), length(uv_step_v));
|
|
54
|
+
let reach = abs(facing);
|
|
55
|
+
|
|
56
|
+
// a footprint of a slot or more, edge-on included, is the last level
|
|
57
|
+
return select(
|
|
58
|
+
${RESIDENT_MATERIAL_TEXTURE_LEVEL_COUNT - 1}.0,
|
|
59
|
+
log2(max(span, reach) / reach),
|
|
60
|
+
span < ${RESIDENT_MATERIAL_TEXTURE_RESOLUTION}.0 * reach
|
|
61
|
+
);
|
|
62
|
+
}
|
|
63
|
+
`, [
|
|
64
|
+
TRIANGLE_VERTICES_STRUCT.declaration_chunk,
|
|
65
|
+
]);
|
|
@@ -51,7 +51,7 @@ export class NSS {
|
|
|
51
51
|
* @returns {number}
|
|
52
52
|
*/
|
|
53
53
|
static recommended_jitter_sequence_size(upscale_ratio: number): number;
|
|
54
|
-
static "__#
|
|
54
|
+
static "__#216@#preprocess_tensor_descriptor"(render_w: any, render_h: any): TextureResourceDescriptor;
|
|
55
55
|
/**
|
|
56
56
|
* @param {GraphicsContext} graphics
|
|
57
57
|
*/
|
|
@@ -105,7 +105,7 @@ export class GPUSceneContext {
|
|
|
105
105
|
* (REVIEW_LEDGER U1): `register` a container with {@link virtual_geometry_residency}, and every
|
|
106
106
|
* page after the root arrives because a cut asked for it. The renderer opens and closes each
|
|
107
107
|
* frame and schedules each reading, and {@link destroy} releases all of it; a host touches none
|
|
108
|
-
* of it. With them, the source of its geometries' caches and
|
|
108
|
+
* of it. With them, the source of its geometries' caches and surface caches ({@link VGeoSDFProxies}): a virtual
|
|
109
109
|
* geometry whose cache is asked for stands in through its proxy.
|
|
110
110
|
*
|
|
111
111
|
* @param {Object} [options] passed to {@link GPUVirtualGeometryPool} and
|
|
@@ -400,7 +400,7 @@ export class GPUSceneContext {
|
|
|
400
400
|
* (REVIEW_LEDGER U1): `register` a container with {@link virtual_geometry_residency}, and every
|
|
401
401
|
* page after the root arrives because a cut asked for it. The renderer opens and closes each
|
|
402
402
|
* frame and schedules each reading, and {@link destroy} releases all of it; a host touches none
|
|
403
|
-
* of it. With them, the source of its geometries' caches and
|
|
403
|
+
* of it. With them, the source of its geometries' caches and surface caches ({@link VGeoSDFProxies}): a virtual
|
|
404
404
|
* geometry whose cache is asked for stands in through its proxy.
|
|
405
405
|
*
|
|
406
406
|
* @param {Object} [options] passed to {@link GPUVirtualGeometryPool} and
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The code `albedo_compress` (`chunk_albedo_compress.js`) gives an albedo, on the host: each channel
|
|
3
|
+
* clamped to [0, 1], its square root rounded to f32 and then to unorm8, as `pack4x8unorm` rounds, the
|
|
4
|
+
* top byte 255.
|
|
5
|
+
*
|
|
6
|
+
* @param {number} r linear
|
|
7
|
+
* @param {number} g linear
|
|
8
|
+
* @param {number} b linear
|
|
9
|
+
* @returns {number} u32
|
|
10
|
+
*/
|
|
11
|
+
export function albedo_compress(r: number, g: number, b: number): number;
|
|
12
|
+
//# sourceMappingURL=albedo_compress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"albedo_compress.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/albedo_compress.js"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,mCALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,MAAM,CAIlB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { clamp01 } from "../../../../../core/math/clamp01.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The code `albedo_compress` (`chunk_albedo_compress.js`) gives an albedo, on the host: each channel
|
|
5
|
+
* clamped to [0, 1], its square root rounded to f32 and then to unorm8, as `pack4x8unorm` rounds, the
|
|
6
|
+
* top byte 255.
|
|
7
|
+
*
|
|
8
|
+
* @param {number} r linear
|
|
9
|
+
* @param {number} g linear
|
|
10
|
+
* @param {number} b linear
|
|
11
|
+
* @returns {number} u32
|
|
12
|
+
*/
|
|
13
|
+
export function albedo_compress(r, g, b) {
|
|
14
|
+
return (unorm8_root(r) | (unorm8_root(g) << 8) | (unorm8_root(b) << 16) | (255 << 24)) >>> 0;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @param {number} v
|
|
19
|
+
* @returns {number}
|
|
20
|
+
*/
|
|
21
|
+
function unorm8_root(v) {
|
|
22
|
+
const root = Math.fround(Math.sqrt(Math.fround(clamp01(Math.fround(v)))));
|
|
23
|
+
|
|
24
|
+
// ⌊0.5 + 255·e⌋ of the f32 e, which a double holds exactly
|
|
25
|
+
return Math.floor(0.5 + 255 * root);
|
|
26
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A diffuse albedo, RGB on [0, 1], in a 32-bit code, as `albedo_uncompress` reads it:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* fn albedo_compress(albedo: vec3<f32>) -> u32
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* Each channel is clamped to [0, 1] and stored as its square root, unorm8, which puts more codes in the
|
|
9
|
+
* dark. The top byte is 255, so a code is never 0, black
|
|
10
|
+
* included: a reader may take 0 for no albedo at all.
|
|
11
|
+
*
|
|
12
|
+
* @type {CodeChunk}
|
|
13
|
+
*/
|
|
14
|
+
export const chunk_albedo_compress: CodeChunk;
|
|
15
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
16
|
+
//# sourceMappingURL=chunk_albedo_compress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_albedo_compress.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_albedo_compress.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,oCAFU,SAAS,CAQhB;0BArBuB,6BAA6B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A diffuse albedo, RGB on [0, 1], in a 32-bit code, as `albedo_uncompress` reads it:
|
|
5
|
+
*
|
|
6
|
+
* ```wgsl
|
|
7
|
+
* fn albedo_compress(albedo: vec3<f32>) -> u32
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* Each channel is clamped to [0, 1] and stored as its square root, unorm8, which puts more codes in the
|
|
11
|
+
* dark. The top byte is 255, so a code is never 0, black
|
|
12
|
+
* included: a reader may take 0 for no albedo at all.
|
|
13
|
+
*
|
|
14
|
+
* @type {CodeChunk}
|
|
15
|
+
*/
|
|
16
|
+
export const chunk_albedo_compress = CodeChunk.from(
|
|
17
|
+
//language=WGSL
|
|
18
|
+
`
|
|
19
|
+
fn albedo_compress(albedo: vec3<f32>) -> u32 {
|
|
20
|
+
return pack4x8unorm(vec4<f32>(sqrt(saturate(albedo)), 1.0));
|
|
21
|
+
}
|
|
22
|
+
`);
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A diffuse albedo from the code `albedo_compress` wrote:
|
|
3
|
+
*
|
|
4
|
+
* ```wgsl
|
|
5
|
+
* fn albedo_uncompress(code: u32) -> vec3<f32> // RGB on [0, 1]
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* The code's low three bytes are the square roots of R, G and B, unorm8; its top byte is 255 for every
|
|
9
|
+
* albedo.
|
|
10
|
+
*
|
|
11
|
+
* @type {CodeChunk}
|
|
12
|
+
*/
|
|
13
|
+
export const chunk_albedo_uncompress: CodeChunk;
|
|
14
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
15
|
+
//# sourceMappingURL=chunk_albedo_uncompress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_albedo_uncompress.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_albedo_uncompress.js"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,sCAFU,SAAS,CAUhB;0BAtBuB,6BAA6B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A diffuse albedo from the code `albedo_compress` wrote:
|
|
5
|
+
*
|
|
6
|
+
* ```wgsl
|
|
7
|
+
* fn albedo_uncompress(code: u32) -> vec3<f32> // RGB on [0, 1]
|
|
8
|
+
* ```
|
|
9
|
+
*
|
|
10
|
+
* The code's low three bytes are the square roots of R, G and B, unorm8; its top byte is 255 for every
|
|
11
|
+
* albedo.
|
|
12
|
+
*
|
|
13
|
+
* @type {CodeChunk}
|
|
14
|
+
*/
|
|
15
|
+
export const chunk_albedo_uncompress = CodeChunk.from(
|
|
16
|
+
//language=WGSL
|
|
17
|
+
`
|
|
18
|
+
fn albedo_uncompress(code: u32) -> vec3<f32> {
|
|
19
|
+
let root = unpack4x8unorm(code).rgb;
|
|
20
|
+
|
|
21
|
+
return root * root;
|
|
22
|
+
}
|
|
23
|
+
`);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Metalness and roughness, each on [0, 1], in a code of `METAL_ROUGH_CODE_BITS` bits, as
|
|
3
|
+
* `metal_rough_uncompress` reads it:
|
|
4
|
+
*
|
|
5
|
+
* ```wgsl
|
|
6
|
+
* fn metal_rough_compress(metal_rough: vec2<f32>) -> u32 // (metalness, roughness)
|
|
7
|
+
* ```
|
|
8
|
+
*
|
|
9
|
+
* Each is clamped to [0, 1] and rounded to the nearest of 2^{@link METAL_ROUGH_CHANNEL_BITS} even
|
|
10
|
+
* steps, metalness in the low bits.
|
|
11
|
+
*
|
|
12
|
+
* @type {CodeChunk}
|
|
13
|
+
*/
|
|
14
|
+
export const chunk_metal_rough_compress: CodeChunk;
|
|
15
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
16
|
+
//# sourceMappingURL=chunk_metal_rough_compress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_metal_rough_compress.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/shader/chunk/material/chunk_metal_rough_compress.js"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,yCAFU,SAAS,CAUhB;0BAxBuB,6BAA6B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CodeChunk } from "../../compiler/CodeChunk.js";
|
|
2
|
+
import { METAL_ROUGH_CHANNEL_BITS } from "./chunk_metal_rough_uncompress.js";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Metalness and roughness, each on [0, 1], in a code of `METAL_ROUGH_CODE_BITS` bits, as
|
|
6
|
+
* `metal_rough_uncompress` reads it:
|
|
7
|
+
*
|
|
8
|
+
* ```wgsl
|
|
9
|
+
* fn metal_rough_compress(metal_rough: vec2<f32>) -> u32 // (metalness, roughness)
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* Each is clamped to [0, 1] and rounded to the nearest of 2^{@link METAL_ROUGH_CHANNEL_BITS} even
|
|
13
|
+
* steps, metalness in the low bits.
|
|
14
|
+
*
|
|
15
|
+
* @type {CodeChunk}
|
|
16
|
+
*/
|
|
17
|
+
export const chunk_metal_rough_compress = CodeChunk.from(
|
|
18
|
+
//language=WGSL
|
|
19
|
+
`
|
|
20
|
+
fn metal_rough_compress(metal_rough: vec2<f32>) -> u32 {
|
|
21
|
+
let q = vec2<u32>(round(saturate(metal_rough) * ${2 ** METAL_ROUGH_CHANNEL_BITS - 1}.0));
|
|
22
|
+
|
|
23
|
+
return q.x | (q.y << ${METAL_ROUGH_CHANNEL_BITS}u);
|
|
24
|
+
}
|
|
25
|
+
`);
|