RGBA8的色带伪影

时间:2013-02-01 19:32:35

标签: 3d rendering shader

我的3d应用程序在渲染RGBA8渲染目标时会出现色带瑕疵。如何摆脱它们(无需更精确地渲染缓冲区)?

更新

渲染过程基本上是:
1)将几何体渲染到纹理
2)应用全屏后处理步骤(对比度,亮度,饱和度,色调映射和伽马校正)

这是两个截图,一个使用rgba8目标,另一个使用rgba16f目标。两者都在禁用后处理步骤的情况下呈现。如您所见,rgba8渲染中存在条带伪影。

screenshots comparison: rgba8 - rgba16f

几何体由三个变形平面组成,这些平面使用以下着色器绘制并启用添加剂混合:

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。

1 个答案:

答案 0 :(得分:0)

如果你看到条带,那么在渲染管道的某个点上,你的一个计算的精度并不像你想象的那么高。

例如,您可能有32位纹理,32位颜色用于光源等,但如果您的漫反射计算已经对比特深度的速度进行权衡,那么您将看到马赫带漫射光的表面。

你是否至少缩小了条带的来源(通过一次切换到单独的光源,用漫反射颜色替换纹理,去除镜面反射等?)用你给我们的东西,几乎没有可以做到帮助。一些屏幕截图至少会有一些帮助。