目录
Applications of Textures
纹理就是存储在GPU上的一块内存数据,可以对这块数据做区域查询。
Environment Map
一个光滑的表面会反射环境光,因此可以看到球面上映射出其他物体:
可以使用Spherical Environment Map,将环境信息记录在球面上,同时包含球面与二维平面的映射。
这种方法会有一个问题,即映射到二维平面会导致扭曲:
可以将信息记录在一个立方体上,这个立方体是原来球的包围盒。
凹凸贴图
纹理可以影响渲染效果。
以下这种效果可以使用法线贴图来实现,将每个点的法线通过纹理进行改变,这样就会导致光的亮度的变换,像素之间有了明暗变换,可以实现凹凸感。
这种方法不改变几何信息,不会划分平面生成更多三角形。使用Bump Mapping技术实现。
黑色表示真实物体的表面,黄色是扰动后的结果,p点的法线经过扰动发生了改变。
在一维情况下,假设点位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()。
在三维情况下,由u,v两个方向。
同样假设法线朝上,即和假设这个法线是基于局部坐标系构建的。
位移贴图
位移贴图对每个三角形顶点进行改变。以下是两种贴图地不同结果:
- 左图是法线贴图,没有改变物体形状,整体还是圆形且影子是光滑的球体,所以这是一种假象。
- 右图是位移贴图,真实改变了物体mesh的形状,影子也是凹凸状的。
位移贴图更真实,但是计算量大。
一种权衡的方法是将两者结合使用,首先用法线贴图构建出一个较粗糙的效果,然后基于粗糙的效果将三角形划分的更小。
三维纹理
三维纹理就是除了物体表面有纹理,物体内部也是有纹理的,而内部的纹理通常是通过生成某种三维噪声然后再做处理得到的。
比如下图示展示的Perlin noise(柏林噪声),可得到大理石纹理的效果。
还有一种三维纹理应用于医学方面,volume rendering(体渲染)。
几何
几何有两种表示方式:隐式和显示。
隐式表示
Algebraic Surfaces
将该几何的点满足的关系表示出来,通过这种关系构建几何。
只要满足隐式表达式就说明这个点是该几何物体上的点。可以通过将点带入式子来判断该点在几何内部还是外部。
但是通过隐式表达,不能直观地知道表达的什么形状。
其他的一些隐式表示方法
Constructive Solid Geometry
对3D几何进行布尔操作,得到新的几何。
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
将两个距离函数进行插值(融合),随着融合程度的调整,得到由左向右的一系列几何。
Level Set Methods 水平集
距离函数需要定义一个解析表达式,但是有时不一定能够求出这个解析式。针对这种情况可以用level set(水平集)来表示几何形状。
给每个格子设定一个值,然后找出值为0的地方连起来就得到了level set,连接起来也就形成物体表面。
可以在三维空间中生成水平集,在医学数据上用的比较多。定义出一个密度level set,因为不同器官组织的密度是不一样的,通过选取不同的levelset,也就得到了不同的器官或组织的表面形状了。
Fractals 分形
雪花就是分形。整体看起来是六边形,细看每条边又是六边形。
显示表示
显示表示通常是构建一个映射函数,函数将左边二维平面的点映射到三维几何上。
以下图形使用显示方法表达与使用隐式方法表达是不一样的,这里将uv二维平面的坐标映射为三维的某个点。这样判断一个点在物体的内部或外部就比较麻烦。
两种表示特定总结
- 隐式
- 优点:很容易判断某个点在几何的内部还是外部
- 缺点:无法直接判断几何的具体形状
- 显示
- 优点:很容易计算出每个映射点的位置,直接得到映射物体的几何形状
- 不能直接判断某个点是在物体内部还是外部