PostProcessing 透明问题(TTA抗锯齿篇)

PostProcessing 透明问题(TTA抗锯齿篇) 问题所在问题1DoTemporalAA函数主抗锯齿逻辑第 367 行TemporalAA.hlslL355-L367half3 accum (historyQuality 2) ? SampleBicubic5TapHalf(_TaaAccumulationTex, historyUv, _TaaAccumulationTex_TexelSize.xyzw) : SceneToWorkingSpace(SAMPLE_TEXTURE2D_X(_TaaAccumulationTex, sampler_LinearClamp, historyUv).xyz); half3 clampAccum (clampQuality 3) ? ClipToAABBCenter(accum, boxMin, boxMax) : clamp(accum, boxMin, boxMax); // Discard (some) history when outside of history buffer (e.g. camera jump) half frameInfluence ((historyQuality 1) any(abs(uv - 0.5 velocity) 0.5)) ? 1 : _TaaFrameInfluence; half3 workingColor ApplyHistoryColorLerp(clampAccum, colorCenter, frameInfluence); half3 dstSceneColor WorkingSpaceToScene(workingColor); return half4(max(dstSceneColor, 0.0), 1.0);问题2DoCopy函数复制历史帧第 378 行TemporalAA.hlslL371-L379half4 DoCopy(Varyings input) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); float2 uv UnityStereoTransformScreenSpaceTex(input.texcoord.xy); half3 color SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_PointClamp, uv).xyz; return half4(color, 1.0f); }修改方案TAA 的颜色空间转换YCoCg、Perceptual space、AABB 裁剪、方差钳制等都是针对 RGB 三通道设计的Alpha 作为独立的标量不参与这些处理。所以 Alpha 需要独立地从源纹理和历史纹理中采样并混合。修改1DoCopy函数第 371-379 行保留完整的四通道采样结果即可hlslhalf4 DoCopy(Varyings input) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input); float2 uv UnityStereoTransformScreenSpaceTex(input.texcoord.xy); return SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_PointClamp, uv); }修改2DoTemporalAA函数末尾第 367 行附近将返回语句改为同时混合当前帧和历史帧的 Alphahlsl// --- 第 367 行原来 return half4(max(dstSceneColor, 0.0), 1.0); // --- 改为以下代码 --- // 采样当前帧的 Alpha half currentAlpha SAMPLE_TEXTURE2D_X(_BlitTexture, sampler_PointClamp, uv).a; // 采样历史帧的 Alpha half historyAlpha SAMPLE_TEXTURE2D_X(_TaaAccumulationTex, sampler_LinearClamp, historyUv).a; // 用相同的 frameInfluence 混合 Alpha half blendedAlpha saturate(lerp(historyAlpha, currentAlpha, frameInfluence)); return half4(max(dstSceneColor, 0.0), blendedAlpha);关键说明方面说明frameInfluence与 RGB 共用同一个混合权重小值→更多历史帧大值(1.0)→丢弃历史(如镜头跳转时)saturate()确保 Alpha 值在 [0, 1] 范围内uvvshistoryUv当前 Alpha 采自当前像素位置历史 Alpha 采自运动向量反推的历史位置TAA 的 UV与 UberPost 不同TAA 不使用SCREEN_COORD_APPLY_SCALEBIAS直接用uv即可