搜索 Unity

《Dragon Crashers》的2D艺术创作

2021年7月30日 类别 游戏 | 20 分 阅读
Image of Dragon Crashers battle in progress
Image of Dragon Crashers battle in progress
涵盖的主题
分享

Is this article helpful for you?

Thank you for your feedback!

Jarek Majewski是一名2D美术和编程的自由职业者,也是负责我们最新2D示例项目《Dragon Crashers》美术和动画的创作者。在与Unity 2D团队的Eduardo交谈时,Jarek谈及了他的创作过程,分享了制作精灵、2D光照和动画的技巧,及他偏好的艺术与设计软件Affinity Designer和Photo。 

你可以在Twitter(@mindjar)或他的个人网站上找到Jarek。

先以纸笔作画

我打小就喜欢画画,还沉醉于用想象力来创造自己的世界、故事和人物。而在接触电子游戏后,我便被其深深迷住了。于是我把自己对艺术和游戏的热情结合了起来。 

用铅笔作画比较简单,我能用最少的力气将描绘出自己的构想。我不需要准备什么,不需要打开软件,也不需要选择工具或色彩——纸笔能完美地将艺术构思与实物联系起来。

Image of Dragon Crasher sketch art
Jarek Majewski的一些早期草图

《Dragon Crashers》起初并没有龙

Image of Dragon Crashers sketch art

起初我的灵感来源于《地心之旅》《帝国时代:城堡围攻》和海盗船,但是在最后我提出以一个水晶矿作为背景,里头有一条龙睡在一堆黄金上。demo团队最终选择了这一条作为项目的主体构想,   

因为它能很好地展示Unity的创作功能,比方说用于制作矿车铁轨的Sprite Shape,及2D光照。项目中还包含了多个各具特色的双足和四足角色,每个都充分展示了精灵骨架绑定(sprite rigging)的功能。这个构想非常的完美,可以将故事性、艺术性和技术力很好地联系起来。

精灵的创作

我首先会研究精灵的实际形象,即使是高度风格化的画作也需要一定的真实感。

在为一个新游戏创作第一个精灵时,你可以多画几个不同风格的精灵,再最终奠定正确的美术风格。如果是为一个风格成熟的游戏制作精灵,你就需要以精灵周遭的环境作为参考,为精灵选择正确的比例、色调和观察角(这一点在俯视等距视角等镜头角度略微向上倾斜的游戏中尤为重要)。 

如果你的作品还带有外轮廓,轮廓的宽度就必须与环境中的其他物体相一致。这些要点在像素美术中同样关键:如果精灵的色调与游戏不匹配,可以在随后进行修改,但如果像素大小不对,整个精灵就需要从头重做。

Image of Dragon Crashers sketch art

在有了草图和环境参考后,你就可以开始制作了。 

我先画出粗略的形状或剪影,然后再加入细节。图片的格式主要为矢量图,矢量图具有灵活、易于编辑的优点,精灵在修改颜色、形状或尺寸时不会损失图像质量。

Image of dragon made using vector graphics

我喜欢尽可能保留精灵的可编辑性,光栅化或矢量图像都一样。我于是会在考虑到性能的前提下,尽可能多地使用图层。这样做的优点在于,我可以随时用这些原始文件创造一个不同的精灵。 

Exporting .png files using Export Persona in Affinity Designer

所有图层仅在导出时会合并成PNG格式的图片。图片导出主要借助Affinity Designer的Export Persona功能完成,功能支持一键导出多个精灵,可以将多张精灵合并成一个文件。导出功能还带有一个Continuous连续导出模式,当精灵有了任何变动时,导出文件便会自动更新。该功能可节省大量的时间。

创建精灵的法线贴图

一张好的法线贴图可以让2D精灵看起来就像3D。法线贴图中的每个像素会存储纹理的呈现角度。红、绿、蓝(RGB)通道存储了XYZ坐标上的角度。那么RGB这三个值是如何影响法线贴图的呢? 

Image depicting how the RGB values affect the angles of the normal map.

