查看: 433|回复: 8

[引擎各个功能] 【无需切线空间应用凹凸贴图 | Unreal Engine】

[复制链接]

1

主题

342

帖子

7万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
75866
发表于 2016-6-25 12:30:53 | 显示全部楼层 |阅读模式



凹凸贴图(Bump mapping) 最早由一名图形程序员发明(1978 James Blinn),它通过调整后的着色计算 来创建凹凸表面的假象,无需增加几何体。一个新法线取代了 表面法线进行着色。可通过 1d 函数对新法线进行调整(如 Perlin noise、 灰度纹理)。此方法比使用小毛病较多的真实置换贴图 (如轮廓、遮挡、阴影)更加迅速。



【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]


【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]


【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]



不带凹凸贴图带凹凸贴图带凹凸和法线贴图
在实时渲染中,我们通常使用称为 法线贴图 的凹凸贴图变种(偏蓝色纹理)。 法线贴图在纹理的每个像素中保存一个颜色,而像素实际上是长度为 1 的 3d 矢量。

有两种方法生成法线贴图:

从灰度图创建法线贴图 - 预计算每个像素与其垂直和水平相邻像素 之间的差别。将两个结果数字(导数)转换为单位法线并存储为色彩。

从一个高多边形 3D 精模烘焙法线 - 把纹理的每个像素和 高多边形物体上的 3D 表面位置结合起来,并将其编码的法线存储为颜色。

为使生成的纹理在任何旋转下均可反复使用,存储的法线矢量必须在 切线空间 中。 切线空间通常包含 3 种矢量:法线、切线和副法线。它定义表面的朝向。 将所有法线转换进切线空间中后即可对其进行重复利用, 因为它们和表面之间被定义为相对关系。切线空间贴图取决于物体的 UV 贴图,因为纹理中的 X 和 Y 方向 定义了世界空间中切线空间的两个矢量(切线与副法线)。在生成优质的 UV 贴图的同时避免切线空间穿帮 较为困难,且耗时较长。

如果使用类似 Perlin noise 的 3D 灰度函数会怎样?函数不要求任何 UV 贴图, 可增强凹凸表面临近的细节渲染。无需切线空间应用凹凸贴图 使其成为现实。
ddx 和 ddy
为不需要切线空间应用凹凸贴图,我们在材质编辑器中添加了两个新 材质表现:ddx 和 ddy。每个表现将返回其输入导数的近似值。 图像硬件计算此近似导数的方式为对两个像素进行着色并减去结果 (ddx = 右 - 左</code>, ddy = 下 - 上</code>)。

这些函数只能在像素着色器中使用,通常只用于在材质函数中 应用较大的效果。


项目
描述


输入
Value计算输入导数的值。
输出
Out输入的近似导数。类型与输入匹配。例如标量输出中的标量结果,2d 输出中的 2d,诸如此类。
ddx 和 ddy 以 2x2 的块进行计算,因此和高频率输入共用时将出现一些块状穿帮。
凹凸贴图材质函数
可通过数个 材质函数在材质中应用凹凸贴图,而无需依赖于切线空间法线贴图。

ComputeFilterWidth
【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]



此函数利用 ddx 和 ddy 计算数值在屏幕上的变化速度。它可在 开始出现 noise 的距离中使程序化着色器淡出。淡出结果闪烁较少,在动态 下更为明显,对凹凸贴图而言及其重要,因为凹凸表面的高光可形成 严重的锯齿穿帮。

以下示例图表现的是在远处淡出的程序化凹凸贴图函数。

     
【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]





   
【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]



     

项目
描述


输入
In计算过滤幅度的值。
输出
Result输入从像素到像素的变化速度。
PerturbNormalLQ
PerturbNormalLQ 函数将灰度凹凸贴图函数输入转换为世界空间法线。 然而,因其使用的是 ddx 和 ddy(之前提及存在 2x2 块状穿帮的材质表现), 输出世界空间法线的精度较低。

     
【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]





   
【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]



     

项目
描述


输入
Bump计算世界空间法线的标量凹凸值(灰度)。
输出
WS Normal计算出的世界空间法线。
如需使用此函数输出的世界空间法线,必须将材质节点上的 tangent-space normal 设 为 false。

此函数只作为一个引用存在,不对材质函数库公开。 使用 PerturbNormalLQ 函数代替。

PerturbNormalHQ
PerturbNormalHQ 函数计算的导数比 ddx 和 ddy 更精确,可 达到更高的精度。它的原理是利用三个样本位置多次计算标量函数。


项目
描述


