@woosh/meep-engine 3.61.3 → 3.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/engine/graphics3/PickingSystem.d.ts.map +1 -1
- package/src/engine/graphics3/PickingSystem.js +415 -413
- package/src/engine/graphics3/decal/GPUDecalRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +2 -1
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +26 -16
- package/src/engine/graphics3/decal/shader_decal_tile_copy.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_tile_copy.js +6 -11
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +6 -2
- package/src/engine/graphics3/highlight/shader_highlight_outline.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/shader_highlight_outline.js +167 -150
- package/src/engine/graphics3/shader_picking_gather.d.ts.map +1 -1
- package/src/engine/graphics3/shader_picking_gather.js +133 -120
- package/src/shade/device/mock/SoftwareGPUTexture.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUTexture.js +11 -0
- package/src/shade/device/pipeline/rp_validate_and_rewrite_for_color_attachments.js +1 -1
- package/src/shade/playground/contact_shadows/ContactShadowLab.js +6 -6
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -1
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +6 -4
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -1
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +6 -4
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -1
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +6 -4
- package/src/shade/playground/ssr_reprojection/SpatialFilterProbe.js +1 -1
- package/src/shade/playground/ssr_variance/capture.js +1 -1
- package/src/shade/renderer/Renderer.d.ts +2 -2
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +40 -53
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +3 -1
- package/src/shade/renderer/deferred/chunk_ss_trace_contact_shadow_soft.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_ss_trace_contact_shadow_soft.js +5 -4
- package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_deferred_main.js +6 -4
- package/src/shade/renderer/extension/GBufferTextures.d.ts +5 -1
- package/src/shade/renderer/extension/GBufferTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/GBufferTextures.js +5 -1
- package/src/shade/renderer/extension/ViewTextures.d.ts +11 -7
- package/src/shade/renderer/extension/ViewTextures.d.ts.map +1 -1
- package/src/shade/renderer/extension/ViewTextures.js +17 -13
- package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.d.ts +2 -0
- package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.d.ts.map +1 -1
- package/src/shade/renderer/gbuffer/G_BUFFER_ALBEDO_FORMAT.js +2 -0
- package/src/shade/renderer/gbuffer/G_BUFFER_COLOR_TARGETS.d.ts.map +1 -1
- package/src/shade/renderer/gbuffer/G_BUFFER_COLOR_TARGETS.js +8 -5
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts +7 -5
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +29 -16
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts +9 -3
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js +40 -32
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.d.ts.map +1 -1
- package/src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js +14 -15
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js +7 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_diffuse.js +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js +5 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js +1 -3
- package/src/shade/renderer/global_illumination/ibl/shader_diffuse_IBL.js +1 -1
- package/src/shade/renderer/global_illumination/ibl/shader_specular_IBL.js +2 -2
- package/src/shade/renderer/global_illumination/lpv/shader_diffuse_LPV.js +1 -1
- 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 +14 -1
- 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 +10 -1
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js +2 -2
- 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 -3
- package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js +1 -1
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js +5 -3
- package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_colored_hash.js +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_sharc_debug_radiance.js +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +22 -9
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +159 -65
- package/src/shade/renderer/material/MATERIAL_MASK.d.ts +19 -0
- package/src/shade/renderer/material/MATERIAL_MASK.d.ts.map +1 -0
- package/src/shade/renderer/material/MATERIAL_MASK.js +19 -0
- package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.d.ts +8 -8
- package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/GPUMaterialComputeDispatch.js +11 -92
- package/src/shade/renderer/material/dispatch/chunk_material_quad_keys.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/chunk_material_quad_keys.js +10 -2
- package/src/shade/renderer/material/dispatch/gbuffer_compute.js +2 -2
- package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.d.ts +7 -7
- package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/graph_material_dispatch_compute.js +20 -16
- package/src/shade/renderer/material/dispatch/shader_material_pixel_count.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/shader_material_pixel_count.js +3 -1
- package/src/shade/renderer/material/dispatch/shader_material_pixel_scatter.d.ts.map +1 -1
- package/src/shade/renderer/material/dispatch/shader_material_pixel_scatter.js +3 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/fragment_gbuffer.js +26 -25
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts +10 -8
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.d.ts.map +1 -1
- package/src/shade/renderer/material/standard/material_gbuffer_vertex.js +16 -13
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.d.ts +1 -1
- package/src/shade/renderer/material/template/ShadeMaterialTemplate.js +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts +5 -2
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +7 -4
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts +3 -3
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/debug/graph_pass_debug_reprojection.js +12 -10
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +2 -2
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/shader_temporal_reprojection_luma.js +6 -4
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +9 -7
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +11 -8
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts +3 -3
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/ao_reproject_shader.js +17 -12
- package/src/shade/renderer/postprocess/gtao/chunk_integrate_lighting_sample.js +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +4 -4
- package/src/shade/renderer/postprocess/gtao/shader_gtao_spatial_denoise.js +2 -2
- package/src/shade/renderer/postprocess/ssr/chunk_ssr_spatial_variance.js +41 -41
- package/src/shade/renderer/postprocess/ssr/prefilter/chunk_load_neighbourhood_sample.js +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -3
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/chunk_ssr_add_hit_irradiance.js +5 -2
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader.js +4 -4
- package/src/shade/renderer/postprocess/ssr/ssr_combine_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_combine_shader.js +4 -2
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts +2 -1
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_graph_prefilter_color.js +10 -2
- package/src/shade/renderer/postprocess/ssr/ssr_reproject_shader.js +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -4
- package/src/shade/renderer/postprocess/taa/shader_reprojection_map.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_reprojection_map.js +6 -4
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +6 -8
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.js +29 -33
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +1 -0
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +6 -3
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.js +8 -3
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/GPUCollectionLimits.js +3 -0
- package/src/shade/renderer/rasterize/expand/RasterizationCollectionType.d.ts +1 -0
- package/src/shade/renderer/rasterize/expand/RasterizationCollectionType.js +5 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +8 -3
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +54 -5
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +1 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.js +2 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts +7 -2
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/graph_rasterize_meshes_alpha_tested.js +73 -9
- package/src/shade/renderer/rasterize/native/viz/shader_vertex.js +4 -4
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_alpha_tested_pass_descriptor.js +23 -40
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/viz/viz_rasterization_opaque_pass_descriptor.js +55 -76
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +4 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.js +6 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +4 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.js +6 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +5 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +43 -2
- package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.d.ts +39 -0
- package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/visibility/VISIBILITY_BUFFER.js +45 -0
- package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.d.ts +26 -0
- package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/visibility/chunk_visibility_decode.js +48 -0
- package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.d.ts +40 -0
- package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.d.ts.map +1 -0
- package/src/shade/renderer/rasterize/visibility/shader_visible_meshlets_append.js +172 -0
- package/src/shade/renderer/restir/di/chunk_restir_reconstruct_surface.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/chunk_restir_reconstruct_surface.js +6 -4
- package/src/shade/renderer/restir/di/chunk_restir_spatial_reuse.js +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +2 -2
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.d.ts +9 -0
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_sRGBTransferEOTF.js +18 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_determinant.js +26 -0
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts +60 -18
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat3/chunk_mat3_singular_values.js +163 -45
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/mat4/chunk_mat4_linear_determinant.js +19 -18
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.d.ts +13 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js +22 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.d.ts +8 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js +10 -8
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.d.ts +22 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_face_normal.js +32 -0
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.d.ts +11 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/geometry/normal/chunk_encode_g_buffer_normal.js +14 -6
- package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.d.ts +14 -0
- package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_decode_g_buffer_albedo.js +24 -0
- package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_encode_g_buffer_albedo.js +27 -0
- package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.d.ts +7 -1
- package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/SCREEN_SPACE_RESOURCES.js +8 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_ffx_sssr_load_world_space_normal.js +1 -1
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_newton_ray.js +10 -10
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +8 -0
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +9 -0
- package/src/shade/renderer/shader/util/shader_decode_octahedral_normal.js +1 -1
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +3 -3
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -1
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +3 -3
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -1
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +6 -4
- package/src/shade/renderer/shadow/ray/RTXShadows.d.ts +6 -4
- package/src/shade/renderer/shadow/ray/RTXShadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/RTXShadows.js +16 -5
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_ray_shadow_code.js +7 -7
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +2 -2
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts +4 -2
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +79 -74
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/gen/shader_generate_rays.js +7 -7
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_soft_shadows.js +7 -3
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts +7 -5
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/graph_draw_sdf_shadows.js +29 -16
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts +5 -5
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +8 -8
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/build_shader_vt_feedback.js +13 -14
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +2 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +6 -4
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +11 -9
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +13 -11
- package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.d.ts +0 -7
- package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.d.ts.map +0 -1
- package/src/shade/renderer/gbuffer/G_BUFFER_MIP_LEVELS.js +0 -6
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts +0 -3
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +0 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +0 -104
|
@@ -11,6 +11,7 @@ import { chunk_project_position_from_depth } from "../../../shader/chunk/camera/
|
|
|
11
11
|
import { chunk_mat4_extract_position } from "../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
12
12
|
import { chunk_decode_g_buffer_normal } from "../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
13
13
|
import { chunk_compute_indirect_specular } from "../../../shader/chunk/material/chunk_compute_indirect_specular.js";
|
|
14
|
+
import { chunk_decode_g_buffer_albedo } from "../../../shader/chunk/material/chunk_decode_g_buffer_albedo.js";
|
|
14
15
|
import { chunk_decode_g_buffer_metalness } from "../../../shader/chunk/material/chunk_decode_g_buffer_metalness.js";
|
|
15
16
|
import { chunk_decode_g_buffer_roughness } from "../../../shader/chunk/material/chunk_decode_g_buffer_roughness.js";
|
|
16
17
|
import { chunk_metalness_to_specular_color } from "../../../shader/chunk/material/chunk_metalness_to_specular_color.js";
|
|
@@ -61,7 +62,7 @@ fn main(
|
|
|
61
62
|
let texel_pbr = textureLoad(tGBufferPBR, i_coord, 0);
|
|
62
63
|
let albedo_ao = textureLoad(tGBufferAlbedo, i_coord, 0);
|
|
63
64
|
|
|
64
|
-
let albedo = albedo_ao.rgb;
|
|
65
|
+
let albedo = decode_g_buffer_albedo(albedo_ao.rgb);
|
|
65
66
|
let occlusion = albedo_ao.a;
|
|
66
67
|
|
|
67
68
|
let f_metalness = decode_g_buffer_metalness(texel_pbr);
|
|
@@ -75,8 +76,8 @@ fn main(
|
|
|
75
76
|
let view_direction = normalize(mat4_extract_position(camera.transform) - position);
|
|
76
77
|
|
|
77
78
|
// the surface's own normal picks, as want chose by it; the bent normal resolves the diffuse, as IBL's does
|
|
78
|
-
let normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).
|
|
79
|
-
let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, i_coord, 0).
|
|
79
|
+
let normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
|
|
80
|
+
let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, i_coord, 0).x);
|
|
80
81
|
|
|
81
82
|
// one pick for both lobes
|
|
82
83
|
let noise = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index));
|
|
@@ -120,6 +121,7 @@ fn main(
|
|
|
120
121
|
chunk_project_position_from_depth,
|
|
121
122
|
chunk_mat4_extract_position,
|
|
122
123
|
chunk_decode_g_buffer_normal,
|
|
124
|
+
chunk_decode_g_buffer_albedo,
|
|
123
125
|
chunk_decode_g_buffer_metalness,
|
|
124
126
|
chunk_decode_g_buffer_roughness,
|
|
125
127
|
chunk_metalness_to_specular_color,
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_want.js
CHANGED
|
@@ -83,7 +83,7 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
|
|
|
83
83
|
|
|
84
84
|
let uv = (vec2<f32>(pixel) + 0.5) / vec2<f32>(size);
|
|
85
85
|
let position = project_position_from_depth(uv, depth, camera.view_projection_matrix_inverse);
|
|
86
|
-
let normal = decode_g_buffer_normal(textureLoad(gBufferNormals, pixel, 0).
|
|
86
|
+
let normal = decode_g_buffer_normal(textureLoad(gBufferNormals, pixel, 0).x);
|
|
87
87
|
let view_direction = normalize(mat4_extract_position(camera.transform) - position);
|
|
88
88
|
let bias_direction = mix(normal, view_direction, ${PROBE_RECEIVER_BIAS_VIEW});
|
|
89
89
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_resolve_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_resolve_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/global_illumination/shader_resolve_indirect_lighting.js"],"names":[],"mappings":"AAoHA,2DAyBE;4BA/H0B,0BAA0B"}
|
|
@@ -7,6 +7,7 @@ import { chunk_project_position_from_depth } from "../shader/chunk/camera/chunk_
|
|
|
7
7
|
import { chunk_mat4_extract_position } from "../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
8
8
|
import { chunk_decode_g_buffer_normal } from "../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
9
9
|
import { chunk_compute_indirect_specular } from "../shader/chunk/material/chunk_compute_indirect_specular.js";
|
|
10
|
+
import { chunk_decode_g_buffer_albedo } from "../shader/chunk/material/chunk_decode_g_buffer_albedo.js";
|
|
10
11
|
import { chunk_decode_g_buffer_metalness } from "../shader/chunk/material/chunk_decode_g_buffer_metalness.js";
|
|
11
12
|
import { chunk_decode_g_buffer_roughness } from "../shader/chunk/material/chunk_decode_g_buffer_roughness.js";
|
|
12
13
|
import { chunk_metalness_to_specular_color } from "../shader/chunk/material/chunk_metalness_to_specular_color.js";
|
|
@@ -47,7 +48,7 @@ fn main(
|
|
|
47
48
|
|
|
48
49
|
let albedo_ao_sample = textureLoad( tGBufferAlbedo, coord_i, 0 );
|
|
49
50
|
|
|
50
|
-
let albedo = albedo_ao_sample.rgb;
|
|
51
|
+
let albedo = decode_g_buffer_albedo(albedo_ao_sample.rgb);
|
|
51
52
|
let occlusion = albedo_ao_sample.a;
|
|
52
53
|
|
|
53
54
|
let f_metalness = decode_g_buffer_metalness(texel_pbr);
|
|
@@ -68,8 +69,8 @@ fn main(
|
|
|
68
69
|
|
|
69
70
|
let view_direction = normalize(view_position - position_ws);
|
|
70
71
|
|
|
71
|
-
let shading_normal = decode_g_buffer_normal(textureLoad(tGBufferNormals, coord_i, 0).
|
|
72
|
-
let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, coord_i, 0).
|
|
72
|
+
let shading_normal = decode_g_buffer_normal(textureLoad(tGBufferNormals, coord_i, 0).x);
|
|
73
|
+
let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, coord_i, 0).x);
|
|
73
74
|
|
|
74
75
|
// tIndirectDiffuse contract: AO already baked in by the source pass.
|
|
75
76
|
// Do not multiply the diffuse term by occlusion again here.
|
|
@@ -104,6 +105,7 @@ fn main(
|
|
|
104
105
|
chunk_decode_g_buffer_normal,
|
|
105
106
|
chunk_mat4_extract_position,
|
|
106
107
|
chunk_project_position_from_depth,
|
|
108
|
+
chunk_decode_g_buffer_albedo,
|
|
107
109
|
chunk_decode_g_buffer_metalness,
|
|
108
110
|
chunk_decode_g_buffer_roughness,
|
|
109
111
|
chunk_metalness_to_specular_color,
|
|
@@ -41,7 +41,7 @@ fn main(
|
|
|
41
41
|
|
|
42
42
|
let g_buffer_sample_normal = textureLoad(gBufferNormal, i_coord, 0);
|
|
43
43
|
|
|
44
|
-
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.
|
|
44
|
+
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
|
|
45
45
|
|
|
46
46
|
if(texel_depth == ${DEPTH_BACKGROUND_VALUE}){
|
|
47
47
|
// outside of the scene, sample sky
|
package/src/shade/renderer/global_illumination/sharc/shader/debug/shader_sharc_debug_radiance.js
CHANGED
|
@@ -57,7 +57,7 @@ fn main(
|
|
|
57
57
|
|
|
58
58
|
let g_buffer_sample_normal = textureLoad(gBufferNormals, i_coord, 0);
|
|
59
59
|
|
|
60
|
-
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.
|
|
60
|
+
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
let entryIndex = hash_map_find_entry(
|
|
@@ -84,7 +84,7 @@ fn main(@builtin(global_invocation_id) global_id : vec3<u32>){
|
|
|
84
84
|
|
|
85
85
|
let g_buffer_sample_normal = textureLoad(gBufferNormals, i_coord, 0);
|
|
86
86
|
|
|
87
|
-
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.
|
|
87
|
+
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
|
|
88
88
|
|
|
89
89
|
let view_position = mat4_extract_position(camera.transform);
|
|
90
90
|
let view_direction = normalize(view_position - position_ws);
|
|
@@ -36,18 +36,19 @@ export class GPUMaterialManager {
|
|
|
36
36
|
* @param {Object} options
|
|
37
37
|
* @param {FrameGraph} options.graph
|
|
38
38
|
* @param {GPUViewContext} options.view
|
|
39
|
-
* @param {number} options.
|
|
40
|
-
* @param {number} options.
|
|
41
|
-
* @param {number} options.
|
|
42
|
-
* resolution. The caller owns it so that it outlives the frame: reprojection reads last
|
|
39
|
+
* @param {number} options.texture_visibility the visibility buffer
|
|
40
|
+
* @param {number} options.visible_meshlets the frame's visible-meshlet table, which resolves it
|
|
41
|
+
* @param {number} options.texture_pbr the PBR target to write, `G_BUFFER_COLOR_TARGETS[0].format` at
|
|
42
|
+
* the view's resolution. The caller owns it so that it outlives the frame: reprojection reads last
|
|
43
|
+
* frame's face normal from it.
|
|
43
44
|
* @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}} updated g-buffer
|
|
44
45
|
*/
|
|
45
|
-
graph_viz_render({ graph, view,
|
|
46
|
+
graph_viz_render({ graph, view, texture_visibility, visible_meshlets, texture_pbr, }: {
|
|
46
47
|
graph: FrameGraph;
|
|
47
48
|
view: GPUViewContext;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
texture_visibility: number;
|
|
50
|
+
visible_meshlets: number;
|
|
51
|
+
texture_pbr: number;
|
|
51
52
|
}): {
|
|
52
53
|
g_pbr: number;
|
|
53
54
|
g_normal: number;
|
|
@@ -121,12 +122,24 @@ export class GPUMaterialManager {
|
|
|
121
122
|
/**
|
|
122
123
|
* The contexts the G-buffer pass draws for a scene's drawn materials: every one that is not
|
|
123
124
|
* transparent and has a context, grouped by template, in the order {@link graph_viz_render} draws
|
|
124
|
-
* them.
|
|
125
|
+
* them. A material's index here is its place in the pass. The array is replaced, never
|
|
126
|
+
* rewritten, when the list changes — {@link gbuffer_contexts_version} says when — so one held
|
|
127
|
+
* across a change still names the places it was read with.
|
|
125
128
|
*
|
|
126
129
|
* @param {ShadeMaterial[]} drawn a scene's {@link GPUSceneContext#drawn_materials}
|
|
127
130
|
* @returns {GPUMaterialContext[]}
|
|
128
131
|
*/
|
|
129
132
|
gbuffer_contexts(drawn: ShadeMaterial[]): GPUMaterialContext[];
|
|
133
|
+
/**
|
|
134
|
+
* Each of {@link gbuffer_contexts} at its place there, keyed by material id: a
|
|
135
|
+
* {@link cpu_hash_table_create} table, for a shader that starts from the material id of a mesh
|
|
136
|
+
* (read with `hash_table_get`, a miss for a material the pass does not draw). Replaced along with
|
|
137
|
+
* the list, so it always matches the array {@link gbuffer_contexts} returns at the same version.
|
|
138
|
+
*
|
|
139
|
+
* @param {ShadeMaterial[]} drawn a scene's {@link GPUSceneContext#drawn_materials}
|
|
140
|
+
* @returns {Uint32Array}
|
|
141
|
+
*/
|
|
142
|
+
gbuffer_slot_table(drawn: ShadeMaterial[]): Uint32Array;
|
|
130
143
|
/**
|
|
131
144
|
* Moves whenever {@link gbuffer_contexts} may answer differently for the same drawn set.
|
|
132
145
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUMaterialManager.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/material/GPUMaterialManager.js"],"names":[],"mappings":"AAiUA;IA4FI;;;;;;;;OAQG;IACH,yCANW,cAAc,oBACd,qBAAqB,YACrB,gBAAgB,qBAChB,qBAAqB,aACrB,iBAAiB,EAiD3B;IAlJD;;;;;OAKG;IACH,wBAAkC;IAOlC;;;OAGG;IACH,UAFU,IAAI,aAAa,EAAE,kBAAkB,CAAC,CAE3B;IAyBrB;;;OAGG;IACH,yCAEC;IAID;;;OAGG;IACH,sBAEC;IA+LD;;;;;;;;;;;OAWG;IACH;QAT+B,KAAK,EAAzB,UAAU;QACc,IAAI,EAA5B,cAAc;QACE,kBAAkB,EAAlC,MAAM;QACU,gBAAgB,EAAhC,MAAM;QACU,WAAW,EAA3B,MAAM;QAGJ;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAC,CA0OnF;IAED;;;;OAIG;IACH,iBAHW,aAAa,GACX,kBAAkB,CAqB9B;IAED;;;;;;;;;;;;OAYG;IACH,kBAHW,aAAa,GACX,OAAO,CAyBnB;IAED;;;;OAIG;IACH,gBAaC;IAED;;;;;;;OAOG;IACH,0BAFW,eAAe,QAazB;IAED;;;;;;;;;;;OAWG;IACH,kBAHW,qBAAqB,GACnB,QAAQ,IAAI,CAAC,CAMzB;IAsBD;;;;;;OAMG;IACH,0BAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;OAMG;IACH,wBAHW,aAAa,EAAE,GACb,aAAa,EAAE,CAI3B;IAED;;;;;;;;;OASG;IACH,wBAHW,aAAa,EAAE,GACb,kBAAkB,EAAE,CAIhC;IAED;;;;;;;;OAQG;IACH,0BAHW,aAAa,EAAE,GACb,WAAW,CAMvB;IAED;;;;OAIG;IACH,uCAEC;IAED;;;;OAIG;IACH,oCAEC;IAyED;;;OAGG;IACH,YAFW,sBAAsB,QAmChC;;CAEJ;8BApkCY,OAAO,0CAA0C,EAAE,eAAe;6BAClE,OAAO,2BAA2B,EAAE,cAAc;yBAIlD,OAAO,2DAA2D,EAAE,UAAU;qCAC9E,OAAO,wCAAwC,EAAE,sBAAsB;oCACvE,OAAO,gDAAgD,EAAE,qBAAqB;+BAC9E,OAAO,gCAAgC,EAAE,gBAAgB;gCACzD,OAAO,yBAAyB,EAAE,iBAAiB;6BACnD,OAAO,8BAA8B,EAAE,cAAc;oCACrD,OAAO,6CAA6C,EAAE,qBAAqB;4BAC3E,OAAO,oBAAoB,EAAE,aAAa;oCAC1C,OAAO,qCAAqC,EAAE,qBAAqB;mCAvBzE,yBAAyB;mCA1BG,8CAA8C;oCA8BxB,mCAAmC"}
|
|
@@ -11,11 +11,16 @@ import { BufferResourceDescriptor } from "../../device/graph/BufferResourceDescr
|
|
|
11
11
|
import { TextureResourceDescriptor } from "../../device/graph/TextureResourceDescriptor.js";
|
|
12
12
|
import { BindGroupDescriptor } from "../binding/BindGroupDescriptor.js";
|
|
13
13
|
import { GPUSingleTypeTable } from "../buffer/table/single/GPUSingleTypeTable.js";
|
|
14
|
-
import { DEFAULT_DEPTH_TEXTURE_VIEW } from "../depth/DEFAULT_DEPTH_TEXTURE_VIEW.js";
|
|
15
14
|
import { G_BUFFER_ALBEDO_FORMAT } from "../gbuffer/G_BUFFER_ALBEDO_FORMAT.js";
|
|
15
|
+
import { G_BUFFER_COLOR_TARGETS } from "../gbuffer/G_BUFFER_COLOR_TARGETS.js";
|
|
16
|
+
import { chunk_hash_table_get } from "../gpu_primitive/hash_table/chunk_hash_table_get.js";
|
|
16
17
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
cpu_hash_table_create,
|
|
19
|
+
cpu_hash_table_word_count
|
|
20
|
+
} from "../gpu_primitive/hash_table/cpu_build_hash_table.js";
|
|
21
|
+
import { graph_import_raw_buffer } from "../shader/graph/graph_import_raw_buffer.js";
|
|
22
|
+
import { MESHLET_COLLECTION_STRUCT } from "../rasterize/MESHLET_COLLECTION_STRUCT.js";
|
|
23
|
+
import { chunk_visibility_decode } from "../rasterize/visibility/chunk_visibility_decode.js";
|
|
19
24
|
import { chunk_scene_database_access } from "../scene/chunk_scene_database_access.js";
|
|
20
25
|
import {
|
|
21
26
|
chunk_subgroup_bitset_or,
|
|
@@ -32,6 +37,7 @@ import {
|
|
|
32
37
|
MATERIAL_BIND_GROUP_SCENE_DATA,
|
|
33
38
|
MATERIAL_BIND_GROUP_VIZ_BUFFER
|
|
34
39
|
} from "./GPUMaterialContext.js";
|
|
40
|
+
import { MATERIAL_MASK_FORMAT, MATERIAL_MASK_NONE } from "./MATERIAL_MASK.js";
|
|
35
41
|
import { MATERIAL_METADATA_STRUCT } from "./MATERIAL_METADATA_STRUCT.js";
|
|
36
42
|
import { PIXEL_TEXTURE_ORM } from "./PIXEL_TEXTURE_ORM.js";
|
|
37
43
|
import { GPUMaterialServices, MaterialGPUDefaults } from "./template/GPUMaterialServices.js";
|
|
@@ -94,11 +100,34 @@ class DrawnMaterialLists {
|
|
|
94
100
|
gbuffer_version = -1;
|
|
95
101
|
|
|
96
102
|
/**
|
|
97
|
-
*
|
|
103
|
+
* Each context of {@link gbuffer} at its place in it, keyed by material id: a
|
|
104
|
+
* {@link cpu_hash_table_create} table, for shaders that start from the material id of a mesh.
|
|
98
105
|
*
|
|
99
|
-
* @type {
|
|
106
|
+
* @type {Uint32Array}
|
|
100
107
|
*/
|
|
101
|
-
|
|
108
|
+
gbuffer_slots = new Uint32Array(0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @param {GPUMaterialContext[]} contexts
|
|
113
|
+
* @returns {Uint32Array} a {@link cpu_hash_table_create} table from each context's material id to its
|
|
114
|
+
* index in `contexts`
|
|
115
|
+
*/
|
|
116
|
+
function build_slot_table(contexts) {
|
|
117
|
+
const count = contexts.length;
|
|
118
|
+
const ids = new Array(count);
|
|
119
|
+
|
|
120
|
+
for (let i = 0; i < count; i++) {
|
|
121
|
+
ids[i] = contexts[i].material_id;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
let table = new Uint32Array(cpu_hash_table_word_count(count));
|
|
125
|
+
|
|
126
|
+
while (!cpu_hash_table_create(table, ids, count)) {
|
|
127
|
+
table = new Uint32Array(table.length * 2);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
return table;
|
|
102
131
|
}
|
|
103
132
|
|
|
104
133
|
/**
|
|
@@ -152,7 +181,11 @@ const MATERIAL_BUFFER_BIND_GROUP_0_LAYOUT_DESCRIPTOR = BindGroupLayoutDescriptor
|
|
|
152
181
|
sampleType: "uint"
|
|
153
182
|
}
|
|
154
183
|
},
|
|
155
|
-
|
|
184
|
+
{
|
|
185
|
+
binding: 1,
|
|
186
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
187
|
+
buffer: BufferBindingLayout.readOnlyStorage
|
|
188
|
+
},
|
|
156
189
|
]
|
|
157
190
|
});
|
|
158
191
|
|
|
@@ -167,22 +200,31 @@ const MATERIAL_BUFFER_BIND_GROUP_1_LAYOUT_DESCRIPTOR = BindGroupLayoutDescriptor
|
|
|
167
200
|
binding: 1,
|
|
168
201
|
visibility: GPUShaderStage.FRAGMENT,
|
|
169
202
|
buffer: BufferBindingLayout.storage
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
binding: 2,
|
|
206
|
+
visibility: GPUShaderStage.FRAGMENT,
|
|
207
|
+
buffer: BufferBindingLayout.readOnlyStorage
|
|
170
208
|
}
|
|
171
209
|
]
|
|
172
210
|
});
|
|
173
211
|
|
|
174
212
|
/**
|
|
175
|
-
* The material-depth pass's fragment stage: writes
|
|
176
|
-
* the G-buffer pass to test against, and marks
|
|
213
|
+
* The material-depth pass's fragment stage: writes, as its depth, the place in the G-buffer pass's
|
|
214
|
+
* list of the material that holds each pixel, for the G-buffer pass to test against, and marks that
|
|
215
|
+
* place in `material_seen`. A pixel of no mesh, or of a material the list leaves out, gets the
|
|
216
|
+
* cleared value and marks nothing.
|
|
177
217
|
*
|
|
178
218
|
* @type {CodeChunk}
|
|
179
219
|
*/
|
|
180
220
|
const material_depth_fragment = CodeChunk.from(
|
|
181
221
|
// language=WGSL
|
|
182
222
|
`
|
|
183
|
-
@group(0) @binding(0) var
|
|
223
|
+
@group(0) @binding(0) var visibility: texture_2d<u32>;
|
|
224
|
+
@group(0) @binding(1) var<storage, read> visible_meshlets: ${MESHLET_COLLECTION_STRUCT.wgsl_ref};
|
|
184
225
|
@group(1) @binding(0) var<storage, read> scene_database: array<u32>;
|
|
185
226
|
@group(1) @binding(1) var<storage, read_write> material_seen: array<atomic<u32>>;
|
|
227
|
+
@group(1) @binding(2) var<storage, read> material_slots: array<u32>;
|
|
186
228
|
|
|
187
229
|
struct Outputs{
|
|
188
230
|
@builtin(frag_depth) depth:f32,
|
|
@@ -195,34 +237,43 @@ const material_depth_fragment = CodeChunk.from(
|
|
|
195
237
|
|
|
196
238
|
let pixel = vec2<u32>(coord.xy);
|
|
197
239
|
|
|
198
|
-
|
|
240
|
+
// a miss in the table is the bitset's "none" as well
|
|
241
|
+
var slot = ${SUBGROUP_BITSET_OR_NONE}u;
|
|
199
242
|
|
|
200
243
|
// a helper invocation past the edge of the target holds no material, so it marks nothing
|
|
201
|
-
if(all(pixel < textureDimensions(
|
|
202
|
-
let
|
|
203
|
-
|
|
244
|
+
if(all(pixel < textureDimensions(visibility))){
|
|
245
|
+
let encoded = textureLoad(
|
|
246
|
+
visibility,
|
|
204
247
|
pixel,
|
|
205
248
|
0
|
|
206
249
|
).r;
|
|
207
250
|
|
|
208
|
-
if(
|
|
209
|
-
material = scene_read_mesh(&scene_database,
|
|
251
|
+
if(encoded != VISIBILITY_NONE){
|
|
252
|
+
let material = scene_read_mesh(&scene_database, visibility_decode(encoded).mesh).material;
|
|
253
|
+
|
|
254
|
+
slot = hash_table_get(&material_slots, 0u, material);
|
|
210
255
|
}
|
|
211
256
|
}
|
|
212
257
|
|
|
213
|
-
// the G-buffer pass draws only the
|
|
214
|
-
subgroup_bitset_or(&material_seen,
|
|
258
|
+
// the G-buffer pass draws only the places marked here
|
|
259
|
+
subgroup_bitset_or(&material_seen, slot);
|
|
215
260
|
|
|
216
|
-
if(
|
|
261
|
+
if(slot == ${SUBGROUP_BITSET_OR_NONE}u){
|
|
217
262
|
return Outputs(1.0);
|
|
218
263
|
}
|
|
219
264
|
|
|
220
265
|
return Outputs(
|
|
221
|
-
f32(
|
|
266
|
+
f32(slot) / ${MATERIAL_MASK_NONE}.0
|
|
222
267
|
);
|
|
223
268
|
}
|
|
224
269
|
`,
|
|
225
|
-
[
|
|
270
|
+
[
|
|
271
|
+
chunk_scene_database_access,
|
|
272
|
+
chunk_subgroup_bitset_or,
|
|
273
|
+
chunk_hash_table_get,
|
|
274
|
+
MESHLET_COLLECTION_STRUCT.declaration_chunk,
|
|
275
|
+
chunk_visibility_decode
|
|
276
|
+
]
|
|
226
277
|
);
|
|
227
278
|
|
|
228
279
|
/**
|
|
@@ -255,7 +306,7 @@ const material_buffer_pipeline_descriptor = RenderPipelineDescriptor.from({
|
|
|
255
306
|
},
|
|
256
307
|
},
|
|
257
308
|
depthStencil: {
|
|
258
|
-
format:
|
|
309
|
+
format: MATERIAL_MASK_FORMAT,
|
|
259
310
|
depthWriteEnabled: true,
|
|
260
311
|
depthCompare: "always",
|
|
261
312
|
// disable stencil
|
|
@@ -456,22 +507,25 @@ export class GPUMaterialManager {
|
|
|
456
507
|
* @param {GPUViewContext} view
|
|
457
508
|
* @param {GPUTextureContext} mesh_texture
|
|
458
509
|
* @param {GPUTextureContext} material_depth_texture
|
|
459
|
-
* @param {GPUBufferBinding} material_seen zeroed, a bit per
|
|
460
|
-
*
|
|
510
|
+
* @param {GPUBufferBinding} material_seen zeroed, a bit per place in the G-buffer pass's list, set
|
|
511
|
+
* for each place whose material holds a pixel
|
|
512
|
+
* @param {GPUBuffer} material_slots the list's {@link gbuffer_slot_table}
|
|
461
513
|
*/
|
|
462
514
|
#prepare_material_depth_buffer(
|
|
463
515
|
encoder,
|
|
464
516
|
view,
|
|
465
|
-
|
|
517
|
+
visibility,
|
|
518
|
+
visible_meshlets,
|
|
466
519
|
material_depth_texture,
|
|
467
520
|
material_seen,
|
|
521
|
+
material_slots,
|
|
468
522
|
) {
|
|
469
523
|
|
|
470
524
|
const pass = encoder.beginRenderPass({
|
|
471
525
|
label: "GPUMaterialManager/material-depth",
|
|
472
526
|
colorAttachments: [],
|
|
473
527
|
depthStencilAttachment: {
|
|
474
|
-
//
|
|
528
|
+
// MATERIAL_MASK_NONE: no listed material
|
|
475
529
|
depthClearValue: 1,
|
|
476
530
|
view: material_depth_texture.obtainView(),
|
|
477
531
|
depthLoadOp: 'clear',
|
|
@@ -494,7 +548,8 @@ export class GPUMaterialManager {
|
|
|
494
548
|
const bind_0 = bindings.obtain(BindGroupDescriptor.from(
|
|
495
549
|
MATERIAL_BUFFER_BIND_GROUP_0_LAYOUT_DESCRIPTOR,
|
|
496
550
|
[
|
|
497
|
-
|
|
551
|
+
visibility.obtainView(),
|
|
552
|
+
{ buffer: visible_meshlets },
|
|
498
553
|
]
|
|
499
554
|
));
|
|
500
555
|
|
|
@@ -503,6 +558,7 @@ export class GPUMaterialManager {
|
|
|
503
558
|
[
|
|
504
559
|
{ buffer: view.scene.scene_database_buffer },
|
|
505
560
|
material_seen,
|
|
561
|
+
{ buffer: material_slots },
|
|
506
562
|
]
|
|
507
563
|
));
|
|
508
564
|
|
|
@@ -519,22 +575,25 @@ export class GPUMaterialManager {
|
|
|
519
575
|
* @param {Object} options
|
|
520
576
|
* @param {FrameGraph} options.graph
|
|
521
577
|
* @param {GPUViewContext} options.view
|
|
522
|
-
* @param {number} options.
|
|
523
|
-
* @param {number} options.
|
|
524
|
-
* @param {number} options.
|
|
525
|
-
* resolution. The caller owns it so that it outlives the frame: reprojection reads last
|
|
578
|
+
* @param {number} options.texture_visibility the visibility buffer
|
|
579
|
+
* @param {number} options.visible_meshlets the frame's visible-meshlet table, which resolves it
|
|
580
|
+
* @param {number} options.texture_pbr the PBR target to write, `G_BUFFER_COLOR_TARGETS[0].format` at
|
|
581
|
+
* the view's resolution. The caller owns it so that it outlives the frame: reprojection reads last
|
|
582
|
+
* frame's face normal from it.
|
|
526
583
|
* @returns {{g_pbr: number, g_normal: number, g_albedo: number, g_emissive: number}} updated g-buffer
|
|
527
584
|
*/
|
|
528
585
|
graph_viz_render({
|
|
529
586
|
graph,
|
|
530
587
|
view,
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
588
|
+
texture_visibility,
|
|
589
|
+
visible_meshlets,
|
|
590
|
+
texture_pbr,
|
|
534
591
|
}) {
|
|
535
592
|
|
|
536
593
|
assert.defined(graph, 'graph');
|
|
537
|
-
assert.isNonNegativeInteger(
|
|
594
|
+
assert.isNonNegativeInteger(texture_visibility, 'texture_visibility');
|
|
595
|
+
assert.isNonNegativeInteger(visible_meshlets, 'visible_meshlets');
|
|
596
|
+
assert.isNonNegativeInteger(texture_pbr, 'texture_pbr');
|
|
538
597
|
assert.defined(view, 'view');
|
|
539
598
|
|
|
540
599
|
/**
|
|
@@ -545,8 +604,8 @@ export class GPUMaterialManager {
|
|
|
545
604
|
*/
|
|
546
605
|
const execute = (data, resources, context) => {
|
|
547
606
|
|
|
548
|
-
const
|
|
549
|
-
const
|
|
607
|
+
const visibility = resources.get(data.visibility);
|
|
608
|
+
const visible_meshlets = resources.get(data.visible_meshlets);
|
|
550
609
|
|
|
551
610
|
const g_pbr = resources.get(data.g_pbr);
|
|
552
611
|
const g_normal = resources.get(data.g_normal);
|
|
@@ -572,9 +631,11 @@ export class GPUMaterialManager {
|
|
|
572
631
|
this.#prepare_material_depth_buffer(
|
|
573
632
|
encoder,
|
|
574
633
|
view,
|
|
575
|
-
|
|
634
|
+
visibility,
|
|
635
|
+
visible_meshlets,
|
|
576
636
|
material_depth,
|
|
577
637
|
material_seen,
|
|
638
|
+
resources.get(data.material_slots),
|
|
578
639
|
);
|
|
579
640
|
|
|
580
641
|
const pass = encoder.beginRenderPass({
|
|
@@ -603,7 +664,7 @@ export class GPUMaterialManager {
|
|
|
603
664
|
],
|
|
604
665
|
depthStencilAttachment: {
|
|
605
666
|
// this is our mask
|
|
606
|
-
view: material_depth.obtainView(
|
|
667
|
+
view: material_depth.obtainView(),
|
|
607
668
|
depthReadOnly: true,
|
|
608
669
|
},
|
|
609
670
|
primitive: {
|
|
@@ -617,8 +678,8 @@ export class GPUMaterialManager {
|
|
|
617
678
|
BindGroupDescriptor.from(
|
|
618
679
|
MATERIAL_BIND_GROUP_VIZ_BUFFER,
|
|
619
680
|
[
|
|
620
|
-
|
|
621
|
-
|
|
681
|
+
visibility.obtainView(),
|
|
682
|
+
{ buffer: visible_meshlets },
|
|
622
683
|
{ buffer: view.uniform_buffer.buffer },
|
|
623
684
|
{ buffer: view.camera.buffer.buffer },
|
|
624
685
|
material_seen,
|
|
@@ -641,7 +702,8 @@ export class GPUMaterialManager {
|
|
|
641
702
|
pass.setBindGroup(1, bind_1)
|
|
642
703
|
pass.setBindGroup(2, bind_2)
|
|
643
704
|
|
|
644
|
-
|
|
705
|
+
// the list the mask was written from, not whatever the manager holds by now
|
|
706
|
+
const materials = data.contexts;
|
|
645
707
|
const material_count = materials.length;
|
|
646
708
|
|
|
647
709
|
let cached_last_pipeline = null;
|
|
@@ -663,9 +725,9 @@ export class GPUMaterialManager {
|
|
|
663
725
|
|
|
664
726
|
pass.setBindGroup(0, material_ctx.material_binding);
|
|
665
727
|
|
|
666
|
-
// the
|
|
667
|
-
// triangle of no area, see material_gbuffer_vertex_shader_code
|
|
668
|
-
pass.draw(3, 1, 0,
|
|
728
|
+
// the material's place rides in the instance index; a material with no pixel in the
|
|
729
|
+
// view draws a triangle of no area, see material_gbuffer_vertex_shader_code
|
|
730
|
+
pass.draw(3, 1, 0, i);
|
|
669
731
|
}
|
|
670
732
|
|
|
671
733
|
pass.end();
|
|
@@ -673,22 +735,41 @@ export class GPUMaterialManager {
|
|
|
673
735
|
encoder.popDebugGroup();
|
|
674
736
|
}
|
|
675
737
|
|
|
738
|
+
// The list and its slot table as they are now. Both are replaced rather than rewritten when
|
|
739
|
+
// the list changes, so the mask and the draws agree on every material's place even if a
|
|
740
|
+
// context joins before the pass runs.
|
|
741
|
+
const drawn = view.scene.drawn_materials;
|
|
742
|
+
const contexts = this.#gbuffer_contexts(drawn);
|
|
743
|
+
const slot_table = this.#lists_of(drawn).gbuffer_slots;
|
|
744
|
+
|
|
745
|
+
assert.lessThan(contexts.length, MATERIAL_MASK_NONE, 'G-buffer materials of one view');
|
|
746
|
+
|
|
747
|
+
// added ahead of the pass that reads it, as the graph runs passes in the order they are added
|
|
748
|
+
const gr_material_slots = graph_import_raw_buffer({
|
|
749
|
+
graph,
|
|
750
|
+
value: slot_table.buffer,
|
|
751
|
+
offset: slot_table.byteOffset,
|
|
752
|
+
size: slot_table.byteLength,
|
|
753
|
+
label: "material slots",
|
|
754
|
+
usage: GPUBufferUsage.STORAGE,
|
|
755
|
+
});
|
|
756
|
+
|
|
676
757
|
const pass_data = {};
|
|
677
758
|
|
|
678
759
|
const pass = graph.add('Material Draw', pass_data, execute);
|
|
679
760
|
|
|
680
|
-
pass_data.
|
|
681
|
-
pass_data.
|
|
761
|
+
pass_data.visibility = pass.read(texture_visibility);
|
|
762
|
+
pass_data.visible_meshlets = pass.read(visible_meshlets);
|
|
682
763
|
|
|
683
|
-
pass_data.g_pbr = pass.
|
|
684
|
-
|
|
764
|
+
pass_data.g_pbr = pass.write(texture_pbr);
|
|
765
|
+
pass_data.g_normal = pass.create(
|
|
766
|
+
"g-buffer / Normal",
|
|
685
767
|
TextureResourceDescriptor.from({
|
|
686
|
-
format:
|
|
768
|
+
format: G_BUFFER_COLOR_TARGETS[1].format,
|
|
687
769
|
resolution: view.resolution,
|
|
688
770
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
|
|
689
771
|
})
|
|
690
772
|
);
|
|
691
|
-
pass_data.g_normal = pass.write(texture_normal);
|
|
692
773
|
pass_data.g_albedo = pass.create(
|
|
693
774
|
"g-buffer / Albedo",
|
|
694
775
|
TextureResourceDescriptor.from({
|
|
@@ -709,18 +790,17 @@ export class GPUMaterialManager {
|
|
|
709
790
|
pass_data.material_depth = pass.create(
|
|
710
791
|
'material depth texture',
|
|
711
792
|
TextureResourceDescriptor.from({
|
|
712
|
-
format:
|
|
793
|
+
format: MATERIAL_MASK_FORMAT,
|
|
713
794
|
resolution: view.resolution,
|
|
714
795
|
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING
|
|
715
796
|
})
|
|
716
797
|
);
|
|
717
798
|
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
this.#gbuffer_contexts(view.scene.drawn_materials);
|
|
799
|
+
pass_data.contexts = contexts;
|
|
800
|
+
pass_data.material_slots = pass.read(gr_material_slots);
|
|
721
801
|
|
|
722
|
-
|
|
723
|
-
const material_seen_words = Math.max(1, Math.ceil(
|
|
802
|
+
// a bit for every place in the list
|
|
803
|
+
const material_seen_words = Math.max(1, Math.ceil(contexts.length / 32));
|
|
724
804
|
|
|
725
805
|
pass_data.material_seen_size = material_seen_words * 4;
|
|
726
806
|
pass_data.material_seen = pass.create(
|
|
@@ -904,7 +984,9 @@ export class GPUMaterialManager {
|
|
|
904
984
|
/**
|
|
905
985
|
* The contexts the G-buffer pass draws for a scene's drawn materials: every one that is not
|
|
906
986
|
* transparent and has a context, grouped by template, in the order {@link graph_viz_render} draws
|
|
907
|
-
* them.
|
|
987
|
+
* them. A material's index here is its place in the pass. The array is replaced, never
|
|
988
|
+
* rewritten, when the list changes — {@link gbuffer_contexts_version} says when — so one held
|
|
989
|
+
* across a change still names the places it was read with.
|
|
908
990
|
*
|
|
909
991
|
* @param {ShadeMaterial[]} drawn a scene's {@link GPUSceneContext#drawn_materials}
|
|
910
992
|
* @returns {GPUMaterialContext[]}
|
|
@@ -913,6 +995,21 @@ export class GPUMaterialManager {
|
|
|
913
995
|
return this.#gbuffer_contexts(drawn);
|
|
914
996
|
}
|
|
915
997
|
|
|
998
|
+
/**
|
|
999
|
+
* Each of {@link gbuffer_contexts} at its place there, keyed by material id: a
|
|
1000
|
+
* {@link cpu_hash_table_create} table, for a shader that starts from the material id of a mesh
|
|
1001
|
+
* (read with `hash_table_get`, a miss for a material the pass does not draw). Replaced along with
|
|
1002
|
+
* the list, so it always matches the array {@link gbuffer_contexts} returns at the same version.
|
|
1003
|
+
*
|
|
1004
|
+
* @param {ShadeMaterial[]} drawn a scene's {@link GPUSceneContext#drawn_materials}
|
|
1005
|
+
* @returns {Uint32Array}
|
|
1006
|
+
*/
|
|
1007
|
+
gbuffer_slot_table(drawn) {
|
|
1008
|
+
this.#gbuffer_contexts(drawn);
|
|
1009
|
+
|
|
1010
|
+
return this.#lists_of(drawn).gbuffer_slots;
|
|
1011
|
+
}
|
|
1012
|
+
|
|
916
1013
|
/**
|
|
917
1014
|
* Moves whenever {@link gbuffer_contexts} may answer differently for the same drawn set.
|
|
918
1015
|
*
|
|
@@ -940,11 +1037,9 @@ export class GPUMaterialManager {
|
|
|
940
1037
|
|
|
941
1038
|
if (lists.gbuffer_version !== this.#list_version) {
|
|
942
1039
|
const sorted = lists.sorted;
|
|
943
|
-
const contexts = lists.gbuffer;
|
|
944
1040
|
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
let id_bound = 0;
|
|
1041
|
+
// a new array, so a pass that captured the old one keeps the places it was recorded with
|
|
1042
|
+
const contexts = [];
|
|
948
1043
|
|
|
949
1044
|
for (let i = 0; i < sorted.length; i++) {
|
|
950
1045
|
const material = sorted[i];
|
|
@@ -961,11 +1056,10 @@ export class GPUMaterialManager {
|
|
|
961
1056
|
}
|
|
962
1057
|
|
|
963
1058
|
contexts.push(material_ctx);
|
|
964
|
-
|
|
965
|
-
id_bound = Math.max(id_bound, material_ctx.material_id + 1);
|
|
966
1059
|
}
|
|
967
1060
|
|
|
968
|
-
lists.
|
|
1061
|
+
lists.gbuffer = contexts;
|
|
1062
|
+
lists.gbuffer_slots = build_slot_table(contexts);
|
|
969
1063
|
lists.gbuffer_version = this.#list_version;
|
|
970
1064
|
}
|
|
971
1065
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format of the G-buffer pass's material mask: a depth target holding, at each pixel, the place in
|
|
3
|
+
* the pass's list of the material the visibility buffer names there, as `place / MATERIAL_MASK_NONE`.
|
|
4
|
+
* A material's draw is a full-screen triangle at its own place's depth, tested `equal` against it.
|
|
5
|
+
*
|
|
6
|
+
* A place, not a material id: ids come from one counter for the life of the process and are never
|
|
7
|
+
* reused, so only a material's place in the list is bounded by what one pass can draw.
|
|
8
|
+
*
|
|
9
|
+
* @type {GPUTextureFormat}
|
|
10
|
+
*/
|
|
11
|
+
export const MATERIAL_MASK_FORMAT: GPUTextureFormat;
|
|
12
|
+
/**
|
|
13
|
+
* The mask's value where no listed material holds the pixel: the cleared depth, 1.0. Every place in
|
|
14
|
+
* the G-buffer pass's list is below it, so the list holds fewer materials than this.
|
|
15
|
+
*
|
|
16
|
+
* @type {number}
|
|
17
|
+
*/
|
|
18
|
+
export const MATERIAL_MASK_NONE: number;
|
|
19
|
+
//# sourceMappingURL=MATERIAL_MASK.d.ts.map
|