GPU Gems 2 · Chapter 11. Approximate Bidirectional Texture Functions
用少量入射光切片采集材料细尺度变化,把粗略 BRDF 亮度作为 3D volume texture 的第三维,实时补回布料、皮革等材质的 mesostructure。
学习目标
- 能区分 BRDF、完整 BTF 与 approximate BTF 保存的材质维度和视觉效果
- 能描述固定相机、弧线光源、亮度线性化和 shading map 构建流程
- 能用粗略 BRDF 亮度选择 3D volume texture slice,并用 trilinear filtering 平滑查表
- 能指出小尺度、近似 isotropic 假设何时成立,以及大结构和强方向性会丢失什么
完整的 ↡同时依赖局部 view/light 方向和表面空间位置、描述真实材质反射的高维函数 能表达局部反射、self-shadowing、masking 和 interreflection,但采集与存储维度很高。近似目标不是重建全部函数,而是捕捉让人辨认出布料、皮革和木材的细尺度变化。
1. 用少量图片采集材质
↡只沿入射光 elevation 变化采集的近似材质样本图像集合在固定正交相机下拍摄平面材料。光源沿一条弧线移动,通常每隔约十度采一张;不绕表面法线旋转,因此采集过程短且容易手动完成。
对每张图像计算平均 radiance,再把样本重采样到亮度均匀递增的层。得到的 stack 叫 ↡把不同入射光样本按平均亮度线性化、可按亮度连续索引的纹理图像堆,每层包含同一材料空间位置的细节响应。
2. 从粗略 BRDF 到 volume lookup
运行时先用 Phong 或其他简单 ↡只描述局部光照与视线方向反射的粗略反射模型计算一个亮度估计 r。这个值不是最终颜色,而是选择 shading map 第三维层级的坐标;前两维是材料的 (s, t) 位置。
↡把多张二维 shading map 作为第三维堆叠、供 shader 按亮度连续查样的 3D 纹理提供实际细节。shader 用 (s, t, r / a_max) 查询,按光源强度缩放返回值。第三维使用 trilinear filtering,避免只在相邻层之间跳变。
这相当于把“粗模型负责亮度趋势”和“采集数据负责材质细节”分开。艺术家还能调节 diffuse、specular 或 gloss 参数,而不必重新采集每张图像。
3. GPU 实时渲染边界
vertex shader 可以计算 view/light 方向和粗略 BRDF,fragment shader 做 dependent lookup;如果硬件支持在 fragment 阶段计算,亮度可以逐像素得到,减少 vertex undersampling。volume texture 本身就是 GPU 友好的资源,运行时主要成本是一套简单 shader 加一次 3D 采样。
方法最适合细尺度、近似 isotropic 的材料。大尺度结构的阴影方向会随视线和光源方位变化,而该采集方案只记录一条 elevation arc;强 anisotropy、尖锐高光和掠射角 masking 可能出现可见差异。即便如此,它通常比单张 diffuse texture 更有材质感,适合实时 preview。
4. 动手实验:亮度、切片与假设
调节粗略亮度,观察 volume slice;增加切片数量,观察层间采样的连续性;打开 anisotropic 开关,思考一条光源弧线为何不能完整表达方向性。实验数据是概念模型,不代表具体采集设备的 radiance 标定。
Approximate BTF 实验
观察粗略 BRDF 如何选 volume slice,再叠加采集到的细尺度纹理。
trilinear slice lookup 让 brightness 变化不出现硬 contour。
小结
- 完整 BTF 维度高,approximate BTF 用少量 light-elevation slices 捕捉细尺度变化。
- shading map 将样本按平均亮度线性化,volume texture 的第三维表示 brightness。
- 粗略 BRDF 负责选 slice,采集图像负责 self-shadowing 等 mesostructure 细节。
- fragment-stage dependent lookup 可实时完成,trilinear filtering 避免层间 contour。
- 小尺度、近似 isotropic 是适用前提;大结构和强方向性需要更完整的模型。
练习
问题 1|数据维度 为什么完整 BTF 的采集远比 approximate BTF 昂贵?
问题 2|查表坐标 volume texture 的 (s, t, r) 三个坐标分别代表什么?为什么第三维不能直接用最近整数层?
问题 3|失真来源 为什么大尺度 anisotropic 织物的掠射角效果可能不准确?
名词解释
本章出现的专业名词,用大白话再讲一遍。
- bidirectional texture function
- 同时描述位置、视线方向和光照方向变化的高维材质函数。
- light-elevation slices
- 沿光源入射 elevation 采集的近似材质图像层。
- shading map
- 按平均亮度线性化的材质图像堆。
- BRDF
- 描述局部光照与视线方向反射的粗略反射模型。
- volume texture
- 把多张二维 shading map 作为第三维堆叠的 3D 纹理。
- mesostructure
- 造成细尺度亮暗、遮挡和纹理变化的表面微结构。