本节课主要继续讲解了上节课没有讲解完的纹理,以及几何的基本表示方法。
Environment Map环境光映射
Environment Maps,将环境光存储在一个贴图上。
因为几乎只有观察方向对环境光起到影响,所以各个方向的光源可以用一个球体进行存储,即任意一个3D方向,都标志着一个texel。如下图的球形环境贴图。
类比地球仪,把它展开,就可以把球面信息转换到平面上,从而得到环境texture。
但是很容易发现,这样简单展开的环境贴图在顶部和底部存在拉伸和扭曲问题。
解决方法:Cube Map,天空盒。如下图所示,对于球面上的每个点都用一个矢量沿着这个方向映射到一个立方体点,且立方体有6个正方形纹理贴图。
即用六幅texure表示一个天空盒,再进行一次方向面的计算。
简单来说就是利用方向计算出与对应平面上的交点坐标,剔除平面所对应的一维,剩下来的两维坐标转换到(0,1)范围之内即为(u,v)坐标。
Bump Mapping凹凸贴图
- 记录逻辑上的相对高度(可为负值),表现物体表面凹凸不平的性质。
- 对每个pixel做一个“扰动”
- 利用高度差重新计算法线
计算法线的方法(分为在平面上和在三维空间中两种):
在平面上:
c:影响大小系数
在三维空间:
Displacement Mapping位移贴图
- Displacement Mapping,与Bump Mapping(凹凸贴图)类似
- 物理上的高度改变,即改变了三角形顶点位置
- 可以通过物体阴影的边缘发现与Bump Mapping区别
- 代价:要求模型精度高
-
- DirectX 中的动态曲面细分:开始先用粗糙的三角形,应用Texture的过程中检测是否需要把三角形拆分的更细
三维纹理
三维纹理,定义空间中任意一点的纹理。
并没有真正生成纹理的图,而是定义一个三维空间的噪声函数经过各种处理,变成需要的样子。
阴影纹理
阴影可以计算好,直接写在Texture里。
3D Texture 和 体积渲染
几何的基本表示方法
隐式几何与显式几何
几何分类:隐式几何(Implicit Geometry),显式几何(Explicit Geometry)
隐式几何:不告诉点在哪,而描述点满足的关系。
比如用 f(x,y,z)=0 来描述点满足的关系。以下给出几个例子。
●好处:很容易判断点在不在面上
●坏处:无法直接看出表示的是什么
显式几何:隐式曲面相对的,所有曲面的点被直接给出,或者可以通过映射关系直接得到。下面的例子就是直接给出点的映射关系。
其中(u,v)已知,映射关系已知,把所有的(u,v)映射到对应的(x,y,z),就可以把所有点组成曲面。
●好处:容易直接看出表示是什么
●坏处:很难判断内/外
隐式几何的表示
代数曲面![](https://i-blog.csdnimg.cn/blog_migrate/dbfffaf9992f2dc0e641ddd89c14b6ed.png)
通过代数表达式获得的曲面
Constructive Solid Geometry(CSG)
CSG指的是可以对各种不同的几何做布尔运算,如并,交,差。
Signed Distance Function(SDF)
符号距离函数:描述一个点到物体表面的最短距离,外表面为正,内表面为负。
符号距离函数值为0的点组成几何。
Level Set
水平集:与SDF很像,也是找出函数值为0的地方作为曲线,但不像SDF会空间中的每一个点有一种严格的数学定义,而是对空间用一个个格子去近似一个函数。
Fractals
分型几何:分型几何是指许许多多自相似的形体最终所组成的几何形状。
如雪花是一个六边形,放大之后会发现每一个边上又是一个六边形,再放大六边形边上的六边形边上又是六边形,就这样无限套娃,有点递归的意思。