UDN
Search public documentation:

TessellationDX11CH
English Translation
日本語訳
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 主页 > 虚幻引擎 3 中的 DirectX 11 > DirectX 11 多边形细分
UE3 主页 > 材质 & 贴图 > DirectX 11 多边形细分

DirectX 11 多边形细分


概述

在传统的游戏内容通道中,几何体都是通过三角形网格物体创建而成的。显卡可以高效渲染三角形网格物体,所以它们自然可以渲染美术师生成的网格物体。不幸的是,在使用的三角形不足时会导致画面质量变差,或者在使用三角形过多的时候渲染速度变慢。现代显卡支持硬件多边形细分,它可以通过将某些输入的网格物体划分为高度细分的渲染网格物体增加三角形数量。也就是说可以在某些三角形密度较低的地方创建网格物体,然后根据距离或其他属性进行定义(例如,根据几何体详细信息)。程序化这个过程,这样做可以执行位移贴图。

notess_head.jpgtessdispl_head.jpg
左侧:没有进行多边形细分
右侧:进行多边形细分和位移

多边形细分不会解决不同程度的细节问题,但是对于具有中型细节的自然景物,它完全可以应付。应该小心谨慎地使用多边形细分,因为使用很多小三角形后显卡性能可能会快速下降。不同显卡供应商提供的显卡的性能特征可能会有所不同。

激活方法


注意: 该功能需要 DirectX 11(可以在这里找到激活方法)。

下面的图片显示的是一个启用了多边形细分的材质:

TessEditor.jpg

将这个三角形的边细分系数设置为 6,同时将它的内部设置为 5。

它还可以将这个位移贴图作为所使用的材质的 WorldDisplacement 输入。这个材质可以使用纹理的蓝色通道替换法线的方向。通过可以在两个向量(最小位移、最大位移)之间混合的 lerp(线性插值)实现这个操作。因为这两个向量只使用 z 分量,所以会导致向量形如: (0,0,x)。然后使用 VectorTransform 节点将该向量由三角形转换为世界空间坐标。需要这样做的原因是 WorldDisplacement 希望它的输入在时间空间坐标中。在没有使用转换节点的情况下,位移可能不会与网格物体表面对齐,顶点可能会沿着世界坐标 z 轴运动。

多边形细分模式


notess.jpgflat.jpgpn.jpg
左侧:没有进行多边形细分
中间:进行平坦细分(更多顶点,通常与位移结合使用)
右侧:进行可以软化几何体的 PN 三角形细分(轮廓变得更加圆润)

细分因数


该材质输入可以在三角形边 (x) 和内部 (y) 上调整多边形细分。这个值指出了对边进行细分的频率。值为 1 表示没有细分。这个值的合理范围是 2 到 6。 因数是否理想(性能 vs 质量)取决于输入网格物体、位移内容和希望得到的质量。甚至对于几何体的不同部分使用的因数也不同。

光滑组


PN 三角形细分模式同时还支持硬边(不是最初的曲线形 PN 三角形),而且还可以避免在使用硬件细分的时候出现崩溃现象。

UV 接缝


使用位移贴图最后会生成开放边,因为在一个面上的顶点可能会被移动到不同的地点,而另一个面上的顶点不会。目前这个问题还无法通过代码解决,但是通常会调整内容来解决这个问题。下面的图片显示了由于上述原因而打开的对象内部的区域(标注为红色)。

crack.jpg

动态细分因数


下面的材质节点显示了如何将细分因数连接到相机距离。

DynTess.jpg

值为 150 可以在使用它的网格物体上正常工作。

动态位移


下面的图片序列显示了模型三个阶段的变换过程:

DyanmicDisplacement.jpg

可以像其他材质属性一样更改位移数据。

前景


当前的实现并不是最终结果。需要进行更多工作才能简化美术内容创建过程并改善性能。理论上,UV 接缝不得在网格物体中引发崩溃现象。