NEKOPARTY STUDIO

视频脚本:关于独立制作提升画面质感的一些思考,以及一次近期GameJam复盘

字数统计: 4.7k阅读时长: 15 min
2026/03/15
loading

技术

这是我第一次做杂谈类视频,分享一下我自己玩游戏引擎或者参加GameJam的一些经验与见解,如有不周还望大家包涵。

最近参加了034 GameJam,这是我开始打GameJam以来对成品最不满意的一次,是个彻底的翻车,但它看上去还不错的视觉效果还是吸引了一些关注,因此借此机会复盘一下比赛内容,顺便讨论一下我比较擅长的Godot与游戏视效的相关理解。当然了,其中有不小的一部分原因是因为杀戮尖塔2刚好在比赛开始的时候发售了,这一个星期没忍住玩了50个小时。不过这个不提,把问题总是归咎于外部因素是不对的。

简单说明一下034 GameJam,简单概括一下就是这是一个只让用基本几何体(圆形,矩形,三角形,圆柱,球体,立方体,四面体)来创作游戏的GameJam。然后提供了一个“连接”作为主题。

不过尽管有工期限制,素材限制,以及杀戮尖塔2太好玩了等因素影响,我还是尽力保持了游戏视效一个在我满意的水准。我是使用的Godot游戏引擎,但我用它还是能做不少性能够好效果也不错的视效或者程序实现的,加上估计大部分独立项目都用不着我那么复杂的玩意,所以成品如何我觉得本质上是引擎无关的。尤其是对于这些Mini比赛来说就更加无所谓。

对于为什么大伙觉得Godot无法产出优质3D内容,客观上来说,它在一些高端渲染特性方面确实不如UE。Godot至今没有完善的实时GI解决方案,其实Godot里面GI我个人倾向于Bake>VoxelGI>SDFGI,你要实时GI就尽量Voxel,SDFGI的表现确实有点不理想,然后可以加个SSIL去补间接光。除此之外还是使用的传统LOD,但其实我觉得LOD也不比那些Meshlet差到哪儿去。但是这和它能不能做出漂亮的画面其实是两码事,也与Godot游戏性能表现是否更好还是更差无关。另一个重要问题是Godot没有商店,你不能买/白嫖到这些即插即用的效果好的玩意,3D美术和3D技术美术都是个入门起来并不容易的东西,大部分人如果能用现成的肯定都会用现成的。因此Godot很难看到高质量的3D产出,在我看来并不等价于这个引擎的能力不行。

对于那些自己一个人鼓捣的开发者,也许会觉得提升游戏视觉品质是个很难做到的事情,但其实真没那么困难。视觉效果的第一个要点是一致性。如果你的素材质量高,那素材质量就要都高。如果你的素材质量低,那素材质量都要相同程度的低。即使美术技能不太够的个人开发者不太好实现前面一个,那后面一个努努力应该是压力不大的。这也就是为什么存在歧路旅人这种HD-2D美术风格的游戏。(但其实它的素材质量并不是那么低)

之后就是你需要对自己的游戏想要达到什么样的目标画面有一个清晰的认知,这也就是为什么3D游戏都需要2D原画参与。当然了,美术技能不太够的大部分独立开发者应该都没本事画原画,但你大脑里得有个清晰的目标。当然,原画这个事情你其实可以拜托AI,你把自己需要的画面描述清楚了,生图模型大概率能给你一个美术目标的BaseLine。我对AI能够发挥的作用总体上还是持积极态度的。如果你用了AI,最后的结果没有劣质感,最好也别让我看出来是AI完成的,那我就觉得你用的好。

当然了,不过我自己也不是很喜欢让AI去做这种事情,它生成的结果大概率没有精心设计的美术风格好。所以没有原画的话,你可以尝试去找点参考,比如说我的游戏想参考xxx游戏/电影的风格,这块区域参考这个,那块区域参考那个之类的,然后想想该怎么去做素材Downgrade,按前面说的一致性原则匹配你的游戏,然后尝试全力去制作。像对我来说,影响最大的游戏艺术风格就是两部《镜之边缘》,这是我最早接触的光影/渲染知识教科书,不过你得注意这俩游戏美术风格看上去差不多,但其实质是不一样的。之后就是《塞尔达传说:旷野之息/王国之泪》(也许你会说这两个游戏不是差不多的吗?王国之泪在这里特地提了一嘴,其实我是想说它的空岛区域的美术与颜色)《异度神剑1/2/3/X》《死亡搁浅》《无人深空》,这几项应该有明确的相似之处,也有其各自的明确特色。最后就是《歧路旅人》,为我提供了一个低成本创造高视效的思路。

