@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
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The operators this page compares, in the order the shader's `switch` takes them.
|
|
3
|
+
*
|
|
4
|
+
* {@link GT7 } and {@link PBRNeutral } take a peak, {@link ToneMapCompareheadroom }; at 1 they are what the renderer runs
|
|
5
|
+
* on an SDR display. {@link GT7Reference } is SDR only and ignores it.
|
|
6
|
+
*/
|
|
7
|
+
export type CompareOperator = number;
|
|
8
|
+
export namespace CompareOperator {
|
|
9
|
+
let GT7Reference: number;
|
|
10
|
+
let GT7: number;
|
|
11
|
+
let PBRNeutral: number;
|
|
12
|
+
}
|
|
13
|
+
export const COMPARE_OPERATOR_LABELS: string[];
|
|
14
|
+
/**
|
|
15
|
+
* The exposure that puts an exposed 0.18 at 0.18 out, per operator, as a multiplier. Solved by bisection on CPU ports
|
|
16
|
+
* of the same functions (each port checked against its source; the GT7 one against Polyphony's compiled sample code
|
|
17
|
+
* to 1.8e-4). Used only when "match mid-grey" is on. Both engine operators write mid-grey the same at every peak.
|
|
18
|
+
*
|
|
19
|
+
* @type {number[]}
|
|
20
|
+
*/
|
|
21
|
+
export const MID_GREY_GAIN: number[];
|
|
22
|
+
/**
|
|
23
|
+
* How the comparison is laid out.
|
|
24
|
+
*/
|
|
25
|
+
export type CompareLayout = number;
|
|
26
|
+
export namespace CompareLayout {
|
|
27
|
+
let Pair: number;
|
|
28
|
+
let Single: number;
|
|
29
|
+
let Split: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Draws the scene through the engine's tone mapping operators, in place of the engine's own tonemap.
|
|
33
|
+
*
|
|
34
|
+
* The engine still tonemaps the frame; this overwrites the canvas afterwards from the same HDR colour, so every
|
|
35
|
+
* operator sees exactly the input the renderer's tonemap pass sees. Exposure is the page's own, fixed: turn the engine's
|
|
36
|
+
* automatic exposure off, or the engine's picture and this one will not agree.
|
|
37
|
+
*/
|
|
38
|
+
export class ToneMapCompare {
|
|
39
|
+
/**
|
|
40
|
+
* Off: the engine's own output is left on the canvas.
|
|
41
|
+
* @type {boolean}
|
|
42
|
+
*/
|
|
43
|
+
enabled: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* @type {CompareLayout}
|
|
46
|
+
*/
|
|
47
|
+
layout: CompareLayout;
|
|
48
|
+
/**
|
|
49
|
+
* Which operator {@link CompareLayout.Single} and {@link CompareLayout.Split} show.
|
|
50
|
+
* @type {CompareOperator}
|
|
51
|
+
*/
|
|
52
|
+
operator: CompareOperator;
|
|
53
|
+
/**
|
|
54
|
+
* The display's peak in units of SDR white, for the operators that take one. 1 is their SDR form. 4 is a
|
|
55
|
+
* 1000 cd/m² display under the 250 cd/m² paper white, which is what the renderer assumes for HDR.
|
|
56
|
+
*
|
|
57
|
+
* {@link CompareLayout.Single} shows the operator at this peak, clipped to SDR white; {@link CompareLayout.Split}
|
|
58
|
+
* shows it on the right half only, beside the SDR form.
|
|
59
|
+
* @type {number}
|
|
60
|
+
*/
|
|
61
|
+
headroom: number;
|
|
62
|
+
/**
|
|
63
|
+
* In f-stops, over a scene value of 1.
|
|
64
|
+
* @type {number}
|
|
65
|
+
*/
|
|
66
|
+
exposure_ev: number;
|
|
67
|
+
/**
|
|
68
|
+
* Give each operator the exposure that puts 0.18 at 0.18 out, so the pair compares shapes rather than brightness.
|
|
69
|
+
* @type {boolean}
|
|
70
|
+
*/
|
|
71
|
+
match_mid_grey: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Convert to Display P3 before encoding. Right for a canvas configured `display-p3`, which is how the engine
|
|
74
|
+
* configures its canvas; every tonemap pass converts the same way. Off writes Rec.709 values into it, as
|
|
75
|
+
* `shader_tonemap_LDR` did before it converted.
|
|
76
|
+
* @type {boolean}
|
|
77
|
+
*/
|
|
78
|
+
convert_to_p3: boolean;
|
|
79
|
+
extensions: (CaptureToneMapInput | DrawToneMapCompare)[];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The last thing at {@link FramePhase.BeforePresent}: hold on to the HDR colour the tonemapper is about to read.
|
|
83
|
+
*/
|
|
84
|
+
declare class CaptureToneMapInput extends RenderExtension {
|
|
85
|
+
/**
|
|
86
|
+
* @param {ToneMapCompare} owner
|
|
87
|
+
*/
|
|
88
|
+
constructor(owner: ToneMapCompare);
|
|
89
|
+
record(frame: any): void;
|
|
90
|
+
#private;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The first thing at {@link FramePhase.Overlay}: draw the comparison over the canvas the engine's tonemapper wrote.
|
|
94
|
+
*/
|
|
95
|
+
declare class DrawToneMapCompare extends RenderExtension {
|
|
96
|
+
/**
|
|
97
|
+
* @param {ToneMapCompare} owner
|
|
98
|
+
*/
|
|
99
|
+
constructor(owner: ToneMapCompare);
|
|
100
|
+
record(frame: any): void;
|
|
101
|
+
#private;
|
|
102
|
+
}
|
|
103
|
+
import { RenderExtension } from "../../renderer/extension/RenderExtension.js";
|
|
104
|
+
export {};
|
|
105
|
+
//# sourceMappingURL=ToneMapCompare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToneMapCompare.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/tonemap_sdr/ToneMapCompare.js"],"names":[],"mappings":";;;;;;8BA6BU,MAAM;;;;;;AAiBhB,+CAIE;AAEF;;;;;;GAMG;AACH,4BAFU,MAAM,EAAE,CAEoC;;;;4BAK5C,MAAM;;;;;;AAiQhB;;;;;;GAMG;AACH;IACI;;;OAGG;IACH,SAFU,OAAO,CAEF;IAEf;;OAEG;IACH,QAFU,aAAa,CAEK;IAE5B;;;OAGG;IACH,UAFU,eAAe,CAEa;IAEtC;;;;;;;OAOG;IACH,UAFU,MAAM,CAEH;IAEb;;;OAGG;IACH,aAFU,MAAM,CAEA;IAEhB;;;OAGG;IACH,gBAFU,OAAO,CAEM;IAEvB;;;;;OAKG;IACH,eAFU,OAAO,CAEI;IAGjB,yDAA+E;CAEtF;AAhJD;;GAEG;AACH;IAUI;;OAEG;IACH,mBAFW,cAAc,EAMxB;IAED,yBAMC;;CACJ;AAED;;GAEG;AACH;IAUI;;OAEG;IACH,mBAFW,cAAc,EAMxB;IAED,yBA8BC;;CACJ;gCA5T+B,6CAA6C"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
import { FramePhase } from "../../renderer/extension/FramePhase.js";
|
|
2
|
+
import { FrameRecord } from "../../renderer/extension/FrameRecord.js";
|
|
3
|
+
import { PresentTarget } from "../../renderer/extension/PresentTarget.js";
|
|
4
|
+
import { RenderExtension } from "../../renderer/extension/RenderExtension.js";
|
|
5
|
+
import { SceneColor } from "../../renderer/extension/SceneColor.js";
|
|
6
|
+
import { chunk_CRM_FROM_REC2020_TO_P3 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC2020_TO_P3.js";
|
|
7
|
+
import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
|
|
8
|
+
import { chunk_sRGBTransferOETF } from "../../renderer/shader/chunk/color/sRGB/chunk_sRGBTransferOETF.js";
|
|
9
|
+
import { chunk_PAPER_WHITE_NITS } from "../../renderer/shader/chunk/color/tonemap/chunk_PAPER_WHITE_NITS.js";
|
|
10
|
+
import { chunk_tonemap_khronos_pbr } from "../../renderer/shader/chunk/color/tonemap/chunk_tonemap_khronos_pbr.js";
|
|
11
|
+
import { chunk_tonemap_gt7 } from "../../renderer/shader/chunk/color/tonemap/gt7/chunk_tonemap_gt7.js";
|
|
12
|
+
import {
|
|
13
|
+
chunk_dither_color_8bit_triangle_noise
|
|
14
|
+
} from "../../renderer/shader/chunk/texture/dither/chunk_dither_color_8bit_triangle_noise.js";
|
|
15
|
+
import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
|
|
16
|
+
import { graph_image_pass } from "../../renderer/shader/graph/graph_image_pass.js";
|
|
17
|
+
import { ImageShader } from "../../renderer/shader/ImageShader.js";
|
|
18
|
+
import { ShaderResourceSetDescriptor } from "../../renderer/shader/resource/ShaderResourceSetDescriptor.js";
|
|
19
|
+
import { ShaderDescriptor } from "../../renderer/shader/ShaderDescriptor.js";
|
|
20
|
+
import { f32, u32 } from "../../renderer/shader/type/WEBGPU_WGSL_PRIMITIVE_TYPES.js";
|
|
21
|
+
import { WebGPUStruct } from "../../renderer/shader/type/WebGPUStruct.js";
|
|
22
|
+
import { chunk_tonemap_gt7_sdr_reference } from "./chunk_tonemap_gt7_sdr_reference.js";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The operators this page compares, in the order the shader's `switch` takes them.
|
|
26
|
+
*
|
|
27
|
+
* {@link GT7} and {@link PBRNeutral} take a peak, {@link ToneMapCompare#headroom}; at 1 they are what the renderer runs
|
|
28
|
+
* on an SDR display. {@link GT7Reference} is SDR only and ignores it.
|
|
29
|
+
*
|
|
30
|
+
* @enum {number}
|
|
31
|
+
*/
|
|
32
|
+
export const CompareOperator = {
|
|
33
|
+
/** GT7's sample code in SDR mode, {@link chunk_tonemap_gt7_sdr_reference}: a reference for the engine's GT7 */
|
|
34
|
+
GT7Reference: 0,
|
|
35
|
+
/**
|
|
36
|
+
* the engine's `tonemap_gt7` with the paper white at `PAPER_WHITE_NITS` and the peak at the headroom times that:
|
|
37
|
+
* what `ShadeToneMappingMode.GT7` runs
|
|
38
|
+
*/
|
|
39
|
+
GT7: 1,
|
|
40
|
+
/**
|
|
41
|
+
* the engine's `tonemap_khronos_pbr` at the headroom: what `ShadeToneMappingMode.PBR_NEUTRAL` runs, and at
|
|
42
|
+
* headroom 1 the Khronos specification
|
|
43
|
+
*/
|
|
44
|
+
PBRNeutral: 2,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const COMPARE_OPERATOR_LABELS = [
|
|
48
|
+
'GT7 SDR (Polyphony sample)',
|
|
49
|
+
'GT7 (engine)',
|
|
50
|
+
'PBR Neutral (engine)',
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* The exposure that puts an exposed 0.18 at 0.18 out, per operator, as a multiplier. Solved by bisection on CPU ports
|
|
55
|
+
* of the same functions (each port checked against its source; the GT7 one against Polyphony's compiled sample code
|
|
56
|
+
* to 1.8e-4). Used only when "match mid-grey" is on. Both engine operators write mid-grey the same at every peak.
|
|
57
|
+
*
|
|
58
|
+
* @type {number[]}
|
|
59
|
+
*/
|
|
60
|
+
export const MID_GREY_GAIN = [1.0033, 1.0033, 1.2222];
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* How the comparison is laid out.
|
|
64
|
+
*
|
|
65
|
+
* @enum {number}
|
|
66
|
+
*/
|
|
67
|
+
export const CompareLayout = {
|
|
68
|
+
/**
|
|
69
|
+
* the engine's two operators side by side, {@link CompareOperator.GT7} on the left and
|
|
70
|
+
* {@link CompareOperator.PBRNeutral} on the right, each the whole frame at half size
|
|
71
|
+
*/
|
|
72
|
+
Pair: 0,
|
|
73
|
+
/** one operator, full size */
|
|
74
|
+
Single: 1,
|
|
75
|
+
/**
|
|
76
|
+
* one operator, its SDR form on the left half and its form at {@link ToneMapCompare#headroom} on the right, both
|
|
77
|
+
* clipped to SDR white: what an HDR display shows below SDR white. Where the two forms agree, the seam is invisible.
|
|
78
|
+
*/
|
|
79
|
+
Split: 2,
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const SETTINGS = WebGPUStruct.from({
|
|
83
|
+
exposure: f32,
|
|
84
|
+
gain_0: f32,
|
|
85
|
+
gain_1: f32,
|
|
86
|
+
gain_2: f32,
|
|
87
|
+
/** the display's peak in units of SDR white, for the operators that take one */
|
|
88
|
+
headroom: f32,
|
|
89
|
+
layout_index: u32,
|
|
90
|
+
operator_index: u32,
|
|
91
|
+
/** 1: convert Rec.709 to Display P3 before encoding, for a canvas configured `display-p3` */
|
|
92
|
+
to_p3: u32,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const resources = new ShaderResourceSetDescriptor();
|
|
96
|
+
|
|
97
|
+
resources.setImmediate("settings", SETTINGS);
|
|
98
|
+
resources.createGroup()
|
|
99
|
+
.addTexture("input_color", "float");
|
|
100
|
+
|
|
101
|
+
const shader_tonemap_compare = new ImageShader({
|
|
102
|
+
descriptor: ShaderDescriptor.from({
|
|
103
|
+
label: "tonemap_sdr/compare",
|
|
104
|
+
resources,
|
|
105
|
+
body: CodeChunk.from(
|
|
106
|
+
//language=WGSL
|
|
107
|
+
`
|
|
108
|
+
fn compare_gain(op: u32) -> f32 {
|
|
109
|
+
switch op {
|
|
110
|
+
case 0u: { return settings.gain_0; }
|
|
111
|
+
case 1u: { return settings.gain_1; }
|
|
112
|
+
default: { return settings.gain_2; }
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
// headroom: the peak in units of SDR white, 1 for the SDR form. Every result is clipped to SDR white, so above 1 this
|
|
117
|
+
// is what an HDR display shows below SDR white.
|
|
118
|
+
fn compare_tonemap(op: u32, c: vec3<f32>, headroom: f32) -> vec3<f32> {
|
|
119
|
+
switch op {
|
|
120
|
+
case 0u: { return tonemap_gt7_sdr_reference(c); }
|
|
121
|
+
case 1u: { return saturate(tonemap_gt7(c, PAPER_WHITE_NITS * headroom, PAPER_WHITE_NITS)); }
|
|
122
|
+
default: { return saturate(tonemap_khronos_pbr(c, headroom)); }
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
@fragment
|
|
127
|
+
fn main(
|
|
128
|
+
@builtin(position) coord : vec4<f32>,
|
|
129
|
+
) -> @location(0) vec4<f32> {
|
|
130
|
+
|
|
131
|
+
let size = vec2<i32>(textureDimensions(input_color));
|
|
132
|
+
let pixel = vec2<i32>(coord.xy);
|
|
133
|
+
let half_size = size / 2;
|
|
134
|
+
|
|
135
|
+
var op = settings.operator_index;
|
|
136
|
+
var headroom = settings.headroom;
|
|
137
|
+
var color: vec3<f32>;
|
|
138
|
+
|
|
139
|
+
// a dark rule down the middle of the two-sided layouts
|
|
140
|
+
if (settings.layout_index != 1u && abs(pixel.x - half_size.x) < 1) {
|
|
141
|
+
return vec4<f32>(0.0, 0.0, 0.0, 1.0);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (settings.layout_index == 0u) {
|
|
145
|
+
// GT7 on the left, PBR Neutral on the right
|
|
146
|
+
let right = pixel.x >= half_size.x;
|
|
147
|
+
|
|
148
|
+
op = select(1u, 2u, right);
|
|
149
|
+
|
|
150
|
+
// the whole frame on each side at half size, centred vertically: a 2x2 box of scene texels per output
|
|
151
|
+
// pixel, averaged in linear light
|
|
152
|
+
let origin = vec2<i32>(select(0, half_size.x, right), size.y / 4);
|
|
153
|
+
let local = pixel - origin;
|
|
154
|
+
|
|
155
|
+
if (local.y < 0 || local.y >= half_size.y) {
|
|
156
|
+
return vec4<f32>(0.0, 0.0, 0.0, 1.0);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
let source = local * 2;
|
|
160
|
+
let last = size - vec2<i32>(1);
|
|
161
|
+
|
|
162
|
+
color = (
|
|
163
|
+
textureLoad(input_color, min(source, last), 0).rgb
|
|
164
|
+
+ textureLoad(input_color, min(source + vec2<i32>(1, 0), last), 0).rgb
|
|
165
|
+
+ textureLoad(input_color, min(source + vec2<i32>(0, 1), last), 0).rgb
|
|
166
|
+
+ textureLoad(input_color, min(source + vec2<i32>(1, 1), last), 0).rgb
|
|
167
|
+
) * 0.25;
|
|
168
|
+
} else {
|
|
169
|
+
if (settings.layout_index == 2u) {
|
|
170
|
+
// the SDR form on the left, the form at the headroom on the right
|
|
171
|
+
headroom = select(1.0, settings.headroom, pixel.x > half_size.x);
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
color = textureLoad(input_color, pixel, 0).rgb;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
color = max(color, vec3<f32>(0.0)) * (settings.exposure * compare_gain(op));
|
|
178
|
+
|
|
179
|
+
color = compare_tonemap(op, color, headroom);
|
|
180
|
+
|
|
181
|
+
if (settings.to_p3 == 1u) {
|
|
182
|
+
color = CRM_FROM_REC2020_TO_P3 * (CRM_FROM_REC709_TO_REC2020 * color);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
color = sRGBTransferOETF(color);
|
|
186
|
+
|
|
187
|
+
color += dither_color_8bit_triangle_noise(coord.xy);
|
|
188
|
+
|
|
189
|
+
return vec4<f32>(color, 1.0);
|
|
190
|
+
}
|
|
191
|
+
`,
|
|
192
|
+
[
|
|
193
|
+
chunk_tonemap_gt7_sdr_reference,
|
|
194
|
+
chunk_tonemap_gt7,
|
|
195
|
+
chunk_tonemap_khronos_pbr,
|
|
196
|
+
chunk_PAPER_WHITE_NITS,
|
|
197
|
+
chunk_CRM_FROM_REC709_TO_REC2020,
|
|
198
|
+
chunk_CRM_FROM_REC2020_TO_P3,
|
|
199
|
+
chunk_sRGBTransferOETF,
|
|
200
|
+
chunk_dither_color_8bit_triangle_noise,
|
|
201
|
+
]
|
|
202
|
+
),
|
|
203
|
+
}),
|
|
204
|
+
targets: [
|
|
205
|
+
{
|
|
206
|
+
label: "tonemap_sdr compare",
|
|
207
|
+
format: "rgba8unorm",
|
|
208
|
+
}
|
|
209
|
+
],
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* The scene colour as the engine's tonemapper is given it, carried on to the overlay phase.
|
|
214
|
+
*
|
|
215
|
+
* {@link SceneColor} is not carried past {@link FramePhase.BeforePresent}; a record of one's own is carried at every
|
|
216
|
+
* phase.
|
|
217
|
+
*/
|
|
218
|
+
class ToneMapInput extends FrameRecord {
|
|
219
|
+
#color = -1;
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* @returns {number}
|
|
223
|
+
*/
|
|
224
|
+
get color() {
|
|
225
|
+
return this.read(this.#color);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* @param {number} handle
|
|
230
|
+
*/
|
|
231
|
+
set color(handle) {
|
|
232
|
+
this.#color = this.publish(handle);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* The last thing at {@link FramePhase.BeforePresent}: hold on to the HDR colour the tonemapper is about to read.
|
|
238
|
+
*/
|
|
239
|
+
class CaptureToneMapInput extends RenderExtension {
|
|
240
|
+
name = 'tonemap_sdr/capture';
|
|
241
|
+
phase = FramePhase.BeforePresent;
|
|
242
|
+
relative_order = Number.MAX_SAFE_INTEGER;
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* @type {ToneMapCompare}
|
|
246
|
+
*/
|
|
247
|
+
#owner;
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* @param {ToneMapCompare} owner
|
|
251
|
+
*/
|
|
252
|
+
constructor(owner) {
|
|
253
|
+
super();
|
|
254
|
+
|
|
255
|
+
this.#owner = owner;
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
record(frame) {
|
|
259
|
+
if (!this.#owner.enabled) {
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
frame.create(ToneMapInput).color = frame.get(SceneColor).color;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* The first thing at {@link FramePhase.Overlay}: draw the comparison over the canvas the engine's tonemapper wrote.
|
|
269
|
+
*/
|
|
270
|
+
class DrawToneMapCompare extends RenderExtension {
|
|
271
|
+
name = 'tonemap_sdr/draw';
|
|
272
|
+
phase = FramePhase.Overlay;
|
|
273
|
+
relative_order = -Number.MAX_SAFE_INTEGER;
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @type {ToneMapCompare}
|
|
277
|
+
*/
|
|
278
|
+
#owner;
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* @param {ToneMapCompare} owner
|
|
282
|
+
*/
|
|
283
|
+
constructor(owner) {
|
|
284
|
+
super();
|
|
285
|
+
|
|
286
|
+
this.#owner = owner;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
record(frame) {
|
|
290
|
+
const owner = this.#owner;
|
|
291
|
+
|
|
292
|
+
if (!owner.enabled) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
const present = frame.get(PresentTarget);
|
|
297
|
+
const gains = owner.match_mid_grey ? MID_GREY_GAIN : [1, 1, 1];
|
|
298
|
+
|
|
299
|
+
const [canvas] = graph_image_pass({
|
|
300
|
+
graph: frame.graph,
|
|
301
|
+
shader: shader_tonemap_compare,
|
|
302
|
+
inputs: {
|
|
303
|
+
input_color: frame.get(ToneMapInput).color,
|
|
304
|
+
settings: {
|
|
305
|
+
exposure: Math.pow(2, owner.exposure_ev),
|
|
306
|
+
gain_0: gains[0],
|
|
307
|
+
gain_1: gains[1],
|
|
308
|
+
gain_2: gains[2],
|
|
309
|
+
headroom: owner.headroom,
|
|
310
|
+
layout_index: owner.layout,
|
|
311
|
+
operator_index: owner.operator,
|
|
312
|
+
to_p3: owner.convert_to_p3 ? 1 : 0,
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
output: [present.canvas],
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
present.canvas = canvas;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Draws the scene through the engine's tone mapping operators, in place of the engine's own tonemap.
|
|
324
|
+
*
|
|
325
|
+
* The engine still tonemaps the frame; this overwrites the canvas afterwards from the same HDR colour, so every
|
|
326
|
+
* operator sees exactly the input the renderer's tonemap pass sees. Exposure is the page's own, fixed: turn the engine's
|
|
327
|
+
* automatic exposure off, or the engine's picture and this one will not agree.
|
|
328
|
+
*/
|
|
329
|
+
export class ToneMapCompare {
|
|
330
|
+
/**
|
|
331
|
+
* Off: the engine's own output is left on the canvas.
|
|
332
|
+
* @type {boolean}
|
|
333
|
+
*/
|
|
334
|
+
enabled = true;
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* @type {CompareLayout}
|
|
338
|
+
*/
|
|
339
|
+
layout = CompareLayout.Pair;
|
|
340
|
+
|
|
341
|
+
/**
|
|
342
|
+
* Which operator {@link CompareLayout.Single} and {@link CompareLayout.Split} show.
|
|
343
|
+
* @type {CompareOperator}
|
|
344
|
+
*/
|
|
345
|
+
operator = CompareOperator.PBRNeutral;
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* The display's peak in units of SDR white, for the operators that take one. 1 is their SDR form. 4 is a
|
|
349
|
+
* 1000 cd/m² display under the 250 cd/m² paper white, which is what the renderer assumes for HDR.
|
|
350
|
+
*
|
|
351
|
+
* {@link CompareLayout.Single} shows the operator at this peak, clipped to SDR white; {@link CompareLayout.Split}
|
|
352
|
+
* shows it on the right half only, beside the SDR form.
|
|
353
|
+
* @type {number}
|
|
354
|
+
*/
|
|
355
|
+
headroom = 1;
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* In f-stops, over a scene value of 1.
|
|
359
|
+
* @type {number}
|
|
360
|
+
*/
|
|
361
|
+
exposure_ev = 0;
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* Give each operator the exposure that puts 0.18 at 0.18 out, so the pair compares shapes rather than brightness.
|
|
365
|
+
* @type {boolean}
|
|
366
|
+
*/
|
|
367
|
+
match_mid_grey = false;
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* Convert to Display P3 before encoding. Right for a canvas configured `display-p3`, which is how the engine
|
|
371
|
+
* configures its canvas; every tonemap pass converts the same way. Off writes Rec.709 values into it, as
|
|
372
|
+
* `shader_tonemap_LDR` did before it converted.
|
|
373
|
+
* @type {boolean}
|
|
374
|
+
*/
|
|
375
|
+
convert_to_p3 = true;
|
|
376
|
+
|
|
377
|
+
constructor() {
|
|
378
|
+
this.extensions = [new CaptureToneMapInput(this), new DrawToneMapCompare(this)];
|
|
379
|
+
}
|
|
380
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GT7 tone mapping in its SDR mode, as Polyphony's sample code defines it: `GT7ToneMapping::initializeAsSDR()`
|
|
3
|
+
* followed by `applyToneMapping()`, ICtCp as the UCS.
|
|
4
|
+
*
|
|
5
|
+
* This is a comparison port for the playground, not the engine's operator. The engine's `tonemap_gt7` departs from
|
|
6
|
+
* the sample code in four places:
|
|
7
|
+
* - it weights the per-channel colour 0.7, where the sample weights it 0.4 (`blendRatio_` 0.6 is the untwisted one's);
|
|
8
|
+
* - it fades chroma over a fixed PQ window of 0.7–1.0, where the sample fades over 0.98–1.16 of the target's own
|
|
9
|
+
* intensity;
|
|
10
|
+
* - it does not clamp at the target;
|
|
11
|
+
* - its final blend is in ICtCp, where the sample's is in linear Rec.2020 RGB. The talk tried the UCS, preferred RGB
|
|
12
|
+
* (slide 150), and says a UCS blend works as well (slide 153, hidden in the presented deck).
|
|
13
|
+
*
|
|
14
|
+
* At SDR the first three carry nearly all of the difference. The playground shows both.
|
|
15
|
+
*
|
|
16
|
+
* What the sample says about SDR, and what this keeps:
|
|
17
|
+
* - the curve is initialized with the SDR paper white, 250 cd/m², as its peak — 2.5 frame-buffer units, where
|
|
18
|
+
* GT7's frame buffer has 1.0 = 100 cd/m²;
|
|
19
|
+
* - the result is multiplied by 1 / 2.5, so the paper white lands at 1.0 for the sRGB encoding.
|
|
20
|
+
*
|
|
21
|
+
* Shade's exposed scene value has 1.0 at the paper white rather than at 100 cd/m², so the input is scaled by 2.5
|
|
22
|
+
* before the curve. That puts an exposed 0.18 at 0.179 out.
|
|
23
|
+
*
|
|
24
|
+
* Input: exposed linear Rec.709. Output: display-linear Rec.709 in [0, 1].
|
|
25
|
+
*
|
|
26
|
+
* @see https://blog.selfshadow.com/publications/s2025-shading-course/pdi/supplemental/gt7_tone_mapping.cpp
|
|
27
|
+
* @see "Driving Toward Reality: Physically Based Tone Mapping and Perceptual Fidelity in Gran Turismo 7", slide 153
|
|
28
|
+
* @type {CodeChunk}
|
|
29
|
+
*/
|
|
30
|
+
export const chunk_tonemap_gt7_sdr_reference: CodeChunk;
|
|
31
|
+
import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
|
|
32
|
+
//# sourceMappingURL=chunk_tonemap_gt7_sdr_reference.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunk_tonemap_gt7_sdr_reference.d.ts","sourceRoot":"","sources":["../../../../../src/shade/playground/tonemap_sdr/chunk_tonemap_gt7_sdr_reference.js"],"names":[],"mappings":"AAQA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,8CAFU,SAAS,CAoEjB;0BAjGwB,6CAA6C"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { chunk_CRM_FROM_REC2020_TO_REC709 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC2020_TO_REC709.js";
|
|
2
|
+
import { chunk_CRM_FROM_REC709_TO_REC2020 } from "../../renderer/shader/chunk/color/conversion/chunk_CRM_FROM_REC709_TO_REC2020.js";
|
|
3
|
+
import { chunk_iCtCp_to_rgb } from "../../renderer/shader/chunk/color/iCtCp/chunk_iCtCp_to_rgb.js";
|
|
4
|
+
import { chunk_rgb_to_iCtCp } from "../../renderer/shader/chunk/color/iCtCp/chunk_rgb_to_iCtCp.js";
|
|
5
|
+
import { chunk_gt_evaluate_curve } from "../../renderer/shader/chunk/color/tonemap/gt7/chunk_gt_evaluate_curve.js";
|
|
6
|
+
import { GT7_TONE_MAPPING_CURVE_STRUCT } from "../../renderer/shader/chunk/color/tonemap/gt7/GT7_TONE_MAPPING_CURVE_STRUCT.js";
|
|
7
|
+
import { CodeChunk } from "../../renderer/shader/compiler/CodeChunk.js";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* GT7 tone mapping in its SDR mode, as Polyphony's sample code defines it: `GT7ToneMapping::initializeAsSDR()`
|
|
11
|
+
* followed by `applyToneMapping()`, ICtCp as the UCS.
|
|
12
|
+
*
|
|
13
|
+
* This is a comparison port for the playground, not the engine's operator. The engine's `tonemap_gt7` departs from
|
|
14
|
+
* the sample code in four places:
|
|
15
|
+
* - it weights the per-channel colour 0.7, where the sample weights it 0.4 (`blendRatio_` 0.6 is the untwisted one's);
|
|
16
|
+
* - it fades chroma over a fixed PQ window of 0.7–1.0, where the sample fades over 0.98–1.16 of the target's own
|
|
17
|
+
* intensity;
|
|
18
|
+
* - it does not clamp at the target;
|
|
19
|
+
* - its final blend is in ICtCp, where the sample's is in linear Rec.2020 RGB. The talk tried the UCS, preferred RGB
|
|
20
|
+
* (slide 150), and says a UCS blend works as well (slide 153, hidden in the presented deck).
|
|
21
|
+
*
|
|
22
|
+
* At SDR the first three carry nearly all of the difference. The playground shows both.
|
|
23
|
+
*
|
|
24
|
+
* What the sample says about SDR, and what this keeps:
|
|
25
|
+
* - the curve is initialized with the SDR paper white, 250 cd/m², as its peak — 2.5 frame-buffer units, where
|
|
26
|
+
* GT7's frame buffer has 1.0 = 100 cd/m²;
|
|
27
|
+
* - the result is multiplied by 1 / 2.5, so the paper white lands at 1.0 for the sRGB encoding.
|
|
28
|
+
*
|
|
29
|
+
* Shade's exposed scene value has 1.0 at the paper white rather than at 100 cd/m², so the input is scaled by 2.5
|
|
30
|
+
* before the curve. That puts an exposed 0.18 at 0.179 out.
|
|
31
|
+
*
|
|
32
|
+
* Input: exposed linear Rec.709. Output: display-linear Rec.709 in [0, 1].
|
|
33
|
+
*
|
|
34
|
+
* @see https://blog.selfshadow.com/publications/s2025-shading-course/pdi/supplemental/gt7_tone_mapping.cpp
|
|
35
|
+
* @see "Driving Toward Reality: Physically Based Tone Mapping and Perceptual Fidelity in Gran Turismo 7", slide 153
|
|
36
|
+
* @type {CodeChunk}
|
|
37
|
+
*/
|
|
38
|
+
export const chunk_tonemap_gt7_sdr_reference = CodeChunk.from(
|
|
39
|
+
//language=WGSL
|
|
40
|
+
`
|
|
41
|
+
fn tonemap_gt7_sdr_reference(rgb_rec709: vec3<f32>) -> vec3<f32> {
|
|
42
|
+
|
|
43
|
+
// GRAN_TURISMO_SDR_PAPER_WHITE / REFERENCE_LUMINANCE
|
|
44
|
+
const SDR_TARGET: f32 = 2.5;
|
|
45
|
+
|
|
46
|
+
// GT7ToneMapping::initializeParameters
|
|
47
|
+
const BLEND_RATIO: f32 = 0.6;
|
|
48
|
+
const FADE_START: f32 = 0.98;
|
|
49
|
+
const FADE_END: f32 = 1.16;
|
|
50
|
+
|
|
51
|
+
// GTToneMappingCurveV2::initializeCurve(SDR_TARGET, 0.25, 0.538, 0.444, 1.280)
|
|
52
|
+
const alpha = 0.25;
|
|
53
|
+
const linear_section = 0.444;
|
|
54
|
+
|
|
55
|
+
var curve: ${GT7_TONE_MAPPING_CURVE_STRUCT.wgsl_ref};
|
|
56
|
+
|
|
57
|
+
curve.peakIntensity = SDR_TARGET;
|
|
58
|
+
curve.midPoint = 0.538;
|
|
59
|
+
curve.linearSection = linear_section;
|
|
60
|
+
curve.toeStrength = 1.280;
|
|
61
|
+
|
|
62
|
+
let k = (linear_section - 1.0) / (alpha - 1.0);
|
|
63
|
+
curve.kA = SDR_TARGET * linear_section + SDR_TARGET * k;
|
|
64
|
+
curve.kB = -SDR_TARGET * k * exp(linear_section / k);
|
|
65
|
+
curve.kC = -1.0 / (k * SDR_TARGET);
|
|
66
|
+
|
|
67
|
+
// the paper white is 1.0 here and 2.5 in GT7's frame buffer
|
|
68
|
+
let rgb = (CRM_FROM_REC709_TO_REC2020 * rgb_rec709) * SDR_TARGET;
|
|
69
|
+
|
|
70
|
+
let ucs = rgb_to_iCtCp(rgb);
|
|
71
|
+
|
|
72
|
+
// per channel: the "skewed" colour
|
|
73
|
+
let skewed = vec3<f32>(
|
|
74
|
+
gt_evaluate_curve(&curve, rgb.r),
|
|
75
|
+
gt_evaluate_curve(&curve, rgb.g),
|
|
76
|
+
gt_evaluate_curve(&curve, rgb.b),
|
|
77
|
+
);
|
|
78
|
+
|
|
79
|
+
let skewed_ucs = rgb_to_iCtCp(skewed);
|
|
80
|
+
|
|
81
|
+
let target_ucs = rgb_to_iCtCp(vec3<f32>(SDR_TARGET)).x;
|
|
82
|
+
|
|
83
|
+
let chroma_scale = 1.0 - smoothstep(FADE_START, FADE_END, ucs.x / target_ucs);
|
|
84
|
+
|
|
85
|
+
// intensity from the skewed colour, chroma from the original, faded toward the target
|
|
86
|
+
let scaled = iCtCp_to_rgb(vec3<f32>(skewed_ucs.x, ucs.yz * chroma_scale));
|
|
87
|
+
|
|
88
|
+
let blended = mix(skewed, scaled, BLEND_RATIO);
|
|
89
|
+
|
|
90
|
+
// the SDR correction: the target lands at 1.0
|
|
91
|
+
let display_2020 = min(blended, vec3<f32>(SDR_TARGET)) / SDR_TARGET;
|
|
92
|
+
|
|
93
|
+
return saturate(CRM_FROM_REC2020_TO_REC709 * display_2020);
|
|
94
|
+
}
|
|
95
|
+
`,
|
|
96
|
+
[
|
|
97
|
+
GT7_TONE_MAPPING_CURVE_STRUCT.declaration_chunk,
|
|
98
|
+
chunk_gt_evaluate_curve,
|
|
99
|
+
chunk_rgb_to_iCtCp,
|
|
100
|
+
chunk_iCtCp_to_rgb,
|
|
101
|
+
chunk_CRM_FROM_REC709_TO_REC2020,
|
|
102
|
+
chunk_CRM_FROM_REC2020_TO_REC709,
|
|
103
|
+
]
|
|
104
|
+
);
|