12.17.2014

力争做到实时环境下的相片真实度

作者 Lasse Rode

简介

我的名字是Lasse Rode,我为xoio工作室工作。 我们是一家专注于建筑可视化和图形作品以及产品推广的小型公司。 一般我们使用诸如3ds Max及类似的软件在某种“传统”的三维环境中工作。 我们不断地查看新的渲染引擎,目前正在大量使用Corona Renderer、 V-Ray以及Octane。 每个引擎都有其长处,我们希望能用到每个引擎的长处。

在我看来,我们这个行业中有几个主要趋势: 我们期望如(照片般)的真实,并希望渲染速度更快 - 如果是非实时的话。 我们期望您不用老是在公司里等待着渲染作品的完成 - 尤其是在渲染动画时!

相比预渲染的静态图或动画,在很长一段时间以来,“real-time-thing” (实时)的主要缺点都是无法满足质量要求。 所以尽管这看起来很有趣,但其在视觉艺术方面的应用看起来是很难想象的 - 而且坦诚地说,这种“游戏化“的外观使得建筑和品牌领域的高端客户很难接受。

这个现象已经发生了巨大改变。 今天的实时引擎处理的效果已经非常漂亮和令人信服了!

为何选择虚幻引擎?

虚幻引擎4的发布在我们的行业里获得了巨大的关注,而且其可能性几乎是无限的。 PBR(基于物理的渲染)材质系统,以及方便的、供您将模型导入虚化引擎的导入管线是我们尝试虚幻引擎的最为主要的原因 - 别忘了还有出色的输出质量! 如果您看到过Koola在几周前受到热烈的欢迎的作品(您也可以在Marketplace下载到)- 您应该也和我们一样,都会坚信虚幻引擎4制作出色内容的能力。

下文中,我想与您分享我用于制作柏林公寓场景的工作流程的大纲(您可以从Marketplace下载这个作品),而且我想与您分享在整个过程中使用的技术和技巧。 其中一些技术和技巧是我自己发现的,而另一些是来自于我在网络上找到的信息。 虚幻引擎论坛文档是提供海量出色资源的好地方,那里有引擎配套的入门内容,同时您还可从Marketplace获得相应的资源和场景。

柏林公寓

我在2013年初使用3ds Max和Corona Renderer在柏林的一所历史性建筑内制作了这个公寓的系列图像。 这两个软件在处理颜色映射时非常灵活,这对我减弱整个作品中相当白蒙蒙的感觉非常有帮助。 这实际上也是我选择虚幻引擎4的原因。

我注意到虚幻引擎4对于具有黯淡光源和复杂贴图的场景非常好用。 我曾经以为在特别白的内部结构中要获得准确的阴影和全局光照并不太容易。

说实话: 确实需要技巧!

Realtime Berlin Flate

上图是使用3ds Max和Corona Renderer制作的初始渲染作品之一。 如您想要查看整个系列,请点击此处

但在这里我会从头讲起:

原始场景

original scene

整个建模是匆匆忙忙地在3dsmax中完成的,所以我实际上仅对最终图像中可见的部分进行了细节处理。 这种做法当前自然无法在实时环境中实现。 为了让场景可用于虚幻引擎,我不得不减少了一点范围,因为如果为了测试就对整个空间进行装饰和细节处理,这会占用太多时间。

我决定仅仅导出两个房间: 它们位于您在上方的截图中所能看到的较低位置。

为虚幻引擎导出几何体

如果您能牢记一些原则,那么这个任务会变得非常简单!

比较合理的做法是把整个流程分开操作。 由于我们对每个对象都把lightmass计算为单独的贴图,所以对较大的值我们需要谨慎一些,尤其是诸如墙壁和天花板的较大平面对象。 由于这个原因,我仅仅导出了我们实际可见的墙面的内表面。

我还对墙壁的顶面和地面长度添加了一点,从而让它们在稍后与天花板相交。 我发现这是一个很好的防止“漏光”的方法 - 这指的是当几何体没有闭合或不相交时产生的光照失真现象。 当我们创建具有许多复杂贴图的几何体空间时,这样做是没问题的 - 但是由于我们要制作的是一个特别白的空间,所以我们需要尽可能获得准确的全局光照,尤其是在角落处。

exporting the geometry for Unreal Engine

第二件关键的事是通过虚幻引擎的lightmass计算来为全局光照将被存储的通道创建展开的UV坐标。 在3ds Max中这指的是UV-通道2。

所有其它诸如漫反射、粗糙度、法线等的贴图使用的是通道1。虚化引擎使用的通道从0开始计算,这在一开始可能会造成一些困惑 - 但一旦您了解了这些,实际上就很简单了。

