初我和很多同事都觉得The Last Night用了特殊的着色器(Shader)将3D模型实时的翻译为2D像素,尤其是后的黄色出租车表现出了明显的3D卡通渲染(Cel Shading),更让人觉得整个游戏的角色都是3D模型,然后通过像素化让玩家误以为是平面。但是问题也在于每个像素的方格是完全平行的,所以不可能是直接让UV贴图直接像素化(否则像素方块会因为模型体积的变化而发生扭曲)。有一种方法是通过摄像机投影(Camera Projection)来根据摄像机来重设贴图,类似于《返老还童》的纽扣片头。这样就保证不管3D模型体积和动作如何,它正对着摄像机的贴图一定是平面的。但这样计算量就会很大,而且UV包裹会出现问题。因为在游戏里,角色的像素都很完美的和人物边缘协调,不会出现有半个像素的情况。如果每一个不同的3D模型都能准确的渲染成完美的2D像素效果,那这个算法一定非常智能,来探测边缘和优化像素分布。 这也太黑科技了。没有人确定这是The Last Night的实现方法。但是如果不是3D模型,又如何做出带有法线的2D Sprite呢。 在惊叹和发愁之余,我将The Last Night的预告片逐帧反复观看了数十遍之后,终于得出了答案。其实没有黑科技,就是比较聪明。 3D和2D的混合 游戏中的箱子是3D模型上贴了像素化的贴图,就像Minecraft里那样。但本身是3D元件,也会受各种光源影响,即使倾斜,边缘也不会是锯齿状。 当然,同时是3D模型的还有街道上的一些垃圾箱,顶棚,和杂物。他们仅仅是拥有像素贴图。而这给人了一种误导,会以为“既然连箱子都是3D的了,那人和武器一定也都是。” 然而并非如此。 右侧垃圾厂里的纸箱全部都是3D的模型,包括预告片里被子弹击中的翻滚的纸箱。它们会正常接收光线和阴影。而里面的植被都是2D纸片。 2D人物 人物是2D Sprite,就是一个纸片。当聚光灯打到人的身上的时候,你能明显看到柔和的边缘掠过人的身体,如果是3D渲染成2D像素,那么它会把光的信息翻译成像素的颜色,呈现出一个实心的色块。而非有渐变的柔光。这就是一个聚光灯打到一个纸片上的效果。
间紫发姑娘的身上打了一个聚光,从裤子可以看到柔和的渐变,如果是3D光照再像素化就不会是这样的效果。 那闪电和灯光照耀时角色的头顶边缘光又如何解释呢?答案是那只是额外的一层“顶光”贴图。无论是任何角色,他们只有顶光和正面光两种情况,而且顶光所照亮的像素一模一样。比如一个前行的戴帽子的女士,无论她在灯前面还是走过灯,她帽子的顶光永远是那几个像素,只是明度上有变化。所以每个角色的sprite都有一个顶光图层,通过调节这个顶光图层的亮度来模拟出受路灯和闪电的影响。这依旧需要一定的工作,但是比之前的黑科技要可行很多。 街上的人物只有白发特朗普,太阳帽姑娘,粉朋克女孩,DJ,流浪汉,胖子和紫发。每个人出现在任何环境里的高光都是头顶光,像素位置也一模一样。 可以上下对比一下这个太阳帽姑娘。一个是正上方的闪电,一个是偏右的更近的路灯,两者打出的高光只有明度上的区别。也就是说高光并非是实时的,而是烘焙在sprite里的。 没错,人物的动作都是一帧一帧做的,顶光图层也是,这些都是这个工作室驾轻就熟的2D像素流程,从他们之前的Flash版The Last Night就能看出来。而且里面的路人角色也并不多,工作量很取巧。而后的那辆飞车,则极有可能是3D预渲染,这一点国外Retronator Magazine网站也做出了判断。 镜头效果 强烈的景深效果,铺天盖地的体积光,真实的水面反射和雨滴流淌,都让这个游戏即使不用2D像素角色,也可以成为一个电影级别的3A游戏。 体积光,Bloom配合雾气,让整个游戏浸在强大的光感里。 总结 因为The Last Night在本次E3上只放出了预告片,没有Demo可玩。所以现在所有的判断都是基于预告片。从中可以分析出整体的立体像素风格是由带有多层Pass的人物Sprite,在3D环境中摆放的2D纸片,和带有像素贴图的3D模型一起共同完成的。它们互相融入协调,和谐的共同作用让整个游戏拥有一个统一的令人惊叹的艺术风格。 |