Notifications
Article
在Unity中制作逼真的建筑场景
Published 8 months ago
673
0
在创作游戏中,场景的制作是必须要面对的问题,如何高效制作好感染力强、让人印象深刻的场景是每个开发者都会面临的难题,因为场景的细节和逼真度处理起来并不简单。

本篇文章中,游戏开发工程师Toivo Glumov 和 概念艺术家Natalie Kayurova将为我们讲解如何在Unity中打造细节丰富、十分逼真的建筑场景,他们将分享在制作过程中的心得,包括遇到的问题和解决方案,以此启发读者制作出自己的建筑场景。

项目介绍

Toivo和Natalie从事游戏开发多年,具有相当丰富的开发经验。Natalie是VR项目《Arktika》的概念艺术家,Toivo则为《Call of Duty: Infinite Warfare》创作了很多模型。本文中的使用的游戏场景便是二人合作创作。
在创作建筑时,使用一座外部桥连接二个建筑,会使得普通的房子更有趣,让人印象深刻。二位创作者去到了有很多这类建筑的圣彼得堡。他们找到了一个不错的庭院作为参考素材,从这个环境出发,构想了一个故事和游戏场景,以此为启发开始场景制作。
项目分工方面,Toivo负责技术部分,包括:建立渲染管道、创建模块、制作程序化纹理、制作关卡和渲染设置等。Natalie则负责艺术方面,如颜色、光照、内容、后期处理设置等,除此之外,她还负责角色建模和很多其它元素。
Toivo喜欢程序化的解决方案,这样能使工作流程更高效,Allegorithmic为他提供了这样的工具来进行测试,让他如虎添翼。由于Allegorithmic给Unity提供了强大的解决方案,所以Toivo选择了Unity完成这个项目。
他使用了Substance Painter中适用于Unity的Material Layering着色器,基于这个着色器文件做了些修改,原着色器文件和修改后的着色器文件将在文末提供下载地址,使用时将Toivo的着色器文件,直接替换Material Layering着色器文件即可。
这个着色器使用1个RGB遮罩混合4个循环贴图材质,同时使用了环境光遮蔽图和法线贴图。除此之外,它还有一大便利之处,那就是Unity可以直接从Substance Painter自动加载纹理、设置和材质。而唯一缺点是,每次游戏启动时都需要生成纹理,从而增加了初始化的时间,不过这个问题可以通过手动指定常规位图来解决。

建筑部分制作经验

Natalie首先绘制了一个由三部分组成的外观轮廓,绘制完成后又把轮廓细分为了更小的模块。Toivo在3ds Max中制作了基础的模型,然后在ZBrush中绘制了一些元素用于法线贴图烘培。
需要注意,在展开遮罩、AO、法线这三张纹理的UV时,所用的UV壳要展开到相同的UV坐标里。同时也需要考虑贴图材质的方向,以及与相邻模块之间的无缝衔接。
墙的模块要映射为方形布局,这样才能正确显示循环贴图块。Toivo为这个模块选择的大小尺寸为400X400 厘米,循环贴图大小为2倍时,纹理像素的密度为512 像素/米,大小为4倍时密度为1024像素/米,依此类推。有些模型比其它模型大了2倍,因此为这些模型选用了更高的贴图循环值,来保证纹理密度。

场景的细节完善

大体部分做完之后,Toivo就已经完成了一些可以在环境中重复使用的小工具。因为使用了遮罩来混合材质,所以即使只用相同的遮罩来混合材质,同样的模块仍然可能看起来与混合前的不同。如果添加了第二层遮罩,同样的模型还可以产生更多的变体,从而快速制作出多个不一样的模型。

制作瑕疵

在绘制时,考虑到材质的纹理最后会放到Substance Painter 中进行处理,在ZBrush中只创建了一些常用体,并没对细节进行处理。
例如:在地面上添加一些几何体来制造凹凸不平的效果。为了避免烘培时产生不必要的视觉误差,除了用作门口的切口,Toivo将所有法线都调整为向上方向。

材质

除了少数几个小道具外,场景中的大部分对象都共享相同的材质。Toivo使用Substance Designer为项目制作了大约40个程序化材质,这样在Unity中调整纹理会非常方便。
墙的材质结构图如下:
墙壁上的裂缝制作方式如下:
制作屋顶时,主要使用了这些材质的不同设置和组合方式来生成。简单来说,屋顶包含了金属、粗糙涂层以及混有泥土的锈迹等这些材质的不同组合,来营造细节丰富的逼真效果。
重复的元素使用不同的材质来制作效果会更好一些。例如:墙的一部分材质是光滑石膏,其它部分由纹理线条或者有装饰性石块组成。这种方法通常对于任何对象都适用,例如:在场景中的金属管道是由不同的材质组成的。在这种情况下,要格外注意材质的遮罩和纹理,它们的精细程度最好有所区别。
场景中的一些材质的图片:
Substance Painter主要用于创建混合遮罩,Toivo使用了它的标准Material Layering着色器来自定义材质。在此也可以使用标准金属-粗糙度着色器,这样会稍微方便些。

窗户制作

窗户除了窗框部分也都是程序化的材质,便于建模并烘培到位图中。窗户的设计与现实中的相同。通常在那些旧房子中都是双层窗户,窗户后是窗帘。在使用Substance Designer制作时,Toivo添加了伪折射效果,模拟出窗帘的形状以及在窗后添加的光亮,如灯、电视等,同时他也添加了污垢和灰尘,在木质窗框加上小磨损等细节,这样一来窗户会看起来更为真实。

光照效果

在这个项目中,光照是为了增加物体的对比度,以此来使得相似的元素看起来有所不同。这也就是为什么有些部分场景是亮的,有些则处在阴影中。
对于光照而言,Toivo和Natalie在Unity中使用了渐进式光照贴图,对于GI来说这是一个方便且强大的工具。它可以用来制作逼真的阴影,并且可以很好处理贴图。
为了得到更高质量的光照贴图,Toivo为对象制作了第二套UV贴图,保证最少数量的UV接缝以及高填充值。有些光源为点光源,其中有些是用了IES纹理。场景中还有用于小对象和贴花的光照探针。同时还使用了反射探针来保证正确的反射效果。

后期处理

后期处理也是个很重要的部分。本项目中大部分场景都是灰黄色调,使得场景各个部分在色调上看起来非常相似。为了使呈现的画面有所区别,Natalie在阴影中添加了蓝色,并调淡了黄色。这样,颜色渐变看起来更明显,呈现出更多色彩。
这里主要使用了Unity的后期处理特效包Post-processing stack进行处理,其中的Eye Adaptation功能很大程度上改善了视觉效果,Bloom功能则创造出了体积光的效果。

资源参考

项目中使用到的工具下载地址和参考网站:
  • 着色器文件
https://www.dropbox.com/s/uhb4p2locnyknlu/unity%2520material%2520layering%2520patch.zip?dl=0
  • Material Layering默认着色器文件
https://share.allegorithmic.com/libraries/2126Ÿ
  • Allegorithmic官网
http://www.allegorithmic.com/
此项目中的资源和场景不久后将在Asset Store资源商店中出售,这样大家就能体验这个环境场景,并将其应用到自己的游戏中。

小结

以上便是Toivo和Natalie用Unity开发建筑场景的经验介绍,想必读完文章后读者们也得到不少启发,了解到专业开发者是如何制作逼真的场景,是不是有点跃跃欲试了呢,那么就来动手创作出自己喜欢的建筑场景吧。更多Unity项目创作经验分享尽在Unity官方中文论坛(UnityChina.cn)!

Unity China
492
Comments