“PlayStation GPU 走的是一套叫固定功能管线的东西。意思是它画多边形——注意是多边形,不只是三角形,这不是笔误——永远用同一种方式画,除了 draw call 里能设的那几个参数之外。”
这段话来自独立开发者 Calin P 最近发布的一篇技术拆解。他不是在讲怀旧,而是在讲一件挺实际的事:为什么现在这么多独立游戏想做出 PS1 那种味道,但真动手做的时候,往往做不像。
![]()
他把 PS1 的图形原理从头拆了一遍,然后告诉大家怎么在 Godot 里把这套效果还原出来。这套东西的底气来自他自己的项目——他写过一个 PS1 模拟器,叫 P-chan。
为什么“做旧”比“做新”还难
PS1 风格的游戏这几年确实越来越多。有人觉得这是偷懒,随便糊一层低分辨率贴图就说是复古;也有人觉得这是对无休止追求写实画风的一种反弹。原文里提到的例子是 NVIDIA 的 DLSS 5,说它引发了争议——这条只是作为“行业一直在往写实方向推”的佐证被提了一句。
但 Calin P 想说的是,把 PS1 的观感做对,没看上去那么简单。你得先搞清楚当年的游戏为什么长成那样。
关键就在那个“固定功能管线”。现代 GPU 是可编程的,图形程序员想写什么就写什么,让 GPU 渲染出什么画面都行。而 PS1 的 GPU 不是这样,它画多边形的流程是定死的,你能调的只有 draw call 里的少数参数。
这个差异带来一个挺有意思的后果。Calin P 说,正因为 PS1 的绘制方式统一,我们在模拟它的观感时,可以给游戏里每一个物体用同一份材质,然后用实例化渲染,把整个游戏里所有的 3D 几何体塞进一次 draw call 里画完。
不过他也补了一句限制条件:Godot 只在 Forward+ 渲染器里支持实例化渲染(也就是 batching),而且一旦用了不同的贴图,batching 就断了。
那个 shader 里到底装了什么
拆解归拆解,最后落地的是一个 shader。这个 shader 采用 MIT 协议,已经放在 GitHub 上。它包含的功能有这些:
- 精确的顶点抖动(vertex snapping)
- 一套自定义光照系统
- 平面三角形深度缓冲(flat-triangle depth buffer)
- 仿射纹理映射(affine texture mapping)
- 按模型粒度可调的抖动(dithering)
- 颜色调制(color modulation)
- 雾效,甚至包括《寂静岭》那种雾
这几项基本就是 PS1 画面“糊、抖、歪”的来源。顶点抖动是那个年代顶点坐标精度不足留下的痕迹,仿射纹理映射是贴图在斜面上会扭的原因,抖动则是低色深下的补救手段。把这些“缺陷”一项项复刻出来,才是那个味道。
关于雾效,Calin P 还推荐了 Elias Daler 的一个视频,里面讲得更细。
这个人你可能在哪听过
如果你平时关注复古风格的独立游戏,Calin P 这个名字可能有点耳熟。原文提到,他就是那个做了一款真正跑在原版 PlayStation 上的游戏的人。除此之外,他还为这台主机做过一个 3D 同人重制版,原作是 2004 年的冒险游戏 《Yume Nikki》(梦日记)。
所以这篇拆解不是纸上谈兵。他先写模拟器,理解了硬件怎么工作,再把这套理解翻译成 Godot 里能用的 shader。顺序是反过来的——不是先想要复古效果再去找参数,而是先搞明白机器为什么那样画,再决定要复刻什么。
对做游戏的人来说,这意味着什么
这套东西的价值可能不在于“又一个复古滤镜”。它更像是一份说明书:告诉你 PS1 的画面是由哪几个具体机制共同造成的,以及这些机制在 Godot 里分别对应什么实现方式。
原文里没有提这个 shader 的下载量,也没说有多少项目在用。它只是被发布出来,MIT 协议,放在 GitHub 上。想用的人自己去拿。
至于 PS1 风格会不会继续变多,原文也没给判断。它只描述了一个现象:这类游戏在变多,而做对它们需要一点硬件层面的理解。剩下的,交给做游戏的人自己决定。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.