@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
|
@@ -15,11 +15,17 @@ import { BVH2_NODE_STRUCT } from "../../shader/chunk/bvh/BVH2_NODE_STRUCT.js";
|
|
|
15
15
|
import { BVH_STRUCT } from "../../shader/chunk/bvh/BVH_STRUCT.js";
|
|
16
16
|
import { chunk_project_position_from_depth } from "../../shader/chunk/camera/chunk_project_position_from_depth.js";
|
|
17
17
|
import { chunk_hash_u32_to_v4f32 } from "../../shader/chunk/color/chunk_hash_u32_to_v4f32.js";
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
chunk_decode_g_buffer_face_normal
|
|
20
|
+
} from "../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
|
|
19
21
|
import { chunk_camera_ray_from_uv } from "../../shader/chunk/geometry/ray/chunk_camera_ray_from_uv.js";
|
|
20
22
|
import { RAY_STRUCT } from "../../shader/chunk/geometry/ray/RAY_STRUCT.js";
|
|
21
23
|
import { chunk_sdf_query_distance } from "../../shader/chunk/sdf/chunk_sdf_query_distance.js";
|
|
22
24
|
import { CodeChunk } from "../../shader/compiler/CodeChunk.js";
|
|
25
|
+
import {
|
|
26
|
+
chunk_visibility_decode,
|
|
27
|
+
VISIBLE_MESHLETS_RESOURCE
|
|
28
|
+
} from "../../rasterize/visibility/chunk_visibility_decode.js";
|
|
23
29
|
import { ImageShader } from "../../shader/ImageShader.js";
|
|
24
30
|
import { ShaderResourceSetDescriptor } from "../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
25
31
|
import { ShaderDescriptor } from "../../shader/ShaderDescriptor.js";
|
|
@@ -40,8 +46,9 @@ resources.createGroup()
|
|
|
40
46
|
.add(MESH_SDF_ATLAS_RESOURCE)
|
|
41
47
|
.add(MESH_SDF_SAMPLER_RESOURCE)
|
|
42
48
|
.addTexture("gBufferDepth")
|
|
43
|
-
.addTexture("
|
|
44
|
-
.addTexture("
|
|
49
|
+
.addTexture("gBufferPBR")
|
|
50
|
+
.addTexture("visibility", "uint")
|
|
51
|
+
.add(VISIBLE_MESHLETS_RESOURCE)
|
|
45
52
|
|
|
46
53
|
resources.createGroup()
|
|
47
54
|
.addStorageBuffer("geometries", WebGPUArray.from(GEOMETRY_METADATA_STRUCT))
|
|
@@ -84,9 +91,10 @@ fn main(
|
|
|
84
91
|
return vec4(0.33);
|
|
85
92
|
}
|
|
86
93
|
|
|
87
|
-
let geometric_normal =
|
|
94
|
+
let geometric_normal = decode_g_buffer_face_normal(textureLoad(gBufferPBR, coord_i, 0));
|
|
88
95
|
|
|
89
|
-
|
|
96
|
+
// a surface is here: the depth is not the background's
|
|
97
|
+
let mesh_id = visibility_decode(textureLoad(visibility, coord_i, 0).x).mesh;
|
|
90
98
|
|
|
91
99
|
let position_ws = project_position_from_depth(uv, depth, camera.view_projection_matrix_inverse);
|
|
92
100
|
|
|
@@ -135,7 +143,8 @@ fn main(
|
|
|
135
143
|
RAY_STRUCT.declaration_chunk,
|
|
136
144
|
chunk_camera_ray_from_uv,
|
|
137
145
|
chunk_project_position_from_depth,
|
|
138
|
-
|
|
146
|
+
chunk_decode_g_buffer_face_normal,
|
|
147
|
+
chunk_visibility_decode,
|
|
139
148
|
chunk_ray_query_sdf_raycast,
|
|
140
149
|
chunk_mesh_sdf_query_distance,
|
|
141
150
|
chunk_hash_u32_to_v4f32
|
|
@@ -160,8 +169,9 @@ export const shader_sdf_visualize = new ImageShader({
|
|
|
160
169
|
* @param {FrameGraph} options.graph
|
|
161
170
|
* @param {GPUViewContext} options.view
|
|
162
171
|
* @param {number} options.input_depth
|
|
163
|
-
* @param {number} options.
|
|
164
|
-
* @param {number} options.
|
|
172
|
+
* @param {number} options.input_pbr the G-buffer's PBR target, for its face normal
|
|
173
|
+
* @param {number} options.input_visibility the visibility buffer
|
|
174
|
+
* @param {number} options.input_visible_meshlets the frame's visible-meshlet table, which resolves it
|
|
165
175
|
* @param settings
|
|
166
176
|
* @returns {number} texture with shadows
|
|
167
177
|
*/
|
|
@@ -169,8 +179,9 @@ export function graph_draw_sdf_normals({
|
|
|
169
179
|
graph,
|
|
170
180
|
view,
|
|
171
181
|
input_depth,
|
|
172
|
-
|
|
173
|
-
|
|
182
|
+
input_pbr,
|
|
183
|
+
input_visibility,
|
|
184
|
+
input_visible_meshlets,
|
|
174
185
|
}) {
|
|
175
186
|
|
|
176
187
|
|
|
@@ -199,7 +210,7 @@ export function graph_draw_sdf_normals({
|
|
|
199
210
|
/**
|
|
200
211
|
* @type {GPUTextureContext}
|
|
201
212
|
*/
|
|
202
|
-
const
|
|
213
|
+
const pbr = resources.get(data.pbr);
|
|
203
214
|
/**
|
|
204
215
|
* @type {GPUTextureContext}
|
|
205
216
|
*/
|
|
@@ -207,7 +218,7 @@ export function graph_draw_sdf_normals({
|
|
|
207
218
|
/**
|
|
208
219
|
* @type {GPUTextureContext}
|
|
209
220
|
*/
|
|
210
|
-
const
|
|
221
|
+
const visibility = resources.get(data.visibility);
|
|
211
222
|
|
|
212
223
|
const buffer_settings = {
|
|
213
224
|
slice: pingpong(current_time_in_seconds() / 5, 1),
|
|
@@ -224,8 +235,9 @@ export function graph_draw_sdf_normals({
|
|
|
224
235
|
bindings: sdf.write_bindings({
|
|
225
236
|
settings: buffer_settings,
|
|
226
237
|
gBufferDepth: depth.obtainView(),
|
|
227
|
-
|
|
228
|
-
|
|
238
|
+
gBufferPBR: pbr.obtainView(),
|
|
239
|
+
visibility: visibility.obtainView(),
|
|
240
|
+
visible_meshlets: resources.get(data.visible_meshlets),
|
|
229
241
|
geometries: geometries.buffer_metadata,
|
|
230
242
|
scene_database: view.scene.scene_database_buffer,
|
|
231
243
|
tlas: view.scene.tlas.buffer,
|
|
@@ -252,8 +264,9 @@ export function graph_draw_sdf_normals({
|
|
|
252
264
|
const pass_builder = graph.add("SDF Debug", pass_data, execute);
|
|
253
265
|
|
|
254
266
|
pass_data.depth = pass_builder.read(input_depth);
|
|
255
|
-
pass_data.
|
|
256
|
-
pass_data.
|
|
267
|
+
pass_data.pbr = pass_builder.read(input_pbr);
|
|
268
|
+
pass_data.visibility = pass_builder.read(input_visibility);
|
|
269
|
+
pass_data.visible_meshlets = pass_builder.read(input_visible_meshlets);
|
|
257
270
|
|
|
258
271
|
pass_data.output = pass_builder.create('sdf', TextureResourceDescriptor.from({
|
|
259
272
|
format: "rgba8unorm",
|
|
@@ -3,15 +3,21 @@
|
|
|
3
3
|
*
|
|
4
4
|
* ```wgsl
|
|
5
5
|
* fn vg_instance_stretch(global: mat4x4<f32>) -> vec2<f32>
|
|
6
|
+
* fn vg_instance_eye(global: mat4x4<f32>, position: vec3<f32>) -> vec4<f32>
|
|
6
7
|
* fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32
|
|
7
8
|
* fn vg_store(base: u32, field: u32, value: f32)
|
|
8
9
|
* ```
|
|
9
10
|
*
|
|
10
|
-
* `vg_instance_stretch` is the
|
|
11
|
-
*
|
|
11
|
+
* `vg_instance_stretch` is the longest and shortest column of the transform's linear part, or zero
|
|
12
|
+
* for a column of zeros. That is the largest and smallest stretch it applies to any direction when
|
|
13
|
+
* the columns are orthogonal, a rotation times any scale; a shear stretches beyond its columns and
|
|
14
|
+
* is not accounted for, as in Nanite. (`mat3_singular_values` accounts for it, at many times the
|
|
15
|
+
* cost.) `vg_instance_eye` is `position` in the
|
|
16
|
+
* instance's object space, scaled by w: xyz / w is the eye, and w is the |det| that division takes,
|
|
17
|
+
* not positive for a transform without an inverse. `vg_instance_record` reserves a record under
|
|
12
18
|
* `capacity`, writes the instance's mesh row and its geometry's root page, lookup and claim width,
|
|
13
19
|
* and returns the record's first word, or {@link VG_INSTANCE_RECORD_NONE} when the records are full.
|
|
14
|
-
* What the instance is cut against (its
|
|
20
|
+
* What the instance is cut against (its projection and volume) is the collect's own.
|
|
15
21
|
*
|
|
16
22
|
* Requires the importing shader to declare `instances`, `claim_widths` and `vg_geometries`.
|
|
17
23
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_vgeo_cut_instance.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"chunk_vgeo_cut_instance.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/chunk_vgeo_cut_instance.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sCAFU,SAAS,CAqFiD;0BApH1C,0CAA0C"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { chunk_compute_normal_matrix_from_m4 } from "../../../../shader/chunk/geometry/mat4/chunk_compute_normal_matrix_from_m4.js";
|
|
2
|
+
import { chunk_mat4_extract_scale } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_extract_scale.js";
|
|
2
3
|
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
3
4
|
import { VGEO_GEOMETRY_ROW_OFFSET } from "../layout/VGEO_GEOMETRY_ROW_OFFSET.js";
|
|
4
5
|
import { VGEO_GEOMETRY_ROW_WORDS } from "../layout/VGEO_GEOMETRY_ROW_WORDS.js";
|
|
@@ -10,15 +11,21 @@ import { VGEO_INSTANCE_WORDS } from "../layout/VGEO_INSTANCE_WORDS.js";
|
|
|
10
11
|
*
|
|
11
12
|
* ```wgsl
|
|
12
13
|
* fn vg_instance_stretch(global: mat4x4<f32>) -> vec2<f32>
|
|
14
|
+
* fn vg_instance_eye(global: mat4x4<f32>, position: vec3<f32>) -> vec4<f32>
|
|
13
15
|
* fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32
|
|
14
16
|
* fn vg_store(base: u32, field: u32, value: f32)
|
|
15
17
|
* ```
|
|
16
18
|
*
|
|
17
|
-
* `vg_instance_stretch` is the
|
|
18
|
-
*
|
|
19
|
+
* `vg_instance_stretch` is the longest and shortest column of the transform's linear part, or zero
|
|
20
|
+
* for a column of zeros. That is the largest and smallest stretch it applies to any direction when
|
|
21
|
+
* the columns are orthogonal, a rotation times any scale; a shear stretches beyond its columns and
|
|
22
|
+
* is not accounted for, as in Nanite. (`mat3_singular_values` accounts for it, at many times the
|
|
23
|
+
* cost.) `vg_instance_eye` is `position` in the
|
|
24
|
+
* instance's object space, scaled by w: xyz / w is the eye, and w is the |det| that division takes,
|
|
25
|
+
* not positive for a transform without an inverse. `vg_instance_record` reserves a record under
|
|
19
26
|
* `capacity`, writes the instance's mesh row and its geometry's root page, lookup and claim width,
|
|
20
27
|
* and returns the record's first word, or {@link VG_INSTANCE_RECORD_NONE} when the records are full.
|
|
21
|
-
* What the instance is cut against (its
|
|
28
|
+
* What the instance is cut against (its projection and volume) is the collect's own.
|
|
22
29
|
*
|
|
23
30
|
* Requires the importing shader to declare `instances`, `claim_widths` and `vg_geometries`.
|
|
24
31
|
*
|
|
@@ -36,42 +43,43 @@ fn vg_store(base: u32, field: u32, value: f32) {
|
|
|
36
43
|
}
|
|
37
44
|
|
|
38
45
|
fn vg_instance_stretch(global: mat4x4<f32>) -> vec2<f32> {
|
|
39
|
-
let
|
|
40
|
-
|
|
41
|
-
let stretch = mat3_singular_values(linear);
|
|
46
|
+
let lengths = mat4_extract_scale(global);
|
|
47
|
+
let stretch = vec2<f32>(max(lengths.x, max(lengths.y, lengths.z)), min(lengths.x, min(lengths.y, lengths.z)));
|
|
42
48
|
|
|
43
49
|
/*
|
|
44
|
-
A
|
|
45
|
-
by
|
|
46
|
-
|
|
47
|
-
resident set. It covers nothing, so dropping it is also the right picture.
|
|
48
|
-
|
|
49
|
-
**The determinant is the test, and sigma_min alone was not.** This guard used to be
|
|
50
|
-
!(sigma_min > 0) on its own, and the closed form's own doc offered sigma_min as a
|
|
51
|
-
degeneracy test — true in exact arithmetic, false in f32. An axis-aligned flatten makes
|
|
52
|
-
MtM exactly diagonal and takes the exact branch, which does return zero. A ROTATED one
|
|
53
|
-
takes the trigonometric branch, where sigma_min is a difference of nearly equal numbers
|
|
54
|
-
with an absolute error of about sqrt(eps_f32) * sigma_max — so it came back near 1e-4
|
|
55
|
-
rather than 0, and thirty-six of forty rotated zero-scale instances passed this line with
|
|
56
|
-
a NaN eye and a projection scale of 6.2e10 behind it (REVIEW_LEDGER M3, re-review
|
|
57
|
-
2026-09-12). The determinant does not have that problem: a flattened instance has one
|
|
58
|
-
exactly-zero column at every rotation, and every term of the expansion carries a factor
|
|
59
|
-
from it. It is also, exactly, the number mat4_inverse divides by.
|
|
60
|
-
|
|
61
|
-
sigma_min is kept beside it because it is not redundant: a matrix that is merely very
|
|
62
|
-
close to singular has a non-zero determinant and can still report sigma_min as zero, and
|
|
63
|
-
a ratio of the two would then be an infinity rather than a correction.
|
|
64
|
-
|
|
65
|
-
Both written as !(x > 0) rather than x <= 0 so that a NaN — which compares false against
|
|
66
|
-
everything — is caught rather than passed through.
|
|
50
|
+
A column of zeros, a scale of zero, answers zero, which the collect drops: the projection
|
|
51
|
+
divides by the shortest column. Written !(x > 0) rather than x <= 0 so that a NaN, which
|
|
52
|
+
compares false against everything, is caught rather than passed through.
|
|
67
53
|
*/
|
|
68
|
-
if (!(
|
|
54
|
+
if (!(stretch.y > 0.0)) {
|
|
69
55
|
return vec2<f32>(0.0);
|
|
70
56
|
}
|
|
71
57
|
|
|
72
58
|
return stretch;
|
|
73
59
|
}
|
|
74
60
|
|
|
61
|
+
fn vg_instance_eye(global: mat4x4<f32>, position: vec3<f32>) -> vec4<f32> {
|
|
62
|
+
/*
|
|
63
|
+
An affine transform's inverse has adj(L) / det(L) for its linear part, and
|
|
64
|
+
compute_normal_matrix_from_m4 is adj(L) transposed, with det's sign folded in. So the eye is
|
|
65
|
+
transpose(normal) * (position - t) / |det|, and |det| = dot(l0, normal[0]) is the number it is
|
|
66
|
+
divided by. That number is w, for the collect to test before it divides. A test of any other
|
|
67
|
+
expansion of the determinant can pass where this one is zero: under a flattened parent a
|
|
68
|
+
rotated child's columns are all non-zero yet dependent, and two expansions then disagree
|
|
69
|
+
about zero. Even the sign that orients the normal matrix is a second evaluation of this dot,
|
|
70
|
+
so where the determinant is rounding noise a backend that fuses the two differently can make
|
|
71
|
+
w negative, which drops the instance.
|
|
72
|
+
|
|
73
|
+
A singular transform has no eye. The NaN that dividing by it brings makes **every**
|
|
74
|
+
comparison in vg_project and the culls fail open, so one zero-scaled instance would draw its
|
|
75
|
+
whole resident set (REVIEW_LEDGER M3). It covers nothing, so dropping it is also the right
|
|
76
|
+
picture.
|
|
77
|
+
*/
|
|
78
|
+
let normal = compute_normal_matrix_from_m4(global);
|
|
79
|
+
|
|
80
|
+
return vec4<f32>(transpose(normal) * (position - global[3].xyz), dot(global[0].xyz, normal[0]));
|
|
81
|
+
}
|
|
82
|
+
|
|
75
83
|
fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32 {
|
|
76
84
|
let slot = atomicAdd(&claim_widths.count, 1u);
|
|
77
85
|
|
|
@@ -108,4 +116,4 @@ fn vg_instance_record(mesh_index: u32, geometry_row: u32, capacity: u32) -> u32
|
|
|
108
116
|
|
|
109
117
|
return base;
|
|
110
118
|
}
|
|
111
|
-
`, [
|
|
119
|
+
`, [chunk_mat4_extract_scale, chunk_compute_normal_matrix_from_m4]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_vgeo_cut_collect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_vgeo_cut_collect.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/geometry/virtual/runtime/cut/shader_vgeo_cut_collect.js"],"names":[],"mappings":"AA4NA,oDAIG;8BA1N2B,qCAAqC"}
|
|
@@ -6,7 +6,6 @@ import { COLLECTION_U32_STRUCT_READ } from "../../../../gpu_primitive/COLLECTION
|
|
|
6
6
|
import { COLLECTION_U32_STRUCT_WRITE } from "../../../../gpu_primitive/COLLECTION_U32_STRUCT_WRITE.js";
|
|
7
7
|
import { ComputeShader } from "../../../../shader/ComputeShader.js";
|
|
8
8
|
import { GEOMETRY_METADATA_STRUCT } from "../../../GEOMETRY_METADATA_STRUCT.js";
|
|
9
|
-
import { chunk_mat4_inverse } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_inverse.js";
|
|
10
9
|
import { chunk_scene_database_access } from "../../../../scene/chunk_scene_database_access.js";
|
|
11
10
|
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
12
11
|
import { VGEO_CUT_STAT } from "../layout/VGEO_CUT_STAT.js";
|
|
@@ -131,19 +130,25 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
|
|
|
131
130
|
/*
|
|
132
131
|
In perspective, error and distance are both object-space, so a **uniform** scale cancels out of
|
|
133
132
|
r_e * k / d exactly and needs no term at all. A non-uniform one does not, and the correction is
|
|
134
|
-
the ratio of the
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
133
|
+
the ratio of the longest column to the shortest. Those are the transform's largest and smallest
|
|
134
|
+
stretch exactly when the columns are orthogonal, a rotation times any scale. A shear stretches
|
|
135
|
+
space beyond its columns, so a sheared instance under-refines: accepted, as Nanite accepts it,
|
|
136
|
+
for a correction that costs three lengths.
|
|
138
137
|
|
|
139
138
|
An orthographic view has no distance for a scale to cancel against: an object-space error
|
|
140
|
-
becomes world units by the largest stretch, and the correction is
|
|
141
|
-
picks between them without a branch, and at w = 1 the expression is
|
|
139
|
+
becomes world units by the largest stretch, and the correction is the longest column alone. The
|
|
140
|
+
weight picks between them without a branch, and at w = 1 the expression is x / y exactly.
|
|
142
141
|
*/
|
|
143
142
|
let stretch = vg_instance_stretch(node.global);
|
|
144
143
|
|
|
145
|
-
//
|
|
146
|
-
|
|
144
|
+
// the camera's position in this instance's object space, out of the camera's own world transform
|
|
145
|
+
let eye = vg_instance_eye(node.global, camera.transform[3].xyz);
|
|
146
|
+
|
|
147
|
+
/*
|
|
148
|
+
A transform that flattens the instance, which vg_instance_stretch answers with zero, or that
|
|
149
|
+
has no inverse to take the eye through: eye.w is the very determinant the eye is divided by.
|
|
150
|
+
*/
|
|
151
|
+
if (!(stretch.y > 0.0) || !(eye.w > 0.0)) {
|
|
147
152
|
atomicAdd(
|
|
148
153
|
&feedback[params.stats_base + ${VGEO_CUT_STAT.INSTANCES_DROPPED}u], 1u
|
|
149
154
|
);
|
|
@@ -167,11 +172,6 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
|
|
|
167
172
|
return;
|
|
168
173
|
}
|
|
169
174
|
|
|
170
|
-
let to_object = mat4_inverse(node.global);
|
|
171
|
-
|
|
172
|
-
// the camera's position in this instance's object space, out of the camera's own world transform
|
|
173
|
-
let eye = to_object * vec4<f32>(camera.transform[3].xyz, 1.0);
|
|
174
|
-
|
|
175
175
|
vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE}u, eye.x / eye.w);
|
|
176
176
|
vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 1}u, eye.y / eye.w);
|
|
177
177
|
vg_store(base, ${VGEO_INSTANCE_OFFSET.EYE + 2}u, eye.z / eye.w);
|
|
@@ -216,7 +216,6 @@ fn main(@builtin(global_invocation_id) global_id: vec3<u32>) {
|
|
|
216
216
|
`, [
|
|
217
217
|
chunk_scene_database_access,
|
|
218
218
|
chunk_vgeo_cut_instance,
|
|
219
|
-
chunk_mat4_inverse,
|
|
220
219
|
]);
|
|
221
220
|
|
|
222
221
|
export const shader_vgeo_cut_collect = ComputeShader.from({
|
package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_brick4_debug_draw.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_brick4_debug_draw.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_debug_draw.js"],"names":[],"mappings":"AAwEA,mDAUE;4BAvE0B,mCAAmC"}
|
|
@@ -5,6 +5,9 @@ import {
|
|
|
5
5
|
} from "../../../../shader/chunk/camera/chunk_project_position_from_depth.js";
|
|
6
6
|
import { chunk_mat4_extract_position } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
7
7
|
import { chunk_decode_g_buffer_normal } from "../../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
8
|
+
import {
|
|
9
|
+
chunk_decode_g_buffer_face_normal
|
|
10
|
+
} from "../../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_face_normal.js";
|
|
8
11
|
import { CodeChunk } from "../../../../shader/compiler/CodeChunk.js";
|
|
9
12
|
import { ImageShader } from "../../../../shader/ImageShader.js";
|
|
10
13
|
import { ShaderResourceSetDescriptor } from "../../../../shader/resource/ShaderResourceSetDescriptor.js";
|
|
@@ -17,6 +20,7 @@ const resources = new ShaderResourceSetDescriptor();
|
|
|
17
20
|
resources.createGroup()
|
|
18
21
|
.addTexture("tDepth")
|
|
19
22
|
.addTexture("tNormals", "uint")
|
|
23
|
+
.addTexture("tPBR")
|
|
20
24
|
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
21
25
|
|
|
22
26
|
resources.createGroup()
|
|
@@ -45,10 +49,9 @@ fn main(
|
|
|
45
49
|
|
|
46
50
|
let view_direction = normalize(camera_position_ws - position_ws);
|
|
47
51
|
|
|
48
|
-
let g_buffer_sample_normal = textureLoad(tNormals, i_coord, 0);
|
|
49
52
|
|
|
50
|
-
let shading_normal = decode_g_buffer_normal(
|
|
51
|
-
let geometric_normal =
|
|
53
|
+
let shading_normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
|
|
54
|
+
let geometric_normal = decode_g_buffer_face_normal(textureLoad(tPBR, i_coord, 0));
|
|
52
55
|
|
|
53
56
|
let c = brick4_sample(
|
|
54
57
|
position_ws,
|
|
@@ -62,6 +65,7 @@ fn main(
|
|
|
62
65
|
chunk_project_position_from_depth,
|
|
63
66
|
chunk_mat4_extract_position,
|
|
64
67
|
chunk_decode_g_buffer_normal,
|
|
68
|
+
chunk_decode_g_buffer_face_normal,
|
|
65
69
|
chunk_brick4_sample,
|
|
66
70
|
]
|
|
67
71
|
);
|
|
@@ -60,7 +60,7 @@ fn main(
|
|
|
60
60
|
|
|
61
61
|
let g_buffer_sample_normal = textureLoad(tBentNormals, i_coord, 0);
|
|
62
62
|
|
|
63
|
-
let bent_normal = decode_g_buffer_normal(g_buffer_sample_normal.
|
|
63
|
+
let bent_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
|
|
64
64
|
|
|
65
65
|
let node = brick4_node_by_position(position_ws);
|
|
66
66
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_brick4_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_brick4_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js"],"names":[],"mappings":"AA4MA,0DAwBE;4BA5M0B,mCAAmC"}
|
package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_indirect_lighting.js
CHANGED
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
import { chunk_mat4_extract_position } from "../../../../shader/chunk/geometry/mat4/chunk_mat4_extract_position.js";
|
|
11
11
|
import { chunk_decode_g_buffer_normal } from "../../../../shader/chunk/geometry/normal/chunk_decode_g_buffer_normal.js";
|
|
12
12
|
import { chunk_compute_indirect_specular } from "../../../../shader/chunk/material/chunk_compute_indirect_specular.js";
|
|
13
|
+
import { chunk_decode_g_buffer_albedo } from "../../../../shader/chunk/material/chunk_decode_g_buffer_albedo.js";
|
|
13
14
|
import { chunk_decode_g_buffer_metalness } from "../../../../shader/chunk/material/chunk_decode_g_buffer_metalness.js";
|
|
14
15
|
import { chunk_decode_g_buffer_roughness } from "../../../../shader/chunk/material/chunk_decode_g_buffer_roughness.js";
|
|
15
16
|
import { chunk_metalness_to_specular_color } from "../../../../shader/chunk/material/chunk_metalness_to_specular_color.js";
|
|
@@ -70,7 +71,7 @@ fn main(
|
|
|
70
71
|
let g_buffer_sample_normal = textureLoad(tGBufferNormals, i_coord, 0);
|
|
71
72
|
let g_buffer_bent_normal = textureLoad(tBentNormals, i_coord, 0);
|
|
72
73
|
|
|
73
|
-
let albedo = albedo_ao_sample.rgb;
|
|
74
|
+
let albedo = decode_g_buffer_albedo(albedo_ao_sample.rgb);
|
|
74
75
|
let occlusion = albedo_ao_sample.a;
|
|
75
76
|
|
|
76
77
|
let f_metalness = decode_g_buffer_metalness(texel_pbr);
|
|
@@ -83,8 +84,8 @@ fn main(
|
|
|
83
84
|
let material_specularF0 = metalness_to_specular_color(f_metalness, albedo);
|
|
84
85
|
let material_specularF90 = 1.0;
|
|
85
86
|
|
|
86
|
-
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.
|
|
87
|
-
let bent_normal = decode_g_buffer_normal(g_buffer_bent_normal.
|
|
87
|
+
let shading_normal = decode_g_buffer_normal(g_buffer_sample_normal.x);
|
|
88
|
+
let bent_normal = decode_g_buffer_normal(g_buffer_bent_normal.x);
|
|
88
89
|
|
|
89
90
|
let position_ws = project_position_from_depth(uv, texel_depth, camera.view_projection_matrix_inverse);
|
|
90
91
|
let camera_position_ws = mat4_extract_position(camera.transform);
|
|
@@ -181,6 +182,7 @@ fn main(
|
|
|
181
182
|
chunk_project_position_from_depth,
|
|
182
183
|
chunk_mat4_extract_position,
|
|
183
184
|
chunk_decode_g_buffer_normal,
|
|
185
|
+
chunk_decode_g_buffer_albedo,
|
|
184
186
|
chunk_decode_g_buffer_metalness,
|
|
185
187
|
chunk_decode_g_buffer_roughness,
|
|
186
188
|
chunk_metalness_to_specular_color,
|
package/src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_brick4_specular.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_brick4_specular.d.ts","sourceRoot":"","sources":["../../../../../../../../src/shade/renderer/global_illumination/brick4/gpu/draw/shader_brick4_specular.js"],"names":[],"mappings":"AAsEA,iDAaE;4BAzE0B,mCAAmC"}
|
|
@@ -48,10 +48,8 @@ fn main(
|
|
|
48
48
|
|
|
49
49
|
let view_direction = normalize(camera_position_ws - position_ws);
|
|
50
50
|
|
|
51
|
-
let g_buffer_sample_normal = textureLoad(tNormals, i_coord, 0);
|
|
52
51
|
|
|
53
|
-
let shading_normal = decode_g_buffer_normal(
|
|
54
|
-
let geometric_normal = decode_g_buffer_normal(g_buffer_sample_normal.zw);
|
|
52
|
+
let shading_normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
|
|
55
53
|
|
|
56
54
|
let roughness = decode_g_buffer_roughness(textureLoad(tPBR, i_coord, 0));
|
|
57
55
|
|
|
@@ -23,7 +23,7 @@ fn main(
|
|
|
23
23
|
) -> @location(0) vec4<f32> {
|
|
24
24
|
let coord_i = vec2u(coord.xy);
|
|
25
25
|
|
|
26
|
-
let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).
|
|
26
|
+
let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).x;
|
|
27
27
|
|
|
28
28
|
let bent_normal = decode_g_buffer_normal(bent_normal_encoded);
|
|
29
29
|
|
|
@@ -35,12 +35,12 @@ fn main(
|
|
|
35
35
|
|
|
36
36
|
let roughness = decode_g_buffer_roughness(texel_pbr);
|
|
37
37
|
|
|
38
|
-
let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).
|
|
38
|
+
let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).x;
|
|
39
39
|
|
|
40
40
|
let bent_normal = decode_g_buffer_normal(bent_normal_encoded);
|
|
41
41
|
|
|
42
42
|
let shading_normal = decode_g_buffer_normal(
|
|
43
|
-
textureLoad(tNormals, coord_i, 0).
|
|
43
|
+
textureLoad(tNormals, coord_i, 0).x
|
|
44
44
|
);
|
|
45
45
|
|
|
46
46
|
let texel_depth = textureLoad(tDepth,
|
|
@@ -42,7 +42,7 @@ fn main(
|
|
|
42
42
|
|
|
43
43
|
let coord_i = vec2u(coord.xy);
|
|
44
44
|
|
|
45
|
-
let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).
|
|
45
|
+
let bent_normal_encoded = textureLoad(tBentNormals, coord_i, 0).x;
|
|
46
46
|
|
|
47
47
|
let bent_normal = decode_g_buffer_normal(bent_normal_encoded);
|
|
48
48
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUBrickClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js"],"names":[],"mappings":"AA6FA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;
|
|
1
|
+
{"version":3,"file":"GPUBrickClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/brick/GPUBrickClipmap.js"],"names":[],"mappings":"AA6FA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH;;;GAGG;AAEH;;;;;;;;GAQG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH;IAkKI;;;;;;;;OAQG;IACH;QAN2B,aAAa,EAA7B,MAAM;QACU,UAAU,EAA1B,MAAM;QAGU,UAAU,EAA1B,MAAM;OAgGhB;IAxQD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAwPX;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,4BAEC;IAED;;OAEG;IACH,4BAEC;IAED;;;;OAIG;IACH,wBAEC;IAED;;;;;;;OAOG;IACH,mCAQC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;;;;OAMG;IACH,sBAFW,UAAU,MAAM,CAAC,QAiB3B;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAMnB;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAb+B,KAAK,EAAzB,UAAU;QACM,CAAC,EAAjB,MAAM;QACU,CAAC,EAAjB,MAAM;QACU,CAAC,EAAjB,MAAM;QACU,MAAM,EAAtB,MAAM;QAC4B,SAAS,EAA3C,UAAU,aAAa,CAAC;QACiB,gBAAgB,GAAzD,UAAU,mBAAmB,CAAC;QACA,KAAK,EAAnC,eAAe,GAAC,IAAI;QACH,MAAM,GAAvB,MAAM;QAEJ,MAAM,CAiHlB;IAgWD,gBAcC;;CACJ;mCAr9BY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;8BACpF,OAAO,mCAAmC,EAAE,eAAe;;;;;;;WA+C1D,UAAU;;;;WACV,MAAM;;;;;;UACN,MAAM;;;;;aAGN,MAAM;;;;sBAEN,MAAM;;;;;mBAEN,MAAM;;;;gBACN,MAAM;mBACN,MAAM;;;;;;;;;;WAGN,eAAe;;;;;;aAEf,eAAe;;;+BAON,UAAU,QAAE,oBAAoB,KAAG,IAAI;;;;;;;;;iCAUvC,UAAU,QAAE,oBAAoB,KAAG,IAAI;;+BA1G/B,0CAA0C"}
|
|
@@ -260,6 +260,15 @@ export class GPUBrickClipmap {
|
|
|
260
260
|
#starved = 0;
|
|
261
261
|
#grow_pending = false;
|
|
262
262
|
|
|
263
|
+
/** Frames recorded. */
|
|
264
|
+
#frame = 0;
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* The frame the capacity last grew in. A reading recorded before it asked for what that growth gave, so
|
|
268
|
+
* only a count that moved in a frame at or after it grows the capacity again.
|
|
269
|
+
*/
|
|
270
|
+
#grown_frame = -1;
|
|
271
|
+
|
|
263
272
|
#destroyed = false;
|
|
264
273
|
|
|
265
274
|
/** The frame's scroll boxes: the smallest cell and the cascade, then the size and the first thread. */
|
|
@@ -551,6 +560,7 @@ export class GPUBrickClipmap {
|
|
|
551
560
|
if (this.#grow_pending) {
|
|
552
561
|
this.#grow_pending = false;
|
|
553
562
|
this.#grow();
|
|
563
|
+
this.#grown_frame = this.#frame;
|
|
554
564
|
}
|
|
555
565
|
|
|
556
566
|
this.#place(x, y, z);
|
|
@@ -621,6 +631,8 @@ export class GPUBrickClipmap {
|
|
|
621
631
|
store.make_side_effect();
|
|
622
632
|
|
|
623
633
|
// a starved take grows the capacity, from a later frame
|
|
634
|
+
const read_frame = this.#frame;
|
|
635
|
+
|
|
624
636
|
graph_read_buffer({ graph, buffer: store_data.state, offset: 4 * BRICK_STATE_STARVED, size: 4 })
|
|
625
637
|
.then(reference => {
|
|
626
638
|
try {
|
|
@@ -628,7 +640,7 @@ export class GPUBrickClipmap {
|
|
|
628
640
|
|
|
629
641
|
if (!this.#destroyed && starved !== this.#starved) {
|
|
630
642
|
this.#starved = starved;
|
|
631
|
-
this.#grow_pending
|
|
643
|
+
this.#grow_pending ||= read_frame >= this.#grown_frame;
|
|
632
644
|
}
|
|
633
645
|
} finally {
|
|
634
646
|
reference.release();
|
|
@@ -647,6 +659,7 @@ export class GPUBrickClipmap {
|
|
|
647
659
|
}
|
|
648
660
|
|
|
649
661
|
this.#fresh = false;
|
|
662
|
+
this.#frame++;
|
|
650
663
|
|
|
651
664
|
return context.state;
|
|
652
665
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUProbeClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js"],"names":[],"mappings":"AA0HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH;
|
|
1
|
+
{"version":3,"file":"GPUProbeClipmap.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/GPUProbeClipmap.js"],"names":[],"mappings":"AA0HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH;IA2RI;;;;;;;;;;;;;;;;;;;OAmBG;IACH;QAjB2B,aAAa,EAA7B,MAAM;QAEU,UAAU,EAA1B,MAAM;QAKU,OAAO,EAAvB,MAAM;QACU,mBAAmB,EAAnC,MAAM;QAEU,gBAAgB,EAAhC,MAAM;QACW,cAAc,EAA/B,OAAO;QAES,KAAK,EAArB,MAAM;QACU,QAAQ,EAAxB,MAAM;OAmHhB;IA9ZD;;;OAGG;IACH,wBAHU,MAAM,CAGF;IAEd;;;;OAIG;IACH,qBAHU,MAAM,CAGL;IAEX;;;;OAIG;IACH,kBAHU,MAAM,CAGR;IAER;;;;OAIG;IACH,8BAHU,MAAM,CAGI;IAEpB;;;;OAIG;IACH,2BAHU,MAAM,CAGC;IAEjB;;;;;OAKG;IACH,yBAHU,OAAO,CAGF;IAEf;;;;OAIG;IACH,gBAHU,MAAM,CAGV;IAiXN;;;;;;;;OAQG;IACH,4CAUC;IAED;;OAEG;IACH,8BAEC;IAED;;;;;OAKG;IACH,uBAEC;IAED;;;OAGG;IACH,yBAEC;IAED;;;OAGG;IACH,sBAEC;IAGD;;;OAGG;IACH,0BAEC;IAED;;;;;OAKG;IACH,wBAEC;IAED;;;OAGG;IACH,uBAEC;IAED;;;;OAIG;IACH,gBAJW,MAAM,QACN,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,mBAHW,MAAM,GACJ,MAAM,CAIlB;IAED;;;OAGG;IACH,oBAHW,oBAAoB,GAClB,OAAO,CAQnB;IAED;;;;;;;OAOG;IACH,SAJW,MAAM,KACN,MAAM,KACN,MAAM,QAkChB;IAED;;;;;;;;OAQG;IACH,sBAFW,eAAe,QA+BzB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH;QAzB+B,KAAK,EAAzB,UAAU;QACiB,KAAK,EAAhC,iBAAiB;QACD,eAAe,EAA/B,MAAM;QACU,UAAU,EAA1B,MAAM;QACU,cAAc,EAA9B,MAAM;QACyD,aAAa,EAA5E,OAAO,6BAA6B,EAAE,eAAe;QAErC,MAAM,EAAtB,MAAM;QAE+D,KAAK,EAA1E,OAAO,mCAAmC,EAAE,eAAe;QAEP,QAAQ,EAA5D;YAAC,cAAc,qBAA0B;SAAC;QAEzB,kBAAkB,EAAnC,OAAO;QAEU,cAAc,EAA/B,OAAO;QAEiC,QAAQ,EAAhD;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC;QAEL,YAAY,EAArC,eAAe;QACU,eAAe,EAAxC,eAAe;QACC,QAAQ,EAAxB,MAAM;aA0OhB;IA6gBD,gBAcC;;CACJ;mCAn9CY,OAAO,4BAA4B,EAAE,oBAAoB;yBACzD,OAAO,iEAAiE,EAAE,UAAU;gCACpF,OAAO,8BAA8B,EAAE,uBAAuB,GAAC,OAAO,2BAA2B,EAAE,oBAAoB"}
|
|
@@ -382,6 +382,12 @@ export class GPUProbeClipmap {
|
|
|
382
382
|
#starved = 0;
|
|
383
383
|
#grow_pending = false;
|
|
384
384
|
|
|
385
|
+
/**
|
|
386
|
+
* The frame the capacity last grew in. A reading recorded before it asked for what that growth gave, so
|
|
387
|
+
* only a count that moved in a frame at or after it grows the capacity again.
|
|
388
|
+
*/
|
|
389
|
+
#grown_frame = -1;
|
|
390
|
+
|
|
385
391
|
/** Frames recorded: the clock the records keep. */
|
|
386
392
|
#frame = 0;
|
|
387
393
|
|
|
@@ -834,6 +840,7 @@ export class GPUProbeClipmap {
|
|
|
834
840
|
if (this.#grow_pending) {
|
|
835
841
|
this.#grow_pending = false;
|
|
836
842
|
this.#grow();
|
|
843
|
+
this.#grown_frame = this.#frame;
|
|
837
844
|
}
|
|
838
845
|
|
|
839
846
|
const trace_capacity = Math.floor(ray_budget / rays_per_probe);
|
|
@@ -1018,6 +1025,8 @@ export class GPUProbeClipmap {
|
|
|
1018
1025
|
update.make_side_effect();
|
|
1019
1026
|
|
|
1020
1027
|
// an admission the free list could not serve grows the capacity, from a later frame
|
|
1028
|
+
const read_frame = this.#frame;
|
|
1029
|
+
|
|
1021
1030
|
graph_read_buffer({ graph, buffer: update_data.counters, offset: 4 * PROBE_COUNTER_STARVED, size: 4 })
|
|
1022
1031
|
.then(reference => {
|
|
1023
1032
|
try {
|
|
@@ -1025,7 +1034,7 @@ export class GPUProbeClipmap {
|
|
|
1025
1034
|
|
|
1026
1035
|
if (!this.#destroyed && starved !== this.#starved) {
|
|
1027
1036
|
this.#starved = starved;
|
|
1028
|
-
this.#grow_pending
|
|
1037
|
+
this.#grow_pending ||= read_frame >= this.#grown_frame;
|
|
1029
1038
|
}
|
|
1030
1039
|
} finally {
|
|
1031
1040
|
reference.release();
|
package/src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_diffuse.js
CHANGED
|
@@ -49,8 +49,8 @@ fn main(
|
|
|
49
49
|
let view_direction = normalize(mat4_extract_position(camera.transform) - position);
|
|
50
50
|
|
|
51
51
|
// the surface's own normal picks, as want chose by it; the bent normal resolves, as IBL's does
|
|
52
|
-
let normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).
|
|
53
|
-
let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, i_coord, 0).
|
|
52
|
+
let normal = decode_g_buffer_normal(textureLoad(tNormals, i_coord, 0).x);
|
|
53
|
+
let bent_normal = decode_g_buffer_normal(textureLoad(tBentNormals, i_coord, 0).x);
|
|
54
54
|
|
|
55
55
|
let noise = stbn_sample_vec2(vec3<u32>(i_coord, view.frame_index));
|
|
56
56
|
let probes = probe_clipmap_sample_sh(position, normal, view_direction, noise);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_probe_clipmap_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_probe_clipmap_indirect_lighting.d.ts","sourceRoot":"","sources":["../../../../../../../src/shade/renderer/global_illumination/probe_clipmap/probe/shader_probe_clipmap_indirect_lighting.js"],"names":[],"mappings":"AA2IA;;;;;;;;;;;;;GAaG;AACH,qDAFU,WAAW,CA0BlB;4BA3JyB,gCAAgC"}
|