资讯动态

渲染入门|微观结构如何造就各向异性光效

发布时间:2026/10/19 2:37:30 来源:尧图企业网站定制
这一篇要回答的问题拉丝金属、头发、丝绸的高光为什么会被拉长答案藏在肉眼看不见的表面结构里。本文把这条因果链拆开讲清楚微观结构 → 微小斜面的朝向分布 → 反射光的分布 → 我们看到的高光形状读完后你应该能做到看到一种材质推断它的微观结构看到微观结构推断它的高光长什么样。一、核心结论先放在这里层次内容原因表面在微观尺度上有带方向的结构细槽、纤维、发丝、鳞片中间环节这些结构让表面上无数微小斜面的朝向分布变成了“椭圆”而不是“圆”结果反射光在一个方向上散得开、另一个方向上散不开高光被拉长规律斜面朝向在哪个方向上变化大高光就往哪个方向拉长 →高光带与纹路垂直一句话高光的形状就是表面微小斜面朝向分布的形状。微观结构有方向朝向分布就有方向高光就有方向。二、什么叫“微观”尺度决定一切同一个表面结构在不同的观察距离下对画面的影响完全不同。尺度大小例子肉眼 / 画面中的表现渲染中的处理宏观厘米以上物体的整体形状、褶皱直接看到形状模型几何中观毫米级粗糙的锤纹、明显的刻痕能看到一条条纹路法线贴图微观微米级千分之一毫米拉丝细槽、发丝表面鳞片、纤维看不到纹路本身只能看到它造成的光效粗糙度、各向异性参数波长级约 0.40.7 微米CD 的光道、蝴蝶翅膀鳞片、肥皂泡彩虹色衍射、薄膜干涉不属于本文关键在于第三行微观结构小到你看不见它但你能看见它对光的影响。拉丝不锈钢上的细槽宽度只有几微米到几十微米。站在一米外你看不清任何一条槽但你能清楚地看到那条被拉长的光带。光带就是细槽留下的“签名”。三、微表面理论把表面想象成无数面小镜子1. 基本假设现代渲染包括 PBR对“粗糙表面”的理解是任何表面放大到足够小都是由无数面极小的平面镜组成的。每面小镜子都严格按照“入射角 反射角”反射光线。宏观上看到的“粗糙”“光滑”只是这些小镜子朝向是否整齐。放大前一块看起来平整的表面 ──────────────────────────── 放大后无数面朝向各异的小镜子 ╱‾╲_╱‾‾╲╱╲_╱‾╲__╱╲╱‾‾╲_╱╲2. 一面小镜子什么时候“亮”灯在某个方向眼睛在另一个方向。一面小镜子要把灯光反射进眼睛它的朝向必须正好在灯和眼睛的“正中间”。这个正中间的方向就是渲染中常说的半角向量 H。灯 眼睛 ╲ H ╱ ╲ ↑ ╱ ╲ │ ╱ ────▔▔▔▔▔──── ← 只有朝向 H 的小镜子才能把灯光反射进眼睛所以一个像素有多亮取决于这个像素范围内“朝向接近 H 的小镜子”有多少。3. 法线分布小镜子朝向的“统计图”一个屏幕像素覆盖的表面区域里可能有成千上万面小镜子。我们不可能逐个计算而是统计它们的朝向分布。这就是 PBR 中的法线分布函数NDFNormal Distribution Function也就是公式里那个D 项。接下来是本文最关键的一个工具。四、关键工具法线落点图1. 怎么画想象从正上方俯视表面。把每一面小镜子的法线朝向想象成一根小棍从棍子顶端往下投影到一个圆盘上记一个点小镜子正好朝上 → 点落在圆盘中心小镜子向右倾斜 → 点落在中心右边倾斜越厉害 → 点离中心越远。把一个像素里所有小镜子的点都画上去就得到一张“法线落点图”。2. 三种表面的落点图① 抛光金属 ② 磨砂 / 喷砂金属 ③ 拉丝金属细槽沿左右方向 小镜子几乎都朝上 小镜子朝向很乱 只在上下方向上乱 ┌───────────┐ ┌───────────┐ ┌───────────┐ │ │ │ · · · │ │ · │ │ │ │ · ·· ·· · │ │ · │ │ ⁘ │ │ ·· ·⁘· ·· │ │ ⁘ │ │ │ │ · ·· ·· · │ │ · │ │ │ │ · · · │ │ · │ └───────────┘ └───────────┘ └───────────┘ 一小团圆形 一大团圆形 一条竖线细长椭圆3. 落点图 高光的形状现在把灯光和视角考虑进来只有朝向接近 H 的小镜子才亮。当你移动灯光或视角H 在落点图上移动——H 扫过点密集的区域时就亮扫过空白区域时就暗。所以落点图在哪个方向上铺得开高光就在哪个方向上“够得着”落点图高光材质一小团圆形小而亮的圆点抛光金属、汽车漆一大团圆形大而模糊的圆斑磨砂金属竖向细长竖向拉长的光带拉丝金属细槽横向这就是“微观结构造就各向异性光效”的全部机制微观结构 → 决定落点图的形状 → 落点图的形状就是高光的形状。落点图是圆的 → 各向同性落点图是椭圆的 → 各向异性。五、为什么拉丝细槽让落点图变成竖线这是理解“高光与纹路垂直”的关键一步。拉丝金属的细槽沿左右方向延伸。分别看两个方向的剖面沿槽方向左右剖开 ───────────────────────────── 一条直线。沿这个方向小镜子没有左右倾斜 → 落点图在“左右”方向上没有展开 垂直槽方向上下剖开 ⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒⌒ 一个个小圆弧。每个圆弧上小镜子从“向上倾”到“向下倾”都有 → 落点图在“上下”方向上铺得很开结论细槽方向左右 → 斜面在“上下”方向倾斜 → 落点图上下展开 → 高光上下拉长纹路本身不倾斜横穿纹路的方向才倾斜。所以高光总是沿垂直于纹路的方向被拉开。六、案例逐个拆解从微观结构推出光效下面每个案例都按同一个格式分析微观结构 → 落点图 → 光效。案例 1抛光金属各向同性作为对照环节内容加工方式用越来越细的抛光膏在各个方向上反复打磨微观结构极小的随机起伏没有方向落点图中心一小团圆形光效小而亮的圆形高光案例 2喷砂 / 磨砂金属各向同性环节内容加工方式用高压喷射砂粒撞击表面微观结构无数随机的小坑坑壁朝向各个方向落点图一大团圆形光效大而柔和的圆斑质感“哑光”案例 1 和 2 说明粗糙程度只决定落点图的大小不决定形状。加工没有方向落点图就是圆的。案例 3拉丝金属直线各向异性环节内容加工方式砂带或砂纸只沿一个方向反复打磨微观结构平行的细槽深度和宽度通常在微米级落点图垂直于细槽方向的细长椭圆光效垂直于拉丝方向的光带推论打磨越用力、砂纸越粗细槽越深槽壁越陡 → 落点图越长 → 光带越长。案例 4车削金属、锅底局部方向变化环节内容加工方式工件旋转刀具固定切削车床或旋转抛光微观结构一圈圈同心圆细槽落点图每个位置都不一样每一点的细槽沿圆周方向落点图就沿该点的半径方向拉长光效从圆心向外放射的光带移动灯光时像指针一样转动每个位置的落点图方向沿半径 │ ╲ │ ╱ ╲ │ ╱ ───────◯─────── ╱ │ ╲ ╱ │ ╲ │为什么光带是放射状的只有某些位置的椭圆正好对准当前的 H这些位置连起来正好是一条穿过圆心的线。这个案例说明各向异性的方向可以逐点变化。渲染中需要逐像素提供纹路方向这就是“方向贴图Tangent Map / Flow Map”的用途。案例 5手表太阳纹与案例 4 相反环节内容微观结构从中心向外放射的细槽落点图每个位置沿圆周方向拉长光效环形或弧形的光对比案例 4纹路是圆的高光就是放射的纹路是放射的高光就是圆的。永远垂直。案例 6头发圆柱 鳞片头发是各向异性最典型、也最复杂的例子它的微观结构有两层。第一层发丝是细圆柱一根头发直径约 0.050.1 毫米。圆柱的侧面朝向绕着发丝转一整圈。一根竖直发丝的横截面俯视 ↑ ↖ ↗ ← ● → 侧面朝向覆盖了“水平方向”的一整圈 ↙ ↘ ↓环节内容落点图沿垂直于发丝的方向铺成一整条线比拉丝金属更极端光效整头竖直的发丝在同一高度上连成一圈横向光环——天使环第二层发丝表面的鳞片在电子显微镜下头发表面覆盖着像屋顶瓦片一样层层叠叠的角质鳞片Cuticle鳞片的边缘朝向发梢相对发丝轴线倾斜约 3°。放大的发丝侧面发根在左发梢在右 ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱ 鳞片像瓦片一样微微倾斜这个微小的倾斜加上光可以进入发丝内部造成了两条高光高光光的路径表现主高光在鳞片表面直接反射偏白较窄次高光进入发丝、在内部背面反射、再射出被发丝内部的色素“染色”带发色较宽、较散由于鳞片的倾斜两条高光沿发丝方向朝相反方向错开一点。这就是写实头发中常见的“上白下彩”的双层高光也是 Marschner 模型的物理依据。渲染中的“切线偏移Shift Tangent”参数模拟的就是鳞片倾角造成的高光位置偏移。偏移贴图加噪声模拟的是每根头发鳞片和走向的细微差异。推论头发受损、鳞片翘起 → 表面变乱 → 天使环变弱头发“发干无光泽”这正是洗发水广告追求天使环的原因卷发、乱发 → 发丝方向杂乱 → 局部的落点图方向各不相同 → 光环碎成零散的亮点。案例 7丝绸、缎面纤维 编织方式环节内容微观结构蚕丝纤维光滑且横截面接近三角形缎纹织法让一个方向的纱线在表面长距离漂浮一根纱线跨过好几根纱线才下沉一次落点图表面以单一方向的长纤维为主落点图明显拉长光效强烈、流动的光泽随褶皱变化对比实验同样是丝不同织法的光效差异很大织法表面纤维方向光效缎纹一个方向占绝对主导光泽最强各向异性最明显斜纹两个方向都有一个略多有光泽带斜向纹理感平纹两个方向均匀交错光泽柔和接近各向同性这个案例说明决定光效的不只是材料本身还有材料的排列方式。同样的蚕丝排列有方向光效就有方向。案例 8虎眼石、猫眼石内部结构前面的例子都是表面结构。这个例子说明内部结构同样有效。环节内容微观结构宝石内部含有大量平行排列的纤维状或针状包裹体原理每根细纤维都像一根细圆柱和头发一样把光反射成垂直于纤维的一条线光效打磨成弧面后表面出现一条垂直于纤维方向的亮线转动宝石时亮线会移动像猫的瞳孔——称为“猫眼效应”Chatoyancy案例 9木纹透过清漆的各向异性环节内容微观结构木材由平行的纤维管组成表面刷了透明清漆光效清漆表面有一个普通的圆形高光清漆下方的木纤维还会产生一层沿纹理拉长的、随角度移动的光泽一些名贵木材如带“虎纹”“琴背纹”的木材在转动时会出现明暗交替的流动光泽原因就是纤维方向在局部起伏变化。案例汇总材质微观结构结构方向高光形状抛光金属随机微小起伏无小圆点磨砂金属随机小坑无大圆斑拉丝金属平行细槽直线垂直于拉丝的光带车削金属同心圆细槽圆周放射状光带太阳纹表盘放射细槽半径环形光头发细圆柱 倾斜鳞片沿发丝横向光环双层错开缎面单向漂浮的长纤维沿经线或纬线流动光泽虎眼石内部平行纤维沿纤维垂直于纤维的亮线木材纤维管沿木纹漆下拉长的光泽七、尺度的转换同一个结构远近不同这一点对渲染特别重要。1. 拉近与拉远想象用放大镜从远到近观察一块拉丝金属观察距离一个像素覆盖的范围看到什么渲染中应该怎么表达极近微距小于一条槽一条条清楚的细槽每条槽有自己的高光几何或法线贴图中等几条槽隐约可见的纹理 拉长的光带法线贴图 各向异性正常距离成百上千条槽看不到槽只有光滑的拉长光带只用各向异性粗糙度当结构小到一个像素装得下很多个时它就从“看得见的形状”变成了“看不见的材质属性”。各向异性粗糙度本质上是对“一个像素内无数细槽”的统计描述。2. 一个工程上的重要推论法线贴图远处会“变成”各向异性如果一张法线贴图上画着平行的细槽近处它表现为一条条槽拉远后贴图的 Mipmap 会把很多条槽平均成一个朝上的法线于是槽的细节消失了这是对的但槽造成的各向异性光带也一起消失了这是错的——远处的拉丝金属突然变成抛光金属看起来闪亮、发假。正确的做法是法线贴图在降低分辨率时把丢掉的法线变化转换成粗糙度——如果丢掉的变化有方向就转换成各向异性粗糙度。这类技术包括 Toksvig 方法、LEAN MappingOlano 与 Baker2010等其中 LEAN Mapping 能直接保留各向异性。这再一次印证了本文的主题中观的法线贴图拉远之后就成了微观结构微观结构的统计就是粗糙度和各向异性。八、一个验证实验不写各向异性公式也能得到各向异性高光如果“微观结构造就各向异性”是对的那么只要真的在一个像素里模拟一堆细槽不用任何各向异性公式也应该能得到拉长的光带。下面的示意 Shader 就做了这件事在一个像素内多次采样每次用一个按细槽形状扰动的法线计算普通的各向同性Blinn-Phong 高光最后取平均。// 示意用暴力模拟细槽验证各向异性的来源 // 注意这里的高光公式本身是各向同性的 Blinn-Phong float GrooveSpecular(float3 N, float3 T, float3 B, float3 H, float grooveSlope, float shininess) { const int SAMPLES 16; float sum 0.0; for (int i 0; i SAMPLES; i) { // 在一条细槽的横截面上取不同位置从 -1 到 1 float s (i 0.5) / SAMPLES * 2.0 - 1.0; // 细槽横截面是圆弧法线只在 B 方向垂直于槽上倾斜 // 在 T 方向沿槽上完全不倾斜 float3 microN normalize(N B * (s * grooveSlope)); // 每面小镜子都用普通的各向同性高光 sum pow(saturate(dot(microN, H)), shininess); } return sum / SAMPLES; }参数结果grooveSlope 0所有小镜子朝上退化为普通圆形高光grooveSlope增大高光沿 B 方向垂直于槽被拉长把扰动方向从B改成T光带旋转 90°每一面小镜子都是普通的、各向同性的但它们的朝向分布有方向整体就变成了各向异性。这正是本文标题的意思。实际项目中不会这样暴力采样太贵而是用各向异性 GGX、Kajiya-Kay 这类解析模型直接给出“一堆有方向的小镜子平均后的结果”。九、对应到渲染参数理解了微观结构各向异性模型里的每个参数都有了物理含义微观结构的属性渲染参数说明纹路朝哪个方向切线 T / 副切线 B、方向贴图来自 UV 展开或单独的方向贴图沿纹路方向有多平整沿 T 的粗糙度 αt越平整越小横穿纹路方向的坡度沿 B 的粗糙度 αb槽越深、越陡这个值越大两个方向的差异程度Anisotropy各向异性强度引擎把 αt、αb 合成一个美术参数为 0 时退化为各向同性纹路方向逐点变化车削、太阳纹、发丝走向方向贴图 / Flow Map逐像素提供 T 的方向头发鳞片的倾角切线偏移Shift控制高光带沿发丝方向的位置每根发丝、每条槽的细微差异偏移噪声贴图、高光遮罩打散高光边缘避免“塑料感”光进入纤维内部再射出次高光颜色、宽度Marschner 模型中的 TT、TRT 分量简化模型中用第二层带颜色的高光近似整体的光滑程度粗糙度 Roughness决定落点图的整体大小调参时可以先问自己三个问题纹路朝哪→ 设置切线方向或方向贴图整体有多光滑→ 设置粗糙度两个方向差别有多大→ 设置各向异性强度。十、常见误解误解实际情况“各向异性是材质的一种特殊属性和粗糙度无关”各向异性就是粗糙度在两个方向上不同。它不是额外的东西而是粗糙度的“方向版本”“高光带沿着纹路方向”恰好相反高光带垂直于纹路。纹路本身是平的横穿纹路的方向才有倾斜“看得见纹路才有各向异性”纹路越看不见越微观越需要用各向异性参数表达。看得见的纹路反而应该交给法线贴图“法线贴图画上细槽就够了”近处够远处 Mipmap 会把槽平均掉各向异性光带随之消失需要把丢失的法线变化转成各向异性粗糙度“头发只是拉长的高光”头发还有光在发丝内部的透射和二次反射所以写实头发有两层不同颜色的高光并带有背光透亮效果“金属才有各向异性”头发、毛皮、丝绸、木材、部分宝石都有只要微观结构有统一方向就会出现“越强越好”现实中多数拉丝金属的各向异性比较克制参数调得过大光带会细长得像一条线显得假十一、实用推论怎么判断、怎么设置1. 拿到一种材质先问它是怎么“做出来”的制造 / 生长方式推断的微观结构是否需要各向异性铸造、喷砂、腐蚀随机坑点否多方向抛光、喷漆、电镀随机微小起伏否单方向打磨、拉丝平行细槽是方向沿 UV 统一车床加工、旋转抛光同心圆细槽是需要绕中心的方向贴图生长出来的纤维头发、毛、蚕丝、木材定向纤维是方向沿纤维走向编织物取决于织法缎面明显平纹棉布基本不需要加工有方向材质就有方向。这是判断是否需要各向异性的最快方法。2. 最好的参考是实物制作前用手机手电照一照参考物记录三件事观察项对应参数光带朝哪个方向切线方向与光带垂直的就是纹路方向光带有多长、多宽各向异性强度、粗糙度旋转物体时光带是否跟着转确认确实是各向异性而不是掠射角造成的拉长3. 程序侧的检查要点提供切线方向调试视图把 T 以颜色显示美术一眼就能看出 UV 方向是否统一头发、拉丝零件导入时不要重算切线并确认 DCC 与引擎使用同一切线算法远景测试把镜头拉远检查光带是否突然消失或开始闪烁移动端只在近景、关键物体主角头发、主要武器上启用各向异性。小结整条因果链加工或生长方式有方向打磨、车削、发丝生长、纺织 │ ▼ 微观结构有方向细槽、纤维、圆柱、鳞片 │ ▼ 微小斜面只在“横穿纹路”的方向上倾斜 │ ▼ 法线落点图从“圆”变成“椭圆” │ ▼ 反射光一个方向散开、另一个方向集中 │ ▼ 高光被拉成光带或光环且与纹路垂直 —— 各向异性光效要点内容根本原因微观结构有方向核心机制小镜子的朝向分布法线分布变成椭圆核心规律高光形状 法线分布的形状高光带垂直于纹路尺度关系看得见的纹路用法线贴图看不见的纹路用各向异性粗糙度两者之间要正确衔接渲染对应切线方向 两个方向的粗糙度头发再加鳞片偏移与内部透射一句话概括每一面小镜子都是普通的但当它们按某个方向排列时整体就有了方向——各向异性光效不是光的特殊行为而是微观结构排列方式在光上的投影。参考资料R. L. Cook, K. E. Torrance《A Reflectance Model for Computer Graphics》ACM TOG 1982微表面模型的经典起点Bruce Walter 等《Microfacet Models for Refraction through Rough Surfaces》EGSR 2007GGX 分布Eric Heitz《Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs》JCGT 2014Gregory J. Ward《Measuring and Modeling Anisotropic Reflection》SIGGRAPH 1992J. T. Kajiya, T. L. Kay《Rendering Fur with Three Dimensional Textures》SIGGRAPH 1989Stephen R. Marschner 等《Light Scattering from Human Hair Fibers》SIGGRAPH 2003Michael Toksvig《Mipmapping Normal Maps》2005Marc Olano, Dan Baker《LEAN Mapping》I3D 2010Google FilamentPhysically Based Rendering in Filament各向异性章节延伸阅读《渲染入门各向异性高光用生活中的例子讲清楚》《渲染入门各向异性高光拉丝金属、头发与丝绸的光泽》《渲染入门从 Lambert 到 PBR光照模型的演进》《渲染进阶法线贴图的 Mipmap 问题Toksvig、LEAN 与粗糙度修正》

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