@zephyr3d/scene 0.9.25 → 0.9.26
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/dist/animation/hair/gpu_hair_simulation.js +1090 -0
- package/dist/animation/hair/gpu_hair_simulation.js.map +1 -0
- package/dist/animation/joint_dynamics/controller.js +7 -5
- package/dist/animation/joint_dynamics/controller.js.map +1 -1
- package/dist/animation/joint_dynamics/joint_dynamics_system.js +81 -5
- package/dist/animation/joint_dynamics/joint_dynamics_system.js.map +1 -1
- package/dist/animation/morphtrack.js +3 -4
- package/dist/animation/morphtrack.js.map +1 -1
- package/dist/animation/skeleton.js +58 -24
- package/dist/animation/skeleton.js.map +1 -1
- package/dist/animation/spring/multi_chain_spring_system.js +577 -179
- package/dist/animation/spring/multi_chain_spring_system.js.map +1 -1
- package/dist/animation/spring/spring_collider.js +4 -3
- package/dist/animation/spring/spring_collider.js.map +1 -1
- package/dist/animation/spring/spring_node_pose_tracker.js +40 -0
- package/dist/animation/spring/spring_node_pose_tracker.js.map +1 -0
- package/dist/animation/spring/spring_particle.js +2 -0
- package/dist/animation/spring/spring_particle.js.map +1 -1
- package/dist/animation/spring/spring_system.js +11 -3
- package/dist/animation/spring/spring_system.js.map +1 -1
- package/dist/animation/spring_modifier.js +10 -0
- package/dist/animation/spring_modifier.js.map +1 -1
- package/dist/app/engine.js +53 -43
- package/dist/app/engine.js.map +1 -1
- package/dist/app/scriptingsystem.js +119 -6
- package/dist/app/scriptingsystem.js.map +1 -1
- package/dist/app/scriptregistry.js +3 -2
- package/dist/app/scriptregistry.js.map +1 -1
- package/dist/asset/assetmanager.js +284 -67
- package/dist/asset/assetmanager.js.map +1 -1
- package/dist/asset/loaders/zhair/zhair_format.js +288 -0
- package/dist/asset/loaders/zhair/zhair_format.js.map +1 -0
- package/dist/asset/loaders/zhair/zhair_loader.js +221 -0
- package/dist/asset/loaders/zhair/zhair_loader.js.map +1 -0
- package/dist/asset/model.js +178 -67
- package/dist/asset/model.js.map +1 -1
- package/dist/camera/camera.js +193 -21
- package/dist/camera/camera.js.map +1 -1
- package/dist/camera/perspectivecamera.js +3 -1
- package/dist/camera/perspectivecamera.js.map +1 -1
- package/dist/index.d.ts +4019 -1278
- package/dist/index.js +15 -5
- package/dist/index.js.map +1 -1
- package/dist/material/eye.js +932 -0
- package/dist/material/eye.js.map +1 -0
- package/dist/material/hair.js +917 -0
- package/dist/material/hair.js.map +1 -0
- package/dist/material/hairstrand.js +842 -0
- package/dist/material/hairstrand.js.map +1 -0
- package/dist/material/hairstrand_data.js +162 -0
- package/dist/material/hairstrand_data.js.map +1 -0
- package/dist/material/lambert.js +5 -2
- package/dist/material/lambert.js.map +1 -1
- package/dist/material/material.js +338 -300
- package/dist/material/material.js.map +1 -1
- package/dist/material/meshmaterial.js +120 -19
- package/dist/material/meshmaterial.js.map +1 -1
- package/dist/material/mixins/albedocolor.js +1 -1
- package/dist/material/mixins/albedocolor.js.map +1 -1
- package/dist/material/mixins/lightmodel/blinnphong.js +5 -3
- package/dist/material/mixins/lightmodel/blinnphong.js.map +1 -1
- package/dist/material/mixins/lightmodel/lambert.js +5 -4
- package/dist/material/mixins/lightmodel/lambert.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js +3 -3
- package/dist/material/mixins/lightmodel/pbrblueprintmixin.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js +5 -5
- package/dist/material/mixins/lightmodel/pbrmetallicroughness.js.map +1 -1
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js +3 -3
- package/dist/material/mixins/lightmodel/pbrspecularglossness.js.map +1 -1
- package/dist/material/mixins/lit.js +73 -18
- package/dist/material/mixins/lit.js.map +1 -1
- package/dist/material/mixins/pbr/common.js +4 -4
- package/dist/material/mixins/pbr/common.js.map +1 -1
- package/dist/material/mixins/texture.js +48 -11
- package/dist/material/mixins/texture.js.map +1 -1
- package/dist/material/mtoon.js +6 -5
- package/dist/material/mtoon.js.map +1 -1
- package/dist/material/pbrblueprint.js +146 -28
- package/dist/material/pbrblueprint.js.map +1 -1
- package/dist/material/pbrblueprint_instance.js +501 -0
- package/dist/material/pbrblueprint_instance.js.map +1 -0
- package/dist/material/pbrmr.js +15 -16
- package/dist/material/pbrmr.js.map +1 -1
- package/dist/material/shader/helper.js +330 -20
- package/dist/material/shader/helper.js.map +1 -1
- package/dist/material/shader/terrain_blend.js +55 -0
- package/dist/material/shader/terrain_blend.js.map +1 -0
- package/dist/material/skin.js +192 -32
- package/dist/material/skin.js.map +1 -1
- package/dist/material/spriteblueprint.js +16 -1
- package/dist/material/spriteblueprint.js.map +1 -1
- package/dist/material/subsurfaceprofile.js +86 -23
- package/dist/material/subsurfaceprofile.js.map +1 -1
- package/dist/material/water.js +3 -1
- package/dist/material/water.js.map +1 -1
- package/dist/posteffect/bloom.js +167 -7
- package/dist/posteffect/bloom.js.map +1 -1
- package/dist/posteffect/coloradjust.js +2 -1
- package/dist/posteffect/coloradjust.js.map +1 -1
- package/dist/posteffect/compositor.js.map +1 -1
- package/dist/posteffect/fxaa.js +2 -1
- package/dist/posteffect/fxaa.js.map +1 -1
- package/dist/posteffect/grayscale.js +3 -1
- package/dist/posteffect/grayscale.js.map +1 -1
- package/dist/posteffect/motionblur.js +4 -1
- package/dist/posteffect/motionblur.js.map +1 -1
- package/dist/posteffect/posteffect.js.map +1 -1
- package/dist/posteffect/skinsss.js +368 -69
- package/dist/posteffect/skinsss.js.map +1 -1
- package/dist/posteffect/ssgi.js +16 -9
- package/dist/posteffect/ssgi.js.map +1 -1
- package/dist/posteffect/ssr.js +3 -0
- package/dist/posteffect/ssr.js.map +1 -1
- package/dist/posteffect/sss.js +91 -34
- package/dist/posteffect/sss.js.map +1 -1
- package/dist/posteffect/taa.js.map +1 -1
- package/dist/posteffect/tonemap.js +44 -1
- package/dist/posteffect/tonemap.js.map +1 -1
- package/dist/render/abuffer_oit.js +45 -39
- package/dist/render/abuffer_oit.js.map +1 -1
- package/dist/render/cull_visitor.js +19 -0
- package/dist/render/cull_visitor.js.map +1 -1
- package/dist/render/depthpass.js +36 -2
- package/dist/render/depthpass.js.map +1 -1
- package/dist/render/drawable_mixin.js +26 -1
- package/dist/render/drawable_mixin.js.map +1 -1
- package/dist/render/dualdepthpeeling_oit.js +52 -51
- package/dist/render/dualdepthpeeling_oit.js.map +1 -1
- package/dist/render/envlight.js +1 -1
- package/dist/render/envlight.js.map +1 -1
- package/dist/render/fbm_wavegenerator.js +3 -0
- package/dist/render/fbm_wavegenerator.js.map +1 -1
- package/dist/render/gerstner_wavegenerator.js +3 -0
- package/dist/render/gerstner_wavegenerator.js.map +1 -1
- package/dist/render/globalbindgroup_allocator.js +3 -0
- package/dist/render/globalbindgroup_allocator.js.map +1 -1
- package/dist/render/oit.js +29 -0
- package/dist/render/oit.js.map +1 -0
- package/dist/render/render_queue.js +3 -0
- package/dist/render/render_queue.js.map +1 -1
- package/dist/render/rendergraph/device_pool_allocator.js.map +1 -1
- package/dist/render/rendergraph/executor.js +2 -0
- package/dist/render/rendergraph/executor.js.map +1 -1
- package/dist/render/rendergraph/forward_plus_builder.js +61 -1
- package/dist/render/rendergraph/forward_plus_builder.js.map +1 -1
- package/dist/render/rendergraph/rendergraph.js.map +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js +1 -1
- package/dist/render/rendergraph/texture_affinity_cache.js.map +1 -1
- package/dist/render/rendergraph/types.js.map +1 -1
- package/dist/render/shadow_mask_pass.js +73 -8
- package/dist/render/shadow_mask_pass.js.map +1 -1
- package/dist/render/sky.js +166 -126
- package/dist/render/sky.js.map +1 -1
- package/dist/render/weightedblended_oit.js +36 -35
- package/dist/render/weightedblended_oit.js.map +1 -1
- package/dist/scene/basesprite.js +8 -0
- package/dist/scene/basesprite.js.map +1 -1
- package/dist/scene/batchgroup.js +3 -0
- package/dist/scene/batchgroup.js.map +1 -1
- package/dist/scene/environment.js +4 -1
- package/dist/scene/environment.js.map +1 -1
- package/dist/scene/hair.js +963 -0
- package/dist/scene/hair.js.map +1 -0
- package/dist/scene/light.js +5 -1
- package/dist/scene/light.js.map +1 -1
- package/dist/scene/mesh.js +481 -47
- package/dist/scene/mesh.js.map +1 -1
- package/dist/scene/meshdrawable.js +6 -0
- package/dist/scene/meshdrawable.js.map +1 -1
- package/dist/scene/msdftext.js +3 -0
- package/dist/scene/msdftext.js.map +1 -1
- package/dist/scene/msdftextsprite.js +3 -0
- package/dist/scene/msdftextsprite.js.map +1 -1
- package/dist/scene/particlesys.js +6 -0
- package/dist/scene/particlesys.js.map +1 -1
- package/dist/scene/scene.js +3 -0
- package/dist/scene/scene.js.map +1 -1
- package/dist/scene/scene_node.js +6 -1
- package/dist/scene/scene_node.js.map +1 -1
- package/dist/scene/terrain-cm/grass.js +3 -0
- package/dist/scene/terrain-cm/grass.js.map +1 -1
- package/dist/scene/terrain-cm/grassmaterial.js +3 -0
- package/dist/scene/terrain-cm/grassmaterial.js.map +1 -1
- package/dist/scene/terrain-cm/terrain-cm.js +6 -0
- package/dist/scene/terrain-cm/terrain-cm.js.map +1 -1
- package/dist/scene/terrain-cm/texture_cache.js +309 -0
- package/dist/scene/terrain-cm/texture_cache.js.map +1 -0
- package/dist/scene/water.js +6 -0
- package/dist/scene/water.js.map +1 -1
- package/dist/shaders/atmosphere.js.map +1 -1
- package/dist/shaders/diffusion.js +54 -0
- package/dist/shaders/diffusion.js.map +1 -0
- package/dist/shaders/shadow.js +33 -21
- package/dist/shaders/shadow.js.map +1 -1
- package/dist/shaders/temporal.js +71 -33
- package/dist/shaders/temporal.js.map +1 -1
- package/dist/shadow/dom.js +546 -0
- package/dist/shadow/dom.js.map +1 -0
- package/dist/shadow/pcf_opt.js +3 -5
- package/dist/shadow/pcf_opt.js.map +1 -1
- package/dist/shadow/pcf_pd.js +1 -1
- package/dist/shadow/pcf_pd.js.map +1 -1
- package/dist/shadow/receiver_bias.js +41 -0
- package/dist/shadow/receiver_bias.js.map +1 -0
- package/dist/shadow/shader.js +20 -60
- package/dist/shadow/shader.js.map +1 -1
- package/dist/shadow/shadow_impl.js +89 -0
- package/dist/shadow/shadow_impl.js.map +1 -1
- package/dist/shadow/shadow_region.js +50 -50
- package/dist/shadow/shadow_region.js.map +1 -1
- package/dist/shadow/shadowmapper.js +150 -37
- package/dist/shadow/shadowmapper.js.map +1 -1
- package/dist/shapes/shape.js +11 -2
- package/dist/shapes/shape.js.map +1 -1
- package/dist/shapes/sphere.js +50 -9
- package/dist/shapes/sphere.js.map +1 -1
- package/dist/utility/blueprint/common/constants.js +112 -2
- package/dist/utility/blueprint/common/constants.js.map +1 -1
- package/dist/utility/blueprint/material/func.js +142 -49
- package/dist/utility/blueprint/material/func.js.map +1 -1
- package/dist/utility/blueprint/material/ir.js +490 -25
- package/dist/utility/blueprint/material/ir.js.map +1 -1
- package/dist/utility/blueprint/material/texture.js +898 -4
- package/dist/utility/blueprint/material/texture.js.map +1 -1
- package/dist/utility/serialization/manager.js +431 -100
- package/dist/utility/serialization/manager.js.map +1 -1
- package/dist/utility/serialization/scene/animation.js +370 -3
- package/dist/utility/serialization/scene/animation.js.map +1 -1
- package/dist/utility/serialization/scene/batch.js +4 -0
- package/dist/utility/serialization/scene/batch.js.map +1 -1
- package/dist/utility/serialization/scene/camera.js +133 -1
- package/dist/utility/serialization/scene/camera.js.map +1 -1
- package/dist/utility/serialization/scene/common.js +26 -5
- package/dist/utility/serialization/scene/common.js.map +1 -1
- package/dist/utility/serialization/scene/hair.js +1141 -0
- package/dist/utility/serialization/scene/hair.js.map +1 -0
- package/dist/utility/serialization/scene/light.js +84 -4
- package/dist/utility/serialization/scene/light.js.map +1 -1
- package/dist/utility/serialization/scene/material.js +1867 -166
- package/dist/utility/serialization/scene/material.js.map +1 -1
- package/dist/utility/serialization/scene/mesh.js +231 -14
- package/dist/utility/serialization/scene/mesh.js.map +1 -1
- package/dist/utility/serialization/scene/node.js +141 -7
- package/dist/utility/serialization/scene/node.js.map +1 -1
- package/dist/utility/serialization/scene/particle.js +4 -0
- package/dist/utility/serialization/scene/particle.js.map +1 -1
- package/dist/utility/serialization/scene/primitive.js +18 -0
- package/dist/utility/serialization/scene/primitive.js.map +1 -1
- package/dist/utility/serialization/scene/sprite.js +4 -0
- package/dist/utility/serialization/scene/sprite.js.map +1 -1
- package/dist/utility/serialization/scene/terrain.js +4 -0
- package/dist/utility/serialization/scene/terrain.js.map +1 -1
- package/dist/utility/serialization/scene/text.js +4 -0
- package/dist/utility/serialization/scene/text.js.map +1 -1
- package/dist/utility/serialization/scene/water.js +4 -0
- package/dist/utility/serialization/scene/water.js.map +1 -1
- package/dist/utility/serialization/types.js.map +1 -1
- package/dist/utility/shprojector.js +96 -95
- package/dist/utility/shprojector.js.map +1 -1
- package/dist/values.js +49 -2
- package/dist/values.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward_plus_builder.js","sources":["../../../src/render/rendergraph/forward_plus_builder.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_CLEAR_VALUE, DEPTH_COMPARE_DEFAULT, REVERSE_Z, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n ColorState,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext } from '../drawable';\r\nimport {\r\n RenderQueue,\r\n type RenderItemList,\r\n type RenderItemListInfo,\r\n type RenderQueueItem\r\n} from '../render_queue';\r\nimport type { PunctualLight, Scene } from '../../scene';\r\nimport type { Camera } from '../../camera';\r\nimport { LightPass } from '../lightpass';\r\nimport { ShadowMapPass } from '../shadowmap_pass';\r\nimport { DepthPass } from '../depthpass';\r\nimport { ClusteredLight } from '../cluster_light';\r\nimport { ShadowMaskRenderer } from '../shadow_mask_pass';\r\nimport { buildHiZ } from '../hzb';\r\nimport { CopyBlitter } from '../../blitter';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { MaterialVaryingFlags } from '../../values';\r\nimport { ShaderHelper } from '../../material/shader/helper';\r\nimport { AbstractPostEffect, PostEffectLayer } from '../../posteffect/posteffect';\r\nimport { RenderGraph } from './rendergraph';\r\nimport { RenderGraphExecutor } from './executor';\r\nimport { RGTextureAffinityCache } from './texture_affinity_cache';\r\nimport { DevicePoolAllocator } from './device_pool_allocator';\r\nimport { HistoryResourceManager } from './history_resource_manager';\r\nimport { RGHistoryResources } from './history_resources';\r\nimport { RGBlackboard, FrameResources, type FrameResourceKey } from './blackboard';\r\nimport { OrderingScope } from './render_context';\r\nimport type { FrameGraphContext } from './frame_graph_context';\r\nimport type { RenderModule } from './render_module';\r\nimport { RenderPipeline } from './render_pipeline';\r\nimport type { FrameResourceRequirements } from './frame_resource_requirements';\r\nimport { mergeFrameResourceRequirements } from './frame_resource_requirements';\r\nimport type { RGExecuteContext, RGHandle } from './types';\r\nimport { renderObjectColors } from '../gpu_picking';\r\nimport type { Primitive } from '../primitive';\r\nimport { BoxShape } from '../../shapes';\r\n\r\nconst _scenePass = new LightPass();\r\nconst _depthPass = new DepthPass();\r\nconst _shadowMapPass = new ShadowMapPass();\r\nconst _clusters: ClusteredLight[] = [];\r\nconst _shadowMaskRenderer = new ShadowMaskRenderer();\r\nconst _devicePoolAllocator = new DevicePoolAllocator();\r\nconst _textureAffinityCaches = new WeakMap<\r\n Camera,\r\n { device: AbstractDevice; cache: RGTextureAffinityCache<Texture2D> }\r\n>();\r\n\r\nfunction getTextureAffinityCache(camera: Camera, device: AbstractDevice): RGTextureAffinityCache<Texture2D> {\r\n const current = _textureAffinityCaches.get(camera);\r\n if (current?.device === device) {\r\n return current.cache;\r\n }\r\n const cache = new RGTextureAffinityCache<Texture2D>();\r\n _textureAffinityCaches.set(camera, { device, cache });\r\n return cache;\r\n}\r\n\r\n/** Test-only access to the shared scene pass. @internal */\r\nexport function _getScenePassForTest(): LightPass {\r\n return _scenePass;\r\n}\r\n\r\nlet _backDepthColorState: Nullable<ColorState> = null;\r\nlet _frontDepthColorState: Nullable<ColorState> = null;\r\nconst SURFACE_MRT_FLAGS =\r\n MaterialVaryingFlags.SCENE_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SCENE_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION |\r\n MaterialVaryingFlags.SKIN_SSS_STORE;\r\n\r\nfunction getClusteredLight(): ClusteredLight {\r\n return _clusters.length > 0 ? _clusters.pop()! : new ClusteredLight();\r\n}\r\nfunction freeClusteredLight(cl: ClusteredLight): void {\r\n _clusters.push(cl);\r\n}\r\n\r\nfunction getCoreMaterial(material: unknown): unknown {\r\n return (material as { coreMaterial?: unknown } | null | undefined)?.coreMaterial ?? material ?? null;\r\n}\r\n\r\nfunction hasSSSMaterialCore(material: unknown): boolean {\r\n return !!(getCoreMaterial(material) as { subsurfaceProfile?: unknown } | null)?.subsurfaceProfile;\r\n}\r\n\r\nfunction hasSkinSSSMaterialCore(material: unknown): boolean {\r\n return !!(getCoreMaterial(material) as { skinSSS?: unknown } | null)?.skinSSS;\r\n}\r\n\r\nfunction renderQueueHasActiveSSS(renderQueue: RenderQueue): boolean {\r\n const itemList = renderQueue.itemList;\r\n if (!itemList) {\r\n return false;\r\n }\r\n const lists = [...itemList.opaque.lit, ...itemList.opaque.unlit];\r\n for (const list of lists) {\r\n for (const material of list.materialList) {\r\n if (hasSSSMaterialCore(material)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction renderQueueHasActiveSkinSSS(renderQueue: RenderQueue): boolean {\r\n const itemList = renderQueue.itemList;\r\n if (!itemList) {\r\n return false;\r\n }\r\n const lists = [...itemList.opaque.lit, ...itemList.opaque.unlit];\r\n for (const list of lists) {\r\n for (const material of list.materialList) {\r\n if (hasSkinSSSMaterialCore(material)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction filterActualSSSItemList(items: RenderQueueItem[]): RenderQueueItem[] {\r\n return items.filter((item) => hasSSSMaterialCore(item.drawable.getMaterial?.()));\r\n}\r\n\r\nfunction filterActualSSSMaterialList(materialList: Set<any>): Set<any> {\r\n const filtered = new Set<any>();\r\n materialList.forEach((mat) => {\r\n if (hasSSSMaterialCore(mat)) {\r\n filtered.add(mat);\r\n }\r\n });\r\n return filtered;\r\n}\r\n\r\nfunction cloneActualSSSListInfo(source: RenderItemListInfo, _targetQueue: RenderQueue): RenderItemListInfo {\r\n return {\r\n itemList: filterActualSSSItemList(source.itemList),\r\n skinItemList: filterActualSSSItemList(source.skinItemList),\r\n morphItemList: filterActualSSSItemList(source.morphItemList),\r\n skinAndMorphItemList: filterActualSSSItemList(source.skinAndMorphItemList),\r\n instanceItemList: filterActualSSSItemList(source.instanceItemList),\r\n materialList: filterActualSSSMaterialList(source.materialList),\r\n instanceList: {},\r\n renderQueue: source.renderQueue\r\n };\r\n}\r\n\r\nfunction cloneActualSSSBundle(\r\n source: RenderItemList['opaque'],\r\n targetQueue: RenderQueue\r\n): RenderItemList['opaque'] {\r\n return {\r\n lit: source.lit.map((info) => cloneActualSSSListInfo(info, targetQueue)),\r\n unlit: source.unlit.map((info) => cloneActualSSSListInfo(info, targetQueue))\r\n };\r\n}\r\n\r\nfunction hasAnyActualSSSItems(renderItems: RenderItemListInfo[]): boolean {\r\n return renderItems.some(\r\n (info) =>\r\n info.itemList.length > 0 ||\r\n info.skinItemList.length > 0 ||\r\n info.morphItemList.length > 0 ||\r\n info.skinAndMorphItemList.length > 0 ||\r\n info.instanceItemList.length > 0\r\n );\r\n}\r\n\r\nfunction createActualSSSRenderQueue(renderQueue: RenderQueue): RenderQueue | null {\r\n const itemList = renderQueue.itemList;\r\n if (!itemList) {\r\n return null;\r\n }\r\n const queue = new RenderQueue(_scenePass);\r\n const sssOpaque = cloneActualSSSBundle(itemList.opaque, queue);\r\n if (!hasAnyActualSSSItems([...sssOpaque.lit, ...sssOpaque.unlit])) {\r\n queue.dispose();\r\n return null;\r\n }\r\n const emptyBundle = { lit: [], unlit: [] };\r\n const target = queue as unknown as {\r\n _itemList: RenderItemList;\r\n _shadowedLightList: PunctualLight[];\r\n _unshadowedLightList: PunctualLight[];\r\n _sunLight: typeof renderQueue.sunLight;\r\n _primaryDirectionalLight: typeof renderQueue.primaryDirectionalLight;\r\n _primaryTransmissionLight: typeof renderQueue.primaryTransmissionLight;\r\n _needSceneColor: boolean;\r\n _needSceneDepth: boolean;\r\n _needSceneColorWithDepth: boolean;\r\n _drawTransparent: boolean;\r\n };\r\n target._itemList = {\r\n opaque: sssOpaque,\r\n transmission: emptyBundle,\r\n transparent: emptyBundle,\r\n transmission_trans: emptyBundle\r\n };\r\n target._shadowedLightList = renderQueue.shadowedLights;\r\n target._unshadowedLightList = renderQueue.unshadowedLights;\r\n target._sunLight = renderQueue.sunLight;\r\n target._primaryDirectionalLight = renderQueue.primaryDirectionalLight;\r\n target._primaryTransmissionLight = renderQueue.primaryTransmissionLight;\r\n target._needSceneColor = false;\r\n target._needSceneDepth = false;\r\n target._needSceneColorWithDepth = false;\r\n target._drawTransparent = false;\r\n return queue;\r\n}\r\n\r\nfunction getSurfaceTextureFormat(ctx: DrawContext): TextureFormat {\r\n const caps = ctx.device.getDeviceCaps?.();\r\n return caps?.textureCaps.supportHalfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\r\n}\r\n\r\nfunction getTextureFormatBytes(ctx: DrawContext, format: TextureFormat): number {\r\n return ctx.device.getDeviceCaps().textureCaps.getTextureFormatInfo(format).size;\r\n}\r\n\r\nfunction supportsSSGIRenderTargets(ctx: DrawContext): boolean {\r\n const caps = ctx.device.getDeviceCaps();\r\n const rgba16fBytes = caps.textureCaps.getTextureFormatInfo('rgba16f').size;\r\n return !!(\r\n caps.textureCaps.supportHalfFloatColorBuffer &&\r\n caps.framebufferCaps.maxDrawBuffers >= 2 &&\r\n caps.framebufferCaps.maxColorAttachmentBytesPerSample >= rgba16fBytes * 2\r\n );\r\n}\r\n\r\nfunction shouldStoreSSSDiffuse(ctx: DrawContext): boolean {\r\n return ctx.camera.sssStrength > 0 && ctx.camera.sssBlurScale > 0;\r\n}\r\n\r\nfunction shouldStoreSSSTransmission(ctx: DrawContext): boolean {\r\n return ctx.camera.sssStrength > 0 && ctx.camera.sssTransmissionStrength > 0;\r\n}\r\n\r\nfunction getSSSLightingTextureFormat(\r\n ctx: DrawContext,\r\n attachmentCount: number,\r\n surfaceAttachmentCount: number\r\n): TextureFormat {\r\n const colorFormat = ctx.colorFormat!;\r\n if (surfaceAttachmentCount === 0 || attachmentCount === 0) {\r\n return colorFormat;\r\n }\r\n const caps = ctx.device.getDeviceCaps();\r\n // MRT graph textures are not resolved on DrawContext yet.\r\n const surfaceFormat = getSurfaceTextureFormat(ctx);\r\n const colorBytes =\r\n getTextureFormatBytes(ctx, colorFormat) +\r\n getTextureFormatBytes(ctx, surfaceFormat) * surfaceAttachmentCount;\r\n const fullPrecisionBytes = colorBytes + getTextureFormatBytes(ctx, colorFormat) * attachmentCount;\r\n if (fullPrecisionBytes <= caps.framebufferCaps.maxColorAttachmentBytesPerSample) {\r\n return colorFormat;\r\n }\r\n return 'rgba8unorm';\r\n}\r\n\r\nfunction getFullMipLevelCount(width: number, height: number): number {\r\n return Math.max(1, Math.floor(Math.log2(Math.max(1, width, height))) + 1);\r\n}\r\n\r\nfunction hasSurfaceMRT(ctx: DrawContext): boolean {\r\n return !!(ctx.materialFlags & SURFACE_MRT_FLAGS);\r\n}\r\n\r\nfunction getLightPassColorAttachments(\r\n ctx: DrawContext,\r\n colorAttachment: TextureFormat | Texture2D\r\n): TextureFormat | Texture2D | Array<TextureFormat | Texture2D> {\r\n const attachments: Array<TextureFormat | Texture2D> = [colorAttachment];\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS) {\r\n attachments.push(ctx.SceneRoughnessTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_NORMAL) {\r\n attachments.push(ctx.SceneNormalTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE) {\r\n attachments.push(ctx.SSSProfileTexture!, ctx.SSSParamTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n attachments.push(ctx.SSSDiffuseTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n attachments.push(ctx.SSSTransmissionTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {\r\n attachments.push(ctx.SkinSSSTexture!);\r\n }\r\n return attachments.length === 1 ? attachments[0] : attachments;\r\n}\r\n\r\n/** Per-frame Forward+ feature options. @public */\r\nexport interface ForwardPlusOptions {\r\n /** Enable depth prepass (always true for now). */\r\n depthPrepass: boolean;\r\n /** Enable motion vectors (requires TAA or motionBlur). */\r\n motionVectors: boolean;\r\n /** Enable Hi-Z pyramid (for SSR ray tracing). */\r\n hiZ: boolean;\r\n /** Produce opaque-scene world normals. */\r\n sceneNormal: boolean;\r\n /** Produce opaque-scene roughness data. */\r\n sceneRoughness: boolean;\r\n /** Produce and consume the clustered screen-space shadow mask. */\r\n shadowMask: boolean;\r\n /** Enable screen-space reflections. */\r\n ssr: boolean;\r\n /** Enable screen-space diffuse global illumination. */\r\n ssgi: boolean;\r\n /** Whether to compute SSR thickness. */\r\n ssrCalcThickness: boolean;\r\n /** Whether GPU picking is requested this frame. */\r\n gpuPicking: boolean;\r\n /** Whether transmission/refraction materials are present. */\r\n needSceneColor: boolean;\r\n /** Whether scene-color-dependent materials also require scene depth. */\r\n needSceneColorWithDepth: boolean;\r\n /** Whether SSR needs transmission depth before the main light pass. */\r\n needsTransmissionDepthForSSR: boolean;\r\n /** Enable screen-space subsurface scattering. */\r\n sss: boolean;\r\n /** Enable the stylized skin-specific SSS pass. */\r\n skinSSS: boolean;\r\n /** Whether height fog is composited over the opaque scene this frame. */\r\n fogPresents: boolean;\r\n}\r\n\r\n/** Derive Forward+ options from scene and camera state. @internal */\r\nexport function deriveForwardPlusOptions(\r\n scene: Scene,\r\n camera: Camera,\r\n deviceType: string,\r\n renderQueue: RenderQueue\r\n): ForwardPlusOptions {\r\n const ssr = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\r\n const ssgi =\r\n camera.SSGI &&\r\n camera.HDR &&\r\n camera.ssgiIntensity > 0 &&\r\n scene.env.light.type === 'ibl' &&\r\n !!scene.env.light.envLight?.hasRadiance() &&\r\n !!scene.env.light.envLight?.hasIrradiance();\r\n const sss = camera.SSS && renderQueueHasActiveSSS(renderQueue);\r\n const skinSSS = camera.skinSSS && renderQueueHasActiveSkinSSS(renderQueue);\r\n const needSceneColor = renderQueue.needSceneColor();\r\n const needSceneColorWithDepth = renderQueue.needSceneColorWithDepth();\r\n return {\r\n depthPrepass: true,\r\n motionVectors: false,\r\n hiZ: false,\r\n sceneNormal: false,\r\n sceneRoughness: false,\r\n shadowMask: false,\r\n ssr: !!ssr,\r\n ssgi: !!ssgi,\r\n ssrCalcThickness: !!ssr && camera.ssrCalcThickness,\r\n gpuPicking: !!camera.getPickResultResolveFunc(),\r\n needSceneColor,\r\n needSceneColorWithDepth,\r\n needsTransmissionDepthForSSR: !!ssr && needSceneColor && !needSceneColorWithDepth,\r\n sss: !!sss,\r\n skinSSS: !!skinSSS,\r\n fogPresents: !!scene.env.sky?.fogPresents\r\n };\r\n}\r\n\r\nfunction resolveFrameResourceRequirements(\r\n ctx: DrawContext,\r\n options: ForwardPlusOptions,\r\n requirements: FrameResourceRequirements\r\n): void {\r\n const deviceType = ctx.device.type;\r\n options.motionVectors ||= !!requirements.motionVector;\r\n options.hiZ ||= !!requirements.hiZ;\r\n options.sceneNormal ||= !!requirements.sceneNormal;\r\n options.sceneRoughness ||= !!requirements.sceneRoughness;\r\n options.shadowMask ||= !!requirements.shadowMask;\r\n\r\n if (options.motionVectors && deviceType === 'webgl') {\r\n throw new Error('Forward+: MotionVector was requested but is not supported by the WebGL backend.');\r\n }\r\n if (options.hiZ && deviceType === 'webgl') {\r\n throw new Error('Forward+: HiZ was requested but is not supported by the WebGL backend.');\r\n }\r\n if (options.shadowMask && deviceType === 'webgl') {\r\n throw new Error('Forward+: ShadowMask was requested but is not supported by the WebGL backend.');\r\n }\r\n\r\n const surfaceAttachmentCount = Number(options.sceneNormal) + Number(options.sceneRoughness);\r\n if (surfaceAttachmentCount > 0) {\r\n const caps = ctx.device.getDeviceCaps();\r\n const maxDrawBuffers = caps.framebufferCaps.maxDrawBuffers ?? Number.MAX_SAFE_INTEGER;\r\n if (1 + surfaceAttachmentCount > maxDrawBuffers) {\r\n throw new Error(\r\n `Forward+: ${surfaceAttachmentCount} scene surface attachment(s) were requested, ` +\r\n `but the device supports only ${maxDrawBuffers} color attachments.`\r\n );\r\n }\r\n const bytesPerSample =\r\n getTextureFormatBytes(ctx, ctx.colorFormat) +\r\n getTextureFormatBytes(ctx, getSurfaceTextureFormat(ctx)) * surfaceAttachmentCount;\r\n if (bytesPerSample > caps.framebufferCaps.maxColorAttachmentBytesPerSample) {\r\n throw new Error(\r\n `Forward+: requested scene surface attachments require ${bytesPerSample} bytes per sample, ` +\r\n `but the device limit is ${caps.framebufferCaps.maxColorAttachmentBytesPerSample}.`\r\n );\r\n }\r\n }\r\n\r\n ctx.motionVectors = options.motionVectors;\r\n ctx.HiZ = options.hiZ;\r\n ctx.SSGI = options.ssgi;\r\n ctx.screenSpaceShadowMask = options.shadowMask;\r\n ctx.SSS = options.sss;\r\n}\r\n\r\nfunction validateProducedFrameResources(\r\n blackboard: RGBlackboard,\r\n options: ForwardPlusOptions,\r\n renderQueue: RenderQueue\r\n): void {\r\n const required: Array<[boolean, FrameResourceKey]> = [\r\n [options.motionVectors, FrameResources.MotionVector],\r\n [options.hiZ, FrameResources.HiZ],\r\n [options.sceneNormal, FrameResources.SceneNormal],\r\n [options.sceneRoughness, FrameResources.SceneRoughness],\r\n [options.shadowMask && renderQueue.shadowedLights.length > 0, FrameResources.ShadowMask]\r\n ];\r\n for (const [needed, resource] of required) {\r\n if (needed && !blackboard.has(resource)) {\r\n throw new Error(\r\n `Forward+: frame resource \"${resource}\" was requested but no enabled RenderModule produced it.`\r\n );\r\n }\r\n }\r\n}\r\n\r\n/** Mutable state shared by pass callbacks for one frame. @public */\r\nexport interface FrameState {\r\n ctx: DrawContext;\r\n renderQueue: RenderQueue;\r\n depthFramebuffer: Nullable<FrameBuffer>;\r\n sunLightColor: Nullable<any>;\r\n options: ForwardPlusOptions;\r\n renderQueueDisposed: boolean;\r\n clusteredLightReleased: boolean;\r\n sunLightRestored: boolean;\r\n}\r\n\r\ninterface ForwardPlusGraphBuildResult {\r\n backbuffer: RGHandle;\r\n frame: FrameState;\r\n externalDepthImport?: { handle: RGHandle; texture: Texture2D };\r\n}\r\n\r\ninterface HistoryReadBinding {\r\n name: string;\r\n handle: RGHandle;\r\n}\r\n\r\n/** Result of the depth prepass module. @public */\r\nexport interface DepthPrepassResult {\r\n depthHandle: RGHandle;\r\n motionVectorHandle?: RGHandle;\r\n graphDepthAttachmentHandle?: RGHandle;\r\n externalDepthAttachmentHandle?: RGHandle;\r\n externalDepthAttachment: Nullable<Texture2D>;\r\n depthFramebufferHandle: RGHandle;\r\n}\r\n\r\n/** Result of the main light pass module. @public */\r\nexport interface LightPassResult {\r\n sceneColorHandle: RGHandle;\r\n sceneColorFramebufferHandle?: RGHandle;\r\n sceneRoughnessHandle?: RGHandle;\r\n sceneNormalHandle?: RGHandle;\r\n sssDiffuseHandle?: RGHandle;\r\n sssTransmissionHandle?: RGHandle;\r\n skinSSSHandle?: RGHandle;\r\n}\r\n\r\n/** Non-resource state shared while Forward+ modules build. @public */\r\nexport interface ForwardPlusBuildState {\r\n /** Depth prepass outputs. */\r\n depth?: DepthPrepassResult;\r\n /** Depth attachment used by scene-color/SSS framebuffers (handle or backend texture). */\r\n renderDepthAttachment: RGHandle | Texture2D | null;\r\n /** True when the scene renders directly into the final framebuffer. */\r\n useFinalFramebufferAsIntermediate: boolean;\r\n /** Ordering token from the pre-light transmission-depth pass, if any. */\r\n preLightTransmissionDepthToken?: RGHandle;\r\n /** History textures kept in a read scope while the light pass executes. */\r\n lightHistoryReadBindings: HistoryReadBinding[];\r\n /** Main light pass outputs. */\r\n lightPass?: LightPassResult;\r\n /** Graph output handle produced by the composite tail. */\r\n presentedBackbuffer?: RGHandle;\r\n}\r\n\r\n/** Require state produced by an earlier module. @internal */\r\nfunction requireBuildState<K extends keyof ForwardPlusBuildState>(\r\n fg: FrameGraphContext,\r\n key: K,\r\n producerType: string,\r\n consumerType: string\r\n): NonNullable<ForwardPlusBuildState[K]> {\r\n const value = fg.state[key];\r\n if (!value) {\r\n throw new Error(\r\n `Forward+ module \"${consumerType}\" requires module \"${producerType}\" ` +\r\n `(build state \"${String(key)}\" was not produced). Did you remove it from the pipeline?`\r\n );\r\n }\r\n return value;\r\n}\r\n\r\n/** @internal */\r\nconst SkyUpdateModule: RenderModule<FrameGraphContext> = {\r\n type: 'SkyUpdate',\r\n prepare: () => ({ enabled: true }),\r\n setup({ graph, ctx, frame, ordering }: FrameGraphContext) {\r\n graph.addPass('SkyUpdate', (builder) => {\r\n ordering.emit(builder, 'SkyUpdateDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n frame.sunLightColor = ctx.scene.env.sky.update(ctx);\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst ClusterLightsModule: RenderModule<FrameGraphContext> = {\r\n type: 'ClusterLights',\r\n prepare: () => ({ enabled: true }),\r\n setup({ graph, ctx, renderQueue, ordering }: FrameGraphContext) {\r\n graph.addPass('ClusterLights', (builder) => {\r\n ordering.chainInto(builder);\r\n ordering.emit(builder, 'ClusterLightsDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n ctx.clusteredLight = getClusteredLight();\r\n ctx.clusteredLight.calculateLightIndex(\r\n ctx.camera,\r\n renderQueue,\r\n ctx.screenSpaceShadowMask,\r\n ShaderHelper.getPreExposure(ctx)\r\n );\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst GPUPickingModule: RenderModule<FrameGraphContext> = {\r\n type: 'GPUPicking',\r\n prepare: ({ options }) => ({ enabled: options.gpuPicking }),\r\n setup({ graph, ctx, renderQueue, ordering }: FrameGraphContext) {\r\n graph.addPass('GPUPicking', (builder) => {\r\n ordering.chainInto(builder);\r\n ordering.emit(builder, 'GPUPickingDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\r\n if (pickResolveFunc) {\r\n renderObjectColors(ctx, pickResolveFunc, renderQueue);\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst ShadowMapsModule: RenderModule<FrameGraphContext> = {\r\n type: 'ShadowMaps',\r\n // Light-owned shadow maps are observable side effects.\r\n prepare: ({ renderQueue }) => ({ enabled: renderQueue.shadowedLights.length > 0 }),\r\n setup({ graph, ctx, renderQueue, ordering }: FrameGraphContext) {\r\n graph.addPass('ShadowMaps', (builder) => {\r\n ordering.chainInto(builder);\r\n ordering.emit(builder, 'ShadowMapsDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n renderShadowMaps(ctx, renderQueue.shadowedLights);\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst DepthPrepassModule: RenderModule<FrameGraphContext> = {\r\n type: 'DepthPrepass',\r\n writes: [FrameResources.LinearDepth, FrameResources.MotionVector, FrameResources.SceneDepthAttachment],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, ordering, blackboard, options } = fg;\r\n const result = graph.addPass('DepthPrepass', (builder) => {\r\n ordering.chainInto(builder);\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n\r\n const depthHandle = builder.createTexture({\r\n format,\r\n label: 'linearDepth',\r\n allocationKey: 'ForwardPlus.LinearDepth'\r\n });\r\n const motionVectorHandle = options.motionVectors\r\n ? builder.createTexture({\r\n format: mvFormat,\r\n label: 'motionVector',\r\n allocationKey: 'ForwardPlus.MotionVector'\r\n })\r\n : undefined;\r\n const finalDepthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const externalDepthAttachment = finalDepthAttachment?.isTexture2D()\r\n ? (finalDepthAttachment as Texture2D)\r\n : null;\r\n const externalDepthAttachmentHandle = externalDepthAttachment\r\n ? graph.importTexture('externalSceneDepth')\r\n : undefined;\r\n const graphDepthAttachmentHandle = externalDepthAttachment\r\n ? undefined\r\n : builder.createTexture({\r\n format: ctx.depthFormat,\r\n label: 'sceneDepth',\r\n allocationKey: 'ForwardPlus.SceneDepth'\r\n });\r\n const depthAttachmentOrFormat =\r\n externalDepthAttachmentHandle ?? graphDepthAttachmentHandle ?? ctx.depthFormat;\r\n const depthFramebufferHandle = builder.createFramebuffer({\r\n label: 'DepthPrepassFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: motionVectorHandle ? [depthHandle, motionVectorHandle] : depthHandle,\r\n depthAttachment: depthAttachmentOrFormat,\r\n ignoreDepthStencil: false\r\n });\r\n const skyMotionVectorFramebufferHandle = motionVectorHandle\r\n ? builder.createFramebuffer({\r\n label: 'SkyMotionVectorFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: motionVectorHandle,\r\n depthAttachment: depthAttachmentOrFormat\r\n })\r\n : undefined;\r\n\r\n builder.addSubpass('SceneDepth', (rgCtx) => {\r\n const depthFramebuffer = rgCtx.getFramebuffer<FrameBuffer>(depthFramebufferHandle);\r\n frame.depthFramebuffer = renderSceneDepth(\r\n frame,\r\n depthFramebuffer,\r\n rgCtx,\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n });\r\n if (skyMotionVectorFramebufferHandle) {\r\n builder.addSubpass('SkyMotionVectors', (rgCtx) => {\r\n renderSkyMotionVectors(ctx, rgCtx, skyMotionVectorFramebufferHandle);\r\n });\r\n }\r\n\r\n return {\r\n depthHandle,\r\n motionVectorHandle,\r\n graphDepthAttachmentHandle,\r\n externalDepthAttachmentHandle,\r\n externalDepthAttachment,\r\n depthFramebufferHandle\r\n };\r\n });\r\n\r\n fg.state.depth = result;\r\n // Depth mutations re-register their versions through the blackboard.\r\n blackboard.set(FrameResources.LinearDepth, result.depthHandle);\r\n if (result.motionVectorHandle) {\r\n blackboard.set(FrameResources.MotionVector, result.motionVectorHandle);\r\n }\r\n blackboard.set(\r\n FrameResources.SceneDepthAttachment,\r\n result.graphDepthAttachmentHandle ?? result.externalDepthAttachmentHandle!\r\n );\r\n // Later modules share this attachment without owning it.\r\n fg.state.renderDepthAttachment =\r\n result.graphDepthAttachmentHandle ?? result.externalDepthAttachmentHandle ?? null;\r\n // Opaque effects require a texture and may require surface MRT attachments.\r\n const opaqueLayerHasEffects = !!ctx.compositor?.layerHasEnabledEffect(PostEffectLayer.opaque);\r\n fg.state.useFinalFramebufferAsIntermediate =\r\n !!result.externalDepthAttachment &&\r\n result.externalDepthAttachment === ctx.finalFramebuffer?.getDepthAttachment() &&\r\n !opaqueLayerHasEffects;\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst ShadowMaskModule: RenderModule<FrameGraphContext> = {\r\n type: 'ShadowMaskPass',\r\n writes: [FrameResources.ShadowMask],\r\n // shadowMapInfo is populated at execute time and cannot gate graph building.\r\n prepare: ({ ctx, options, renderQueue }) => ({\r\n enabled: options.shadowMask && renderQueue.shadowedLights.length > 0,\r\n requirements: {\r\n shadowMask:\r\n ctx.device.type !== 'webgl' &&\r\n ctx.camera.screenSpaceShadowMask &&\r\n renderQueue.shadowedLights.length > 0\r\n }\r\n }),\r\n setup(fg: FrameGraphContext) {\r\n // Four shadow lights share each RGBA8 layer in clustered-light order.\r\n const { graph, ctx, renderQueue, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'ShadowMaskPass');\r\n const numShadowLights = renderQueue.shadowedLights.length;\r\n const numLayers = ShadowMaskRenderer.getLayerCount(numShadowLights);\r\n const maskPassResult = graph.addPass('ShadowMaskPass', (builder) => {\r\n // Capture the depth version declared at this pipeline position.\r\n const maskDepthHandle = blackboard.expect(FrameResources.LinearDepth);\r\n builder.read(maskDepthHandle);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n // Per-layer framebuffers are temporary views of this graph texture.\r\n const maskHandle = builder.createTexture({\r\n format: 'rgba8unorm',\r\n label: 'shadowMask',\r\n arrayLayers: numLayers,\r\n allocationKey: 'ForwardPlus.ShadowMask'\r\n });\r\n builder.setExecute((rgCtx) => {\r\n const depthTex = rgCtx.getTexture<Texture2D>(maskDepthHandle);\r\n const maskTex = rgCtx.getTexture<Texture2DArray>(maskHandle);\r\n _shadowMaskRenderer.render(ctx, depthTex, renderQueue.shadowedLights, (layer) =>\r\n rgCtx.createFramebuffer<FrameBuffer>({\r\n width: maskTex.width,\r\n height: maskTex.height,\r\n colorAttachments: maskTex,\r\n depthAttachment: null,\r\n attachmentLayer: layer\r\n })\r\n );\r\n });\r\n return { maskHandle };\r\n });\r\n blackboard.set(FrameResources.ShadowMask, maskPassResult.maskHandle);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst TransmissionDepthForSSRModule: RenderModule<FrameGraphContext> = {\r\n type: 'TransmissionDepthForSSR',\r\n writes: [FrameResources.LinearDepth],\r\n prepare: ({ options }) => ({ enabled: options.needsTransmissionDepthForSSR }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, frame, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'TransmissionDepthForSSR');\r\n const transmissionDepthResult = graph.addPass('TransmissionDepthForSSR', (builder) => {\r\n const currentDepth = blackboard.expect(FrameResources.LinearDepth);\r\n builder.read(currentDepth);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n // Version the in-place depth mutation for downstream dependencies.\r\n const depthOut = builder.write(currentDepth);\r\n const done = builder.createToken('TransmissionDepthForSSRDone');\r\n builder.sideEffect();\r\n builder.setExecute((rgCtx) => {\r\n renderTransmissionDepthPass(frame, rgCtx);\r\n });\r\n return { done, depthOut };\r\n });\r\n fg.state.preLightTransmissionDepthToken = transmissionDepthResult.done;\r\n // Publish the post-transmission depth version.\r\n blackboard.set(FrameResources.LinearDepth, transmissionDepthResult.depthOut);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst HiZModule: RenderModule<FrameGraphContext> = {\r\n type: 'HiZ',\r\n writes: [FrameResources.HiZ],\r\n prepare: ({ options }) => ({ enabled: options.hiZ }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'HiZ');\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n //const hiZWidth = nextPowerOf2(ctx.renderWidth);\r\n //const hiZHeight = nextPowerOf2(ctx.renderHeight);\r\n let hiZHandle: RGHandle | undefined;\r\n graph.addPass('HiZ', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n hiZHandle = builder.createTexture({\r\n format: REVERSE_Z ? 'r16f' : 'r32f',\r\n label: 'hiZ',\r\n sizeMode: 'backbuffer-relative',\r\n mipLevels: getFullMipLevelCount(ctx.renderWidth, ctx.renderHeight),\r\n allocationKey: 'ForwardPlus.HiZ'\r\n });\r\n const hiZFramebufferHandle = builder.createFramebuffer({\r\n label: 'HiZFramebuffer',\r\n colorAttachments: hiZHandle,\r\n depthAttachment: null\r\n });\r\n builder.setExecute((rgCtx) => {\r\n const passCtx = frame.ctx;\r\n // Resolve the declared handle, not mutable framebuffer state.\r\n const depthFb = rgCtx.getFramebuffer<FrameBuffer>(depthPassResult.depthFramebufferHandle);\r\n const depthTex = depthFb.getDepthAttachment() as Texture2D;\r\n if (!depthTex) {\r\n throw new Error('HiZ pass: depth prepass framebuffer has no depth attachment.');\r\n }\r\n const hiZTex = rgCtx.getTexture<Texture2D>(hiZHandle!);\r\n const HiZFrameBuffer = rgCtx.getFramebuffer<FrameBuffer>(hiZFramebufferHandle);\r\n buildHiZ(depthTex, HiZFrameBuffer);\r\n passCtx.HiZTexture = hiZTex;\r\n });\r\n });\r\n if (hiZHandle) {\r\n blackboard.set(FrameResources.HiZ, hiZHandle);\r\n }\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst SSSProfileModule: RenderModule<FrameGraphContext> = {\r\n type: 'SSSProfile',\r\n prepare: ({ options }) => ({ enabled: options.sss }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'SSSProfile');\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const sssProfileResult = graph.addPass('SSSProfile', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n if (shadowMaskHandle) {\r\n builder.read(shadowMaskHandle);\r\n }\r\n const profileHandle = builder.createTexture({\r\n format: 'rgba16f',\r\n label: 'sssProfile',\r\n allocationKey: 'ForwardPlus.SSSProfile'\r\n });\r\n const paramHandle = builder.createTexture({\r\n format: 'rgba8unorm',\r\n label: 'sssParam',\r\n allocationKey: 'ForwardPlus.SSSParam'\r\n });\r\n const colorAttachments = [ctx.colorFormat!, profileHandle, paramHandle];\r\n const framebufferHandle = builder.createFramebuffer({\r\n label: 'SSSProfileFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments,\r\n depthAttachment: renderDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n\r\n builder.setExecute((rgCtx) => {\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n renderForwardSSSProfile(\r\n frame,\r\n rgCtx.getFramebuffer<FrameBuffer>(framebufferHandle),\r\n rgCtx.getTexture<Texture2D>(profileHandle),\r\n rgCtx.getTexture<Texture2D>(paramHandle),\r\n null\r\n );\r\n });\r\n\r\n return {\r\n profileHandle,\r\n paramHandle,\r\n framebufferHandle\r\n };\r\n });\r\n blackboard.set(FrameResources.SSSProfile, sssProfileResult.profileHandle);\r\n blackboard.set(FrameResources.SSSParam, sssProfileResult.paramHandle);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst SceneColorGrabModule: RenderModule<FrameGraphContext> = {\r\n type: 'SceneColorGrab',\r\n prepare: ({ options }) => ({ enabled: options.needSceneColor }),\r\n setup(fg: FrameGraphContext) {\r\n // Refraction samples this non-transmission scene copy.\r\n const { graph, ctx, frame, blackboard, options } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'SceneColorGrab');\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const grabResult = graph.addPass('SceneColorGrab', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n if (shadowMaskHandle) {\r\n builder.read(shadowMaskHandle);\r\n }\r\n const copyHandle = builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColorCopy',\r\n allocationKey: 'ForwardPlus.SceneColorCopy'\r\n });\r\n // Isolate depth when SSR inserts transmission depth before LightPass.\r\n const copyFramebufferHandle = !options.needsTransmissionDepthForSSR\r\n ? builder.createFramebuffer({\r\n label: 'SceneColorCopyFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: copyHandle,\r\n depthAttachment: renderDepthAttachment,\r\n ignoreDepthStencil: false\r\n })\r\n : undefined;\r\n builder.setExecute((rgCtx) => {\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n renderSceneColorGrab(frame, rgCtx, copyHandle, copyFramebufferHandle);\r\n });\r\n return { copyHandle, copyFramebufferHandle };\r\n });\r\n blackboard.set(FrameResources.SceneColorCopy, grabResult.copyHandle);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst LightPassModule: RenderModule<FrameGraphContext> = {\r\n type: 'LightPass',\r\n writes: [\r\n FrameResources.SceneColor,\r\n FrameResources.SceneRoughness,\r\n FrameResources.SceneNormal,\r\n FrameResources.SSSDiffuse,\r\n FrameResources.SSSTransmission,\r\n FrameResources.SkinSSS\r\n ],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard, options, backbuffer } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'LightPass');\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n const hiZHandle = blackboard.get(FrameResources.HiZ);\r\n const sssProfileHandle = blackboard.get(FrameResources.SSSProfile);\r\n const sssParamHandle = blackboard.get(FrameResources.SSSParam);\r\n const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);\r\n const useFinalFramebufferAsIntermediate = fg.state.useFinalFramebufferAsIntermediate;\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const historyManager = fg.history;\r\n\r\n // Keep SSR history scoped while the light pass executes.\r\n const lightHistoryReadBindings = fg.state.lightHistoryReadBindings;\r\n const historySize = { width: ctx.renderWidth, height: ctx.renderHeight };\r\n if (historyManager && options.ssr && ctx.camera?.ssrTemporal && options.motionVectors) {\r\n const reflectHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSR_REFLECT,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n historySize\r\n );\r\n const motionVectorHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSR_MOTION_VECTOR,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n historySize\r\n );\r\n if (reflectHistoryHandle && motionVectorHistoryHandle) {\r\n lightHistoryReadBindings.push(\r\n { name: RGHistoryResources.SSR_REFLECT, handle: reflectHistoryHandle },\r\n { name: RGHistoryResources.SSR_MOTION_VECTOR, handle: motionVectorHistoryHandle }\r\n );\r\n }\r\n }\r\n if (historyManager && options.ssgi) {\r\n const ssgiHistorySize = { width: ctx.renderWidth, height: ctx.renderHeight };\r\n const irradianceHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_IRRADIANCE,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n ssgiHistorySize\r\n );\r\n const surfaceHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_SURFACE,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n ssgiHistorySize\r\n );\r\n if (irradianceHistoryHandle && surfaceHistoryHandle) {\r\n lightHistoryReadBindings.push(\r\n { name: RGHistoryResources.SSGI_IRRADIANCE, handle: irradianceHistoryHandle },\r\n { name: RGHistoryResources.SSGI_SURFACE, handle: surfaceHistoryHandle }\r\n );\r\n }\r\n }\r\n\r\n const opaquePassResult = graph.addPass('LightPass', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (shadowMaskHandle) {\r\n builder.read(shadowMaskHandle);\r\n }\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n for (const binding of lightHistoryReadBindings) {\r\n builder.read(binding.handle);\r\n }\r\n\r\n // Direct rendering writes the backbuffer; otherwise create a texture.\r\n const sceneColorHandle = useFinalFramebufferAsIntermediate\r\n ? builder.write(backbuffer)\r\n : builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColor',\r\n allocationKey: 'ForwardPlus.SceneColor'\r\n });\r\n\r\n if (sceneColorCopyHandle) {\r\n builder.read(sceneColorCopyHandle);\r\n }\r\n if (sssProfileHandle) {\r\n builder.read(sssProfileHandle);\r\n }\r\n if (sssParamHandle) {\r\n builder.read(sssParamHandle);\r\n }\r\n const surfaceAttachmentCount = Number(options.sceneRoughness) + Number(options.sceneNormal);\r\n // Surface MRT products are exposed through blackboard handles.\r\n const sceneRoughnessHandle = options.sceneRoughness\r\n ? builder.createTexture({\r\n format: getSurfaceTextureFormat(ctx),\r\n label: 'sceneRoughness',\r\n allocationKey: 'ForwardPlus.SceneRoughness'\r\n })\r\n : undefined;\r\n const sceneNormalHandle = options.sceneNormal\r\n ? builder.createTexture({\r\n format: getSurfaceTextureFormat(ctx),\r\n label: 'sceneNormal',\r\n allocationKey: 'ForwardPlus.SceneNormal'\r\n })\r\n : undefined;\r\n const writeSSSDiffuse = options.sss && shouldStoreSSSDiffuse(ctx);\r\n let writeSSSTransmission = options.sss && shouldStoreSSSTransmission(ctx);\r\n if (\r\n writeSSSDiffuse &&\r\n writeSSSTransmission &&\r\n surfaceAttachmentCount > 0 &&\r\n getSSSLightingTextureFormat(ctx, 2, surfaceAttachmentCount) !== ctx.colorFormat\r\n ) {\r\n writeSSSTransmission = false;\r\n }\r\n const writeSkinSSS = options.skinSSS;\r\n const sssLightingAttachmentCount =\r\n (writeSSSDiffuse ? 1 : 0) + (writeSSSTransmission ? 1 : 0) + (writeSkinSSS ? 1 : 0);\r\n const sssLightingFormat = getSSSLightingTextureFormat(\r\n ctx,\r\n sssLightingAttachmentCount,\r\n surfaceAttachmentCount\r\n );\r\n const sssDiffuseHandle = writeSSSDiffuse\r\n ? builder.createTexture({\r\n format: sssLightingFormat,\r\n label: 'sssDiffuse',\r\n allocationKey: 'ForwardPlus.SSSDiffuse'\r\n })\r\n : undefined;\r\n const sssTransmissionHandle = writeSSSTransmission\r\n ? builder.createTexture({\r\n format: sssLightingFormat,\r\n label: 'sssTransmission',\r\n allocationKey: 'ForwardPlus.SSSTransmission'\r\n })\r\n : undefined;\r\n const skinSSSHandle = writeSkinSSS\r\n ? builder.createTexture({\r\n format: sssLightingFormat,\r\n label: 'skinSSS',\r\n allocationKey: 'ForwardPlus.SkinSSS'\r\n })\r\n : undefined;\r\n const sceneColorFramebufferHandle = useFinalFramebufferAsIntermediate\r\n ? undefined\r\n : builder.createFramebuffer({\r\n label: 'SceneColorFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: sceneColorHandle,\r\n depthAttachment: renderDepthAttachment\r\n });\r\n\r\n builder.setExecute((rgCtx) => {\r\n const sceneColorTex = rgCtx.getTexture<Texture2D>(sceneColorHandle);\r\n const sceneColorCopyTex = sceneColorCopyHandle\r\n ? rgCtx.getTexture<Texture2D>(sceneColorCopyHandle)\r\n : null;\r\n // Legacy effects still read resolved MRT textures from DrawContext.\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n ctx.HiZTexture = hiZHandle ? rgCtx.getTexture<Texture2D>(hiZHandle) : null;\r\n ctx.SceneRoughnessTexture = sceneRoughnessHandle\r\n ? rgCtx.getTexture<Texture2D>(sceneRoughnessHandle)\r\n : null;\r\n ctx.SceneNormalTexture = sceneNormalHandle ? rgCtx.getTexture<Texture2D>(sceneNormalHandle) : null;\r\n ctx.SSSProfileTexture = sssProfileHandle ? rgCtx.getTexture<Texture2D>(sssProfileHandle) : null;\r\n ctx.SSSParamTexture = sssParamHandle ? rgCtx.getTexture<Texture2D>(sssParamHandle) : null;\r\n ctx.SSSDiffuseTexture = sssDiffuseHandle ? rgCtx.getTexture<Texture2D>(sssDiffuseHandle) : null;\r\n ctx.SSSTransmissionTexture = sssTransmissionHandle\r\n ? rgCtx.getTexture<Texture2D>(sssTransmissionHandle)\r\n : null;\r\n ctx.SkinSSSTexture = skinSSSHandle ? rgCtx.getTexture<Texture2D>(skinSSSHandle) : null;\r\n const renderLightPass = () =>\r\n renderOpaqueScenePass(frame, sceneColorTex, sceneColorCopyTex, rgCtx, sceneColorFramebufferHandle);\r\n if (historyManager && lightHistoryReadBindings.length > 0) {\r\n const ssgiIrradianceBinding = lightHistoryReadBindings.find(\r\n (binding) => binding.name === RGHistoryResources.SSGI_IRRADIANCE\r\n );\r\n const ssgiSurfaceBinding = lightHistoryReadBindings.find(\r\n (binding) => binding.name === RGHistoryResources.SSGI_SURFACE\r\n );\r\n ctx.SSGIIrradianceHistoryTexture = ssgiIrradianceBinding\r\n ? rgCtx.getTexture<Texture2D>(ssgiIrradianceBinding.handle)\r\n : null;\r\n ctx.SSGISurfaceHistoryTexture = ssgiSurfaceBinding\r\n ? rgCtx.getTexture<Texture2D>(ssgiSurfaceBinding.handle)\r\n : null;\r\n historyManager.beginReadScope(\r\n lightHistoryReadBindings.map((binding) => ({\r\n name: binding.name,\r\n texture: rgCtx.getTexture<Texture2D>(binding.handle)\r\n }))\r\n );\r\n try {\r\n renderLightPass();\r\n } finally {\r\n historyManager.endReadScope();\r\n ctx.SSGIIrradianceHistoryTexture = null;\r\n ctx.SSGISurfaceHistoryTexture = null;\r\n }\r\n } else {\r\n renderLightPass();\r\n }\r\n });\r\n\r\n return {\r\n sceneColorHandle,\r\n sceneColorFramebufferHandle,\r\n sceneRoughnessHandle,\r\n sceneNormalHandle,\r\n sssDiffuseHandle,\r\n sssTransmissionHandle,\r\n skinSSSHandle\r\n };\r\n });\r\n const lightPassResult: LightPassResult = opaquePassResult;\r\n fg.state.lightPass = lightPassResult;\r\n blackboard.set(FrameResources.SceneColor, lightPassResult.sceneColorHandle);\r\n if (lightPassResult.sceneRoughnessHandle) {\r\n blackboard.set(FrameResources.SceneRoughness, lightPassResult.sceneRoughnessHandle);\r\n }\r\n if (lightPassResult.sceneNormalHandle) {\r\n blackboard.set(FrameResources.SceneNormal, lightPassResult.sceneNormalHandle);\r\n }\r\n if (lightPassResult.sssDiffuseHandle) {\r\n blackboard.set(FrameResources.SSSDiffuse, lightPassResult.sssDiffuseHandle);\r\n }\r\n if (lightPassResult.sssTransmissionHandle) {\r\n blackboard.set(FrameResources.SSSTransmission, lightPassResult.sssTransmissionHandle);\r\n }\r\n if (lightPassResult.skinSSSHandle) {\r\n blackboard.set(FrameResources.SkinSSS, lightPassResult.skinSSSHandle);\r\n }\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst SkyPassModule: RenderModule<FrameGraphContext> = {\r\n type: 'SkyPass',\r\n reads: [{ resource: FrameResources.SceneColor, version: 'current' }],\r\n writes: [FrameResources.SceneColor, FrameResources.SceneColorNoFog],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard, options } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'SkyPass');\r\n const lightPassResult = requireBuildState(fg, 'lightPass', 'LightPass', 'SkyPass');\r\n const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);\r\n const sceneColorHandle = blackboard.expect(FrameResources.SceneColor);\r\n // Screen-space passes must not read fog as surface radiance. Snapshot the lit\r\n // scene with sky but before fog, and only when fog is actually present and a\r\n // consumer exists, so fog-free scenes allocate nothing extra. The refraction\r\n // background path already baked sky and fog into the copy, so no fog-free\r\n // version can be recovered there and consumers keep their existing input.\r\n const captureNoFog = !sceneColorCopyHandle && (options.ssgi || options.ssr) && options.fogPresents;\r\n\r\n const skyPassResult = graph.addPass('SkyPass', (builder) => {\r\n builder.read(sceneColorHandle);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n builder.read(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n const noFog = captureNoFog\r\n ? builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColorNoFog',\r\n allocationKey: 'ForwardPlus.SceneColorNoFog'\r\n })\r\n : null;\r\n const out = builder.write(sceneColorHandle);\r\n builder.setExecute((rgCtx) => {\r\n // The refraction background already contains sky and fog.\r\n if (!sceneColorCopyHandle) {\r\n renderSkyScenePass(\r\n frame,\r\n rgCtx,\r\n lightPassResult.sceneColorFramebufferHandle,\r\n noFog ? rgCtx.getTexture<Texture2D>(noFog) : null\r\n );\r\n }\r\n });\r\n return { color: out, noFog };\r\n });\r\n\r\n lightPassResult.sceneColorHandle = skyPassResult.color;\r\n blackboard.set(FrameResources.SceneColor, skyPassResult.color);\r\n if (skyPassResult.noFog) {\r\n blackboard.set(FrameResources.SceneColorNoFog, skyPassResult.noFog);\r\n }\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst CompositeTailModule: RenderModule<FrameGraphContext> = {\r\n type: 'CompositeTail',\r\n writes: [FrameResources.SceneColor, FrameResources.LinearDepth, FrameResources.PresentedColor],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard, options, backbuffer } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'CompositeTail');\r\n const hiZHandle = blackboard.get(FrameResources.HiZ);\r\n const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);\r\n const lightPassResult = requireBuildState(fg, 'lightPass', 'LightPass', 'CompositeTail');\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const useFinalFramebufferAsIntermediate = fg.state.useFinalFramebufferAsIntermediate;\r\n const lightHistoryReadBindings = fg.state.lightHistoryReadBindings;\r\n const historyManager = fg.history;\r\n\r\n // Opaque effects finish before transparent geometry uses their output.\r\n const opaqueChainInput = blackboard.expect(FrameResources.SceneColor);\r\n // Include textures sampled indirectly through DrawContext.\r\n const opaqueChainDeps: RGHandle[] = [blackboard.expect(FrameResources.LinearDepth)];\r\n if (hiZHandle) {\r\n opaqueChainDeps.push(hiZHandle);\r\n }\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n opaqueChainDeps.push(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n if (sceneColorCopyHandle) {\r\n opaqueChainDeps.push(sceneColorCopyHandle);\r\n }\r\n for (const handle of [\r\n blackboard.get(FrameResources.SSSProfile),\r\n blackboard.get(FrameResources.SSSParam),\r\n blackboard.get(FrameResources.SceneRoughness),\r\n blackboard.get(FrameResources.SceneNormal),\r\n blackboard.get(FrameResources.SSSDiffuse),\r\n blackboard.get(FrameResources.SSSTransmission),\r\n blackboard.get(FrameResources.SkinSSS)\r\n ]) {\r\n if (handle) {\r\n opaqueChainDeps.push(handle);\r\n }\r\n }\r\n const opaqueChainResult = ctx.compositor\r\n ? ctx.compositor.buildLayer({\r\n graph,\r\n ctx,\r\n layer: PostEffectLayer.opaque,\r\n blackboard,\r\n input: opaqueChainInput,\r\n finalOutput: null,\r\n sceneDepthAttachment: renderDepthAttachment,\r\n dependencies: opaqueChainDeps,\r\n historyReads: lightHistoryReadBindings,\r\n history: historyManager\r\n })\r\n : { color: opaqueChainInput, wroteFinal: false };\r\n const opaqueChainRan = opaqueChainResult.color !== opaqueChainInput;\r\n\r\n // Transparent geometry writes a new version of the opaque-chain output.\r\n const sceneColorHandle = graph.addPass('TransparentPass', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (hiZHandle) {\r\n // Transparent materials may ray-march HiZ.\r\n builder.read(hiZHandle);\r\n }\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n builder.read(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n if (sceneColorCopyHandle) {\r\n builder.read(sceneColorCopyHandle);\r\n }\r\n builder.read(opaqueChainResult.color);\r\n const out = builder.write(opaqueChainResult.color);\r\n builder.setExecute((rgCtx) => {\r\n renderTransparentScenePass(\r\n frame,\r\n rgCtx,\r\n opaqueChainRan ? opaqueChainResult.color : null,\r\n lightPassResult.sceneColorFramebufferHandle\r\n );\r\n });\r\n return out;\r\n });\r\n blackboard.set(FrameResources.SceneColor, sceneColorHandle);\r\n\r\n const chainInput = sceneColorHandle;\r\n // Track whether the chain input still resides in the final target.\r\n const backbufferResidentHandle = useFinalFramebufferAsIntermediate ? sceneColorHandle : null;\r\n const chainDependencies: RGHandle[] = [];\r\n const finalOutput = { handle: backbuffer, isScreen: !ctx.finalFramebuffer };\r\n const endLayerHasEffects = !!ctx.compositor?.layerHasEnabledEffect(PostEffectLayer.end);\r\n\r\n // Transparent-layer effects read depth before its transmission mutation.\r\n const transparentChainResult = ctx.compositor\r\n ? ctx.compositor.buildLayer({\r\n graph,\r\n ctx,\r\n layer: PostEffectLayer.transparent,\r\n blackboard,\r\n input: chainInput,\r\n finalOutput: endLayerHasEffects ? null : finalOutput,\r\n inputResidesInFinalTarget: !!backbufferResidentHandle,\r\n sceneDepthAttachment: renderDepthAttachment,\r\n dependencies: chainDependencies,\r\n history: historyManager\r\n })\r\n : { color: chainInput, wroteFinal: false };\r\n\r\n // WAR orders this depth mutation after pre-transmission readers.\r\n let transmissionDepthToken: RGHandle | undefined;\r\n if (options.needSceneColor && !options.needsTransmissionDepthForSSR) {\r\n const transmissionDepthResult = graph.addPass('TransmissionDepth', (builder) => {\r\n const currentDepth = blackboard.expect(FrameResources.LinearDepth);\r\n builder.read(sceneColorHandle);\r\n if (transparentChainResult.color !== sceneColorHandle) {\r\n builder.read(transparentChainResult.color);\r\n }\r\n builder.read(currentDepth);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n const depthOut = builder.write(currentDepth);\r\n const done = builder.createToken('TransmissionDepthDone');\r\n builder.sideEffect();\r\n builder.setExecute((rgCtx) => {\r\n renderTransmissionDepthPass(frame, rgCtx);\r\n });\r\n return { done, depthOut };\r\n });\r\n transmissionDepthToken = transmissionDepthResult.done;\r\n blackboard.set(FrameResources.LinearDepth, transmissionDepthResult.depthOut);\r\n }\r\n\r\n const endChainDependencies = transmissionDepthToken\r\n ? [...chainDependencies, transmissionDepthToken]\r\n : chainDependencies;\r\n const chainResult = ctx.compositor\r\n ? ctx.compositor.buildLayer({\r\n graph,\r\n ctx,\r\n layer: PostEffectLayer.end,\r\n blackboard,\r\n input: transparentChainResult.color,\r\n finalOutput,\r\n inputResidesInFinalTarget:\r\n !!backbufferResidentHandle && transparentChainResult.color === chainInput,\r\n sceneDepthAttachment: renderDepthAttachment,\r\n dependencies: endChainDependencies,\r\n history: historyManager\r\n })\r\n : { color: transparentChainResult.color, wroteFinal: false };\r\n const finalWroteFinal = chainResult.wroteFinal || transparentChainResult.wroteFinal;\r\n\r\n let presentedBackbuffer: RGHandle;\r\n if (finalWroteFinal) {\r\n presentedBackbuffer = chainResult.color;\r\n } else {\r\n presentedBackbuffer = graph.addPass('Blit', (builder) => {\r\n builder.read(chainResult.color);\r\n for (const dep of endChainDependencies) {\r\n builder.read(dep);\r\n }\r\n const outputBackbuffer = builder.write(backbuffer);\r\n // Skip copies when the output already resides in the final target.\r\n const needsBlit = chainResult.color !== backbufferResidentHandle;\r\n builder.setExecute((rgCtx) => {\r\n const sourceTex = needsBlit ? rgCtx.getTexture<Texture2D>(chainResult.color) : null;\r\n if (sourceTex) {\r\n const blitter = new CopyBlitter();\r\n blitter.srgbOut = !ctx.finalFramebuffer;\r\n blitter.blit(sourceTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n });\r\n return outputBackbuffer;\r\n });\r\n }\r\n fg.state.presentedBackbuffer = presentedBackbuffer;\r\n // Downstream modules may replace this sink registration.\r\n blackboard.set(FrameResources.PresentedColor, presentedBackbuffer);\r\n }\r\n};\r\n\r\n/** Built-in Forward+ modules addressable by pipeline anchors. @public */\r\nexport const ForwardPlusModules = {\r\n SkyUpdate: SkyUpdateModule,\r\n ClusterLights: ClusterLightsModule,\r\n GPUPicking: GPUPickingModule,\r\n ShadowMaps: ShadowMapsModule,\r\n DepthPrepass: DepthPrepassModule,\r\n ShadowMask: ShadowMaskModule,\r\n TransmissionDepthForSSR: TransmissionDepthForSSRModule,\r\n HiZ: HiZModule,\r\n SSSProfile: SSSProfileModule,\r\n SceneColorGrab: SceneColorGrabModule,\r\n LightPass: LightPassModule,\r\n SkyPass: SkyPassModule,\r\n CompositeTail: CompositeTailModule\r\n} as const;\r\n\r\n/** The default module order assembled by {@link createForwardPlusPipeline}. */\r\nconst DEFAULT_FORWARD_PLUS_MODULES: readonly RenderModule<FrameGraphContext>[] = [\r\n SkyUpdateModule,\r\n ClusterLightsModule,\r\n GPUPickingModule,\r\n ShadowMapsModule,\r\n DepthPrepassModule,\r\n ShadowMaskModule,\r\n TransmissionDepthForSSRModule,\r\n HiZModule,\r\n SSSProfileModule,\r\n SceneColorGrabModule,\r\n LightPassModule,\r\n SkyPassModule,\r\n CompositeTailModule\r\n];\r\n\r\n/** @internal */\r\nlet _defaultForwardPlusPipeline: RenderPipeline<FrameGraphContext> | null = null;\r\n\r\n/** Create an independent pipeline with the built-in Forward+ modules. @public */\r\nexport function createForwardPlusPipeline(): RenderPipeline<FrameGraphContext> {\r\n return new RenderPipeline<FrameGraphContext>(DEFAULT_FORWARD_PLUS_MODULES);\r\n}\r\n\r\n/** Return the shared default pipeline. Mutations affect cameras using it. @public */\r\nexport function getDefaultForwardPlusPipeline(): RenderPipeline<FrameGraphContext> {\r\n if (!_defaultForwardPlusPipeline) {\r\n _defaultForwardPlusPipeline = createForwardPlusPipeline();\r\n }\r\n return _defaultForwardPlusPipeline;\r\n}\r\n\r\n/** Build the Forward+ render graph and return its backbuffer output. @public */\r\nexport function buildForwardPlusGraph(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): RGHandle {\r\n return buildForwardPlusGraphInternal(graph, ctx, renderQueue, options).backbuffer;\r\n}\r\n\r\nfunction buildForwardPlusGraphInternal(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): ForwardPlusGraphBuildResult {\r\n const backbuffer = graph.importTexture('backbuffer');\r\n // Irradiance, moments and surface history require renderable half-float\r\n // targets. Keep ordinary IBL active on devices that cannot provide them.\r\n options.ssgi &&= supportsSSGIRenderTargets(ctx);\r\n ctx.SSS = !!options.sss;\r\n ctx.SSGI = !!options.ssgi;\r\n ctx.SSGIIrradianceHistoryTexture = null;\r\n ctx.SSGISurfaceHistoryTexture = null;\r\n ctx.SkinSSSTexture = null;\r\n // ShadowMask sets this only when it produces a texture.\r\n ctx.shadowMaskTexture = null;\r\n\r\n const blackboard = new RGBlackboard();\r\n\r\n const frame: FrameState = {\r\n ctx,\r\n renderQueue,\r\n depthFramebuffer: null,\r\n sunLightColor: null,\r\n options,\r\n renderQueueDisposed: false,\r\n clusteredLightReleased: false,\r\n sunLightRestored: false\r\n };\r\n\r\n const ordering = new OrderingScope();\r\n const fg: FrameGraphContext = {\r\n graph,\r\n ctx,\r\n finalFramebuffer: ctx.finalFramebuffer,\r\n renderQueue,\r\n blackboard,\r\n frame,\r\n history: ctx.camera?.getHistoryResourceManager?.() ?? null,\r\n options,\r\n ordering,\r\n backbuffer,\r\n state: {\r\n renderDepthAttachment: null,\r\n useFinalFramebufferAsIntermediate: false,\r\n lightHistoryReadBindings: []\r\n }\r\n };\r\n\r\n const pipeline = ctx.camera?.renderPipeline ?? getDefaultForwardPlusPipeline();\r\n const requirements = ctx.compositor?.collectRequirements(ctx) ?? {};\r\n mergeFrameResourceRequirements(requirements, pipeline.collectRequirements(fg));\r\n resolveFrameResourceRequirements(ctx, options, requirements);\r\n\r\n pipeline.build(fg);\r\n validateProducedFrameResources(blackboard, options, renderQueue);\r\n\r\n const presented = blackboard.get(FrameResources.PresentedColor) ?? fg.state.presentedBackbuffer!;\r\n const depth = fg.state.depth;\r\n const externalDepthImport =\r\n depth?.externalDepthAttachmentHandle && depth.externalDepthAttachment\r\n ? { handle: depth.externalDepthAttachmentHandle, texture: depth.externalDepthAttachment }\r\n : undefined;\r\n return { backbuffer: presented, frame, externalDepthImport };\r\n}\r\n\r\n/** @internal */\r\nfunction renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]): void {\r\n ctx.renderPass = _shadowMapPass;\r\n ctx.device.pushDeviceStates();\r\n try {\r\n for (const light of lights) {\r\n light.shadow.render(ctx, _shadowMapPass);\r\n }\r\n } finally {\r\n ctx.device.popDeviceStates();\r\n }\r\n}\r\n\r\nfunction renderForwardSSSProfile(\r\n frame: FrameState,\r\n profileFramebuffer: FrameBuffer,\r\n profileTexture: Texture2D,\r\n paramTexture: Texture2D,\r\n normalTexture: Nullable<Texture2D>\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n if (!ctx.SSS || !ctx.depthTexture) {\r\n return;\r\n }\r\n const sssRenderQueue = createActualSSSRenderQueue(renderQueue);\r\n if (!sssRenderQueue) {\r\n return;\r\n }\r\n\r\n const device = ctx.device;\r\n const savedMaterialFlags = ctx.materialFlags;\r\n const savedCompositor = ctx.compositor;\r\n const savedTransmission = _scenePass.transmission;\r\n const savedRenderOpaque = _scenePass.renderOpaque;\r\n const savedRenderTransparent = _scenePass.renderTransparent;\r\n const savedClearColor = _scenePass.clearColor;\r\n const savedClearDepth = _scenePass.clearDepth;\r\n const savedClearStencil = _scenePass.clearStencil;\r\n const savedCommandBufferReuse = ctx.camera.commandBufferReuse;\r\n const savedProfileTexture = ctx.SSSProfileTexture;\r\n const savedParamTexture = ctx.SSSParamTexture;\r\n const savedNormalTexture = ctx.SceneNormalTexture;\r\n\r\n let profileFlags = MaterialVaryingFlags.SSS_STORE_PROFILE;\r\n if (normalTexture) {\r\n profileFlags |= MaterialVaryingFlags.SCENE_STORE_NORMAL;\r\n }\r\n\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(profileFramebuffer);\r\n ctx.SSSProfileTexture = profileTexture;\r\n ctx.SSSParamTexture = paramTexture;\r\n ctx.SceneNormalTexture = normalTexture;\r\n ctx.compositor = null;\r\n ctx.camera.commandBufferReuse = false;\r\n ctx.materialFlags =\r\n (ctx.materialFlags &\r\n ~(\r\n MaterialVaryingFlags.SCENE_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SCENE_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION |\r\n MaterialVaryingFlags.SKIN_SSS_STORE\r\n )) |\r\n profileFlags;\r\n _scenePass.transmission = false;\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderTransparent = false;\r\n _scenePass.clearColor = Vector4.zero();\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n _scenePass.render(ctx, null, null, sssRenderQueue);\r\n } finally {\r\n _scenePass.clearColor = savedClearColor;\r\n _scenePass.clearDepth = savedClearDepth;\r\n _scenePass.clearStencil = savedClearStencil;\r\n _scenePass.renderTransparent = savedRenderTransparent;\r\n _scenePass.renderOpaque = savedRenderOpaque;\r\n _scenePass.transmission = savedTransmission;\r\n ctx.camera.commandBufferReuse = savedCommandBufferReuse;\r\n ctx.materialFlags = savedMaterialFlags;\r\n ctx.compositor = savedCompositor;\r\n ctx.SSSProfileTexture = savedProfileTexture;\r\n ctx.SSSParamTexture = savedParamTexture;\r\n ctx.SceneNormalTexture = savedNormalTexture;\r\n device.popDeviceStates();\r\n sssRenderQueue.dispose();\r\n }\r\n}\r\n\r\nfunction releaseIntermediateFramebuffer(frame: FrameState): void {\r\n // Each pass owns device state; only clear the shared context field.\r\n frame.ctx.intermediateFramebuffer = null;\r\n}\r\n\r\nfunction releaseDepthFramebuffer(frame: FrameState): void {\r\n frame.depthFramebuffer = null;\r\n}\r\n\r\nfunction disposeRenderQueue(frame: FrameState): void {\r\n if (!frame.renderQueueDisposed) {\r\n frame.renderQueue.dispose();\r\n frame.renderQueueDisposed = true;\r\n }\r\n}\r\n\r\nfunction releaseClusteredLight(frame: FrameState): void {\r\n if (!frame.clusteredLightReleased && frame.ctx.clusteredLight) {\r\n freeClusteredLight(frame.ctx.clusteredLight);\r\n frame.ctx.clusteredLight = undefined;\r\n frame.clusteredLightReleased = true;\r\n }\r\n}\r\n\r\nfunction restoreSunLight(frame: FrameState): void {\r\n if (!frame.sunLightRestored && frame.sunLightColor && frame.ctx.sunLight) {\r\n frame.ctx.sunLight.color = frame.sunLightColor;\r\n frame.sunLightRestored = true;\r\n }\r\n}\r\n\r\nfunction cleanupFrame(frame: FrameState): void {\r\n const { ctx } = frame;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SCENE_STORE_ROUGHNESS;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_PROFILE;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_DIFFUSE;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SCENE_STORE_NORMAL;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SKIN_SSS_STORE;\r\n releaseIntermediateFramebuffer(frame);\r\n releaseDepthFramebuffer(frame);\r\n releaseClusteredLight(frame);\r\n disposeRenderQueue(frame);\r\n restoreSunLight(frame);\r\n}\r\n\r\n/** @internal */\r\nfunction renderSceneDepth(\r\n frame: FrameState,\r\n existingDepthFb: Nullable<FrameBuffer>,\r\n rgCtx: RGExecuteContext,\r\n depthTex?: Texture2D,\r\n motionVectorTex?: Nullable<Texture2D>,\r\n transmissionOverride?: boolean\r\n): FrameBuffer {\r\n const ctx = frame.ctx;\r\n const renderQueue = frame.renderQueue;\r\n const transmission = transmissionOverride ?? !!existingDepthFb;\r\n let depthFramebuffer = existingDepthFb;\r\n\r\n // Current callers must provide the graph-managed prepass framebuffer.\r\n console.assert(\r\n !!existingDepthFb,\r\n 'renderSceneDepth: called without an existing depth framebuffer; the ' +\r\n 'self-allocating fallback path is untested in the forward+ pipeline.'\r\n );\r\n\r\n if (!depthFramebuffer) {\r\n if (depthTex) {\r\n const colorAttachments = motionVectorTex ? [depthTex, motionVectorTex] : depthTex;\r\n const depthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const depthTexOrFormat = depthAttachment?.isTexture2D() ? depthAttachment : ctx.depthFormat;\r\n\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: depthTex.width,\r\n height: depthTex.height,\r\n colorAttachments,\r\n depthAttachment: depthTexOrFormat,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n if (!ctx.finalFramebuffer) {\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: ctx.depthFormat,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\r\n if (originDepth?.isTexture2D()) {\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: originDepth.width,\r\n height: originDepth.height,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: originDepth,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n depthFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: ctx.depthFormat,\r\n ignoreDepthStencil: false\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!transmission) {\r\n frame.depthFramebuffer = depthFramebuffer!;\r\n }\r\n\r\n ctx.device.pushDeviceStates();\r\n try {\r\n ctx.device.setFramebuffer(depthFramebuffer!);\r\n _depthPass.encodeDepth = depthFramebuffer!.getColorAttachments()[0].format === 'rgba8unorm';\r\n _depthPass.clearColor = transmission\r\n ? null\r\n : _depthPass.encodeDepth\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 1, 1, 1);\r\n _depthPass.clearDepth = transmission ? null : DEPTH_CLEAR_VALUE;\r\n _depthPass.clearStencil = null;\r\n _depthPass.transmission = transmission;\r\n\r\n if (ctx.SSRCalcThickness && !transmission) {\r\n if (!_backDepthColorState) {\r\n _backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\r\n }\r\n if (!_frontDepthColorState) {\r\n _frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\r\n }\r\n ctx.forceColorState = _backDepthColorState;\r\n ctx.forceCullMode = 'front';\r\n _depthPass.renderBackface = true;\r\n _depthPass.transmission = false;\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n _depthPass.clearColor = null;\r\n _depthPass.renderBackface = false;\r\n ctx.forceColorState = _frontDepthColorState;\r\n ctx.forceCullMode = null;\r\n }\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n ctx.forceColorState = null;\r\n ctx.forceCullMode = null;\r\n _depthPass.renderBackface = false;\r\n ctx.device.popDeviceStates();\r\n }\r\n\r\n if (!transmission) {\r\n ctx.motionVectorTexture = ctx.motionVectors\r\n ? (depthFramebuffer!.getColorAttachments()[1] as Texture2D)\r\n : null;\r\n ctx.linearDepthTexture = depthFramebuffer!.getColorAttachments()[0] as Texture2D;\r\n ctx.depthTexture = depthFramebuffer!.getDepthAttachment() as Texture2D;\r\n ctx.depthPrepassAttachment = ctx.depthTexture;\r\n }\r\n return depthFramebuffer!;\r\n}\r\n\r\nlet _skyMVProgram: Nullable<GPUProgram> = null;\r\nlet _skyMVBindGroup: Nullable<BindGroup> = null;\r\nlet _skyMVBox: Nullable<Primitive> = null;\r\n\r\n/** @internal */\r\nfunction renderSkyMotionVectors(\r\n ctx: DrawContext,\r\n rgCtx: RGExecuteContext,\r\n framebufferHandle?: RGHandle\r\n): void {\r\n if (!ctx.motionVectorTexture) {\r\n return;\r\n }\r\n\r\n const device = ctx.device;\r\n const fb = framebufferHandle\r\n ? rgCtx.getFramebuffer<FrameBuffer>(framebufferHandle)\r\n : rgCtx.createFramebuffer<FrameBuffer>({\r\n colorAttachments: ctx.motionVectorTexture,\r\n depthAttachment: ctx.depthTexture\r\n });\r\n\r\n if (!_skyMVProgram) {\r\n _skyMVProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = ShaderHelper.farthestClipZ(this, this.clipPos.w);\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n })!;\r\n _skyMVProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n\r\n if (!_skyMVBindGroup) {\r\n _skyMVBindGroup = device.createBindGroup(_skyMVProgram.bindGroupLayouts[0]);\r\n }\r\n\r\n if (!_skyMVBox) {\r\n _skyMVBox = new BoxShape({ size: 2, needNormal: false, needUV: false });\r\n }\r\n\r\n _skyMVBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n _skyMVBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\r\n _skyMVBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n _skyMVBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\r\n\r\n device.pushDeviceStates();\r\n device.setProgram(_skyMVProgram);\r\n device.setBindGroup(0, _skyMVBindGroup);\r\n device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, DEPTH_COMPARE_DEFAULT));\r\n device.setFramebuffer(fb);\r\n _skyMVBox.draw();\r\n device.popDeviceStates();\r\n}\r\n\r\nfunction blitToCurrentColorAttachment(ctx: DrawContext, source: Texture2D): void {\r\n const framebuffer = ctx.device.getFramebuffer();\r\n const destination = framebuffer?.getColorAttachment<Texture2D>(0) ?? null;\r\n new CopyBlitter().blit(source, destination, fetchSampler('clamp_nearest_nomip'));\r\n}\r\n\r\n/** Render the refraction background before LightPass. @internal */\r\nfunction renderSceneColorGrab(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n copyHandle: RGHandle,\r\n copyFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n const copyTex = rgCtx.getTexture<Texture2D>(copyHandle);\r\n const compositor = ctx.compositor;\r\n ctx.compositor = null;\r\n const isolateSceneColorDepth = frame.options.needsTransmissionDepthForSSR;\r\n const savedDepthPrepassAttachment = ctx.depthPrepassAttachment;\r\n const savedMaterialFlags = ctx.materialFlags;\r\n\r\n // The background copy has no surface MRT attachments.\r\n const sceneColorMaterialFlags = ctx.materialFlags & ~SURFACE_MRT_FLAGS;\r\n const sceneColorFramebuffer = copyFramebufferHandle\r\n ? rgCtx.getFramebuffer<FrameBuffer>(copyFramebufferHandle)\r\n : rgCtx.createFramebuffer<FrameBuffer>({\r\n width: copyTex.width,\r\n height: copyTex.height,\r\n colorAttachments: copyTex,\r\n depthAttachment: isolateSceneColorDepth ? ctx.depthFormat : depthTex,\r\n ignoreDepthStencil: false\r\n });\r\n let sceneColorStatePushed = false;\r\n try {\r\n device.pushDeviceStates();\r\n sceneColorStatePushed = true;\r\n device.setFramebuffer(sceneColorFramebuffer);\r\n _scenePass.transmission = false;\r\n if (isolateSceneColorDepth) {\r\n ctx.depthPrepassAttachment = undefined;\r\n _scenePass.clearDepth = DEPTH_CLEAR_VALUE;\r\n _scenePass.clearStencil = 0;\r\n } else {\r\n _scenePass.clearDepth = depthTex ? null : DEPTH_CLEAR_VALUE;\r\n _scenePass.clearStencil = depthTex ? null : 0;\r\n }\r\n ctx.materialFlags = sceneColorMaterialFlags;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n ctx.materialFlags = savedMaterialFlags;\r\n if (isolateSceneColorDepth) {\r\n ctx.depthPrepassAttachment = savedDepthPrepassAttachment;\r\n }\r\n if (sceneColorStatePushed) {\r\n device.popDeviceStates();\r\n }\r\n ctx.compositor = compositor;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function renderOpaqueScenePass(\r\n frame: FrameState,\r\n sceneColorTex: Texture2D,\r\n sceneColorCopyTex: Nullable<Texture2D>,\r\n rgCtx: RGExecuteContext,\r\n sceneColorFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n\r\n ctx.materialFlags &= ~(\r\n MaterialVaryingFlags.SCENE_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SCENE_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION |\r\n MaterialVaryingFlags.SKIN_SSS_STORE\r\n );\r\n\r\n if (ctx.SceneRoughnessTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SCENE_STORE_ROUGHNESS;\r\n }\r\n if (ctx.SceneNormalTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SCENE_STORE_NORMAL;\r\n }\r\n if (ctx.SSS) {\r\n if (ctx.SSSDiffuseTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSS_STORE_DIFFUSE;\r\n }\r\n if (ctx.SSSTransmissionTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\r\n }\r\n }\r\n if (ctx.SkinSSSTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SKIN_SSS_STORE;\r\n }\r\n\r\n // Prefer the graph framebuffer; final-target mode has no graph framebuffer.\r\n if (sceneColorFramebufferHandle && !hasSurfaceMRT(ctx)) {\r\n ctx.intermediateFramebuffer = rgCtx.getFramebuffer<FrameBuffer>(sceneColorFramebufferHandle);\r\n } else if (!sceneColorFramebufferHandle && depthTex === ctx.finalFramebuffer?.getDepthAttachment()) {\r\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\r\n } else {\r\n ctx.intermediateFramebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: sceneColorTex.width,\r\n height: sceneColorTex.height,\r\n colorAttachments: getLightPassColorAttachments(ctx, sceneColorTex),\r\n depthAttachment: depthTex\r\n });\r\n }\r\n\r\n // Graph passes do not communicate through leftover device state.\r\n ctx.device.pushDeviceStates();\r\n try {\r\n // setFramebuffer may no-op, so reset viewport and scissor explicitly.\r\n ctx.device.setFramebuffer(ctx.intermediateFramebuffer);\r\n ctx.device.setViewport(null);\r\n ctx.device.setScissor(null);\r\n\r\n _scenePass.transmission = false;\r\n _scenePass.renderSky = false;\r\n _scenePass.clearDepth = depthTex ? null : DEPTH_CLEAR_VALUE;\r\n _scenePass.clearStencil = depthTex ? null : 0;\r\n\r\n if (renderQueue.needSceneColor() && sceneColorCopyTex) {\r\n // Seed the main target with the refraction background.\r\n ctx.sceneColorTexture = sceneColorCopyTex;\r\n blitToCurrentColorAttachment(ctx, ctx.sceneColorTexture);\r\n if (hasSurfaceMRT(ctx)) {\r\n // Re-render opaque lists to populate MRT data missing from the copy.\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderTransparent = false;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n }\r\n _scenePass.transmission = true;\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n }\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderTransparent = false;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n // Restore shared pass flags before the next graph pass.\r\n _scenePass.renderTransparent = true;\r\n _scenePass.renderSky = true;\r\n _scenePass.transmission = false;\r\n ctx.device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** Render sky and fog after opaque geometry. @internal */\r\nexport function renderSkyScenePass(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n sceneColorFramebufferHandle?: RGHandle,\r\n sceneColorNoFog?: Nullable<Texture2D>\r\n): void {\r\n const { ctx } = frame;\r\n const framebuffer = sceneColorFramebufferHandle\r\n ? rgCtx.getFramebuffer<FrameBuffer>(sceneColorFramebufferHandle)\r\n : ctx.finalFramebuffer;\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n ctx.scene.env.sky.renderSky(ctx);\r\n if (ctx.scene.env.sky.fogPresents) {\r\n // Snapshot between sky and fog. Sky belongs in the copy - a ray that hits\r\n // the sky should read the sky - while fog does not, because the fog a\r\n // screen-space pass would sample lies along the camera ray rather than the\r\n // path it integrates.\r\n if (sceneColorNoFog) {\r\n const source = framebuffer?.getColorAttachment<Texture2D>(0) ?? null;\r\n if (source) {\r\n new CopyBlitter().blit(source, sceneColorNoFog, fetchSampler('clamp_nearest_nomip'));\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n }\r\n }\r\n ctx.scene.env.sky.renderFog(ctx.camera);\r\n }\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** Render transmission, transparency, and OIT over the opaque result. @internal */\r\nexport function renderTransparentScenePass(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n opaqueChainOutput: Nullable<RGHandle>,\r\n sceneColorFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n let framebuffer: Nullable<FrameBuffer>;\r\n if (opaqueChainOutput) {\r\n // Opaque effects redirect transparent rendering to their chain output.\r\n const chainTex = rgCtx.getTexture<Texture2D>(opaqueChainOutput);\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n framebuffer = rgCtx.createFramebuffer<FrameBuffer>({\r\n width: chainTex.width,\r\n height: chainTex.height,\r\n colorAttachments: chainTex,\r\n depthAttachment: depthTex\r\n });\r\n // The chain output has no surface MRT attachments.\r\n ctx.materialFlags &= ~SURFACE_MRT_FLAGS;\r\n } else if (sceneColorFramebufferHandle) {\r\n // Continue in the light pass target when no opaque effect ran.\r\n framebuffer = rgCtx.getFramebuffer<FrameBuffer>(sceneColorFramebufferHandle);\r\n } else {\r\n // Scene color already resides in the final framebuffer.\r\n framebuffer = ctx.finalFramebuffer;\r\n }\r\n device.pushDeviceStates();\r\n try {\r\n // setFramebuffer may no-op, so reset viewport and scissor explicitly.\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n // Derive transmission mode instead of inheriting shared pass state.\r\n _scenePass.transmission = renderQueue.needSceneColor();\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n _scenePass.renderOpaque = false;\r\n _scenePass.renderTransparent = true;\r\n _scenePass.renderSky = false;\r\n try {\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderSky = true;\r\n }\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction renderTransmissionDepthPass(frame: FrameState, rgCtx: RGExecuteContext): void {\r\n renderSceneDepth(frame, frame.depthFramebuffer, rgCtx);\r\n}\r\n\r\n/** Build and execute the Forward+ graph for one frame. @public */\r\nexport function executeForwardPlusGraph(ctx: DrawContext): void {\r\n const device = ctx.device;\r\n const graph = new RenderGraph();\r\n let renderQueue: RenderQueue | null = null;\r\n let frame: FrameState | null = null;\r\n let executor: RenderGraphExecutor<Texture2D, FrameBuffer> | null = null;\r\n let historyManager: HistoryResourceManager<Texture2D> | null = null;\r\n let historyFrameStarted = false;\r\n let motionVectorFramePrepared = false;\r\n let motionVectorFrameCommitted = false;\r\n\r\n try {\r\n renderQueue = _scenePass.cullScene(ctx, ctx.camera);\r\n\r\n const options = deriveForwardPlusOptions(ctx.scene, ctx.camera, device.type, renderQueue);\r\n options.ssgi &&= supportsSSGIRenderTargets(ctx);\r\n ctx.SSS = options.sss;\r\n\r\n historyManager = ctx.camera.getHistoryResourceManager();\r\n if (!historyManager) {\r\n historyManager = new HistoryResourceManager<Texture2D>(_devicePoolAllocator);\r\n ctx.camera.setHistoryResourceManager(historyManager);\r\n }\r\n if (!options.ssgi) {\r\n historyManager.invalidate(RGHistoryResources.SSGI_SCENE_COLOR);\r\n historyManager.invalidate(RGHistoryResources.SSGI_IRRADIANCE);\r\n historyManager.invalidate(RGHistoryResources.SSGI_SURFACE);\r\n historyManager.invalidate(RGHistoryResources.SSGI_MOMENTS);\r\n }\r\n historyManager.beginFrame();\r\n historyFrameStarted = true;\r\n\r\n const buildResult = buildForwardPlusGraphInternal(graph, ctx, renderQueue, options);\r\n frame = buildResult.frame;\r\n\r\n if (options.motionVectors) {\r\n ctx.camera.prepareMotionVectorFrame(ctx.camera.TAA, ctx.renderWidth, ctx.renderHeight);\r\n motionVectorFramePrepared = true;\r\n } else {\r\n ctx.camera.clearMotionVectorFrame();\r\n }\r\n\r\n const compiled = graph.compile([buildResult.backbuffer]);\r\n\r\n executor = new RenderGraphExecutor(_devicePoolAllocator, ctx.renderWidth, ctx.renderHeight, {\r\n textureAffinityCache: getTextureAffinityCache(ctx.camera, device)\r\n });\r\n\r\n if (ctx.finalFramebuffer) {\r\n const backbufferTex = ctx.finalFramebuffer.getColorAttachments()[0] as Texture2D;\r\n executor.setImportedTexture(buildResult.backbuffer, backbufferTex);\r\n }\r\n if (buildResult.externalDepthImport) {\r\n executor.setImportedTexture(\r\n buildResult.externalDepthImport.handle,\r\n buildResult.externalDepthImport.texture\r\n );\r\n }\r\n historyManager.bindImportedTextures(executor);\r\n\r\n executor.execute(compiled);\r\n historyManager.commitFrame();\r\n historyFrameStarted = false;\r\n if (motionVectorFramePrepared) {\r\n ctx.camera.commitMotionVectorFrame();\r\n motionVectorFrameCommitted = true;\r\n }\r\n } finally {\r\n if (historyFrameStarted) {\r\n historyManager?.discardFrame();\r\n }\r\n if (frame) {\r\n cleanupFrame(frame);\r\n } else {\r\n renderQueue?.dispose();\r\n }\r\n executor?.reset();\r\n if (motionVectorFramePrepared && !motionVectorFrameCommitted) {\r\n ctx.camera.clearMotionVectorFrame();\r\n }\r\n }\r\n}\r\n"],"names":["_scenePass","LightPass","_depthPass","DepthPass","_shadowMapPass","ShadowMapPass","_clusters","_shadowMaskRenderer","ShadowMaskRenderer","_devicePoolAllocator","DevicePoolAllocator","_textureAffinityCaches","WeakMap","getTextureAffinityCache","camera","device","current","get","cache","RGTextureAffinityCache","set","_backDepthColorState","_frontDepthColorState","SURFACE_MRT_FLAGS","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","SSS_STORE_PROFILE","SSS_STORE_DIFFUSE","SCENE_STORE_NORMAL","SSS_STORE_TRANSMISSION","SKIN_SSS_STORE","getClusteredLight","length","pop","ClusteredLight","freeClusteredLight","cl","push","getCoreMaterial","material","coreMaterial","hasSSSMaterialCore","subsurfaceProfile","hasSkinSSSMaterialCore","skinSSS","renderQueueHasActiveSSS","renderQueue","itemList","lists","opaque","lit","unlit","list","materialList","renderQueueHasActiveSkinSSS","filterActualSSSItemList","items","filter","item","drawable","getMaterial","filterActualSSSMaterialList","filtered","Set","forEach","mat","add","cloneActualSSSListInfo","source","_targetQueue","skinItemList","morphItemList","skinAndMorphItemList","instanceItemList","instanceList","cloneActualSSSBundle","targetQueue","map","info","hasAnyActualSSSItems","renderItems","some","createActualSSSRenderQueue","queue","RenderQueue","sssOpaque","dispose","emptyBundle","target","_itemList","transmission","transparent","transmission_trans","_shadowedLightList","shadowedLights","_unshadowedLightList","unshadowedLights","_sunLight","sunLight","_primaryDirectionalLight","primaryDirectionalLight","_primaryTransmissionLight","primaryTransmissionLight","_needSceneColor","_needSceneDepth","_needSceneColorWithDepth","_drawTransparent","getSurfaceTextureFormat","ctx","caps","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","getTextureFormatBytes","format","getTextureFormatInfo","size","supportsSSGIRenderTargets","rgba16fBytes","framebufferCaps","maxDrawBuffers","maxColorAttachmentBytesPerSample","shouldStoreSSSDiffuse","sssStrength","sssBlurScale","shouldStoreSSSTransmission","sssTransmissionStrength","getSSSLightingTextureFormat","attachmentCount","surfaceAttachmentCount","colorFormat","surfaceFormat","colorBytes","fullPrecisionBytes","getFullMipLevelCount","width","height","Math","max","floor","log2","hasSurfaceMRT","materialFlags","getLightPassColorAttachments","colorAttachment","attachments","SceneRoughnessTexture","SceneNormalTexture","SSSProfileTexture","SSSParamTexture","SSSDiffuseTexture","SSSTransmissionTexture","SkinSSSTexture","deriveForwardPlusOptions","scene","deviceType","ssr","SSR","env","light","envLight","hasRadiance","ssgi","SSGI","HDR","ssgiIntensity","type","hasIrradiance","sss","SSS","needSceneColor","needSceneColorWithDepth","depthPrepass","motionVectors","hiZ","sceneNormal","sceneRoughness","shadowMask","ssrCalcThickness","gpuPicking","getPickResultResolveFunc","needsTransmissionDepthForSSR","fogPresents","sky","resolveFrameResourceRequirements","options","requirements","motionVector","Error","Number","MAX_SAFE_INTEGER","bytesPerSample","HiZ","screenSpaceShadowMask","validateProducedFrameResources","blackboard","required","FrameResources","MotionVector","SceneNormal","SceneRoughness","ShadowMask","needed","resource","has","requireBuildState","fg","key","producerType","consumerType","value","state","String","SkyUpdateModule","prepare","enabled","setup","graph","frame","ordering","addPass","builder","emit","sideEffect","setExecute","sunLightColor","update","ClusterLightsModule","chainInto","clusteredLight","calculateLightIndex","ShaderHelper","getPreExposure","GPUPickingModule","pickResolveFunc","renderObjectColors","ShadowMapsModule","renderShadowMaps","DepthPrepassModule","writes","LinearDepth","SceneDepthAttachment","result","SSRCalcThickness","mvFormat","depthHandle","createTexture","label","allocationKey","motionVectorHandle","undefined","finalDepthAttachment","finalFramebuffer","getDepthAttachment","externalDepthAttachment","isTexture2D","externalDepthAttachmentHandle","importTexture","graphDepthAttachmentHandle","depthFormat","depthAttachmentOrFormat","depthFramebufferHandle","createFramebuffer","renderWidth","renderHeight","colorAttachments","depthAttachment","ignoreDepthStencil","skyMotionVectorFramebufferHandle","addSubpass","rgCtx","depthFramebuffer","getFramebuffer","renderSceneDepth","renderSkyMotionVectors","depth","renderDepthAttachment","opaqueLayerHasEffects","compositor","layerHasEnabledEffect","PostEffectLayer","useFinalFramebufferAsIntermediate","ShadowMaskModule","depthPassResult","numShadowLights","numLayers","getLayerCount","maskPassResult","maskDepthHandle","expect","read","maskHandle","arrayLayers","depthTex","getTexture","maskTex","render","layer","attachmentLayer","TransmissionDepthForSSRModule","transmissionDepthResult","currentDepth","depthOut","write","done","createToken","renderTransmissionDepthPass","preLightTransmissionDepthToken","HiZModule","hiZHandle","REVERSE_Z","sizeMode","mipLevels","hiZFramebufferHandle","passCtx","depthFb","hiZTex","HiZFrameBuffer","buildHiZ","HiZTexture","SSSProfileModule","shadowMaskHandle","sssProfileResult","profileHandle","paramHandle","framebufferHandle","shadowMaskTexture","renderForwardSSSProfile","SSSProfile","SSSParam","SceneColorGrabModule","grabResult","copyHandle","copyFramebufferHandle","renderSceneColorGrab","SceneColorCopy","LightPassModule","SceneColor","SSSDiffuse","SSSTransmission","SkinSSS","backbuffer","sssProfileHandle","sssParamHandle","sceneColorCopyHandle","historyManager","history","lightHistoryReadBindings","historySize","ssrTemporal","reflectHistoryHandle","importPreviousIfCompatible","RGHistoryResources","SSR_REFLECT","motionVectorHistoryHandle","SSR_MOTION_VECTOR","name","handle","ssgiHistorySize","irradianceHistoryHandle","SSGI_IRRADIANCE","surfaceHistoryHandle","SSGI_SURFACE","opaquePassResult","binding","sceneColorHandle","sceneRoughnessHandle","sceneNormalHandle","writeSSSDiffuse","writeSSSTransmission","writeSkinSSS","sssLightingAttachmentCount","sssLightingFormat","sssDiffuseHandle","sssTransmissionHandle","skinSSSHandle","sceneColorFramebufferHandle","sceneColorTex","sceneColorCopyTex","renderLightPass","renderOpaqueScenePass","ssgiIrradianceBinding","find","ssgiSurfaceBinding","SSGIIrradianceHistoryTexture","SSGISurfaceHistoryTexture","beginReadScope","texture","endReadScope","lightPassResult","lightPass","SkyPassModule","reads","version","SceneColorNoFog","captureNoFog","skyPassResult","noFog","out","renderSkyScenePass","color","CompositeTailModule","PresentedColor","opaqueChainInput","opaqueChainDeps","opaqueChainResult","buildLayer","input","finalOutput","sceneDepthAttachment","dependencies","historyReads","wroteFinal","opaqueChainRan","renderTransparentScenePass","chainInput","backbufferResidentHandle","chainDependencies","isScreen","endLayerHasEffects","end","transparentChainResult","inputResidesInFinalTarget","transmissionDepthToken","endChainDependencies","chainResult","finalWroteFinal","presentedBackbuffer","dep","outputBackbuffer","needsBlit","sourceTex","blitter","CopyBlitter","srgbOut","blit","fetchSampler","ForwardPlusModules","SkyUpdate","ClusterLights","GPUPicking","ShadowMaps","DepthPrepass","TransmissionDepthForSSR","SceneColorGrab","SkyPass","CompositeTail","DEFAULT_FORWARD_PLUS_MODULES","_defaultForwardPlusPipeline","createForwardPlusPipeline","RenderPipeline","getDefaultForwardPlusPipeline","buildForwardPlusGraph","buildForwardPlusGraphInternal","RGBlackboard","renderQueueDisposed","clusteredLightReleased","sunLightRestored","OrderingScope","getHistoryResourceManager","pipeline","renderPipeline","collectRequirements","mergeFrameResourceRequirements","build","presented","externalDepthImport","lights","renderPass","pushDeviceStates","shadow","popDeviceStates","profileFramebuffer","profileTexture","paramTexture","normalTexture","depthTexture","sssRenderQueue","savedMaterialFlags","savedCompositor","savedTransmission","savedRenderOpaque","renderOpaque","savedRenderTransparent","renderTransparent","savedClearColor","clearColor","savedClearDepth","clearDepth","savedClearStencil","clearStencil","savedCommandBufferReuse","commandBufferReuse","savedProfileTexture","savedParamTexture","savedNormalTexture","profileFlags","setFramebuffer","Vector4","zero","releaseIntermediateFramebuffer","intermediateFramebuffer","releaseDepthFramebuffer","disposeRenderQueue","releaseClusteredLight","restoreSunLight","cleanupFrame","existingDepthFb","motionVectorTex","transmissionOverride","console","assert","originDepth","encodeDepth","getColorAttachments","DEPTH_CLEAR_VALUE","createColorState","setColorMask","forceColorState","forceCullMode","renderBackface","motionVectorTexture","linearDepthTexture","depthPrepassAttachment","_skyMVProgram","_skyMVBindGroup","_skyMVBox","fb","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","prevVPMatrix","cameraPos","prevCameraPos","main","$l","worldPos","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","farthestClipZ","w","$builtins","position","$outputs","currentPos","prevPos","fragment","sub","div","xy","createBindGroup","bindGroupLayouts","BoxShape","needNormal","needUV","setValue","viewProjectionMatrix","getWorldPosition","prevPosition","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","DEPTH_COMPARE_DEFAULT","draw","blitToCurrentColorAttachment","framebuffer","destination","getColorAttachment","copyTex","isolateSceneColorDepth","savedDepthPrepassAttachment","sceneColorMaterialFlags","sceneColorFramebuffer","sceneColorStatePushed","setViewport","setScissor","renderSky","sceneColorTexture","sceneColorNoFog","renderFog","opaqueChainOutput","chainTex","executeForwardPlusGraph","RenderGraph","executor","historyFrameStarted","motionVectorFramePrepared","motionVectorFrameCommitted","cullScene","HistoryResourceManager","setHistoryResourceManager","invalidate","SSGI_SCENE_COLOR","SSGI_MOMENTS","beginFrame","buildResult","prepareMotionVectorFrame","TAA","clearMotionVectorFrame","compiled","compile","RenderGraphExecutor","textureAffinityCache","backbufferTex","setImportedTexture","bindImportedTextures","execute","commitFrame","commitMotionVectorFrame","discardFrame","reset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forward_plus_builder.js","sources":["../../../src/render/rendergraph/forward_plus_builder.ts"],"sourcesContent":["import type { Nullable } from '@zephyr3d/base';\r\nimport { DEPTH_CLEAR_VALUE, DEPTH_COMPARE_DEFAULT, REVERSE_Z, Vector4 } from '@zephyr3d/base';\r\nimport type {\r\n AbstractDevice,\r\n BindGroup,\r\n ColorState,\r\n FrameBuffer,\r\n GPUProgram,\r\n Texture2D,\r\n Texture2DArray,\r\n TextureFormat\r\n} from '@zephyr3d/device';\r\nimport type { DrawContext } from '../drawable';\r\nimport {\r\n RenderQueue,\r\n type RenderItemList,\r\n type RenderItemListInfo,\r\n type RenderQueueItem\r\n} from '../render_queue';\r\nimport type { PunctualLight, Scene } from '../../scene';\r\nimport type { Camera } from '../../camera';\r\nimport { LightPass } from '../lightpass';\r\nimport { ShadowMapPass } from '../shadowmap_pass';\r\nimport { DepthPass } from '../depthpass';\r\nimport { ClusteredLight } from '../cluster_light';\r\nimport { ShadowMaskRenderer } from '../shadow_mask_pass';\r\nimport { buildHiZ } from '../hzb';\r\nimport { CopyBlitter } from '../../blitter';\r\nimport { fetchSampler } from '../../utility/misc';\r\nimport { MaterialVaryingFlags } from '../../values';\r\nimport { ShaderHelper } from '../../material/shader/helper';\r\nimport { AbstractPostEffect, PostEffectLayer } from '../../posteffect/posteffect';\r\nimport { RenderGraph } from './rendergraph';\r\nimport { RenderGraphExecutor } from './executor';\r\nimport { RGTextureAffinityCache } from './texture_affinity_cache';\r\nimport { DevicePoolAllocator } from './device_pool_allocator';\r\nimport { HistoryResourceManager } from './history_resource_manager';\r\nimport { RGHistoryResources } from './history_resources';\r\nimport { RGBlackboard, FrameResources, type FrameResourceKey } from './blackboard';\r\nimport { OrderingScope } from './render_context';\r\nimport type { FrameGraphContext } from './frame_graph_context';\r\nimport type { RenderModule } from './render_module';\r\nimport { RenderPipeline } from './render_pipeline';\r\nimport type { FrameResourceRequirements } from './frame_resource_requirements';\r\nimport { mergeFrameResourceRequirements } from './frame_resource_requirements';\r\nimport type { RGExecuteContext, RGHandle, RGTextureAttachment, RGTextureHandle } from './types';\r\nimport { renderObjectColors } from '../gpu_picking';\r\nimport type { Primitive } from '../primitive';\r\nimport { BoxShape } from '../../shapes';\r\n\r\nconst _scenePass = new LightPass();\r\nconst _depthPass = new DepthPass();\r\nconst _shadowMapPass = new ShadowMapPass();\r\nconst _clusters: ClusteredLight[] = [];\r\nconst _shadowMaskRenderer = new ShadowMaskRenderer();\r\nconst _devicePoolAllocator = new DevicePoolAllocator();\r\nconst _textureAffinityCaches = new WeakMap<\r\n Camera,\r\n { device: AbstractDevice; cache: RGTextureAffinityCache<Texture2D> }\r\n>();\r\n\r\nfunction getTextureAffinityCache(camera: Camera, device: AbstractDevice): RGTextureAffinityCache<Texture2D> {\r\n const current = _textureAffinityCaches.get(camera);\r\n if (current?.device === device) {\r\n return current.cache;\r\n }\r\n const cache = new RGTextureAffinityCache<Texture2D>();\r\n _textureAffinityCaches.set(camera, { device, cache });\r\n return cache;\r\n}\r\n\r\n/** Test-only access to the shared scene pass. @internal */\r\nexport function _getScenePassForTest(): LightPass {\r\n return _scenePass;\r\n}\r\n\r\nlet _backDepthColorState: Nullable<ColorState> = null;\r\nlet _frontDepthColorState: Nullable<ColorState> = null;\r\nconst SURFACE_MRT_FLAGS =\r\n MaterialVaryingFlags.SCENE_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SCENE_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION |\r\n MaterialVaryingFlags.SKIN_SSS_STORE;\r\n\r\nfunction getClusteredLight(): ClusteredLight {\r\n return _clusters.length > 0 ? _clusters.pop()! : new ClusteredLight();\r\n}\r\nfunction freeClusteredLight(cl: ClusteredLight): void {\r\n _clusters.push(cl);\r\n}\r\n\r\nfunction getCoreMaterial(material: unknown): unknown {\r\n return (material as { coreMaterial?: unknown } | null | undefined)?.coreMaterial ?? material ?? null;\r\n}\r\n\r\nfunction hasSSSMaterialCore(material: unknown): boolean {\r\n return !!(getCoreMaterial(material) as { subsurfaceProfile?: unknown } | null)?.subsurfaceProfile;\r\n}\r\n\r\nfunction hasSkinSSSMaterialCore(material: unknown): boolean {\r\n return !!(getCoreMaterial(material) as { skinSSS?: unknown } | null)?.skinSSS;\r\n}\r\n\r\nfunction renderQueueHasActiveSSS(renderQueue: RenderQueue): boolean {\r\n const itemList = renderQueue.itemList;\r\n if (!itemList) {\r\n return false;\r\n }\r\n const lists = [...itemList.opaque.lit, ...itemList.opaque.unlit];\r\n for (const list of lists) {\r\n for (const material of list.materialList) {\r\n if (hasSSSMaterialCore(material)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction renderQueueHasActiveSkinSSS(renderQueue: RenderQueue): boolean {\r\n const itemList = renderQueue.itemList;\r\n if (!itemList) {\r\n return false;\r\n }\r\n const lists = [...itemList.opaque.lit, ...itemList.opaque.unlit];\r\n for (const list of lists) {\r\n for (const material of list.materialList) {\r\n if (hasSkinSSSMaterialCore(material)) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction filterActualSSSItemList(items: RenderQueueItem[]): RenderQueueItem[] {\r\n return items.filter((item) => hasSSSMaterialCore(item.drawable.getMaterial?.()));\r\n}\r\n\r\nfunction filterActualSSSMaterialList(materialList: Set<any>): Set<any> {\r\n const filtered = new Set<any>();\r\n materialList.forEach((mat) => {\r\n if (hasSSSMaterialCore(mat)) {\r\n filtered.add(mat);\r\n }\r\n });\r\n return filtered;\r\n}\r\n\r\nfunction cloneActualSSSListInfo(source: RenderItemListInfo, _targetQueue: RenderQueue): RenderItemListInfo {\r\n return {\r\n itemList: filterActualSSSItemList(source.itemList),\r\n skinItemList: filterActualSSSItemList(source.skinItemList),\r\n morphItemList: filterActualSSSItemList(source.morphItemList),\r\n skinAndMorphItemList: filterActualSSSItemList(source.skinAndMorphItemList),\r\n instanceItemList: filterActualSSSItemList(source.instanceItemList),\r\n materialList: filterActualSSSMaterialList(source.materialList),\r\n instanceList: {},\r\n renderQueue: source.renderQueue\r\n };\r\n}\r\n\r\nfunction cloneActualSSSBundle(\r\n source: RenderItemList['opaque'],\r\n targetQueue: RenderQueue\r\n): RenderItemList['opaque'] {\r\n return {\r\n lit: source.lit.map((info) => cloneActualSSSListInfo(info, targetQueue)),\r\n unlit: source.unlit.map((info) => cloneActualSSSListInfo(info, targetQueue))\r\n };\r\n}\r\n\r\nfunction hasAnyActualSSSItems(renderItems: RenderItemListInfo[]): boolean {\r\n return renderItems.some(\r\n (info) =>\r\n info.itemList.length > 0 ||\r\n info.skinItemList.length > 0 ||\r\n info.morphItemList.length > 0 ||\r\n info.skinAndMorphItemList.length > 0 ||\r\n info.instanceItemList.length > 0\r\n );\r\n}\r\n\r\nfunction createActualSSSRenderQueue(renderQueue: RenderQueue): RenderQueue | null {\r\n const itemList = renderQueue.itemList;\r\n if (!itemList) {\r\n return null;\r\n }\r\n const queue = new RenderQueue(_scenePass);\r\n const sssOpaque = cloneActualSSSBundle(itemList.opaque, queue);\r\n if (!hasAnyActualSSSItems([...sssOpaque.lit, ...sssOpaque.unlit])) {\r\n queue.dispose();\r\n return null;\r\n }\r\n const emptyBundle = { lit: [], unlit: [] };\r\n const target = queue as unknown as {\r\n _itemList: RenderItemList;\r\n _shadowedLightList: PunctualLight[];\r\n _unshadowedLightList: PunctualLight[];\r\n _sunLight: typeof renderQueue.sunLight;\r\n _primaryDirectionalLight: typeof renderQueue.primaryDirectionalLight;\r\n _primaryTransmissionLight: typeof renderQueue.primaryTransmissionLight;\r\n _needSceneColor: boolean;\r\n _needSceneDepth: boolean;\r\n _needSceneColorWithDepth: boolean;\r\n _drawTransparent: boolean;\r\n };\r\n target._itemList = {\r\n opaque: sssOpaque,\r\n transmission: emptyBundle,\r\n transparent: emptyBundle,\r\n transmission_trans: emptyBundle\r\n };\r\n target._shadowedLightList = renderQueue.shadowedLights;\r\n target._unshadowedLightList = renderQueue.unshadowedLights;\r\n target._sunLight = renderQueue.sunLight;\r\n target._primaryDirectionalLight = renderQueue.primaryDirectionalLight;\r\n target._primaryTransmissionLight = renderQueue.primaryTransmissionLight;\r\n target._needSceneColor = false;\r\n target._needSceneDepth = false;\r\n target._needSceneColorWithDepth = false;\r\n target._drawTransparent = false;\r\n return queue;\r\n}\r\n\r\nfunction getSurfaceTextureFormat(ctx: DrawContext): TextureFormat {\r\n const caps = ctx.device.getDeviceCaps?.();\r\n return caps?.textureCaps.supportHalfFloatColorBuffer ? 'rgba16f' : 'rgba8unorm';\r\n}\r\n\r\nfunction getTextureFormatBytes(ctx: DrawContext, format: TextureFormat): number {\r\n return ctx.device.getDeviceCaps().textureCaps.getTextureFormatInfo(format).size;\r\n}\r\n\r\nfunction supportsSSGIRenderTargets(ctx: DrawContext): boolean {\r\n const caps = ctx.device.getDeviceCaps();\r\n const rgba16fBytes = caps.textureCaps.getTextureFormatInfo('rgba16f').size;\r\n return !!(\r\n caps.textureCaps.supportHalfFloatColorBuffer &&\r\n caps.framebufferCaps.maxDrawBuffers >= 2 &&\r\n caps.framebufferCaps.maxColorAttachmentBytesPerSample >= rgba16fBytes * 2\r\n );\r\n}\r\n\r\nfunction shouldStoreSSSDiffuse(ctx: DrawContext): boolean {\r\n return ctx.camera.sssStrength > 0 && ctx.camera.sssBlurScale > 0;\r\n}\r\n\r\nfunction shouldStoreSSSTransmission(ctx: DrawContext): boolean {\r\n return ctx.camera.sssStrength > 0 && ctx.camera.sssTransmissionStrength > 0;\r\n}\r\n\r\nfunction getSSSLightingTextureFormat(\r\n ctx: DrawContext,\r\n attachmentCount: number,\r\n surfaceAttachmentCount: number\r\n): TextureFormat {\r\n const colorFormat = ctx.colorFormat!;\r\n if (surfaceAttachmentCount === 0 || attachmentCount === 0) {\r\n return colorFormat;\r\n }\r\n const caps = ctx.device.getDeviceCaps();\r\n // MRT graph textures are not resolved on DrawContext yet.\r\n const surfaceFormat = getSurfaceTextureFormat(ctx);\r\n const colorBytes =\r\n getTextureFormatBytes(ctx, colorFormat) +\r\n getTextureFormatBytes(ctx, surfaceFormat) * surfaceAttachmentCount;\r\n const fullPrecisionBytes = colorBytes + getTextureFormatBytes(ctx, colorFormat) * attachmentCount;\r\n if (fullPrecisionBytes <= caps.framebufferCaps.maxColorAttachmentBytesPerSample) {\r\n return colorFormat;\r\n }\r\n return 'rgba8unorm';\r\n}\r\n\r\nfunction getFullMipLevelCount(width: number, height: number): number {\r\n return Math.max(1, Math.floor(Math.log2(Math.max(1, width, height))) + 1);\r\n}\r\n\r\nfunction hasSurfaceMRT(ctx: DrawContext): boolean {\r\n return !!(ctx.materialFlags & SURFACE_MRT_FLAGS);\r\n}\r\n\r\nfunction getLightPassColorAttachments(\r\n ctx: DrawContext,\r\n colorAttachment: TextureFormat | Texture2D\r\n): TextureFormat | Texture2D | Array<TextureFormat | Texture2D> {\r\n const attachments: Array<TextureFormat | Texture2D> = [colorAttachment];\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_ROUGHNESS) {\r\n attachments.push(ctx.SceneRoughnessTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SCENE_STORE_NORMAL) {\r\n attachments.push(ctx.SceneNormalTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_PROFILE) {\r\n attachments.push(ctx.SSSProfileTexture!, ctx.SSSParamTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_DIFFUSE) {\r\n attachments.push(ctx.SSSDiffuseTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SSS_STORE_TRANSMISSION) {\r\n attachments.push(ctx.SSSTransmissionTexture!);\r\n }\r\n if (ctx.materialFlags & MaterialVaryingFlags.SKIN_SSS_STORE) {\r\n attachments.push(ctx.SkinSSSTexture!);\r\n }\r\n return attachments.length === 1 ? attachments[0] : attachments;\r\n}\r\n\r\n/** Per-frame Forward+ feature options. @public */\r\nexport interface ForwardPlusOptions {\r\n /** Enable depth prepass (always true for now). */\r\n depthPrepass: boolean;\r\n /** Enable motion vectors (requires TAA or motionBlur). */\r\n motionVectors: boolean;\r\n /** Enable Hi-Z pyramid (for SSR ray tracing). */\r\n hiZ: boolean;\r\n /** Produce opaque-scene world normals. */\r\n sceneNormal: boolean;\r\n /** Produce opaque-scene roughness data. */\r\n sceneRoughness: boolean;\r\n /** Produce and consume the clustered screen-space shadow mask. */\r\n shadowMask: boolean;\r\n /** Enable screen-space reflections. */\r\n ssr: boolean;\r\n /** Enable screen-space diffuse global illumination. */\r\n ssgi: boolean;\r\n /** Whether to compute SSR thickness. */\r\n ssrCalcThickness: boolean;\r\n /** Whether GPU picking is requested this frame. */\r\n gpuPicking: boolean;\r\n /** Whether transmission/refraction materials are present. */\r\n needSceneColor: boolean;\r\n /** Whether scene-color-dependent materials also require scene depth. */\r\n needSceneColorWithDepth: boolean;\r\n /** Whether SSR needs transmission depth before the main light pass. */\r\n needsTransmissionDepthForSSR: boolean;\r\n /** Enable screen-space subsurface scattering. */\r\n sss: boolean;\r\n /** Enable the stylized skin-specific SSS pass. */\r\n skinSSS: boolean;\r\n /** Whether height fog is composited over the opaque scene this frame. */\r\n fogPresents: boolean;\r\n}\r\n\r\n/** Derive Forward+ options from scene and camera state. @internal */\r\nexport function deriveForwardPlusOptions(\r\n scene: Scene,\r\n camera: Camera,\r\n deviceType: string,\r\n renderQueue: RenderQueue\r\n): ForwardPlusOptions {\r\n const ssr = camera.SSR && scene.env.light.envLight && scene.env.light.envLight.hasRadiance();\r\n const ssgi =\r\n camera.SSGI &&\r\n camera.HDR &&\r\n camera.ssgiIntensity > 0 &&\r\n scene.env.light.type === 'ibl' &&\r\n !!scene.env.light.envLight?.hasRadiance() &&\r\n !!scene.env.light.envLight?.hasIrradiance();\r\n const sss = camera.SSS && renderQueueHasActiveSSS(renderQueue);\r\n const skinSSS = camera.skinSSS && renderQueueHasActiveSkinSSS(renderQueue);\r\n const needSceneColor = renderQueue.needSceneColor();\r\n const needSceneColorWithDepth = renderQueue.needSceneColorWithDepth();\r\n return {\r\n depthPrepass: true,\r\n motionVectors: false,\r\n hiZ: false,\r\n sceneNormal: false,\r\n sceneRoughness: false,\r\n shadowMask: false,\r\n ssr: !!ssr,\r\n ssgi: !!ssgi,\r\n ssrCalcThickness: !!ssr && camera.ssrCalcThickness,\r\n gpuPicking: !!camera.getPickResultResolveFunc(),\r\n needSceneColor,\r\n needSceneColorWithDepth,\r\n needsTransmissionDepthForSSR: !!ssr && needSceneColor && !needSceneColorWithDepth,\r\n sss: !!sss,\r\n skinSSS: !!skinSSS,\r\n fogPresents: !!scene.env.sky?.fogPresents\r\n };\r\n}\r\n\r\nfunction resolveFrameResourceRequirements(\r\n ctx: DrawContext,\r\n options: ForwardPlusOptions,\r\n requirements: FrameResourceRequirements\r\n): void {\r\n const deviceType = ctx.device.type;\r\n options.motionVectors ||= !!requirements.motionVector;\r\n options.hiZ ||= !!requirements.hiZ;\r\n options.sceneNormal ||= !!requirements.sceneNormal;\r\n options.sceneRoughness ||= !!requirements.sceneRoughness;\r\n options.shadowMask ||= !!requirements.shadowMask;\r\n\r\n if (options.motionVectors && deviceType === 'webgl') {\r\n throw new Error('Forward+: MotionVector was requested but is not supported by the WebGL backend.');\r\n }\r\n if (options.hiZ && deviceType === 'webgl') {\r\n throw new Error('Forward+: HiZ was requested but is not supported by the WebGL backend.');\r\n }\r\n if (options.shadowMask && deviceType === 'webgl') {\r\n throw new Error('Forward+: ShadowMask was requested but is not supported by the WebGL backend.');\r\n }\r\n\r\n const surfaceAttachmentCount = Number(options.sceneNormal) + Number(options.sceneRoughness);\r\n if (surfaceAttachmentCount > 0) {\r\n const caps = ctx.device.getDeviceCaps();\r\n const maxDrawBuffers = caps.framebufferCaps.maxDrawBuffers ?? Number.MAX_SAFE_INTEGER;\r\n if (1 + surfaceAttachmentCount > maxDrawBuffers) {\r\n throw new Error(\r\n `Forward+: ${surfaceAttachmentCount} scene surface attachment(s) were requested, ` +\r\n `but the device supports only ${maxDrawBuffers} color attachments.`\r\n );\r\n }\r\n const bytesPerSample =\r\n getTextureFormatBytes(ctx, ctx.colorFormat) +\r\n getTextureFormatBytes(ctx, getSurfaceTextureFormat(ctx)) * surfaceAttachmentCount;\r\n if (bytesPerSample > caps.framebufferCaps.maxColorAttachmentBytesPerSample) {\r\n throw new Error(\r\n `Forward+: requested scene surface attachments require ${bytesPerSample} bytes per sample, ` +\r\n `but the device limit is ${caps.framebufferCaps.maxColorAttachmentBytesPerSample}.`\r\n );\r\n }\r\n }\r\n\r\n ctx.motionVectors = options.motionVectors;\r\n ctx.HiZ = options.hiZ;\r\n ctx.SSGI = options.ssgi;\r\n ctx.screenSpaceShadowMask = options.shadowMask;\r\n ctx.SSS = options.sss;\r\n}\r\n\r\nfunction validateProducedFrameResources(\r\n blackboard: RGBlackboard,\r\n options: ForwardPlusOptions,\r\n renderQueue: RenderQueue\r\n): void {\r\n const required: Array<[boolean, FrameResourceKey]> = [\r\n [options.motionVectors, FrameResources.MotionVector],\r\n [options.hiZ, FrameResources.HiZ],\r\n [options.sceneNormal, FrameResources.SceneNormal],\r\n [options.sceneRoughness, FrameResources.SceneRoughness],\r\n [options.shadowMask && renderQueue.shadowedLights.length > 0, FrameResources.ShadowMask]\r\n ];\r\n for (const [needed, resource] of required) {\r\n if (needed && !blackboard.has(resource)) {\r\n throw new Error(\r\n `Forward+: frame resource \"${resource}\" was requested but no enabled RenderModule produced it.`\r\n );\r\n }\r\n }\r\n}\r\n\r\n/** Mutable state shared by pass callbacks for one frame. @public */\r\nexport interface FrameState {\r\n ctx: DrawContext;\r\n renderQueue: RenderQueue;\r\n depthFramebuffer: Nullable<FrameBuffer>;\r\n sunLightColor: Nullable<any>;\r\n options: ForwardPlusOptions;\r\n renderQueueDisposed: boolean;\r\n clusteredLightReleased: boolean;\r\n sunLightRestored: boolean;\r\n}\r\n\r\ninterface ForwardPlusGraphBuildResult {\r\n backbuffer: RGHandle;\r\n frame: FrameState;\r\n externalDepthImport?: { handle: RGHandle; texture: Texture2D };\r\n}\r\n\r\ninterface HistoryReadBinding {\r\n name: string;\r\n handle: RGHandle;\r\n}\r\n\r\n/** Result of the depth prepass module. @public */\r\nexport interface DepthPrepassResult {\r\n depthHandle: RGHandle;\r\n motionVectorHandle?: RGHandle;\r\n graphDepthAttachmentHandle?: RGHandle;\r\n externalDepthAttachmentHandle?: RGHandle;\r\n externalDepthAttachment: Nullable<Texture2D>;\r\n depthFramebufferHandle: RGHandle;\r\n}\r\n\r\n/** Result of the main light pass module. @public */\r\nexport interface LightPassResult {\r\n sceneColorHandle: RGHandle;\r\n sceneColorFramebufferHandle?: RGHandle;\r\n sceneRoughnessHandle?: RGHandle;\r\n sceneNormalHandle?: RGHandle;\r\n sssDiffuseHandle?: RGHandle;\r\n sssTransmissionHandle?: RGHandle;\r\n skinSSSHandle?: RGHandle;\r\n}\r\n\r\n/** Non-resource state shared while Forward+ modules build. @public */\r\nexport interface ForwardPlusBuildState {\r\n /** Depth prepass outputs. */\r\n depth?: DepthPrepassResult;\r\n /** Depth attachment used by scene-color/SSS framebuffers (handle or backend texture). */\r\n renderDepthAttachment: Nullable<RGTextureAttachment>;\r\n /** True when the scene renders directly into the final framebuffer. */\r\n useFinalFramebufferAsIntermediate: boolean;\r\n /** Ordering token from the pre-light transmission-depth pass, if any. */\r\n preLightTransmissionDepthToken?: RGHandle;\r\n /** History textures kept in a read scope while the light pass executes. */\r\n lightHistoryReadBindings: HistoryReadBinding[];\r\n /** Main light pass outputs. */\r\n lightPass?: LightPassResult;\r\n /** Graph output handle produced by the composite tail. */\r\n presentedBackbuffer?: RGHandle;\r\n}\r\n\r\n/** Require state produced by an earlier module. @internal */\r\nfunction requireBuildState<K extends keyof ForwardPlusBuildState>(\r\n fg: FrameGraphContext,\r\n key: K,\r\n producerType: string,\r\n consumerType: string\r\n): NonNullable<ForwardPlusBuildState[K]> {\r\n const value = fg.state[key];\r\n if (!value) {\r\n throw new Error(\r\n `Forward+ module \"${consumerType}\" requires module \"${producerType}\" ` +\r\n `(build state \"${String(key)}\" was not produced). Did you remove it from the pipeline?`\r\n );\r\n }\r\n return value;\r\n}\r\n\r\n/** @internal */\r\nconst SkyUpdateModule: RenderModule<FrameGraphContext> = {\r\n type: 'SkyUpdate',\r\n prepare: () => ({ enabled: true }),\r\n setup({ graph, ctx, frame, ordering }: FrameGraphContext) {\r\n graph.addPass('SkyUpdate', (builder) => {\r\n ordering.emit(builder, 'SkyUpdateDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n frame.sunLightColor = ctx.scene.env.sky.update(ctx);\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst ClusterLightsModule: RenderModule<FrameGraphContext> = {\r\n type: 'ClusterLights',\r\n prepare: () => ({ enabled: true }),\r\n setup({ graph, ctx, renderQueue, ordering }: FrameGraphContext) {\r\n graph.addPass('ClusterLights', (builder) => {\r\n ordering.chainInto(builder);\r\n ordering.emit(builder, 'ClusterLightsDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n ctx.clusteredLight = getClusteredLight();\r\n ctx.clusteredLight.calculateLightIndex(\r\n ctx.camera,\r\n renderQueue,\r\n ctx.screenSpaceShadowMask,\r\n ShaderHelper.getPreExposure(ctx)\r\n );\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst GPUPickingModule: RenderModule<FrameGraphContext> = {\r\n type: 'GPUPicking',\r\n prepare: ({ options }) => ({ enabled: options.gpuPicking }),\r\n setup({ graph, ctx, renderQueue, ordering }: FrameGraphContext) {\r\n graph.addPass('GPUPicking', (builder) => {\r\n ordering.chainInto(builder);\r\n ordering.emit(builder, 'GPUPickingDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n const pickResolveFunc = ctx.camera.getPickResultResolveFunc();\r\n if (pickResolveFunc) {\r\n renderObjectColors(ctx, pickResolveFunc, renderQueue);\r\n }\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst ShadowMapsModule: RenderModule<FrameGraphContext> = {\r\n type: 'ShadowMaps',\r\n // Light-owned shadow maps are observable side effects.\r\n prepare: ({ renderQueue }) => ({ enabled: renderQueue.shadowedLights.length > 0 }),\r\n setup({ graph, ctx, renderQueue, ordering }: FrameGraphContext) {\r\n graph.addPass('ShadowMaps', (builder) => {\r\n ordering.chainInto(builder);\r\n ordering.emit(builder, 'ShadowMapsDone');\r\n builder.sideEffect();\r\n builder.setExecute(() => {\r\n renderShadowMaps(ctx, renderQueue.shadowedLights);\r\n });\r\n });\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst DepthPrepassModule: RenderModule<FrameGraphContext> = {\r\n type: 'DepthPrepass',\r\n writes: [FrameResources.LinearDepth, FrameResources.MotionVector, FrameResources.SceneDepthAttachment],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, ordering, blackboard, options } = fg;\r\n const result = graph.addPass('DepthPrepass', (builder) => {\r\n ordering.chainInto(builder);\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n\r\n const depthHandle = builder.createTexture({\r\n format,\r\n label: 'linearDepth',\r\n allocationKey: 'ForwardPlus.LinearDepth'\r\n });\r\n const motionVectorHandle = options.motionVectors\r\n ? builder.createTexture({\r\n format: mvFormat,\r\n label: 'motionVector',\r\n allocationKey: 'ForwardPlus.MotionVector'\r\n })\r\n : undefined;\r\n const finalDepthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const externalDepthAttachment = finalDepthAttachment?.isTexture2D()\r\n ? (finalDepthAttachment as Texture2D)\r\n : null;\r\n const externalDepthAttachmentHandle = externalDepthAttachment\r\n ? graph.importTexture('externalSceneDepth')\r\n : undefined;\r\n const graphDepthAttachmentHandle = externalDepthAttachment\r\n ? undefined\r\n : builder.createTexture({\r\n format: ctx.depthFormat,\r\n label: 'sceneDepth',\r\n allocationKey: 'ForwardPlus.SceneDepth'\r\n });\r\n const depthAttachmentOrFormat =\r\n externalDepthAttachmentHandle ?? graphDepthAttachmentHandle ?? ctx.depthFormat;\r\n const depthFramebufferHandle = builder.createFramebuffer({\r\n label: 'DepthPrepassFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: motionVectorHandle ? [depthHandle, motionVectorHandle] : depthHandle,\r\n depthAttachment: depthAttachmentOrFormat,\r\n ignoreDepthStencil: false\r\n });\r\n const skyMotionVectorFramebufferHandle = motionVectorHandle\r\n ? builder.createFramebuffer({\r\n label: 'SkyMotionVectorFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: motionVectorHandle,\r\n depthAttachment: depthAttachmentOrFormat\r\n })\r\n : undefined;\r\n\r\n builder.addSubpass('SceneDepth', (rgCtx) => {\r\n const depthFramebuffer = rgCtx.getFramebuffer(depthFramebufferHandle);\r\n frame.depthFramebuffer = renderSceneDepth(\r\n frame,\r\n depthFramebuffer,\r\n rgCtx,\r\n undefined,\r\n undefined,\r\n false\r\n );\r\n });\r\n if (skyMotionVectorFramebufferHandle) {\r\n builder.addSubpass('SkyMotionVectors', (rgCtx) => {\r\n renderSkyMotionVectors(ctx, rgCtx, skyMotionVectorFramebufferHandle);\r\n });\r\n // After the sky, which writes at the far plane: a blended surface in\r\n // front of empty background has to replace what the sky put there.\r\n builder.addSubpass('TransparentMotionVectors', (rgCtx) => {\r\n renderTransparentMotionVectors(frame, rgCtx, skyMotionVectorFramebufferHandle);\r\n });\r\n }\r\n\r\n return {\r\n depthHandle,\r\n motionVectorHandle,\r\n graphDepthAttachmentHandle,\r\n externalDepthAttachmentHandle,\r\n externalDepthAttachment,\r\n depthFramebufferHandle\r\n };\r\n });\r\n\r\n fg.state.depth = result;\r\n // Depth mutations re-register their versions through the blackboard.\r\n blackboard.set(FrameResources.LinearDepth, result.depthHandle);\r\n if (result.motionVectorHandle) {\r\n blackboard.set(FrameResources.MotionVector, result.motionVectorHandle);\r\n }\r\n blackboard.set(\r\n FrameResources.SceneDepthAttachment,\r\n result.graphDepthAttachmentHandle ?? result.externalDepthAttachmentHandle!\r\n );\r\n // Later modules share this attachment without owning it.\r\n fg.state.renderDepthAttachment =\r\n result.graphDepthAttachmentHandle ?? result.externalDepthAttachmentHandle ?? null;\r\n // Opaque effects require a texture and may require surface MRT attachments.\r\n const opaqueLayerHasEffects = !!ctx.compositor?.layerHasEnabledEffect(PostEffectLayer.opaque);\r\n fg.state.useFinalFramebufferAsIntermediate =\r\n !!result.externalDepthAttachment &&\r\n result.externalDepthAttachment === ctx.finalFramebuffer?.getDepthAttachment() &&\r\n !opaqueLayerHasEffects;\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst ShadowMaskModule: RenderModule<FrameGraphContext> = {\r\n type: 'ShadowMaskPass',\r\n writes: [FrameResources.ShadowMask],\r\n // shadowMapInfo is populated at execute time and cannot gate graph building.\r\n prepare: ({ ctx, options, renderQueue }) => ({\r\n enabled: options.shadowMask && renderQueue.shadowedLights.length > 0,\r\n requirements: {\r\n shadowMask:\r\n ctx.device.type !== 'webgl' &&\r\n ctx.camera.screenSpaceShadowMask &&\r\n renderQueue.shadowedLights.length > 0\r\n }\r\n }),\r\n setup(fg: FrameGraphContext) {\r\n // Four shadow lights share each RGBA8 layer in clustered-light order.\r\n const { graph, ctx, renderQueue, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'ShadowMaskPass');\r\n const numShadowLights = renderQueue.shadowedLights.length;\r\n const numLayers = ShadowMaskRenderer.getLayerCount(numShadowLights);\r\n const maskPassResult = graph.addPass('ShadowMaskPass', (builder) => {\r\n // Capture the depth version declared at this pipeline position.\r\n const maskDepthHandle = blackboard.expect(FrameResources.LinearDepth);\r\n builder.read(maskDepthHandle);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n // Per-layer framebuffers are temporary views of this graph texture.\r\n const maskHandle = builder.createTexture({\r\n format: 'rgba8unorm',\r\n label: 'shadowMask',\r\n arrayLayers: numLayers,\r\n allocationKey: 'ForwardPlus.ShadowMask'\r\n });\r\n builder.setExecute((rgCtx) => {\r\n const depthTex = rgCtx.getTexture<Texture2D>(maskDepthHandle);\r\n const maskTex = rgCtx.getTexture<Texture2DArray>(maskHandle);\r\n _shadowMaskRenderer.render(ctx, depthTex, renderQueue.shadowedLights, (layer) =>\r\n rgCtx.createFramebuffer({\r\n width: maskTex.width,\r\n height: maskTex.height,\r\n colorAttachments: maskTex,\r\n depthAttachment: null,\r\n attachmentLayer: layer\r\n })\r\n );\r\n });\r\n return { maskHandle };\r\n });\r\n blackboard.set(FrameResources.ShadowMask, maskPassResult.maskHandle);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst TransmissionDepthForSSRModule: RenderModule<FrameGraphContext> = {\r\n type: 'TransmissionDepthForSSR',\r\n writes: [FrameResources.LinearDepth],\r\n prepare: ({ options }) => ({ enabled: options.needsTransmissionDepthForSSR }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, frame, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'TransmissionDepthForSSR');\r\n const transmissionDepthResult = graph.addPass('TransmissionDepthForSSR', (builder) => {\r\n const currentDepth = blackboard.expect(FrameResources.LinearDepth);\r\n builder.read(currentDepth);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n // Version the in-place depth mutation for downstream dependencies.\r\n const depthOut = builder.write(currentDepth);\r\n const done = builder.createToken('TransmissionDepthForSSRDone');\r\n builder.sideEffect();\r\n builder.setExecute((rgCtx) => {\r\n renderTransmissionDepthPass(frame, rgCtx);\r\n });\r\n return { done, depthOut };\r\n });\r\n fg.state.preLightTransmissionDepthToken = transmissionDepthResult.done;\r\n // Publish the post-transmission depth version.\r\n blackboard.set(FrameResources.LinearDepth, transmissionDepthResult.depthOut);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst HiZModule: RenderModule<FrameGraphContext> = {\r\n type: 'HiZ',\r\n writes: [FrameResources.HiZ],\r\n prepare: ({ options }) => ({ enabled: options.hiZ }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'HiZ');\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n //const hiZWidth = nextPowerOf2(ctx.renderWidth);\r\n //const hiZHeight = nextPowerOf2(ctx.renderHeight);\r\n let hiZHandle: RGTextureHandle | undefined;\r\n graph.addPass('HiZ', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n hiZHandle = builder.createTexture({\r\n format: REVERSE_Z ? 'r16f' : 'r32f',\r\n label: 'hiZ',\r\n sizeMode: 'backbuffer-relative',\r\n mipLevels: getFullMipLevelCount(ctx.renderWidth, ctx.renderHeight),\r\n allocationKey: 'ForwardPlus.HiZ'\r\n });\r\n const hiZFramebufferHandle = builder.createFramebuffer({\r\n label: 'HiZFramebuffer',\r\n colorAttachments: hiZHandle,\r\n depthAttachment: null\r\n });\r\n builder.setExecute((rgCtx) => {\r\n const passCtx = frame.ctx;\r\n // Resolve the declared handle, not mutable framebuffer state.\r\n const depthFb = rgCtx.getFramebuffer(depthPassResult.depthFramebufferHandle);\r\n const depthTex = depthFb.getDepthAttachment() as Texture2D;\r\n if (!depthTex) {\r\n throw new Error('HiZ pass: depth prepass framebuffer has no depth attachment.');\r\n }\r\n const hiZTex = rgCtx.getTexture<Texture2D>(hiZHandle!);\r\n const HiZFrameBuffer = rgCtx.getFramebuffer(hiZFramebufferHandle);\r\n buildHiZ(depthTex, HiZFrameBuffer);\r\n passCtx.HiZTexture = hiZTex;\r\n });\r\n });\r\n if (hiZHandle) {\r\n blackboard.set(FrameResources.HiZ, hiZHandle);\r\n }\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst SSSProfileModule: RenderModule<FrameGraphContext> = {\r\n type: 'SSSProfile',\r\n prepare: ({ options }) => ({ enabled: options.sss }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'SSSProfile');\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const sssProfileResult = graph.addPass('SSSProfile', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n if (shadowMaskHandle) {\r\n builder.read(shadowMaskHandle);\r\n }\r\n const profileHandle = builder.createTexture({\r\n format: 'rgba16f',\r\n label: 'sssProfile',\r\n allocationKey: 'ForwardPlus.SSSProfile'\r\n });\r\n const paramHandle = builder.createTexture({\r\n format: 'rgba8unorm',\r\n label: 'sssParam',\r\n allocationKey: 'ForwardPlus.SSSParam'\r\n });\r\n const colorAttachments = [ctx.colorFormat!, profileHandle, paramHandle];\r\n const framebufferHandle = builder.createFramebuffer({\r\n label: 'SSSProfileFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments,\r\n depthAttachment: renderDepthAttachment,\r\n ignoreDepthStencil: false\r\n });\r\n\r\n builder.setExecute((rgCtx) => {\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n renderForwardSSSProfile(\r\n frame,\r\n rgCtx.getFramebuffer(framebufferHandle),\r\n rgCtx.getTexture<Texture2D>(profileHandle),\r\n rgCtx.getTexture<Texture2D>(paramHandle),\r\n null\r\n );\r\n });\r\n\r\n return {\r\n profileHandle,\r\n paramHandle,\r\n framebufferHandle\r\n };\r\n });\r\n blackboard.set(FrameResources.SSSProfile, sssProfileResult.profileHandle);\r\n blackboard.set(FrameResources.SSSParam, sssProfileResult.paramHandle);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst SceneColorGrabModule: RenderModule<FrameGraphContext> = {\r\n type: 'SceneColorGrab',\r\n prepare: ({ options }) => ({ enabled: options.needSceneColor }),\r\n setup(fg: FrameGraphContext) {\r\n // Refraction samples this non-transmission scene copy.\r\n const { graph, ctx, frame, blackboard, options } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'SceneColorGrab');\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const grabResult = graph.addPass('SceneColorGrab', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n if (shadowMaskHandle) {\r\n builder.read(shadowMaskHandle);\r\n }\r\n const copyHandle = builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColorCopy',\r\n allocationKey: 'ForwardPlus.SceneColorCopy'\r\n });\r\n // Isolate depth when SSR inserts transmission depth before LightPass.\r\n const copyFramebufferHandle = !options.needsTransmissionDepthForSSR\r\n ? builder.createFramebuffer({\r\n label: 'SceneColorCopyFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: copyHandle,\r\n depthAttachment: renderDepthAttachment,\r\n ignoreDepthStencil: false\r\n })\r\n : undefined;\r\n builder.setExecute((rgCtx) => {\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n renderSceneColorGrab(frame, rgCtx, copyHandle, copyFramebufferHandle);\r\n });\r\n return { copyHandle, copyFramebufferHandle };\r\n });\r\n blackboard.set(FrameResources.SceneColorCopy, grabResult.copyHandle);\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst LightPassModule: RenderModule<FrameGraphContext> = {\r\n type: 'LightPass',\r\n writes: [\r\n FrameResources.SceneColor,\r\n FrameResources.SceneRoughness,\r\n FrameResources.SceneNormal,\r\n FrameResources.SSSDiffuse,\r\n FrameResources.SSSTransmission,\r\n FrameResources.SkinSSS\r\n ],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard, options, backbuffer } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'LightPass');\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const preLightTransmissionDepthToken = fg.state.preLightTransmissionDepthToken;\r\n const hiZHandle = blackboard.get(FrameResources.HiZ);\r\n const sssProfileHandle = blackboard.get(FrameResources.SSSProfile);\r\n const sssParamHandle = blackboard.get(FrameResources.SSSParam);\r\n const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);\r\n const useFinalFramebufferAsIntermediate = fg.state.useFinalFramebufferAsIntermediate;\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const historyManager = fg.history;\r\n\r\n // Keep SSR history scoped while the light pass executes.\r\n const lightHistoryReadBindings = fg.state.lightHistoryReadBindings;\r\n const historySize = { width: ctx.renderWidth, height: ctx.renderHeight };\r\n if (historyManager && options.ssr && ctx.camera?.ssrTemporal && options.motionVectors) {\r\n const reflectHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSR_REFLECT,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n historySize\r\n );\r\n const motionVectorHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSR_MOTION_VECTOR,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n historySize\r\n );\r\n if (reflectHistoryHandle && motionVectorHistoryHandle) {\r\n lightHistoryReadBindings.push(\r\n { name: RGHistoryResources.SSR_REFLECT, handle: reflectHistoryHandle },\r\n { name: RGHistoryResources.SSR_MOTION_VECTOR, handle: motionVectorHistoryHandle }\r\n );\r\n }\r\n }\r\n if (historyManager && options.ssgi) {\r\n const ssgiHistorySize = { width: ctx.renderWidth, height: ctx.renderHeight };\r\n const irradianceHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_IRRADIANCE,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n ssgiHistorySize\r\n );\r\n const surfaceHistoryHandle = historyManager.importPreviousIfCompatible(\r\n graph,\r\n RGHistoryResources.SSGI_SURFACE,\r\n {\r\n format: 'rgba16f',\r\n sizeMode: 'absolute',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight\r\n },\r\n ssgiHistorySize\r\n );\r\n if (irradianceHistoryHandle && surfaceHistoryHandle) {\r\n lightHistoryReadBindings.push(\r\n { name: RGHistoryResources.SSGI_IRRADIANCE, handle: irradianceHistoryHandle },\r\n { name: RGHistoryResources.SSGI_SURFACE, handle: surfaceHistoryHandle }\r\n );\r\n }\r\n }\r\n\r\n const opaquePassResult = graph.addPass('LightPass', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (shadowMaskHandle) {\r\n builder.read(shadowMaskHandle);\r\n }\r\n if (preLightTransmissionDepthToken) {\r\n builder.read(preLightTransmissionDepthToken);\r\n }\r\n if (hiZHandle) {\r\n builder.read(hiZHandle);\r\n }\r\n for (const binding of lightHistoryReadBindings) {\r\n builder.read(binding.handle);\r\n }\r\n\r\n // Direct rendering writes the backbuffer; otherwise create a texture.\r\n const sceneColorHandle = useFinalFramebufferAsIntermediate\r\n ? builder.write(backbuffer)\r\n : builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColor',\r\n allocationKey: 'ForwardPlus.SceneColor'\r\n });\r\n\r\n if (sceneColorCopyHandle) {\r\n builder.read(sceneColorCopyHandle);\r\n }\r\n if (sssProfileHandle) {\r\n builder.read(sssProfileHandle);\r\n }\r\n if (sssParamHandle) {\r\n builder.read(sssParamHandle);\r\n }\r\n const surfaceAttachmentCount = Number(options.sceneRoughness) + Number(options.sceneNormal);\r\n // Surface MRT products are exposed through blackboard handles.\r\n const sceneRoughnessHandle = options.sceneRoughness\r\n ? builder.createTexture({\r\n format: getSurfaceTextureFormat(ctx),\r\n label: 'sceneRoughness',\r\n allocationKey: 'ForwardPlus.SceneRoughness'\r\n })\r\n : undefined;\r\n const sceneNormalHandle = options.sceneNormal\r\n ? builder.createTexture({\r\n format: getSurfaceTextureFormat(ctx),\r\n label: 'sceneNormal',\r\n allocationKey: 'ForwardPlus.SceneNormal'\r\n })\r\n : undefined;\r\n const writeSSSDiffuse = options.sss && shouldStoreSSSDiffuse(ctx);\r\n let writeSSSTransmission = options.sss && shouldStoreSSSTransmission(ctx);\r\n if (\r\n writeSSSDiffuse &&\r\n writeSSSTransmission &&\r\n surfaceAttachmentCount > 0 &&\r\n getSSSLightingTextureFormat(ctx, 2, surfaceAttachmentCount) !== ctx.colorFormat\r\n ) {\r\n writeSSSTransmission = false;\r\n }\r\n const writeSkinSSS = options.skinSSS;\r\n const sssLightingAttachmentCount =\r\n (writeSSSDiffuse ? 1 : 0) + (writeSSSTransmission ? 1 : 0) + (writeSkinSSS ? 1 : 0);\r\n const sssLightingFormat = getSSSLightingTextureFormat(\r\n ctx,\r\n sssLightingAttachmentCount,\r\n surfaceAttachmentCount\r\n );\r\n const sssDiffuseHandle = writeSSSDiffuse\r\n ? builder.createTexture({\r\n format: sssLightingFormat,\r\n label: 'sssDiffuse',\r\n allocationKey: 'ForwardPlus.SSSDiffuse'\r\n })\r\n : undefined;\r\n const sssTransmissionHandle = writeSSSTransmission\r\n ? builder.createTexture({\r\n format: sssLightingFormat,\r\n label: 'sssTransmission',\r\n allocationKey: 'ForwardPlus.SSSTransmission'\r\n })\r\n : undefined;\r\n const skinSSSHandle = writeSkinSSS\r\n ? builder.createTexture({\r\n format: sssLightingFormat,\r\n label: 'skinSSS',\r\n allocationKey: 'ForwardPlus.SkinSSS'\r\n })\r\n : undefined;\r\n const sceneColorFramebufferHandle = useFinalFramebufferAsIntermediate\r\n ? undefined\r\n : builder.createFramebuffer({\r\n label: 'SceneColorFramebuffer',\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: sceneColorHandle,\r\n depthAttachment: renderDepthAttachment\r\n });\r\n\r\n builder.setExecute((rgCtx) => {\r\n const sceneColorTex = rgCtx.getTexture<Texture2D>(sceneColorHandle);\r\n const sceneColorCopyTex = sceneColorCopyHandle\r\n ? rgCtx.getTexture<Texture2D>(sceneColorCopyHandle)\r\n : null;\r\n // Legacy effects still read resolved MRT textures from DrawContext.\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n ctx.HiZTexture = hiZHandle ? rgCtx.getTexture<Texture2D>(hiZHandle) : null;\r\n ctx.SceneRoughnessTexture = sceneRoughnessHandle\r\n ? rgCtx.getTexture<Texture2D>(sceneRoughnessHandle)\r\n : null;\r\n ctx.SceneNormalTexture = sceneNormalHandle ? rgCtx.getTexture<Texture2D>(sceneNormalHandle) : null;\r\n ctx.SSSProfileTexture = sssProfileHandle ? rgCtx.getTexture<Texture2D>(sssProfileHandle) : null;\r\n ctx.SSSParamTexture = sssParamHandle ? rgCtx.getTexture<Texture2D>(sssParamHandle) : null;\r\n ctx.SSSDiffuseTexture = sssDiffuseHandle ? rgCtx.getTexture<Texture2D>(sssDiffuseHandle) : null;\r\n ctx.SSSTransmissionTexture = sssTransmissionHandle\r\n ? rgCtx.getTexture<Texture2D>(sssTransmissionHandle)\r\n : null;\r\n ctx.SkinSSSTexture = skinSSSHandle ? rgCtx.getTexture<Texture2D>(skinSSSHandle) : null;\r\n const renderLightPass = () =>\r\n renderOpaqueScenePass(frame, sceneColorTex, sceneColorCopyTex, rgCtx, sceneColorFramebufferHandle);\r\n if (historyManager && lightHistoryReadBindings.length > 0) {\r\n const ssgiIrradianceBinding = lightHistoryReadBindings.find(\r\n (binding) => binding.name === RGHistoryResources.SSGI_IRRADIANCE\r\n );\r\n const ssgiSurfaceBinding = lightHistoryReadBindings.find(\r\n (binding) => binding.name === RGHistoryResources.SSGI_SURFACE\r\n );\r\n ctx.SSGIIrradianceHistoryTexture = ssgiIrradianceBinding\r\n ? rgCtx.getTexture<Texture2D>(ssgiIrradianceBinding.handle)\r\n : null;\r\n ctx.SSGISurfaceHistoryTexture = ssgiSurfaceBinding\r\n ? rgCtx.getTexture<Texture2D>(ssgiSurfaceBinding.handle)\r\n : null;\r\n historyManager.beginReadScope(\r\n lightHistoryReadBindings.map((binding) => ({\r\n name: binding.name,\r\n texture: rgCtx.getTexture<Texture2D>(binding.handle)\r\n }))\r\n );\r\n try {\r\n renderLightPass();\r\n } finally {\r\n historyManager.endReadScope();\r\n ctx.SSGIIrradianceHistoryTexture = null;\r\n ctx.SSGISurfaceHistoryTexture = null;\r\n }\r\n } else {\r\n renderLightPass();\r\n }\r\n });\r\n\r\n return {\r\n sceneColorHandle,\r\n sceneColorFramebufferHandle,\r\n sceneRoughnessHandle,\r\n sceneNormalHandle,\r\n sssDiffuseHandle,\r\n sssTransmissionHandle,\r\n skinSSSHandle\r\n };\r\n });\r\n const lightPassResult: LightPassResult = opaquePassResult;\r\n fg.state.lightPass = lightPassResult;\r\n blackboard.set(FrameResources.SceneColor, lightPassResult.sceneColorHandle);\r\n if (lightPassResult.sceneRoughnessHandle) {\r\n blackboard.set(FrameResources.SceneRoughness, lightPassResult.sceneRoughnessHandle);\r\n }\r\n if (lightPassResult.sceneNormalHandle) {\r\n blackboard.set(FrameResources.SceneNormal, lightPassResult.sceneNormalHandle);\r\n }\r\n if (lightPassResult.sssDiffuseHandle) {\r\n blackboard.set(FrameResources.SSSDiffuse, lightPassResult.sssDiffuseHandle);\r\n }\r\n if (lightPassResult.sssTransmissionHandle) {\r\n blackboard.set(FrameResources.SSSTransmission, lightPassResult.sssTransmissionHandle);\r\n }\r\n if (lightPassResult.skinSSSHandle) {\r\n blackboard.set(FrameResources.SkinSSS, lightPassResult.skinSSSHandle);\r\n }\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst SkyPassModule: RenderModule<FrameGraphContext> = {\r\n type: 'SkyPass',\r\n reads: [{ resource: FrameResources.SceneColor, version: 'current' }],\r\n writes: [FrameResources.SceneColor, FrameResources.SceneColorNoFog],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard, options } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'SkyPass');\r\n const lightPassResult = requireBuildState(fg, 'lightPass', 'LightPass', 'SkyPass');\r\n const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);\r\n const sceneColorHandle = blackboard.expect(FrameResources.SceneColor);\r\n // Screen-space passes must not read fog as surface radiance. Snapshot the lit\r\n // scene with sky but before fog, and only when fog is actually present and a\r\n // consumer exists, so fog-free scenes allocate nothing extra. The refraction\r\n // background path already baked sky and fog into the copy, so no fog-free\r\n // version can be recovered there and consumers keep their existing input.\r\n const captureNoFog = !sceneColorCopyHandle && (options.ssgi || options.ssr) && options.fogPresents;\r\n\r\n const skyPassResult = graph.addPass('SkyPass', (builder) => {\r\n builder.read(sceneColorHandle);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n builder.read(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n const noFog = captureNoFog\r\n ? builder.createTexture({\r\n format: ctx.colorFormat!,\r\n label: 'sceneColorNoFog',\r\n allocationKey: 'ForwardPlus.SceneColorNoFog'\r\n })\r\n : null;\r\n const out = builder.write(sceneColorHandle);\r\n builder.setExecute((rgCtx) => {\r\n // The refraction background already contains sky and fog.\r\n if (!sceneColorCopyHandle) {\r\n renderSkyScenePass(\r\n frame,\r\n rgCtx,\r\n lightPassResult.sceneColorFramebufferHandle,\r\n noFog ? rgCtx.getTexture<Texture2D>(noFog) : null\r\n );\r\n }\r\n });\r\n return { color: out, noFog };\r\n });\r\n\r\n lightPassResult.sceneColorHandle = skyPassResult.color;\r\n blackboard.set(FrameResources.SceneColor, skyPassResult.color);\r\n if (skyPassResult.noFog) {\r\n blackboard.set(FrameResources.SceneColorNoFog, skyPassResult.noFog);\r\n }\r\n }\r\n};\r\n\r\n/** @internal */\r\nconst CompositeTailModule: RenderModule<FrameGraphContext> = {\r\n type: 'CompositeTail',\r\n writes: [FrameResources.SceneColor, FrameResources.LinearDepth, FrameResources.PresentedColor],\r\n prepare: () => ({ enabled: true }),\r\n setup(fg: FrameGraphContext) {\r\n const { graph, ctx, frame, blackboard, options, backbuffer } = fg;\r\n const depthPassResult = requireBuildState(fg, 'depth', 'DepthPrepass', 'CompositeTail');\r\n const hiZHandle = blackboard.get(FrameResources.HiZ);\r\n const sceneColorCopyHandle = blackboard.get(FrameResources.SceneColorCopy);\r\n const shadowMaskHandle = blackboard.get(FrameResources.ShadowMask);\r\n const lightPassResult = requireBuildState(fg, 'lightPass', 'LightPass', 'CompositeTail');\r\n const renderDepthAttachment = fg.state.renderDepthAttachment;\r\n const useFinalFramebufferAsIntermediate = fg.state.useFinalFramebufferAsIntermediate;\r\n const lightHistoryReadBindings = fg.state.lightHistoryReadBindings;\r\n const historyManager = fg.history;\r\n\r\n // Opaque effects finish before transparent geometry uses their output.\r\n const opaqueChainInput = blackboard.expect(FrameResources.SceneColor);\r\n // Include textures sampled indirectly through DrawContext.\r\n const opaqueChainDeps: RGHandle[] = [blackboard.expect(FrameResources.LinearDepth)];\r\n if (hiZHandle) {\r\n opaqueChainDeps.push(hiZHandle);\r\n }\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n opaqueChainDeps.push(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n if (sceneColorCopyHandle) {\r\n opaqueChainDeps.push(sceneColorCopyHandle);\r\n }\r\n for (const handle of [\r\n blackboard.get(FrameResources.SSSProfile),\r\n blackboard.get(FrameResources.SSSParam),\r\n blackboard.get(FrameResources.SceneRoughness),\r\n blackboard.get(FrameResources.SceneNormal),\r\n blackboard.get(FrameResources.SSSDiffuse),\r\n blackboard.get(FrameResources.SSSTransmission),\r\n blackboard.get(FrameResources.SkinSSS)\r\n ]) {\r\n if (handle) {\r\n opaqueChainDeps.push(handle);\r\n }\r\n }\r\n const opaqueChainResult = ctx.compositor\r\n ? ctx.compositor.buildLayer({\r\n graph,\r\n ctx,\r\n layer: PostEffectLayer.opaque,\r\n blackboard,\r\n input: opaqueChainInput,\r\n finalOutput: null,\r\n sceneDepthAttachment: renderDepthAttachment,\r\n dependencies: opaqueChainDeps,\r\n historyReads: lightHistoryReadBindings,\r\n history: historyManager\r\n })\r\n : { color: opaqueChainInput, wroteFinal: false };\r\n const opaqueChainRan = opaqueChainResult.color !== opaqueChainInput;\r\n\r\n // Transparent geometry writes a new version of the opaque-chain output.\r\n const sceneColorHandle = graph.addPass('TransparentPass', (builder) => {\r\n builder.read(blackboard.expect(FrameResources.LinearDepth));\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n if (hiZHandle) {\r\n // Transparent materials may ray-march HiZ.\r\n builder.read(hiZHandle);\r\n }\r\n if (lightPassResult.sceneColorFramebufferHandle) {\r\n builder.read(lightPassResult.sceneColorFramebufferHandle);\r\n }\r\n if (sceneColorCopyHandle) {\r\n builder.read(sceneColorCopyHandle);\r\n }\r\n if (shadowMaskHandle) {\r\n // Transparent geometry goes through the same clustered-light bind group\r\n // as the opaque pass, which binds ctx.shadowMaskTexture whenever\r\n // screenSpaceShadowMask is on (ShaderHelper, UNIFORM_NAME_SHADOW_MASK).\r\n // Declaring the read is what keeps the mask alive: the executor derives\r\n // each resource's lastUse from declared reads and returns the texture to\r\n // the pool immediately after, so without this the mask would be recycled\r\n // after LightPass while this pass is still sampling it.\r\n builder.read(shadowMaskHandle);\r\n }\r\n builder.read(opaqueChainResult.color);\r\n const out = builder.write(opaqueChainResult.color);\r\n builder.setExecute((rgCtx) => {\r\n // Pulled here rather than inherited from LightPass's execute. The value\r\n // is the same, but relying on the leftover would make this pass depend\r\n // on execution order instead of on its own declared inputs.\r\n ctx.shadowMaskTexture = shadowMaskHandle ? rgCtx.getTexture<Texture2DArray>(shadowMaskHandle) : null;\r\n renderTransparentScenePass(\r\n frame,\r\n rgCtx,\r\n opaqueChainRan ? opaqueChainResult.color : null,\r\n lightPassResult.sceneColorFramebufferHandle\r\n );\r\n });\r\n return out;\r\n });\r\n blackboard.set(FrameResources.SceneColor, sceneColorHandle);\r\n\r\n const chainInput = sceneColorHandle;\r\n // Track whether the chain input still resides in the final target.\r\n const backbufferResidentHandle = useFinalFramebufferAsIntermediate ? sceneColorHandle : null;\r\n const chainDependencies: RGHandle[] = [];\r\n const finalOutput = { handle: backbuffer, isScreen: !ctx.finalFramebuffer };\r\n const endLayerHasEffects = !!ctx.compositor?.layerHasEnabledEffect(PostEffectLayer.end);\r\n\r\n // Transparent-layer effects read depth before its transmission mutation.\r\n const transparentChainResult = ctx.compositor\r\n ? ctx.compositor.buildLayer({\r\n graph,\r\n ctx,\r\n layer: PostEffectLayer.transparent,\r\n blackboard,\r\n input: chainInput,\r\n finalOutput: endLayerHasEffects ? null : finalOutput,\r\n inputResidesInFinalTarget: !!backbufferResidentHandle,\r\n sceneDepthAttachment: renderDepthAttachment,\r\n dependencies: chainDependencies,\r\n history: historyManager\r\n })\r\n : { color: chainInput, wroteFinal: false };\r\n\r\n // WAR orders this depth mutation after pre-transmission readers.\r\n let transmissionDepthToken: RGHandle | undefined;\r\n if (options.needSceneColor && !options.needsTransmissionDepthForSSR) {\r\n const transmissionDepthResult = graph.addPass('TransmissionDepth', (builder) => {\r\n const currentDepth = blackboard.expect(FrameResources.LinearDepth);\r\n builder.read(sceneColorHandle);\r\n if (transparentChainResult.color !== sceneColorHandle) {\r\n builder.read(transparentChainResult.color);\r\n }\r\n builder.read(currentDepth);\r\n builder.read(depthPassResult.depthFramebufferHandle);\r\n const depthOut = builder.write(currentDepth);\r\n const done = builder.createToken('TransmissionDepthDone');\r\n builder.sideEffect();\r\n builder.setExecute((rgCtx) => {\r\n renderTransmissionDepthPass(frame, rgCtx);\r\n });\r\n return { done, depthOut };\r\n });\r\n transmissionDepthToken = transmissionDepthResult.done;\r\n blackboard.set(FrameResources.LinearDepth, transmissionDepthResult.depthOut);\r\n }\r\n\r\n const endChainDependencies = transmissionDepthToken\r\n ? [...chainDependencies, transmissionDepthToken]\r\n : chainDependencies;\r\n const chainResult = ctx.compositor\r\n ? ctx.compositor.buildLayer({\r\n graph,\r\n ctx,\r\n layer: PostEffectLayer.end,\r\n blackboard,\r\n input: transparentChainResult.color,\r\n finalOutput,\r\n inputResidesInFinalTarget:\r\n !!backbufferResidentHandle && transparentChainResult.color === chainInput,\r\n sceneDepthAttachment: renderDepthAttachment,\r\n dependencies: endChainDependencies,\r\n history: historyManager\r\n })\r\n : { color: transparentChainResult.color, wroteFinal: false };\r\n const finalWroteFinal = chainResult.wroteFinal || transparentChainResult.wroteFinal;\r\n\r\n let presentedBackbuffer: RGHandle;\r\n if (finalWroteFinal) {\r\n presentedBackbuffer = chainResult.color;\r\n } else {\r\n presentedBackbuffer = graph.addPass('Blit', (builder) => {\r\n builder.read(chainResult.color);\r\n for (const dep of endChainDependencies) {\r\n builder.read(dep);\r\n }\r\n const outputBackbuffer = builder.write(backbuffer);\r\n // Skip copies when the output already resides in the final target.\r\n const needsBlit = chainResult.color !== backbufferResidentHandle;\r\n builder.setExecute((rgCtx) => {\r\n const sourceTex = needsBlit ? rgCtx.getTexture<Texture2D>(chainResult.color) : null;\r\n if (sourceTex) {\r\n const blitter = new CopyBlitter();\r\n blitter.srgbOut = !ctx.finalFramebuffer;\r\n blitter.blit(sourceTex, ctx.finalFramebuffer ?? null, fetchSampler('clamp_nearest_nomip'));\r\n }\r\n });\r\n return outputBackbuffer;\r\n });\r\n }\r\n fg.state.presentedBackbuffer = presentedBackbuffer;\r\n // Downstream modules may replace this sink registration.\r\n blackboard.set(FrameResources.PresentedColor, presentedBackbuffer);\r\n }\r\n};\r\n\r\n/** Built-in Forward+ modules addressable by pipeline anchors. @public */\r\nexport const ForwardPlusModules = {\r\n SkyUpdate: SkyUpdateModule,\r\n ClusterLights: ClusterLightsModule,\r\n GPUPicking: GPUPickingModule,\r\n ShadowMaps: ShadowMapsModule,\r\n DepthPrepass: DepthPrepassModule,\r\n ShadowMask: ShadowMaskModule,\r\n TransmissionDepthForSSR: TransmissionDepthForSSRModule,\r\n HiZ: HiZModule,\r\n SSSProfile: SSSProfileModule,\r\n SceneColorGrab: SceneColorGrabModule,\r\n LightPass: LightPassModule,\r\n SkyPass: SkyPassModule,\r\n CompositeTail: CompositeTailModule\r\n} as const;\r\n\r\n/** The default module order assembled by {@link createForwardPlusPipeline}. */\r\nconst DEFAULT_FORWARD_PLUS_MODULES: readonly RenderModule<FrameGraphContext>[] = [\r\n SkyUpdateModule,\r\n ClusterLightsModule,\r\n GPUPickingModule,\r\n ShadowMapsModule,\r\n DepthPrepassModule,\r\n ShadowMaskModule,\r\n TransmissionDepthForSSRModule,\r\n HiZModule,\r\n SSSProfileModule,\r\n SceneColorGrabModule,\r\n LightPassModule,\r\n SkyPassModule,\r\n CompositeTailModule\r\n];\r\n\r\n/** @internal */\r\nlet _defaultForwardPlusPipeline: RenderPipeline<FrameGraphContext> | null = null;\r\n\r\n/** Create an independent pipeline with the built-in Forward+ modules. @public */\r\nexport function createForwardPlusPipeline(): RenderPipeline<FrameGraphContext> {\r\n return new RenderPipeline<FrameGraphContext>(DEFAULT_FORWARD_PLUS_MODULES);\r\n}\r\n\r\n/** Return the shared default pipeline. Mutations affect cameras using it. @public */\r\nexport function getDefaultForwardPlusPipeline(): RenderPipeline<FrameGraphContext> {\r\n if (!_defaultForwardPlusPipeline) {\r\n _defaultForwardPlusPipeline = createForwardPlusPipeline();\r\n }\r\n return _defaultForwardPlusPipeline;\r\n}\r\n\r\n/** Build the Forward+ render graph and return its backbuffer output. @public */\r\nexport function buildForwardPlusGraph(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): RGHandle {\r\n return buildForwardPlusGraphInternal(graph, ctx, renderQueue, options).backbuffer;\r\n}\r\n\r\nfunction buildForwardPlusGraphInternal(\r\n graph: RenderGraph,\r\n ctx: DrawContext,\r\n renderQueue: RenderQueue,\r\n options: ForwardPlusOptions\r\n): ForwardPlusGraphBuildResult {\r\n const backbuffer = graph.importTexture('backbuffer');\r\n // Irradiance, moments and surface history require renderable half-float\r\n // targets. Keep ordinary IBL active on devices that cannot provide them.\r\n options.ssgi &&= supportsSSGIRenderTargets(ctx);\r\n ctx.SSS = !!options.sss;\r\n ctx.SSGI = !!options.ssgi;\r\n ctx.SSGIIrradianceHistoryTexture = null;\r\n ctx.SSGISurfaceHistoryTexture = null;\r\n ctx.SkinSSSTexture = null;\r\n // ShadowMask sets this only when it produces a texture.\r\n ctx.shadowMaskTexture = null;\r\n\r\n const blackboard = new RGBlackboard();\r\n\r\n const frame: FrameState = {\r\n ctx,\r\n renderQueue,\r\n depthFramebuffer: null,\r\n sunLightColor: null,\r\n options,\r\n renderQueueDisposed: false,\r\n clusteredLightReleased: false,\r\n sunLightRestored: false\r\n };\r\n\r\n const ordering = new OrderingScope();\r\n const fg: FrameGraphContext = {\r\n graph,\r\n ctx,\r\n finalFramebuffer: ctx.finalFramebuffer,\r\n renderQueue,\r\n blackboard,\r\n frame,\r\n history: ctx.camera?.getHistoryResourceManager?.() ?? null,\r\n options,\r\n ordering,\r\n backbuffer,\r\n state: {\r\n renderDepthAttachment: null,\r\n useFinalFramebufferAsIntermediate: false,\r\n lightHistoryReadBindings: []\r\n }\r\n };\r\n\r\n const pipeline = ctx.camera?.renderPipeline ?? getDefaultForwardPlusPipeline();\r\n const requirements = ctx.compositor?.collectRequirements(ctx) ?? {};\r\n mergeFrameResourceRequirements(requirements, pipeline.collectRequirements(fg));\r\n resolveFrameResourceRequirements(ctx, options, requirements);\r\n\r\n pipeline.build(fg);\r\n validateProducedFrameResources(blackboard, options, renderQueue);\r\n\r\n const presented = blackboard.get(FrameResources.PresentedColor) ?? fg.state.presentedBackbuffer!;\r\n const depth = fg.state.depth;\r\n const externalDepthImport =\r\n depth?.externalDepthAttachmentHandle && depth.externalDepthAttachment\r\n ? { handle: depth.externalDepthAttachmentHandle, texture: depth.externalDepthAttachment }\r\n : undefined;\r\n return { backbuffer: presented, frame, externalDepthImport };\r\n}\r\n\r\n/** @internal */\r\nfunction renderShadowMaps(ctx: DrawContext, lights: PunctualLight[]): void {\r\n ctx.renderPass = _shadowMapPass;\r\n ctx.device.pushDeviceStates();\r\n try {\r\n for (const light of lights) {\r\n light.shadow.render(ctx, _shadowMapPass);\r\n }\r\n } finally {\r\n ctx.device.popDeviceStates();\r\n }\r\n}\r\n\r\nfunction renderForwardSSSProfile(\r\n frame: FrameState,\r\n profileFramebuffer: FrameBuffer,\r\n profileTexture: Texture2D,\r\n paramTexture: Texture2D,\r\n normalTexture: Nullable<Texture2D>\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n if (!ctx.SSS || !ctx.depthTexture) {\r\n return;\r\n }\r\n const sssRenderQueue = createActualSSSRenderQueue(renderQueue);\r\n if (!sssRenderQueue) {\r\n return;\r\n }\r\n\r\n const device = ctx.device;\r\n const savedMaterialFlags = ctx.materialFlags;\r\n const savedCompositor = ctx.compositor;\r\n const savedTransmission = _scenePass.transmission;\r\n const savedRenderOpaque = _scenePass.renderOpaque;\r\n const savedRenderTransparent = _scenePass.renderTransparent;\r\n const savedClearColor = _scenePass.clearColor;\r\n const savedClearDepth = _scenePass.clearDepth;\r\n const savedClearStencil = _scenePass.clearStencil;\r\n const savedCommandBufferReuse = ctx.camera.commandBufferReuse;\r\n const savedProfileTexture = ctx.SSSProfileTexture;\r\n const savedParamTexture = ctx.SSSParamTexture;\r\n const savedNormalTexture = ctx.SceneNormalTexture;\r\n\r\n let profileFlags = MaterialVaryingFlags.SSS_STORE_PROFILE;\r\n if (normalTexture) {\r\n profileFlags |= MaterialVaryingFlags.SCENE_STORE_NORMAL;\r\n }\r\n\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(profileFramebuffer);\r\n ctx.SSSProfileTexture = profileTexture;\r\n ctx.SSSParamTexture = paramTexture;\r\n ctx.SceneNormalTexture = normalTexture;\r\n ctx.compositor = null;\r\n ctx.camera.commandBufferReuse = false;\r\n ctx.materialFlags =\r\n (ctx.materialFlags &\r\n ~(\r\n MaterialVaryingFlags.SCENE_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SCENE_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION |\r\n MaterialVaryingFlags.SKIN_SSS_STORE\r\n )) |\r\n profileFlags;\r\n _scenePass.transmission = false;\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderTransparent = false;\r\n _scenePass.clearColor = Vector4.zero();\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n _scenePass.render(ctx, null, null, sssRenderQueue);\r\n } finally {\r\n _scenePass.clearColor = savedClearColor;\r\n _scenePass.clearDepth = savedClearDepth;\r\n _scenePass.clearStencil = savedClearStencil;\r\n _scenePass.renderTransparent = savedRenderTransparent;\r\n _scenePass.renderOpaque = savedRenderOpaque;\r\n _scenePass.transmission = savedTransmission;\r\n ctx.camera.commandBufferReuse = savedCommandBufferReuse;\r\n ctx.materialFlags = savedMaterialFlags;\r\n ctx.compositor = savedCompositor;\r\n ctx.SSSProfileTexture = savedProfileTexture;\r\n ctx.SSSParamTexture = savedParamTexture;\r\n ctx.SceneNormalTexture = savedNormalTexture;\r\n device.popDeviceStates();\r\n sssRenderQueue.dispose();\r\n }\r\n}\r\n\r\nfunction releaseIntermediateFramebuffer(frame: FrameState): void {\r\n // Each pass owns device state; only clear the shared context field.\r\n frame.ctx.intermediateFramebuffer = null;\r\n}\r\n\r\nfunction releaseDepthFramebuffer(frame: FrameState): void {\r\n frame.depthFramebuffer = null;\r\n}\r\n\r\nfunction disposeRenderQueue(frame: FrameState): void {\r\n if (!frame.renderQueueDisposed) {\r\n frame.renderQueue.dispose();\r\n frame.renderQueueDisposed = true;\r\n }\r\n}\r\n\r\nfunction releaseClusteredLight(frame: FrameState): void {\r\n if (!frame.clusteredLightReleased && frame.ctx.clusteredLight) {\r\n freeClusteredLight(frame.ctx.clusteredLight);\r\n frame.ctx.clusteredLight = undefined;\r\n frame.clusteredLightReleased = true;\r\n }\r\n}\r\n\r\nfunction restoreSunLight(frame: FrameState): void {\r\n if (!frame.sunLightRestored && frame.sunLightColor && frame.ctx.sunLight) {\r\n frame.ctx.sunLight.color = frame.sunLightColor;\r\n frame.sunLightRestored = true;\r\n }\r\n}\r\n\r\nfunction cleanupFrame(frame: FrameState): void {\r\n const { ctx } = frame;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SCENE_STORE_ROUGHNESS;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_PROFILE;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_DIFFUSE;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SCENE_STORE_NORMAL;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\r\n ctx.materialFlags &= ~MaterialVaryingFlags.SKIN_SSS_STORE;\r\n releaseIntermediateFramebuffer(frame);\r\n releaseDepthFramebuffer(frame);\r\n releaseClusteredLight(frame);\r\n disposeRenderQueue(frame);\r\n restoreSunLight(frame);\r\n}\r\n\r\n/** @internal */\r\nfunction renderSceneDepth(\r\n frame: FrameState,\r\n existingDepthFb: Nullable<FrameBuffer>,\r\n rgCtx: RGExecuteContext,\r\n depthTex?: Texture2D,\r\n motionVectorTex?: Nullable<Texture2D>,\r\n transmissionOverride?: boolean\r\n): FrameBuffer {\r\n const ctx = frame.ctx;\r\n const renderQueue = frame.renderQueue;\r\n const transmission = transmissionOverride ?? !!existingDepthFb;\r\n let depthFramebuffer = existingDepthFb;\r\n\r\n // Current callers must provide the graph-managed prepass framebuffer.\r\n console.assert(\r\n !!existingDepthFb,\r\n 'renderSceneDepth: called without an existing depth framebuffer; the ' +\r\n 'self-allocating fallback path is untested in the forward+ pipeline.'\r\n );\r\n\r\n if (!depthFramebuffer) {\r\n if (depthTex) {\r\n const colorAttachments = motionVectorTex ? [depthTex, motionVectorTex] : depthTex;\r\n const depthAttachment = ctx.finalFramebuffer?.getDepthAttachment();\r\n const depthTexOrFormat = depthAttachment?.isTexture2D() ? depthAttachment : ctx.depthFormat;\r\n\r\n depthFramebuffer = rgCtx.createFramebuffer({\r\n width: depthTex.width,\r\n height: depthTex.height,\r\n colorAttachments,\r\n depthAttachment: depthTexOrFormat,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n const format: TextureFormat =\r\n ctx.device.type === 'webgl'\r\n ? ctx.SSRCalcThickness\r\n ? 'rgba16f'\r\n : 'rgba8unorm'\r\n : ctx.SSRCalcThickness\r\n ? 'rg32f'\r\n : 'r32f';\r\n const mvFormat: TextureFormat = 'rgba16f';\r\n if (!ctx.finalFramebuffer) {\r\n depthFramebuffer = rgCtx.createFramebuffer({\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: ctx.depthFormat,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n const originDepth = ctx.finalFramebuffer?.getDepthAttachment();\r\n if (originDepth?.isTexture2D()) {\r\n depthFramebuffer = rgCtx.createFramebuffer({\r\n width: originDepth.width,\r\n height: originDepth.height,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: originDepth,\r\n ignoreDepthStencil: false\r\n });\r\n } else {\r\n depthFramebuffer = rgCtx.createFramebuffer({\r\n width: ctx.renderWidth,\r\n height: ctx.renderHeight,\r\n colorAttachments: ctx.motionVectors ? [format, mvFormat] : format,\r\n depthAttachment: ctx.depthFormat,\r\n ignoreDepthStencil: false\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!transmission) {\r\n frame.depthFramebuffer = depthFramebuffer!;\r\n }\r\n\r\n ctx.device.pushDeviceStates();\r\n try {\r\n ctx.device.setFramebuffer(depthFramebuffer!);\r\n _depthPass.encodeDepth = depthFramebuffer!.getColorAttachments()[0].format === 'rgba8unorm';\r\n _depthPass.clearColor = transmission\r\n ? null\r\n : _depthPass.encodeDepth\r\n ? new Vector4(0, 0, 0, 1)\r\n : new Vector4(1, 1, 1, 1);\r\n _depthPass.clearDepth = transmission ? null : DEPTH_CLEAR_VALUE;\r\n _depthPass.clearStencil = null;\r\n _depthPass.transmission = transmission;\r\n\r\n if (ctx.SSRCalcThickness && !transmission) {\r\n if (!_backDepthColorState) {\r\n _backDepthColorState = ctx.device.createColorState().setColorMask(false, true, false, false);\r\n }\r\n if (!_frontDepthColorState) {\r\n _frontDepthColorState = ctx.device.createColorState().setColorMask(true, false, false, false);\r\n }\r\n ctx.forceColorState = _backDepthColorState;\r\n ctx.forceCullMode = 'front';\r\n _depthPass.renderBackface = true;\r\n _depthPass.transmission = false;\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n _depthPass.clearColor = null;\r\n _depthPass.renderBackface = false;\r\n ctx.forceColorState = _frontDepthColorState;\r\n ctx.forceCullMode = null;\r\n }\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n ctx.forceColorState = null;\r\n ctx.forceCullMode = null;\r\n _depthPass.renderBackface = false;\r\n ctx.device.popDeviceStates();\r\n }\r\n\r\n if (!transmission) {\r\n ctx.motionVectorTexture = ctx.motionVectors\r\n ? (depthFramebuffer!.getColorAttachments()[1] as Texture2D)\r\n : null;\r\n ctx.linearDepthTexture = depthFramebuffer!.getColorAttachments()[0] as Texture2D;\r\n ctx.depthTexture = depthFramebuffer!.getDepthAttachment() as Texture2D;\r\n ctx.depthPrepassAttachment = ctx.depthTexture;\r\n }\r\n return depthFramebuffer!;\r\n}\r\n\r\nlet _skyMVProgram: Nullable<GPUProgram> = null;\r\nlet _skyMVBindGroup: Nullable<BindGroup> = null;\r\nlet _skyMVBox: Nullable<Primitive> = null;\r\n\r\n/** @internal */\r\n/**\r\n * Fills in motion vectors for blended geometry that opted into them.\r\n *\r\n * @remarks\r\n * The transparent queue never reaches the ordinary prepass, so without this a\r\n * blended surface carries whatever velocity belongs to what is behind it. The\r\n * framebuffer here holds the motion vector attachment alone, so nothing touches\r\n * the linear depth the light pass and the screen-space effects read, and the\r\n * materials run with depth test on and depth write off, so the scene depth is\r\n * left as the opaque pass built it.\r\n *\r\n * Materials that have not opted in discard, which leaves the velocity beneath\r\n * them intact. See {@link MeshMaterial.transparentMotionVector} for why that is\r\n * the right default and where the approximation breaks.\r\n * @internal\r\n */\r\nfunction renderTransparentMotionVectors(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n framebufferHandle: RGHandle\r\n): void {\r\n const ctx = frame.ctx;\r\n const renderQueue = frame.renderQueue;\r\n if (!ctx.motionVectors || !renderQueue.itemList?.transparent) {\r\n return;\r\n }\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(rgCtx.getFramebuffer(framebufferHandle));\r\n _depthPass.motionVectorOnly = true;\r\n _depthPass.encodeDepth = false;\r\n _depthPass.transmission = false;\r\n _depthPass.renderBackface = false;\r\n // Nothing is cleared: this pass only replaces the pixels its own geometry\r\n // covers, and everything else in the target is already correct.\r\n _depthPass.clearColor = null;\r\n _depthPass.clearDepth = null;\r\n _depthPass.clearStencil = null;\r\n _depthPass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n _depthPass.motionVectorOnly = false;\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\nfunction renderSkyMotionVectors(\r\n ctx: DrawContext,\r\n rgCtx: RGExecuteContext,\r\n framebufferHandle?: RGHandle\r\n): void {\r\n if (!ctx.motionVectorTexture) {\r\n return;\r\n }\r\n\r\n const device = ctx.device;\r\n const fb = framebufferHandle\r\n ? rgCtx.getFramebuffer(framebufferHandle)\r\n : rgCtx.createFramebuffer({\r\n colorAttachments: ctx.motionVectorTexture,\r\n depthAttachment: ctx.depthTexture\r\n });\r\n\r\n if (!_skyMVProgram) {\r\n _skyMVProgram = device.buildRenderProgram({\r\n vertex(pb) {\r\n this.$inputs.pos = pb.vec3().attrib('position');\r\n this.VPMatrix = pb.mat4().uniform(0);\r\n this.prevVPMatrix = pb.mat4().uniform(0);\r\n this.cameraPos = pb.vec3().uniform(0);\r\n this.prevCameraPos = pb.vec3().uniform(0);\r\n pb.main(function () {\r\n this.$l.worldPos = pb.add(this.$inputs.pos, this.cameraPos);\r\n this.$l.prevWorldPos = pb.add(this.$inputs.pos, this.prevCameraPos);\r\n this.$l.clipPos = pb.mul(this.VPMatrix, pb.vec4(this.worldPos, 1));\r\n this.$l.prevClipPos = pb.mul(this.prevVPMatrix, pb.vec4(this.prevWorldPos, 1));\r\n this.clipPos.z = ShaderHelper.farthestClipZ(this, this.clipPos.w);\r\n this.$builtins.position = this.clipPos;\r\n this.$outputs.currentPos = this.clipPos;\r\n this.$outputs.prevPos = this.prevClipPos;\r\n });\r\n },\r\n fragment(pb) {\r\n this.$outputs.color = pb.vec4();\r\n pb.main(function () {\r\n this.$l.motionVector = pb.mul(\r\n pb.sub(\r\n pb.div(this.$inputs.currentPos.xy, this.$inputs.currentPos.w),\r\n pb.div(this.$inputs.prevPos.xy, this.$inputs.prevPos.w)\r\n ),\r\n 0.5\r\n );\r\n this.$outputs.color = pb.vec4(this.motionVector, 0, 1);\r\n });\r\n }\r\n })!;\r\n _skyMVProgram.name = '@TAA_SkyMotionVector';\r\n }\r\n\r\n if (!_skyMVBindGroup) {\r\n _skyMVBindGroup = device.createBindGroup(_skyMVProgram.bindGroupLayouts[0]);\r\n }\r\n\r\n if (!_skyMVBox) {\r\n _skyMVBox = new BoxShape({ size: 2, needNormal: false, needUV: false });\r\n }\r\n\r\n _skyMVBindGroup.setValue('VPMatrix', ctx.camera.viewProjectionMatrix);\r\n _skyMVBindGroup.setValue('prevVPMatrix', ctx.camera.prevVPMatrix!);\r\n _skyMVBindGroup.setValue('cameraPos', ctx.camera.getWorldPosition());\r\n _skyMVBindGroup.setValue('prevCameraPos', ctx.camera.prevPosition!);\r\n\r\n device.pushDeviceStates();\r\n device.setProgram(_skyMVProgram);\r\n device.setBindGroup(0, _skyMVBindGroup);\r\n device.setRenderStates(AbstractPostEffect.getDefaultRenderState(ctx, DEPTH_COMPARE_DEFAULT));\r\n device.setFramebuffer(fb);\r\n _skyMVBox.draw();\r\n device.popDeviceStates();\r\n}\r\n\r\nfunction blitToCurrentColorAttachment(ctx: DrawContext, source: Texture2D): void {\r\n const framebuffer = ctx.device.getFramebuffer();\r\n const destination = framebuffer?.getColorAttachment<Texture2D>(0) ?? null;\r\n new CopyBlitter().blit(source, destination, fetchSampler('clamp_nearest_nomip'));\r\n}\r\n\r\n/** Render the refraction background before LightPass. @internal */\r\nfunction renderSceneColorGrab(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n copyHandle: RGHandle,\r\n copyFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n const copyTex = rgCtx.getTexture<Texture2D>(copyHandle);\r\n const compositor = ctx.compositor;\r\n ctx.compositor = null;\r\n const isolateSceneColorDepth = frame.options.needsTransmissionDepthForSSR;\r\n const savedDepthPrepassAttachment = ctx.depthPrepassAttachment;\r\n const savedMaterialFlags = ctx.materialFlags;\r\n\r\n // The background copy has no surface MRT attachments.\r\n const sceneColorMaterialFlags = ctx.materialFlags & ~SURFACE_MRT_FLAGS;\r\n const sceneColorFramebuffer = copyFramebufferHandle\r\n ? rgCtx.getFramebuffer(copyFramebufferHandle)\r\n : rgCtx.createFramebuffer({\r\n width: copyTex.width,\r\n height: copyTex.height,\r\n colorAttachments: copyTex,\r\n depthAttachment: isolateSceneColorDepth ? ctx.depthFormat : depthTex,\r\n ignoreDepthStencil: false\r\n });\r\n let sceneColorStatePushed = false;\r\n try {\r\n device.pushDeviceStates();\r\n sceneColorStatePushed = true;\r\n device.setFramebuffer(sceneColorFramebuffer);\r\n _scenePass.transmission = false;\r\n if (isolateSceneColorDepth) {\r\n ctx.depthPrepassAttachment = undefined;\r\n _scenePass.clearDepth = DEPTH_CLEAR_VALUE;\r\n _scenePass.clearStencil = 0;\r\n } else {\r\n _scenePass.clearDepth = depthTex ? null : DEPTH_CLEAR_VALUE;\r\n _scenePass.clearStencil = depthTex ? null : 0;\r\n }\r\n ctx.materialFlags = sceneColorMaterialFlags;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n ctx.materialFlags = savedMaterialFlags;\r\n if (isolateSceneColorDepth) {\r\n ctx.depthPrepassAttachment = savedDepthPrepassAttachment;\r\n }\r\n if (sceneColorStatePushed) {\r\n device.popDeviceStates();\r\n }\r\n ctx.compositor = compositor;\r\n }\r\n}\r\n\r\n/** @internal */\r\nexport function renderOpaqueScenePass(\r\n frame: FrameState,\r\n sceneColorTex: Texture2D,\r\n sceneColorCopyTex: Nullable<Texture2D>,\r\n rgCtx: RGExecuteContext,\r\n sceneColorFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n\r\n ctx.materialFlags &= ~(\r\n MaterialVaryingFlags.SCENE_STORE_ROUGHNESS |\r\n MaterialVaryingFlags.SSS_STORE_PROFILE |\r\n MaterialVaryingFlags.SSS_STORE_DIFFUSE |\r\n MaterialVaryingFlags.SCENE_STORE_NORMAL |\r\n MaterialVaryingFlags.SSS_STORE_TRANSMISSION |\r\n MaterialVaryingFlags.SKIN_SSS_STORE\r\n );\r\n\r\n if (ctx.SceneRoughnessTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SCENE_STORE_ROUGHNESS;\r\n }\r\n if (ctx.SceneNormalTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SCENE_STORE_NORMAL;\r\n }\r\n if (ctx.SSS) {\r\n if (ctx.SSSDiffuseTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSS_STORE_DIFFUSE;\r\n }\r\n if (ctx.SSSTransmissionTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SSS_STORE_TRANSMISSION;\r\n }\r\n }\r\n if (ctx.SkinSSSTexture) {\r\n ctx.materialFlags |= MaterialVaryingFlags.SKIN_SSS_STORE;\r\n }\r\n\r\n // Prefer the graph framebuffer; final-target mode has no graph framebuffer.\r\n if (sceneColorFramebufferHandle && !hasSurfaceMRT(ctx)) {\r\n ctx.intermediateFramebuffer = rgCtx.getFramebuffer(sceneColorFramebufferHandle);\r\n } else if (!sceneColorFramebufferHandle && depthTex === ctx.finalFramebuffer?.getDepthAttachment()) {\r\n ctx.intermediateFramebuffer = ctx.finalFramebuffer;\r\n } else {\r\n ctx.intermediateFramebuffer = rgCtx.createFramebuffer({\r\n width: sceneColorTex.width,\r\n height: sceneColorTex.height,\r\n colorAttachments: getLightPassColorAttachments(ctx, sceneColorTex),\r\n depthAttachment: depthTex\r\n });\r\n }\r\n\r\n // Graph passes do not communicate through leftover device state.\r\n ctx.device.pushDeviceStates();\r\n try {\r\n // setFramebuffer may no-op, so reset viewport and scissor explicitly.\r\n ctx.device.setFramebuffer(ctx.intermediateFramebuffer);\r\n ctx.device.setViewport(null);\r\n ctx.device.setScissor(null);\r\n\r\n _scenePass.transmission = false;\r\n _scenePass.renderSky = false;\r\n _scenePass.clearDepth = depthTex ? null : DEPTH_CLEAR_VALUE;\r\n _scenePass.clearStencil = depthTex ? null : 0;\r\n\r\n if (renderQueue.needSceneColor() && sceneColorCopyTex) {\r\n // Seed the main target with the refraction background.\r\n ctx.sceneColorTexture = sceneColorCopyTex;\r\n blitToCurrentColorAttachment(ctx, ctx.sceneColorTexture);\r\n if (hasSurfaceMRT(ctx)) {\r\n // Re-render opaque lists to populate MRT data missing from the copy.\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderTransparent = false;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n }\r\n _scenePass.transmission = true;\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n }\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderTransparent = false;\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n // Restore shared pass flags before the next graph pass.\r\n _scenePass.renderTransparent = true;\r\n _scenePass.renderSky = true;\r\n _scenePass.transmission = false;\r\n ctx.device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** Render sky and fog after opaque geometry. @internal */\r\nexport function renderSkyScenePass(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n sceneColorFramebufferHandle?: RGHandle,\r\n sceneColorNoFog?: Nullable<Texture2D>\r\n): void {\r\n const { ctx } = frame;\r\n const framebuffer = sceneColorFramebufferHandle\r\n ? rgCtx.getFramebuffer(sceneColorFramebufferHandle)\r\n : ctx.finalFramebuffer;\r\n const device = ctx.device;\r\n device.pushDeviceStates();\r\n try {\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n ctx.scene.env.sky.renderSky(ctx);\r\n if (ctx.scene.env.sky.fogPresents) {\r\n // Snapshot between sky and fog. Sky belongs in the copy - a ray that hits\r\n // the sky should read the sky - while fog does not, because the fog a\r\n // screen-space pass would sample lies along the camera ray rather than the\r\n // path it integrates.\r\n if (sceneColorNoFog) {\r\n const source = framebuffer?.getColorAttachment<Texture2D>(0) ?? null;\r\n if (source) {\r\n new CopyBlitter().blit(source, sceneColorNoFog, fetchSampler('clamp_nearest_nomip'));\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n }\r\n }\r\n ctx.scene.env.sky.renderFog(ctx.camera);\r\n }\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** Render transmission, transparency, and OIT over the opaque result. @internal */\r\nexport function renderTransparentScenePass(\r\n frame: FrameState,\r\n rgCtx: RGExecuteContext,\r\n opaqueChainOutput: Nullable<RGHandle>,\r\n sceneColorFramebufferHandle?: RGHandle\r\n): void {\r\n const { ctx, renderQueue } = frame;\r\n const device = ctx.device;\r\n let framebuffer: Nullable<FrameBuffer>;\r\n if (opaqueChainOutput) {\r\n // Opaque effects redirect transparent rendering to their chain output.\r\n const chainTex = rgCtx.getTexture<Texture2D>(opaqueChainOutput);\r\n const depthTex = frame.depthFramebuffer?.getDepthAttachment() as Texture2D;\r\n framebuffer = rgCtx.createFramebuffer({\r\n width: chainTex.width,\r\n height: chainTex.height,\r\n colorAttachments: chainTex,\r\n depthAttachment: depthTex\r\n });\r\n // The chain output has no surface MRT attachments.\r\n ctx.materialFlags &= ~SURFACE_MRT_FLAGS;\r\n } else if (sceneColorFramebufferHandle) {\r\n // Continue in the light pass target when no opaque effect ran.\r\n framebuffer = rgCtx.getFramebuffer(sceneColorFramebufferHandle);\r\n } else {\r\n // Scene color already resides in the final framebuffer.\r\n framebuffer = ctx.finalFramebuffer;\r\n }\r\n device.pushDeviceStates();\r\n try {\r\n // setFramebuffer may no-op, so reset viewport and scissor explicitly.\r\n device.setFramebuffer(framebuffer);\r\n device.setViewport(null);\r\n device.setScissor(null);\r\n // Derive transmission mode instead of inheriting shared pass state.\r\n _scenePass.transmission = renderQueue.needSceneColor();\r\n _scenePass.clearColor = null;\r\n _scenePass.clearDepth = null;\r\n _scenePass.clearStencil = null;\r\n _scenePass.renderOpaque = false;\r\n _scenePass.renderTransparent = true;\r\n _scenePass.renderSky = false;\r\n try {\r\n _scenePass.render(ctx, null, null, renderQueue);\r\n } finally {\r\n _scenePass.renderOpaque = true;\r\n _scenePass.renderSky = true;\r\n }\r\n } finally {\r\n device.popDeviceStates();\r\n }\r\n}\r\n\r\n/** @internal */\r\nfunction renderTransmissionDepthPass(frame: FrameState, rgCtx: RGExecuteContext): void {\r\n renderSceneDepth(frame, frame.depthFramebuffer, rgCtx);\r\n}\r\n\r\n/** Build and execute the Forward+ graph for one frame. @public */\r\nexport function executeForwardPlusGraph(ctx: DrawContext): void {\r\n const device = ctx.device;\r\n const graph = new RenderGraph();\r\n let renderQueue: RenderQueue | null = null;\r\n let frame: FrameState | null = null;\r\n let executor: RenderGraphExecutor<Texture2D> | null = null;\r\n let historyManager: HistoryResourceManager<Texture2D> | null = null;\r\n let historyFrameStarted = false;\r\n let motionVectorFramePrepared = false;\r\n let motionVectorFrameCommitted = false;\r\n\r\n try {\r\n renderQueue = _scenePass.cullScene(ctx, ctx.camera);\r\n\r\n const options = deriveForwardPlusOptions(ctx.scene, ctx.camera, device.type, renderQueue);\r\n options.ssgi &&= supportsSSGIRenderTargets(ctx);\r\n ctx.SSS = options.sss;\r\n\r\n historyManager = ctx.camera.getHistoryResourceManager();\r\n if (!historyManager) {\r\n historyManager = new HistoryResourceManager<Texture2D>(_devicePoolAllocator);\r\n ctx.camera.setHistoryResourceManager(historyManager);\r\n }\r\n if (!options.ssgi) {\r\n historyManager.invalidate(RGHistoryResources.SSGI_SCENE_COLOR);\r\n historyManager.invalidate(RGHistoryResources.SSGI_IRRADIANCE);\r\n historyManager.invalidate(RGHistoryResources.SSGI_SURFACE);\r\n historyManager.invalidate(RGHistoryResources.SSGI_MOMENTS);\r\n }\r\n historyManager.beginFrame();\r\n historyFrameStarted = true;\r\n\r\n const buildResult = buildForwardPlusGraphInternal(graph, ctx, renderQueue, options);\r\n frame = buildResult.frame;\r\n\r\n if (options.motionVectors) {\r\n ctx.camera.prepareMotionVectorFrame(ctx.camera.TAA, ctx.renderWidth, ctx.renderHeight);\r\n motionVectorFramePrepared = true;\r\n } else {\r\n ctx.camera.clearMotionVectorFrame();\r\n }\r\n\r\n const compiled = graph.compile([buildResult.backbuffer]);\r\n\r\n executor = new RenderGraphExecutor(_devicePoolAllocator, ctx.renderWidth, ctx.renderHeight, {\r\n textureAffinityCache: getTextureAffinityCache(ctx.camera, device)\r\n });\r\n\r\n if (ctx.finalFramebuffer) {\r\n const backbufferTex = ctx.finalFramebuffer.getColorAttachments()[0] as Texture2D;\r\n executor.setImportedTexture(buildResult.backbuffer, backbufferTex);\r\n }\r\n if (buildResult.externalDepthImport) {\r\n executor.setImportedTexture(\r\n buildResult.externalDepthImport.handle,\r\n buildResult.externalDepthImport.texture\r\n );\r\n }\r\n historyManager.bindImportedTextures(executor);\r\n\r\n executor.execute(compiled);\r\n historyManager.commitFrame();\r\n historyFrameStarted = false;\r\n if (motionVectorFramePrepared) {\r\n ctx.camera.commitMotionVectorFrame();\r\n motionVectorFrameCommitted = true;\r\n }\r\n } finally {\r\n if (historyFrameStarted) {\r\n historyManager?.discardFrame();\r\n }\r\n if (frame) {\r\n cleanupFrame(frame);\r\n } else {\r\n renderQueue?.dispose();\r\n }\r\n executor?.reset();\r\n if (motionVectorFramePrepared && !motionVectorFrameCommitted) {\r\n ctx.camera.clearMotionVectorFrame();\r\n }\r\n }\r\n}\r\n"],"names":["_scenePass","LightPass","_depthPass","DepthPass","_shadowMapPass","ShadowMapPass","_clusters","_shadowMaskRenderer","ShadowMaskRenderer","_devicePoolAllocator","DevicePoolAllocator","_textureAffinityCaches","WeakMap","getTextureAffinityCache","camera","device","current","get","cache","RGTextureAffinityCache","set","_backDepthColorState","_frontDepthColorState","SURFACE_MRT_FLAGS","MaterialVaryingFlags","SCENE_STORE_ROUGHNESS","SSS_STORE_PROFILE","SSS_STORE_DIFFUSE","SCENE_STORE_NORMAL","SSS_STORE_TRANSMISSION","SKIN_SSS_STORE","getClusteredLight","length","pop","ClusteredLight","freeClusteredLight","cl","push","getCoreMaterial","material","coreMaterial","hasSSSMaterialCore","subsurfaceProfile","hasSkinSSSMaterialCore","skinSSS","renderQueueHasActiveSSS","renderQueue","itemList","lists","opaque","lit","unlit","list","materialList","renderQueueHasActiveSkinSSS","filterActualSSSItemList","items","filter","item","drawable","getMaterial","filterActualSSSMaterialList","filtered","Set","forEach","mat","add","cloneActualSSSListInfo","source","_targetQueue","skinItemList","morphItemList","skinAndMorphItemList","instanceItemList","instanceList","cloneActualSSSBundle","targetQueue","map","info","hasAnyActualSSSItems","renderItems","some","createActualSSSRenderQueue","queue","RenderQueue","sssOpaque","dispose","emptyBundle","target","_itemList","transmission","transparent","transmission_trans","_shadowedLightList","shadowedLights","_unshadowedLightList","unshadowedLights","_sunLight","sunLight","_primaryDirectionalLight","primaryDirectionalLight","_primaryTransmissionLight","primaryTransmissionLight","_needSceneColor","_needSceneDepth","_needSceneColorWithDepth","_drawTransparent","getSurfaceTextureFormat","ctx","caps","getDeviceCaps","textureCaps","supportHalfFloatColorBuffer","getTextureFormatBytes","format","getTextureFormatInfo","size","supportsSSGIRenderTargets","rgba16fBytes","framebufferCaps","maxDrawBuffers","maxColorAttachmentBytesPerSample","shouldStoreSSSDiffuse","sssStrength","sssBlurScale","shouldStoreSSSTransmission","sssTransmissionStrength","getSSSLightingTextureFormat","attachmentCount","surfaceAttachmentCount","colorFormat","surfaceFormat","colorBytes","fullPrecisionBytes","getFullMipLevelCount","width","height","Math","max","floor","log2","hasSurfaceMRT","materialFlags","getLightPassColorAttachments","colorAttachment","attachments","SceneRoughnessTexture","SceneNormalTexture","SSSProfileTexture","SSSParamTexture","SSSDiffuseTexture","SSSTransmissionTexture","SkinSSSTexture","deriveForwardPlusOptions","scene","deviceType","ssr","SSR","env","light","envLight","hasRadiance","ssgi","SSGI","HDR","ssgiIntensity","type","hasIrradiance","sss","SSS","needSceneColor","needSceneColorWithDepth","depthPrepass","motionVectors","hiZ","sceneNormal","sceneRoughness","shadowMask","ssrCalcThickness","gpuPicking","getPickResultResolveFunc","needsTransmissionDepthForSSR","fogPresents","sky","resolveFrameResourceRequirements","options","requirements","motionVector","Error","Number","MAX_SAFE_INTEGER","bytesPerSample","HiZ","screenSpaceShadowMask","validateProducedFrameResources","blackboard","required","FrameResources","MotionVector","SceneNormal","SceneRoughness","ShadowMask","needed","resource","has","requireBuildState","fg","key","producerType","consumerType","value","state","String","SkyUpdateModule","prepare","enabled","setup","graph","frame","ordering","addPass","builder","emit","sideEffect","setExecute","sunLightColor","update","ClusterLightsModule","chainInto","clusteredLight","calculateLightIndex","ShaderHelper","getPreExposure","GPUPickingModule","pickResolveFunc","renderObjectColors","ShadowMapsModule","renderShadowMaps","DepthPrepassModule","writes","LinearDepth","SceneDepthAttachment","result","SSRCalcThickness","mvFormat","depthHandle","createTexture","label","allocationKey","motionVectorHandle","undefined","finalDepthAttachment","finalFramebuffer","getDepthAttachment","externalDepthAttachment","isTexture2D","externalDepthAttachmentHandle","importTexture","graphDepthAttachmentHandle","depthFormat","depthAttachmentOrFormat","depthFramebufferHandle","createFramebuffer","renderWidth","renderHeight","colorAttachments","depthAttachment","ignoreDepthStencil","skyMotionVectorFramebufferHandle","addSubpass","rgCtx","depthFramebuffer","getFramebuffer","renderSceneDepth","renderSkyMotionVectors","renderTransparentMotionVectors","depth","renderDepthAttachment","opaqueLayerHasEffects","compositor","layerHasEnabledEffect","PostEffectLayer","useFinalFramebufferAsIntermediate","ShadowMaskModule","depthPassResult","numShadowLights","numLayers","getLayerCount","maskPassResult","maskDepthHandle","expect","read","maskHandle","arrayLayers","depthTex","getTexture","maskTex","render","layer","attachmentLayer","TransmissionDepthForSSRModule","transmissionDepthResult","currentDepth","depthOut","write","done","createToken","renderTransmissionDepthPass","preLightTransmissionDepthToken","HiZModule","hiZHandle","REVERSE_Z","sizeMode","mipLevels","hiZFramebufferHandle","passCtx","depthFb","hiZTex","HiZFrameBuffer","buildHiZ","HiZTexture","SSSProfileModule","shadowMaskHandle","sssProfileResult","profileHandle","paramHandle","framebufferHandle","shadowMaskTexture","renderForwardSSSProfile","SSSProfile","SSSParam","SceneColorGrabModule","grabResult","copyHandle","copyFramebufferHandle","renderSceneColorGrab","SceneColorCopy","LightPassModule","SceneColor","SSSDiffuse","SSSTransmission","SkinSSS","backbuffer","sssProfileHandle","sssParamHandle","sceneColorCopyHandle","historyManager","history","lightHistoryReadBindings","historySize","ssrTemporal","reflectHistoryHandle","importPreviousIfCompatible","RGHistoryResources","SSR_REFLECT","motionVectorHistoryHandle","SSR_MOTION_VECTOR","name","handle","ssgiHistorySize","irradianceHistoryHandle","SSGI_IRRADIANCE","surfaceHistoryHandle","SSGI_SURFACE","opaquePassResult","binding","sceneColorHandle","sceneRoughnessHandle","sceneNormalHandle","writeSSSDiffuse","writeSSSTransmission","writeSkinSSS","sssLightingAttachmentCount","sssLightingFormat","sssDiffuseHandle","sssTransmissionHandle","skinSSSHandle","sceneColorFramebufferHandle","sceneColorTex","sceneColorCopyTex","renderLightPass","renderOpaqueScenePass","ssgiIrradianceBinding","find","ssgiSurfaceBinding","SSGIIrradianceHistoryTexture","SSGISurfaceHistoryTexture","beginReadScope","texture","endReadScope","lightPassResult","lightPass","SkyPassModule","reads","version","SceneColorNoFog","captureNoFog","skyPassResult","noFog","out","renderSkyScenePass","color","CompositeTailModule","PresentedColor","opaqueChainInput","opaqueChainDeps","opaqueChainResult","buildLayer","input","finalOutput","sceneDepthAttachment","dependencies","historyReads","wroteFinal","opaqueChainRan","renderTransparentScenePass","chainInput","backbufferResidentHandle","chainDependencies","isScreen","endLayerHasEffects","end","transparentChainResult","inputResidesInFinalTarget","transmissionDepthToken","endChainDependencies","chainResult","finalWroteFinal","presentedBackbuffer","dep","outputBackbuffer","needsBlit","sourceTex","blitter","CopyBlitter","srgbOut","blit","fetchSampler","ForwardPlusModules","SkyUpdate","ClusterLights","GPUPicking","ShadowMaps","DepthPrepass","TransmissionDepthForSSR","SceneColorGrab","SkyPass","CompositeTail","DEFAULT_FORWARD_PLUS_MODULES","_defaultForwardPlusPipeline","createForwardPlusPipeline","RenderPipeline","getDefaultForwardPlusPipeline","buildForwardPlusGraph","buildForwardPlusGraphInternal","RGBlackboard","renderQueueDisposed","clusteredLightReleased","sunLightRestored","OrderingScope","getHistoryResourceManager","pipeline","renderPipeline","collectRequirements","mergeFrameResourceRequirements","build","presented","externalDepthImport","lights","renderPass","pushDeviceStates","shadow","popDeviceStates","profileFramebuffer","profileTexture","paramTexture","normalTexture","depthTexture","sssRenderQueue","savedMaterialFlags","savedCompositor","savedTransmission","savedRenderOpaque","renderOpaque","savedRenderTransparent","renderTransparent","savedClearColor","clearColor","savedClearDepth","clearDepth","savedClearStencil","clearStencil","savedCommandBufferReuse","commandBufferReuse","savedProfileTexture","savedParamTexture","savedNormalTexture","profileFlags","setFramebuffer","Vector4","zero","releaseIntermediateFramebuffer","intermediateFramebuffer","releaseDepthFramebuffer","disposeRenderQueue","releaseClusteredLight","restoreSunLight","cleanupFrame","existingDepthFb","motionVectorTex","transmissionOverride","console","assert","originDepth","encodeDepth","getColorAttachments","DEPTH_CLEAR_VALUE","createColorState","setColorMask","forceColorState","forceCullMode","renderBackface","motionVectorTexture","linearDepthTexture","depthPrepassAttachment","_skyMVProgram","_skyMVBindGroup","_skyMVBox","motionVectorOnly","fb","buildRenderProgram","vertex","pb","$inputs","pos","vec3","attrib","VPMatrix","mat4","uniform","prevVPMatrix","cameraPos","prevCameraPos","main","$l","worldPos","prevWorldPos","clipPos","mul","vec4","prevClipPos","z","farthestClipZ","w","$builtins","position","$outputs","currentPos","prevPos","fragment","sub","div","xy","createBindGroup","bindGroupLayouts","BoxShape","needNormal","needUV","setValue","viewProjectionMatrix","getWorldPosition","prevPosition","setProgram","setBindGroup","setRenderStates","AbstractPostEffect","getDefaultRenderState","DEPTH_COMPARE_DEFAULT","draw","blitToCurrentColorAttachment","framebuffer","destination","getColorAttachment","copyTex","isolateSceneColorDepth","savedDepthPrepassAttachment","sceneColorMaterialFlags","sceneColorFramebuffer","sceneColorStatePushed","setViewport","setScissor","renderSky","sceneColorTexture","sceneColorNoFog","renderFog","opaqueChainOutput","chainTex","executeForwardPlusGraph","RenderGraph","executor","historyFrameStarted","motionVectorFramePrepared","motionVectorFrameCommitted","cullScene","HistoryResourceManager","setHistoryResourceManager","invalidate","SSGI_SCENE_COLOR","SSGI_MOMENTS","beginFrame","buildResult","prepareMotionVectorFrame","TAA","clearMotionVectorFrame","compiled","compile","RenderGraphExecutor","textureAffinityCache","backbufferTex","setImportedTexture","bindImportedTextures","execute","commitFrame","commitMotionVectorFrame","discardFrame","reset"],"mappings":"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"}
|