3

《昭和米国物语》分享:独立游戏开发商如何用好虚幻引擎?

 1 year ago
source link: http://www.gamelook.com.cn/2022/09/497933
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

《昭和米国物语》分享:独立游戏开发商如何用好虚幻引擎?

2022-09-21 • 开发

GameLook专稿,未经授权不得转载!

GameLook报道/由于《昭和米国物语》的火爆,今年铃空游戏在业内的关注度很高,作为一家已经成立十年之久的独立游戏开发商,它们是如何通过技术能力的提升以达到更高的标准?

9月17日,Unreal Circle线下技术沙龙武汉站盛大开幕,现场的各位嘉宾带来了理论与实战经验并重的精彩技术分享。其中,铃空游戏首席TA兼流程TD以《借助成熟体系,瞄准更高目标》为题,进行了精彩的演讲。

lazy.png

高颖俊:大家好!我是铃空游戏的老高,今天给大家讲的内容主题是,借助成熟的体系,瞄准更高的目标。

首先介绍一下我们公司,铃空游戏已经创立超过10年,是中国最早的主机游戏开发商之一,和PlayStation、任天堂、Xbox都保持着多年的深度合作。目前,我们正在开发两款主机游戏,希望大家关注我们的游戏,关注我们的公司。

lazy.png

回到我们现在的主题,为什么要聊“更高的目标”,因为随着团队扩大,现在美术的开销与管理往往都会遇到瓶颈,随着硬件设备的升级,很多团队可能会遇到一种情况,就是卷不动了,这个时候标准化与伸缩性就显得尤为重要。

3A公司与独立游戏公司对待这个问题的处理方式是不同的,独立游戏公司通常可以借鉴很多的标准与先进的流程达到更高的目标,当然也有反例,有时候光有目标但起跳的时候打到膝盖了,受到更大的开发消耗,制约了开发本身。

lazy.png

为了避坑,我们可以从一个比较简单的问题聊起,也就是颜色标准。

眼睛和大脑,是人体非常强的合成工具,它能帮你理解颜色与亮度,但电子设备可能就不太一样了,它必须通过Colour Profile去记录颜色与亮度,从而正确的反馈真实世界中的观感。

lazy.png

为什么说反馈的是观感,因为如果你想还原一个核爆的场景,那岂不是所有人看着显示器眼睛都要瞎了嘛,所以其实仅仅只是还原观感而已。

色域正确是进行LookDev的基础,实际上,整个过程中需要一个办法来对片源、对中间合成以及对最终输出进行正确的呈现。

lazy.png

在这个过程中,我们需要用到一些工具,比如OCIO。通过OCIO,我们可以尊崇ACES的颜色管理系统,这样说可能比较抽象,简单来说,假设我们要尊崇这样的设置,我们可以直接在软件中开启相应的配置,这是一个比较老的方法,为了匹配SubstancePainter的视口渲染以及虚幻引擎中的视口渲染。

lazy.png

当然,随着工具的更新,现在有更好的办法了,比如可以在操作系统中设置OCIO,这样大部分的软件都能正确的认识颜色。

那么,是什么影响了最终像素?从我自己的感觉来看主要是有这5个环节,从最开始的贴图到受到光照影响、其他的Effects对它的影响,还有一些后期合成,以及最后还有一个LUT调色。

lazy.png

如果你要正确的编辑材质,那肯定要确定调整亮度或调整颜色是这5个环节中的哪一个,要在所有光照环境下看起来都正确,这个Look Dev环节才算正确的进行。

当然,很多大厂帮我想到了一些解决方案来平衡写实的渲染和游戏中视口的呈现,这里我就不作详细说明。

lazy.png

基于我们需要开发的过程,我们往往可以用一个离线渲染器做游戏引擎中开发的参考,因为离线渲染器写实的能力是更强的。

除了颜色这部分,我们可以谈谈其他的工业标准或常用的技术手段和标准。

lazy.png

比如之前提到的LiveLink,这个可能有点特殊,它让多个软件之间的协作就像打一个网络游戏一样,因为很多软件尤其是三维软件,甚至于他们的轴向都不太一样,如果我们想要在这几个软件中不停的导入导出都是非常费时间的一件事。

lazy.png

