games101-12-Geometry3

细分

​ 分出更多的三角形,并且让三角形的位置发生变化,使得原来的模型边的更加精细。所以细分分为两个步骤:增加顶点(面)和对点的位置进行调整。

image-20230511194013793
Loop细分

​ 取三角形三条边的中点,用三个中点组成新的三角形,原来的三角形会被细分成四个三角形。以不同的规则调整旧顶点和新生成顶点的位置。如下对于一个新生成的点,且该点所在的边被两个三角形共享,按照如下公式进行加权计算,使得顶点位置改变后,表面相对平滑。

image-20230511194542678

​ 对于旧的顶点,一个旧顶点可能被多个三角形共享。按照如下公式利用权值、自己的顶点坐标和周围相邻的顶点坐标进行加权计算,如果周围相邻的点多,受周围点的影响就更大。其中n是该点的度,就是该点连接了几条边,u的取值受n值影响。

image-20230511194635296

​ Loop细分结果如下,注意该方法只能对三角形网格进行细分,如果对四边形网格,需要其他的细分方法:

image-20230511195211382
Catmull-Clark细分

​ 定义四边形面(quad face)和非四边形面(Non-quad face)

​ 奇异点:度不为4点

image-20230511202020854

​ 取每个面的中点,以及网格面每个边的中点,连接这些中点。如下图所示,现在图中有4个奇异点。只要原来的面不是四边形面,新增的点一定是奇异点。第一次细分,每个非四边形面会引入一个新的奇异点,但是非四边形面会消失,也就是不会再增加奇异点。

image-20230511202351551 image-20230511203019621
image-20230511203041212

​ 用如下方法对新增的点和旧的点进行调整,使得表面相对平滑:

image-20230511203420316

简化

1.为了提升性能,节省空间,需要使用更简化的模型。

2.根据场景决定模型的精细程度,比如对于远距离的物体,可以简化模型(类似Mipmap,但是几何的层次结构,以及不同层次结构之间的过度很难)。

image-20230511204425706

​ 一种简化方法,边坍缩,如下图将一条边连接的两个顶点变成一个顶点,然后该边就不存在了。但随之而来的问题就是,曲面简化需要尽量保持原本模型的大致形状,如何坍缩一条边,或者说坍缩哪一条边能够使得原模型样貌被改变的程度最小,这就是曲面简化的关键所在。

image-20230511205051245

​ 如左图,将上面两条边坍塌成一个点,如果将该点的坐标用五个顶点或者上面三个顶点的进行平均,得到的结果会比原来的形状小一圈。为此引入一个度量,即二次误差度量(Quadric Error Metrics)。即计算坍缩之后蓝色新顶点所在的位置与原来各个平面的垂直距离的平方和。如果能够使得这个误差最小那么对整个模型样貌修改一定程度上也会较小。误差最小的位置就是最后新顶点的位置。

image-20230511205433625

​ 对于整个物体,坍缩流程如下,通过局部最优解得到全局最优解:

(1)为模型每条边赋值,其值为坍缩这条边之后,代替两个老顶点的新顶点所能得到的最小二次误差度量

(2)选取权值最小的边做坍缩,新顶点位置为原来计算得出使得二次误差最小的位置

(3) 坍缩完之后,与之相连其他的边的位置会改动,更新这些边的权值

(4)重复上述步骤,直到到达终止条件

阴影贴图Shadow Mapping

​ 光栅化不能很好的处理全局光照,例如阴影。光栅化具有局部性,只考虑着色点和光源、相机的关系,而不考虑该点是否被遮挡,在阴影内(相对于光源被遮挡,但是相机可以看见)。Shadow Mapping在光栅化的情况下处理阴影,但只能处理点光源。并且生成的阴影具有明显边界,一个点在阴影中/不在阴影中。

​ 如果一个点不在阴影内,说明相机可以看到该点,光源也可以看到该点。一个点在阴影内,说明相机可以看到该点,光源不能看到该点。

​ 首先从光源看向场景,根据深度测试的思想记录每个像素最前的深度。如下图是从光源的角度看场景:

image-20230511233126307

​ 如下图是生成的shadow maps,即光源视角的Z-buffer,但是是存在一张纹理图中:

image-20230511233142306

​ 从设定好的相机位置看向场景。将所有摄像机视角可见点,计算与光源的距离。再找到该点对应的shadow mapping上记录的深度值,如果二者相等,则表明该点能被相机和光源同时看到,不在阴影中,反之在阴影中。

在阴影中 不在阴影中
image-20230511232856119 image-20230511232651546

问题:如浮点数难以判断相等,会出现精度问题 ;该方法只适合点光源,生成硬阴影。在光源有一定大小,会存在软阴影。光源具有体积,导致有的地方完全看不到光源(本影, Umbra), 有的地方能看到一部分光源(半影,Penumbra)。所以阴影的边缘会有过渡的情况,从而产生软阴影现象。

image-20230511234128954
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码

请我喝杯咖啡吧~

支付宝
微信