Lec9 Shading3 (Texture mapping)
- shading 1 & 2
- Blinn-Phong reflectance model
- Shading models / frequencies
- Graphics Pipeline
- Texture mapping
重心坐标 (Barycentric coordinates)
- 为了做三角形内插值
- 得到顶点属性,既能够平滑的从一个顶点过渡到另一个顶点
- 比如纹理坐标,颜色,法向量等
- 定义在一个三角形(△ABC\triangle{ABC}△ABC)上
- 三角形内部任何一个点(x,y)都能够用三个坐标的线性组合来表示
- $(x,y) = \alpha A + \beta B + \gamma C $
- α+β+γ=1\alpha + \beta + \gamma = 1α+β+γ=1 (为了限制该点在三角形所在平面内)
- α>=0β>=0γ>=0\alpha >=0 \beta>=0 \gamma >= 0α>=0β>=0γ>=0
- 可以通过内部三角形面积比求出来
-

-
三角形的重心
-
任意点
-
利用重心坐标做插值
- 通过这一点的重心坐标,线性插值三个顶点的属性
-
虽然不错,但是在投影变换下,不能保证重心坐标不变,所以三维物体的属性需要在三维空间中做插值
-
- 三角形内部任何一个点(x,y)都能够用三个坐标的线性组合来表示
纹理贴 (Applying Texture)
-
可以算出三角形对应点的uv,再去纹理上找漫反射系数
-
可能问题
-
纹理太小(Texture Magnification)
- 纹理本身太小,贴图物体分辨率大
- 高线性插值(Bilinear interpolation)双线性插值
-
找临近的四个点,线性插值(水平和数值)双线性插值
-
质量和其他方法比一般
-
-
纹理太大
-
摩尔纹 & 锯齿 (走样)
-
单个像素覆盖纹理过多
-
超采样可以解决(消耗过大)
-
避免采样
-
范围查询(平均值)
-
Mipmap (快,近似,只能是正方形)
-

-
知道L后,能确定这个方块在log2Llog_2Llog2L 层必然能用一个像素表示
-
Trilinear interpolation
- 在上两层取周围像素共同做插值,叫三线性插值
-
但是mipmap在远处可能会完全模糊
-
-
各项异性过滤(不同方向表现各不相同)(Ripmaps Filtering)
-
多了轴向的拉伸与缩小
-

-
对于矩形的查询可以解决
-
但是斜着的还是解决不了
-
-
-
-
纹理的其他应用(Texture applications)
- 什么是纹理
- 一块GPU上的内存
- 一块区域可以做点查询,范围查询
- 就是一块数据
- 环境贴图 (Environment Map)替换Blinn-Phong模型的漫反射光
- 把整个环境的光记录下来
- 用纹理描述环境光长什么样
- 犹他茶壶(经典模型)
- 假设
- 环境光都来自无穷远处
- 只记录光的方向信息
- 如果可以描述在一个纹理上,那么就可以来描述信息
- 可以把环境光存在球上,可以展开
- 可能会扭曲
- 存在立方体表面
- 从球面出发,大到立方体上
- 环境光记录在立方体的六个面上
- 凹凸贴图 (Bump Mapping)
-

-
可以记录高度变化(法线变化)
-
定义复杂纹理,但是不改变几何信息,把任何像素的法线做一个扰动
- 通过定义不同位置高度与临近位置的高度差来重新计算法线
-
Flatland case
-
原本法线是向上,如果有凹凸贴图,在任何一个点处,可以通过相邻两个点的高度差除以间隔就能得到该点凹凸贴图的切线方向(2d)
-

-
求出切线方向后,逆时针90度之后就能够得到法线方向,然后做归一化得到法线
-
得到uv两个方向的后(3d),就能得到3维空间内该点的法线方向
-
假设:在局部坐标系中,法线方向永远是(0,0,1),然后计算法线方向后再把它重新计算回到世界坐标
-
-
- 位移贴图(Displacement mapping)
- 位移贴图会把三角形每个顶点实际做一个位移
- 凹凸贴图可能在边缘 / 在投影上会露馅
- 位移贴图可以解决这个问题
- 需要三角形足够细,顶点间的间隔需要比纹理频率还要高
- DirectX提供了同态曲面细分
- 3D纹理
- 定义噪声函数
- 纹理还可以记录已经算好的问题
- 阴影
- 3D体渲染
- 核磁共振记录每个点的具体信息
本文探讨了图形学中的纹理映射技术,包括重心坐标原理及其应用、纹理贴图的不同问题与解决方案如双线性和三线性插值、Mipmap、各项异性过滤等,并介绍了环境贴图和凹凸贴图等高级应用。




1611

被折叠的 条评论
为什么被折叠?



