【问题标题】:Direct3D11 Pixel Shader InterpolationDirect3D11 像素着色器插值
【发布时间】:2017-05-01 14:31:57
【问题描述】:

我正在尝试在两种颜色之间创建一个简单的过渡。所以一个四边形的渲染,顶部边缘颜色为#2c2b35,底部颜色为#1a191f。当我通过简单的像素着色器将颜色应用于顶点并对其进行插值时,我得到了色带效果,我想知道是否有一个选项可以在没有一些高级像素着色器抖动技术的情况下消除这种效果。

我附加了一个渲染的a picture,其中左侧部分在我的应用程序中渲染,右侧部分在 Photoshop 中渲染,并选中了“抖动”选项。

提前致谢。

【问题讨论】:

    标签: gradient directx-11 pixel-shader dithering


    【解决方案1】:

    条带是每个渲染引擎在某个时候都必须处理的问题。

    在开始实施抖动之前,您应该首先确认您正在遵循正确的 srgb 管道。 (https://en.wikipedia.org/wiki/SRGB)

    要正确 SRGB: RGBX8 中的交换链和渲染表面必须包含 SRGB 值。最简单的方法是创建一个 XXXX_UNORM_SRGB 格式的渲染目标视图。 纹理必须在适当时使用 UNORM_SRGB 格式视图(反照率贴图),如果不适当则使用 UNORM(法线贴图) 像光照这样的着色器计算必须在线性空间中。

    使用正确格式的纹理和渲染目标将在读写时为您执行转换,但对于常量,您必须手动进行。例如在 #2c2b35 中:0x2c 在 srgb 44(0.1725) 中,但线性值为 0.025

    要进行渐变,您必须在着色器的线性空间中进行,并让渲染目标在写入时将其转换回 srgb。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-16
      • 2017-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多