@woosh/meep-engine 3.12.0 → 3.13.1
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/core/geom/3d/shape/ConvexHullShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/ConvexHullShape3D.js +41 -25
- package/src/core/geom/3d/shape/PosedShape3D.d.ts.map +1 -1
- package/src/core/geom/3d/shape/PosedShape3D.js +7 -2
- package/src/engine/graphics3/decal/GPUDecalRenderer.js +3 -3
- package/src/engine/graphics3/decal/shader_decal_composite.d.ts.map +1 -1
- package/src/engine/graphics3/decal/shader_decal_composite.js +4 -2
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.d.ts.map +1 -1
- package/src/engine/graphics3/highlight/GPUHighlightRenderer.js +2 -3
- package/src/engine/graphics3/highlight/shader_highlight_outline.js +150 -150
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/RENDERER_CONTRACT.md +2 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts +18 -0
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.d.ts.map +1 -1
- package/src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js +73 -0
- package/src/shade/device/PASS_ENCODER_PROPOSAL_2026_08_31.md +755 -0
- package/src/shade/device/ShadeGPUCommandContext.d.ts +10 -16
- package/src/shade/device/ShadeGPUCommandContext.d.ts.map +1 -1
- package/src/shade/device/ShadeGPUCommandContext.js +801 -994
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts +107 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPUComputePassEncoder.js +222 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts +168 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.d.ts.map +1 -0
- package/src/shade/device/pass/ShadeGPURenderPassEncoder.js +317 -0
- package/src/shade/device/timing/GPUTimerArray.d.ts +4 -9
- package/src/shade/device/timing/GPUTimerArray.d.ts.map +1 -1
- package/src/shade/device/timing/GPUTimerArray.js +261 -289
- package/src/shade/device/timing/GPU_PROFILER_PROPOSAL_2026_08_28.md +20 -2
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts +59 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.d.ts.map +1 -0
- package/src/shade/device/timing/ShadeGPUContextProfiler.js +182 -0
- package/src/shade/device/timing/profile/GPUProfileSession.d.ts +4 -4
- package/src/shade/device/timing/profile/GPUProfileSession.js +4 -4
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_leaf_triangles.js +3 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_points.js +3 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.d.ts.map +1 -1
- package/src/shade/playground/skinned_blas_refit/shader_blas_audit_visibility.js +3 -1
- package/src/shade/playground/skinned_blas_refit/verify_leaf_triangles.js +2 -2
- package/src/shade/playground/skinned_blas_refit/verify_traversal_reachability.js +2 -2
- package/src/shade/renderer/Renderer.d.ts +0 -6
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +0 -29
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +1 -3
- package/src/shade/renderer/animation/shader_animation_tick.d.ts.map +1 -1
- package/src/shade/renderer/animation/shader_animation_tick.js +128 -125
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/GPUMeshSkinningContext.js +8 -18
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_geometry_sphere_derive.js +100 -98
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_reduce.js +215 -212
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_meshlet_bounds_scatter.js +135 -120
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/bounds_refresh/shader_skinned_mesh_bounds_refresh.js +77 -75
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.d.ts.map +1 -1
- package/src/shade/renderer/animation/skinning/shader_meshlet_apply_skinning.js +375 -371
- package/src/shade/renderer/atmosphere/shader_transmittance_lut.js +3 -3
- package/src/shade/renderer/buffer/graph_inspect_gpu_buffer.js +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +14 -19
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/gpu_table_element_upload_shader.js +7 -2
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +325 -319
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.d.ts.map +1 -1
- package/src/shade/renderer/buffer/util/shader_buffer_copy_storage_to_storage.js +3 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +4 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts +2 -2
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.d.ts.map +1 -1
- package/src/shade/renderer/dynamic/GPUDynamicMeshResidency.js +167 -167
- package/src/shade/renderer/fow/GPUFogOfWarRenderer.js +3 -3
- package/src/shade/renderer/fow/shader_fog_of_war.d.ts.map +1 -1
- package/src/shade/renderer/fow/shader_fog_of_war.js +3 -1
- package/src/shade/renderer/geometry/bvh/record_blas_refit.js +102 -102
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.d.ts.map +1 -1
- package/src/shade/renderer/geometry/bvh/shader_blas_refit_leaf_bounds.js +125 -121
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/GPUMeshletManager.js +766 -774
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/shader_meshlet_metadata_address_patch.js +72 -69
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +5 -10
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +129 -129
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_sdf_visualize.js +5 -3
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_probes.js +4 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/shader_brick4_bake_resolve_probes.js +3 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/clipmap/shader_update_clipmap_cascade.js +114 -112
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lpv_store_sh.js +4 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_lvp_atlas_to_sh.js +187 -184
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/convolve/graph_reduce_atlas_to_sh.js +4 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/SpatialHashRadianceCache.js +6 -8
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_evict.js +3 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/sharc/shader/shader_sharc_update.js +3 -1
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/PHASE1_HANDOVER.md +3 -3
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +217 -217
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.js +145 -142
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.js +87 -82
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_refit.js +143 -140
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts +2 -2
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/verify_gpu_bvh_build.js +43 -8
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.js +4 -5
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_histogram.js +88 -84
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/sort/shader_radix_sort_scatter.js +194 -191
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +33 -69
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_any.js +6 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.d.ts.map +1 -1
- package/src/shade/renderer/hiz/shader_hzb_reduce_mip0_clip.js +23 -7
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/execute_filter_environment_map.js +1 -2
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.d.ts.map +1 -1
- package/src/shade/renderer/light/environment/shader_convolve_reflection_map.js +6 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/raster/graph_draw_lightmap_viz_buffer.js +234 -219
- package/src/shade/renderer/lightmap/bake/raster/shader_lightmap_to_viz_buffer.js +2 -2
- package/src/shade/renderer/lightmap/bake/shader_lightmap_denoise_sh.js +191 -191
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/tile/shader_lightmap_accummulate_tile.js +85 -82
- package/src/shade/renderer/particles/graph_particles.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph_particles.js +5 -3
- package/src/shade/renderer/particles/prototypeParticleSystem.js +3 -4
- package/src/shade/renderer/particles/shaders/shader_particle_emit.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_emit.js +132 -117
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_finalize.js +79 -77
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/shader_particle_simulate.js +111 -99
- package/src/shade/renderer/particles/sort/shader_particle_sort.d.ts.map +1 -1
- package/src/shade/renderer/particles/sort/shader_particle_sort.js +187 -158
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +7 -10
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/shader_accumulating_path_tracer.js +4 -1
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/shader_bloom_mix.js +3 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/cas/shader_ffx_rcas.js +4 -2
- package/src/shade/renderer/postprocess/denoise/fragment_shader_denoise_ao.js +147 -147
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/graph_atorus_denoise_luma.js +121 -119
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/graph_postprocess_dof2.js +1 -2
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_far.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_gather_near.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_recombine.js +4 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/gather/shader_dof2_setup.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/graph_postprocess_dof.js +2 -4
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_composite.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_prefilter.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch.js +4 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_raymarch_compute.js +269 -266
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/raymarch/shader_dof_slice_compute.js +273 -270
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/dof/shader_dof_autofocus.js +4 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +8 -11
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/shader_autoexposure_adapt.js +5 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +11 -8
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao_with_irradiance.js +7 -8
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/motion_blur/shader_motion_blur_reconstruct.js +3 -1
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/nss/shader_nss_concat.js +70 -68
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/depth_max_shader.js +70 -68
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_IBL.js +3 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/ssr_resolve_shader_LPV.js +4 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/shader_downsample_encoded_normal.js +103 -101
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_spatial_denoise_shader.js +4 -2
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/ssr_trace_shader.js +3 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/shader_taa.js +4 -1
- package/src/shade/renderer/postprocess/upscale-dither/fragment_shader_upscale_dither.js +5 -5
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/bucket/prepare_meshlet_draw_commands_by_material.js +339 -341
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_mesh_filter_2way.js +114 -109
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/cull/hzb/shader_hzb_meshlet_filter_1way_full.js +118 -115
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/shader_meshlets_extract_bucket.js +69 -65
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +722 -722
- 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 +1 -9
- 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 +1 -6
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +2 -3
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di_denoise.js +1 -2
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_denoise.js +139 -136
- package/src/shade/renderer/restir/di/shader_restir_di_resample.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resample.js +131 -129
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/shader_restir_di_resolve.js +101 -99
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +379 -383
- package/src/shade/renderer/scene/Mesh.d.ts.map +1 -1
- package/src/shade/renderer/scene/Mesh.js +4 -6
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.d.ts.map +1 -1
- package/src/shade/renderer/scene/shader_bvh_extract_instance_leaves.js +147 -144
- package/src/shade/renderer/shader/ComputeShader.d.ts +2 -2
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +14 -17
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts +2 -2
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/pass/RenderPassDescriptor.js +189 -189
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/resource/ShaderResourceSetDescriptor.js +3 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts +16 -7
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/GPUSceneShadowmapContext.js +1342 -1326
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts +13 -0
- package/src/shade/renderer/shadow/map/Shadowmap.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/Shadowmap.js +14 -0
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts +79 -0
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/ShadowmapDrawSelector.js +196 -0
- package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts +91 -0
- package/src/shade/renderer/shadow/map/ShadowmapRegistry.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/ShadowmapRegistry.js +156 -0
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/shader_shadowmap_remap_cube_to_octahedral.js +5 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/shader_shadow_upscale.js +3 -1
- package/src/shade/renderer/shadow/ray/staged/gen/graph_gen_rays.js +73 -73
- 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 +151 -148
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/graph_trace_rays.js +4 -2
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.d.ts.map +1 -1
- package/src/shade/renderer/shadow/ray/staged/trace/shader_trace_rays.js +18 -4
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/CascadedSceneSDF.js +7 -8
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_build_scene_sdf_f32.js +6 -2
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.d.ts.map +1 -1
- package/src/shade/renderer/shadow/sdf/cascade/shader_scene_sdf_debug_viz.js +129 -127
- 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 +5 -3
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.d.ts.map +1 -1
- package/src/shade/renderer/texture/virtual/VirtualTextureManager.js +2 -5
- 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 +233 -231
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +2 -4
- package/src/shade/wgsl/validate_wgsl_source.d.ts.map +1 -1
- package/src/shade/wgsl/validate_wgsl_source.js +8 -3
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts +0 -21
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.d.ts.map +0 -1
- package/src/shade/device/timing/profile/make_profiling_pass_encoder.js +0 -114
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts +0 -20
- package/src/shade/device/timing/profile/parse_workgroup_size.d.ts.map +0 -1
- package/src/shade/device/timing/profile/parse_workgroup_size.js +0 -43
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConvexHullShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/ConvexHullShape3D.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IA8CI;;;;;;;OAOG;IACH,sBAJW,YAAY,WACZ,WAAW,GACT,iBAAiB,CAQ7B;IA1DD;;;;OAIG;IACH,UAFU,YAAY,CAES;IAE/B;;;;OAIG;IACH,SAFU,WAAW,CAEQ;IAE7B;;;;;;OAMG;IACH,cAFU,WAAW,CAEa;IAElC,0BAA0B;IAC1B,YADW,WAAW,CACU;IAEhC;;;;;;OAMG;IACH,iBAA+B;IAE/B,oCAAoC;IACpC,eAA6B;IAE7B,8BAA8B;IAC9B,iBAAa;IAEb,8BAA8B;IAC9B,uBAAmB;IAkBnB;;;OAGG;IACH,
|
|
1
|
+
{"version":3,"file":"ConvexHullShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/ConvexHullShape3D.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH;IA8CI;;;;;;;OAOG;IACH,sBAJW,YAAY,WACZ,WAAW,GACT,iBAAiB,CAQ7B;IA1DD;;;;OAIG;IACH,UAFU,YAAY,CAES;IAE/B;;;;OAIG;IACH,SAFU,WAAW,CAEQ;IAE7B;;;;;;OAMG;IACH,cAFU,WAAW,CAEa;IAElC,0BAA0B;IAC1B,YADW,WAAW,CACU;IAEhC;;;;;;OAMG;IACH,iBAA+B;IAE/B,oCAAoC;IACpC,eAA6B;IAE7B,8BAA8B;IAC9B,iBAAa;IAEb,8BAA8B;IAC9B,uBAAmB;IAkBnB;;;OAGG;IACH,kBAkFC;IAUD,wCAQC;IAED;;;;;OAKG;IACH,qGAwCC;IAED;;;;;;;;OAQG;IACH,yCAEC;IAED;;;;OAIG;IACH,wCAEC;IAED,qCAkBC;IAED;;;OAGG;IACH,oCAgBC;IAED;;;OAGG;IACH,6CAiBC;IAED,mEAEC;IAED,4DAwBC;IAGD;;;OAGG;IACH,cAHW,iBAAiB,GACf,OAAO,CAanB;IAcL;;;;OAIG;IACH,8BAFU,OAAO,CAE8B;CAP9C;gCAtY+B,sBAAsB"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { hash_mix2 } from "../../../math/hash/hash_mix2.js";
|
|
2
2
|
import { computeHashFloat } from "../../../primitives/numbers/computeHashFloat.js";
|
|
3
|
+
import { aabb3_from_v3_array } from "../aabb/aabb3_from_v3_array.js";
|
|
4
|
+
import { convex_polyhedron3_raycast } from "../polyhedron/convex_polyhedron3_raycast.js";
|
|
3
5
|
import { tri3_closest_point } from "../triangle/tri3_closest_point.js";
|
|
4
6
|
import { AbstractShape3D } from "./AbstractShape3D.js";
|
|
5
7
|
import { compute_signed_distance_gradient_by_sampling } from "./util/compute_signed_distance_gradient_by_sampling.js";
|
|
6
|
-
import { aabb3_from_v3_array } from "../aabb/aabb3_from_v3_array.js";
|
|
7
|
-
import { convex_polyhedron3_raycast } from "../polyhedron/convex_polyhedron3_raycast.js";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Convex polyhedron collider.
|
|
@@ -161,9 +161,13 @@ export class ConvexHullShape3D extends AbstractShape3D {
|
|
|
161
161
|
// Σ a·n === Σ (a − o)·n over a closed surface, since Σ n = 0.
|
|
162
162
|
vol6 += (ax - ox) * nx + (ay - oy) * ny + (az - oz) * nz;
|
|
163
163
|
|
|
164
|
-
nx /= len;
|
|
164
|
+
nx /= len;
|
|
165
|
+
ny /= len;
|
|
166
|
+
nz /= len;
|
|
165
167
|
const o = f * 4;
|
|
166
|
-
planes[o] = nx;
|
|
168
|
+
planes[o] = nx;
|
|
169
|
+
planes[o + 1] = ny;
|
|
170
|
+
planes[o + 2] = nz;
|
|
167
171
|
planes[o + 3] = nx * ax + ny * ay + nz * az;
|
|
168
172
|
}
|
|
169
173
|
this.__planes = planes;
|
|
@@ -178,13 +182,22 @@ export class ConvexHullShape3D extends AbstractShape3D {
|
|
|
178
182
|
this.face_loops = idx;
|
|
179
183
|
}
|
|
180
184
|
|
|
181
|
-
get volume() {
|
|
182
|
-
|
|
185
|
+
get volume() {
|
|
186
|
+
return this.__volume;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
get surface_area() {
|
|
190
|
+
return this.__surface_area;
|
|
191
|
+
}
|
|
183
192
|
|
|
184
193
|
compute_bounding_box(result) {
|
|
185
194
|
const b = this.__bbox;
|
|
186
|
-
result[0] = b[0];
|
|
187
|
-
result[
|
|
195
|
+
result[0] = b[0];
|
|
196
|
+
result[1] = b[1];
|
|
197
|
+
result[2] = b[2];
|
|
198
|
+
result[3] = b[3];
|
|
199
|
+
result[4] = b[4];
|
|
200
|
+
result[5] = b[5];
|
|
188
201
|
}
|
|
189
202
|
|
|
190
203
|
/**
|
|
@@ -201,9 +214,9 @@ export class ConvexHullShape3D extends AbstractShape3D {
|
|
|
201
214
|
) {
|
|
202
215
|
|
|
203
216
|
const v = this.vertices;
|
|
204
|
-
const
|
|
217
|
+
const vertex_array_length = v.length;
|
|
205
218
|
|
|
206
|
-
if (
|
|
219
|
+
if (vertex_array_length === 0) {
|
|
207
220
|
|
|
208
221
|
result[result_offset] = 0;
|
|
209
222
|
result[result_offset + 1] = 0;
|
|
@@ -212,27 +225,27 @@ export class ConvexHullShape3D extends AbstractShape3D {
|
|
|
212
225
|
return;
|
|
213
226
|
}
|
|
214
227
|
|
|
215
|
-
let
|
|
216
|
-
let
|
|
228
|
+
let best_distance = -Infinity;
|
|
229
|
+
let best_offset = 0;
|
|
217
230
|
|
|
218
|
-
for (let
|
|
231
|
+
for (let offset = 0; offset < vertex_array_length; offset += 3) {
|
|
219
232
|
|
|
220
|
-
const v_x = v[
|
|
221
|
-
const v_y = v[
|
|
222
|
-
const v_z = v[
|
|
233
|
+
const v_x = v[offset];
|
|
234
|
+
const v_y = v[offset + 1];
|
|
235
|
+
const v_z = v[offset + 2];
|
|
223
236
|
|
|
224
237
|
const d = direction_x * v_x + direction_y * v_y + direction_z * v_z;
|
|
225
238
|
|
|
226
|
-
if (d >
|
|
227
|
-
|
|
228
|
-
|
|
239
|
+
if (d > best_distance) {
|
|
240
|
+
best_distance = d;
|
|
241
|
+
best_offset = offset;
|
|
229
242
|
}
|
|
230
243
|
|
|
231
244
|
}
|
|
232
245
|
|
|
233
|
-
result[result_offset] = v[
|
|
234
|
-
result[result_offset + 1] = v[
|
|
235
|
-
result[result_offset + 2] = v[
|
|
246
|
+
result[result_offset] = v[best_offset];
|
|
247
|
+
result[result_offset + 1] = v[best_offset + 1];
|
|
248
|
+
result[result_offset + 2] = v[best_offset + 2];
|
|
236
249
|
}
|
|
237
250
|
|
|
238
251
|
/**
|
|
@@ -342,10 +355,14 @@ export class ConvexHullShape3D extends AbstractShape3D {
|
|
|
342
355
|
const d2 = tri3_closest_point(scratch_closest, 0, px, py, pz, ax, ay, az, bx, by, bz, cx, cy, cz);
|
|
343
356
|
if (d2 < best_d2) {
|
|
344
357
|
best_d2 = d2;
|
|
345
|
-
bx_ = scratch_closest[0];
|
|
358
|
+
bx_ = scratch_closest[0];
|
|
359
|
+
by_ = scratch_closest[1];
|
|
360
|
+
bz_ = scratch_closest[2];
|
|
346
361
|
}
|
|
347
362
|
}
|
|
348
|
-
result[0] = bx_;
|
|
363
|
+
result[0] = bx_;
|
|
364
|
+
result[1] = by_;
|
|
365
|
+
result[2] = bz_;
|
|
349
366
|
}
|
|
350
367
|
|
|
351
368
|
|
|
@@ -387,4 +404,3 @@ ConvexHullShape3D.prototype.isConvexHullShape3D = true;
|
|
|
387
404
|
|
|
388
405
|
// closest-point-on-triangle output for the surface-scan query helpers
|
|
389
406
|
const scratch_closest = new Float64Array(3);
|
|
390
|
-
const scratch_point = new Float64Array(3);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PosedShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/PosedShape3D.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAEI,mCAAmC;IACnC,OADW,eAAe,GAAC,IAAI,CAClB;IAEb,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IAEP;;;;;;;OAOG;IACH,aAJW,eAAe,YACf,UAAQ;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,YACpC,aAAW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAM1D;
|
|
1
|
+
{"version":3,"file":"PosedShape3D.d.ts","sourceRoot":"","sources":["../../../../../../src/core/geom/3d/shape/PosedShape3D.js"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;;GAmBG;AACH;IAEI,mCAAmC;IACnC,OADW,eAAe,GAAC,IAAI,CAClB;IAEb,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IACP,WAAO;IAEP;;;;;;;OAOG;IACH,aAJW,eAAe,YACf,UAAQ;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,YACpC,aAAW;QAAC,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAC;QAAA,CAAC,EAAC,MAAM,CAAA;KAAC,QAM1D;IAyED,wCASC;IA4BD;;;;;;;OAOG;IACH,gCAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,GAChC,MAAM,CAKlB;IAED;;;;;OAKG;IACH,sBAHW,MAAM,EAAE,GAAC,YAAY,GAAC,YAAY,GAChC,OAAO,CAKnB;IAGL;;;;OAIG;IACH,yBAFU,OAAO,CAEoB;;CAPpC;gCAvL+B,sBAAsB"}
|
|
@@ -86,7 +86,10 @@ export class PosedShape3D extends AbstractShape3D {
|
|
|
86
86
|
// inline here at the cost of ~7 extra lines per direction.
|
|
87
87
|
// See core/geom/vec3/v3_quat3_apply.js for the canonical form
|
|
88
88
|
// — this is a literal expansion of it.
|
|
89
|
-
const qx = this.qx
|
|
89
|
+
const qx = this.qx;
|
|
90
|
+
const qy = this.qy;
|
|
91
|
+
const qz = this.qz;
|
|
92
|
+
const qw = this.qw;
|
|
90
93
|
|
|
91
94
|
// Rotate world direction into body frame via the conjugate
|
|
92
95
|
// quaternion: v_local = q* · v_world · q. Conjugate xyz are
|
|
@@ -105,7 +108,9 @@ export class PosedShape3D extends AbstractShape3D {
|
|
|
105
108
|
|
|
106
109
|
// Rotate the body-local support point back to world: v_world =
|
|
107
110
|
// q · v_local · q*.
|
|
108
|
-
const lsx = scratch_local[0]
|
|
111
|
+
const lsx = scratch_local[0];
|
|
112
|
+
const lsy = scratch_local[1];
|
|
113
|
+
const lsz = scratch_local[2];
|
|
109
114
|
|
|
110
115
|
const tsx = qw * lsx + qy * lsz - qz * lsy;
|
|
111
116
|
const tsy = qw * lsy + qz * lsx - qx * lsz;
|
|
@@ -10,7 +10,7 @@ import { TextureFilterType } from "../../../shade/renderer/texture/TextureFilter
|
|
|
10
10
|
import { SAMPLER_LINEAR_UPSCALE } from "../../../shade/renderer/texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
11
11
|
import { graph_build_decal_clusters } from "./graph_build_decal_clusters.js";
|
|
12
12
|
import { DECAL_RECORD_WORD_COUNT } from "./DECAL_GPU_RECORD.js";
|
|
13
|
-
import {
|
|
13
|
+
import { shader_decal_composite } from "./shader_decal_composite.js";
|
|
14
14
|
import { build_light_cluster_parameters } from "../../../shade/renderer/light/cluster/build_light_cluster_parameters.js";
|
|
15
15
|
import { DECAL_CLUSTER_RESOLUTION_Z } from "./DECAL_CLUSTER.js";
|
|
16
16
|
|
|
@@ -190,12 +190,12 @@ export class GPUDecalRenderer {
|
|
|
190
190
|
const encoder = context.encoder;
|
|
191
191
|
const graphics = context.graphics;
|
|
192
192
|
|
|
193
|
-
const settings =
|
|
193
|
+
const settings = {
|
|
194
194
|
cluster_params,
|
|
195
195
|
screen_resolution: resolution,
|
|
196
196
|
distance_min: camera.camera.near,
|
|
197
197
|
distance_max: camera.camera.far,
|
|
198
|
-
}
|
|
198
|
+
};
|
|
199
199
|
|
|
200
200
|
const sampler = graphics.samplers.obtain(SAMPLER_LINEAR_UPSCALE);
|
|
201
201
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AA8DA,oDAKG;
|
|
1
|
+
{"version":3,"file":"shader_decal_composite.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/decal/shader_decal_composite.js"],"names":[],"mappings":"AA8DA,oDAKG;AAqSH;;;;;;;;;;;;GAYG;AACH,qCAFU,WAAW,CAclB;6BAtV0B,qDAAqD;4BAPtD,+CAA+C"}
|
|
@@ -69,9 +69,11 @@ export const DECAL_COMPOSITE_SETTINGS = WebGPUStruct.from({
|
|
|
69
69
|
|
|
70
70
|
const resources = new ShaderResourceSetDescriptor();
|
|
71
71
|
|
|
72
|
+
// per-draw, 32 bytes, read-only: immediate data rather than a uniform buffer. camera stays bound.
|
|
73
|
+
resources.setImmediate("settings", DECAL_COMPOSITE_SETTINGS);
|
|
74
|
+
|
|
72
75
|
resources.createGroup()
|
|
73
|
-
.addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
74
|
-
.addUniform("settings", DECAL_COMPOSITE_SETTINGS);
|
|
76
|
+
.addUniform("camera", CAMERA_UNIFORM_STRUCT);
|
|
75
77
|
|
|
76
78
|
/*
|
|
77
79
|
The two integer targets are declared as such, exactly as `shader_deferred_main` declares the same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUHighlightRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/highlight/GPUHighlightRenderer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUHighlightRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/engine/graphics3/highlight/GPUHighlightRenderer.js"],"names":[],"mappings":"AAiBA;;;;;;GAMG;AACH;IAWI;;;;;;;;;OASG;IACH;QAN8B,KAAK;QACN,KAAK,EAAvB,WAAW;QACE,UAAU,EAAvB,MAAM;QACO,SAAS,EAAtB,MAAM;QACJ,MAAM,CA+BlB;IAmED,gBAOC;;CACJ"}
|
|
@@ -3,7 +3,6 @@ import { round_up } from "../../../core/math/round_up.js";
|
|
|
3
3
|
import { SceneColor } from "../../../shade/renderer/extension/SceneColor.js";
|
|
4
4
|
import { ViewTextures } from "../../../shade/renderer/extension/ViewTextures.js";
|
|
5
5
|
import {
|
|
6
|
-
HIGHLIGHT_OUTLINE_SETTINGS,
|
|
7
6
|
shader_highlight_outline
|
|
8
7
|
} from "./shader_highlight_outline.js";
|
|
9
8
|
|
|
@@ -88,11 +87,11 @@ export class GPUHighlightRenderer {
|
|
|
88
87
|
|
|
89
88
|
const color = resources.get(data.color);
|
|
90
89
|
|
|
91
|
-
const settings =
|
|
90
|
+
const settings = {
|
|
92
91
|
screen_resolution: resolution,
|
|
93
92
|
table_size,
|
|
94
93
|
thickness
|
|
95
|
-
}
|
|
94
|
+
};
|
|
96
95
|
|
|
97
96
|
shader_highlight_outline.draw({
|
|
98
97
|
encoder,
|
|
@@ -1,150 +1,150 @@
|
|
|
1
|
-
import { BlendState } from "../../../shade/descriptor/blend/BlendState.js";
|
|
2
|
-
import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
|
|
3
|
-
import { ImageShader } from "../../../shade/renderer/shader/ImageShader.js";
|
|
4
|
-
import {
|
|
5
|
-
ShaderResourceSetDescriptor
|
|
6
|
-
} from "../../../shade/renderer/shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
-
import { ShaderDescriptor } from "../../../shade/renderer/shader/ShaderDescriptor.js";
|
|
8
|
-
import { f32, u32, vec2u } from "../../../shade/renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
|
-
import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
|
|
10
|
-
import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
|
|
11
|
-
import { chunk_highlight_lookup } from "./chunk_highlight_lookup.js";
|
|
12
|
-
|
|
13
|
-
export const HIGHLIGHT_OUTLINE_SETTINGS = WebGPUStruct.from({
|
|
14
|
-
screen_resolution: vec2u,
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* How many rows the lookup table has, which is one past the highest mesh row that was
|
|
18
|
-
* highlighted when it was packed.
|
|
19
|
-
*/
|
|
20
|
-
table_size: u32,
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Outline width in pixels.
|
|
24
|
-
*/
|
|
25
|
-
thickness: f32,
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
resources.createGroup()
|
|
34
|
-
.addTexture("viz_mesh", "uint");
|
|
35
|
-
|
|
36
|
-
resources.createGroup()
|
|
37
|
-
.addStorageBuffer("highlight_table", WebGPUArray.u32);
|
|
38
|
-
|
|
39
|
-
const body = CodeChunk.from(
|
|
40
|
-
//language=WGSL
|
|
41
|
-
`
|
|
42
|
-
@fragment
|
|
43
|
-
fn main(
|
|
44
|
-
@builtin(position) coord : vec4<f32>,
|
|
45
|
-
) -> @location(0) vec4<f32> {
|
|
46
|
-
|
|
47
|
-
let here = vec2<i32>(coord.xy);
|
|
48
|
-
|
|
49
|
-
let resolution = vec2<i32>(settings.screen_resolution);
|
|
50
|
-
|
|
51
|
-
let table_size = settings.table_size;
|
|
52
|
-
|
|
53
|
-
let own = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, here, 0).r, table_size);
|
|
54
|
-
|
|
55
|
-
/*
|
|
56
|
-
The outline sits **outside** the silhouette. A pixel that is itself the highlighted mesh is left
|
|
57
|
-
alone — a highlight marks a unit without painting over it, which is the whole reason the legacy
|
|
58
|
-
path dilated its mask outwards before compositing.
|
|
59
|
-
*/
|
|
60
|
-
if (own.a > 0.0) {
|
|
61
|
-
discard;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
let thickness = settings.thickness;
|
|
65
|
-
|
|
66
|
-
let radius = i32(ceil(thickness));
|
|
67
|
-
|
|
68
|
-
/*
|
|
69
|
-
The strongest highlight within reach, by coverage. Nearest would need a second comparison and
|
|
70
|
-
would look the same: two highlights close enough to overlap an outline this thin are the same
|
|
71
|
-
size on screen, and the brighter one is the one the eye follows.
|
|
72
|
-
*/
|
|
73
|
-
var found = vec4<f32>(0.0);
|
|
74
|
-
|
|
75
|
-
for (var dy = -radius; dy <= radius; dy++) {
|
|
76
|
-
for (var dx = -radius; dx <= radius; dx++) {
|
|
77
|
-
let offset = vec2<f32>(f32(dx), f32(dy));
|
|
78
|
-
|
|
79
|
-
// a disc rather than a square, so the outline is the same width in every direction
|
|
80
|
-
if (dot(offset, offset) > thickness * thickness) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
let at = here + vec2<i32>(dx, dy);
|
|
85
|
-
|
|
86
|
-
if (any(at < vec2<i32>(0)) || any(at >= resolution)) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
let neighbour = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, at, 0).r, table_size);
|
|
91
|
-
|
|
92
|
-
if (neighbour.a > found.a) {
|
|
93
|
-
found = neighbour;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
if (found.a <= 0.0) {
|
|
99
|
-
discard;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// premultiplied, which is how the table stores it and how the blend state consumes it
|
|
103
|
-
return found;
|
|
104
|
-
}
|
|
105
|
-
`, [
|
|
106
|
-
chunk_highlight_lookup
|
|
107
|
-
]
|
|
108
|
-
);
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Paints an outline around every highlighted mesh, straight off the visibility buffer.
|
|
112
|
-
*
|
|
113
|
-
* **There is no second geometry pass, no dilation and no blur.** The renderer this replaces drew
|
|
114
|
-
* every highlighted object again into an id target of its own, ping-ponged two render targets to
|
|
115
|
-
* dilate the mask, blurred it, and decoded ids back to colours to composite — five render targets, a
|
|
116
|
-
* duplicated scene graph and its own skinned material variant. Shade already writes a per-pixel mesh
|
|
117
|
-
* id while drawing the frame, so an outline is a neighbourhood test on an integer texture and
|
|
118
|
-
* nothing more.
|
|
119
|
-
*
|
|
120
|
-
* **What that costs is the contract change in D27**: the visibility buffer knows only what was
|
|
121
|
-
* rasterized, so a unit standing behind a building is outlined where it can be seen and nowhere
|
|
122
|
-
* else. The old mask was drawn with the depth buffer cleared and showed through everything.
|
|
123
|
-
*
|
|
124
|
-
* @type {ImageShader}
|
|
125
|
-
*/
|
|
126
|
-
export const shader_highlight_outline = ImageShader.from({
|
|
127
|
-
descriptor: ShaderDescriptor.from({
|
|
128
|
-
label: "Highlight outline",
|
|
129
|
-
resources,
|
|
130
|
-
body
|
|
131
|
-
}),
|
|
132
|
-
targets: [
|
|
133
|
-
{
|
|
134
|
-
label: "outlined",
|
|
135
|
-
format: "rgba16float",
|
|
136
|
-
blend: BlendState.from({
|
|
137
|
-
color: {
|
|
138
|
-
operation: "add",
|
|
139
|
-
srcFactor: "one",
|
|
140
|
-
dstFactor: "one-minus-src-alpha"
|
|
141
|
-
},
|
|
142
|
-
alpha: {
|
|
143
|
-
operation: "add",
|
|
144
|
-
srcFactor: "one",
|
|
145
|
-
dstFactor: "one-minus-src-alpha"
|
|
146
|
-
}
|
|
147
|
-
})
|
|
148
|
-
}
|
|
149
|
-
]
|
|
150
|
-
});
|
|
1
|
+
import { BlendState } from "../../../shade/descriptor/blend/BlendState.js";
|
|
2
|
+
import { CodeChunk } from "../../../shade/renderer/shader/compiler/CodeChunk.js";
|
|
3
|
+
import { ImageShader } from "../../../shade/renderer/shader/ImageShader.js";
|
|
4
|
+
import {
|
|
5
|
+
ShaderResourceSetDescriptor
|
|
6
|
+
} from "../../../shade/renderer/shader/resource/ShaderResourceSetDescriptor.js";
|
|
7
|
+
import { ShaderDescriptor } from "../../../shade/renderer/shader/ShaderDescriptor.js";
|
|
8
|
+
import { f32, u32, vec2u } from "../../../shade/renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
9
|
+
import { WebGPUArray } from "../../../shade/renderer/shader/type/WebGPUArray.js";
|
|
10
|
+
import { WebGPUStruct } from "../../../shade/renderer/shader/type/WebGPUStruct.js";
|
|
11
|
+
import { chunk_highlight_lookup } from "./chunk_highlight_lookup.js";
|
|
12
|
+
|
|
13
|
+
export const HIGHLIGHT_OUTLINE_SETTINGS = WebGPUStruct.from({
|
|
14
|
+
screen_resolution: vec2u,
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* How many rows the lookup table has, which is one past the highest mesh row that was
|
|
18
|
+
* highlighted when it was packed.
|
|
19
|
+
*/
|
|
20
|
+
table_size: u32,
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Outline width in pixels.
|
|
24
|
+
*/
|
|
25
|
+
thickness: f32,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
29
|
+
|
|
30
|
+
// per-draw, 16 bytes, read-only: immediate data rather than a uniform buffer
|
|
31
|
+
resources.setImmediate("settings", HIGHLIGHT_OUTLINE_SETTINGS);
|
|
32
|
+
|
|
33
|
+
resources.createGroup()
|
|
34
|
+
.addTexture("viz_mesh", "uint");
|
|
35
|
+
|
|
36
|
+
resources.createGroup()
|
|
37
|
+
.addStorageBuffer("highlight_table", WebGPUArray.u32);
|
|
38
|
+
|
|
39
|
+
const body = CodeChunk.from(
|
|
40
|
+
//language=WGSL
|
|
41
|
+
`
|
|
42
|
+
@fragment
|
|
43
|
+
fn main(
|
|
44
|
+
@builtin(position) coord : vec4<f32>,
|
|
45
|
+
) -> @location(0) vec4<f32> {
|
|
46
|
+
|
|
47
|
+
let here = vec2<i32>(coord.xy);
|
|
48
|
+
|
|
49
|
+
let resolution = vec2<i32>(settings.screen_resolution);
|
|
50
|
+
|
|
51
|
+
let table_size = settings.table_size;
|
|
52
|
+
|
|
53
|
+
let own = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, here, 0).r, table_size);
|
|
54
|
+
|
|
55
|
+
/*
|
|
56
|
+
The outline sits **outside** the silhouette. A pixel that is itself the highlighted mesh is left
|
|
57
|
+
alone — a highlight marks a unit without painting over it, which is the whole reason the legacy
|
|
58
|
+
path dilated its mask outwards before compositing.
|
|
59
|
+
*/
|
|
60
|
+
if (own.a > 0.0) {
|
|
61
|
+
discard;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
let thickness = settings.thickness;
|
|
65
|
+
|
|
66
|
+
let radius = i32(ceil(thickness));
|
|
67
|
+
|
|
68
|
+
/*
|
|
69
|
+
The strongest highlight within reach, by coverage. Nearest would need a second comparison and
|
|
70
|
+
would look the same: two highlights close enough to overlap an outline this thin are the same
|
|
71
|
+
size on screen, and the brighter one is the one the eye follows.
|
|
72
|
+
*/
|
|
73
|
+
var found = vec4<f32>(0.0);
|
|
74
|
+
|
|
75
|
+
for (var dy = -radius; dy <= radius; dy++) {
|
|
76
|
+
for (var dx = -radius; dx <= radius; dx++) {
|
|
77
|
+
let offset = vec2<f32>(f32(dx), f32(dy));
|
|
78
|
+
|
|
79
|
+
// a disc rather than a square, so the outline is the same width in every direction
|
|
80
|
+
if (dot(offset, offset) > thickness * thickness) {
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
let at = here + vec2<i32>(dx, dy);
|
|
85
|
+
|
|
86
|
+
if (any(at < vec2<i32>(0)) || any(at >= resolution)) {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
let neighbour = highlight_of_mesh(&highlight_table, textureLoad(viz_mesh, at, 0).r, table_size);
|
|
91
|
+
|
|
92
|
+
if (neighbour.a > found.a) {
|
|
93
|
+
found = neighbour;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (found.a <= 0.0) {
|
|
99
|
+
discard;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// premultiplied, which is how the table stores it and how the blend state consumes it
|
|
103
|
+
return found;
|
|
104
|
+
}
|
|
105
|
+
`, [
|
|
106
|
+
chunk_highlight_lookup
|
|
107
|
+
]
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Paints an outline around every highlighted mesh, straight off the visibility buffer.
|
|
112
|
+
*
|
|
113
|
+
* **There is no second geometry pass, no dilation and no blur.** The renderer this replaces drew
|
|
114
|
+
* every highlighted object again into an id target of its own, ping-ponged two render targets to
|
|
115
|
+
* dilate the mask, blurred it, and decoded ids back to colours to composite — five render targets, a
|
|
116
|
+
* duplicated scene graph and its own skinned material variant. Shade already writes a per-pixel mesh
|
|
117
|
+
* id while drawing the frame, so an outline is a neighbourhood test on an integer texture and
|
|
118
|
+
* nothing more.
|
|
119
|
+
*
|
|
120
|
+
* **What that costs is the contract change in D27**: the visibility buffer knows only what was
|
|
121
|
+
* rasterized, so a unit standing behind a building is outlined where it can be seen and nowhere
|
|
122
|
+
* else. The old mask was drawn with the depth buffer cleared and showed through everything.
|
|
123
|
+
*
|
|
124
|
+
* @type {ImageShader}
|
|
125
|
+
*/
|
|
126
|
+
export const shader_highlight_outline = ImageShader.from({
|
|
127
|
+
descriptor: ShaderDescriptor.from({
|
|
128
|
+
label: "Highlight outline",
|
|
129
|
+
resources,
|
|
130
|
+
body
|
|
131
|
+
}),
|
|
132
|
+
targets: [
|
|
133
|
+
{
|
|
134
|
+
label: "outlined",
|
|
135
|
+
format: "rgba16float",
|
|
136
|
+
blend: BlendState.from({
|
|
137
|
+
color: {
|
|
138
|
+
operation: "add",
|
|
139
|
+
srcFactor: "one",
|
|
140
|
+
dstFactor: "one-minus-src-alpha"
|
|
141
|
+
},
|
|
142
|
+
alpha: {
|
|
143
|
+
operation: "add",
|
|
144
|
+
srcFactor: "one",
|
|
145
|
+
dstFactor: "one-minus-src-alpha"
|
|
146
|
+
}
|
|
147
|
+
})
|
|
148
|
+
}
|
|
149
|
+
]
|
|
150
|
+
});
|
|
@@ -64,11 +64,11 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
64
64
|
/**
|
|
65
65
|
* @param {FluidComponent} fluid
|
|
66
66
|
*/
|
|
67
|
-
static "__#
|
|
67
|
+
static "__#362@#refresh_masks"(fluid: FluidComponent): void;
|
|
68
68
|
/**
|
|
69
69
|
* @param {FluidComponent} fluid
|
|
70
70
|
*/
|
|
71
|
-
static "__#
|
|
71
|
+
static "__#362@#clear_field"(fluid: FluidComponent): void;
|
|
72
72
|
/**
|
|
73
73
|
* Mark every cell of `fluid` whose centre lies within `inflation` of the
|
|
74
74
|
* posed shape as solid. Iteration is clipped to the shape's world AABB
|
|
@@ -80,7 +80,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
80
80
|
* @param {number} inflation world-units SDF threshold
|
|
81
81
|
* @param {Float64Array} point length-3 scratch
|
|
82
82
|
*/
|
|
83
|
-
static "__#
|
|
83
|
+
static "__#362@#voxelize"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array): void;
|
|
84
84
|
/**
|
|
85
85
|
* Write the obstacle's translation velocity onto every face of every cell
|
|
86
86
|
* it voxelized — the moving-wall boundary condition. Runs AFTER the mask
|
|
@@ -100,7 +100,7 @@ export class FluidObstacleSystem extends System<any> {
|
|
|
100
100
|
* @param {number} wvy
|
|
101
101
|
* @param {number} wvz
|
|
102
102
|
*/
|
|
103
|
-
static "__#
|
|
103
|
+
static "__#362@#stamp_wall_velocity"(fluid: FluidComponent, posed: PosedShape3D, aabb: Float64Array, inflation: number, point: Float64Array, wvx: number, wvy: number, wvz: number): void;
|
|
104
104
|
constructor();
|
|
105
105
|
dependencies: (typeof FluidObstacle)[];
|
|
106
106
|
components_used: (ResourceAccessSpecification<typeof Transform> | ResourceAccessSpecification<typeof RigidBody> | ResourceAccessSpecification<typeof Collider> | ResourceAccessSpecification<typeof FluidComponent> | ResourceAccessSpecification<typeof FluidObstacle>)[];
|
|
@@ -541,7 +541,8 @@ frame or is removed and re-added keeps its buffers.
|
|
|
541
541
|
| `internal_resolution_scale` | render internally below output resolution; `DynamicResolutionScaling` drives it from frame time |
|
|
542
542
|
| `pixel_ratio`, `output_resolution`, `aspect_ratio`, `resize(x, y)` | |
|
|
543
543
|
| `motion_blur`, `dof`, `dof_unreal`, `nss`, `restir_di`, `path_tracer` | sub-objects with their own settings |
|
|
544
|
-
| `frame_count
|
|
544
|
+
| `frame_count` | |
|
|
545
|
+
| `profile_session` | assign a `GPUProfileSession` to record GPU timings; null when nothing is profiling |
|
|
545
546
|
|
|
546
547
|
---
|
|
547
548
|
|
|
@@ -19,6 +19,23 @@ export class ComputePipelineDescriptor extends PipelineDescriptorBase {
|
|
|
19
19
|
*/
|
|
20
20
|
static fromJSON(json: GPUComputePipelineDescriptor): ComputePipelineDescriptor;
|
|
21
21
|
compute: ProgrammableStage;
|
|
22
|
+
/**
|
|
23
|
+
* `[x, y, z]` of this pipeline's `@workgroup_size`.
|
|
24
|
+
*
|
|
25
|
+
* Read once, when the code is set, and kept — the source cannot change under a descriptor
|
|
26
|
+
* without going back through one of the factories, each of which reads it again. So every
|
|
27
|
+
* consumer downstream, a profile capture included, gets the number for free.
|
|
28
|
+
*
|
|
29
|
+
* Frozen, because it is handed out by reference to per-pass profile records and a descriptor
|
|
30
|
+
* that outlives a whole capture must not be mutable through one of them.
|
|
31
|
+
*
|
|
32
|
+
* Takes no part in {@link equals} or {@link hash}: it is derived from `compute.module`, which
|
|
33
|
+
* both already cover, and a cache key computed two ways is a cache that can disagree with
|
|
34
|
+
* itself.
|
|
35
|
+
*
|
|
36
|
+
* @returns {readonly number[]}
|
|
37
|
+
*/
|
|
38
|
+
get workgroup_size(): readonly number[];
|
|
22
39
|
/**
|
|
23
40
|
*
|
|
24
41
|
* @param {GPUComputePipelineDescriptor} json
|
|
@@ -35,6 +52,7 @@ export class ComputePipelineDescriptor extends PipelineDescriptorBase {
|
|
|
35
52
|
* @type {boolean}
|
|
36
53
|
*/
|
|
37
54
|
readonly isComputePipelineDescriptor: boolean;
|
|
55
|
+
#private;
|
|
38
56
|
}
|
|
39
57
|
import { PipelineDescriptorBase } from "../PipelineDescriptorBase.js";
|
|
40
58
|
import { ProgrammableStage } from "../ProgrammableStage.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComputePipelineDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ComputePipelineDescriptor.d.ts","sourceRoot":"","sources":["../../../../../../src/shade/descriptor/pipeline/compute/ComputePipelineDescriptor.js"],"names":[],"mappings":"AAqBA;IAuDI;;;;;OAKG;IACH,mBAJW,MAAM,QACN,MAAM,UACN,wBAAwB,6BAelC;IAED;;;;;OAKG;IACH,wEALW,MAAM,6BA2BhB;IAED;;;OAGG;IACH,+EAMC;IAnHD,2BAAkC;IAOlC;;;;;;;;;;;;;;;OAeG;IACH,wCAEC;IA4FD;;;OAGG;IACH,mDAUC;IAED;;;;OAIG;IACH,cAHW,yBAAyB,GACxB,OAAO,CAMlB;IAUL;;;OAGG;IACH,sCAFU,OAAO,CAE8C;;CAN9D;uCAtKsC,8BAA8B;kCAEnC,yBAAyB;yCADlB,gCAAgC"}
|