Hyaika Blog

Penguin is all you need

技术

320×240、256 色、一只手——为什么他选择了最慢的路

320×240、256 色、一只手——为什么他选择了最慢的路

目录

  • 约束是一种特权
  • 768 字节决定了一整个世界
  • 从像素到调色板:为什么你只有 256 次选择机会
  • 没有 AI 辅助——不是不能,是不想
  • 画完一帧再画下一帧的尊严
  • 我试了一下 256 色的世界
  • 在无限选择面前,有限的才是美的

约束是一种特权

昨天有个项目在 Hacker News 上拿了 700+ 个 upvote。

不是什么 AI 推理框架,不是新的编程语言,不是改变世界的创业想法——是一个人在自己的业余时间里,用 320×240 的分辨率和 256 种颜色,做了一款第一人称射击游戏。

他叫 Marko,项目叫 Catlantean 3D。用他自己的话说:「我的目标是完全用 90 年代初期的技术来构建一个可发布的 FPS,同时允许自己使用现代编译器和平台抽象层。」

我读完他的整个开发日志后,一直没法把注意力从一件事上移开:他在 2026 年——当文生图模型能在 3 秒内生成任何你想要的贴图、当大语言模型能帮你写完整的游戏逻辑——主动选择了「不」。

不允许 AI 生成素材。所有渲染用手写。所有混音手工完成。一张画布 320 像素宽,一个像素一个字节,一个字节指向一个 256 色的调色板。一共 768 个字节——这就是他拥有的全部颜色选择。

这不是技术上的不得不,是他主动选的。


768 字节决定了一整个世界

他花了很大篇幅讲调色板。不是炫耀技术,而是讲一个非常具体的过程:

768 字节。256 种颜色 × 3 通道。 这是他整款游戏的颜色上限。

他亲手选了每一个颜色。透明粉、纯白、纯黑。大量的红色——因为「显然我需要很多血」。绿色和蓝色——对应不同颜色的钥匙门。黄色和棕色的沙漠色调——因为游戏设定在猫版埃及(Catlantis)。大量的灰色——因为背景包含很多科技设施。一些米黄色——打破灰色的单调。

然后剩下的,随着贴图创作过程不断迭代填充。「它看起来是对的就好」——这是他给出的唯一标准。

Doom 风格的 VGA 画面示例

左边是他做的游戏,右边是 Doom——视觉效果虽有时代差,但精神是一脉相承的。

这里有一个我从没想过的问题:当你的所有贴图只能共享 256 种颜色时,每一个像素的选择都变得很重。红色的钥匙门用了一种红,就不能同时出现另一种相近的红。你贴图中的每一个像素,都在和同一帧里其他所有贴图争夺那 256 个位置。

「精致」在这里不是一个形容词——它是一个调色板里每一个颜色都经过深思熟虑后的自然结果。


从像素到调色板:为什么你只有 256 次选择机会

他提到了一个概念叫 colormap——这是 90 年代 3D 游戏灯光效果的实现方式。

现代游戏有动态光照。法线贴图、HDR、全局光照、实时光追。一个表面上可以叠加数十层着色器。

但在 256 色的世界里,「光照」不是加法——它是查表。你在调色板中为每一种基础颜色准备从亮到暗的渐变序列,然后渲染器根据表面到玩家的距离,直接查表选取变暗后的颜色。没有光源方向的计算。没有像素级的阴影。就是一个简单的索引偏移。

Colormap 光照效果演示

colormap 的工作原理——同一张贴图在不同亮度下的表现,不靠光源计算,纯靠索引偏移。

这听起来原始到近乎可笑。但效果出奇地好——Doom 和 Duke Nukem 的那种「脆感」正是来自这里。画面没有平滑的半影渐变,没有过度柔化的漫反射。就是硬邦邦的两个亮度等级差,翻过去下一个亮度等级。

约束产生了一种风格。而风格,在 2026 年这个所有画面都可以被一键光滑到无趣的时代,反而是最稀缺的东西。


没有 AI 辅助——不是不能,是不想

在文章最底部的约束清单中,他排除了一个在现代显然不需要专门提的东西:

no AI slop.

这不是一个技术限制——他自己也说了这是无理的。在 2026 年,不使用任何 AI 工具来辅助游戏素材创作,就像骑自行车通勤代替开车。你做得到,但没有人要求你这么做。

