如何使用着色器添加色带
How to add color banding with shader
这听起来很奇怪。但我正在尝试复制一个旧的 dos 16 位游戏。游戏有一些非常粗糙的渐变,有一些漂亮的色带。我想复制那些乐队。
当我实现着色器时,它显然可以非常平滑地渲染渐变。哪个看起来不错但不是正宗的。我想知道如何在片段着色器中伪造这些条带。什么样的算法留下乐队。
您可以尝试 "bin" 颜色值。通常 RGB 的值介于 0 和 255 之间(如果您使用浮点数,则为 0-1,但以 256 步为单位)。尝试将其减少到 16 个步骤。所以 0 到 16 之间的一切都变成 0,16 到 32 之间的一切都变成 16,等等。在代码中它会是这样的:floor(color / 16)*16
.
您可以尝试使用 4444 渲染目标,上面应该有可见的条带。
如果这不能提供足够的控制,那么您可以使用 RGB 值作为对带有点过滤的 3D 纹理的查找。 3D 纹理中的条目可用于定义任意有限的调色板。
这听起来很奇怪。但我正在尝试复制一个旧的 dos 16 位游戏。游戏有一些非常粗糙的渐变,有一些漂亮的色带。我想复制那些乐队。
当我实现着色器时,它显然可以非常平滑地渲染渐变。哪个看起来不错但不是正宗的。我想知道如何在片段着色器中伪造这些条带。什么样的算法留下乐队。
您可以尝试 "bin" 颜色值。通常 RGB 的值介于 0 和 255 之间(如果您使用浮点数,则为 0-1,但以 256 步为单位)。尝试将其减少到 16 个步骤。所以 0 到 16 之间的一切都变成 0,16 到 32 之间的一切都变成 16,等等。在代码中它会是这样的:floor(color / 16)*16
.
您可以尝试使用 4444 渲染目标,上面应该有可见的条带。
如果这不能提供足够的控制,那么您可以使用 RGB 值作为对带有点过滤的 3D 纹理的查找。 3D 纹理中的条目可用于定义任意有限的调色板。