0

我的 3d 应用程序在渲染到 RGBA8 渲染目标时出现色带伪影。我怎样才能摆脱它们(无需更精确地渲染到缓冲区)?

更新

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

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

截图比较: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。

4

1 回答 1

0

如果您看到条带,那么在您的渲染管道中的某个时刻,您的一项计算的精度并不像您想象的那么高精度。

例如,您可能有 32 位纹理、32 位光源颜色等,但如果您的漫反射计算已经在位深度与速度之间进行了权衡,那么您将看到漫射光下的马赫条带表面。

您是否至少缩小了条带的来源(通过一次切换到单个光源,用漫反射颜色替换纹理,消除镜面反射等?)根据您给我们的信息,几乎没有什么可以做帮助。一些屏幕截图至少会有所帮助。

于 2013-02-01T19:57:00.540 回答