法线强度?

法线贴图甚至法线都并无强度一说,因为法线仅仅是一个方向数据,并不能存储任何“定量”数据。所谓“法线强度”的视觉效果:对于引擎,实际上是通过夸大或减弱法线方向对光照计算的影响来模拟的;而对于法线贴图自身,则通过​​直接修改存储在纹理中的法线向量数据​​实现。具体而言,是​​提升法线向量在切空间(Tangent Space)的 X(T)和 Y(B)分量值之间的整体对比度​​,这种操作​​实质上放大了法线贴图所编码的微观表面梯度​。当贴图中相邻像素的 T/B 分量值差异增大时,​​在后续光照计算中,这些修改后的法线诱导的反射方向偏移也更为显著​​,最终导致渲染图像呈现出​​更深的阴影、更锐利的高光以及更强烈的整体凹凸感​​——这正是用户端所感知到的“法线强度”提升的视觉效果来源。

代码

这是常用的调整法线贴图数据“强度”的算法:

HLSL
lerp(Normal, float3(0.0, 0.0, 1.0), strength)
点击展开查看更多

原理

在法线中,(0,0,1)表示完全垂直向上的法线(切线空间的“上方向”),当法线为(0,0,1)时,将失去法线效果,即纯蓝色的法线贴图。

调整法线强度示意图

0 ≤ ​strength ≤​ 1

  • ​strength = 0​​ 结果为原始法线 Normal → 完全保留原始法线方向
  • ​0 < strength < 1​ 法线在原始方向与垂直方向之间渐变,T/B分量在原始值0之间渐变 → ​​法线强度被弱化,趋于平缓​
  • ​strength = 1​​ 结果为 (0, 0, 1) → ​​法线被替换为垂直向上的向量​​(相当于“展平”表面)

strength < 0 和 strength > 1

当strength超过标准值[0, 1]时,法线的T/B分量会有可能超越原始值,即T/B分量增强了,对应到整个贴图中便是提升法线向量T分量和B分量值之间整体对比度,放大了法线贴图所编码的微观表面梯度,便会出现渲染图像呈现出​更深的阴影、更锐利的高光以及更强烈的整体凹凸感。

版权声明

作者: Cheyne Xie

链接: https://chaim.eu.org/posts/2f89dc46/

许可证: CC BY-NC-SA 4.0

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. Please attribute the source, use non-commercially, and maintain the same license.

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键