ue4 改变枢轴位置_houdini+ue4道路(2):思路

8b28b48c8d769145247d851d9cdbfe08.png

最近在搞道路生成,终于完成了一版demo,主参考了一些3A大厂的分享,自己补全了一些细节。

由于本人贴图制作水平所限,效果还远没有达到最优。

后面计划做个分享,先打个草稿。

一,背景

道路生成,目前最为大家熟知的两个范例是《farcry5》和《幽灵行动》。

farcry5是根据手工编辑的路径生成,幽灵行动则是根据A*寻路的路径生成。两种方式各有利弊。前者美术控制力更强,更适合对玩法要求严格的区域。后者效率更高,适合外围区域。

无论哪种方式,区别仅在于曲线来源,有了曲线之后如何获得可信的视觉效果(朝3A靠拢),也是一个难点。

那位说,道路又不是大气散射体积光能量护罩螺旋丸,能有啥效果?

b16eff8bf5c92d0363df851407f116db.png

其实特别有,比如下面这个:

Create a Post-Apocalyptic Road in UE4(https://www.youtube.com/watch?v=kJuiSERx_AI)

46b113ada3121c03e69d11206af3e717.png

这是quixel官方发的一个教程视频,讲如何利用quixel资源用手摆贴花/模型+刷顶点色的方法拼一段照片级写实街道。虽然脏乱差得有些夸张,但不得不说真香。

下面是google地图上找的几处真实道路:

87a50bbf0441de73720497a5c50dc6c2.png

f030433c2ce1a25f8b3b8c8a8f77c58c.png

总结为一句话:瑕疵很重要。

二,技术选型

最开始我曾尝试用houdini暴力生成路面高模:

835d0ab644fcd0cafd9700027226958c.png

但这样做有两个问题:

(1)不灵活不通用,不同风格外观的路面需要不同的算法。

(2)面数太高。

所以,细节还是要靠贴图/法线来表现。

但是tiling贴图的重复感是无法接受的,即使用多层tiling贴图通过刷顶点色混合,也无法根除重复感。

还有一个思路是每种路预制多段,去排列组合把整条路填满,若预制段数较多且排列得当,就能让人不太感觉到重复。但如果路的种类多的话工作量会比较大。

最后是《幽灵行动》的思路:

《幽灵行动》中道路细节的实现方法和quixel街道视频类似,主要靠贴花,只不过贴花不是手摆,而是生成的:

Ghost Recon Wildlands Terrain Tools and Technology(https://www.youtube.com/watch?v=kzthHcbG9IM

69166623c3c1f0809ac05b3f10855bb3.png

416c0ae62338296e38071c5b68a604d5.png

0e4268ecc527c561a2f427ebdbb29cea.png

视频后面进一步提到海量贴花性能如何优化,是用virtual texture。

后来又看到《坦克世界》的文章,用vt贴花实现的土路车轮印,效果很棒:

https://80.lv/articles/world-of-tanks-graphical-update-technical-overview/

9ce55696d7cbeed43d2486508dc5fd52.png

另外,基于vt可以解决基于mesh时很难解决的两大难题:

(1)可以解决道路与地形穿插问题。(显然)

(2)可以解决交叉口uv接缝问题。(你说交叉口uv应该怎么分?)

所以走vt路线是很值得考虑。

恰好ue4.23新增了vt功能,其中runtime virtual texture可以将任意mesh渲到vt上:

Virtual Texturing | Live from HQ | Inside Unreal(https://www.youtube.com/watch?v=fhoZ2qMAfa4)

22c96511f892d683747a5b44d36c5fb2.png

简直天时。

2b9c6dbb1ec82c037159becd541b3c73.png

三,实践

1,路面和交叉口生成

路网曲线:

2f0218cb8f4e6d081429277c098e6745.png

根据宽度生成路面:

01e18a0ffe06f5f0814c98f7651f7a85.png

生成交叉口:

交叉口以贴花形式盖上去,边缘做成半透明,即可避免纹理接缝。

3be4b16b6f4f229edb634573b8f0f2d3.png

交叉口分为三类,需分别处理:

(1)同种公路交叉口。

dbc2fa30c7f632d0b485434d8701684d.png

(2)异种公路交叉口。

a6d5932955cc05d7d95f085eef6fa777.png

(3)公路与土路交叉口。

57cc78bf5fe9af3a5a348f61f1c06d6d.png

2,贴花生成

d49561c97475f062e7cc79f365c1769b.png

裂纹贴花:

dc8c99102c466e3d7355e2f38bf9d8d7.png

补丁贴花:

f63fa99f89d53d2418151e0b2c20e03c.png

删除重叠贴花算法演示:

916a013421fc430b4e8e55812a2756af.png
https://www.zhihu.com/video/1199401636956983296

车轮印:

通过假想路网中有一些车辆沿随机路径靠右行驶,模拟出轨迹。

97791786fa6348b069611a2d8779dd19.png

车轮印分两类:

(1)公路上的黑色车轮印。

997545fcefbd36008635895791e6b084.png

371ae022a8efebd402bd4435409ac3b0.png

(2)土路上及土路与公路交界处的土车轮印。

42ce7af6f1fe49ff796b2b17fc8d07f2.png

4cdbabb8a994ef3ff3e039b4cf631239.png

cb13abacff858609a49a2f88211cff71.png

3,贴图制作

贴图是quixel里找的,通常无法直接使用,需要用quixel mixer加工。我对mixer还没怎么研究,弄出来的结果自己不太满意。

(1)基础路面贴图

公路1基础路面贴图:

24bf0b1586dde9f15d325d90eeda0cfd.png

公路2基础路面贴图:

a3047b72f68d711d541ed6287e5937d4.png

与《幽灵行动》一切路面细节均靠贴花不同,我希望尽量减少贴花数量,所以把那些特征不是很强、对tiling不敏感的细节直接做到路面基础贴图上。特征明显、不宜tiling的细节才用细节贴花表现。

(2)细节贴花

每种路材质不同,如果共用同一套细节贴花,会不搭。所以每种路需要单独一套专属的细节贴花。

以下是公路1的细节贴花:

1324c77fe65dcc38b76212cd7be3a430.png

c7f2f8998682d6ce5c146b5c643221ff.png

以下是公路2细节贴花(偷了点懒,部分细节贴花复用了公路1的(经过校色),当然,这样做对效果是不利的):

d892d65e9a5ffa748a29e40ce0fb7bc7.png

上图中的裂纹贴花是我自己在mixer里画的(因为在quixel中找不到合适的),但因画mask水平太差,贴花上带了大量的非裂纹区域,这样是有问题的,比如会盖掉下面的有用细节,只能先凑合一下了。

等以后有时间打算好好研究研究mixer和sd,摸索一下扫描材质+过程化mask的贴图制作流程。

4,工具链

可直接利用ue4的道路工具(landscape spline),因此美术工作方式无需任何改变。又因美术在使用landscape spline时已经添加了路面,故houdini中实际上无须生成路面,只生成贴花就可以了,减少了很多数据量。

7a0acd1040c9a8f90ce6968bab0a4414.png

5,未来需要改进的

(1),路边过渡处理不到位。

目前路边与地形的过渡只是简单半透明,虽然可以通过mask来产生一些变化,但一方面会有很强tiling感,另一方面表现不出土蔓到路上(带厚度)的感觉。

试过用土的贴片覆盖到路边,效果比半透明强,但当地形材质比较丰富时,若想让贴片颜色与地形颜色完美匹配,需要让贴片(static mesh)共用地形材质,而ue4不支持这种共用。所以还得再想想别的办法。

(2),裂缝里长草未实现。

这个houdini端实现不难,但若考虑与ue4端互通的完整流程,工程上有点儿麻烦。

不过因为这个效果本身比较出彩,未来有时间还是应该搞一下。

对于上述两点,下图是一个比较好的参考:

19236e5d962f59c1b9870c91695e35c9.png

补充:

裂缝长草参考照片

da4f8bc1371f49680a1958a7f66ca849.png

(3)ue4.24的vt有一些改进,比如加了height通道,可能可以用来提升某方面效果,有时间应该试一下。

--2020-1-24

实现了裂缝长草

难点是草点位置与裂纹贴花上的纹理对上。

2e8f1144a000abc7a7c557ca3615e29a.png

06a93bf64d9fdc524325107cc07a59d2.png
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值