|
|
@@ -1446,10 +1446,87 @@ $$
|
|
|
**EWA过滤**
|
|
|
|
|
|
|
|
|
-# 几何
|
|
|
+### 纹理的各种使用
|
|
|
|
|
|
如何表示光滑的曲线、曲面、将简单曲面通过细分的方法得到复杂曲面、形状发生变化时面如何变化、如何保持物体的拓扑结构…
|
|
|
|
|
|
+在现代GPU中,可以将纹理理解为 texture = memory + range query(filetering),一块内存以及对内存中的区域进行范围查询
|
|
|
+
|
|
|
+从上述定义扩展开来,纹理可以表示很多东西,比如 环境光、环境贴图(environment)
|
|
|
+
|
|
|
+可以将环境光存储到某个球上,并且将整个球展开
|
|
|
+
|
|
|
+- Spherical Map(球形贴图)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+将环境光存储到球上,展开成贴图时会发生扭曲,上图右边的上面和下面都有不同程序的扭曲形变
|
|
|
+
|
|
|
+- Cube Map
|
|
|
+
|
|
|
+为了解决球形贴图导致的扭曲问题,进而提出了Cube Map
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+从圆心发出一条射线,将打到的球表面点和Cube面的点关联映射起来
|
|
|
+
|
|
|
+得到的右边的的贴图就是Cub Map,可以将右边的贴图围成一个盒子
|
|
|
+
|
|
|
+> Cube Map会带来一个问题:原本一个方向的光照可以直接在球上获得,现在得转一下才能在Cube Map中获得
|
|
|
+
|
|
|
+- 凹凸贴图/法线贴图 Bump/Normal map
|
|
|
+
|
|
|
+贴图不仅可以描述颜射,还可以定义任何不同的位置,任何不同的属性
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+比如上图的左边,定义点在基础表面沿着法线方向往上往下的相对高度
|
|
|
+
|
|
|
+上图的右边,本质是一个简单球形(不可能是手动挖点的),应用凹凸贴图之后就出现了凹凸不平的效果
|
|
|
+
|
|
|
+也就是说在不修改几何形体的情况,可以通过应用复杂的纹理,从而定义任何一点相对的高度,相对高度一变**法线**就会发生变化,进而导致着色的结果发生变化
|
|
|
+
|
|
|
+> 人为的做一个假的法线,从而影响着色结果
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+以二维平面为例子,计算凹凸贴图影响后的法线方向 $d_p = c * [h(p+1) - h(p)]$
|
|
|
+
|
|
|
+1. 求斜率,用下一个点的高度减去当前点的高度可以近似求出当前点的斜率
|
|
|
+2. 常数 **c** 用来做权重设置的,表示当前法线贴图的影响程度
|
|
|
+3. 真正的法线就是逆时针旋转90°,直接用旋转矩阵乘就行了
|
|
|
+
|
|
|
+同理去求三维方向的法线切线,做两个方向的导数即可,最后一定要记得**归一化**
|
|
|
+
|
|
|
+- Displacement Mapping 位移贴图
|
|
|
+
|
|
|
+不同于凹凸贴图将位置的移动换算成法线的变化,做一个假的表现效果出来
|
|
|
+
|
|
|
+位移贴图真的对点的位置进行了变化
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+上图左边是凹凸贴图的表现效果,有一个很明显的穿帮点,就是明明表面看起来凹凸不平,但是球的边缘就是光滑的
|
|
|
+
|
|
|
+相对左图而言,右图就明显真实许多
|
|
|
+
|
|
|
+使用位移贴图也有一些要求,首先就是模型的点必须足够细,如果面片很大,那么面片内的点的位置肯定是无法改变的
|
|
|
+
|
|
|
+> DX提供动态曲面细分,可以先应用三角形面片少的模型,再根据位移贴图动态监测继而细分三角形
|
|
|
+
|
|
|
+- 缓存预先计算的信息
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+上图左边为简单渲染的效果,中间为提前计算好的环境光遮罩的贴图,将左边左边计算和中间预计算好的贴图结合起来,得到右边更真实的效果
|
|
|
+
|
|
|
+由此可见纹理不仅可以存储颜色信息,还可以存储各种信息,只看你在着色器中怎么解释这些信息
|
|
|
+
|
|
|
+
|
|
|
+# 几何
|
|
|
+
|
|
|
+## 简单介绍
|
|
|
+
|
|
|
# 光线追踪(Ray Tracing)
|
|
|
|
|
|
# 动画模拟、仿真
|