Applications of Textures
在现代GPU中,纹理texture = 内存 + 范围查询(滤波)
纹理的应用包括:环境光照、存储微几何、程序纹理、实体建模、体积渲染
Environment lighting
我们将环境光照储存为environment map
光照来自无限远处
从视角向周围看去,记录下周围物体发出或反射到视角的光照
environment map可用于物体表面的渲染

上面的球面环境地图spherical environment map 在展开后会带来扭曲 的问题,两极点的图像会向中间扭曲(参考世界地图)
我们使用正方体地图cube map 来改善这一情况
球体的每个像素,其法线与正方体相交于一个点,用该点代表球体对应像素的纹理
正方体的6个正方形texture map构成了正方体的texture
大大减少了扭曲的现象

Bump Mapping
texture同样可以影响着色,比如构造出表面凹凸不平的效果
凹凸贴图Bump Mapping 不添加三角形的个数而增加表面细节
逐像素生成表面法线扰动,高度变化由纹理定义
e.g. 2D法线扰动
设原法线方向为 n( p ) = (0, 1),垂直向上
应用纹理的高度变化后,在p点处 dp = c * h(p+1) - h( p ) ;c为常数
扰动后的法线与dp方向(1, dp)垂直,为
n( p ) = (-dp, 1).normalized

3D扰动同理
原法线方向为 n( p ) = (0, 0, 1)
u,v 方向上分别做差分
dp/du = c * h(u+1) - h( u )
dp/dv = c * h(v+1) - h( v )
扰动后的法线为两个切向量方向的叉积,为
n( p ) = (-dp/du, -dp/dv, 1).normalized
注意上面的计算是在贴图的本地坐标 上计算的,实际可能需要转换为世界坐标
Displacement mapping
与凹凸贴图运用相同的纹理
但实际地移动了顶点
需要足够精细的几何体才能生效
或在渲染时将表面分解为更多三角形

3D Procedural Noise + Solid Modeling
用3D程序生成噪声,使用纹理时不在实际存在的图片上采样,而是获取程序生成的值
Others
纹理可以
提供预生成的阴影
在医学上,可以使用3D纹理和体积渲染
Introduction to geometry
图形学渲染诸多物体例如 曲面、布料、水、大城市、动物毛发、微生物等 并不容易
几何的表示方法分为隐式implicit 和显式explicit
不同选择适合不同几何任务
Implicit & Explicit
隐式表示为 满足特定条件的所有点的集合
e.g. 单位球 x2+y2+z2=1x^2+y^2+z^2=1x2+y2+z2=1
可表示为 f(x, y, z) = 0
难以看出物体的形状,但容易判断任意一点在物体的内/外(代入f(x, y, z))
显式表示为 所有点被直接给出或通过参数映射 f:R2−>R3;(u,v)−>(x,y,z)f: R^2 -> R^3 ; (u, v) -> (x, y, z)f:R2−>R3;(u,v)−>(x,y,z)
e.g. 单位球 f(u,v)=(cosusinv,sinusinv,cosv)f(u, v) = (cos u sin v,sin u sin v, cos v)f(u,v)=(cosusinv,sinusinv,cosv)
容易看出物体形状,但难以判断任意一点在物体的内/外
More Implicit Representations
Algebraic Surfaces
代数式表示
x2+y2+z2=1x^2+y^2+z^2=1x2+y2+z2=1
Constructive Solid Geometry
构造立体几何
用Boolean操作结合几何体

(Signed) Distance Functions
(有符号的)距离函数
给出任意位置到物体的最小距离
可以对两个物体进行平滑融合
下图中,第一行是普通融合
第二行是signed distance function SDF融合,一条红线上的点到物体的距离相同(可理解为等高线)
融合时,将每处的值进行处理,最后找到值为0对应的那条线,即为融合后物体的边界
可将AB融合为1/2的阴影

Level Set Methods
封闭式的方程难以描述复杂图形
我们用一个网格模拟函数
表面由函数值等于0的点构成,在离散网格中通过插值得到

在医学上,用该方法找到组织密度相同的地方
物理模拟上,用于找到空气-液体边界
Fractals
就是雪花那个分形,挺难表示的
Implicit pros & cons
好处:表述简单,部分查询简单(内/外),适用于射线与曲面相交,对于简单图形描述精准,易于处理拓扑结构的变化
坏处:难以建模复杂图形