我的问题是标题中写的是什么。这个术语“顶点颜色”出现很多。我很难理解这一点。
例如:
3D空间上的顶点不是简单点吗?如果是这样,一个点怎么能有颜色?还是这种“颜色”意味着其他?
虚幻引擎的材质编辑器中有一个“顶点颜色”节点。
有人可以阐明我的问题吗?当我搜索“什么是顶点颜色”时,找不到任何有用的东西,但是文档对我来说太技术性了。
我的问题是标题中写的是什么。这个术语“顶点颜色”出现很多。我很难理解这一点。
例如:
3D空间上的顶点不是简单点吗?如果是这样,一个点怎么能有颜色?还是这种“颜色”意味着其他?
虚幻引擎的材质编辑器中有一个“顶点颜色”节点。
有人可以阐明我的问题吗?当我搜索“什么是顶点颜色”时,找不到任何有用的东西,但是文档对我来说太技术性了。
Answers:
当您拥有完全纹理化的3d网格时,顶点颜色并不重要。但是,当您拥有无纹理但有色的网格时,它会变得很有趣。在这种情况下,您可以为每个顶点分配颜色。然后,着色器将通过在三个顶点的颜色之间进行插值来为多边形的每个像素着色。
与纹理结合使用时,顶点颜色有时也可能很有趣。当您想使用诸如Gouraud Shading之类的着色算法时,只需计算每个顶点上的光强度,将光颜色分配给该顶点作为顶点颜色,然后在渲染纹理时将每个纹理像素的颜色值乘以插值的颜色。这使您可以在顶点着色器而不是像素着色器中计算光源。这通常要快得多,因为顶点着色器通常执行的频率要低得多。
从理论上讲,“顶点颜色”(Vertex Color)允许为模型着色,而不必理会纹理。这在CAD中很常见。
实际上,它只是一个插槽,您可以用来将数据推入顶点,然后在顶点着色器中使用该插槽执行疯狂的工作。
“不是3D空间上的顶点简单点吗?”
刚开始使用3D时,我就是这么想的。我很快就知道自己错了。
您可以将顶点视为一个数据斑点,它构成您要在屏幕上绘制的三角形的一个角(“角”部分或“三角形”,“绘制”或“屏幕”部分都不总是正确的) )。位置是我们称为“顶点”的数据Blob的一个-可选-方面。
通过将其他数据附加到顶点,您可以做很多事情。最著名的示例是,您可以添加uv坐标在该三角形上绘制纹理。如果只有一点,您(通常)无法决定要在三角形上绘制纹理的哪一部分-您也需要纹理坐标。
关于该斑点的其他标准实例包括法线和切线。重要的是它们都是可选的,包括位置。“顶点颜色”只是这些可选输入之一,您可以使用或滥用它们在屏幕上创建漂亮的图片。
顶点可以有颜色,就像它的法线一样,它是一种属性。
在3d环境中,三角形根据其顶点的颜色信息进行着色。最接近顶点A的片段获得其颜色,最接近顶点B的片段获得其B的色元,颜色在2之间进行插值。
它的工作方式与逐顶点照明相同
这是一种无需使用纹理即可向模型添加颜色的简便方法。
这里已经有了可靠的答案-我只想用一种更常见的方式来了解一下您所使用的顶点颜色:
单个批处理/绘制调用中的对象颜色(或其他属性)不同。
您将看到它用于渲染粒子系统,文本和批处理(通常是图集)的精灵。
想象一下,您有一个粒子发射器,该粒子发射器以随机的初始颜色生成粒子,或者在粒子的整个生命周期中渐变为0 alpha。如果要使用着色器制服发送此颜色数据,则需要在其自己的绘制调用中绘制每个不同颜色的粒子,这会使粒子系统更加昂贵。相反,我们可以将这些颜色烘焙到粒子的顶点数据中,然后在一次调用中将整个批处理一起渲染。
Unity似乎将这种技术用于粒子颜色变化,以及为一批一起渲染的TextMesh或Sprites中的各个字符着色。
我相信您可以在几何实例化方面做类似的事情,但是我不知道两者在性能上如何比较。今天,通过顶点颜色进行这种类型的实例调整可能更多地是为了支持像某些移动设备一样支持OpenGL 3.1 / DX9之前的硬件,而不是现代PC的最佳实践。我将欢迎那些通过批处理和实例化完成更多性能调整的人发表评论,以帮助弄清这些技术是否已为此目的取代了顶点颜色。:)