Terrain Cliff Problem | 地形峭壁问题

传统高度图地形的制作方式不可避免会遇到峭壁拉伸严重的问题,另一方面峭壁要有分层的感觉。常见的解决方法主要有两种:一种是贴面,用石头的模型摆成悬崖,但是人力成本太高;另一种是用triplanar的uv,但是贴图采样次数过多。

一些新的程序化的方式包括:stochastic triplanar(Far Cry5),拆峭壁减少triplanar的贴图采样次数;启发式贴面Heruistic Quilting(Dauntless),程序化摆贴面模型,Ghost Recon目测大概也是这么做的。

不过triplanar仍然采样次数过多;而贴面意味着drawcall过多的问题。而要达到峭壁也有层积的效果,这里提出对峭壁mesh自动展UV的方法。

1. 建模

没什么好说的,houdini terrain程序化生成一下就好了,这里选择了一种大峡谷的地貌。方法就是经典的多层terrace然后erode,不是重点此处略过

2. 拆峭壁分块

转mesh然后remesh,transfer一下slope参数挑出来,然后用GameDevtool的AutoUV的Cluster直接分组先展UV

3. 分拆孤岛

我们只希望mesh是单片的而不是多块连通,要分拆孤岛,最简单的收缩扩张就好了,给一个参数向内收缩到孤岛再扩张

收缩用了一个loop

 

扩张用了一个loop

 

这样UV就能拆成小片了

4 矫正UV

基本思路:我们假设uv已经展好,且应该接近平面形状。这是一组点在二维平面内的投影。之后我们将顶点投影到法平面上,这是同样一组点在二维平面内的另一个投影。我们希望找出一个旋转量,使得这两组投影尽可能接近。解析方法应该是用这个角度建立方程,求个导求值为0的解;采用的近似做法是,计算每个点的旋转角度求平均。

 

 


 

这样就基本矫正了UV.

以下是在UE4中创建的材质截图的效果

 

 

 

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注