有一个另外的重要的点是提升自己的审美。你同样需要对构图,色彩,光影,动效等有自己的理解,才能让你的东西看上去好。而不只是整个Heightmap Terrain,然后往上堆点不会动的草和树和石头,然后各种雾效后处理拉满就最后做出一个质感很差的玩意。像034这种规则的比赛,实则就是解放了开发者制作美术资源的生产力,但这不等于做不出画面精致的东西。对构图色彩光影等有理解的人,拿几何体随便摆摆也不会很难看。

落实到实践上,光影和技术美术是对于技术出生,有审美能力的人提升画面质感最快速的方法。这里有个极其简单但是极其能说明问题的例子:就这几个方块,我打开光源的阴影,画面就立即提升了一个层次。我打开SSAO,阴影处的立即就有了更强烈的层次感。当然我这个SSAO看上去可能跟你们的Godot引擎有点不一样,你别管。打开SSR,画面立即就又提升了。这就是从光影和技术美术上能够获得的最直接的画面增益。但注意这些东西并不总是管用的,所谓现代游戏都是无脑全开,但是你的项目改用还是不该用,你应该自己判断。你觉得不需要,那就是不用。我的理念甚至是能不开就不开。

这边举个例子,就是我自己做的一个东方同人小游戏。这个场景完全没有SSAO,没有GI,没有SSR,天空渲染也完全不是基于物理的,也没有体积云这种性能大户。你其实只需要对色彩光影的理解就能去完成这种东西。

还有一个有点负面的例子是最近发售的《红色沙漠》。这个游戏能够使用的美术资源规格是真的很豪华,我的小游戏肯定是没法比的,再加上铺天盖地的宣传可以看出是真的投了很多钱。美术效果确实很好,但是其实有两个影响观感的大问题。第一个就是树和草会疯狂地晃动,就像是为了展示他们的晃动特效一样。但这样的效果在现代游戏时间性上采样大行其道的背景下会让画面显得非常嘈杂。还有一个就是游戏的粒子特效略显滥用,制作组似乎总想在战斗的过程中在所有地方塞满各种各样的粒子特效,比如乱飘的树叶碎屑啥的,以及战斗中的刀光全是粒子。但执行不好的粒子特效对画面的损害是比较大的。树叶刀光啥的基本都能辩护一下,也能说树叶飘落是解密的暗示之类的,但是这个Boss战的时候地板上会被掀起巨量碎屑,但是不匹配地板破坏,同时碎屑都呈现非常奇怪的纯正三角形,对视觉效果产生的作用绝对是负面的。除此之外游戏的某些颜色有过饱和嫌疑,例如草地是绿色的,但草地该不该这么绿?这种过于纯正的亮绿色会有点油漆感,是不是颜色深一点更好?这都是值得思考的问题。

这就是《镜之边缘》教会我的东西,是我最重要的启蒙老师。光影和颜色,一般情况下带来的总体视觉效果提升是比提高模型精度等显著地多的。不过有人可能觉得镜之边缘这种大色块美术比较省钱,但它虽然颜色如此,但这完全不等于它的模型是未经打磨的低面模型。但如果你去模仿,你做不到它的程度那一定会被人怀疑你美术就是偷懒了摆烂了。

但说了这么多,实际也是告诉大家一些锦上添花或者快速抵达视觉效果产生边际递减效应的那个地方的途径,我也只是挑了一些自己略微擅长的方面跟大家交流一下,而且我的水平距离优秀还有很长的一段距离。不过真正的好游戏说白了必须内核够好,华丽辞藻,言之无物的游戏只能是垃圾:就像我刚刚打完的GameJam的内容一样。

反思

我虽然玩了很多游戏,但落实到制作上我一直都是技术优先的路线,平时空闲时间也都是玩引擎研究图形技术或者什么其他技术。由于在技术上我几乎不存在什么困难,搭建游戏也效率很高,所以之前GameJam基本会选择一个已有的游戏类型或者成功范本,对它做GameJam的精简压缩化,然后添加一些小创新之类的。

不过这次反而没参考。根据034精神,只能使用原始几何体,不能由开发者对它的形状进行组合,这使得“连接”这个主题变得更难了。不过比赛本身没有严格的限制,不遵守规则不影响你做。我一开始直接就想做个UltraHand,对于这种难度很大的编程挑战我跃跃欲试到爆炸,但我无法想到在一个GameJam里它的使用场景,单纯拼装几何体估计没什么乐趣,对于一个需要7天做完的东西,模仿王国之泪的解密方向去做更加不可能,如果能做到的话我就不是一个在B站发垃圾视频的大学生了。我能想到的最有可能的玩法就是王国之泪的初始空岛究极手神庙那个拼装物体钻各种形状的格子的玩法,但游戏只玩这个看上去也太土了,各种形状的洞也很不034精神。

出于对UltraHand实现难度的畏惧(当然了我之后肯定就会尝试来搓这个究极手),以及我自己对这方面缺乏的灵感,最后这个方案自己就否了。后来在翻自己已经做过的东西的时候,看到了之前自己搓的一个星球大气渲染的解决方案。这个是拿4.3之后的那个Compositor功能做的,总体上比那种单纯拿个球做Fensel或者用Spatial Shader做全屏后处理的复杂一些。就联想到能否将星球物理连接起来,于是就有了现在这个项目的想法。

