Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

目录

Applications of Textures

纹理就是存储在GPU上的一块内存数据,可以对这块数据做区域查询。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Environment Map

一个光滑的表面会反射环境光,因此可以看到球面上映射出其他物体:
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
可以使用Spherical Environment Map,将环境信息记录在球面上,同时包含球面与二维平面的映射。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

这种方法会有一个问题,即映射到二维平面会导致扭曲:
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
可以将信息记录在一个立方体上,这个立方体是原来球的包围盒。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

凹凸贴图

纹理可以影响渲染效果。
以下这种效果可以使用法线贴图来实现,将每个点的法线通过纹理进行改变,这样就会导致光的亮度的变换,像素之间有了明暗变换,可以实现凹凸感。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
这种方法不改变几何信息,不会划分平面生成更多三角形。使用Bump Mapping技术实现。
黑色表示真实物体的表面,黄色是扰动后的结果,p点的法线经过扰动发生了改变。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

在一维情况下,假设点位P,P原始法线向上,即 n ( p ) = ( 0 , 1 ) n(p)=(0,1) n(p)=(0,1),蓝色曲线表示法线贴图,P点(假设P点会朝切线方向运动)横向移动一个单位后,向上会移动dp,切线方向位该点梯度,由梯度计算公式可得, d p = c [ h ( p + 1 ) − h ( p ) ] dp=c[h(p+1)−h(p)] dp=c[h(p+1)−h(p)] , 其中c为一个常量,所以切线可表示为(1,dp)。
已知切线,法线与其垂直,将切线逆时针旋转90°可得,最终法线为 n = ( − d p , 1 ) . n o r m a l i z e s ( ) n = (-dp, 1).normalizes() n=(−dp,1).normalizes()。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

在三维情况下,由u,v两个方向。
同样假设法线朝上,即和假设这个法线是基于局部坐标系构建的。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

位移贴图

位移贴图对每个三角形顶点进行改变。以下是两种贴图地不同结果:
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

  • 左图是法线贴图,没有改变物体形状,整体还是圆形且影子是光滑的球体,所以这是一种假象。
  • 右图是位移贴图,真实改变了物体mesh的形状,影子也是凹凸状的。

位移贴图更真实,但是计算量大。
一种权衡的方法是将两者结合使用,首先用法线贴图构建出一个较粗糙的效果,然后基于粗糙的效果将三角形划分的更小。

三维纹理

三维纹理就是除了物体表面有纹理,物体内部也是有纹理的,而内部的纹理通常是通过生成某种三维噪声然后再做处理得到的。
比如下图示展示的Perlin noise(柏林噪声),可得到大理石纹理的效果。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

还有一种三维纹理应用于医学方面,volume rendering(体渲染)。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

几何

几何有两种表示方式:隐式和显示。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

隐式表示

Algebraic Surfaces

将该几何的点满足的关系表示出来,通过这种关系构建几何。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

只要满足隐式表达式就说明这个点是该几何物体上的点。可以通过将点带入式子来判断该点在几何内部还是外部。
但是通过隐式表达,不能直观地知道表达的什么形状。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

其他的一些隐式表示方法
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Constructive Solid Geometry

对3D几何进行布尔操作,得到新的几何。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Distance Functions 距离函数

距离函数的意思是会返回当前点与任意物体表面的最短距离,如果返回的距离是负数,说明这个点在物体内部;如果为正,则在物体外部。
使用距离函数构造各种几何形状。如下图所示,从左往右看,最开始有两个球,每个球有一个距离函数,分别为 d 1 , d 2 d_1,d_2 d1​,d2​。
以 d 1 d_1 d1​为例,假设该球的中心坐标是 ( x 1 , y 1 , z 1 ) (x_1,y_1,z_1) (x1​,y1​,z1​),半径为 r r r,那么 d 1 : ( x − x 1 ) 2 + ( y − y 1 ) 2 + ( z − z 1 ) 2 − r 2 = 0 d_1:(x-x_1)^2+(y-y_1)^2+(z-z_1)^2-r^2=0 d1​:(x−x1​)2+(y−y1​)2+(z−z1​)2−r2=0
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
将两个距离函数进行插值(融合),随着融合程度的调整,得到由左向右的一系列几何。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Level Set Methods 水平集

距离函数需要定义一个解析表达式,但是有时不一定能够求出这个解析式。针对这种情况可以用level set(水平集)来表示几何形状。

给每个格子设定一个值,然后找出值为0的地方连起来就得到了level set,连接起来也就形成物体表面。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

可以在三维空间中生成水平集,在医学数据上用的比较多。定义出一个密度level set,因为不同器官组织的密度是不一样的,通过选取不同的levelset,也就得到了不同的器官或组织的表面形状了。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

Fractals 分形

雪花就是分形。整体看起来是六边形,细看每条边又是六边形。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

显示表示

显示表示通常是构建一个映射函数,函数将左边二维平面的点映射到三维几何上。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
以下图形使用显示方法表达与使用隐式方法表达是不一样的,这里将uv二维平面的坐标映射为三维的某个点。这样判断一个点在物体的内部或外部就比较麻烦。
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)

两种表示特定总结

  • 隐式
    • 优点:很容易判断某个点在几何的内部还是外部
    • 缺点:无法直接判断几何的具体形状
  • 显示
    • 优点:很容易计算出每个映射点的位置,直接得到映射物体的几何形状
    • 不能直接判断某个点是在物体内部还是外部
Games101 计算机图形学课程笔记: Lecture 10 Geometry 1 (Introduction)
上一篇:【00】Algebraic Geometry


下一篇:powershell字符粘贴异常情况记录