注意: 展开仅对光照贴图通道比较重要! 对于贴图通道来说,任意种类的映射都可以,诸如立方体或圆柱体映射。 在大多数情况下,3ds Max中的简单“flatten mapping”(平整映射)的展开就足以创建充足的UV坐标!

lightmap channel

如果您期望在虚幻引擎4中把场景放置在一起,犹如在您的3ds Max的场景那样,我们可以在导出时就把整个“空间”放置好,因为这样对象的坐标就更容易对齐。 对诸如椅子和其他资源的单个对象来说,我们仅仅只需导出一次,然后您可以在您的虚幻引擎场景中对其进行实例化处理。 出于这个目的,最好能将它们移动到您的3ds Max场景中心附近,因为虚幻引擎中新对象的支点将位于该位置。

chair 1

chair 2

您可以看到我使用的是高多边形几何体,而没有进行任何LOD简化。 当然我们仅推荐在像这样的小场景中这样做,因为我追求的是流畅的体验,而且不希望我的家具中出现任何锯齿边缘,所以我这样操作。但是我相信还有进行最优化的空间;) 。

请确认您的资源被合并到单个对象中,并且应用了不同的材质ID,以便稍后在虚幻引擎4中处理不同的材质!

然后,您可以把几何体保存为.fbx文件,接着您就可以开始使用虚幻引擎编辑器来处理了!

导入到虚幻引擎4中

导入FBX文件到虚幻引擎4非常顺利! 我是分几步完成的。

我准备了一些所需的文件:


•以单独的fbx文件的形式所存储的房间的几何体。
•资源的不同文件,每个文件中都存放了一些对象。
 
请确认您取消勾选“Combine Meshes”(组合网格物体),从而单独获取您的对象,并且不要烘焙到单个网格物体中!

Combine Meshes

材质


我是一个很直接的人,而且喜欢简单的设置! 说起来有点哲学方面的意思,因为相比起使用一个只有您能理解的设置,或是使用一个让您在半年后打开场景时就想不起来的设置,使用最简单的设置来完成目标要好得多。

所以着色器的这个示例是非常简单的,包含了漫反射贴图、进行了去饱和处理,并且和黑色进行了混合。 随后我们对相同的贴图进行颜色校正,并反转以放置到材质的粗糙度通道。 完成了:-D

Materials

我们没有在这里放置法线贴图,但您可以自由地在场景中探索材质!

Normal Map

在此处您可以看到应用于椅子和桌子的木头材质 - 这是展现木质结构和贴图的具有清晰、无光泽反射的暗色木头。

在这张图中,您可以看到另外两个可能引起您兴趣的材质,由阳光作为背光的窗帘 - 这是双面材质。

back-lit sunlight

您需要设置着色模型为 “Subsurface”(次表面),并添加一个具有小于1的值的常量节点,然后将其连接到您材质的Opacity(不透明)属性中以获得此效果。

另一个是前景的水罐,它应用了非常简单的玻璃材质:

foreground material

它具有较暗的漫反射颜色,值为0的粗糙度以及较高的高光值。 我还使用了值为1.5的Fresnel节点,用它来控制不透明度和折射。 还有许多更为复杂的方法来生成更为真实的玻璃 - 但坦率说,我对控制这样复杂的设置感到有些困难,所以这个简单的玻璃看起来对我来说也够用了 :)

请注意我勾选了“Two Sided”(双面)并在左侧的详细信息选项卡中设置了Translucency Lighting Mode(半透明光照模式)为的“TLM Surface” (半透明光照模式表面)。

TLM Surface

我在此处还想要展示的一个材质是地面,因为这是唯一应用了法线贴图的材质。

Material for Floor

在此处您可以看到由漫反射颜色、粗糙度贴图和法线贴图定义的材质。

漫反射颜色是由4个值的常量所定义的简单的、非常淡的淡灰色。

粗糙度就更加复杂一点: 在左侧,您可以看到使用TexCoord节点进行3次不同缩放的同一贴图。 每个贴图的红色通道都会随后与其他贴图相乘,然后作为alpha连接到线性插值节点 (Lerp) ,以混合到值中。 此示例中的0.3和0.2将会在地面的木板上造成轻微的噪点反射。 随后我们使用“Power”节点来调整它,从而获得看起来效果不错的刚刚好的粗糙度。

法线贴图再次受到TexCoord的影响,并且会随后通过“FlattenNormal”节点来进行一定量的平整,从而获得材质上轻微的调整。

准备资源

!在把资源拖曳到您的场景中前,最好能在几何体编辑器中对其应用材质。 您只需进行一次这样的操作,并且如果需要,您仍然可以在主场景中应用不同的材质。 这个过程很快: 您可以在此处看到,应用不同的材质ID到您的对象上,从而把不同的材质放置到它们应放置的位置上,这一点很重要!

Preparing Assets

构建场景

