展开网格时,将每个边缘标记为接缝有什么缺点?


9

我是一位试图学习一些基本3D建模的程序员。我对基本的几何建模相当满意,并且可以打开和构造简单的模型。但是我有一个问题

关于展开模型,所有教程都强调在展开网格时需要标记尽可能少的接缝。我的问题是,为什么?我猜想这对具有建模经验的人来说是超级显而易见的,但对我而言却不是(鉴于我的贴图工作主要限于AO或法线贴图的生成)。

我猜想这完全是在编辑漫反射纹理时保留模型的形状吗?这是您不想简单地剪切每个边缘并单独布置所有面的唯一原因吗?

我意识到我在问这个问题时表现出对主题的完全无知,所以道歉,但是有时超级显而易见的东西最难找到answers的答案。

Answers:


10

模型中的每个“ UV接缝”(即模型的面孔连续且在同一边缘的UV贴图被切掉的每个位置)对于艺术家和硬件都是一个问题。

  • 这使得难以正确构造模型纹理。当直接以2D而不是3D绘画程序对纹理进行编辑时,尤其如此。这样的接缝越少,从精神上将纹理包裹在模型周围就越容易。
  • 虽然简单的混合可以适用于漫反射纹理和某些其他纹理类型,但是您必须非常小心切线空间法线贴图。对于这些,您不能仅在X和Y(通常在纹理查看器中映射到R和B)值之间线性混合(插值),而不会使生成的法向矢量反归一化并且接缝变得可见(通常为较暗的颜色) “线”)在某些光照条件下。另一方面,尝试将其固定在纹理中并使两个UV边缘的值彼此靠近或相同可能会导致接缝变得可见,因为与模型的其余部分相比,接缝不自然地平坦
  • 像素着色器必须在每个不连续处都做更多的工作(即使现在通常在硬件中抽象出来),并且要到达不同的内存位置以从中获取纹理数据(通常是硬件中优化程度较低的“代码路径”) ,与通常使用空间上接近的纹理值相反。
  • 自动进行贴图(很少有商店可以负担得起手动修改生成的低分辨率纹理)将破坏您和您的艺术家为使接缝在默认分辨率下不可见而进行的所有艰苦工作。

就是说:如果您的艺术风格要求模型的面彼此明显不同,并且它们仅具有“硬”的显式边缘,那么这都不是问题。


关于像素着色器中不连贯内存访问的绝佳之处。像这样跳动一个纹理会真的浪费纹理缓存。
Bob Somers

@Bob Somers:公平地说,除非您正在针对低端或移动平台进行编程,或者已经将GPU的使用负担加到最大,否则这不会对性能造成太大影响。
马丁·索卡

好点马丁。不过,过去一年来我一直在GPGPU领域工作,编写对性能敏感的代码,所以我认为这是一个有趣的观点,但现在并不明显。:)
Bob Somers

6

产生未包裹纹理边缘伪像的两个主要原因。

正如您所提到的,如果接缝没有意义,那么艺术家很难理解他们的2D编辑将如何环绕3D模型。在使用某种装箱算法将每个面分开并优化放置的情况下,几乎不可能手动编辑纹理。希望这些天他们正在使用某种3D绘画工具,但是直接在2D纹理上进行编辑还是不错的(而且是必要的!)。

另一个问题(边缘伪像)可能会由于纹理采样的浮点精度限制而出现。假设所有面孔都在黑色背景上断开连接。由于纹理坐标中或视频卡采样期间的浮点错误,很有可能这些黑边像素有时会在过滤纹理时出现或混入。因为这会影响每张脸,所以您会产生这种奇怪的背景-伪像-线框效果。消除此问题的唯一方法是人为地稍微缩小纹理坐标,但是每张脸看起来都会很奇怪,因为它在纹理角度上并不会与其邻居完全对齐。

最小化接缝的好处是,在模型中,与(未使用的)背景相邻的边的边缘较少,因此,这些伪影爬入的位置更少。大多数面在相邻的面中紧邻其相邻面。实际模型,因此边缘伪像实际上是纹理中的相邻像素,您将永远不会注意到它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.