输入
Bump one pixel right当前位置右方一个像素的标量凹凸值(灰度)。Bump center当前位置的标量凹凸值(灰度)。Bump one pixel down当前位置下方一个像素的标量凹凸值(灰度)。WS Normal可选。与凹凸贴图组合的世界空间法线。可通过 矢量变换 表现转换为世界空间法线的切线空间法线。
输出
WS Normal组合的世界空间法线。
如需使用此函数输出的世界空间法线,材质节点上的 tangent-space normal 须为 false。

PreparePerturbNormalHQ
PreparePerturbNormalHQ 函数计算出 PerturbNormalHQ 计算世界空间法线 所需的三个样本位置。

【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]

【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]





项目
描述


输入
Value当前位置的标量凹凸值(灰度)。
输出
Value one pixel right当前位置右方一个像素的标量凹凸值(灰度)。Value当前位置的标量凹凸值(灰度)。Value one pixel down当前位置下方一个像素的标量凹凸值(灰度)。FilterWidth计算用于淡出远处细节的过滤幅度。单个函数替代三个函数
可创建包裹凹凸映射函数的材质函数,并在其他函数中 对其进行 3 次求值。此操作可在一定程度上隐藏复杂性。
使用纹理
纹理与凹凸映射材质函数共用可提高性能;然而 由于显卡处理过滤纹理的方式,可能出现穿帮。普通过滤的颜色 以线性内插法进行插值,其导数为一个常量。这意味着使用灰度 纹理可获得表面插值不平滑的法线。
注解
描述的方法出自 Morten S. Mikkelsen 的著作(见参考)。

性能
程序化着色器对性能的消耗较大,且难以消除锯齿(与 纹理贴图相比)。我们当前提供 Perlin noise,可通过此材质表现进行优化,工作量 较大。为 n 个等级使用等级功能需要完成 n 次 大部分计算。为凹凸贴图进行 3 次函数求值产生的计算量更大。需注意消耗和像素数量 成正比。可使用所有功能,但建议只用于原型制作或在受控情况下使用。

问题
尚无法正常处理翻动/镜像 UV。

工作展望
此法用于替代显式存储的切线空间。向此方向发展我们尚需更多经验。当前添加的内容不仅为图形设计师提供了凹凸贴图,还提供了进行研究的方法。

参考
Bump Mapping Unparametrized Surfaces on the GPU(来自 Morten S. Mikkelsen)

Bump Mapping Unparametrized Surfaces on the GPU【虚幻4翻译文档-无需切线空间应用凹凸贴图 | Unreal Engine】[虚幻4中文文档]


Derivative Maps(来自 Mikkelsen 和 3D 图形博客)

mmikkelsen3d.blogspot.com/2011/07/derivative-maps.html
回复

使用道具 举报

0

主题

838

帖子

2795

积分

vip会员

Rank: 1

积分
2795
发表于 2016-7-2 18:28:06 来自手机 | 显示全部楼层
不错,我喜欢这个,看看多少金币哦
回复 支持 反对

使用道具 举报

0

主题

854

帖子

2809

积分

vip会员

Rank: 1

积分
2809
发表于 2016-7-3 19:19:29 来自手机 | 显示全部楼层
看看这个好不好啊
回复 支持 反对

使用道具 举报

0

主题

922

帖子

2999

积分

vip会员

Rank: 1

积分
2999
发表于 2016-7-4 10:31:57 | 显示全部楼层
看看, 顶起. 谢谢楼主
回复 支持 反对

使用道具 举报

0

主题

907

帖子

2989

积分

vip会员

Rank: 1

积分
2989
发表于 2016-7-16 04:22:17 来自手机 | 显示全部楼层
不错,我喜欢这个,看看多少金币哦
回复 支持 反对

使用道具 举报

0

主题

853

帖子

2839

积分

vip会员

Rank: 1

积分
2839
发表于 2016-7-17 01:35:25 来自手机 | 显示全部楼层
学习了,感谢分享
回复 支持 反对

使用道具 举报

0

主题

895

帖子

2948

积分

vip会员

Rank: 1

积分
2948
发表于 2016-7-19 14:15:04 | 显示全部楼层
感谢分享,学习一下!
回复 支持 反对

使用道具 举报

0

主题

1319

帖子

4057

积分

vip会员

Rank: 1

积分
4057
发表于 2016-7-21 07:04:19 | 显示全部楼层
楼主能发图瞧瞧嘛
回复 支持 反对

使用道具 举报

0

主题

825

帖子

2676

积分

vip会员

Rank: 1

积分
2676
发表于 2016-7-21 09:27:15 来自手机 | 显示全部楼层
来看看......
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部