--- title: BasePass修改 date: 2026-05-03 00:00:00 excerpt: 强制 PrePass、阴影 Only 材质、X2Multiply 雾效等 BasePass 层面修改 tags: - ARC - Rendering - BasePass rating: ⭐ --- # BasePass 修改 返回 [[Rendering]] ## 概述 ARC 引擎在 BasePass 层面做了多项针对性修改,包括强制 Early-Z 预通道、阴影专用材质和自定义混合模式的雾效处理。 ## 1. 阴影专用材质(RED_MASKED_SHADOW_ONLY) 让材质只产生阴影投射而不渲染可见像素: ```hlsl #if RED_MASKED_SHADOW_ONLY clip(-1); // 直接丢弃像素 #endif ``` 用于格斗游戏中只需要地面阴影但不需要渲染实体的辅助网格。 ## 2. 强制 Early-Z(EARLY_Z_PASS_FORCED) 由 [[自定义材质属性]] 中的 `bForcedPrepass` 控制,强制特定材质走 Early-Z PrePass: ```cpp // BasePassRendering.cpp if (Material.bForcedPrepass) { // 强制深度 Pass,提前剔除被遮挡像素 // 减少 OverDraw 对卡通渲染管线的性能影响 } ``` 标记来源:ASW / Wizcorp (2022)。 ## 3. X2Multiply 雾效 为 `BLEND_X2Multiply` 混合模式提供正确的雾效混合: ```hlsl #elif MATERIALBLENDING_X2MULTIPLY // X2Multiply 的中性色是 0.5(不是 0 或 1) half3 FoggedColor = lerp( float3(0.5, 0.5, 0.5), Color, Fogging.aaa * Fogging.aaa); Out.MRT[0] = half4(FoggedColor, Opacity); ``` 标准 Multiply 中性色为 1.0,X2Multiply 中性色为 0.5。 ## 4. PixelDepthOffset 修复 修复 PC 平台 PixelDepthOffset 的噪声问题: ```hlsl // MaterialTemplate.ush DeviceDepth = lerp( DeviceDepth, MaterialParameters.SvPosition.z, step(PixelDepthOffset, 0)); // PDO <= 0 时使用原始深度 ``` ## 关联文档 - [[自定义材质属性]] — `bForcedPrepass` 和 `BLEND_X2Multiply` - [[RED自定义数据通道]] — BasePass 中 CustomData 的写入 ## 修改文件列表 | 文件 | 修改类型 | |------|---------| | `Shaders/Private/BasePassPixelShader.usf` | 阴影 Only、X2Multiply 雾效 | | `Source/Runtime/Renderer/Private/BasePassRendering.cpp` | 强制 PrePass、X2Multiply BlendState | | `Shaders/Private/MaterialTemplate.ush` | PDO 修复 |