最初的设想是这样的,假设我这里有一个恒星,远处有一个行星,我就能用一个连接给它们连起来。这样行星的公转角速度就直接和恒星同步了。然后假设这里有个行星,这里有个行星,我再拿根东西给它连接起来,这样这个行星就能以这个行星的角速度开始围绕它公转。利用这个特性整点小解密啥的。

主要是着急玩杀戮尖塔2,这个想法也没怎么细想,其实确实不太经得起推敲。首先是这个运动计算是否需要基于物理?假如我并不基于物理,那难免手动处理许多难题。首先这个相对公转的想法就不是很好成立。一个物体围绕另一个物体,以那个物体的角速度公转,那你这个连接是不是就必须区分连接的和被连接的?因为一个是固定连接,另一个是相当于连接到它的“轴承”,也许你会说都连接到轴承不行吗?那行星的自转参数就完全没有任何作用了。然后就是另一个问题,多次连接后,要是形成了回路怎么计算?假如形成了三角形,那这三个顶点就被固定了,被连接的物体的自转参数也就失效了,游戏立即就不自洽了。我觉得这大概率是我想不明白的玩意。

也许你可能会说,那你不让连接成环路不就行了?确实有道理,但我当时觉得不太好,在现在的游戏都主张交互自由的情况下,这种生硬的限制可能会让人觉得我不太有本事。

最后就摆烂了,全部交给物理引擎得了。但这是个挺灾难的决定,因为虽然我对Godot引擎理解还不错,但是几乎没怎么深度使用过物理引擎。首先我很清楚物理引擎每步都是离散的,导致它大概率没法通过用非常牛顿的方式让物体圆周运动。那我只能将行星分为两个状态,连接态和自由态,自由态的行星运动根据公转半径计算角速度参数,然后程序控制转动。行星被连接后,继承之前的速度,之后物理引擎立即接管其动作。解除连接后慢慢根据当前位置回到圆周运动状态。

到这边都非常顺利,但是涉及连接的时候灾难的部分就来了。我发现无法实现我之前设想的连接方式,因为它完全不物理。物理的连接将两个物体连接上之后,两个物体的相对运动应该就立即消失了,所以想有自己的自转速度就直接不可能。

我想了一些办法来Work around,但是都失败了。也许你会想,我去链接物体的“轴”,然后物体绕着轴转动,确实是这回事,但是物体的实际位移由轴控制,但物体被碰撞的时候应当产生运动,这就应该反过来影响轴的位移,变成了一个左脚踩右脚的问题。而且直接去操作Rigidbody的位置一般都没什么好下场,所以这边又无解了。

而且实际上由于迭代求解的问题,你用Joint去锁两个物体,在运动速度过快或者两个物体质量差距过大的时候很容易迭代不收敛导致结果爆炸物体开始乱飞。这边又解决了好久。

于是最后决定摆烂,游戏就这么做呗,锁死就锁死。

由于是物理引擎算的,所以物体在连接之后,运动的结果是相当Chaos的,我自己都无法对关卡的演化有任何控制的话,自然没法做出什么像人关卡。最后体验我自己都觉得很不好,成功成为了我自己目前为止最不满意的一个Demo。

回头看这个Demo,它确实是个失败品。但我觉得,这次失败比之前那些我自认为相对成功的尝试更有价值。因为它让我看清了两件事:

第一,技术牛逼不等于游戏好玩,杀戮尖塔2也是Godot做的,视觉效果在一众游戏中相比只能算是简单(并非简陋),但它就是有魔力吸引我狂玩50h,用50个小时教会了我这个道理。我不是什么学院派的游戏设计专家,目前的游戏设计知识只能从大量的游玩游戏里拟合。想设计出真正好玩的游戏,还是得老老实实仔细思考寻找灵感的。

第二,Godot也好,UE也好,它们只是画笔。真正的差距,在于你脑子里有没有那张‘想要画成的画’。如果你也是觉得自己用Godot踩坑的开发者,或者你也在纠结引擎选择,欢迎在评论区聊聊你的看法。

最后:之前分享了一些自己在Godot里的技术实现,一般都是没人做或者大家普遍觉得Godot做不出来或者难做的东西。之前我一直把自己做的玩意当个宝贝,指望什么成品突然掏出来震惊一下大家,不过有位业内人士告诉我说同样也要注重中间过程的产出,所以我就发点视频展示一下,虽然应该不会开源(我自己还是没能说服自己大方到那种程度),但也会在某蓝色平台上写点相关的实现教程。之后应该也是以这个为主,如果有这类杂谈视频还是会攒一段时间的思考再和大家讨论。

CATALOG
  1. 1. 技术
  2. 2. 反思