这个过程相当简短,但是: 需要把各项内容组合起来。 首先您需要拖入房间几何体。 最好的方法是选择所需的全部内容,并将其拖放到空白场景中。 随后,所有的家具和资源都应被放置到环境中。

Building the scene

在此处您可以(无法)看到外墙面的背面 - 正如我在上文中所解释的那样: 它们是单面的唯一原因是为了更好的lightmass运算。

出于这个目的,您需要对更大的对象设置较高的光照贴图分辨率值,比如说,对于墙面,我把这个值设置为2048。

Lightmap for large objects

如上所述,漏光可能会造成问题。 为防止出现此现象,我在整个场景周围放置了黑色的盒体。 从外面看起来有点脏 - 但是从内部看起来要干净得多 ;)

black boxes around whole scene

光照和Lightmass

光照也是一个相对简单的设置: 我使用了“Koola方式”: 这样组合了窗口前的阳光和具有点光源的平面以模拟天空光源。 这样既高效又容易控制!

到目前为止,对于计算全局光照,只有几处调整是重要的:

Global illumination tweak

我大大提升了光照反射以及间接光照质量。 同时我还降低平滑度为0.6。 这样细节的效果更好了,而且阴影不会被过于冲淡。

我还设置了直接光照为动态阴影,以获得更好的阴影效果。 这对稍后移动光照到动画中也是很重要的!

getting better shadows with dynamic shadow

在点击“Build”(构建)按钮前的最后一步是设置光照质量为“Production”(成品)!

Lighting Quality to Production

这样将会让整个场景都具有平滑的光照!

实际上当我完成到这步时,我第一次感到有点激动! 这实际上是这个引擎最出彩的地方: 让您感到激动! 能够以实时的方式来进行到“渲染”这一步,这确实是一个令人开心的时刻!

“后期处理”

虚幻引擎最出色的功能之一是能够在编辑器内应用颜色校正和相机特效。 您可以使用PostProcessVolume(后期处理体积)以完成全局设置。 我对饱和度、边纹和虚光、光溢出进行了一些调整,并且通过把最小和最大值都设置为1来禁用了自动曝光,而且我还通过设置Exposure Bias(曝光偏差)为1.42而增加了总体的亮度。 我还添加了镜头眩光,我感觉在实时环境中,使用它的效果真的很棒!

Post Processing

设置动画

能够自由在场景中移动让我感觉制作动画是一个非常容易和令人愉悦的任务,因为我能够在实时环境中获得即时反馈。 作为一个经常使用合成软件的用户,我在整合Matinee工具和设置动画上没有花费太多时间。 首先是设置Matinee Actor。

Setting up the Animation

当您打开Matinee时,您将会看到具有轨迹部分和曲线编辑器的窗口。

设置相机和动画的任务非常的简单。 和其他动画处理软件一样,运动是由关键帧和曲线控制的。 同时“cutting”(剪切)在Matinee编辑器内完成。

我创建了几个缓慢穿过空间的镜头: 能够看到您正在进行的操作确实能帮助您调整剪切的时机和相机移动的速度!

created a couple cameras

您可以在编辑器中就看到相机的轨迹并在运行时控制编辑过程!

在完成Matinee中的大致“cutting”(剪切)后,我随后导出整个动画为avi文件,在Premiere中对其进行了微调,并将其与音乐进行了校正。

结论

在从3ds Max导出文件到导入到虚幻引擎4的整个过程中,创造着色和光照以生成动画并随后将其发布到YouTube仅花费了我一天的时间。 在建筑可视化的行业中,这种速度是闻所未闻的,而且这很好地体现了虚幻引擎4在可视化工作中的巨大潜力。

“producing”(成品)图像的快速渲染速度确实使得创造的过程非常灵活和自由。 能够快速看到您所作操作的反馈结果是真正的革新之处!

我们正在不断地思考和测试将这种产品和工作流程作为一个整体应用到日常工作和环境的可能性。

虚幻引擎具有许多可能的应用,我们非常期待能探索这种可能性!

我期望本文能让您了解我制作的想法和整体的制作流程,并希望您能够喜欢柏林公寓场景 ;)

Lasse

xoio

最近文章

虚幻引擎中文教学福利:使用 C++ 开发多人游戏

Udemy 课程《虚幻引擎 4 大师:使用 C++ 开发多人游戏》由 Epic Games 中国提供官方中文字幕。本课程经过 Epic Games 认...

Drive Studio利用虚幻技术帮助FOX Sports的2018世界杯足球赛转播大放异彩

Drive Studio利用虚幻引擎功能设计的环境、插播广告和信息图形为FOX Sports的2018世界杯足球赛报道增光添彩。

在Daedalic的《State of Mind》中探索独特的剧情和玩法思路

我们找到了这个游戏的创作者,从而深入了解这款利用虚幻引擎4诠释超人类主义主题的叙事型游戏。