除了在我们开发预览中,LiveLink在其他的几个地方也能看到作用,比如Mocap的一个实时预览、离线引擎的一个实时展现,甚至是补丁里Session Sync去实时的在引擎中,能看到这个工具所生成的结果。

这里我们以一个比较理想的开发流程,就是随着游戏引擎功能的扩展,随着开发流程的标准化,很多像USD这样场景管理的标准其实已经可以用在很多地方,比如把USD作为一个稳固的资产平台,它就能找到一个比较好的均衡点,既易于迭代,又能够避免在引擎中放很多很久很久的资源,最后成为一个优化的难题。

lazy.png

我们顺着这个内容往下看,其实Metahumans也算是这样的标准,后面我们也会主要讲一讲Metahumans的定制所需要的一些步骤。

首先我们来回顾一下Metahumans的特点,它本身性价比很高,能让你在快速的时间内开发出技术规格很高的一个数字人,它也有一个特别明显的特点,那便是在UE和Maya中能够完全同步的表现,那么我们怎样才能以最少的代价达成最高标准的资产,把开发能力都发挥到需要艺术导向的地方才是我们TA的目标。

接下来我将会简单讲解一下怎样用步骤化的方法拆解Metahuman,并对它进行一定程度上的定制。

lazy.png

第一个步骤就是动作对齐,它其实和Retarget动画有些类似,就是把我们所需要角色初始的Pose和Metahuman的标准Pose调成比较接近。

这里要注意的是,尽量匹配Metahuman标准角色的骨骼旋转,和注意调整人中轴的旋转状态。在某些时候还会遇到这样一些问题,用于拓扑的动作和原视模型的表现力不一致。

我们在做原始的模型时,可能没有考虑到Metahuman这么一些细节的表现,那有质量上的差距该怎么办呢?我们可以在后面慢慢的进行修补。

另外一个比较重要的阶段就是拓扑的形变,我们需要从原视模型上选取很多特征点,然后在拓扑目标上面也选取很多特征点,并让它进行匹配,这样就能达到我们的最终效果。但是这个过程,有时候我们不能一次成型,我们先看看这个结果到底能不能满足我们的需求。因为现在步骤化的工具特别强,所以大体上我们通过这个工具就能得到所需的结果。

lazy.png

第三步就是反向定位骨骼,因为我们把拓扑调整成Metahuman的标准拓扑以后,我们得根据新造型的情况去挪动节点的位置,这个过程在Maya中可以理解为huodini的节点,主要是用到了Pointdeform。

lazy.png

我们会通过计算原始模型到新模型之间的变化,去把原始骨骼节点挪动到我们新的目标位置,但是这个过程中,我们仅通过近似变换会得到一些不是完全想要的结果。因为骨骼本身有很多层级、结构,很有可能它只挪动了它的位置,让这些本身的逻辑被破坏,比如很多手部的辅助骨骼节点,它的位置应该是在手和关节之间三分之一或三分之二的位置,那这个时候我们需要根据这些逻辑来重新调整它们的位置。通过几次调整以后,我们就可以得到我们需要的结果。

lazy.png

到这里,我们在前期的处理就已经结束了,因为之前也提到过Metahuman有一个特点就是只能在Maya和UE里达成相同的表现效果,所以我们很多操作只能在Maya中完成。

比如我们为了不破坏整个文件、整个项目的设置,我们只能修改原始模型的一些情况,而不是重新导入模型进来,如果重新导入那工作量就会很大,这个时候我们主要用到的是传递属性这样的一个工具。

中间有几点需要注意,TransferAttribute这个工具本身相当于是一个实时的映射,我们肯定不可能带着修改器往后不停的做动画,因为它的效率比较低。那这时候我们要把前面的History给去掉,而这时候我们又碰到另外一个问题,我们当前的设置不允许把它所有的History给清理掉,因为一旦清理掉后,它的很多设置都会出现错误。

那我们应该怎么办呢,就要先把原视的模型复制出来,然后根据我们的操作,把点移动到应该的目标,最后再用PolyTransfer把两个拓扑模型完全相同的点、相同的模型,让它们进行一个转换。这样做的好处就在于,我们在用PolyTransfer的时候,是可以对OrigShape进行的,它身上不需要保有deform的历史,同时PolyTransfer也可以选择不保留。最终,它就可以通过近似来完成形状的变化。

