我希望我会画画
《一厘米时光》(1cm Time)故事的时代背景是架空的,主要以我童年所经历的生活作为基础。

上个世纪 90 年代初,世界正在快速变化,那时我初中快毕业,跟父母说想去艺术学校学画画。我本身也没什么美术天赋,只是单纯的想画画——这事情我妈一直笑话我到现在,要知道,那时候学画画也就是去一些中专学校,她觉得是读不成书的小孩才会去的。所以她高瞻远瞩,为我安排未来,后来我上高中,上大学,进入计算机专业。其实计算机专业也挺好,因为我从小就成长在到处都是游戏机的环境中,也爱电子游戏。
大学时,我买了台电脑放在宿舍衣柜里,那时候就没想着画画了,有电的时候就自己研究怎么做游戏。到毕业的时候,国内还不存在游戏开发这个职业,所以这个想法也就落空。很多很多年以后,我翅膀硬了一些,选择成为一个独立游戏开发者,还是 Solo 的那种,自己负责程序,自己负责美术。
自力更生做美术
现在我正在开发《一厘米时光》,这是款 3D 游戏,游戏画面主要由 3D 模型组成,模型只有色块。模型的材质主要依赖于使用调色板给模型填色。在动画制作的范畴里,这种方式可以归类为 NPR:非真实渲染,也可以说是风格化渲染。
一开始,这款游戏的风格定位就是采用一种平涂的、色块的、矢量插画的画面效果。画风虽极简,但并不是 Low-Poly 这样的低多边形表现(虽然独立游戏都爱用这个),这款游戏需要尽量表现角色的圆润,减少尖锐外形。
画面风格没有高下之分,选择这种风格不仅是个人喜欢,也有综合考量,篇尾再谈。

上图是人物的调色板,固定设置为最多 16 种颜色。这种使用调色板的方式是不是很像像素游戏?
我所知道的平涂实现方式有这几种:
- 展开模型 UV,使用贴图指定模型各部分颜色;
- 使用顶点颜色属性 Vertex Color,也就是在模型点上直接指定颜色;
- 为每个颜色设置一种材质 (Material),不同的模型色块给予一种材质;
首先排除最后一项使用多种材质的方式,因为每多一种材质就多一个 DrawCall,渲染负担会加重。
最初,我是使用 Vertex Color 来直接指定模型的色块颜色,但这种方式涉及对模型上的点进行上色操作,当模型导出到游戏引擎 Godot 后,再想去更改某个色块的颜色就要重新在 Blender 中调整再输出,流程复杂了。所以,我最后是使用模型 UV 去对应贴图的颜色。
不过,这种方法也仍然存在迭代、修改效率低的问题,因为贴图的修改也要在绘画软件或者 Blender 中进行。那么,能不能实现模型导出后,可以直接在 Godot 中进行调整呢?
我是这么做的:
- 首先,使用一个固定的调色板贴图,上面是 4x4 的色块;
- 然后,根据颜色设定,将相同颜色部分的模型 UV 放在同一个色块区域里;

这样一来,对于规整的贴图,修改某种颜色就简单许多。贴图也可以使用程序进行修改或生成。同时,使用 UV 数据,就把调色板跟模型的对应关系固定了下来,再使用 Shader 来指定颜色也就很简单:把颜色作为参数输入 Shader,在引擎中就可以随时更改模型的配色方案。


加上环境、灯光、背景色等,游戏画面的颜色色调都可以在引擎中实时调整了。
Shader 分享
我将这个调色板 Shader 分享在下面这个链接处,感兴趣的朋友可以参考一下。
https://gist.github.com/harrisyu/bec639d0ec36cb517d2baf83a1b560a4
参考资料
无独有偶,今年我也发现有人使用类似的技术方式,比如这篇 itch 博客:
里面的贴图还带有渐变,可以适应更复杂的效果(以下 3 张图片引用于上述文章):



后记
其实这种美术风格对设计要求蛮高的,造型、配色、构图都要考虑。所以,在场景方面,我打算加入简单的灯光和明暗,但总体风格还是需要跟人物的平涂进行搭配。

我没有使用流行的卡通渲染风格,也就是说没有卡通的阴影,主要是个人觉得现阶段游戏的卡通渲染还不成熟。当然,有做得好的,比如 Arc System Works 和国内的二次元游戏公司。但我认为,Solo 游戏制作者不应该追求流程过于复杂的技术——做一些单个的人物和场景也许不难,但是考虑到一个人不靠素材去制作 3D 游戏项目,在流程和技术选择上要慎重一些。
另外,值得做的美术风格很多,独立游戏就应该去做这方面的探索。
最后,技术服务于创作,本篇日志提及的方案能大幅降低性能要求。同时,基于这种技术的整个 3D 模型制作流程能够实现高效的调整、迭代,所处理的资源素材量低,便于项目资产的管理。比起某项特定的技术,这类理念和思路也是我想分享的。
下篇日志的内容还没想好,也许讲讲场景,《一厘米时光》当前的愿望单数量为 494 。
感谢观看,下回见~


风格很棒!