HDRP 中的细分(Tessellation)是 Unity 中的着色器(材质)类型,是一个较为重要的功能,可以根据游戏对象的表面根据视角变化实时的计算细分曲面的 3D 技术。

本文将探讨在 Unity HDRP 中如何使用镶嵌细分。
这个示例,我使用了下面这个免费沙漠悬崖峭壁砂岩纹理作为演示:
纹理提供了五个通道,咱这里只使用漫反射纹理、法线和高度贴图。

添加HDPR细分的步骤
1. 一切就绪后将漫反射纹理直接拖放到平面对象上,通常漫反射是对象表面的基本纹路。

2. 赋予之后,会发现平面没有任何起伏,从侧面看更加明显,就是一个面片。

3. 此时我们将法线贴图纹理添加到法线通道,可以看到贴图上有一些起伏变化,但这是一个假象,不要被迷惑哦,因为它并不是真正意义上的细分置换的变化,而是通过光照对我们人眼产生的凹凸错觉,因为该场景的灯光在左侧,因此会得到下面的结果。

4. 解决该问题,我们需要将 Shader(着色器)类型更改为 HDPRLitTessalate,会在 Displacement Mode(置换模式)下新增一个 Tesselation Displacement(细分置换)选项。

5. 将 Displacement Mode 更改为 Tesselation Displacement,这样就会在表面输入下增加一个 Height Map(高度贴图)选项。

6. 将沙漠悬崖砂岩纹理包下的高度图拖拽到 Height Map(高度贴图)通道,将 Min 和 Max 值适当的调整一下。

7. 此时我们转到 Tessellation Options(细分选项)下,通过调整参数来获取细分曲面,特别需要重点关注 Tessellation Factor(细分因素)以及 Start/End Fade Distance(开始/结束距离)。

8. 为了更好的解释设置的效果,可以通过线框模式查看刚开始仅只有四个顶点的平面最终的细分分布情况。

本文总结
Tessellation 的精度主要由 Tessellation Factor 决定,表面的起伏高度由 Height Map (高度贴图) 通道下的 Min 和 Max 值决定,反差越大置换效果越明显。
至于 Start/End Fade Distance 可以理解为 Unity 摄像机的裁切功能,离摄像机近的细分较多(看到),远的细分较少(看不到) ,这种方式如果应用在一条很长的小路上,让离摄像机近的细分高一点,远的甚至可以为零,可以优化对象。
看看最终的结果吧,具有从近至远(随视角)智能调整细分。

