From ca0e31b86a2b00f5ad1510c686a75240d55ed76c Mon Sep 17 00:00:00 2001 From: UC-RX0 Date: Mon, 29 Jun 2026 10:07:53 +0800 Subject: [PATCH] fix(rendering): add planar shadow rendering support for new render pipeline The new render pipeline ForwardPass incorrectly used TRANSPARENT_OBJECT and RENDER_TRANSPARENT for the planar shadow queue, causing shadow casters to never match. scene-culling.ts also filtered out PLANAR_SHADOW via kDrawMask. This change: - Adds PLANAR_SHADOW to kDrawMask in scene-culling.ts - Fixes planar shadow queue in forward-pass.ts to use RENDER_OPAQUE with OPAQUE_OBJECT/CUTOUT_OBJECT - Adds PLANAR_SHADOW and SHADOW_CASTER flags for correct model filtering Fixes: #19158 --- cocos/rendering/custom/scene-culling.ts | 2 +- cocos/rendering/post-process/passes/forward-pass.ts | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cocos/rendering/custom/scene-culling.ts b/cocos/rendering/custom/scene-culling.ts index 127074b8862..b53c35118f4 100644 --- a/cocos/rendering/custom/scene-culling.ts +++ b/cocos/rendering/custom/scene-culling.ts @@ -300,7 +300,7 @@ export class SceneCulling { enableLightCulling = true; readonly kFilterMask = SceneFlags.SHADOW_CASTER | SceneFlags.REFLECTION_PROBE; - readonly kDrawMask = SceneFlags.OPAQUE | SceneFlags.MASK | SceneFlags.BLEND; + readonly kDrawMask = SceneFlags.OPAQUE | SceneFlags.MASK | SceneFlags.BLEND | SceneFlags.PLANAR_SHADOW; readonly kAllMask = this.kFilterMask | this.kDrawMask; resetPool (): void { diff --git a/cocos/rendering/post-process/passes/forward-pass.ts b/cocos/rendering/post-process/passes/forward-pass.ts index d3beae759a8..0fcb54069eb 100644 --- a/cocos/rendering/post-process/passes/forward-pass.ts +++ b/cocos/rendering/post-process/passes/forward-pass.ts @@ -81,12 +81,12 @@ export class ForwardPass extends BasePass { passContext.addSceneLights(forwardAddQueue, camera); const shadowInfo = ppl.pipelineSceneData.shadows; if (camera.scene?.mainLight && shadowInfo.enabled && shadowInfo.type === ShadowType.Planar) { - pass.addQueue(QueueHint.RENDER_TRANSPARENT, 'planar-shadow') + pass.addQueue(QueueHint.RENDER_OPAQUE, 'planar-shadow') .addSceneOfCamera( camera, new LightInfo(camera.scene?.mainLight), - SceneFlags.TRANSPARENT_OBJECT | SceneFlags.SHADOW_CASTER - | SceneFlags.GEOMETRY, + SceneFlags.SHADOW_CASTER | SceneFlags.PLANAR_SHADOW + | SceneFlags.OPAQUE_OBJECT | SceneFlags.CUTOUT_OBJECT, ); } passContext.forwardPass = this;