我试图理解为什么在3D Studio中平滑的网格(修改器/平滑器)在该过程之前或之后最终具有相同数量的顶点/面以及完全相同的几何形状。

在下面的示例中,两个网格都具有32个顶点和60个面。





尽管我有编程方面的经验(c ++和C#),我是计算机图形学的初学者。因此,我的期望是,平滑网格的平滑外观将需要其他顶点,即三角形的细分,以最终获得更详细的最终网格。但是,事实似乎并非如此。

因此我问:

1)在不增加网格几何细节的情况下如何进行平滑处理?

2)与原始网格相比,平滑处理是否至少增加了分配/用于存储新网格的内存?

超级欢迎解释,但是引用(学术界与否)也表示赞赏。

评论

这里也不是超级有经验的人,但是我想您可以在其中使用不同的着色器。兰伯特看起来像右边的那个。但是,古兰德将平均它们并使它看起来更平滑。 prosjekt.ffi.no/unik-4660/lectures04/chapters/jpgfiles / ...

谢谢你的评论!坦白说,我唯一要做的就是应用“平滑器”修改器。之前没有添加任何着色器,之后也没有添加任何着色器。

历史术语是“这就是平面和古拉乌德阴影之间的区别”。实际上,这与joojaa
解释的法线有关
您在屏幕截图中使用了什么软件? THX :)

#1 楼

在这种情况下,“平滑”只是使顶点处的曲面法线以相同的方式进行插补,因此看起来很平滑。

1)如何在不增加网格几何细节的情况下进行平滑处理?

人眼实际上只能看到物体边缘以外的曲率。他们所能做的只是近似平滑度并处理梯度斜率。因此,拥有一个连续的磁场确实会给人一种光滑的感觉。但是,眼睛对颜色的突然变化极为敏感,并将其解释为硬折痕。

通过对顶点法线进行插值,您的曲面将获得平滑流动的外观。由于此法线用于计算最终反射的颜色,因此您得到了一个平滑的色场。

图像1:平阴影法线与平滑插值法线的比较。黑色法线位于顶点上。彩色插值将被插值。

没什么说我们需要进行线性插值的。实际上,通过扰动法线,我们可以使平面改变外观。这就是凹凸贴图和法线贴图的工作方式。除非表面边缘在幻觉破裂的地方起太大作用,否则效果可能令人信服。



图像2:平坦的阴影表面(背面),平滑阴影(中间)和映射的平滑法线。由于边缘在图像中起着非常重要的作用,所以波浪形表面的幻觉会中断,您可以改为增加法线

2)进行平滑处理至少可以增加分配的内存

很难说出有关底层图形引擎的明确内容。无论如何,都需要将法线发送到图形卡,很可能已缓存了此数据,但可以即时计算(在两种情况下)。

由于Max使用平滑组,所以在我看来无论如何内存使用都是恒定的。很难说,即使它没有被缓存,也不会有太大的不同。它使着色器变得更小了一点,但是无论是否使用它,只有很可能存在这种复杂性。

评论


$ \ begingroup $
好答案!这正是我所要的:概念上的解释并没有遗漏关键细节,但仍然清晰明确。非常感谢
$ \ endgroup $
–Louis15
2015年11月16日,0:47

$ \ begingroup $
“但是,眼睛对颜色的突然变化极为敏感,并将其解释为难折痕。”实际上,人类视觉系统非常擅长检测阴影导数的变化。阴影可以是连续的,但如果变化率不连续(如此图像中所示),则这些阴影可能会令人惊讶地注意到。搜索马赫带效应。
$ \ endgroup $
–西蒙F
15年11月16日在10:57

$ \ begingroup $
@SimonF多数民众赞成为什么他们看到一个折痕,因为他们派生它边缘检测和所有。但是人的大脑并没有真正消除2个平滑函数几乎与大多数人相等的梯度流(例如,没有第二个派生感测)。因此,具有法线的球是平滑的,即使法线并不仅仅具有光滑的球体。这就是为什么我们无法解决这个问题。实际上很少有表面会以这种方式运行。
$ \ endgroup $
– joojaa
15年11月16日在11:59

$ \ begingroup $
“(例如,没有第二个神经感应)”我刚刚检查了Glassner的“数字图像合成原理”(第1卷,第29页)……现在,我比以往任何时候都更加困惑。
$ \ endgroup $
–西蒙F
15年11月16日在12:41

$ \ begingroup $
@SimonF您可能会对反射自然比表面低一阶导数感到困惑。因此,人类可以在一定条件下感知二阶导数。但是,关键是人类可以看到折痕,但是它们并不能在所有不同的变化之间产生有意义的差异,反射对于人类而言并不是自动显现的,而是略微偏离或方向错误的事实。没有更深入的分析。只要没有突然的改变,在许多情况下就足够了。我们应该在聊天室继续
$ \ endgroup $
– joojaa
2015年11月16日12:49



#2 楼

我可以看到两种“平滑”方法。第一个是平滑与外观(在您的情况下为法线)最相关的内容。另一种方法是使几何图形本身平滑。
在第一种情况下,通常会基于邻居更新法线。假设$ \ mathcal {M} $是网格,$ T $是$ T $中的三角形,而$ n(T)$是$ T $的法线。一种简单的平滑方法是
$$
\ begin {array} {l}
n(T)\ leftarrow \ frac {1} {| \ mathcal {N}( T)|} \ left(n(T)+ \ sum_ {Q \ in \ mathcal {N}(T)} n(Q)\ right)\\
n(T)\ leftarrow n(T) / n(T).length()
\ end {array}
$$
此处$ \ mathcal {N}(T)$表示与$ T $相邻的三角形的列表。
如您所见,这对方程式并没有真正改变顶点数,可以将相同的参数应用于顶点法线。本质上,您无需删除或添加任何内容即可调整值。
第二种情况是从字面上平滑几何形状,这意味着在顶点周围移动,因此您不会突然出现曲率跳跃。拉普拉斯平滑和taubin平滑是两个已知的示例,它们的方程与我描述的第一种情况类似。
如果开始删除顶点,通常将其称为抽取/简化,如果添加顶点则是细分。在这种情况下,平滑实际上是一种副作用,即,当渲染网格时,它看起来可能更平滑。但是,抽取或细分的目的通常是删除/添加细节(如LOD)。
顺便说一下...我使用的术语是网格处理中的标准(平滑,抽取和细分在这种上下文,这导致了我的回答的内容。)