【发布时间】:2015-05-19 03:06:18
【问题描述】:
我希望重现此tutorial 的发光效果,如果我理解得很好,我们将第一张图像转换为“alpha 纹理”(黑白),并模糊 (rgb * a) 纹理。
如何创建这种 alpha 纹理,使某些颜色变为白色,而另一种变为黑色?我找到了这个:How to render a texture with alpha?,但我真的不知道如何使用这些答案。
谢谢
【问题讨论】:
我希望重现此tutorial 的发光效果,如果我理解得很好,我们将第一张图像转换为“alpha 纹理”(黑白),并模糊 (rgb * a) 纹理。
如何创建这种 alpha 纹理,使某些颜色变为白色,而另一种变为黑色?我找到了这个:How to render a texture with alpha?,但我真的不知道如何使用这些答案。
谢谢
【问题讨论】:
您似乎误解了该图表向您显示的内容。它实际上是一个纹理,但(a) 显示 RGB 颜色,(b) 显示 alpha 通道。 (c) 显示了将 RGB 乘以 A 时会发生什么。
Alpha 实际上并不是“黑白”,它是一个抽象概念,数值范围介于 0.0 和 1.0 之间。为了让人类大脑理解它,它将其解释为黑色 (0.0) 和白色 (1.0)。实际上,alpha 是您想要的任何值,并且与颜色无关(尽管它可以用来做一些颜色)。
Alpha 通道通常由后处理图像过滤器生成,该过滤器会寻找明显高于平均亮度的纹理区域。在现代图形引擎中使用 HDR,并且场景中任何颜色太亮而无法在监视器上显示的部分都是发光的候选者。这种辉光的强度取决于该点的光照比显示器所能显示的亮度。
然而,在这种情况下,它似乎是人类创造的。将 alpha 通道想象成一个蒙版,一些艺术家看着 UFO 并决定在图 (b) 中出现的非黑色区域应该发光,因此分配了一个非零 alpha 值(alpha = 1.0 发光最亮)。
顺便说一句,您不应该模糊 alpha 蒙版。您想模糊 RGB * A 的 结果。如果您只是模糊了 alpha 蒙版,那么这根本不像发光。这个想法是模糊 UFO 应该发光的发光部分,然后将其添加到基本 UFO 颜色之上。
【讨论】:
a) 和b) 的问题,如果你使用静态发光贴图(艺术家想出的),它会做一次。但是,现代图形引擎使用片段着色器中的图像处理过滤器动态地执行此操作。这肯定会使用帧缓冲区对象将片段着色器的结果存储在渲染缓冲区或纹理中来完成。你是对的,传统的帧缓冲区包含颜色、深度和模板(有时甚至是累积),但在现代 OpenGL 和 GL ES 中,你可以使用帧缓冲区对象定义自己的。