Games101-系列课程笔记
Lecture 10 Geometry 1
本篇博客内容为Games-101系列课程的 Lecture 10 Geometry 1内容,有兴趣的小伙伴可前往GAMES101官网下载相关内容。
GAMES101官网
纹理应用
现代GPU中,纹理(texture)=内存(memory)+范围查询(range query)
环境映射
左图是环境光(纹理),右图是利用该纹理渲染出的犹他茶壶。
那么这个纹理应该如何得到呢?
-
球型映射
如上图,我们用完全光滑的透明球体反射四周环境,我们可以把球的表面完全展开,得到的二维图像就是环境纹理。
然而,将纹理完全展开后发现在纹理顶部和底部出现了明显的畸变,这是因为球型物体映射出的环境纹理,”纬度”越高,纹理越向”两级”聚拢,而”纬度”低的地方则不易出现这种情况。解决这一问题的方式是立方体映射。 -
立方体映射
我们用一个立方体盒子包裹这个球体,这样由球心出发,朝球面任意一点方向射出的射线都会投影在立方体六个面的其中一个面上,最终效果如下:
凹凸贴图(Bump Texture)
上图是凹凸贴图的效果图,在不改变几何特征的情况下,通过几何表面高度变化改变渲染点的法线方向,从而改变最终的渲染效果,造成物体表面凹凸有致的
假象
(因为我们并没有增加三角形个数,改变几何特征)。
如上图所示,黑色曲线代表原本光滑的几何表面,黄色曲线为人为定义的几何表面高度曲线(高度值可通过凹凸贴图获得,凹凸贴图如下图所示,黑色区域代表高度值低的地方,白色区域代表高度值高的地方)。那么接下来如何计算出法线方向?
先假设在一个二维平面中,曲线上每一点的法线方向都是(0,1)
T
,现在加入凹凸贴图,曲线发生了变化,曲线上每一点的斜率都发生了改变,我们计算某一点的斜率dp,dp可以利用差分计算出来,那么在引入凹凸贴图后该点的法线就可以表示为(-dp,1)。
我们从二维平面扩展到三维空间,法线的计算方式如下图所示:
当然,我们一开始假设了初始法线方向永远是垂直向上的(0,0,1),但是这无疑不符合真实情况。因此我们对每个渲染点,都定义了一个局部坐标系,在这个局部坐标系里法线方向是(0,0,1),最终将计算出的法线方向通过坐标变换从局部坐标系变换到世界坐标中。
位移贴图(Displacement Map)
位移贴图不同于凹凸贴图,位移贴图是真实改变了网格剖分后的顶点位置,从而更真实地反映物体表面的凹凸性(在边缘和阴影上表现得尤为明显)。上图直观展现了凹凸贴图与纹理贴图的区别。但位移贴图要求分割出来的三角形足够细,细到要高于纹理定义的频率,这对于采样频率提出了更高的要求。
几何
分类
-
隐式几何:用一个关系式描述三维空间一个点的坐标应该满足的关系,如球:x
2
+y
2
+z
2
=1,可以用f(x,y,z)=0表示。- 优点:易判断某一点在不在这个面上,负值表示点在几何内,0表示在几何表面上,正值表示在几何外。
- 缺点:很难画出这样的几何体,不容易找到所有点。
-
显式几何:直接给出或利用参数映射给出
- 参数映射:通过一个函数,把二维空间上的点坐标当做参数,映射到三维空间上。如:f(u,v)=((2+cosu)cosv,(2+cosu)sinv,sinu)
- 优缺点和隐式几何恰恰相反
更多隐式表示
- 几何表面
- CSG(Constructive Solid Geometry)(即几何的布尔运算)
- 距离函数(Distance Function)(可以用于求两个物体融合的过程)
- 水平集(Level Set Methods)
- 分形(Fractals)(在物体内部展现出自相似型,类似于递归的过程)
参考
[1]. GAMES101_Lecture_10.pdf
[2]. Shirley P , Marschner S R . Fundamentals of Computer Graphics[M]. AK Peters, 2005.