3D数学 学习笔记(9) 凹凸映射(bump mapping)和切线空间(tangent space)

本文探讨了3D图形中凹凸映射(bumpmapping)的两种实现方式——高度纹理与法线纹理,并详细介绍了切线空间的概念及其在凹凸映射中的应用。通过比较模型空间与切线空间法线纹理的不同之处,展示了它们各自的特点及优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

3D数学 学习笔记(9) 凹凸映射(bump mapping)和切线空间(tangent space)

参考书籍:
《3D数学基础:图形与游戏开发》
《Unity Shader 入门精要》

在这里插入图片描述


凹凸映射(bump mapping)

用于修改模型表明的发型,可以模拟出模型的“凹凸感”,但不改变顶点位置。
有两种方法:

  1. 高度纹理(高度映射,height map):模拟表面位移(displacement),得到修改后的法线值。
  2. 法线纹理(法线映射,normal map):直接存储表面法线。

高度纹理

使用高度图,表示模型表面的高度,只可以直观看出模型表面的凹凸情况。缺点是计算更复杂了,需要计算像素的灰度值。

法线纹理

存储表面的法线方向。法线方向分量范围在[-1, 1],像素的分量范围在[0, 1],要做一个映射。
在这里插入图片描述

切线空间

每个模型的顶点都有属于自己的切线空间,原点就是顶点本身,z轴为法线方向,x轴为切线方向,y轴就是法线和切线的叉积,也称副切线(bitangent)或副法线。可以理解为每个点法线的扰动方向。

左:模型空间下的法线纹理。右:切线空间下的法线纹理。

在这里插入图片描述

颜色生成原因:

  • 模型空间:每个点存储的法线方向都是不一样的,如果有n(0, 1, 0),经过映射后就对应RGB(0.5, 1,0.5)浅绿色。
  • 切线空间:每个点法线方向都是z轴方向,即(0, 0, 1),对应RGB(0.5, 0.5, 1)浅蓝色。

优缺点对比

  • 模型空间
    • 实现简单,直接可得到法线。生成简单。
    • 可以提供平滑的边界(法线都在同一空间,可以直接插值)。
  • 切线空间
    • 自由度高,可以重用法线纹理。因为模型空间下只能对应创建时的模型,而切线空间法线是指相对与法线的,放在不同网格也可以得到合理的结果。
    • 可进行uv动画(控制纹理的uv坐标)。
    • 可压缩。因为z方向是确定的,可以直接存xy,再推出z方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值