大家好,我是《帕斯卡的契约》的总导演兼艺术总监。 我负责项目的剧情框架、玩法和美术表现。 本期我将从游戏制作的角度介绍《帕斯卡契约》的创作过程,并展示我们在《帕斯卡契约》的创作过程中经历了哪些阶段? 最后我会举一些游戏中的例子来分析美术表现和优化。
首先,我们来介绍一下我们的项目。 《帕斯卡契约》是一款使用Unity制作的动作角色扮演项目。 起初我们使用Unity 5.6版本,然后在开发的最后一年升级到Unity 2018。 我们从2016年开始研发,历时三年左右的研发时间。 第一年,制作人员大概有10人左右,后来我们一点点扩大。 到去年我们大概有30个人,整个项目95%的资源都是自己生产的。
这是我们公司的一面墙。 早期,我们会在墙上做很多尝试。 其实我们早期并没有太多的方向,当时我们做了很多风格上的尝试。
然后我发表了一个像这样的小草稿,这是一组带有黑暗中世纪主题的概念图。 稿件发表后,工作室里的所有人看完稿件都感到非常感兴趣。 大家出乎意料地一致,觉得这个方向可以尝试一下。
确定目标后,我继续细化角色设计,现在画面有剑士、女巫、贵族、恶魔猎手、重甲骑士等多种风格。
但由于当时我们只有大约 10 个人,所以我们决定缩小规模。 我们讨论了一下,觉得制作一款中世纪主题的动作战斗游戏可能是一个更安全的计划。
然后我们的项目就该开始设定初始目标了。 在这个阶段,我们觉得自己设定的目标永远应该在自己的能力范围内,设定一个实际可以完成的规模,设定一个可以实现的玩法,而不是说我心里有很多很多的事情。 这是一个好主意,但在实际生产中却遇到了困难。 结果,你只能完成60%或70%。 所以我们想了很多,希望能将产量保持在可管理的范围内。 这是我们当时做的一个早期的在线战斗演示。
当时,10个人花了一年的时间打造了一款可以在手机上闪现的在线对战模式。 它可以通过WiFi连接,就像《荣耀战魂》的PVP一样,但当时的玩法和画面并没有调整得很好。 ,游戏内容有点单薄,所以我们决定加入一些PVE元素。
这是PVE模式的下一个场景设定,一个看起来有点怪异、破旧的村庄。 为此,我们开始思考游戏的世界观和简单的故事。
当时我们做了一个所谓的基础PVE玩法。 怪物不断从远方而来。 为了保护基地,玩家需要不断击杀怪物来获得能量,然后利用能量来强化自己,不断迎接下一波怪物。
这个PVE玩法现在看起来很简单,但是对于当时的我们来说确实是有很大的意义,因为当时我们终于得到了一个像样的游戏框架,而且玩起来也确实是挺好玩的,给了我们很大的帮助。早期阶段。 我们有很大的信心。 当我们看到这一步之后,我们想我们不妨把这件事做好。
幸好现场得救了。 这个场景是我们最终启动之后的场景。 海格姆第一关基本保留了原来的区域,然后在此基础上继续扩大场景。 这时候我们的目标更加明确了,项目正式启动了。 推一推,它就会像雪球一样越滚越大。
关于世界观的包装,我觉得我们有一些自己的想法,尤其是在做手游的时候。 当游戏受到尺寸的限制时,我们无法制作大地图的游戏。 你不能让球员为所欲为。 如果想去任何地方,玩家肯定会想为什么我不能去那边的山,或者为什么我不能过那边的河。 到时候我们就要给玩家一个合理的解释,让玩家感觉到这是一个合理存在的世界。
所以我们所做的,我们在这个项目中所做的,就是给当时的世界添加一个背景。 比如,世界失去了光明,只有有光明的地方,才是人类可以正常活动的地方。
那么这个世界就需要一个发光体,能够聚焦故事、聚焦情节、聚焦整个世界。 这是很自然的,所以我设计了上面的生物,它给世界带来了光明。 人们靠它生存,形成了这个世界观。
所以我们决定需要一个被黑雾笼罩的孤立世界。 居住在这里的人们的故事以及他们背后秘密的发现自然成为剧情的核心。 我们创造的场景将是人们生活在世界上的生态环境,也需要一个完整的故事链条。
主线剧情是一点点绘制出来的,主要人物也是一点点添加上去的。 然后世界观的设定不断完善、回滚。 整个世界观不断回滚,关卡设计不断更新。 终于得到了我们想要的故事系统和世界观。
世界观定下来之后,我希望世界上所有的系统,一些系统,包括玩法系统,都是为世界观服务的。 因此,当时设计了一个合理的制度。 这是一个绝望、失控的世界。 每个人都可能处于崩溃的边缘,主角当然也不例外。 他所看到的一切疯狂的事情,或者说这些疯狂的事情会烧毁他所有的理智,他可能时刻处于理性与非理性的边缘。
在一个混乱的世界里,当理智崩溃时会发生什么? 无论你看到的是超自然的怪物、疯狂的boss,还是被背叛的队友,这些都是通过游戏的理性系统展现出来的。 但它仍然是在统一的世界观下,所以这是一个完整的封装,并不意味着游戏玩法、美术、剧情都是分开加工的。 我们想时刻提醒玩家,你们正处于一个疯狂的世界中。
屏幕设置和技巧。 当时考虑到我们的人力就这么少,我们就要想办法节省资源,减少工作量。 所以在我们制作的世界观设定中,外界都是黑雾,整个游戏都处于浓雾之中,而且光源非常微弱,很难看清远处,所以游戏的视距不需要太远。被打开。 它非常高,不需要创建一些非常繁琐的细节,这也使得我们实际创建的体积要小很多。
关于上面怎么做,我会在后期场景制作中详细分析。 这是我们的主角组之一。
我们刚开始设计角色的时候,其实考虑了很多问题。 比如手机屏幕比较小,字符的比例就会比较小。 因此,在设计的时候,我们会稍微夸大比例,让物体的厚度变小。 它比较坚固,没有特别小的设计,基本上体积很大。 这样,即使这个东西缩小了,在屏幕上也不是很大,你仍然可以感受到它的体积感和体积感。
下图展示了角色制作的基本流程,从原画到高模,再到材质的绘制。
材质绘制流程方面,首先会用来绘制真实材质,这基本上就是PBR的基本流程。
由于手机内存非常珍贵,纹理的使用也有限,所以我们主要关注材质的调整。 以下是在游戏引擎中还原的实际效果。
当我们这样做时,我们基本上使用的是全尺寸纹理,最终会根据游戏的内存进行优化。
基本上,我们不会专门压缩纹理。 我们可能会根据情况进行一些压缩,主要是看内存的剩余情况。 我们对Unity的标准材质进行了深入的研究,并且用Unity做得非常好。 有了连接,几乎一出口,就只能出口当时的标准材料。
最后,我们使用了三种类型的纹理。 一是金属度或粗糙度,基本上是在alpha通道中调整的。 总的来说,这是一种更节省资源的方法。
这是另一个角色。 她的特点是,当她攻击别人的时候,还能吸收别人的生命,储存在她身上的血瓶里。 这个血瓶会根据自己的攻击或者自身的回血而上下波动。
对于这个血瓶,我们用图形来实现效果,随着角色的移动,你可以看到里面的液体在晃动。 基本上保持水平运动。 当然,这只是事倍功半,最终实际效果比这还要好一点。
这是我们的小罐子之一。
我们对主角组和boss基本采用PBR流程,但由于主角或boss出现的数量比较奇数,所以可以更准确地控制每个角色的素材球数量。 我们大概做了3~4个,分为武器、衣服、头发和皮肤,基本就分为这些材质球了。
在ACT游戏中,一个场景中可能会同时出现多个普通怪物,所以使用的基础材料比较简单。 虽然使用起来比较简单,但是我们还是遵循和Boss一样的制作工艺,并且沿用了出口的传统。 只不过材质球用的是比较传统的材质球,还有它的一些反射率什么的,基本上都是用一些反射环境球来模拟的。
下面是一个老板。 游戏中会出现很多这种不人道的boss,这确实给行动增添了很多麻烦。 我们的角色有300多块骨头,但那是因为在特定的战斗场景中只有主角和boss,所以这种消耗也是可以接受的。
在大型boss战中,我们使用骨骼碰撞,并且会根据生命点的位置提供IK命中反馈,例如确定弱点的影响。 小怪基本都是使用胶囊碰撞。 这就是刚才提到的场景。 单个怪物和许多怪物之间存在权衡。
然后就是场景制作。 这里我举一个具体的例子,我们的的一个场景,来分析一下它的制作过程。
从制作角度来看,第一关结束时,这样的世界观才刚刚展现给玩家。 玩家们刚刚了解到,他们头顶上的大月亮实际上是我们游戏中的一个庞然大物,正对着你。
这个关卡希望让玩家非常清楚的知道这是一个什么样的世界,所以这个关卡的主题就是让玩家永远能够看到巨像。 想要的效果是整个游戏都能看到这个大家伙。 一直走在你身边。
大致确定剧本后,我会先做一个概念设计来传达想法的大方向,并建立一些重大的特殊事件场景,因为第一关当时有点黑暗,所以我希望第二关可以更亮。 ,但也得有那种诡异而孤独的气氛。 于是思路明确后,我就利用Unity的地形工具和一些简单的石笔刷快速创建了一个。 这主要是为了给规划者提供对整个楼层、氛围以及更大结构的了解。
看了关卡规划和轮廓设计后,他可能已经大致明白,像这样的场景,属于悬崖主题的场景,进入白盒阶段就行不通了。 因误会而误入歧途。
为什么我们需要做这一步呢? 就是如果直接让关卡搭建的话,很有可能把气氛、剧情、一些美术完全结合起来,而且无法很好的结合起来。 所以虽然一开始是多了一步,但是只要传达一个概念或者给出一些要素,其实会省掉后期很多问题。
此时,我们就交给关卡设计师进入白盒阶段。 这个阶段我们不断的完善和回滚,把角色放进去,不断的测试,不断的测试玩法,测试路线。 整个关卡验证完成后,再开始使用美术资源逐步取代白盒。
这是当时做的水平的白盒测试。 主要是用来测试路线和场景比例的。 即使如此,有时也会出现比例问题。 在白盒阶段搭建场景的时候,记得把它拉宽一点,可能会显得有点空,但是到了中后期,你放进去那些中景镜头或者一些细节之后,就会慢慢变得更舒适的比例。
在制作的过程中,确实有很多时候我们制作了白盒子,感觉还可以,但是一旦添加了小物体,就几乎没有战斗空间了,最后我们不得不把它砍掉并开始超过。 所以这也是需要注意的一点,希望大家能够引以为戒。
然后就是场景的路线优化。 阶段我会要求关卡规划人员特别注意,因为后面我们会用到遮挡消除和平截头体裁剪这两个东西,所以前期规划的时候一定要特别注意,多花点功夫设计路线时要注意。 转几个弯,或者走进室内,或者让远处的视线被某个巨大的物体遮挡。 因此,玩法路线也会决定游戏后期优化的不便。 这主要是为了控制视野中模型面的数量以及Draw call。
作为一款手游,前期规划路线的时候确实应该考虑更多方面。 这就是刚才提到的遮挡剔除。
例如,场景中应尽量减少出现又长又直的道路,或者视野特别宽阔的地方。 比如上图中的绿色区域,就是绿色部分曝光的远景。 其实计算量还是可以接受的。
更远的风景其实已经被其他远处的房子淘汰了,基本不会参与计算。 如果你确实有特别大的需求,就需要制作一个视野开阔的大场景,通常就是这种场景。 它还将进行专门定制。 例如,如果你想制作一个非常大的塔,并且从下到上都可以非常清楚地看到它,那么你可能只将底部部分做得更详细,而顶部部分可能是透明的。 ,或者简化它。
那么说到场景材质,我们基本上都是用它来制作场景材质的。 整个场景中材质球的数量控制得比较严格,基本上在30到50个之间,一个场景中的所有材质球,但这确实也造成了一些问题。
《帕斯卡契约》的场景本身就存在素材重复过多的问题,但这是双方的一个权衡。 如果你有很大的场景和内容,要么内存会耗尽,要么你会做出一些视觉妥协。
这是用来制作砖墙的材料。 我觉得最大的好处就是可以快速利用连接节点根据需要快速修改迭代。 效率会非常高。 也可以根据一些实际情况来做。 需要修改加工,非常节省成本。
尤其是当场景比较大、比较宏大,需要大量需要重复使用的材质时,可以对材质进行重新采样,随机生成符合美术风格的新材质,大大节省了时间和人力成本。
事实上,我们在项目中并没有使用Unity的曲面编辑器,主要是因为我们的曲面场景有时达到3到4层,而且曲面区域比较狭窄,很难用编辑器处理,也不适合后期优化。 也比较困难,但是要看具体项目的需求。
如果项目比较开放,地图是开放或者平坦的,那么Unity的地图编辑器其实是比较成熟的。 我们实际上在这里制作了一个材质球,使用掩模贴图来混合两个表面纹理。 使用顶点颜色可以达到相同的目的。
说到光照,整个游戏采用了实时光照加上烘焙和Light Probe进行场景光照。 这三块实时光照是针对角色和怪物的,以及场景中的实时光照。 这三个照明实际上是分开的。 其实主要是为了方便调节场景的光线。 整个场景使用混合光来提供整个场景的主光。 对于人物和怪物,使用另一个实时灯光来实现整个身体的亮度和高光。
烘焙方面,我们主要采用混合光进行烘焙。 烘焙模式使用Mask。 我们在使用的时候遇到一个小问题。 即当暗部覆盖的面积比较大时,高光就会受此影响。 用MASK贴图覆盖它会导致整个暗部变得比较平坦。 我们使用了两种方法来解决这个问题。
一种是将环境反射贴图应用到场景的材质上,使材质在黑暗区域呈现高亮和立体感。 另一种用于一些非常特殊的情况。 为了模拟材质上的反向光,我们要求程序员在材质中编写反向光。 用于一些比较特殊的情况。 使用。 另外,当角色走进阴影时,他会打开点光源。 我们会在一些山洞或山洞里,或者在一些黑暗的建筑物内这样做。
烘焙时可能要注意的是尽可能减少贴图数量,以控制整体的Draw Call。 例如,在我们的项目中,我们使用了很多预制组件,它们是相同的模型和相同的材质,但由于它们不是分布在两个不同的地图上,因此它们的 Draw Calls 实际上不会起作用。 合并。
这是一个非常大的矛盾。 如果你使用的贴图太多,可能会有更多的Draw Call,但是如果你用的少了,你就得控制贴图的大小,否则阴影会模糊。 因此,UVS在贴图中的分布会造成阴影模糊和内存增加。 这两者需要你在项目工作时做出一些权衡。
关于light Probe,我们主要用它给一些动态物体附加光影,比如角色、怪物、以及一些交互机制。 后来我们发现场景中有一些特别小的物体,实际烘焙效果并不是很好。 。
因为小物体本身的UV很小,所以最后压缩贴图时,UV会集中在几个像素上。 如果像素处理不好,它们可能会变成黑斑。 但如果根本没有着色的话,这些物体在暗部和亮部的表现是完全一样的,这就很奇怪了。 物体在暗的部分可能显得有点亮,在亮的部分可能显得很暗。 。 所以我们在最后一篇文章中改为使用光探针着色。 因为物体本身比较小,如果你把它放在那里,在黑暗的部分,它的颜色就会比较深。 事实上,它不会是可见的,但它会比你烤的更深。 效果还好一点。
关于灯光,因为场景的重复性很高,所以我们在制作时有一个概念,就是一定要用灯光作为玩家的记忆点。 这使得光对我们非常重要。 我们使用相同的材质需要根据不同的光照来营造不同的场景氛围。 这是我们整个制作场景的一个难点。
说到整个游戏的阴影。 游戏阴影分为角色阴影、场景阴影和其他一些动态阴影。 我们的投影方法实际上是一种更通用的方法。 使用专用投影相机根据光照方向拍摄场景和人物的剪影,捕捉到RT地图上,然后根据投影投影到地面上。 这样一来,无论有多少怪物和角色,都只会生成一次Draw Call,超出主角范围的就不会被渲染。 而且,你可以根据这张RT图以及这张RT图的格式设置来做一些处理。 你还可以添加一些抗锯齿什么的。
对于阴影,我们基本上使用传统的烘焙阴影、场景阴影和其他动态阴影,例如云和雾投射的阴影。 它们基本上是使用 RT 地图实现的,就像角色一样。
我们基本上都是使用顶点动画来对场景中的物体进行动画处理,比如植被、飘扬的旗帜等,相对来说比较节省资源。 另外,当人走到草地上并弯曲它时,它是根据角色坐标与草地位置之间的距离、程序控制和顶点偏移来实现的。
如前所述,我们的世界观被设计得更加聪明。 整个世界都处于黑雾之中,所以我们游戏的雾气非常浓。 如图所示,这些红圈基本上都是雾,所以里面不需要有任何细节。
然后我们只需要留下大石头和一些建筑物的轮廓,其他的基本都关掉。 在这种情况下,我们所做的实际上是对所有这些项目进行分组,并根据它们的大小进行分组。 物体越大,距离越远,能看到的距离就越远。
比如一些建筑物的轮廓,或者一些构成整个场景的大石头。 对象越小,格式范围越接近。 基本上遵循这个规则,所有的物体都会被分成不同的图层,然后对每个图层进行可视范围设置并添加LOD,这样可以大大减少消耗。
事实上,我们这样做之后,LOD的工作量并不是很大,所以我们在游戏中并没有大量使用LOD。
至于雾,雾分为体积雾、定制雾片和基本雾。 我们对体积雾进行了一些模拟,这基本上是传统上帝射线的效果。 然后使用渲染粒子实现定制的雾。 基本上就是我们整个游戏中定制的雾,基本上都是放在地面上的。 有些模拟的流云雾气靠近就会消失,而且如果使用软粒子就不会出现硬边,是比较方便的方法。
关于相机调整,由于游戏中敌方士兵的类型体型范围非常广泛,因此我们针对不同体型和怪物制作了一套专门用于调整相机的工具。 可以说,锁定每只怪物都是一样的。 是专门独立调整的。 在这个过程中,你也会考虑这个怪物的攻击方式。
例如,如果远程法师的攻击抛物线比较高,那么当我们调整镜头时,距离和镜头的距离就会相对更宽一些。
在制作角色的面部表情和嘴巴动画时,我们只需为角色设置22个面部骨骼点即可实现游戏中面部所需的基本动画。 嘴型和表情其实是一个预先设定好的动画片段,然后调用这些基于音频融合的片段。
对于Blend Tree来说,对于3D游戏来说,无论是手机模拟摇杆还是摇杆,玩家在控制这些角色的移动时实际上都可以向任意方向移动。 例如,我们在设计 Vio 拉动时,为了与另一个角色 锁定目标后的移动方式区别,我们设计了大约 10 个动画片段,包括前、后、左、右、上、下 10 个动画片段。向下,进行融合。 这就是当时发生的事情。 中提琴中的混合树。
除了一般的行走位置动画之外,角色的攻击动画也占据了非常大的一部分资源。 攻击和攻击的逻辑判断非常重要。 我们结合状态机的参数系统,自定义曲线值,让程序分析当前的动画逻辑状态,实现角色攻击时对目标的判断。
例如,根据预定的攻击类型编号进行武器判断,然后检索对应的攻击碰撞框来实现这些方法。 另外,我们在项目制作时其实花了很多时间来调整这些Curve参数,比如攻击是否可以转向、攻击碰撞开启的时机、连锁判断等,而这些调整的结果将直接影响 它影响整个游戏的感觉,尤其是动作游戏。 您的感觉质量实际上是通过拉动这些曲线来实现的。
我们可能会在整个游戏中花很多时间不断调整这些曲线,然后我们整个角色使用全身的IK系统,包括角色瞄准和脚步IK,然后收集IK,比如我们现在看到的这张图角色站在不同的表面上,脚骨会发生一定的变形。
关卡制作,我们在制作关卡的时候,其实给敌方士兵创建了非常丰富的状态机机制,并且创建了几个休息动画和隐藏攻击动画。 在整个游戏中你会看到一些怪物躲在角落里。 ,偷袭你这里,这些其实都是专门定制的,怪物会有视觉和听觉的方向和范围。
比如这张图中的黄色圆圈就是听觉范围,红色三角形就是视觉范围。 如果怪物没有看到你,你慢慢走也不会吵醒它们,但如果你跑过去,可能会触发它们的攻击。
该关卡使用动态加载来加载怪物。 加载场景时,这些怪物会被预先加载到内存中。 场景中放置了很多点,然后放置了很多专门设置的显示框。 这就是对于绿框而言,只有当角色进入绿框范围内时,绿框内的怪物才会被动态加载。 这样可以更安全地控制怪物的加载和在线控制,也可以更准确地控制。 我想哪些怪物显示,哪些怪物不显示。
关于过场动画的最后一句话。 说到过场动画,我通常会先和编剧聊天。 之后,我确定大体情节。 然后我创建一个故事板,将我脑海中的一些想法形象化,然后我添加计划和程序来一起修改和修改。
这个阶段主要是判断是否能够达到一些效果。 如果没有,那么你可能要讨论一个可行的计划并继续修改故事板。
故事板最终确定后,我们将以最大的速度做一个。 这主要用于确认故事结构和镜头的合理性。
在此阶段,不会添加面部表情和口形状,但它们将被用作配音的参考。 完成配音部分并确认没有问题后,他们将继续添加表情和口形。
游戏中有一些相对复杂的过场动画。 为了不占据过多的内存资源,我们已经定制了一个及时的加载系统,该系统可以在完成性能完成后立即释放游戏内存。 然后根据预设摄像头,调用角色ID和相应的过场动画资源,例如场景样式,一些灯光和一些声音效果等。同时,该程序还可以通过代码来控制艺术的性能。
Unity的功能非常强大。 在早期,我们实际上没有使用它。 我们使用愚蠢的方法来实现游戏中的一些过渡要求。 实施Unity功能后,我们很早就投资了使用此功能,并发现使用后它确实很棒,并且效率线性提高。 此外,我们合并了自己的项目,并设计了一组状态控制器,可以通过确定当前操纵的角色使用,并动态调用一些相应的性能动画。
此外,在一些简短的动画中,您还可以执行一些简单的单发方法。
以上是我与您分享的内容。 实际上,我们没有使用一些特别复杂或定制的功能,而是使用了Unity本身的强大功能。 这些东西如何灵活使用? 我认为,通过我们的项目和今天的分享,我们可以给所有人带来一些想法,谢谢!
/结尾/
还没有评论,来说两句吧...