上方图例就是一张平面的法线贴图,其中的像素都面朝着摄像机。贴图的RGB值分别为127、127和255,每个颜色通道的数值范围为0到255,而127接近于中间值。如果我想让某个表面朝向左边(即角度为-90度),则需将R通道设置为0;如果想让它朝向右边,则需将R通道设置为255。表面如果想向下或向上改变角度,可将G通道的数值分别设置为0或255。

绘制法线贴图的一种方法是将不同受光角下的精灵画出来,然后将其合并成一个纹理。精灵将在R通道中接收一个来自右边的光,在G通道中接收一个来自上方的光,在B通道中接收一个来自前方的光,但为了简单起见,B通道在2D精灵上通常可以忽略不计。  

这种方法可能需要修改至少两次着色器,比较耗时。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

将精灵从Affinity Designer导出到法线贴图生成应用Sprite Illuminator。

另一种方法是使用自动的法线贴图生成应用。你只需在应用中打开精灵文件,在点击几下就能生成一张法线贴图。贴图生成应用并不会参考精灵本身的角度信息,所以不宜整个精灵都使用自动生成的贴图。你可以用它来生成斜面部分的法线贴图,如链条、电缆或龙尾。先将这部分精灵导入生成程序,调整数值后导出,然后再自行添加必要的部件和细节。 

我在《Dragon Crashers》中采用的方法是直接在精灵上涂色。在解释这个方法之前,我想先提一下基本色(base-color)的几个特点。如果你打算在游戏中大量使用2D光照,并充分发挥法线贴图的作用,就不要把光影画在精灵上。 

Image depicting color and light overlays

2D光照在已有光影效果的精灵上并不好看。并且你还要在法线贴图中画出光照,让工作量成倍增加。不过,我们确实可以画出一些不定向阴影(即ambient occlusion,环境光遮蔽),让精灵看起来更美观,但最好不要画出那些定向光线,比如太阳光。

With the 2D lights turned off we can observe that the sprite has the color information (albedo) but looks flat because it doesn’t contain light or shadow information.
在关闭2D光照时,我们可以观察到精灵的确有色彩信息(即albedo,反射率),但由于确少光影效果,看起来过于扁平。

在精灵上画出法线贴图

在绘制法线贴图时,你需要知道各个角度会呈现出哪些颜色。在《Dragon Crashers》里,这些都是我参考网上的法线贴图调色板做出来的。我接着在Blender中自行制作了一个调色板,并将其导出为.PNG文件。这个调色板是一个简单的球体,球体各角度的色彩都由我挑选并涂抹。在制作出调色板的形状后,我会使用矢量图进行颜色填充。你也可以像平时画画那样,用选好的画笔涂抹色彩,或者在作品上一个像素一个像素地画。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

在精灵上画出法线贴图

不同角度的色彩不需要100%准确,差几度并无大碍。不过,精灵的整体形状必须足够真实。如果某个角度的颜色不匹配周围的元素,那么整个形状在受光时就会显得四分五裂。

法线贴图的绘制要求我们有较强的空间想象力,因此在一开始可能比较困难。你可以先从盒子、木桶这种简单的形状开始,摸索正确呈现光影的方法,在长时间的实践中熟能生巧。

这里有几条值得注意的小捷径:在为球体绘制时,你可以直接粘贴球形的调色板;在为圆柱体绘制时,你可以截取球体的一部分粘贴后再进行拉伸。 

注意,复制粘贴、旋转部分法线贴图可能会破坏着色效果,不过这一点偶尔也能加以利用。例如,如果你需要的是一个凹陷的球面,就能把球体旋转180度来形成一个洞。 

具体的要求有具体的用法。一款游戏通常会用到大量的资源,而时间是有限的,所以我们要重点关注那些长时间出现在视野中的物体,简化其他部分,并且选择那些能让你事半功倍的技术。我个人推荐的工具有:

Normal Painter  Krita's Tangent brush   Sprite Illuminator  Laigter  Sprite Lamp

制作角色动画

我习惯于提前规划动画,明确在一定条件的限制下自己能做出什么。    

《Dragon Crashers》中 ,我大量选取了首个人物的资源,以此为基础制作其他角色的动画。我主要执掌了三名玩家角色和一名敌人的动画制作(恶龙的动画按下不表)。这些角色使用了相同的精灵蒙皮骨骼,并采用Unity 2D Animation软件包的Sprite Swap(精灵替换,目前处于实验状态)功能。同时,每位角色都需要有独特的视觉风格,避免看起来千篇一律。

Different characters using the same sprite-skinning skeleton
角色使用了相同的精灵蒙皮骨骼

在设计人物时,所有角色必须要有近似的形体,好使用相同的骨架,因此我在Affinity中做了一个简单的骨骼覆盖图。如此一来,我就能实时查看角色的四肢是否匹配上底层的骨骼结构。最终效果挺好,每个角色都能有自己的特色:一位戴着宽大的魔法帽,一位穿着厚重的胫甲,还有一位狼人。

我花了大量的时间来明确角色应有多少图层、哪块骨骼影响哪一图层,这些元素要在以后修改的话会非常头痛。当然,这一过程也有一些试错,但由于基础角色规划得较好,其他角色的制作可谓是水到渠成。

Conserving the layers information from Affinity Photo to Unity
Affinity Photo中的图层可保留到Unity中

在导入角色到Unity时,我使用了PSD Importer,它能保留Affinity中的图层结构和位置。由于角色制作采用了矢量图,因此每一图层都是由许多路径组成。为了将角色导入Unity,所有图层都必须栅格化,再导出为PSD文件(文件扩展名还得改为PSB)。于是我为每个角色保存了两份文件,一份是矢量图源文件,另一份是光栅化文件。如此一来如果我想做出一些调整,便能轻松找到可编辑的文件。

在将PSB文件导入Unity后,我使用了Skinning Editor进行骨骼绑定。我手动画出了所有的骨骼,再给每个图层自动生成了网格,并使用Auto Weights功能来关联各个骨骼。 

接着我着手优化角色,首先清理了精灵的网格,减少了其顶点数,然后梳理了骨骼权重,保证角色在各个姿态下都比较合理。我然后仔细检查了脚踝、膝盖和肘部这些关节弯曲的地方,小心地放置这些部位的网格顶点、设置骨骼权重,尽量让四肢的弯曲更显自然。

The colors show the influence area of the bones of the same color.
一块骨骼的影响范围以同颜色的色块表示。

在绑定完成之后,我创建了一个Sprite Library Asset,根据Categories和独特的Label名称对精灵进行划分。如果我需要制作另外的角色,只需将这个Sprite Library Asset替换掉即可。 我还在眼睛和嘴巴上使用了Sprite Swap用于制作面部表情,又为角色的四肢添加了2D IK,以在制作动画时方便控制角色。

The Sprite Resolver component helps to easily swap sprites during animation, in this case different mouth positions.
Sprite Resolver组件可在动画播放时替换精灵,这里替换掉的是不同的口型。

在完成以上步骤后,我把角色保存为了预制件,让任意修改能自动应用到其他角色身上:比方说调整IK、改变分类层、添加武器或附件,或为原预制件添加脚本组件,这些修改都会自动应用到其他角色上。这一点在面对庞大的角色数量时可以节省大量的时间。 

至于剩下的角色,我无须制作额外的骨骼,只要直接导入PSB文件即可。骨骼可直接复制角色预制件的骨骼,再根据新角色的外形调整其精灵网格的拓扑和权重。

法线贴图和遮罩贴图的导入就更简单了。我可使用快捷键Ctrl + D(Mac上为Cmd + D)将角色复制到Unity中,在Affinity中打开它,然后将所有图层替换为对应的法线图(或遮罩图)。而法线贴图并非带颜色的纹理,因此需要取消勾选Advanced > Sprite Import Settings下的RGB选项,接着我便能在Sprite Editor中将法线贴图和遮罩贴图设定为次级纹理。

这下角色就为动画制作做好准备了,而所有角色完全可以共享一套动画。角色的大多数动作使用了相同的动画片段,但每个角色都有独特的闲置和攻击动画,这是角色个性的体现。

Animating the dragon character
为恶龙制作动画

恶龙的动画制作流程更为直接。龙本身只需要使用一套皮肤,所以没有必要进行过长的制作规划,更多的精力投入到了角色的设计和总装上。大部分时间都用于检查翅膀、尾巴和颈部的绑定是否正确,在动画播放时精灵是否有可见的瑕疵。如果想在随后省去些头疼,你最好在绑定时就测试各种极端的姿势。

其它的过程,像是配置Sprite Swap、IK和额外贴图都与双足角色大致相同,除了那两条多出来的腿。

组装最终环境

这一阶段的首要任务是构思出最终的环境。我在开始之前已经对整个环境的氛围和展开,包括视效、游戏性和情绪,有了一个清晰的构想。这种基础性的构想是所有工作的中心,让我能有目的地放置预制件,其它细节则可以随后跟进。

起初我将环境资源导出至Unity并保存成预制件,在凑齐所有场景中所需的资源后,再开始尽情发挥。Unity在制作流程上显得非常灵活:我可以用Tilemap“画出”基础环境、用Sprite Shape添加精灵图案、手动摆放精灵,加入光照和雾气、粒子等特效。同样的,因为我已经对关卡布局有了清晰的想法,所以可以更加专注于视效。

此内容由第三方提供商托管,该第三方提供商不允许在未接受“Targeting Cookies”的情况下观看视频。如果想观看来自这些提供商的视频,请将“Targeting Cookies”的 Cookie 首选项设置为“是”。

另外在设计关卡流程时还需要将游戏性摆在第一位。在这种方法下,我们需要着重注意在互动层面上的几何形,首先摆放好所有平台、墙壁和房间,再添加敌人、障碍物和拾取道具等互动元素,然后进行测试和迭代。 

从总体上看,本阶段一个较为恰当的做法是将互动层与视觉元素分开。先搞清楚核心的游戏性,然后再添加视觉效果,这样你就能节省大量的时间和精力,当你(或关卡设计师)想重做游戏时,就不必重新摆设所有精心布置的装饰了。

制作中我个人最喜欢的Unity功能

这些相互兼容的功能让精灵和次级贴图的配置变得非常轻松,还能与normal sprite、Tilemaps、精灵着色器和Shader Graph等其他功能协同运行。 

2D光照

在打光时,一个不错的方法是将2D光照和遮罩贴图与2D骨架结合使用。这种方法类似于搭建3D环境的流程,我会先创建简单的不受光精灵、法线贴图和用于轮廓光的遮罩贴图,这样便不需要再根据环境和光照条件来重新绘制精灵了。精灵的光照正如绘制出来的贴图,并且本身也带有十足的手绘风,可以很好地融入周围环境。

Image depicting the different lighting in the dungeon

这一优点简直改变整个制作流程,这种新式流程甚至可以用来制作产品营销中所用的资源。你可以重复使用建好的游戏环境,在里头摆上新人物、重新设置光照,结果看起来仍会非常惊艳,而这些都毋须我们为人物额外制定姿态、绘制光影效果等等。在此基础上,你甚至能用后期处理效果来改变场景的氛围。

就我个人来说,我尤其喜欢用2D光照来添加阴影。当光照应用了Use Alpha Blend on Overlap设定且强度很低时,它就会在环境中生成阴影,成为一块阴影区域。我用这种方法制作了恶龙身下的阴翳。  

Sprite Shape功能

如果没有Sprite Shape,要我做2D游戏简直可以说是“无米之炊”。功能的设置和编辑都非常简便,你可以在几分钟内做出一个关卡,非常快速地完成原型的制作。它不仅仅能用于制作关卡内的几何形,我还用它制作了矿车铁轨、桥梁、吊索、背景里的脚手架和前景中的各种形状。

Image depicting different mine track prototypes

《Dragon Crashers》里,为了营造前景模糊的效果(该效果会大量耗费移动设备的机能),我甚至制作了一张模糊化的边缘纹理。可以说Sprite Shape的作用只有你的想不到。一个精灵形状只需要几秒钟即可完成修改,使得环境微调可节省大量的时间;几何形既可以非常尖锐,也可以借助Continuous Mirrored Point Mode使其变得圆润;Sprite Shape还能生成2D碰撞体,节省手动设置碰撞体的时间。 

如果你还没有用过Sprite Shape,快来尝试下,它能极大地改善你的工作流。 

Timeline时间轴

Andy Touch(Unity的资深内容开发者)使用Timeline制作了几乎所有《Dragon Crashers》的系统。时间轴的特点使得创作过程非常流畅:我可以直接在任意一条时间轴上做出小改动,不必担心会损害其它内容。Timeline系统高度模块化的特点让人惊喜,在时间轴上编辑过场动画及其他元素也非常容易,可嵌套的特性也能让整个流程更加高效。

Affinity Designer的使用技巧和窍门

Affinity Designer兼容Mac、Windows和iPad三种平台,支持2D游戏美术的矢量和光栅绘图流程与工具。  

应用中的Pen功能包含许多实用的快速绘制功能,可在软件中绘制出任何形状。你可以先从窗口底部的快捷功能开始熟悉。

尽可能提高作品的可编辑性。你可以多多使用可编辑的Compound功能。通常在合并颜色通道时,图像将保留一条固定的通道,无法在未来进一步编辑。如果我们在按住Alt键(Mac上则为Option键)的同时点击工具栏上的几何形按钮,Compound路径将形成一个组,图层将能保留一个影响效果的选项,包括Add(叠加)、Intersect(交集)、Subtract(剔除)和X模式,非常的方便!

使用Document调色板。这个调色板中设定的是文件全局的色彩,一旦有某种颜色被修改,任何使用该颜色的对象也会更新。这一点对制作物体和人物变体来说很方便。

上图显示了一名蓝色的战士角色,他腿部、胳膊、头盔和武器都是蓝色的。如果我们想将其改为绿色,只需在需要修改的部分应用document颜色,然后在色板进行修改,就能立即生成一名不同的角色。 

使用Symbols。通常来说,画布上会用到许多重复的对象,必如关卡环境图块或地砖。这时,如果你想修改这些对象要怎么办?你可以使用Symbols(符号图案),先将一个对象保存为一个Symbol,再大量复制填充,而只要有一个图案有了修改,其他同类型的图案也会更新。

善用Assets面板管理项目。Assets面板可显示出面板内所有游戏元素的概览,并且支持以所在关卡、类型、颜色等等分类标准对对象进行分组。你还能将这些对象拖到任意文件中,再检查图像的一致性、比例、在另一关卡中的呈现方式等等。你还能模拟游戏的屏幕显示或截取“屏幕截图”。

甚至,你可将按钮图案、开关和图标等UI元素放入面板,用于游戏界面的设计。

Affinity Photo使用技巧

Affinity Photo是一整套的图片编辑方案,兼容macOS、Windows和iOS平台。 

Affinity旗下的应用可互相兼容,在其它应用中保存的文件完全可以在Designer或Photo中打开。文件可用Designer的File > Edit菜单选项(或Photo的File > Open选项)打开编辑。 

这两个应用程序共享大多数功能,Affinity Photo同样支持Asset Panel和部分矢量绘图功能,且两者的界面相似,方便了切换使用。 

Image showcasing different game assets

而每个光栅绘图应用绝对少不了画笔功能,Affinity Photo有一个使用流畅、功能齐全的笔刷引擎,还支持数位板作画,你也可以导出和导入自定义笔刷。我很喜欢画笔稳定功能,功能可让线条变得非常流畅,对轮廓的绘制很有帮助。

除了超棒的光栅化图形和笔刷外,我另一个爱用的主要功能是Live Filters(实时滤镜),这种滤镜可以大幅修改作品观感的同时保留可编辑性。我特别喜欢多视角滤镜,它可以根据不同的视角来让图层变形,非常适用于摆放建筑物的窗户、墙上的海报或各类表面上的纹理。Live Filter内含Live Adjustments Layers和Blend Modes两种功能,可让你立即看到修改成果。 

最后要提的是Layer Effects(图层效果),它能够在图像上加入渐变色、投射阴影、内阴影、外轮廓、3D立体等众多效果。只要发挥一点创造力,你就能用这些效果做出任何东西,并且还不会损坏原图。

感谢Jarek能抽空分享2D美术、Unity、Affinity Designer和Photo的使用心得。 想要学习Unity的初学者可在此处详细了解Unity的2D工具集。

2021年7月30日 类别 游戏 | 20 分 阅读

Is this article helpful for you?

Thank you for your feedback!

涵盖的主题