Parcourir la source

添加贴图的一些介绍

usuiforhe il y a 3 ans
Parent
commit
2ebd71b785

BIN
图形学/Image/73.png


BIN
图形学/Image/74.png


BIN
图形学/Image/75.png


BIN
图形学/Image/76.png


BIN
图形学/Image/77.png


BIN
图形学/Image/78.png


+ 78 - 1
图形学/图形学.md

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