制作山谷环境
介绍
你好,我叫阿布舍克·夏尔马。我目前在 Ubisoft Mumbai 担任首席环境美工。我在 Frameboxx Jaipur 上过我的游戏开发课程。我在 AAA 游戏开发方面有 9 年的工作经验,并为诸如黑暗之魂 2、血源、超景观、王国之心 III 和 2.8、铁拳 7 等项目做出了贡献。
这个项目最初是作为创建我自己的自定义自动景观着色器的练习。我主要专注于创建一个自动系统,帮助创建丰富的自然开放世界环境。所以我开始使用自动植物系统创建程序景观着色器。
参考
以下是一些帮助我了解场景大小和构成的参考资料。根据参考资料,我的粗略计划是在湖边创建一个村庄/城镇,并在背景中创建一座标志性的山脉。主要是为了颜色和感觉,我从瑞士收集了图像。
![](https://cdn.80.lv/api/upload/content/e2/images/618a0ca5b0003/widen_920x0.jpg)
工作流程
然后我开始在 World Machine Software 中创建地形。地形大小为 8*8 公里。
![](https://cdn.80.lv/api/upload/content/a6/images/618a0cea98488/widen_920x0.jpg)
我使用 Basic Noise 节点获得了地形的基本形状,并用径向划分了它,这样我就可以为湖区腾出一些空间。然后使用 Perlin,我在场景中添加了巨大的山脉。然后添加了一些侵蚀感觉以提供更多地形细节。
![](https://cdn.80.lv/api/upload/content/90/images/618a0d235798e/widen_920x0.jpg)
然后我导出了一个高度图并将其导入到 UE4 中。我使用带有高度图的地形工具来创建此地形,并进行了一些基本的灯光设置以获得金色光感。
![](https://cdn.80.lv/api/upload/content/51/images/618a0d7ba859f/widen_920x0.jpg)
景观属性和基本灯光设置:
![](https://cdn.80.lv/api/upload/content/bb/images/618a0d9e980c5/contain_620x276.jpg)
![](https://cdn.80.lv/api/upload/content/bb/images/618a0da44f435/contain_620x276.jpg)
2 中的1
在虚幻水系统帮我在创造这个湖。
![](https://cdn.80.lv/api/upload/content/c4/images/618a0ddf4c7b6/widen_920x0.jpg)
然后我使用 WaterBody Lake 工具创建了湖。
![](https://cdn.80.lv/api/upload/content/49/images/618a0e266149f/widen_920x0.jpg)
这是在场景中添加湖泊后的样子。
![](https://cdn.80.lv/api/upload/content/f4/images/618a0e3c28c6f/widen_920x0.jpg)
之后,我根据要求调整了它的材料。我还为远水区域添加了一些 VFX 雾粒子。
![](https://cdn.80.lv/api/upload/content/d4/images/618a0e73c0dc0/contain_620x239.jpg)
![](https://cdn.80.lv/api/upload/content/b0/images/618a0e7c03cf0/contain_620x239.jpg)
2 中的1
自动景观着色器
对于这个郁郁葱葱的绿色景观,我使用了 6 个材质层:
- 悬崖——为山。
- 草——用于平原。
- 干草 – 用于山地和平原之间的混合。
- 雪 – 适用于山峰
- Stones Ground – 用于路径
- 水坑 – 在地面上添加水效果。
最初,我创建了一些有助于在 UE4 中调整纹理的材质函数。
漫反射 MF – 此功能可控制编辑漫反射色调、对比度、亮度、饱和度。
![](https://cdn.80.lv/api/upload/content/22/images/618a0f3ce8d88/widen_920x0.jpg)
RAM MF – 此材质功能提供基本控制来调整粗糙度、AO 和金属。
![](https://cdn.80.lv/api/upload/content/33/images/618a0f5f38dcb/widen_920x0.jpg)
法线 MF – 此材质功能有助于调整法线贴图强度。
![](https://cdn.80.lv/api/upload/content/cd/images/618a0f7eda891/widen_920x0.jpg)
位移MF。
![](https://cdn.80.lv/api/upload/content/a5/images/618a0f952ed5f/widen_920x0.jpg)
我在风景方面面临的最大问题很明显——纹理平铺。风景纹理在玩家附近通常看起来不错,但在更远的距离,平铺变得非常明显。所以,为了解决这些问题,我创建了一个新的材质函数,帮助分别调整近和远纹理的耕作。
MF距离混合
通过这个MF,我有两个耕作控制来调整近远距离的纹理。我使用了绝对世界位置和相机位置来创建该蒙版,并使用它来调整其材质实例中的距离。
![](https://cdn.80.lv/api/upload/content/04/images/618a10290817c/widen_920x0.jpg)
![](https://cdn.80.lv/api/upload/content/dd/images/618a103511718/widen_920x0.jpg)
有和没有距离混合:
![](https://cdn.80.lv/api/upload/content/94/images/618a104616a9e/contain_620x323.jpg)
![](https://cdn.80.lv/api/upload/content/94/images/618a10460e553/contain_620x323.jpg)
2 中的1
这有助于修复距离纹理可见性问题。现在,我需要解决耕作问题。为此, 我创建了另一个材质函数来帮助去除纹理。
![](https://cdn.80.lv/api/upload/content/5a/images/618a10998b4ea/widen_920x0.jpg)
为了更好地解释它,我在这种材质中应用了渐变纹理。
有和没有 MF 单元格平铺:
![](https://cdn.80.lv/api/upload/content/05/images/618a10f713646/contain_620x310.jpg)
![](https://cdn.80.lv/api/upload/content/d9/images/618a1101a2dfd/contain_620x310.jpg)
2 中的1
此材质函数采用随机纹理块并旋转它们并将它们相互投射以消除重复耕作。这种技术只适用于有机纹理,而且有点贵。
然后,我再次添加了相同的距离节点来修复距离纹理可见性。
![](https://cdn.80.lv/api/upload/content/ec/images/618a114c7d959/widen_920x0.jpg)
在地形纹理上添加一些宏观变化给人以真实感。
![](https://cdn.80.lv/api/upload/content/3f/images/618a116a798be/widen_920x0.jpg)
然后将它与最终的漫反射贴图相乘。
![](https://cdn.80.lv/api/upload/content/06/images/618a11901b07c/contain_620x296.jpg)
![](https://cdn.80.lv/api/upload/content/06/images/618a11902d95f/contain_620x296.jpg)
2 中的1
为了提高着色器的性能,我同时使用了 Tilling 方法并放置了一个 Switch 节点来打开/关闭 de-tilling MF。
![](https://cdn.80.lv/api/upload/content/e5/images/618a12057066a/widen_920x0.jpg)
使用相同的程序,我创建了除悬崖之外的所有其他材质层。
MF 三平面
Tri-Planar for Diffuse/RAM,对于悬崖材质,我使用了三平面技术从所有轴获得纹理投影。
![](https://cdn.80.lv/api/upload/content/ca/images/618a127d3bc4a/widen_920x0.jpg)
MF 三平面法线
![](https://cdn.80.lv/api/upload/content/3d/images/618a12b0cef0a/widen_920x0.jpg)
本教程帮助我了解了三平面的工作原理。
然后,我添加了一些距离耕作节点来解决远纹理可见性问题。
MF 三平面距离
![](https://cdn.80.lv/api/upload/content/9e/images/618a12f9eb98c/widen_920x0.jpg)
MF 三平面距离法线
![](https://cdn.80.lv/api/upload/content/8b/images/618a1348c43a8/widen_920x0.jpg)
现在我需要在最终着色器中编译所有材质层。在 6 个材质层中,我根据高度选择了其中三个用于汽车材质油漆功能 – Cliff (MF Cliff)、Dry Grass (MF Material 01) 和 Grass (MF Material 02)。
然后我使用 World Aligned Blend 节点来创建 alpha,然后使用 MatLayerBlend 节点来混合材质层。最初,我开始混合 Cliff 和 Dry Grass。混合锐度和混合偏差有助于控制混合强度和区域。
![](https://cdn.80.lv/api/upload/content/67/images/618a13a337d01/widen_920x0.jpg)
只是为了测试,我把红色代表悬崖,绿色代表干草,蓝色代表草。然后,以同样的方式,我添加了一个蓝色材质层并将其与红色和绿色混合。
![](https://cdn.80.lv/api/upload/content/1f/images/618a13ffea7e3/contain_620x324.jpg)
![](https://cdn.80.lv/api/upload/content/d8/images/618a14061fee9/contain_620x324.jpg)
2 中的1
然后我创建了另一个混合图,它有助于在噪波纹理的帮助下将干草与绿草混合。
![](https://cdn.80.lv/api/upload/content/60/images/618a14218363b/contain_620x307.jpg)
![](https://cdn.80.lv/api/upload/content/60/images/618a14218b78b/contain_620x307.jpg)
2 中的1
然后我在山顶上添加了雪,为此,我使用我的地形高度图创建了一个蒙版。
![](https://cdn.80.lv/api/upload/content/20/images/618a1455eb625/contain_620x620.jpg)
![](https://cdn.80.lv/api/upload/content/20/images/618a1455e3b50/contain_620x620.jpg)
2 中的1
然后我在这个雪面具上放了 0.0248 的耕作,所以它会与网格正确对齐。
![](https://cdn.80.lv/api/upload/content/86/images/618a146f8deb0/widen_920x0.jpg)
将所有内容混合在一起后,结果如下所示:
![](https://cdn.80.lv/api/upload/content/3b/images/618a1489ea0a2/widen_920x0.jpg)
MF镶嵌
我为曲面细分创建了另一个材质函数,并提供了一些控件来设置曲面细分的距离和数量。
![](https://cdn.80.lv/api/upload/content/cd/images/618a14bd8cea4/widen_920x0.jpg)
![](https://cdn.80.lv/api/upload/content/c2/images/618a14c21503e/widen_920x0.jpg)
现在,当自动混合图层准备就绪时,我也添加了手动材质绘制的功能。为此,我将 Auto-Material Blend 与其他 6 种材料合并。
![](https://cdn.80.lv/api/upload/content/24/images/618a1514efc14/widen_920x0.jpg)
![](https://cdn.80.lv/api/upload/content/2e/images/618a151d79740/widen_920x0.jpg)
然后根据材质,我创建了一个景观草类型,它有助于根据指定的纹理自动生成树叶。
![](https://cdn.80.lv/api/upload/content/54/images/618a15484fc2c/widen_920x0.jpg)
对于这个项目,我使用了其中的 4 个。
- 景观灌木 – 在噪声掩码到来的地方生成灌木。
- Landscape Grass – 根据蓝色遮罩生成草。
- 景观树 – 根据绿色遮罩生成树木。
- 景观石 – 在我绘制石材的地方生成石头。
![](https://cdn.80.lv/api/upload/content/6d/images/618a1574e654e/widen_920x0.jpg)
最后,这是 Auto Landscape Shader 的最终图表:
![](https://cdn.80.lv/api/upload/content/aa/images/618a159a3730b/widen_920x0.jpg)
灯光
我试图设置一个愉快的照明气氛。所以,我选择了黄金时段,这也有助于在水面上获得金色的倒影。在定向光中,我调整了颜色和强度(3 勒克斯),然后添加了一些光轴和光晕。为了在背景森林上获得良好的阴影,我增加了可移动光的动态阴影距离,我在定向光的级联阴影贴图中找到了这个选项。
![](https://cdn.80.lv/api/upload/content/f1/images/618a15f48de3a/widen_920x0.jpg)
天光和指数高度雾:
![](https://cdn.80.lv/api/upload/content/66/images/618a163f31bc1/contain_620x279.jpg)
![](https://cdn.80.lv/api/upload/content/66/images/618a163f29dbe/contain_620x279.jpg)
云和天空
对于天空,我使用了 HDRI,它帮助我获得了逼真的背景云。在山上移动的云是体积的。
后期制作
在后期制作中,我调整了一些参数,如白平衡、阴影和色调,使场景更加饱和和更丰富。
![](https://cdn.80.lv/api/upload/content/9e/images/618a16d254fcd/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/42/images/618a16dcc6d56/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/42/images/618a16dccef2d/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/d8/images/618a16e857729/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/90/images/618a16fdd76be/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/49/images/618a170497d7f/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/f4/images/618a170c1438b/contain_620x297.jpg)
![](https://cdn.80.lv/api/upload/content/46/images/618a171237a62/contain_620x297.jpg)
结论
我在这个项目上花了大约 3 个月的时间。我的主要重点是创建一个自动系统,帮助创建丰富的自然开放世界环境并尝试 UE 4.26 的新工具。我真的很喜欢这段旅程,并且在理解体积云和水方面遇到了很多挑战。
反馈对于提高整体质量非常重要,你的大脑最适合你,但如果你想向世界展示你的作品,你必须应用不同的观点并从中学习。特别感谢我的朋友们为改善整体构图而不断投入。
![](https://cdn.80.lv/api/upload/content/27/images/618a171fe8e82/widen_920x0.jpg)