@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,4 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* @typedef {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
|
|
2
3
|
* @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
|
|
3
4
|
* @typedef {import("./SceneVolumetrics.js").SceneVolumetrics} SceneVolumetrics
|
|
4
5
|
* @typedef {import("../buffer/table/GPUTypedTable.js").GPUTypedTable} GPUTypedTable
|
|
@@ -14,20 +15,41 @@
|
|
|
14
15
|
* the same frame, takes the rows to the GPU. The rows are dense from 0, which the passes' walk over
|
|
15
16
|
* `[0, participating_media_volumes_count)` relies on. A volume whose transform has no inverse —
|
|
16
17
|
* scaled to nothing on an axis — gets no row.
|
|
18
|
+
*
|
|
19
|
+
* **The noise atlas lives here too.** Every volume's noise is a tile of one 3-D atlas the passes
|
|
20
|
+
* bind beside the scene database, and the atlas is this scene's: slot 0 is the engine's own tile,
|
|
21
|
+
* baked on the device the first time this updates, and the rest are whoever asked
|
|
22
|
+
* {@link noise_atlas} for them. Per scene rather than per device because a volume names its tile
|
|
23
|
+
* by slot, and the volumes are the scene's.
|
|
17
24
|
*/
|
|
18
25
|
export class GPUSceneVolumetrics {
|
|
26
|
+
/**
|
|
27
|
+
* Offer the pipeline every scene's first {@link update} bakes its default noise tile with — see
|
|
28
|
+
* {@link PipelineEnquiry}. Fog itself is drawn by passes of the view, for a scene that has volumes.
|
|
29
|
+
*
|
|
30
|
+
* @param {PipelineEnquiry} enquiry
|
|
31
|
+
*/
|
|
32
|
+
static enquirePipelines(enquiry: PipelineEnquiry): void;
|
|
19
33
|
/**
|
|
20
34
|
*
|
|
35
|
+
* @param {GPUDevice} device
|
|
21
36
|
* @param {GPUTypedTable} table the scene database's `participating_media_volumes` table
|
|
22
37
|
* @param {SceneVolumetrics} volumetrics
|
|
23
38
|
*/
|
|
24
|
-
constructor(table: import("../buffer/table/GPUTypedTable.js").GPUTypedTable<any>, volumetrics: SceneVolumetrics);
|
|
39
|
+
constructor(device: GPUDevice, table: import("../buffer/table/GPUTypedTable.js").GPUTypedTable<any>, volumetrics: SceneVolumetrics);
|
|
25
40
|
/**
|
|
26
41
|
* @type {SceneVolumetrics}
|
|
27
42
|
*/
|
|
28
43
|
source: SceneVolumetrics;
|
|
29
44
|
/**
|
|
30
|
-
*
|
|
45
|
+
* The tiles a volume's `noise_slot` names. Slot {@link PARTICIPATING_MEDIA_NOISE_DEFAULT_SLOT}
|
|
46
|
+
* is the engine's; `allocate` one and `write` it for a tile of your own.
|
|
47
|
+
*
|
|
48
|
+
* @returns {GPUTileAtlas3D}
|
|
49
|
+
*/
|
|
50
|
+
get noise_atlas(): GPUTileAtlas3D;
|
|
51
|
+
/**
|
|
52
|
+
* The rows belong to the scene database; the atlas is ours.
|
|
31
53
|
*/
|
|
32
54
|
destroy(): void;
|
|
33
55
|
/**
|
|
@@ -38,7 +60,9 @@ export class GPUSceneVolumetrics {
|
|
|
38
60
|
update(gfx: GraphicsContext, time_delta_s: number): void;
|
|
39
61
|
#private;
|
|
40
62
|
}
|
|
63
|
+
export type PipelineEnquiry = import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry;
|
|
41
64
|
export type GraphicsContext = import("../GraphicsContext.js").GraphicsContext;
|
|
42
65
|
export type SceneVolumetrics = import("./SceneVolumetrics.js").SceneVolumetrics;
|
|
43
66
|
export type GPUTypedTable = import("../buffer/table/GPUTypedTable.js").GPUTypedTable<any>;
|
|
67
|
+
import { GPUTileAtlas3D } from "../texture/atlas/GPUTileAtlas3D.js";
|
|
44
68
|
//# sourceMappingURL=GPUSceneVolumetrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUSceneVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUSceneVolumetrics.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUSceneVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUSceneVolumetrics.js"],"names":[],"mappings":"AAoBA;;;;;GAKG;AAEH;;;;;;;;;;;;;;;;;GAiBG;AACH;IAEI;;;;;OAKG;IACH,iCAFW,eAAe,QAIzB;IA2BD;;;;;OAKG;IACH,kHAFW,gBAAgB,EA2B1B;IAxDD;;OAEG;IACH,QAFU,gBAAgB,CAEpB;IAuDN;;;;;OAKG;IACH,kCAEC;IAED;;OAEG;IACH,gBAEC;IAED;;;;OAIG;IACH,YAHW,eAAe,gBACf,MAAM,QAqEhB;;CACJ;8BAxLY,OAAO,0CAA0C,EAAE,eAAe;8BAClE,OAAO,uBAAuB,EAAE,eAAe;+BAC/C,OAAO,uBAAuB,EAAE,gBAAgB;;+BApB9B,oCAAoC"}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
|
+
import { assert } from "../../../core/assert.js";
|
|
1
2
|
import { m4_invert } from "../../../core/geom/3d/mat4/m4_invert.js";
|
|
3
|
+
import { ShadeGPUCommandContext } from "../../device/ShadeGPUCommandContext.js";
|
|
4
|
+
import { GPUTileAtlas3D } from "../texture/atlas/GPUTileAtlas3D.js";
|
|
5
|
+
import {
|
|
6
|
+
bake_volumetrics_noise_tile,
|
|
7
|
+
enquire_bake_volumetrics_noise_tile_pipelines
|
|
8
|
+
} from "./noise/bake_volumetrics_noise_tile.js";
|
|
9
|
+
import {
|
|
10
|
+
PARTICIPATING_MEDIA_NOISE_ATLAS_CAPACITY,
|
|
11
|
+
PARTICIPATING_MEDIA_NOISE_ATLAS_SLOTS_X,
|
|
12
|
+
PARTICIPATING_MEDIA_NOISE_ATLAS_SLOTS_Y,
|
|
13
|
+
PARTICIPATING_MEDIA_NOISE_DEFAULT_FEATURES,
|
|
14
|
+
PARTICIPATING_MEDIA_NOISE_DEFAULT_OCTAVES,
|
|
15
|
+
PARTICIPATING_MEDIA_NOISE_DEFAULT_SLOT,
|
|
16
|
+
PARTICIPATING_MEDIA_NOISE_TILE_BORDER,
|
|
17
|
+
PARTICIPATING_MEDIA_NOISE_TILE_CONTENT_SIZE,
|
|
18
|
+
PARTICIPATING_MEDIA_NOISE_TILE_FORMAT
|
|
19
|
+
} from "./noise/PARTICIPATING_MEDIA_NOISE.js";
|
|
2
20
|
|
|
3
21
|
/**
|
|
22
|
+
* @typedef {import("../../device/pipeline/PipelineEnquiry.js").PipelineEnquiry} PipelineEnquiry
|
|
4
23
|
* @typedef {import("../GraphicsContext.js").GraphicsContext} GraphicsContext
|
|
5
24
|
* @typedef {import("./SceneVolumetrics.js").SceneVolumetrics} SceneVolumetrics
|
|
6
25
|
* @typedef {import("../buffer/table/GPUTypedTable.js").GPUTypedTable} GPUTypedTable
|
|
@@ -17,9 +36,25 @@ import { m4_invert } from "../../../core/geom/3d/mat4/m4_invert.js";
|
|
|
17
36
|
* the same frame, takes the rows to the GPU. The rows are dense from 0, which the passes' walk over
|
|
18
37
|
* `[0, participating_media_volumes_count)` relies on. A volume whose transform has no inverse —
|
|
19
38
|
* scaled to nothing on an axis — gets no row.
|
|
39
|
+
*
|
|
40
|
+
* **The noise atlas lives here too.** Every volume's noise is a tile of one 3-D atlas the passes
|
|
41
|
+
* bind beside the scene database, and the atlas is this scene's: slot 0 is the engine's own tile,
|
|
42
|
+
* baked on the device the first time this updates, and the rest are whoever asked
|
|
43
|
+
* {@link noise_atlas} for them. Per scene rather than per device because a volume names its tile
|
|
44
|
+
* by slot, and the volumes are the scene's.
|
|
20
45
|
*/
|
|
21
46
|
export class GPUSceneVolumetrics {
|
|
22
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Offer the pipeline every scene's first {@link update} bakes its default noise tile with — see
|
|
50
|
+
* {@link PipelineEnquiry}. Fog itself is drawn by passes of the view, for a scene that has volumes.
|
|
51
|
+
*
|
|
52
|
+
* @param {PipelineEnquiry} enquiry
|
|
53
|
+
*/
|
|
54
|
+
static enquirePipelines(enquiry) {
|
|
55
|
+
enquire_bake_volumetrics_noise_tile_pipelines(enquiry);
|
|
56
|
+
}
|
|
57
|
+
|
|
23
58
|
/**
|
|
24
59
|
* @type {SceneVolumetrics}
|
|
25
60
|
*/
|
|
@@ -33,21 +68,66 @@ export class GPUSceneVolumetrics {
|
|
|
33
68
|
*/
|
|
34
69
|
#table;
|
|
35
70
|
|
|
71
|
+
/**
|
|
72
|
+
* @type {GPUTileAtlas3D}
|
|
73
|
+
*/
|
|
74
|
+
#noise_atlas;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Whether slot 0 holds the engine's tile yet. Baked on the first update, since a bake needs a
|
|
78
|
+
* command stream and the constructor has none.
|
|
79
|
+
* @type {boolean}
|
|
80
|
+
*/
|
|
81
|
+
#default_baked = false;
|
|
82
|
+
|
|
36
83
|
/**
|
|
37
84
|
*
|
|
85
|
+
* @param {GPUDevice} device
|
|
38
86
|
* @param {GPUTypedTable} table the scene database's `participating_media_volumes` table
|
|
39
87
|
* @param {SceneVolumetrics} volumetrics
|
|
40
88
|
*/
|
|
41
|
-
constructor(table, volumetrics) {
|
|
42
|
-
|
|
89
|
+
constructor(device, table, volumetrics) {
|
|
90
|
+
assert.defined(device, 'device');
|
|
91
|
+
assert.defined(table, 'table');
|
|
92
|
+
assert.defined(volumetrics, 'volumetrics');
|
|
43
93
|
|
|
94
|
+
this.#table = table;
|
|
44
95
|
this.source = volumetrics;
|
|
96
|
+
|
|
97
|
+
this.#noise_atlas = new GPUTileAtlas3D({
|
|
98
|
+
device,
|
|
99
|
+
format: PARTICIPATING_MEDIA_NOISE_TILE_FORMAT,
|
|
100
|
+
content_size: PARTICIPATING_MEDIA_NOISE_TILE_CONTENT_SIZE,
|
|
101
|
+
border: PARTICIPATING_MEDIA_NOISE_TILE_BORDER,
|
|
102
|
+
slots_x: PARTICIPATING_MEDIA_NOISE_ATLAS_SLOTS_X,
|
|
103
|
+
slots_y: PARTICIPATING_MEDIA_NOISE_ATLAS_SLOTS_Y,
|
|
104
|
+
capacity: PARTICIPATING_MEDIA_NOISE_ATLAS_CAPACITY,
|
|
105
|
+
// sampled by the density pass; the bake lands by copy, which the atlas provides for
|
|
106
|
+
usage: GPUTextureUsage.TEXTURE_BINDING,
|
|
107
|
+
label: "GPUSceneVolumetrics/noise atlas",
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
// the first slot of a fresh atlas, which is what makes 0 the engine's by convention
|
|
111
|
+
const slot = this.#noise_atlas.allocate();
|
|
112
|
+
|
|
113
|
+
assert.equal(slot, PARTICIPATING_MEDIA_NOISE_DEFAULT_SLOT, 'the engine\'s tile takes the first slot');
|
|
45
114
|
}
|
|
46
115
|
|
|
47
116
|
/**
|
|
48
|
-
*
|
|
117
|
+
* The tiles a volume's `noise_slot` names. Slot {@link PARTICIPATING_MEDIA_NOISE_DEFAULT_SLOT}
|
|
118
|
+
* is the engine's; `allocate` one and `write` it for a tile of your own.
|
|
119
|
+
*
|
|
120
|
+
* @returns {GPUTileAtlas3D}
|
|
121
|
+
*/
|
|
122
|
+
get noise_atlas() {
|
|
123
|
+
return this.#noise_atlas;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* The rows belong to the scene database; the atlas is ours.
|
|
49
128
|
*/
|
|
50
129
|
destroy() {
|
|
130
|
+
this.#noise_atlas.destroy();
|
|
51
131
|
}
|
|
52
132
|
|
|
53
133
|
/**
|
|
@@ -59,6 +139,22 @@ export class GPUSceneVolumetrics {
|
|
|
59
139
|
gfx,
|
|
60
140
|
time_delta_s
|
|
61
141
|
) {
|
|
142
|
+
if (!this.#default_baked) {
|
|
143
|
+
const command = ShadeGPUCommandContext.create(gfx, 'GPUSceneVolumetrics/noise bake');
|
|
144
|
+
|
|
145
|
+
bake_volumetrics_noise_tile({
|
|
146
|
+
command,
|
|
147
|
+
atlas: this.#noise_atlas,
|
|
148
|
+
slot: PARTICIPATING_MEDIA_NOISE_DEFAULT_SLOT,
|
|
149
|
+
features: PARTICIPATING_MEDIA_NOISE_DEFAULT_FEATURES,
|
|
150
|
+
octaves: PARTICIPATING_MEDIA_NOISE_DEFAULT_OCTAVES,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
command.finish();
|
|
154
|
+
|
|
155
|
+
this.#default_baked = true;
|
|
156
|
+
}
|
|
157
|
+
|
|
62
158
|
if (this.#version === this.source.version) {
|
|
63
159
|
// no change
|
|
64
160
|
return;
|
|
@@ -81,6 +177,9 @@ export class GPUSceneVolumetrics {
|
|
|
81
177
|
continue;
|
|
82
178
|
}
|
|
83
179
|
|
|
180
|
+
assert.greaterThan(v.noise_scale, 0, 'noise_scale must be positive');
|
|
181
|
+
assert.ok(this.#noise_atlas.is_live(v.noise_slot), `noise_slot ${v.noise_slot} is not an allocated tile of this scene's noise atlas`);
|
|
182
|
+
|
|
84
183
|
table.add({
|
|
85
184
|
particle_spec: {
|
|
86
185
|
scattering: v.particle_spec.scattering,
|
|
@@ -93,10 +192,15 @@ export class GPUSceneVolumetrics {
|
|
|
93
192
|
transform_inverse: m4_transform_inverse,
|
|
94
193
|
fade_distance: v.fade_distance,
|
|
95
194
|
density: v.density,
|
|
195
|
+
noise_offset: v.noise_offset,
|
|
196
|
+
noise_warp_offset: v.noise_warp_offset,
|
|
197
|
+
noise_slot: v.noise_slot,
|
|
198
|
+
noise_strength: v.noise_strength,
|
|
199
|
+
noise_inverse_scale: 1 / v.noise_scale,
|
|
200
|
+
noise_warp: v.noise_warp,
|
|
96
201
|
});
|
|
97
202
|
}
|
|
98
203
|
|
|
99
204
|
this.#version = this.source.version;
|
|
100
205
|
}
|
|
101
|
-
|
|
102
206
|
}
|
|
@@ -32,6 +32,8 @@ export class GPUViewVolumetrics {
|
|
|
32
32
|
* @param {number} options.shadowmap_atlas
|
|
33
33
|
* @param {import("../ShadeIndirectLightingMode.js").ShadeIndirectLightingMode} options.indirect_lighting_mode the renderer's; picks the froxel GI
|
|
34
34
|
* module that starts the froxel irradiance volume
|
|
35
|
+
* @param {ShaderSwitchSet} [options.shader_switches] the renderer's; the passes that light froxels are built
|
|
36
|
+
* for them
|
|
35
37
|
* @returns {{resolved: number, metadata: number, irradiance: {Y: number, CoCg: number}}} the
|
|
36
38
|
* integrated aerial LUT, the metadata buffer, and the froxel irradiance volume
|
|
37
39
|
* (chunk_volumetrics_irradiance_sh) that lit particles are lit by. The two do not depend on
|
|
@@ -39,13 +41,14 @@ export class GPUViewVolumetrics {
|
|
|
39
41
|
* with no participating-media volume records no fog at all, and `resolved` is then a constant:
|
|
40
42
|
* no in-scatter, full transmittance.
|
|
41
43
|
*/
|
|
42
|
-
graph_update({ graph, light_cluster_data, light_cluster_lookup, light_cluster_parameters, shadowmap_atlas, indirect_lighting_mode, }: {
|
|
44
|
+
graph_update({ graph, light_cluster_data, light_cluster_lookup, light_cluster_parameters, shadowmap_atlas, indirect_lighting_mode, shader_switches, }: {
|
|
43
45
|
graph: FrameGraph;
|
|
44
46
|
light_cluster_data: number;
|
|
45
47
|
light_cluster_lookup: number;
|
|
46
48
|
light_cluster_parameters: number;
|
|
47
49
|
shadowmap_atlas: number;
|
|
48
50
|
indirect_lighting_mode: import("../ShadeIndirectLightingMode.js").ShadeIndirectLightingMode;
|
|
51
|
+
shader_switches?: ShaderSwitchSet;
|
|
49
52
|
}): {
|
|
50
53
|
resolved: number;
|
|
51
54
|
metadata: number;
|
|
@@ -58,4 +61,5 @@ export class GPUViewVolumetrics {
|
|
|
58
61
|
}
|
|
59
62
|
export type FrameGraph = import("../../../engine/graphics/render/frame_graph/FrameGraph.js").FrameGraph;
|
|
60
63
|
export type GPUViewContext = import("../view/GPUViewContext.js").GPUViewContext;
|
|
64
|
+
import { ShaderSwitchSet } from "../shader/compiler/ShaderSwitchSet.js";
|
|
61
65
|
//# sourceMappingURL=GPUViewVolumetrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GPUViewVolumetrics.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/GPUViewVolumetrics.js"],"names":[],"mappings":"AAmCA;IA2II;;;;OAIG;IACH,kBAHW,cAAc,qBAyCxB;IAlJD;;OAEG;IACH,4BAOC;IAjBD;;OAEG;IACH,2BAEC;IAsCD;;OAEG;IACH,0BAEC;IAZD;;OAEG;IACH,yBAEC;IAkHD,gBAaC;IA6ND;;;;;;;;;;;;;;;;;;OAkBG;IACH;QAhB+B,KAAK,EAAzB,UAAU;QACM,kBAAkB,EAAlC,MAAM;QACU,oBAAoB,EAApC,MAAM;QACU,wBAAwB,EAAxC,MAAM;QACU,eAAe,EAA/B,MAAM;QACuE,sBAAsB,EAAnG,OAAO,iCAAiC,EAAE,yBAAyB;QAEzC,eAAe,GAAzC,eAAe;QAEb;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAC,CAAA;KAAC,CAsIvF;;CAEJ;yBA/jBY,OAAO,2DAA2D,EAAE,UAAU;6BAC9E,OAAO,2BAA2B,EAAE,cAAc;gCAf/B,uCAAuC"}
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
build_volumetrics_sun_shadow_transform,
|
|
11
11
|
volumetrics_sun_shadow_cascade_far
|
|
12
12
|
} from "./build_volumetrics_sun_shadow_transform.js";
|
|
13
|
+
import { ShaderSwitchSet } from "../shader/compiler/ShaderSwitchSet.js";
|
|
13
14
|
import { graph_build_froxel_irradiance } from "./graph_build_froxel_irradiance.js";
|
|
14
15
|
import { graph_build_volumetrics } from "./graph_build_volumetrics.js";
|
|
15
16
|
import {
|
|
@@ -460,6 +461,8 @@ export class GPUViewVolumetrics {
|
|
|
460
461
|
* @param {number} options.shadowmap_atlas
|
|
461
462
|
* @param {import("../ShadeIndirectLightingMode.js").ShadeIndirectLightingMode} options.indirect_lighting_mode the renderer's; picks the froxel GI
|
|
462
463
|
* module that starts the froxel irradiance volume
|
|
464
|
+
* @param {ShaderSwitchSet} [options.shader_switches] the renderer's; the passes that light froxels are built
|
|
465
|
+
* for them
|
|
463
466
|
* @returns {{resolved: number, metadata: number, irradiance: {Y: number, CoCg: number}}} the
|
|
464
467
|
* integrated aerial LUT, the metadata buffer, and the froxel irradiance volume
|
|
465
468
|
* (chunk_volumetrics_irradiance_sh) that lit particles are lit by. The two do not depend on
|
|
@@ -474,6 +477,7 @@ export class GPUViewVolumetrics {
|
|
|
474
477
|
light_cluster_parameters,
|
|
475
478
|
shadowmap_atlas,
|
|
476
479
|
indirect_lighting_mode,
|
|
480
|
+
shader_switches = ShaderSwitchSet.EMPTY,
|
|
477
481
|
}) {
|
|
478
482
|
|
|
479
483
|
const view = this.#view;
|
|
@@ -525,6 +529,7 @@ export class GPUViewVolumetrics {
|
|
|
525
529
|
volumetrics_metadata: gr_metadata,
|
|
526
530
|
resolution,
|
|
527
531
|
indirect_lighting_mode,
|
|
532
|
+
shader_switches,
|
|
528
533
|
});
|
|
529
534
|
|
|
530
535
|
if (view.scene.volumetrics.source.volumes.length === 0) {
|
|
@@ -582,6 +587,7 @@ export class GPUViewVolumetrics {
|
|
|
582
587
|
taa_history,
|
|
583
588
|
taa_output,
|
|
584
589
|
camera_previous: view.gpu_previous_camera_state,
|
|
590
|
+
shader_switches,
|
|
585
591
|
});
|
|
586
592
|
|
|
587
593
|
this.#reset_history = false;
|
|
@@ -1021,3 +1021,53 @@ Observed in that same set-up, and not changed here: with the light 0.25 m from t
|
|
|
1021
1021
|
jittered irradiance shows as blotchy 16-pixel blocks around the light even after 420 frames of the
|
|
1022
1022
|
main TAA, identically on the old build. Nothing filters the irradiance volume in time, and a whole
|
|
1023
1023
|
froxel flickering together is coherent over more pixels than the TAA's neighbourhood clamp looks at.
|
|
1024
|
+
|
|
1025
|
+
## Noise on the volumes — built and measured, 2026-10-15
|
|
1026
|
+
|
|
1027
|
+
`VOLUMETRIC_NOISE_PLAN_2026_10_15.md` is the design and the record of how it got there (Smolder,
|
|
1028
|
+
Enshrouded 2025 and AC4 read; three revisions; Alex's answers). What landed: a general 3-D tile
|
|
1029
|
+
atlas (`texture/atlas/GPUTileAtlas3D`), the volumetrics instance of it on `GPUSceneVolumetrics`
|
|
1030
|
+
(`r8unorm`, 128³ content + a one-texel skirt, growing by a layer along z), slot 0 baked on the
|
|
1031
|
+
device from three octaves of `psrdnoise3` the first time the scene updates, and a per-volume
|
|
1032
|
+
`[0, 1]` multiplier on density — two trilinear taps at most (base, and a warp tap that displaces the
|
|
1033
|
+
base lookup), read at a per-froxel STBN-jittered point at a third decorrelation offset `(53, 97)`,
|
|
1034
|
+
scrolled by phases the host folds and wraps in f64. The path tracer reads the same function.
|
|
1035
|
+
|
|
1036
|
+
**The tile is on the device.** Read back off the atlas through `download_region` in the froxel
|
|
1037
|
+
playground (RTX 4090, Chrome, headless): a z slice through the middle of slot 0 spans 0–255 with a
|
|
1038
|
+
mean of 125.5 and texels in all eight histogram bins; every skirt texel checked equals the content
|
|
1039
|
+
texel it wraps; a row reads 127, 167, 200, 220, …, 253, …, 14 — a continuous field, not a block.
|
|
1040
|
+
|
|
1041
|
+
**The picture changes by the noise and nothing else.** `measure.js`'s image `ab` from the "Inside
|
|
1042
|
+
the fog" viewpoint at 1080p, the fog bank with `noise_strength` 0 against 1 (16-frame averages after
|
|
1043
|
+
45 frames of settling, the floor from a repeat of each side):
|
|
1044
|
+
|
|
1045
|
+
| | mean |d| luminance |
|
|
1046
|
+
|---|---|
|
|
1047
|
+
| floor, off vs off / on vs on | 0.44 / 0.24 |
|
|
1048
|
+
| signal, off vs on, twice | 17.0 / 16.7 |
|
|
1049
|
+
|
|
1050
|
+
Signed mean +14.9: the fog thins where the tile is below its mean, so more of the lit scene shows.
|
|
1051
|
+
|
|
1052
|
+
**What it costs: the taps are below the density pass's timestamp quantum unless the camera is in
|
|
1053
|
+
the noisy volume.** Per-pass GPU medians (`profile`, 60 recorded frames an arm, six rounds, the
|
|
1054
|
+
two arms interleaved and their order alternated each round, 3796×1852):
|
|
1055
|
+
|
|
1056
|
+
| view | `build participating media`, uniform | with noise | frame |
|
|
1057
|
+
|---|---|---|---|
|
|
1058
|
+
| Dead overview, 2 noisy volumes covering few froxels | 0.2355 (6/6 identical) | 0.2355 (6/6) | 5.062 vs 5.068 |
|
|
1059
|
+
| Inside the graveyard fog | 0.2427–0.2437 | 0.2468 (6/6) | 4.619 vs 4.624 |
|
|
1060
|
+
| Inside the fog bank, 3 noisy volumes | 0.2642 (6/6) | 0.2703–0.2714 | 5.456 vs 5.466 |
|
|
1061
|
+
|
|
1062
|
+
So +0.003 to +0.007 ms on the pass at 2160p with every froxel in front of the camera paying two
|
|
1063
|
+
taps, spreads disjoint; the frame totals sit inside their own round-to-round spread (±0.01 ms).
|
|
1064
|
+
Lighting, TAA and the LUT read identically in both arms. The whole-frame readings are the usual
|
|
1065
|
+
reminder that the pass capture is the number to believe (the README's Q-04 story).
|
|
1066
|
+
|
|
1067
|
+
**The uniform path is untouched by construction**, not by measurement: `noise_strength > 0` is a
|
|
1068
|
+
per-volume uniform branch around the taps. A zero-volume scene was not re-timed.
|
|
1069
|
+
|
|
1070
|
+
Not done on the device: the froxel-versus-tracer parity check for a noisy volume (both paths read
|
|
1071
|
+
one function and `chunk_participating_media_noise.spec.js` pins it on the emulator), and the
|
|
1072
|
+
giant-particle seam check with a noisy volume (the point is jittered on all three axes exactly as
|
|
1073
|
+
the lighting pass's is). Driver and probes: `probe/` in session 2fe0ac92's scratchpad, a one-off.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js"],"names":[],"mappings":"AAWA,
|
|
1
|
+
{"version":3,"file":"PARTICIPATING_MEDIA_VOLUME_STRUCT.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/PARTICIPATING_MEDIA_VOLUME_STRUCT.js"],"names":[],"mappings":"AAWA,6DA2CE;6BArD2B,gCAAgC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f32, mat4x4f, vec3f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
1
|
+
import { f32, mat4x4f, u32, vec3f } from "../shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
2
2
|
import { WebGPUStruct } from "../shader/type/WebGPUStruct.js";
|
|
3
3
|
|
|
4
4
|
const VOLUMETRICS_PARTICLE_SPEC_STRUCT = WebGPUStruct.from({
|
|
@@ -23,4 +23,33 @@ export const PARTICIPATING_MEDIA_VOLUME_STRUCT = WebGPUStruct.from({
|
|
|
23
23
|
* Numeric density of particles. In physics this would be `N`.
|
|
24
24
|
*/
|
|
25
25
|
density: f32,
|
|
26
|
+
/**
|
|
27
|
+
* Noise: a tile of the volumetrics noise atlas, sampled in world space and multiplied into the
|
|
28
|
+
* density. See `chunk_participating_media_noise`.
|
|
29
|
+
*
|
|
30
|
+
* The scroll of the base tap, in tile units, wrapped to [0, 1) on the host — the GPU never
|
|
31
|
+
* multiplies a velocity by a time.
|
|
32
|
+
*/
|
|
33
|
+
noise_offset: vec3f,
|
|
34
|
+
/**
|
|
35
|
+
* The scroll of the warp tap, in its own tile units, wrapped to [0, 1) on the host.
|
|
36
|
+
*/
|
|
37
|
+
noise_warp_offset: vec3f,
|
|
38
|
+
/**
|
|
39
|
+
* Which tile: a slot of the atlas. 0 is the engine's own.
|
|
40
|
+
*/
|
|
41
|
+
noise_slot: u32,
|
|
42
|
+
/**
|
|
43
|
+
* [0, 1]: how far the density goes from uniform toward the tile's multiplier. 0 means the
|
|
44
|
+
* noise is not evaluated at all.
|
|
45
|
+
*/
|
|
46
|
+
noise_strength: f32,
|
|
47
|
+
/**
|
|
48
|
+
* 1 / the tile's world size in metres: world position times this is the tile coordinate.
|
|
49
|
+
*/
|
|
50
|
+
noise_inverse_scale: f32,
|
|
51
|
+
/**
|
|
52
|
+
* How far, in tile units, the warp tap may displace the base lookup. 0 means one tap.
|
|
53
|
+
*/
|
|
54
|
+
noise_warp: f32,
|
|
26
55
|
})
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Move a volume's noise along by a frame: the base tap's scroll by `velocity` metres a second over
|
|
3
|
+
* `dt`, and the warp tap's by the fraction of that its scale and its scroll ratio give it, each
|
|
4
|
+
* wrapped back into [0, 1) in f64 — the fold the GPU is spared.
|
|
5
|
+
*
|
|
6
|
+
* The caller owns the clock and the velocity: `ParticipatingMediaSystem` folds the scene's wind
|
|
7
|
+
* and the entity's own motion into one and calls this once a frame; a playground calls it from its
|
|
8
|
+
* loop. Not called, the field stands still, which is what an accumulating reference wants.
|
|
9
|
+
*
|
|
10
|
+
* @param {ParticipatingMediaVolume} volume
|
|
11
|
+
* @param {number[]|Float64Array} velocity metres a second, world axes
|
|
12
|
+
* @param {number} dt seconds
|
|
13
|
+
* @returns {boolean} whether anything moved — a zero velocity or a zero `dt` moves nothing, and a
|
|
14
|
+
* caller that tells the renderer about changes need not when nothing did
|
|
15
|
+
*/
|
|
16
|
+
export function participating_media_volume_advance_noise(volume: ParticipatingMediaVolume, velocity: number[] | Float64Array, dt: number): boolean;
|
|
1
17
|
export class VolumetricsParticleSpec {
|
|
2
18
|
/**
|
|
3
19
|
*
|
|
@@ -49,27 +65,49 @@ export const VOLUMETRIC_PARTICLE_SPEC_FOG: Readonly<VolumetricsParticleSpec>;
|
|
|
49
65
|
export class ParticipatingMediaVolume {
|
|
50
66
|
get id(): number;
|
|
51
67
|
/**
|
|
52
|
-
*
|
|
53
|
-
*
|
|
68
|
+
* Noise on the density: a tile of the volumetrics noise atlas, sampled in world space and
|
|
69
|
+
* multiplied in, [0, 1]. This is how far the density goes from uniform toward the tile's
|
|
70
|
+
* value — 0 is a uniform volume and costs nothing, 1 is the tile as it is.
|
|
71
|
+
*
|
|
72
|
+
* See `chunk_participating_media_noise` and `VOLUMETRIC_NOISE_PLAN_2026_10_15.md`.
|
|
73
|
+
*
|
|
74
|
+
* @type {number}
|
|
54
75
|
*/
|
|
55
|
-
|
|
56
|
-
noise_amplitude: number[];
|
|
57
|
-
noise_offset: number[];
|
|
76
|
+
noise_strength: number;
|
|
58
77
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
78
|
+
* World size of one repeat of the tile, in metres, along each axis. The engine's default tile
|
|
79
|
+
* holds four base features an edge, so the default puts features 8 m apart.
|
|
80
|
+
* @type {number}
|
|
61
81
|
*/
|
|
62
|
-
|
|
82
|
+
noise_scale: number;
|
|
63
83
|
/**
|
|
64
|
-
*
|
|
65
|
-
*
|
|
84
|
+
* How far the warp tap may displace the base lookup, in tile units. The warp is what makes the
|
|
85
|
+
* field change shape in place rather than only slide; 0 is one tap and no change of shape.
|
|
86
|
+
* @type {number}
|
|
66
87
|
*/
|
|
67
|
-
|
|
88
|
+
noise_warp: number;
|
|
68
89
|
/**
|
|
69
|
-
*
|
|
90
|
+
* Which tile of the atlas: a slot. 0 is the one the engine bakes at start-up.
|
|
70
91
|
* @type {number}
|
|
71
92
|
*/
|
|
72
|
-
|
|
93
|
+
noise_slot: number;
|
|
94
|
+
/**
|
|
95
|
+
* The scroll of the base tap, in tile units, kept in [0, 1).
|
|
96
|
+
*
|
|
97
|
+
* **State, not a setting.** It is advanced by {@link participating_media_volume_advance_noise}
|
|
98
|
+
* from a velocity and a frame's time, and wrapped there, so that a velocity may change without
|
|
99
|
+
* the field jumping and a session may run for days without the number growing. The GPU reads
|
|
100
|
+
* it as is and never multiplies a velocity by a time.
|
|
101
|
+
*
|
|
102
|
+
* @type {number[]}
|
|
103
|
+
*/
|
|
104
|
+
noise_offset: number[];
|
|
105
|
+
/**
|
|
106
|
+
* The scroll of the warp tap, in its own tile units, kept in [0, 1). State, like
|
|
107
|
+
* {@link noise_offset}.
|
|
108
|
+
* @type {number[]}
|
|
109
|
+
*/
|
|
110
|
+
noise_warp_offset: number[];
|
|
73
111
|
/**
|
|
74
112
|
* Measured in particles per m3.
|
|
75
113
|
* Default is value for very dense fog.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticipatingMediaVolume.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/ParticipatingMediaVolume.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ParticipatingMediaVolume.d.ts","sourceRoot":"","sources":["../../../../../src/shade/renderer/volumetrics/ParticipatingMediaVolume.js"],"names":[],"mappings":"AAiOA;;;;;;;;;;;;;;GAcG;AACH,iEANW,wBAAwB,YACxB,MAAM,EAAE,GAAC,YAAY,MACrB,MAAM,GACJ,OAAO,CAmCnB;AAvQD;IA6EI;;;;OAIG;IACH,+BAHW;QAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC;QAAC,wBAAwB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAC,GAClG,uBAAuB,CAalC;IAED,oDAIC;IAlGD;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;OAGG;IACH,YAFU,MAAM,EAAE,CAEK;IAEvB;;;OAGG;IACH,QAFU,MAAM,CAEL;IAEX,UAAQ;IAER,iCAIC;IAED;;;OAGG;IACH,YAFW,uBAAuB,QAOjC;IAED;;;;;aA0BC;IAED;;;OAGG;IACH,cAHW,uBAAuB,GACrB,OAAO,CAOnB;CAyBJ;AAED,6EAKI;AAIJ;IAII,iBAEC;IAED;;;;;;;;OAQG;IACH,gBAFU,MAAM,CAEG;IAEnB;;;;OAIG;IACH,aAFU,MAAM,CAEC;IAEjB;;;;OAIG;IACH,YAFU,MAAM,CAEC;IAEjB;;;OAGG;IACH,YAFU,MAAM,CAED;IAEf;;;;;;;;;OASG;IACH,cAFU,MAAM,EAAE,CAEO;IAEzB;;;;OAIG;IACH,mBAFU,MAAM,EAAE,CAEY;IAE9B;;;OAGG;IACH,gBAAc;IAEd;;;;;;;;;OASG;IACH,qCAEC;IAED,uCAA+E;IAE/E;;;;;;OAMG;IACH,eAFU,MAAM,CAEI;IAEpB;;;;;;;;;;;OAWG;IACH,WAFU,WAAW,CAES;;CAEjC;4BA5N2B,8CAA8C"}
|
|
@@ -2,6 +2,10 @@ import { assert } from "../../../core/assert.js";
|
|
|
2
2
|
import { isArrayEqualStrict } from "../../../core/collection/array/isArrayEqualStrict.js";
|
|
3
3
|
import { rgb_to_luminance } from "../../../core/color/rgb_to_luminance.js";
|
|
4
4
|
import { Transform64 } from "../../../engine/ecs/transform/Transform64.js";
|
|
5
|
+
import {
|
|
6
|
+
PARTICIPATING_MEDIA_NOISE_WARP_SCALE,
|
|
7
|
+
PARTICIPATING_MEDIA_NOISE_WARP_SCROLL
|
|
8
|
+
} from "./noise/PARTICIPATING_MEDIA_NOISE.js";
|
|
5
9
|
|
|
6
10
|
export class VolumetricsParticleSpec {
|
|
7
11
|
/**
|
|
@@ -123,30 +127,54 @@ export class ParticipatingMediaVolume {
|
|
|
123
127
|
}
|
|
124
128
|
|
|
125
129
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
130
|
+
* Noise on the density: a tile of the volumetrics noise atlas, sampled in world space and
|
|
131
|
+
* multiplied in, [0, 1]. This is how far the density goes from uniform toward the tile's
|
|
132
|
+
* value — 0 is a uniform volume and costs nothing, 1 is the tile as it is.
|
|
133
|
+
*
|
|
134
|
+
* See `chunk_participating_media_noise` and `VOLUMETRIC_NOISE_PLAN_2026_10_15.md`.
|
|
135
|
+
*
|
|
136
|
+
* @type {number}
|
|
128
137
|
*/
|
|
129
|
-
|
|
130
|
-
noise_amplitude = [1, 1, 1];
|
|
131
|
-
noise_offset = [0, 0, 0];
|
|
138
|
+
noise_strength = 0;
|
|
132
139
|
|
|
133
140
|
/**
|
|
134
|
-
*
|
|
135
|
-
*
|
|
141
|
+
* World size of one repeat of the tile, in metres, along each axis. The engine's default tile
|
|
142
|
+
* holds four base features an edge, so the default puts features 8 m apart.
|
|
143
|
+
* @type {number}
|
|
136
144
|
*/
|
|
137
|
-
|
|
145
|
+
noise_scale = 32;
|
|
138
146
|
|
|
139
147
|
/**
|
|
140
|
-
*
|
|
141
|
-
*
|
|
148
|
+
* How far the warp tap may displace the base lookup, in tile units. The warp is what makes the
|
|
149
|
+
* field change shape in place rather than only slide; 0 is one tap and no change of shape.
|
|
150
|
+
* @type {number}
|
|
142
151
|
*/
|
|
143
|
-
|
|
152
|
+
noise_warp = 0.1;
|
|
144
153
|
|
|
145
154
|
/**
|
|
146
|
-
*
|
|
155
|
+
* Which tile of the atlas: a slot. 0 is the one the engine bakes at start-up.
|
|
147
156
|
* @type {number}
|
|
148
157
|
*/
|
|
149
|
-
|
|
158
|
+
noise_slot = 0;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* The scroll of the base tap, in tile units, kept in [0, 1).
|
|
162
|
+
*
|
|
163
|
+
* **State, not a setting.** It is advanced by {@link participating_media_volume_advance_noise}
|
|
164
|
+
* from a velocity and a frame's time, and wrapped there, so that a velocity may change without
|
|
165
|
+
* the field jumping and a session may run for days without the number growing. The GPU reads
|
|
166
|
+
* it as is and never multiplies a velocity by a time.
|
|
167
|
+
*
|
|
168
|
+
* @type {number[]}
|
|
169
|
+
*/
|
|
170
|
+
noise_offset = [0, 0, 0];
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* The scroll of the warp tap, in its own tile units, kept in [0, 1). State, like
|
|
174
|
+
* {@link noise_offset}.
|
|
175
|
+
* @type {number[]}
|
|
176
|
+
*/
|
|
177
|
+
noise_warp_offset = [0, 0, 0];
|
|
150
178
|
|
|
151
179
|
/**
|
|
152
180
|
* Measured in particles per m3.
|
|
@@ -193,4 +221,61 @@ export class ParticipatingMediaVolume {
|
|
|
193
221
|
*/
|
|
194
222
|
transform = new Transform64();
|
|
195
223
|
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Move a volume's noise along by a frame: the base tap's scroll by `velocity` metres a second over
|
|
228
|
+
* `dt`, and the warp tap's by the fraction of that its scale and its scroll ratio give it, each
|
|
229
|
+
* wrapped back into [0, 1) in f64 — the fold the GPU is spared.
|
|
230
|
+
*
|
|
231
|
+
* The caller owns the clock and the velocity: `ParticipatingMediaSystem` folds the scene's wind
|
|
232
|
+
* and the entity's own motion into one and calls this once a frame; a playground calls it from its
|
|
233
|
+
* loop. Not called, the field stands still, which is what an accumulating reference wants.
|
|
234
|
+
*
|
|
235
|
+
* @param {ParticipatingMediaVolume} volume
|
|
236
|
+
* @param {number[]|Float64Array} velocity metres a second, world axes
|
|
237
|
+
* @param {number} dt seconds
|
|
238
|
+
* @returns {boolean} whether anything moved — a zero velocity or a zero `dt` moves nothing, and a
|
|
239
|
+
* caller that tells the renderer about changes need not when nothing did
|
|
240
|
+
*/
|
|
241
|
+
export function participating_media_volume_advance_noise(volume, velocity, dt) {
|
|
242
|
+
assert.isInstanceOf(volume, ParticipatingMediaVolume, 'volume');
|
|
243
|
+
assert.defined(velocity, 'velocity');
|
|
244
|
+
assert.isNumber(dt, 'dt');
|
|
245
|
+
assert.isFinite(dt, 'dt');
|
|
246
|
+
|
|
247
|
+
const vx = velocity[0];
|
|
248
|
+
const vy = velocity[1];
|
|
249
|
+
const vz = velocity[2];
|
|
250
|
+
|
|
251
|
+
if (dt === 0 || (vx === 0 && vy === 0 && vz === 0)) {
|
|
252
|
+
return false;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
assert.greaterThan(volume.noise_scale, 0, 'noise_scale must be positive to scroll');
|
|
256
|
+
|
|
257
|
+
// metres to tile units
|
|
258
|
+
const step = dt / volume.noise_scale;
|
|
259
|
+
const warp_step = step * PARTICIPATING_MEDIA_NOISE_WARP_SCALE * PARTICIPATING_MEDIA_NOISE_WARP_SCROLL;
|
|
260
|
+
|
|
261
|
+
const offset = volume.noise_offset;
|
|
262
|
+
const warp_offset = volume.noise_warp_offset;
|
|
263
|
+
|
|
264
|
+
offset[0] = wrap_unit(offset[0] + vx * step);
|
|
265
|
+
offset[1] = wrap_unit(offset[1] + vy * step);
|
|
266
|
+
offset[2] = wrap_unit(offset[2] + vz * step);
|
|
267
|
+
|
|
268
|
+
warp_offset[0] = wrap_unit(warp_offset[0] + vx * warp_step);
|
|
269
|
+
warp_offset[1] = wrap_unit(warp_offset[1] + vy * warp_step);
|
|
270
|
+
warp_offset[2] = wrap_unit(warp_offset[2] + vz * warp_step);
|
|
271
|
+
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @param {number} x
|
|
277
|
+
* @returns {number} x wrapped into [0, 1)
|
|
278
|
+
*/
|
|
279
|
+
function wrap_unit(x) {
|
|
280
|
+
return x - Math.floor(x);
|
|
196
281
|
}
|