ABOUTCG微资讯将定期为您推送有干货,有价值的CG行业文章!
作者:Simon Tremblay
翻译:ABOUTCG翻译小组
自我介绍
我的名字是西蒙·特伦布莱(Simon Tremblay)。我以前一直在制作三维艺术,但是有10年我是仅作为爱好的。我在Herzing大学和蒙特利尔的NAD中心被训练为一个多面手。我对游戏开发的各个方面都有兴趣,但是主要专注于纹理,着色器,照明和特效。我最近唯一一次专业经验是有几个月时间作为技术美术参与了一个沙盒类生存游戏叫《Rokh》的工作。我现在正在寻找新的挑战和机遇。
开放世界项目
自从Epic在2015年GDC上发布了他们惊人的风筝demo,我就一直被创建如此巨大的无缝开放世界的想法迷住了。为《Rokh》工作期间是一个了解在虚幻4中制作巨大地图的限制和挑战的绝好机会。有了这些新知识,我开始着手建立一个自己的开放世界demo作为我的简历作品。我现在已经在这个项目中花了4个星期了。虽然还有很多内容我想添加和修改,但是现在的结果我也很满意。我经常关注创建写实的艺术,但是最近我开始更多的关注风格化的游戏,比如《看火人》《风之旅人》《守望屁股》《无人深空》《塞尔达传说:荒野之息》。我也早就意识到,独自一人完成一个巨大的写实风格世界是一个几乎不可逾越的挑战。我想稍微偏向风格化一些会更为可行但依然有令人印象深刻的效果。我从《看火人》在GDC2016上的演示上获得了很多灵感。虽然《看火人》是用Unity做的,但是很多概念和想法也可以直接在虚幻引擎里实现。我很早就意识到,如果我将灯光,氛围和总体感觉确定,那我就可以接近一个非常有限的独立资产数量。下面是一些图片来自我的灵感来源文件夹:
自然景观
我最后确定的地形大小为65平方公里,分成16个level。我使用虚幻引擎的世界合成和level streaming把一切合并在一起。我经历了几个地形的迭代,我一开始只是使用虚幻引擎的地形工具雕刻它,但是我一直没得到满意的效果。于是我决定使用World Machine生成地形高度图来替代。我试着制作了几个像样的地形,但是我仍然不满意(处女座…)。直到我使用了一个叫做Geoglyph的插件。他基本上就是一个宏,生成器和滤镜的合集。它就是一列World Machine已有的可以快速创建可信景观的功能。我发现“Neoflow”和“Reflow”的宏命令特有用。虽然好用,但是也有付出,最终贴图渲染了8个多小时。如果让我再做一次,我可能会尝试使用不太“昂贵”的生成器和宏,因为这减慢了我的工作流程很多,从而不能让我为喜欢的效果做更多的尝试。World Machine的预览显示的地形高度图只有最大4096×4096像素,导出到虚幻引擎则几乎是2倍大,所以在引擎内部的效果有点不可预料。下面是World Machine最终的节点图的截图:
下面是每个材质使用纯颜色材质的World Machine预览图:
当在地形大小的时候,虚幻4的分辨率和组件数量有点奇怪。我不会写太多太深的技术细节,我最后导出的地形是65.092平方公里,16个(4×4)2017 x 2017像素大小的地形高度图,总大小是8068 x 8068像素。在导入地形高度图到虚幻4的时候,除非你重新缩放地形,不然1像素=1米,给我了一个8.068千米x8.068千米或者64.095平方公里的地形,和World Machine里的数据完全匹配。我发现这个地形的分辨率是满足我的需求的,特别是我计划在材质中使用 tessellation。我在World Machine里设定最大海拔为2048米,但是虚幻引擎的默认海拔为512米,所以我需要导入之后将Z轴高度设定到400%。关于虚幻引擎更多的内容可以在 https://docs.unrealengine.com/latest/INT/Engine/Landscape/TechnicalGuide/ 看到。我也导出了5个不同的遮罩(使用2048×2048像素而不是2017×2017像素)。这些遮罩在后面可以作为混合权重来确定贴图的位置。导出地形为几个部分而不是一整张有几点好处:
l 可以让你导入总分辨率高于8192×8192像素的地形(这是虚幻引擎的最大地形分辨率)
l 可以让你轻松设置 level streaming
在引擎里导入分块的地形会自动把每个块分成不同的level,然后将他们在world composition窗口里放在相应的位置。这就为在编辑器和运行的时候分开载入level进内存提供了可能。在当前屏幕上没有渲染的物体并不需要被引擎计算,这样可以使引擎计算大场景的性能提升很多。这可以使用一个简单的距离控制或者手动设置一个触发体积加上蓝图系统来实现。也可以制作多重“持续level”。我最后使用了一个所有角色都会在他们自己独立的“持续level”里影响整个世界:灯光,环境雾,后期体积效果,天空等等。之后我复制了这个level然后编辑了很多设定来制作了一个夜晚的场景。我之后就可以直接通过载入不同的level来切换这两种不同的灯光效果。这也可以允许不同的人同时制作这个场景的不同部分,而不用轮流“退出”控制权限。《看火人》就是使用了同样的 level streaming技术,虽然是unity里的,但是他们在GDC的演讲上解释过原理。
材质
我在地形材质上也经历了几次迭代。我做的第一个版本稍微有点混乱。那是一个巨大的材质,每个贴图都是在材质编辑器里使用 slope angles和 height detection确定的。结果是可接受的,而且好处是如果我想编辑地形模型,它可以自动更新。问题是,它很快就变的很难操作,并且贴图的摆放很静态,不自然。在做了一些研究之后,我最终创建了一个,把不同的功能分成不同层,最后在主节点图中合成,并且使用之前在World Machine导出的遮罩控制权重的材质。这就允许我在使用World Machine的很棒的遮罩作为基础的同时使用虚幻引擎自带的地形工具来绘制权重。这个设置还允许在最初的5层之外额外的层上绘画。这也让所有东西都易于识别。每个层都可以轻松编辑和切换,而不用对付一整堆巨大的让人困惑的节点。下面是一个这种分层功能材质节点的截图:
这是现在的主合成节点:
一个常见的问题是,地形的贴图很规律容易被看出来。为了避免这个问题,我最终将贴图的坐标设定为基于摄像机距离。贴图因为摄像机的距离或多或少会重复,在远处时允许更大的形状,而在较近的距离则保持适当的精细的细节。设置正确的话,贴图变化会很顺滑,几乎不会被发现。每个贴图都可以调节重复度和触发变化的距离,在材质内部就可以调节。
我也想在置换上使用相同的方法,但是我当然不想把地形模型细分。我最后使用了相同的摄像机距离控制方法来控制细分区域。这个方法让我可以仅仅在距离摄像机很近的小块区域细分很高面数而不用把电脑弄烧起来。
tessellation 和地形的小提示:默认情况下,tessellation在材质中所乘的“Flat tessellation” 和“PN Triangles”是被一个特定值覆盖的,这个值根据你使用的引擎版本不同而不同(4.10以上版本是覆盖为15,老版本是8)。虚幻引擎的地形分辨率是对应地形高度图的1像素=1米=1个多边形。虽然最大的乘值是8或者15级细分,但是你也许还是不能用高度图达到足够的细节。通常的解决方法是在导入引擎之前细分一下,但这对于地形来说显然不现实。你可以相对的,解锁着色器里的限制来获得更高的细分级,这在https://forums.unrealengine.com/showthread.php?91747-How-do-I-unlock-tessellation-limit这个帖子里有讨论到。需要注意的是AMD的一些显卡可能会导致一些问题。但是我个人用的Nvidia的显卡,在运算大量多边形的时候并没出现性能降低或者任何其他问题。
贴图
大部分的贴图都是使用Substance Designer制作的。在虚幻引擎中有许多数值可以直接调整并且在引擎中可以直接叠加各种纹理和变化。自从引擎可以实时看到调整结果之后,调整贴图的工作变的简单很多,不用导出导入各种软件。Substance Designer的节点图:
展开虚幻引擎的可调节参数面板:
变化的例子,全部是由同一个Substance节点制作的:
0回复【CG微资讯】史诗级的自然景观制作(上)"