在3D模型的渲染中,除了贴图属性外,顶点颜色也是一种常见的材质属性。顶点颜色是指通过给模型的顶点分配颜色值来定义模型表面的颜色。
顶点颜色通常以顶点数据的形式储存,并且与每个顶点的位置信息相对应。在渲染过程中,顶点颜色会根据其在三角形内的位置插值,从而确定整个三角形内各个点的颜色。
顶点颜色是介于 0 和 1(或 0 和 255)之间的值,可以添加到网格的顶点。大多数工具和引擎都支持,包括 FBX 文件格式。我相信 OBJ 不支持顶点颜色。从技术上讲,您可以拥有这些值的“无限”数量。但通常的做法是将其限制为 RGBA 值,因此每个顶点 4 个值。因此,我们称之为顶点颜色。
让我们以立方体为例。它有 8 个顶点。每个顶点都有一个数字,当你只是建模时你看不到这个数字,但它确实需要这个数字,以便3D世界和文件格式知道什么顶点在哪里以及所有东西是如何连接的。每个顶点编号都会添加一定数量的值,即 RGBA。然后,我们可以使用我们的 3D 工具调整这些值。见下图。
- 左侧立方体没有顶点颜色数据,灰色也是如此(Modo中的默认表示形式)。
- 中间立方体确实有顶点颜色数据,但它全是黑色的。所以所有顶点上的 0,0,0,0。
- 右边的立方体也是全黑的。除了角落里的那个,是红色的。所以1,0,0,0。
2. 顶点颜色的应用
您经常会看到这种遮罩方法与树叶和树木着色器一起使用。其中红色通道控制整棵树的风摇曳效果。蓝色通道控制树枝的摇摆效果。绿色通道控制着树叶的颤动。但是,顶点颜色也用于地板和墙壁的纹理混合,在着色器中创建着色渐变控件,VFX着色器效果,创建廉价的AO替代品等。
为了正确使用着色器的顶点着色,通常需要一些方便的工具。每个 3D 软件工具都有不同的方法,因此您必须了解它们如何适用于您选择的 3D 工具。您将希望能够执行以下操作:
- 用一种也适用于通道遮罩的颜色填充整个对象。好让它全黑。
- 线性渐变,也适用于通道遮罩。与上面的树示例一样,通道红色。
- 带通道遮罩的球形或圆柱形渐变。就像上面的树示例一样,通道绿色。
- 使用也支持通道遮罩的画笔进行常规绘画。
- 能够调整单个顶点上的值或对所选顶点进行分组。在您需要确切数字的时刻。
GLTF编辑器 是一款集在线查看、材质修改、模型尺寸修改、模型材质属性修改、重置原点、模型合批等功能的在线GLTF模型编辑工具,可以通过模型材质属性修改来设置模型顶点颜色。
在GLTF编辑器中,是通过通道遮罩的颜色填充整个对象的方式来设置模型颜色,顶点颜色设置的效果就是让模型全黑。如下图所示:
3、顶点颜色优缺点
使用顶点颜色作为材质属性还有有几个优势:
- 运行效率高:相比于贴图属性,在渲染过程中使用顶点颜色可以节省内存和计算资源。因为不需要加载和解析额外的贴图文件,同时也不需要进行贴图坐标的映射计算。
- 灵活性强:使用顶点颜色作为材质属性可以直接控制每个顶点的颜色,使得我们能够绘制更加精确和细致的颜色变化。这对于特定的绘制需求或者动态着色效果非常有用。
- 实时渲染支持好:顶点颜色的使用对于实时渲染引擎来说十分理想,因为它能够以较高的效率和实时性呈现模型。
顶点颜色通常通过将红、绿、蓝和透明度(可选)数值分别分配给每个顶点来定义。这些数值可以表示RGB颜色空间中的各种颜色。例如,顶点颜色(1, 0, 0)表示纯红色,(0, 1, 0)表示纯绿色,(0, 0, 1)表示纯蓝色。
要创建顶点颜色,需要为每个顶点指定相应的颜色值。在渲染过程中,引擎会基于顶点之间的插值自动计算并渲染其他颜色值。
总体而言,顶点颜色是一种灵活且高效的材质属性,可以用于实现各种实时渲染效果,并提供更好的性能和控制力。