中间还有一点需要注意,TransferAttribute这个过程中需要指定一个UV通道名称,这个一定要提前获取好,要不然它会导致整个软件崩溃。

最后这个部分,就是调整骨骼了,我们已经拥有了目标骨骼,那我们如何在Maya里面把对应的骨骼调到对应的地方,这就需要开启MoveJointMode,但是我们在开启这个过程中,和视口编辑器的MoveJointMode有点不同,在视口中是一次只能调整一个环节,在代码中开启了MoveJointMode其实是可以对所有的SkinCluster打开这个选项,然后在移动所有Joint的时候就不会有影响他们当前Deform的状态。

lazy.png

就像图片展示的这样,我们通过导入模型骨骼的位置,去匹配Driver Joints的位置,当然这个过程就和前面提到的那样,是用脚本来完成的,所以它不会导致任何的偏差。

lazy.png

接下来,我们就可以定制面部了,定制面部有三个方向。第一个方向可能是最简单的,而且很多早期视频都是用的这个方法,但是有一个问题,它只适合增添细节以及一些小范围修改,不适合大范围修改,一旦大面积修改会降低Metahuman预设的质量。

lazy.png

如果完全去定制整个面部,工程量就非常大了,和我们重新做一个没有太大的差别,这样可能就破坏了我们最先的目标,也就是用Metahuman省时省力且做出高精度的内容,所以我们往往可以采取中间的这个方案,利用MeshToMetahuman最大限度的去接近我们当前所需要的面部目标,然后再去调整如面部、身体等,这样就可以避开那些容易失真的区域,去对一些不是特别重要的地方进行一些修改,比如去做肩颈缝合这件事情。

在完成这些修改后,我们可以发散的想一想,比如我们可以继续优化其他的细节,让整个人做的更生动,比如修改贴图或继续去定制一些人物面部表情与初始姿态。

lazy.png

这个时候,我们还会想到,比如有一些其他的资产库,我们在里面有很多资产,我们需要用它们,把它们拿出来转成现有的Metahuman这一套的内容该怎么办呢?

其实,我们还是要利用到步骤化的思路,因为前面讲的那一套流程我们可以把它带入到一个比较自动化的流程中去,当资产人物角色拓扑关系与Metahuman角色的拓扑关系完全一样,它们之间的一个点对点近似过程的特征点其实也可以通过步骤化的工具去摘取出来,前面这一套整体的流程,就可以在像Houdini这样的步骤化工具中全自动实现。

接下来说几点,我们在这个过程中需要注意的细节问题,比如说形状修正,往往我们做纯拓扑的时候不能一次到位需要调整几次,有步骤化工具的帮忙,我们可以按照需要进行混合,这就比较灵活了。

lazy.png

比如图中展示的这样,我们需要不同匹配规则的身体部分或手脚,或让手脚维持原始形状,省去我们的开发过程。

lazy.png

另外一个就是,我们往往需要检查在这一次转移过程中,它的权重是否正确,换句话说,因为权重没有变,纯拓扑过程里我们点匹配是否准确。这次我们可能就需要在Maya里导出一个检查用的Pose,让这些得出的结果直接导入到我们目前工作的工具中去,来进行检测。

如果有和目标不太接近的结果,我们可以在这个姿势之上进行继续调整,并且把修改结果映射回原视的动作上去,这也是一个比较常用的技巧,就比如说图中展示的这个结果。

lazy.png

往往我们在用不同工具的时候,或导入导出的时候,拓扑关系有可能会发生变化,比如我们把模型导入UE,从UE里导出的模型和从Maya里导出的模型可能会不一样。

lazy.png

比如UE会把模型碎裂成三角面,在UV断裂的时候把点断开,这个时候我们用步骤化的工具,也能做到把这些点的匹配关系找回来,并按照我们需要的模型,比如在UE里的结果我们就用UE里的拓扑关系去进行修改,在Maya里所需要的模型我们就按照四边面的方法去把它修改,保证它们中间的结果是实时同步的。

今天我分享的内容就到这里,谢谢大家。

如若转载,请注明出处:http://www.gamelook.com.cn/2022/09/497933


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK