查看原文
其他

2D Pixel Perfect:使用Unity创建复古16位游戏

Unity Unity官方平台 2022-05-07

在《2D Pixel Perfect:使用Unity创建任天堂红白机风格复古游戏》中,我们介绍了设置2D Pixel Perfect工具的方法,以及过去制作8位图形的方法。


本文我们将把目光转向16位图形,我们将在Mega Cat Studios的帮助下,学习如何创作Sega Genesis,Mega Drive和超级任天堂等游戏机风格的美术效果,包括重要的Unity设置,图形结构和调色板。

Mega Cat Studios将还原度极高的复古游戏变成了一种艺术形式。他们的多款游戏也提供实体卡带的形式,能够运行于Sega Genesis等复古游戏机上。


使用2D Pixel Perfect制作复古游戏

在Unity 2019.2中,2D Pixel Perfect是2D Renderer渲染器的一部分,位于轻量级渲染管线LWRP资源包中。


对于不使用LWRP的创作者,2D Pixel Perfect也有独立的资源包,提供相同的功能。本文我们将介绍如何在LWRP中设置项目。


使用Unity 2019.2和LWRP设置新项目

在Unity Hub中,单击New,选择2D,然后命名项目。


导入2D Pixel Perfect资源包,单击工具栏的Windows菜单,选择Package Manager。在弹出的窗口中,选择并安装Lightweight RP资源包,确保资源包版本是6.9.0或更高版本。



我们在编辑器配置2D Renderer渲染器,并创建新管线资源。在项目窗口中,右键单击资源视图,选择Create > Rendering > Lightweight Render Pipeline > Pipeline Asset。


在项目窗口的资源视图中,创建新的2D Renderer渲染器,单击右键,选择Create > Rendering > Lightweight Render Pipeline > 2D Renderer。



选中刚刚创建的管线资源。选择General部分,把Renderer Type从Forward Renderer改为Custom。把刚创建的2D Renderer指定到Data字段。



在Graphics设置中,把Scriptable Render Pipeline Settings设为新管线资源。这样就配置好了2D Renderer渲染器,包括2D Pixel Perfect Camera摄像机。


在Unity 2019.2中,2D精灵可以带有Sprite-Lit材质,允许精灵对2D光照条件作出反应。


如果没有在项目中使用2D光线,请确保材质不需要使用2D Lights光线才能让精灵可见,在这种情况下,我们可以把材质改为Sprites-Default。


针对16位图形设置Pixel Perfect

我们需要添加Pixel Perfect Camera组件到Main Camera,建议启用Run In Edit Mode。


Sega Genesis游戏机的分辨率为320×224 px,也就是8×8像素组成的40×28瓦片网格,这是NTSC版本的参数。超级任天堂游戏机的分辨率为256×224,即8×8像素组成的30×28瓦片,这也是NTSC版本下的参数。


对于二种图形风格,我们建议使用224 px作为高度分辨率,使用8 PPU值来设计资源。


下图是Sega Genesis游戏机的《刺猬索尼克》游戏,它在全屏模式下使用320×224分辨率的图像。通过使用该画面作为参考,我们发现8 Pixels Per Unit单位像素量适合相同分辨率和PPU值下的场景视图。



如果你希望回顾2D Pixel Perfect Camera组件上每个选项的作用,请阅读:《2D Pixel Perfect:使用Unity创建任天堂红白机风格复古游戏》。


创作Sega Genesis风格的美术

下面,我们将讲解创作不同游戏机画面美术风格的工作流程。和红白机的画面风格相比,Sega Genesis画面风格有更少的限制,对颜色的使用有更大的自由度。


由于Sega Genesis游戏机也有自身的限制,所以我们认为讲解游戏机硬件如何工作也很重要,从而让开发者可以在自己的复古游戏项目上实现这些限制效果。


调色板和子调色板

从8位游戏机转变到16位游戏机时,我们会在更强大的硬件上得到更多功能选项。因此,实现红白机美术效果的方法仍然适用。


所有图形也都存储在8×8大小的瓦片中,然后组合为更大的图像,无论图像是精灵还是背景元素。虽然16位硬件在调色板上提供更大的自由度,但我们也需要使用通用透明颜色方法来处理有限的子调色板。


和8位游戏机不同,16位游戏机通常没有硬编码的调色板,这意味着16位游戏机拥有比红白机更多的可用颜色。


Sega Genesis拥有包含15种颜色的子调色板,以及针对精灵透明度和图层透明度的常用颜色。然而,为Sega Genesis游戏机设计美术效果的其中一个缺陷也来自子调色板。


子调色板可以随意指定到精灵或背景瓦片上,但是Sega Genesis游戏机每次只可以使用4个子调色板。因此,艺术家必须留意子调色板中使用了什么颜色,以便最大化子调色板在精灵和背景的使用率。


Sega Genesis游戏机的子调色板通常包含背景和精灵使用的颜色,从而让所有内容都很好地符合游戏画面。


下图是Sega Genesis游戏机的游戏场景。



这是场景使用的子调色板。



面向任意16位平台进行创作时,我们需要使用索引调色板。为此,Gimp可以用作Photoshop的开源替代工具,它支持许多索引调色板的控制功能。在Gimp创建索引调色板时,依次点击Image > Mode > Indexed…。



如下图所示,此时会出现Indexed Color Conversion窗口。



我们把Maximum number of colors值设为15。我们可以使用自动颜色抖动模式,但这种效果通过手动创建会看起来更好。



图像的颜色已经得到索引。这些信息会自动随着图像保存,以便我们使用颜色的索引。如果需要改变索引中颜色的顺序,我们可以在颜色贴图中单击右键,选择Rearrange Colormap…。



如下图所示,此时会弹出菜单,我们可以在此拖动颜色,调整为新的顺序。



实现更大颜色深度的一个常见技巧是根据指定的光栅线控制调色板,这种技巧类似红白机上实现的视差滚动效果。Sega Genesis游戏机可以根据美术效果,对指定的光栅线修改子调色板选项。


这种技巧常用于创建部分游戏关卡位于水下的效果。“水下”的颜色会添加到完全独立的子调色板选项,在特定光栅线渲染到屏幕上的时候,会加载该子调色板选项。


硬件上基于瓦片的存储和加载功能

通常,16位游戏机加载图形瓦片的方法与8位游戏机的方法不同。8位游戏机会在大部分的数据中单独加载精灵和背景瓦片,从而避免使用大量处理能力。16位游戏机的处理能力可以实现更高的自由度。


16位游戏机可以在运行时加载和交换独立瓦片,允许开发者仅在需要时加载所需的瓦片,这将可以在游戏的单个关卡或画面中,实现更丰富的美术效果。


对Sega Genesis和Mega Drive来说,另一个特别之处在于:在游戏运行期间,图形瓦片和调色板数据并不是加载到游戏机VRAM中的唯一内容。这可能会让在游戏机上的美术设计变得困难,因为在特定时间中,可加载到内存的图形瓦片数量取决于游戏中的其它内容。


通常,大多数游戏会提供足够的空间来加载约1000个瓦片,如果游戏有动态元素,那么瓦片可以自由交换。


下图为之前场景中加载到内存的瓦片,中间的空白空间和下面部分是在内存中分配敌人和其它游戏元素的空间。



虽然有更多可用瓦片可以同时加载到VRAM中,但是在大多数时候,那些额外的自由空间会留给精灵,从而同时在画面中显示更丰富的动画和更多类型的精灵。


这意味着使用重复瓦片的基本设计理念依旧适用于16位美术效果中,从而使背景不会占用过多可用空间。红白机,Sega Genesis和超级任天堂游戏机的分辨率非常相似,因此16×16大小的部分是这类设计的起点。


下图使用了32×32大小的图案,来创建背景中的大部分可移动空间。


处理背景图层

Sega Genesis和Mega Drive允许二个背景图层同时在画面中启用,这意味着我们可以更轻松地使用分层元素来设计背景。


我们依旧只会使用二个图层,因此艺术家和开发者可能需要使用光栅线方面的一些技巧,从而在场景实现更大的深度效果。幸运的是,所有内容都可以进入第二个图层,因此设计师可以在背景前方自由放置前景对象,无需破坏原有效果。


我们不必在运行时反复修改精灵优先级,只要设置第二个图层显示在玩家之前即可,但更高级的图层效果依旧需要对精灵优先级进行快速调整。第二个背景面板也包含子面板,可用于HUD界面。子面板会锁定在某个位置,不会发生滚动。


如下图所示,由于游戏是俯视角视图,我们需要为树木创建特别的瓦片,从而调整精灵图层的顺序。


精灵限制

在处理精灵的时候,转换为16位硬件会得到更大的自由度。Sega Genesis和Mega Drive允许开发者在画面中同时拥有80个精灵,单个水平线上显示20个精灵,然后停止渲染任何新精灵。


除此以外,精灵不再视为独立的8×8大小的瓦片。Sega Genesis可以生成多个瓦片组成的单个精灵,这类精灵最小可以是一个瓦片的大小,最大可以是4×4瓦片的大小,更大的内容需要使用多个精灵制作。


最终Boss使用大量动态背景元素,图层和许多精灵。这种效果无法在8位游戏机平台上实现。


抖动图案和反差效果

16位美术效果的标志性特点是使用了抖动效果。过去的游戏在CRT显示器上显示,在这种显示器上,屏幕的像素可以渗透到其它像素。


艺术家通过在美术效果使用抖动图案来利用这种特点,当重复图案上的像素和其它像素互相渗透时,会产生画面中使用了更多颜色的错觉。直至今日,尽管如今的显示效果得到了提升,抖动效果仍在像素美术中大量使用,从而保持精确的美感。


如下图所示,抖动效果在16位游戏机中大量使用。在CRT显示器上,像素图案会互相渗透,得到其它方法无法实现的新颜色或透明效果。



Sega Genesis和Mega Drive这二款主流16位游戏机会使用更大的对比度来显示颜色。在选取子调色板时,这也是需要注意的地方。


在硬件上进行实际渲染时,使用较为暗淡的色调可能不会得到预期的效果。美术效果应该使用高对比度的调色板来创建,这样可以使最终结果和艺术家的最初设想保持一致。


创作超级任天堂游戏机风格的美术

对于超级任天堂游戏机的项目,我们仍要使用8×8像素大小的瓦片和网格,因此可重复的瓦片会非常实用。通常,这类瓦片的像素量为8的倍数。


调色板

Sega Genesis和超级任天堂游戏机的第一个重要区别是调色板。类似Mega Drive,超级任天堂游戏机没有硬编码的调色板,因此开发者可以选取自己想要的颜色。


超级任天堂游戏机的问题在于,它使用5 Bits Per Pixel每像素比特数的颜色,这种效果在如今并不常见。


我们可以使用Gimp创作美术效果来解决这个问题,然后把图像分为32个RGB色调,因此即使没有以相应设置保存图像,该图像也适用于5 BPP值的颜色,这样可以在游戏机上准确地显示图像颜色。



在Gimp中,该选项位于Colors > Posterize…,依次点击后会出现弹出窗口,我们可以在此把Posterize levels设为32,创建兼容5 BPP值的颜色。


屏幕分辨率

Sega Genesis和超级任天堂游戏机的另一个主要区别是屏幕分辨率。由于超级任天堂游戏机是红白机的后续产品,二个系统有相同的屏幕分辨率,超级任天堂游戏机的内部分辨率为256×224。


这种分辨率可以渲染任意图像,在大多数CRT电视的安全区域内进行显示,因此任何图像都不会被裁剪。这种分辨率不会发生改变,因此相应的图像大小适合艺术家用作参考。


如下图所示,该图像设为使用超级任天堂游戏机的全屏分辨率,这种分辨率适用于大多数屏幕模式。


原始硬件的屏幕模式

下面介绍不同屏幕模式的特点。



Sega Genesis和超级任天堂游戏机之间最明显的区别在于:超级任天堂游戏机可以在七个屏幕模式下渲染背景图形。超级任天堂游戏机可以在特定屏幕模式使用一个子调色板,在屏幕上同时渲染256种颜色。


下面介绍部分常见的屏幕模式:

  • 模式1:这是超级任天堂游戏机最常用的屏幕模式之一,它拥有游戏机功能的最佳展示效果。


    模式1允许开发者使用三个背景图层,其中二个背景图层有自己的16色子调色板,另一个图层有一个4色子调色板。


  • 模式3:该模式常用于展示大型静态图像,例如标题画面和故事画面。它拥有二个背景平面,第一个背景平面使用完整的256色子调色板,第二个使用16色子调色板。


  • 模式7:这是超级任天堂游戏机的主要特色之一,这款游戏机的大多数宣传资料都展示了模式7的效果,在模式7中,家用游戏机首次能够实时对图像应用变形效果,在背景平面进行缩放、旋转、伸展和扭曲。


    该模式可以为超级任天堂游戏机实现许多赛车游戏和飞行游戏中常见的伪3D效果。


模式7的背景平面使用和其它屏幕模式不同的方法进行处理,从而使用到一些特别功能。


首先,模式7只使用一个256色的背景平面,这意味着所有精灵都需要和背景平面的子调色板共享颜色。


另外,模式7不会使用超级任天堂游戏机的普通屏幕大小,模式7的背景平面大小是1024×1024像素,它会进行缩放和调整,从而符合设计师想要的屏幕。


如下图所示,左图的办公室画面使用模式1和1个子调色板,其它2个调色板用于UI。右图的Thanks for Playing画面使用模式3,它允许艺术家使用256色的调色板。


精灵大小

除了背景屏幕模式的复杂特点外,精灵的规则较为简单。类似Mega Drive,超级任天堂游戏机有多个不同的精灵模式,但它有严格的限制:在整个游戏中,只可以使用二个不同的精灵模式。


精灵的大小可以是8×8,16×16,32×32或64×64。不仅如此,设计师也必须在包含精灵大小组合的预定列表中进行选择。


超级任天堂游戏机上的游戏可以包含以下精灵大小组合:

  • 8×8, 16×16

  • 8×8, 32×32

  • 8×8, 64×64

  • 16×16, 32×32

  • 16×16, 64×64

  • 32×32, 64×64


在选择好大小组合后,精灵的大小将“固定不变”,游戏内的所有精灵都必须符合大小组合。超级任天堂游戏机可以在一条水平光栅线上同时渲染32个精灵,但对于屏幕上可以同时显示的内容,它具有使用128个精灵的限制,任何在128个精灵以外的内容都不会渲染到画面中。


如下图所示,《Fork Parker’s Crunch-Out》游戏中为所有精灵选择了32×32和16×16的组合。



精灵可以使用8个16色子调色板。类似所有复古游戏机,任何调色板的第一个颜色都是用于透明度的通用颜色。相对于其它游戏机,超级任天堂游戏机的子调色板具有更多的颜色数量,可以在给精灵选取颜色时,提供更大的自由度。我们只需要记住它限制使用256种颜色即可。


未来展望

本文介绍了如何在Unity 2019中使用2D Pixel Perfect创作8位和16位的复古游戏。2D Pixel Perfect的开发仍未结束,它的功能将在Unity 2019.3中经过正式制作的验证,2D Pixel Perfect将会更好地兼容Cinemachine 2D。


下载Unity Connect APP,请点击此处 观看部分Unity官方视频,请关注B站帐户:Unity官方


点击[阅读原文]在Unity答疑专区留下你的问题,Unity社区和官方团队帮你解答:

Connect.unity.com/g/discussion


推荐阅读

2D Pixel Perfect:使用Unity创建任天堂红白机风格复古游戏

2D游戏开发套件指南

使用Unity 2D实现经典的扫雷游戏

Unity Creator Kit创作者套件介绍

Obstacle Tower挑战赛获奖者以及发布开源环境

使用摄影制图法重现高野山奥之院墓园

Unity 2019.2正式版发布

在Unity 2019.2中扩展Shader Graph,实现自定义光照


官方活动

直播课程|Unity Progressive Lightmapper GPU版在三大渲染管线中的应用

8月14日星期三晚Unity直播课程平台部技术总监杨栋将介绍Unity Progressive Lightmapper GPU版在三大渲染管线中的应用。[更多详情......

直播地址:

https://connect.unity.com/events/progressive_gpu_2019


成为Unity Buddy,享受专属福利

8月21日前加入Unity Connect,创建个人频道,成为与Unity社区同行的伙伴-Unity Buddy,享受专属福利。


Unity Connect评论区支持你认可的Buddy,有机会获得Buddy送出的Unity周边。

了解如何成为Unity Buddy,请点击此处



喜欢本文,请点“在看”

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存