我的 3d 应用程序在渲染到 RGBA8 渲染目标时出现色带伪影。我怎样才能摆脱它们(无需更精确地渲染到缓冲区)?
更新
渲染过程基本上是:
1)将几何体渲染到纹理
2)应用全屏后处理步骤(对比度、亮度、饱和度、色调映射和伽马校正)
这是两个屏幕截图,一个使用 rgba8 目标,另一个使用 rgba16f 目标。两者都在禁用后处理步骤的情况下呈现。如您所见,rgba8 渲染中存在条带伪影。
几何体由三个变形平面组成,这些平面使用以下着色器和启用的添加混合进行绘制:
float4 PlaneFP(VSOutput In) {
float3 normal = normalize(In.WorldNormal);
float3 eyeDirection = normalize(In.WorldPosition - scene.EyePosition.xyz);
float falloff = 1.0f - saturate(dot(normal, -eyeDirection));
falloff = pow(falloff, 4.0f);
return float4(MaterialDiffuse * falloff, 1.0f);
}
如果我启用后处理步骤,则条带伪影会更加明显。使用 rgba16f 时,条带消失,但我正在为 PS3 开发此应用程序,它无法处理带有浮点目标的 MSAA。