但他就是这么做了。所有贴图——手绘、Blender 预渲染(再手动下采样到 256 色)、或者在代码里程序化生成。他用 Blender 的节点编辑器来设计贴图生成流程——然后用脚本把结果拍平到 256 色调色板。他画了敌人的每一个方向的帧。他画了武器动画的每一帧。他甚至画了一个状态栏上的面部表情动画——一个一个像素地画。

他说:

"Restriction forces deliberate choices, and deliberate choices tend to look good."
约束迫使你做出经过深思熟虑的选择,而经过深思熟虑的选择往往看起来不错。

这句话在 2026 年听起来几乎像一种挑衅。现在的共识是:AI 帮你绕过了所有「费力」的部分——生成贴图、生成音效、生成代码、甚至生成整个游戏设计。你只需要提供 prompt,约束被取消了。但副作用是——当约束被取消,「深思熟虑」也跟着被取消了。生成变成了选择和拒绝,不再是创造和取舍。


画完一帧再画下一帧的尊严

游戏墙体贴图示例

这些 256×64 像素的墙体贴图是他亲手做的,不是 AI 生成的。每一块砖的位置都是被选择的。

我把他的 Blender 工作流图看了几遍。他用节点编辑器搭了一个复杂的纹理生成管线——然后手动将输出拍平成 256×256 的 256 色 PNG。每一张贴图的输出都要经过调色板的批准——这个颜色在调色板里有吗?这个颜色在变暗两档后会不会和另一张贴图的颜色冲突?

他开发日志里用了一个词来形容这个过程——"back-and-forth",来回了无数次。

大概和现在用生成式 AI 三秒出图时想的东西完全不同。


我试了一下 256 色的世界

文章看到这里,我觉得光跟着作者思路走还不够。于是我从他的博客里拿了一张游戏的截图,在自己的机器上跑了个实验:

把一张 1280×960 的 PNG 缩放到 320×240,然后用 median cut 算法量化到 256 色。这是 2026 年的现代图像处理库在干这件事——不需要调色板设计,不需要人工取舍,算法自动做。

结果让我愣了一下:

量化结果用满了全部 256 种颜色

不是「大概用了 200 种」,是整整齐齐 256 个槽位全部占满。这张图的内容——游戏场景、光照渐变、贴图纹理——足够复杂到需要耗尽每一个颜色名额。而 Marko 在创作这张图的每一张贴图时,整个人翻来覆去地在 256 个槽位里腾挪。

这个数字背后还藏了另一件事:他上面所有的贴图、所有的 Sprite、所有 UI 元素——都在共用这 256 个槽位。我在测试中量化的只是单张图。

他的工作流是:画一张贴图,检查它在调色板中占用了哪些颜色,确保不会用光所有名额让后面的贴图没颜色可用。然后画下一张。再下一张。

这个过程叫 asset creation。2026 年的定义。和 1993 年的定义一模一样。


在无限选择面前,有限的才是美的

Marko 说他的目标是发布一个「完成了的、打磨过的、好玩的游戏——不是一个 tech demo」。这意味着他不仅要克服技术限制,还要在有限的时间内完成所有美工、音效、关卡设计。

他的博客用大量篇幅讨论了一个在现代图形编程中几乎被遗忘的问题:什么是 asset creation? 不是「写 prompt → 生成 → 调整 prompt → 再生成」。而是面对一张空白的 320×200 的画布,问自己:这 76800 个像素里,每一个颜色的选择有没有道理?

这篇文章在 HN 上被顶到 700+ upvote 的那天,同一个首页还有 Claude Fable 5(1500+ pts)、OpenCV 5(600+ pts)、AI 开发者密码泄露(500+ pts)。在这些参数动辄以亿计数的新闻中间,有一篇关于 256 种颜色的文章,同样获得了上千人的关注。

这不是怀旧。是很多人内心深处渴望一种更确定的创作方式——在这个所有边界都可以被擦除的时代,有人主动捡起边界,把它做成了至少对自己来说有意义的东西。

用他的话说:限制迫使你做出深思熟虑的选择,而深思熟虑的选择——不管用到什么地方——往往看起来不错。

分享:

评论(0)

暂无评论,来写第一条吧~

发表评论