1 / 14

凹凸贴图

凹凸贴图. Michael I. Gold NVIDIA 公司. 凹凸贴图. 真实的凹凸贴图是逐像素计算的 光照计算是按每个象素点的法向量计算的 巨大的计算量 更多的信息可以看 : Blinn, J. Simulation of Wrinkled Surfaces. Computer Graphics. 12, 3 (August 1978), 286-292. 凹凸贴图. 凹凸贴图是在效果和精度之间的一个折中 只能对漫射光计算,不能使用反射光 欺骗视觉的采样 可能运行于当前的硬件上 如果它看起来很好,就干吧. 漫射光的计算.

satya
Download Presentation

凹凸贴图

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 凹凸贴图 Michael I. Gold NVIDIA 公司

  2. 凹凸贴图 • 真实的凹凸贴图是逐像素计算的 • 光照计算是按每个象素点的法向量计算的 • 巨大的计算量 • 更多的信息可以看: Blinn, J. Simulation of Wrinkled Surfaces. Computer Graphics. 12, 3 (August 1978), 286-292

  3. 凹凸贴图 • 凹凸贴图是在效果和精度之间的一个折中 • 只能对漫射光计算,不能使用反射光 • 欺骗视觉的采样 • 可能运行于当前的硬件上 • 如果它看起来很好,就干吧

  4. 漫射光的计算 • C = (L•N)  Dl  Dm • L顶点到灯之间的单位向量 • N顶点的单位法向量 • Dl灯光的漫射光颜色 • Dm顶点材质的漫射属性 • 凸值逐像素改变N值 • 凹凸映射 改变(L*N)的值

  5. 近似的漫射因子 L•N • 纹理图代表高度场 • [0,1] 之间的高度代表凹凸方程 • 首先导出偏离度m • m增加/减少基础的漫射因子Fd • (Fd+m) 在每一像素上近似等于 (L•N)

  6. 偏移量m的导出 • 偏移量m的近似导出 • 查找(s,t)纹理的高度H0 • 查找(s+s, t+t)纹理的高度H1 • M近似等于H1-H0

  7. 计算凹凸量 原始的凸起 (H0) 原始的凸起(H0)向光源移动一小段距离 形成第二个凸起(H1) 亮的图像 暗的图像 用H1凸起减去H0凸起(H1-H0)

  8. 计算灯光亮度 • 计算片断的颜色Cf • Cf = (L•N)  Dl  Dm • (L•N)(Fd + (H1-H0)) • Ct= Dm  Dl • Cf =(Fd + (H1-H0))  Ct Fd等于顶点法线与灯光的向量的乘积

  9. 上面就是全部么? 太简单了! • 我们还没有完成所有的任务,还必须做以下内容 • 创建一个纹理 • 计算纹理坐标偏移量s, t • 计算漫射因子Fd • s, t,Fd都从N和L导出 • 现在我们开始做一些数学计算

  10. 创建纹理 • 保存纹理 • 当前的多重纹理硬件只支持两个纹理 • 偏移值保存在alpha通道里 • 最大凸起值为 = 1.0 • 水平面值为 = 0.5 • 最小值为= 0.0 • 颜色存储在RGB通道中 • 设置内部颜色格式为RGBA8 !!

  11. 计算纹理偏移量 • 把灯光方向向量变换到一个笛卡尔坐标系中 • 顶点法线为z轴 • 从法线和视口的“上”向量导出坐标系 • 顶点法线为z轴 • 叉乘得到X轴 • 丢弃“上”向量,利用z,y轴导出x轴 • 创建3x3变换矩阵Mn • 变换灯光方向向量到这个坐标系中

  12. 计算纹理偏移量 • 使用法向坐标系中的向量作为偏移量 • L’ = Mn  L • 使用L’.x, L’.y 作为 s, t • 使用 L’.z 作为漫射因子! • 如果灯光方向接近垂直,则L’.x, L’.y 非常小 • 如果灯光方向接近水平,则L’.x, L’.y 非常大 • L’.z小于零的含义? • 灯光在法线的对面

  13. 在TNT上的实现 • 计算向量,纹理坐标 • 设置漫射因子 • 从纹理单元0取出表面颜色和H0值 • 从纹理单元1取出H1值 • ARB_multitexture 扩展 • 混合纹理扩展 (TBD)

  14. 在TNT上的实现 • 混合0 alpha设置: • (1-T0a) + T1a - 0.5 • T1a-T0a 映射到[-1,1],但硬件把它映射到[0,1] • T1a为H1的值,T0a为H0的值 • 0.5 平衡损失的掐除值 • 使用漫射光颜色调制(相乘)片断颜色T0c • 混合1 颜色设置: • (T0c*C0a + T0c*Fda - 0.5) * 2 • 0.5 平衡损失的掐除值 • 乘以2加亮图像颜色

More Related