February 19, 2023

Unity Shader 学习 Bump Mapping

Unity Shader 学习 Bump Mapping

简介

Bump Mapping(凹凸映射) 是计算机图形学中的一种纹理映射技术,用于模拟物体表面的凹凸和皱纹[1]。目前有2中方法:

实现逻辑

问题和思考

  1. 法线贴图为什么是蓝色的?
    模型空间下的法线纹理看起来是“五颜六色”的。这是因为所有法线所在的坐标空间是同一个坐标空间,即模型空间,而每个点存储的法线方向是各异的,有的是(0,1, 0), 经过映射后存储到纹理中就对应了 RGB(0.5, 1, 0.5) 浅绿色,有的是(0, -1, 0), 经过映射后存储到纹理中就对应了 0.5, 0, 0.5)紫色。而切线空间下的法线纹理看起来几乎全部是浅蓝色的这是因为,每个法线方向所在的坐标空间是不一样的,即是表面每点各自的切线空间。这种法线纹理其实就是存储了每个点在各自的切线空间中的法线扰动方向。也就是说,如果一个点的法线方向不变,那么在它的切线空间中 ,新的法线方向就是 轴方向,即值为(0,0, 1), 经过映射后存储在纹理中就对应了 RGB(0.5, 0.5, 1) 浅蓝色 。而这个颜色就是法线纹理中大片的蓝色。

  2. 为什么法线贴图一般使用的是切线空间而非模型空间?

    • 自由度高
    • 可进行UV动画
    • 可重用法线纹理
    • 可压缩
  3. 什么是切线空间(Tangent space)?

    Tangent space是一个三维空间。对3D空间中的一个顶点来说,切空间的三条座标轴分别对应该点的法线N,切线T,和副法线(binormal)B,显然,对不同的顶点来说,切空间是不同的。

    T = normalize(dx/du, dy/du, dz/du)

    N = T × normalize(dx/dv, dy/dv, dz/dv)

    B = N × T

  4. 法线贴图的设置细节。

    • 法线贴图的属性 Bump
    • 贴图属性 TextureType-Noraml Map
  5. 法线贴图的优化方案。

    1. 使用双通道进行法线数据的处理

参考

[1] Bump mapping - wikipedia

[2] Unity Shader 入门精要 - 凹凸映射 - 146

[3] 图形 2.5 BUMP图改进

[4] 庄懂的技术美术入门课(美术向)-直播录屏-第8课

[5] Tutorial 13 : Normal Mapping

关于本文

本文作者 Master Gong Sheng, 许可由 CC BY-NC 4.0.