@woosh/meep-engine 3.47.0 → 3.49.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/build/bundle-worker-terrain.js +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts +1 -2
- package/editor/particles/effect/ParticleReferenceSimulation.d.ts.map +1 -1
- package/editor/particles/effect/ParticleReferenceSimulation.js +2 -4
- package/editor/view/particles/effect/ParticleGraphEditorView.js +1 -1
- package/package.json +1 -1
- package/src/engine/ecs/async/WORKER_SYSTEM_PLAN.md +27 -11
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.d.ts.map +1 -1
- package/src/engine/ecs/storage/populateEngineSerializationRegistry.js +11 -0
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts +2 -2
- package/src/engine/graphics/ecs/particles/ParticleEffect.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffect.js +7 -7
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts +8 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationAdapter.js +11 -3
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts +26 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.d.ts.map +1 -0
- package/src/engine/graphics/ecs/particles/ParticleEffectSerializationUpgrader_1_2.js +91 -0
- package/src/engine/graphics3/GPUParticleEmitterSystem.js +2 -2
- package/src/engine/graphics3/GraphicsEngine.d.ts.map +1 -1
- package/src/engine/graphics3/GraphicsEngine.js +8 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts +84 -1
- package/src/engine/graphics3/ParticipatingMedia.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMedia.js +139 -5
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts +6 -2
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSerializationAdapter.js +29 -4
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts +10 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.d.ts.map +1 -0
- package/src/engine/graphics3/ParticipatingMediaSerializationUpgrader_0_1.js +38 -0
- package/src/engine/graphics3/ParticipatingMediaSystem.d.ts.map +1 -1
- package/src/engine/graphics3/ParticipatingMediaSystem.js +46 -3
- package/src/engine/network/NetworkSession.d.ts +16 -5
- package/src/engine/network/NetworkSession.d.ts.map +1 -1
- package/src/engine/network/NetworkSession.js +104 -7
- package/src/engine/network/README.md +27 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts +40 -18
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.d.ts.map +1 -1
- package/src/engine/network/orchestrator/ServerAuthoritativeServer.js +180 -190
- package/src/engine/network/replication/Replicator.d.ts +15 -4
- package/src/engine/network/replication/Replicator.d.ts.map +1 -1
- package/src/engine/network/replication/Replicator.js +50 -16
- package/src/engine/network/state/RecordArrivalRing.d.ts +57 -0
- package/src/engine/network/state/RecordArrivalRing.d.ts.map +1 -0
- package/src/engine/network/state/RecordArrivalRing.js +144 -0
- package/src/engine/physics/cloth/MEASUREMENTS.md +354 -0
- package/src/engine/physics/cloth/PLAN.md +85 -5
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts +0 -12
- package/src/engine/physics/cloth/ecs/ClothInstance.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothInstance.js +0 -13
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts +2 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothSystem.js +7 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/ClothWorld.js +4 -15
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts +2 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/WorkerClothSystem.js +6 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.d.ts.map +1 -1
- package/src/engine/physics/cloth/ecs/cloth_build_rows.js +20 -10
- package/src/engine/physics/cloth/playground/collide.html +5 -3
- package/src/engine/physics/cloth/playground/collide_main.js +14 -13
- package/src/engine/physics/cloth/solver/ClothState.d.ts +30 -2
- package/src/engine/physics/cloth/solver/ClothState.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/ClothState.js +62 -4
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts +11 -3
- package/src/engine/physics/cloth/solver/cloth_self_find.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_self_find.js +52 -11
- package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts +42 -0
- package/src/engine/physics/cloth/solver/cloth_self_radius.d.ts.map +1 -0
- package/src/engine/physics/cloth/solver/cloth_self_radius.js +64 -0
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts +99 -24
- package/src/engine/physics/cloth/solver/cloth_solver_constants.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_solver_constants.js +102 -25
- package/src/engine/physics/cloth/solver/cloth_step.d.ts +5 -1
- package/src/engine/physics/cloth/solver/cloth_step.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step.js +13 -3
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts +0 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/cloth_step_instance.js +12 -14
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts +23 -4
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_contact_row.js +36 -8
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.d.ts.map +1 -1
- package/src/engine/physics/cloth/solver/constraint/cloth_self_row.js +4 -2
- package/src/engine/physics/fluid/ecs/FluidObstacleSystem.d.ts +4 -4
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts +15 -0
- package/src/shade/device/mock/SoftwareGPUDevice.d.ts.map +1 -1
- package/src/shade/device/mock/SoftwareGPUDevice.js +21 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts +20 -0
- package/src/shade/device/pipeline/ComputePipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/ComputePipelineManager.js +80 -6
- package/src/shade/device/pipeline/PipelineEnquiry.d.ts +52 -0
- package/src/shade/device/pipeline/PipelineEnquiry.d.ts.map +1 -0
- package/src/shade/device/pipeline/PipelineEnquiry.js +63 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts +21 -0
- package/src/shade/device/pipeline/RenderPipelineManager.d.ts.map +1 -1
- package/src/shade/device/pipeline/RenderPipelineManager.js +84 -4
- package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts +137 -0
- package/src/shade/playground/contact_shadows/ContactShadowLab.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/ContactShadowLab.js +654 -0
- package/src/shade/playground/contact_shadows/README.md +126 -0
- package/src/shade/playground/contact_shadows/index.html +191 -0
- package/src/shade/playground/contact_shadows/main.d.ts +2 -0
- package/src/shade/playground/contact_shadows/main.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/main.js +888 -0
- package/src/shade/playground/contact_shadows/scenes.d.ts +48 -0
- package/src/shade/playground/contact_shadows/scenes.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/scenes.js +620 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts +36 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_composite.js +245 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts +15 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_reference.js +120 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts +55 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_stats.js +216 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts +20 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_lab_view.js +114 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts +11 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/shader_contact_shadow_march.js +90 -0
- package/src/shade/playground/contact_shadows/textures.d.ts +16 -0
- package/src/shade/playground/contact_shadows/textures.d.ts.map +1 -0
- package/src/shade/playground/contact_shadows/textures.js +123 -0
- package/src/shade/playground/particle_ecs/README.md +1 -1
- package/src/shade/playground/particle_ecs/effects/flame.json +1932 -1881
- package/src/shade/playground/particle_ecs/effects/smoke.json +99 -1
- package/src/shade/playground/particle_ecs/effects/soot.json +152 -145
- package/src/shade/playground/tonemap_sdr/README.md +90 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts +105 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/ToneMapCompare.js +380 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts +32 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js +104 -0
- package/src/shade/playground/tonemap_sdr/index.html +90 -0
- package/src/shade/playground/tonemap_sdr/main.d.ts +2 -0
- package/src/shade/playground/tonemap_sdr/main.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/main.js +306 -0
- package/src/shade/playground/tonemap_sdr/scenes.d.ts +26 -0
- package/src/shade/playground/tonemap_sdr/scenes.d.ts.map +1 -0
- package/src/shade/playground/tonemap_sdr/scenes.js +404 -0
- package/src/shade/playground/volumetrics_froxel/main.d.ts.map +1 -1
- package/src/shade/playground/volumetrics_froxel/main.js +85 -4
- package/src/shade/playground/water_refraction/README.md +26 -18
- package/src/shade/playground/water_refraction/index.html +1 -1
- package/src/shade/renderer/Renderer.d.ts +35 -3
- package/src/shade/renderer/Renderer.d.ts.map +1 -1
- package/src/shade/renderer/Renderer.js +208 -12
- package/src/shade/renderer/ShadeToneMappingMode.d.ts +14 -0
- package/src/shade/renderer/ShadeToneMappingMode.d.ts.map +1 -0
- package/src/shade/renderer/ShadeToneMappingMode.js +30 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts +9 -0
- package/src/shade/renderer/animation/GPUAnimationManager.d.ts.map +1 -1
- package/src/shade/renderer/animation/GPUAnimationManager.js +14 -0
- 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 +5 -3
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts +7 -0
- package/src/shade/renderer/buffer/table/GPUDatabase.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/GPUDatabase.js +12 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts +8 -0
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.d.ts.map +1 -1
- package/src/shade/renderer/buffer/table/single/GPUSingleTypeTable.js +12 -0
- package/src/shade/renderer/camera/GPUCameraContext.d.ts.map +1 -1
- package/src/shade/renderer/camera/GPUCameraContext.js +19 -8
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_read_gBuffer_material.js +4 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct.js +4 -0
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.d.ts.map +1 -1
- package/src/shade/renderer/deferred/chunk_shade_standard_material_direct_restir.js +4 -0
- package/src/shade/renderer/deferred/shader_deferred_main.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_deferred_main.js +3 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts +6 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_HDR.js +13 -3
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts +9 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_none.js +63 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts +10 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_HDR_pbr_neutral.js +87 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts +6 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR.d.ts.map +1 -1
- package/src/shade/renderer/deferred/shader_tonemap_LDR.js +23 -5
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts +9 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_none.js +68 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts +10 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.d.ts.map +1 -0
- package/src/shade/renderer/deferred/shader_tonemap_LDR_pbr_neutral.js +73 -0
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.d.ts.map +1 -1
- package/src/shade/renderer/geometry/meshlet/MeshletBatch.js +58 -9
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts +35 -25
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/GPUGeometrySDFManager.js +97 -196
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.d.ts.map +1 -1
- package/src/shade/renderer/geometry/sdf/shader_build_sdf.js +121 -129
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/brick4/gpu/bake/brick4_bake_basic.js +3 -0
- 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 -0
- 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 +4 -0
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/bake/GPULightProbeVolumeRenderer.js +3 -0
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/lpv/deprecated/probe_trace_compute_shader_code.js +4 -0
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.d.ts.map +1 -1
- package/src/shade/renderer/global_illumination/probe/octahedral/graph_sample_light_probes.js +4 -0
- 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 +4 -0
- package/src/shade/renderer/gpu_primitive/bvh/GPU_BVH_BUILD_PLAN.md +131 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts +7 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_delta.js +45 -38
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts +2 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_determine_range.js +81 -79
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts +2 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_find_split.js +5 -3
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts +21 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_internal_children.js +42 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts +19 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/chunk_bvh_morton_code.js +44 -0
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts +23 -5
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/bvh/graph_bvh_build_lbvh.js +139 -23
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts +25 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_build_single_workgroup.js +179 -0
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_emit_hierarchy.d.ts +2 -2
- 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 +7 -16
- package/src/shade/renderer/gpu_primitive/bvh/shader_bvh_morton.d.ts +3 -4
- 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 +6 -23
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts +11 -0
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/IndirectComputeCommandBuildPass.js +14 -3
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/indirect/build_indirect_draw_command.js +13 -3
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts +10 -0
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.d.ts.map +1 -1
- package/src/shade/renderer/gpu_primitive/prefix_sum/v1/graph_prefix_scan_csdldf.js +14 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts +26 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_comparator.js +52 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts +32 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.d.ts.map +1 -0
- package/src/shade/renderer/gpu_primitive/sort/chunk_sort_bitonic_workgroup.js +89 -0
- package/src/shade/renderer/gpu_primitive/sort/graph_radix_sort.d.ts +10 -0
- 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 +20 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts +10 -0
- package/src/shade/renderer/hiz/HierarchicalZBuffer.d.ts.map +1 -1
- package/src/shade/renderer/hiz/HierarchicalZBuffer.js +294 -281
- package/src/shade/renderer/light/GPULightCollection.d.ts +8 -0
- package/src/shade/renderer/light/GPULightCollection.d.ts.map +1 -1
- package/src/shade/renderer/light/GPULightCollection.js +18 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts +8 -0
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/cull/graph_cull_lights.js +234 -218
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts +7 -0
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_assign_clsuters.js +13 -0
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts +7 -0
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.d.ts.map +1 -1
- package/src/shade/renderer/light/cluster/graph_build_light_clusters.js +16 -2
- package/src/shade/renderer/light/environment/execute_filter_environment_map.d.ts +10 -0
- 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 +13 -0
- package/src/shade/renderer/lightmap/GPULightMap.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/GPULightMap.js +3 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_irradiance_flat.js +4 -0
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.d.ts.map +1 -1
- package/src/shade/renderer/lightmap/bake/shader_lightmap_viz_to_sh.js +4 -0
- package/src/shade/renderer/loader/gltf/tiny-gltf.d.ts +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.d.ts +16 -4
- package/src/shade/renderer/material/GPUMaterialManager.d.ts.map +1 -1
- package/src/shade/renderer/material/GPUMaterialManager.js +38 -8
- package/src/shade/renderer/particles/DESIGN.md +49 -7
- package/src/shade/renderer/particles/ORIENTATION_PLAN_2026_10_15.md +453 -0
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts +5 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/particles/data/PARTICLE_EMITTER_STRUCT.js +13 -5
- package/src/shade/renderer/particles/data/particle_emitter_record.js +2 -2
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_builtin_groups.js +12 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts +60 -0
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.d.ts.map +1 -1
- package/src/shade/renderer/particles/graph/groups/particle_groups_geometry.js +156 -0
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts +2 -2
- package/src/shade/renderer/particles/runtime/ParticleEmitter.d.ts.map +1 -1
- package/src/shade/renderer/particles/runtime/ParticleEmitter.js +8 -8
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_billboard_vertex.js +6 -4
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts +7 -6
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.d.ts.map +1 -1
- package/src/shade/renderer/particles/shaders/chunk_particle_render_math.js +91 -58
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/accumulating/AccumulatingPathTracer.js +10 -0
- 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 +5 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.d.ts.map +1 -1
- package/src/shade/renderer/path_tracer/graph_path_trace_scene.js +6 -0
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts +7 -0
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/bloom/graph_postprocess_bloom.js +18 -0
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/denoise/LigmaDenoiser.js +1 -0
- 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/eye/GPUCameraExposureManager.d.ts +11 -0
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/eye/GPUCameraExposureManager.js +16 -0
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts +10 -0
- package/src/shade/renderer/postprocess/gtao/GTAO.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/GTAO.js +16 -0
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/gtao/fragment_shader_gtao.js +32 -10
- package/src/shade/renderer/postprocess/nss/NSS.d.ts +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/reproject/chunk_ssr_temporal_accumulate.js +3 -0
- package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/ssr/resolve/build_ssr_resolve_shader.js +6 -3
- package/src/shade/renderer/postprocess/taa/TAA.d.ts +12 -0
- package/src/shade/renderer/postprocess/taa/TAA.d.ts.map +1 -1
- package/src/shade/renderer/postprocess/taa/TAA.js +15 -0
- package/src/shade/renderer/postprocess/velocity/graph_add_per_object_velocity.d.ts +7 -0
- 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 +13 -0
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts +31 -3
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/TemplatePassDescriptor.js +79 -4
- package/src/shade/renderer/rasterize/bucket/graph_meshlets_rasterize_by_bucket.d.ts +17 -0
- 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 +35 -4
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts +7 -0
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/compute/graph_mesh_frustum_cull.js +182 -169
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/mesh/graph_meshes_classify_buckets.js +20 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_extract_meshlets_from_bucket.js +18 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/bucket/meshlet/graph_sort_meshlets_by_bucket_id.js +20 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts +7 -0
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_mesh_filter_one_way.js +187 -170
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_filter_one_way.js +19 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts +13 -0
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/graph_meshlets_rasterize.js +25 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts +10 -0
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/expand/mesh/graph_expand_meshes_to_meshlets.js +20 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_brick4.js +6 -0
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/forward/chunk_forward_shade_standard_fragment_ibl.js +6 -0
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts +3 -2
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/AVBOITSideChannel.js +3 -2
- package/src/shade/renderer/rasterize/native/avboit/graph_rasterize_meshes_transparent_avboit.d.ts +7 -2
- 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 +12 -4
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_brick4.js +4 -3
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/avboit/shader_avboit_draw_ibl.js +4 -3
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts +2 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/graph_rasterize_meshes_transparent_oit.js +11 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments.js +4 -3
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/native/oit/shader_oit_resolve_moments_ibl.js +4 -3
- package/src/shade/renderer/rasterize/standard/graph_rasterize_partial_opaque.d.ts +15 -0
- 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 +35 -2
- package/src/shade/renderer/rasterize/standard/graph_rasterize_remaining_opaque.d.ts +14 -0
- 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 +32 -4
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts +17 -0
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.d.ts.map +1 -1
- package/src/shade/renderer/rasterize/standard/graph_rasterize_scene.js +34 -4
- package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts +5 -3
- package/src/shade/renderer/restir/di/chunk_restir_resolve.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/chunk_restir_resolve.js +8 -3
- package/src/shade/renderer/restir/di/graph_restir_di.d.ts.map +1 -1
- package/src/shade/renderer/restir/di/graph_restir_di.js +1 -0
- 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 +5 -1
- package/src/shade/renderer/restir/reservoir/shader.d.ts.map +1 -1
- package/src/shade/renderer/restir/reservoir/shader.js +7 -4
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts +7 -0
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUInstancesAccelerationStructure.js +13 -1
- package/src/shade/renderer/scene/GPUSceneContext.d.ts +10 -0
- package/src/shade/renderer/scene/GPUSceneContext.d.ts.map +1 -1
- package/src/shade/renderer/scene/GPUSceneContext.js +19 -0
- package/src/shade/renderer/scene/SceneManager.d.ts +9 -0
- package/src/shade/renderer/scene/SceneManager.d.ts.map +1 -1
- package/src/shade/renderer/scene/SceneManager.js +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_nodes_update_transform_hierarchy.js +17 -0
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts +11 -0
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.d.ts.map +1 -1
- package/src/shade/renderer/scene/hierarchy/graph_scene_update_transform_hierarchy.js +18 -1
- package/src/shade/renderer/shader/ComputeShader.d.ts +12 -0
- package/src/shade/renderer/shader/ComputeShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ComputeShader.js +53 -0
- package/src/shade/renderer/shader/ImageShader.d.ts +27 -8
- package/src/shade/renderer/shader/ImageShader.d.ts.map +1 -1
- package/src/shade/renderer/shader/ImageShader.js +70 -1
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts +21 -0
- package/src/shade/renderer/shader/ShaderDescriptor.d.ts.map +1 -1
- package/src/shade/renderer/shader/ShaderDescriptor.js +71 -1
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_project_view_position_from_depth.js +45 -0
- package/src/shade/renderer/shader/chunk/camera/chunk_screen_coordinate_to_view.js +3 -3
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.d.ts +1 -1
- package/src/shade/renderer/shader/chunk/color/iCtCp/chunk_eotf_st2084.js +62 -62
- package/src/shade/renderer/shader/chunk/color/tonemap/HDR_TONE_MAPPING_FORMS_BRIEF_2026_10_16.md +318 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/SDR_TONE_MAPPING_BRIEF_2026_10_16.md +237 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts +17 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js +22 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts +14 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js +28 -15
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts +12 -0
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js +128 -110
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts +20 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/geometry/ray/chunk_offset_ray_from_depth.js +33 -0
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts +4 -0
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/light/chunk_compute_multiscattering_specular.js +12 -1
- package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/MATERIAL_SHADING_INFO_STRUCT.js +7 -0
- package/src/shade/renderer/shader/chunk/material/MULTISCATTER.md +108 -0
- package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/chunk_compute_indirect_specular.js +23 -4
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts +18 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_direct_multiscatter.js +56 -0
- package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.d.ts.map +1 -1
- package/src/shade/renderer/shader/chunk/material/chunk_re_indirect_specular_physical.js +2 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts +43 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.d.ts.map +1 -0
- package/src/shade/renderer/shader/chunk/screen_space/chunk_screen_space_linear_ray.js +319 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts +33 -0
- package/src/shade/renderer/shader/compiler/CodeChunk.d.ts.map +1 -1
- package/src/shade/renderer/shader/compiler/CodeChunk.js +140 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts +74 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/CodeChunkChoice.js +166 -0
- package/src/shade/renderer/shader/compiler/SHADER_SWITCH_PROPOSAL_2026_10_16.md +680 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts +86 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitch.js +178 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts +67 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.d.ts.map +1 -0
- package/src/shade/renderer/shader/compiler/ShaderSwitchSet.js +205 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts +14 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/CONTACT_SHADOW_WAVE_SIZE.js +13 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts +65 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/ContactShadowDispatchList.js +252 -0
- package/src/shade/renderer/shadow/contact/FINDINGS.md +413 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/chunk_contact_shadow_wavefront_extents.js +105 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_linear.js +39 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/graph_contact_shadow_wavefront.js +92 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts +29 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_linear.js +128 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts +52 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.d.ts.map +1 -0
- package/src/shade/renderer/shadow/contact/shader_contact_shadow_wavefront.js +358 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts +10 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/ShadowDirectionalTechnique.js +12 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts +13 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shader/SHADOW_DIRECTIONAL_TECHNIQUE.js +14 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts +14 -8
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.d.ts.map +1 -1
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional.js +20 -86
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts +14 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.d.ts.map +1 -0
- package/src/shade/renderer/shadow/map/shader/chunk_shadowmap_sample_directional_cascades.js +79 -0
- 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 +12 -12
- 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 +153 -151
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts +13 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.d.ts.map +1 -0
- package/src/shade/renderer/shadow/vsm/shader/chunk_shadowmap_sample_directional_virtual.js +48 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts +10 -0
- package/src/shade/renderer/texture/GPUTextureContext.d.ts.map +1 -1
- package/src/shade/renderer/texture/GPUTextureContext.js +24 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts +219 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.d.ts.map +1 -0
- package/src/shade/renderer/texture/atlas/GPUTileAtlas3D.js +671 -0
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts +26 -2
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUSceneVolumetrics.js +108 -4
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts +5 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/GPUViewVolumetrics.js +6 -0
- package/src/shade/renderer/volumetrics/NOTES.md +50 -0
- package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js +30 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts +51 -13
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/ParticipatingMediaVolume.js +98 -13
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts +9 -0
- package/src/shade/renderer/volumetrics/SceneVolumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/SceneVolumetrics.js +78 -68
- package/src/shade/renderer/volumetrics/VOLUMETRIC_NOISE_PLAN_2026_10_15.md +326 -0
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts +7 -4
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_participating_media_volume_sample.js +21 -9
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts +19 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_froxel_uvw_from_clip.js +53 -0
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts +12 -3
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/chunk_volumetrics_sample_froxel_extinction.js +85 -48
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts +4 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_froxel_irradiance.js +4 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts +4 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/graph_build_volumetrics.js +21 -1
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts +98 -0
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/PARTICIPATING_MEDIA_NOISE.js +115 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts +9 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/VOLUMETRICS_NOISE_TILE_BAKE_SETTINGS_STRUCT.js +24 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts +27 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/bake_volumetrics_noise_tile.js +91 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts +35 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/chunk_participating_media_noise.js +92 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts +10 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.d.ts.map +1 -0
- package/src/shade/renderer/volumetrics/noise/shader_volumetrics_noise_tile_bake.js +121 -0
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_participating_media.js +38 -3
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/shader_volumetrics_build_sun_shadow_volume.js +311 -290
- package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.d.ts.map +1 -1
- package/src/shade/renderer/volumetrics/volumetrics_position_world_to_froxel_uvw.js +28 -49
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts +3 -1
- package/src/shade/renderer/water/GPUWaterRenderer.d.ts.map +1 -1
- package/src/shade/renderer/water/GPUWaterRenderer.js +24 -18
- package/src/shade/renderer/water/chunk_water_transport.d.ts +0 -1
- package/src/shade/renderer/water/chunk_water_transport.d.ts.map +1 -1
- package/src/shade/renderer/water/chunk_water_transport.js +0 -17
- package/src/shade/renderer/water/shader_water.d.ts +4 -2
- package/src/shade/renderer/water/shader_water.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water.js +27 -16
- package/src/shade/renderer/water/shader_water_avboit.d.ts +0 -4
- package/src/shade/renderer/water/shader_water_avboit.d.ts.map +1 -1
- package/src/shade/renderer/water/shader_water_avboit.js +0 -63
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.d.ts.map +1 -1
- package/src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js +43 -9
- package/src/engine/network/transport/Channel.d.ts +0 -85
- package/src/engine/network/transport/Channel.d.ts.map +0 -1
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts +0 -155
- package/src/engine/network/transport/ReliableCommandPipeline.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts +0 -105
- package/src/engine/network/transport/fragments/FragmentAssembler.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts +0 -103
- package/src/engine/network/transport/fragments/FragmentRetention.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/fragment_send.d.ts +0 -61
- package/src/engine/network/transport/fragments/fragment_send.d.ts.map +0 -1
- package/src/engine/network/transport/fragments/packet_size.d.ts +0 -99
- package/src/engine/network/transport/fragments/packet_size.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts +0 -6
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/sRGB/chunk_RRTAndODTFit.js +0 -16
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_aces.js +0 -46
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts +0 -10
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_agx.js +0 -127
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts +0 -7
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.d.ts.map +0 -1
- package/src/shade/renderer/shader/chunk/color/tonemap/chunk_tonemap_pbr_neutral.js +0 -39
|
@@ -1,49 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* NOTE: we don't clamp final slice coordinate, this is intentional, we let the linear texture sampler take care of that.
|
|
7
|
-
* See {@link build_light_cluster_parameters}
|
|
8
|
-
* @type {CodeChunk}
|
|
9
|
-
*/
|
|
10
|
-
export const volumetrics_position_world_to_froxel_uvw = CodeChunk.from(
|
|
11
|
-
//language=WGSL
|
|
12
|
-
`
|
|
13
|
-
fn volumetrics_position_world_to_froxel_uvw(
|
|
14
|
-
position_ws: vec3<f32>
|
|
15
|
-
) -> vec3<f32>{
|
|
16
|
-
|
|
17
|
-
let position_vs = camera.view_matrix * vec4(position_ws, 1.0);
|
|
18
|
-
let position_clip = camera.projection_matrix * position_vs;
|
|
19
|
-
|
|
20
|
-
let
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// see 'cluster_depth_to_z_slice' for explanation
|
|
31
|
-
let slice_position:f32 = log2(fma(view_depth, cluster_parameters.x, cluster_parameters.y)) * cluster_parameters.z;
|
|
32
|
-
|
|
33
|
-
// A cell-averaged grid: texel k holds the slab [k+j, k+1+j], not the point at slice k, so the
|
|
34
|
-
// texel-centre convention alone reads about half a froxel too far out. See
|
|
35
|
-
// chunk_volumetrics_froxel_content_offset for where the ~0.53 comes from.
|
|
36
|
-
let content_offset = volumetrics_froxel_content_offset(cluster_parameters.z);
|
|
37
|
-
|
|
38
|
-
let w = (slice_position + 0.5 - content_offset) / f32(volumetrics_metadata.resolution.z);
|
|
39
|
-
|
|
40
|
-
return vec3(
|
|
41
|
-
uv,
|
|
42
|
-
w
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
`, [
|
|
46
|
-
chunk_ndc_to_uv,
|
|
47
|
-
chunk_volumetrics_froxel_content_offset,
|
|
48
|
-
]
|
|
49
|
-
)
|
|
1
|
+
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
2
|
+
import { chunk_volumetrics_froxel_content_offset } from "./chunk_volumetrics_froxel_content_offset.js";
|
|
3
|
+
import { chunk_volumetrics_froxel_uvw_from_clip } from "./chunk_volumetrics_froxel_uvw_from_clip.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* NOTE: we don't clamp final slice coordinate, this is intentional, we let the linear texture sampler take care of that.
|
|
7
|
+
* See {@link build_light_cluster_parameters}
|
|
8
|
+
* @type {CodeChunk}
|
|
9
|
+
*/
|
|
10
|
+
export const volumetrics_position_world_to_froxel_uvw = CodeChunk.from(
|
|
11
|
+
//language=WGSL
|
|
12
|
+
`
|
|
13
|
+
fn volumetrics_position_world_to_froxel_uvw(
|
|
14
|
+
position_ws: vec3<f32>
|
|
15
|
+
) -> vec3<f32>{
|
|
16
|
+
|
|
17
|
+
let position_vs = camera.view_matrix * vec4(position_ws, 1.0);
|
|
18
|
+
let position_clip = camera.projection_matrix * position_vs;
|
|
19
|
+
|
|
20
|
+
let content_offset = volumetrics_froxel_content_offset(volumetrics_metadata.froxel_cluster_parameters.z);
|
|
21
|
+
|
|
22
|
+
return volumetrics_froxel_uvw_from_clip(position_clip, -position_vs.z, content_offset);
|
|
23
|
+
}
|
|
24
|
+
`, [
|
|
25
|
+
chunk_volumetrics_froxel_content_offset,
|
|
26
|
+
chunk_volumetrics_froxel_uvw_from_clip,
|
|
27
|
+
]
|
|
28
|
+
)
|
|
@@ -42,7 +42,7 @@ export class GPUWaterRenderer {
|
|
|
42
42
|
/** Optional single-pixel readback on the next rendered water frame. No per-frame readback. */
|
|
43
43
|
request_probe(uv: any): Promise<any>;
|
|
44
44
|
dispose(): void;
|
|
45
|
-
avboit_prepare({ graph, view_ctx, camera, color_texture, depth_texture, normal_texture, hzb_texture, environment_texture, light_cluster_parameters, light_cluster_lookup, light_cluster_data, shadowmap_atlas, indirect_lighting_mode }: {
|
|
45
|
+
avboit_prepare({ graph, view_ctx, camera, color_texture, depth_texture, normal_texture, hzb_texture, environment_texture, light_cluster_parameters, light_cluster_lookup, light_cluster_data, shadowmap_atlas, indirect_lighting_mode, shader_switches }: {
|
|
46
46
|
graph: any;
|
|
47
47
|
view_ctx: any;
|
|
48
48
|
camera: any;
|
|
@@ -56,6 +56,7 @@ export class GPUWaterRenderer {
|
|
|
56
56
|
light_cluster_data: any;
|
|
57
57
|
shadowmap_atlas: any;
|
|
58
58
|
indirect_lighting_mode?: number;
|
|
59
|
+
shader_switches?: ShaderSwitchSet;
|
|
59
60
|
}): {
|
|
60
61
|
background_color: any;
|
|
61
62
|
};
|
|
@@ -95,4 +96,5 @@ export class GPUWaterRenderer {
|
|
|
95
96
|
inspect(graph: any, view_ctx: any, output_resolution: any): number;
|
|
96
97
|
#private;
|
|
97
98
|
}
|
|
99
|
+
import { ShaderSwitchSet } from "../shader/compiler/ShaderSwitchSet.js";
|
|
98
100
|
//# sourceMappingURL=GPUWaterRenderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAqBA,sFAAsF;AACtF;IACI,WAAa;IACb,mBAAe;IACf,yBAAqB;IACrB,aAAS;IACT,WAAa;IACb;;;;;;;;;;;MAE6B;IAC7B;;;;OAIG;IACH,QAFU,OAAO,4BAA4B,EAAE,cAAc,GAAC,IAAI,CAEpD;
|
|
1
|
+
{"version":3,"file":"GPUWaterRenderer.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/GPUWaterRenderer.js"],"names":[],"mappings":"AAqBA,sFAAsF;AACtF;IACI,WAAa;IACb,mBAAe;IACf,yBAAqB;IACrB,aAAS;IACT,WAAa;IACb;;;;;;;;;;;MAE6B;IAC7B;;;;OAIG;IACH,QAFU,OAAO,4BAA4B,EAAE,cAAc,GAAC,IAAI,CAEpD;IAuBd;;;OAGG;IACH;;;;;MAA8F;IAC9F;;;OAGG;IACH,wBAAyD;IAMzD,oCAIC;IAED,8FAA8F;IAC9F,qCAgBC;IAED,gBASC;IAuDD;;;;;;;;;;;;;;;;;MAuIC;IAQD;;;;;YAMC;IAED;;;;;;;;;;MAOC;IAED;;;;;;;;;;;;;;MAwBC;IAED,gGAAgG;IAChG,mEAYC;;CA2BJ;gCAhY+B,uCAAuC"}
|
|
@@ -3,6 +3,7 @@ import { DEFAULT_DEPTH_TEXTURE_VIEW } from "../depth/DEFAULT_DEPTH_TEXTURE_VIEW.
|
|
|
3
3
|
import { graph_compute_pass } from "../shader/graph/compute/graph_compute_pass.js";
|
|
4
4
|
import { graph_image_pass } from "../shader/graph/graph_image_pass.js";
|
|
5
5
|
import { ShadeIndirectLightingMode } from "../ShadeIndirectLightingMode.js";
|
|
6
|
+
import { ShaderSwitchSet } from "../shader/compiler/ShaderSwitchSet.js";
|
|
6
7
|
import { graph_water_tessellation } from "./surface/graph_water_tessellation.js";
|
|
7
8
|
import { water_lod_view, WATER_LOD_VIEW_STRUCT } from "./surface/lod/WATER_LOD.js";
|
|
8
9
|
import { WATER_LOD_LIMITS_STRUCT, WATER_LOD_PATCH_INDICES, WATER_LOD_STATISTICS_WORDS,
|
|
@@ -16,8 +17,7 @@ import { create_water_finalize_pipeline_brick4, create_water_finalize_pipeline_i
|
|
|
16
17
|
WATER_TRACE_STRUCT } from "./shader_water.js";
|
|
17
18
|
import { WATER_BAND_SAMPLER } from "./surface/GPUWaterSurface.js";
|
|
18
19
|
import { shader_water_background_copy, shader_water_debug, shader_water_draw,
|
|
19
|
-
shader_water_occupancy, shader_water_splat
|
|
20
|
-
shader_water_confidence_x, shader_water_confidence_y } from "./shader_water_avboit.js";
|
|
20
|
+
shader_water_occupancy, shader_water_splat } from "./shader_water_avboit.js";
|
|
21
21
|
|
|
22
22
|
/** Production water channel. Only AVBOIT's shared resolve composites its radiance. */
|
|
23
23
|
export class GPUWaterRenderer {
|
|
@@ -36,8 +36,24 @@ export class GPUWaterRenderer {
|
|
|
36
36
|
*/
|
|
37
37
|
bodies = null;
|
|
38
38
|
#pipeline = create_water_pipeline();
|
|
39
|
-
|
|
40
|
-
#
|
|
39
|
+
/** The optics pipelines under IBL and under Brick4, each by the shader switch set it was built for. */
|
|
40
|
+
#finalize_pipelines_ibl = new Map();
|
|
41
|
+
#finalize_pipelines_brick4 = new Map();
|
|
42
|
+
/**
|
|
43
|
+
* @param {boolean} use_brick4
|
|
44
|
+
* @param {ShaderSwitchSet} shader_switches
|
|
45
|
+
* @returns {import("../../descriptor/pipeline/render/RenderPipelineDescriptor.js").RenderPipelineDescriptor}
|
|
46
|
+
*/
|
|
47
|
+
#finalize_pipeline(use_brick4, shader_switches) {
|
|
48
|
+
const cache = use_brick4 ? this.#finalize_pipelines_brick4 : this.#finalize_pipelines_ibl;
|
|
49
|
+
let pipeline = cache.get(shader_switches);
|
|
50
|
+
if (pipeline === undefined) {
|
|
51
|
+
pipeline = use_brick4 ? create_water_finalize_pipeline_brick4(shader_switches)
|
|
52
|
+
: create_water_finalize_pipeline_ibl(shader_switches);
|
|
53
|
+
cache.set(shader_switches, pipeline);
|
|
54
|
+
}
|
|
55
|
+
return pipeline;
|
|
56
|
+
}
|
|
41
57
|
#prepared = new WeakMap();
|
|
42
58
|
#inspection = new WeakMap();
|
|
43
59
|
#probe = null;
|
|
@@ -147,7 +163,7 @@ export class GPUWaterRenderer {
|
|
|
147
163
|
|
|
148
164
|
avboit_prepare({ graph, view_ctx, camera, color_texture, depth_texture, normal_texture,
|
|
149
165
|
hzb_texture, environment_texture, light_cluster_parameters, light_cluster_lookup, light_cluster_data,
|
|
150
|
-
shadowmap_atlas, indirect_lighting_mode = ShadeIndirectLightingMode.IBL }) {
|
|
166
|
+
shadowmap_atlas, indirect_lighting_mode = ShadeIndirectLightingMode.IBL, shader_switches = ShaderSwitchSet.EMPTY }) {
|
|
151
167
|
const scene = view_ctx.scene;
|
|
152
168
|
const settings = { ...this.settings };
|
|
153
169
|
const probe = this.#probe;
|
|
@@ -223,19 +239,11 @@ export class GPUWaterRenderer {
|
|
|
223
239
|
if (views === undefined) { views = new Map(); this.#inspection.set(graph, views); }
|
|
224
240
|
views.set(view_ctx, { data, mode: settings.debug_view, resolution });
|
|
225
241
|
}
|
|
226
|
-
const visibility_resolution = resolution.map(v => Math.ceil(v / 4));
|
|
227
|
-
const [seeds] = graph_image_pass({ graph, shader: shader_water_confidence_seed,
|
|
228
|
-
inputs: { trace_metadata: data.trace_metadata, scene_depth: data.scene_depth }, output_resolution: visibility_resolution });
|
|
229
|
-
const [horizontal] = graph_image_pass({ graph, shader: shader_water_confidence_x,
|
|
230
|
-
inputs: { distance_field: seeds }, output_resolution: visibility_resolution });
|
|
231
|
-
const [visibility_distance] = graph_image_pass({ graph, shader: shader_water_confidence_y,
|
|
232
|
-
inputs: { distance_field: horizontal }, output_resolution: visibility_resolution });
|
|
233
|
-
data.visibility_distance = visibility_distance;
|
|
234
242
|
const finalize_data = {};
|
|
235
243
|
// the optics read the GI mode the meshes in this frame are lit by: a reflection or a sky that
|
|
236
244
|
// misses on screen falls back to it, as SSR's resolve does
|
|
237
245
|
const use_brick4 = indirect_lighting_mode === ShadeIndirectLightingMode.Brick4;
|
|
238
|
-
const finalize_pipeline =
|
|
246
|
+
const finalize_pipeline = this.#finalize_pipeline(use_brick4, shader_switches);
|
|
239
247
|
const finalize_resources = use_brick4 ? WATER_FINALIZE_RESOURCES_BRICK4 : WATER_FINALIZE_RESOURCES_IBL;
|
|
240
248
|
const finalize = graph.add('Water / coherent optics', finalize_data, (d, resources, {encoder, graphics}) => {
|
|
241
249
|
const shared = {
|
|
@@ -244,7 +252,6 @@ export class GPUWaterRenderer {
|
|
|
244
252
|
tNormal: resources.get(d.normal).obtainView(), tHZB: resources.get(d.hzb).obtainView(),
|
|
245
253
|
tScene: resources.get(d.color).obtainView(),
|
|
246
254
|
receiver: resources.get(d.receiver).obtainView(), trace_metadata: resources.get(d.trace_metadata).obtainView(),
|
|
247
|
-
visibility_distance: resources.get(d.visibility_distance).obtainView(),
|
|
248
255
|
...geometry_bindings(graphics, encoder, resources, d),
|
|
249
256
|
// the lights, as the transparent meshes bind them
|
|
250
257
|
light_data: view_ctx.scene.lights.buffer_data,
|
|
@@ -274,7 +281,7 @@ export class GPUWaterRenderer {
|
|
|
274
281
|
draw(render, resources.get(d.commands), graphics.device);
|
|
275
282
|
render.end();
|
|
276
283
|
});
|
|
277
|
-
for (const key of ['camera','scene_depth','normal','hzb','color','receiver','trace_metadata','
|
|
284
|
+
for (const key of ['camera','scene_depth','normal','hzb','color','receiver','trace_metadata','interface_depth',
|
|
278
285
|
'lod_bodies','candidates','cells','commands']) {
|
|
279
286
|
finalize_data[key] = finalize.read(data[key]);
|
|
280
287
|
}
|
|
@@ -370,10 +377,9 @@ export class GPUWaterRenderer {
|
|
|
370
377
|
const mapped = buffer.getMappedRange();
|
|
371
378
|
const half = offset => Array.from(new Float16Array(mapped, offset, 4));
|
|
372
379
|
const radiance = half(512);
|
|
373
|
-
const confidence = radiance[3];
|
|
374
380
|
radiance[3] = new Float32Array(mapped, 768, 4)[1];
|
|
375
381
|
probe.resolve({ pixel, resolution, frame_time: optical.frame_time, receiver: Array.from(new Float32Array(mapped, 0, 4)),
|
|
376
|
-
transmission: Array.from(new Float32Array(mapped, 256, 4)), radiance,
|
|
382
|
+
transmission: Array.from(new Float32Array(mapped, 256, 4)), radiance, stale: false });
|
|
377
383
|
} catch (error) { probe.reject(error); }
|
|
378
384
|
finally { buffer.destroy(); }
|
|
379
385
|
});
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export const WATER_LEVEL_TOLERANCE_DECLARATION: CodeChunk;
|
|
2
|
-
export const chunk_water_refraction_confidence: CodeChunk;
|
|
3
2
|
export const chunk_water_transport: CodeChunk;
|
|
4
3
|
export const chunk_water_receiver_texel: CodeChunk;
|
|
5
4
|
export const chunk_water_receiver_radiance: CodeChunk;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunk_water_transport.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/chunk_water_transport.js"],"names":[],"mappings":"AAUA,0DAEG;AAEH,
|
|
1
|
+
{"version":3,"file":"chunk_water_transport.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/chunk_water_transport.js"],"names":[],"mappings":"AAUA,0DAEG;AAEH,8CAsBG;AAIH,mDAU6F;AAI7F,sDAmCoE;0BAzF1C,iCAAiC"}
|
|
@@ -12,23 +12,6 @@ export const WATER_LEVEL_TOLERANCE_DECLARATION = CodeChunk.from(/* language=WGSL
|
|
|
12
12
|
const WATER_LEVEL_TOLERANCE: f32 = 0.02;
|
|
13
13
|
`);
|
|
14
14
|
|
|
15
|
-
export const chunk_water_refraction_confidence = CodeChunk.from(/* language=WGSL */ `
|
|
16
|
-
fn water_refraction_lookup(original: vec2f, receiver: vec2f, confidence: f32) -> vec2f {
|
|
17
|
-
return mix(original, receiver, clamp(confidence, 0.0, 1.0));
|
|
18
|
-
}
|
|
19
|
-
fn water_refraction_confidence(uv: vec2f, original_uv: vec2f, size: vec2f, distance_tiles: f32) -> f32 {
|
|
20
|
-
let displacement = length((uv - original_uv) * size);
|
|
21
|
-
let fade_width = clamp(displacement, 8.0, 64.0);
|
|
22
|
-
let visibility = smoothstep(0.0, fade_width, distance_tiles * 4.0);
|
|
23
|
-
// Distance from the frame border of whichever of source and receiver is nearer to it.
|
|
24
|
-
let edge = min(min(original_uv, 1.0 - original_uv), min(uv, 1.0 - uv));
|
|
25
|
-
// Approaching an off-screen receiver must approach the control lookup continuously,
|
|
26
|
-
// even while the water fragment itself is far enough from the frame border.
|
|
27
|
-
return visibility * smoothstep(0.0, clamp(displacement / min(size.x, size.y), 0.01, 0.1),
|
|
28
|
-
min(edge.x, edge.y));
|
|
29
|
-
}
|
|
30
|
-
`);
|
|
31
|
-
|
|
32
15
|
export const chunk_water_transport = CodeChunk.from(/* language=WGSL */ `
|
|
33
16
|
struct WaterEvent { transmission: vec3f, radiance: vec3f }
|
|
34
17
|
struct WaterTransport { transmission: vec3f, radiance: vec3f, background: vec3f }
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export function create_water_pipeline(): RenderPipelineDescriptor;
|
|
2
|
-
|
|
3
|
-
export function
|
|
2
|
+
/** The optics pipeline under IBL, its shader built for `switches` (a ShaderSwitchSet). */
|
|
3
|
+
export function create_water_finalize_pipeline_ibl(switches: any): RenderPipelineDescriptor;
|
|
4
|
+
/** The optics pipeline under Brick4, its shader built for `switches` (a ShaderSwitchSet). */
|
|
5
|
+
export function create_water_finalize_pipeline_brick4(switches: any): RenderPipelineDescriptor;
|
|
4
6
|
export const WATER_TRACE_STRUCT: WebGPUStruct;
|
|
5
7
|
/** Optics under IBL (and LPV, which has no transparent variant): the lights and the environment. */
|
|
6
8
|
export const WATER_FINALIZE_RESOURCES_IBL: ShaderResourceSetDescriptor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_water.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water.js"],"names":[],"mappings":"AA+mBA,kEAAuH;AACvH,0FAA0F;AAC1F,4FAEC;AACD,6FAA6F;AAC7F,+FAEC;AA7kBD,8CAKwB;AAiCxB,oGAAoG;AACpG,uEAAkE;AAGlE,gGAAgG;AAChG,0EAAqE;AAqOrE,+CAsFmB;AA8LnB,4CAAmG;AACnG,kFAAkF;AAClF,yDAC8G;AAC9G,oCAAoC;AACpC,4DACoH;AACpH,0DAAyC;yCAnlBA,8DAA8D;6BAkB1E,gCAAgC;4CAJjB,mDAAmD;0BADrE,iCAAiC;iCAE1B,+BAA+B"}
|
|
@@ -13,7 +13,6 @@ import { chunk_ffx_sssr_load_depth } from "../shader/chunk/screen_space/chunk_ff
|
|
|
13
13
|
import { chunk_ffx_sssr_validate_hit } from "../shader/chunk/screen_space/chunk_ffx_sssr_validate_hit.js";
|
|
14
14
|
import { chunk_project_direction } from "../shader/chunk/screen_space/chunk_project_direction.js";
|
|
15
15
|
import { chunk_screen_space_newton_ray } from "../shader/chunk/screen_space/chunk_screen_space_newton_ray.js";
|
|
16
|
-
import { chunk_texture_sample_bilinear_uv } from "../shader/chunk/texture/sample/chunk_texture_sample_bilinear_uv.js";
|
|
17
16
|
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
18
17
|
import { ShaderResourceSetDescriptor } from "../shader/resource/ShaderResourceSetDescriptor.js";
|
|
19
18
|
import { ShaderDescriptor } from "../shader/ShaderDescriptor.js";
|
|
@@ -38,8 +37,8 @@ import { NODE3D_GLOBAL_FLAG_MIRRORED } from "../scene/NODE3D_STRUCT.js";
|
|
|
38
37
|
import { chunk_water_inscatter } from "./optics/chunk_water_inscatter.js";
|
|
39
38
|
import { chunk_water_receiver_downwelling } from "./optics/chunk_water_receiver_downwelling.js";
|
|
40
39
|
import { chunk_water_optics } from "./optics/chunk_water_optics.js";
|
|
41
|
-
import { chunk_water_receiver_radiance, chunk_water_receiver_texel,
|
|
42
|
-
|
|
40
|
+
import { chunk_water_receiver_radiance, chunk_water_receiver_texel, chunk_water_transport,
|
|
41
|
+
WATER_LEVEL_TOLERANCE_DECLARATION } from './chunk_water_transport.js';
|
|
43
42
|
|
|
44
43
|
export const WATER_TRACE_STRUCT = WebGPUStruct.from({
|
|
45
44
|
max_distance: f32, distance_tolerance: f32, max_updates: u32, fallback_steps: u32,
|
|
@@ -73,7 +72,7 @@ function water_resources(finalize = false) {
|
|
|
73
72
|
.addStorageBuffer('water_particle_offsets', COLLECTION_U32_STRUCT_READ)
|
|
74
73
|
.addStorageBuffer('water_particle_entries', WebGPUArray.from(WATER_PARTICLE_ENTRY_STRUCT));
|
|
75
74
|
if (finalize) {
|
|
76
|
-
group.addTexture('receiver').addTexture('trace_metadata')
|
|
75
|
+
group.addTexture('receiver').addTexture('trace_metadata');
|
|
77
76
|
}
|
|
78
77
|
return resources;
|
|
79
78
|
}
|
|
@@ -366,6 +365,13 @@ fn water_exact_receiver(ray: Ray, input: ScreenSpaceRayHit) -> ScreenSpaceRayHit
|
|
|
366
365
|
camera.projection_matrix,camera.projection_matrix_inverse,camera.view_matrix,trace.distance_tolerance);
|
|
367
366
|
hit.status = checked.status;
|
|
368
367
|
hit.residual = checked.residual;
|
|
368
|
+
// The plane can carry a hit on the last texel before the sky across that edge. The texel the
|
|
369
|
+
// traversal stopped on is still a receiver: accept it where it passes on its own.
|
|
370
|
+
if (checked.status == 2u) {
|
|
371
|
+
let unsnapped = screen_space_ray_validate(ray, input.uv, tDepth, tNormal, camera.projection_matrix,
|
|
372
|
+
camera.projection_matrix_inverse, camera.view_matrix, trace.distance_tolerance);
|
|
373
|
+
if (unsnapped.status == 0u) { hit = unsnapped; }
|
|
374
|
+
}
|
|
369
375
|
} else { hit.status = 4u; }
|
|
370
376
|
return hit;
|
|
371
377
|
}
|
|
@@ -529,11 +535,11 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptic
|
|
|
529
535
|
}
|
|
530
536
|
}
|
|
531
537
|
let original = textureLoad(tScene, coord, 0);
|
|
538
|
+
// A validated receiver is taken where the trace found it, at its whole displacement, however near an
|
|
539
|
+
// object or the sky it lies. Any lookup between it and the pixel's own would be a point the ray never
|
|
540
|
+
// reached, and bends the image around every object. A pixel without one shows its own background.
|
|
532
541
|
let valid = receiver_data.w < 16.0 && above && trace.mode != 2u;
|
|
533
|
-
|
|
534
|
-
texture_sample_bilinear_uv(visibility_distance, uv, 0u).r), valid);
|
|
535
|
-
// Mayer's fade selects one UV, rather than crossfading two images of the same edge.
|
|
536
|
-
let lookup = water_refraction_lookup(uv, receiver_data.xy, confidence);
|
|
542
|
+
let lookup = select(uv, receiver_data.xy, valid);
|
|
537
543
|
// The surface height here stands for the one above the displaced receiver: they differ by the
|
|
538
544
|
// wave height across a few metres, against a tolerance the gather already allows.
|
|
539
545
|
let gathered = water_receiver_radiance(tScene, tDepth, tNormal, lookup,
|
|
@@ -542,12 +548,12 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptic
|
|
|
542
548
|
var color = original.rgb;
|
|
543
549
|
// the receiver seen through the surface: refracted, or the pixel's own when there is none
|
|
544
550
|
var receiver_coord = coord;
|
|
545
|
-
if (
|
|
551
|
+
if (valid && gathered.a > 0.0) {
|
|
546
552
|
path = min(water_receiver_path(tDepth, tNormal, lookup, camera.projection_matrix_inverse,
|
|
547
553
|
camera.view_matrix, origin), limit);
|
|
548
554
|
color = gathered.rgb;
|
|
549
555
|
receiver_coord = vec2i(lookup * dimensions);
|
|
550
|
-
}
|
|
556
|
+
}
|
|
551
557
|
// The opaque scene was shaded dry: what reaches the receiver is what survives the water above it
|
|
552
558
|
// (WATER_OPTICS_PLAN_2026_10_02.md §4.3). Seen from under the surface, the receiver is above it.
|
|
553
559
|
// Its light is rebuilt on the normal it was shaded with: its triangle's turns at every edge of a
|
|
@@ -574,14 +580,13 @@ fn fs_main(in: WaterVertexOut, @builtin(front_facing) above: bool) -> WaterOptic
|
|
|
574
580
|
}
|
|
575
581
|
let event = water_event(transmitted, fresnel * reflection + scattered);
|
|
576
582
|
let optical = water_transport(event, original.rgb, color, metadata.z);
|
|
577
|
-
return WaterOptics(vec4f(optical.transmission, metadata.z), vec4f(optical.radiance,
|
|
583
|
+
return WaterOptics(vec4f(optical.transmission, metadata.z), vec4f(optical.radiance, 0.0),
|
|
578
584
|
vec4f(optical.background, original.a));
|
|
579
585
|
}
|
|
580
|
-
`, [surface_body, chunk_water_screen_ray, chunk_F_dielectric,
|
|
581
|
-
chunk_ffx_sssr_validate_hit, chunk_texture_sample_bilinear_uv,
|
|
586
|
+
`, [surface_body, chunk_water_screen_ray, chunk_F_dielectric, chunk_ffx_sssr_validate_hit,
|
|
582
587
|
chunk_direction_view_to_world, chunk_ray_at, chunk_water_optics, chunk_water_inscatter,
|
|
583
588
|
chunk_water_receiver_downwelling, chunk_water_receiver_texel,
|
|
584
|
-
chunk_water_transport, chunk_water_receiver_radiance
|
|
589
|
+
chunk_water_transport, chunk_water_receiver_radiance]);
|
|
585
590
|
|
|
586
591
|
export const water_shader = ShaderDescriptor.from({ label: "Water / receivers", resources, body });
|
|
587
592
|
/** The optics pass under IBL, and under LPV, which has no transparent variant. */
|
|
@@ -617,5 +622,11 @@ function water_pipeline(shader, targets, finalize) {
|
|
|
617
622
|
});
|
|
618
623
|
}
|
|
619
624
|
export function create_water_pipeline() { return water_pipeline(water_shader, ['rgba32float', 'rgba32float'], false); }
|
|
620
|
-
|
|
621
|
-
export function
|
|
625
|
+
/** The optics pipeline under IBL, its shader built for `switches` (a ShaderSwitchSet). */
|
|
626
|
+
export function create_water_finalize_pipeline_ibl(switches) {
|
|
627
|
+
return water_pipeline(water_finalize_shader_ibl.variant(switches), ['rgba32float', 'rgba16float', 'rgba16float'], true);
|
|
628
|
+
}
|
|
629
|
+
/** The optics pipeline under Brick4, its shader built for `switches` (a ShaderSwitchSet). */
|
|
630
|
+
export function create_water_finalize_pipeline_brick4(switches) {
|
|
631
|
+
return water_pipeline(water_finalize_shader_brick4.variant(switches), ['rgba32float', 'rgba16float', 'rgba16float'], true);
|
|
632
|
+
}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
export { chunk_water_refraction_confidence } from "./chunk_water_transport.js";
|
|
2
1
|
export const shader_water_occupancy: ComputeShader;
|
|
3
2
|
export const shader_water_splat: ComputeShader;
|
|
4
3
|
export const shader_water_draw: ImageShader;
|
|
5
|
-
export const shader_water_confidence_seed: ImageShader;
|
|
6
|
-
export const shader_water_confidence_x: ImageShader;
|
|
7
|
-
export const shader_water_confidence_y: ImageShader;
|
|
8
4
|
export const shader_water_background_copy: ImageShader;
|
|
9
5
|
export const shader_water_debug: ImageShader;
|
|
10
6
|
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shader_water_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water_avboit.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shader_water_avboit.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/water/shader_water_avboit.js"],"names":[],"mappings":"AAkCA,mDAwBG;AAQH,+CAqCG;AAUH,4CA4BG;AAMH,uDAYG;AAOH,6CAsCG;8BA3L2B,4BAA4B;4BAC9B,0BAA0B"}
|
|
@@ -14,8 +14,6 @@ import { chunk_avboit_view_depth_to_physical } from "../rasterize/native/avboit/
|
|
|
14
14
|
import { chunk_avboit_view_depth_to_virtual } from "../rasterize/native/avboit/chunk_avboit_view_depth_to_virtual.js";
|
|
15
15
|
import { AVBOIT_OCCUPANCY_SETTINGS_STRUCT } from "../rasterize/native/avboit/shader_avboit_occupancy.js";
|
|
16
16
|
import { chunk_get_view_space_depth } from "../shader/chunk/depth/chunk_get_view_space_depth.js";
|
|
17
|
-
import { chunk_is_background } from "../shader/chunk/depth/chunk_is_background.js";
|
|
18
|
-
import { chunk_is_on_screen_i32 } from "../shader/chunk/texture/chunk_is_on_screen_i32.js";
|
|
19
17
|
import { CodeChunk } from "../shader/compiler/CodeChunk.js";
|
|
20
18
|
import { ComputeShader } from "../shader/ComputeShader.js";
|
|
21
19
|
import { ImageShader } from "../shader/ImageShader.js";
|
|
@@ -28,7 +26,6 @@ import { SAMPLER_LINEAR_UPSCALE } from "../texture/SAMPLER_LINEAR_UPSCALE.js";
|
|
|
28
26
|
import { VIEW_UNIFORM_STRUCT } from "../view/VIEW_UNIFORM_STRUCT.js";
|
|
29
27
|
import { VOLUMETRICS_METADATA_STRUCT } from "../volumetrics/VOLUMETRICS_METADATA_STRUCT.js";
|
|
30
28
|
import { DepthStencilState } from '../../descriptor/pipeline/render/DepthStencilState.js';
|
|
31
|
-
export { chunk_water_refraction_confidence } from './chunk_water_transport.js';
|
|
32
29
|
|
|
33
30
|
const occupancy_resources = new ShaderResourceSetDescriptor();
|
|
34
31
|
occupancy_resources.createGroup().addUniform("camera", CAMERA_UNIFORM_STRUCT)
|
|
@@ -144,63 +141,6 @@ fn main(@builtin(position) coord: vec4f) -> WaterContribution {
|
|
|
144
141
|
}), targets: AVBOIT_DRAW_TARGETS,
|
|
145
142
|
});
|
|
146
143
|
|
|
147
|
-
// A depth buffer cannot reveal the receiver hidden behind an emergent object.
|
|
148
|
-
// Fade displacement around those disocclusions instead of exposing a hard control-UV hole.
|
|
149
|
-
// Quarter-resolution conservative seeds and a separable bounded distance transform keep
|
|
150
|
-
// this independent of scene size and avoid a full-resolution neighbourhood search.
|
|
151
|
-
const confidence_seed_resources = new ShaderResourceSetDescriptor();
|
|
152
|
-
confidence_seed_resources.createGroup().addTexture("trace_metadata").addTexture("scene_depth");
|
|
153
|
-
export const shader_water_confidence_seed = ImageShader.from({
|
|
154
|
-
descriptor: ShaderDescriptor.from({ label: "Water / visibility seeds", resources: confidence_seed_resources,
|
|
155
|
-
body: CodeChunk.from(/* language=WGSL */ `
|
|
156
|
-
@fragment
|
|
157
|
-
fn main(@builtin(position) coord: vec4f) -> @location(0) vec4f {
|
|
158
|
-
let tile = vec2u(coord.xy) * 4u;
|
|
159
|
-
let size = textureDimensions(trace_metadata, 0);
|
|
160
|
-
var distance = 16.0;
|
|
161
|
-
for (var y = 0u; y < 4u; y++) {
|
|
162
|
-
for (var x = 0u; x < 4u; x++) {
|
|
163
|
-
let pixel = tile + vec2u(x, y);
|
|
164
|
-
if (all(pixel < size)) {
|
|
165
|
-
let t = textureLoad(trace_metadata, pixel, 0);
|
|
166
|
-
// Only actual geometry/sky boundaries seed the spatial fade. Trace budget
|
|
167
|
-
// or numerical failures must not create moving 64-pixel holes around themselves.
|
|
168
|
-
if (t.b <= 0.0 || is_background(textureLoad(scene_depth, pixel, 0).r)) { distance = 0.0; }
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return vec4f(distance, 0.0, 0.0, 1.0);
|
|
173
|
-
}
|
|
174
|
-
`, [chunk_is_background]),
|
|
175
|
-
}), targets: [{ format: "r16float" }],
|
|
176
|
-
});
|
|
177
|
-
|
|
178
|
-
function confidence_distance_shader(vertical) {
|
|
179
|
-
const resources = new ShaderResourceSetDescriptor();
|
|
180
|
-
resources.createGroup().addTexture("distance_field");
|
|
181
|
-
return ImageShader.from({ descriptor: ShaderDescriptor.from({
|
|
182
|
-
label: vertical ? "Water / visibility distance Y" : "Water / visibility distance X", resources,
|
|
183
|
-
body: CodeChunk.from(/* language=WGSL */ `
|
|
184
|
-
@fragment
|
|
185
|
-
fn main(@builtin(position) coord: vec4f) -> @location(0) vec4f {
|
|
186
|
-
let pixel = vec2i(coord.xy);
|
|
187
|
-
let size = vec2i(textureDimensions(distance_field, 0));
|
|
188
|
-
var distance = 16.0;
|
|
189
|
-
for (var offset = -16; offset <= 16; offset++) {
|
|
190
|
-
let sample = pixel + ${vertical ? "vec2i(0, offset)" : "vec2i(offset, 0)"};
|
|
191
|
-
if (is_on_screen_i32(sample, size)) {
|
|
192
|
-
let d = textureLoad(distance_field, sample, 0).r;
|
|
193
|
-
distance = min(distance, ${vertical ? "length(vec2f(d, f32(offset)))" : "d + abs(f32(offset))"});
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return vec4f(distance, 0.0, 0.0, 1.0);
|
|
197
|
-
}
|
|
198
|
-
`, [chunk_is_on_screen_i32]),
|
|
199
|
-
}), targets: [{ format: "r16float" }] });
|
|
200
|
-
}
|
|
201
|
-
export const shader_water_confidence_x = confidence_distance_shader(false);
|
|
202
|
-
export const shader_water_confidence_y = confidence_distance_shader(true);
|
|
203
|
-
|
|
204
144
|
// Initialize all three final targets in the same render pass as water shading.
|
|
205
145
|
// This samples opaque HDR and needs no COPY_SRC usage or renderer changes.
|
|
206
146
|
const background_resources = new ShaderResourceSetDescriptor();
|
|
@@ -249,9 +189,6 @@ fn main(@builtin(position) coord: vec4f) -> @location(0) vec4f {
|
|
|
249
189
|
}
|
|
250
190
|
case 5u: { color = textureLoad(radiance, pixel, 0).rgb; }
|
|
251
191
|
case 6u: { color = vec3f(min(textureLoad(trace_metadata, pixel, 0).g, 1.0)); }
|
|
252
|
-
case 10u: {
|
|
253
|
-
color = vec3f(textureLoad(radiance, pixel, 0).a);
|
|
254
|
-
}
|
|
255
192
|
case 8u, 9u: {
|
|
256
193
|
let z = get_view_space_depth(textureLoad(interface_depth, pixel, 0).r, camera);
|
|
257
194
|
// without the draw's footprint (a derivative this switch cannot take): where the water is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WGSLJavaScriptCompiler.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"WGSLJavaScriptCompiler.d.ts","sourceRoot":"","sources":["../../../../../src/shade/wgsl/emulator/WGSLJavaScriptCompiler.js"],"names":[],"mappings":"AA+nBA;IAEI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,oBAFa,MAAM,CAMlB;CACJ;;UA1pBa,WAAW,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS;WAC/G,MAAM;WACN,MAAM;WACN,MAAM;WACN,MAAM;aACN,MAAM;cACN,QAAQ;YACR,MAAM"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { assert } from "../../../core/assert.js";
|
|
2
|
+
import { FLOAT32_MAX } from "../../../core/binary/FLOAT32_MAX.js";
|
|
2
3
|
import LineBuilder from "../../../core/codegen/LineBuilder.js";
|
|
3
4
|
|
|
4
5
|
// =========================================================================
|
|
@@ -83,12 +84,25 @@ class Scope {
|
|
|
83
84
|
* @type {Set<string>}
|
|
84
85
|
*/
|
|
85
86
|
this.boxed = new Set();
|
|
87
|
+
/**
|
|
88
|
+
* The value of each abstract `const` declared here whose initializer folds, so a use of
|
|
89
|
+
* the name converts it at compile time as a use of the literal does.
|
|
90
|
+
* @type {Map<string, number>}
|
|
91
|
+
*/
|
|
92
|
+
this.values = new Map();
|
|
86
93
|
}
|
|
87
94
|
|
|
88
|
-
|
|
95
|
+
/**
|
|
96
|
+
* @param {string} name
|
|
97
|
+
* @param {WgslType} type
|
|
98
|
+
* @param {number} [value] the folded value of an abstract `const`
|
|
99
|
+
*/
|
|
100
|
+
declare(name, type, value) {
|
|
89
101
|
this.symbols.set(name, type || T_UNKNOWN);
|
|
90
102
|
this.pointers.delete(name);
|
|
91
103
|
this.boxed.delete(name);
|
|
104
|
+
if (value !== undefined) this.values.set(name, value);
|
|
105
|
+
else this.values.delete(name);
|
|
92
106
|
}
|
|
93
107
|
|
|
94
108
|
/**
|
|
@@ -104,6 +118,7 @@ class Scope {
|
|
|
104
118
|
*/
|
|
105
119
|
declarePointer(name, type, boxed) {
|
|
106
120
|
this.symbols.set(name, type || T_UNKNOWN);
|
|
121
|
+
this.values.delete(name);
|
|
107
122
|
this.pointers.add(name);
|
|
108
123
|
if (boxed) this.boxed.add(name);
|
|
109
124
|
else this.boxed.delete(name);
|
|
@@ -136,6 +151,16 @@ class Scope {
|
|
|
136
151
|
return T_UNKNOWN;
|
|
137
152
|
}
|
|
138
153
|
|
|
154
|
+
/**
|
|
155
|
+
* @param {string} name
|
|
156
|
+
* @returns {number | undefined} the folded value of `name`, as seen from here, if it is an abstract `const` that has one
|
|
157
|
+
*/
|
|
158
|
+
lookupValue(name) {
|
|
159
|
+
if (this.symbols.has(name)) return this.values.get(name);
|
|
160
|
+
if (this.parent) return this.parent.lookupValue(name);
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
|
|
139
164
|
push() {
|
|
140
165
|
return new Scope(this);
|
|
141
166
|
}
|
|
@@ -1135,7 +1160,7 @@ function collectGlobalValue(c, node) {
|
|
|
1135
1160
|
type = keeps_abstract ? expr.type : concreteDefault(expr.type);
|
|
1136
1161
|
}
|
|
1137
1162
|
|
|
1138
|
-
c.scope.declare(name, type);
|
|
1163
|
+
c.scope.declare(name, type, isAbstractType(type) ? expr.value : undefined);
|
|
1139
1164
|
c.privateGlobals.push({
|
|
1140
1165
|
name,
|
|
1141
1166
|
kind: 'const',
|
|
@@ -1402,7 +1427,7 @@ function emitVariableOrValueStatement(c, node) {
|
|
|
1402
1427
|
if (var_decl === null && isPointerExpression(c, expr_node)) {
|
|
1403
1428
|
c.scope.declarePointer(name, type, false);
|
|
1404
1429
|
} else {
|
|
1405
|
-
c.scope.declare(name, type);
|
|
1430
|
+
c.scope.declare(name, type, isAbstractType(type) ? expr.value : undefined);
|
|
1406
1431
|
}
|
|
1407
1432
|
c.out.add(`${kind} ${identToJs(name)} = ${value};`);
|
|
1408
1433
|
} else {
|
|
@@ -2054,10 +2079,10 @@ function compileExpressionAbstract(c, node) {
|
|
|
2054
2079
|
if (u.type === 'template_elaborated_ident') {
|
|
2055
2080
|
const ident = namedChildByType(u, 'ident');
|
|
2056
2081
|
const name = ident !== null ? ident.text : u.text;
|
|
2057
|
-
return { code: identToJs(name), type: c.scope.lookup(name), pointer_box: c.scope.isBoxedPointer(name) };
|
|
2082
|
+
return { code: identToJs(name), type: c.scope.lookup(name), value: c.scope.lookupValue(name), pointer_box: c.scope.isBoxedPointer(name) };
|
|
2058
2083
|
}
|
|
2059
2084
|
if (u.type === 'ident') {
|
|
2060
|
-
return { code: identToJs(u.text), type: c.scope.lookup(u.text), pointer_box: c.scope.isBoxedPointer(u.text) };
|
|
2085
|
+
return { code: identToJs(u.text), type: c.scope.lookup(u.text), value: c.scope.lookupValue(u.text), pointer_box: c.scope.isBoxedPointer(u.text) };
|
|
2061
2086
|
}
|
|
2062
2087
|
|
|
2063
2088
|
c.error(u, `unsupported expression: ${u.type}`);
|
|
@@ -2277,10 +2302,16 @@ function concreteDefault(t) {
|
|
|
2277
2302
|
* An abstract operand converted to the concrete scalar type it meets.
|
|
2278
2303
|
*
|
|
2279
2304
|
* Only a float target changes the value. An AbstractFloat becoming an f32 is rounded to one, and
|
|
2280
|
-
* so is an AbstractInt too large for f32 to hold. A literal
|
|
2281
|
-
* emitted unchanged when f32 holds it already, which most literals
|
|
2282
|
-
* target changes nothing: an AbstractInt has the same value in i32 and
|
|
2283
|
-
* cannot meet an integer in a valid shader.
|
|
2305
|
+
* so is an AbstractInt too large for f32 to hold. A literal, or a `const` initialized with one, is
|
|
2306
|
+
* folded at compile time, and is emitted unchanged when f32 holds it already, which most literals
|
|
2307
|
+
* in a shader are. An integer target changes nothing: an AbstractInt has the same value in i32 and
|
|
2308
|
+
* u32, and an AbstractFloat cannot meet an integer in a valid shader.
|
|
2309
|
+
*
|
|
2310
|
+
* A folded value beyond the largest finite f32 is refused, as a device refuses it: WGSL makes that
|
|
2311
|
+
* conversion a shader-creation error rather than a rounding, so `3.4028235e38` — the shortest
|
|
2312
|
+
* decimal that names the largest f32 — does not compile where it meets an f32, although it would
|
|
2313
|
+
* round to one. Rounding it here instead let ReSTIR DI's resample and spatial passes run under the
|
|
2314
|
+
* emulator while neither compiled on a device.
|
|
2284
2315
|
*
|
|
2285
2316
|
* @param {{ code: string, type: WgslType, value?: number }} operand
|
|
2286
2317
|
* @param {string} scalar the concrete scalar type's name
|
|
@@ -2295,6 +2326,9 @@ function convertAbstract(operand, scalar) {
|
|
|
2295
2326
|
if (operand.value === undefined) {
|
|
2296
2327
|
return { code: `wgsl.f32(${operand.code})`, type };
|
|
2297
2328
|
}
|
|
2329
|
+
if (!(Math.abs(operand.value) <= FLOAT32_MAX)) {
|
|
2330
|
+
throw new Error(`WGSL compiler: value ${operand.value} cannot be represented as 'f32' (at ${JSON.stringify(operand.code)})`);
|
|
2331
|
+
}
|
|
2298
2332
|
const rounded = Math.fround(operand.value);
|
|
2299
2333
|
return { code: rounded === operand.value ? operand.code : `(${rounded})`, type };
|
|
2300
2334
|
}
|