返回

文章详情

像1993年一样制作图形

Hacker News2026年6月9日 10:46

Catlantean 3D是一项我在空闲时间慢慢构建的副项目,已经持续了一年多,计划明年在Steam上发布。你的浏览器不支持视频标签。我的目标是使用90年代初期常用的技术构建一个完整的、可交付的第一人称射击游戏,同时允许自己享受使用现代编译器和平台抽象层的奢侈。实际上,这意味着我愚蠢地给自己施加的限制如下:游戏必须完全从头开始制作,包括资产,所有渲染必须手动完成,所有音效混合必须手动完成,目标分辨率320x240,仅256种颜色,允许使用浮点数,但行为必须在各个平台上保持一致。决定使用固定点进行游戏逻辑,以确保确定行为,渲染使用浮点数,因为确定性并不是那么重要;必须有一个完成的、打磨过的、有趣的游戏(而不是技术演示)。允许平台抽象层,但我必须假装它非常有限(在合理范围内):帧缓冲区用于写入像素,键盘/鼠标输入,音频缓冲区用于写入样本,文件系统I/O,没有AI的冗余。如果这听起来不合理,那是因为确实不合理。但我还是在做,今天我想谈谈开发博客中通常被忽视的一件事,那就是资产创建。注意:这里显示的所有内容都是进行中的工作,可能会有很大变化。目录 更新日志 2026-06-09 - 发布。调色板渲染 VGA图形模式13h是著名的320x200 256色图形模式,定义了一个时代的PC游戏。从程序员的角度看,它是非常简单的:你会有一个线性的帧缓冲区,每个像素由一个字节表示,该字节索引到一个包含256种颜色的调色板中。如果你想绘制一个像素,你只需在特定地址写入一个字节,就这样,没有着色器或显存。每个像素一个字节,这个字节是一个索引,指向一个包含实际RGB值的调色板,这些值将被渲染到屏幕上。这会带来一些有趣的限制;在制作现代游戏的资产时,你可以将成千上万种颜色应用于图像,但当你的限制是屏幕上的每个像素只能是256种颜色中的一种时,资产创建就变成了一个非常不同的问题,因为每种颜色选择必须认真而有意识。像《毁灭战士》和《杜克·努肯》这样的游戏就是很好的例子,它们做到了这一点。由于这些技术限制,这些图形具有一定的清晰度和鲜明度,而不是因为限制而受损。限制迫使做出深思熟虑的选择,而深思熟虑的选择往往看起来很好。Catlantean 3D试图再现这种感觉,但有一个例外——我实际上更倾向于VGA模式-X,320x240。这是因为如果在4:3显示器上显示320x200,你会得到非方形的像素!尽管这将是最真实的,但我选择不处理这个问题出于偏好,而不是客观原因。那么,在这些限制下,如何创建图形?调色板一切始于768个字节,经过多次反复试验精心挑选。这些确切颜色的主要原因如下:一个保留给透明度(鲜艳的粉红色),一个保留给纯白色,一个保留给纯黑色。我显然需要很多血,因此需要红色,绿色和蓝色的色调,因为我要有红色、绿色和蓝色的钥匙和颜色编码的门,游戏将设置在猫兰地,这个虚构的国度类似于古埃及(因为崇拜猫),所以显然需要很多沙漠色调(黄色和棕色),很多灰色,因为场景涉及许多技术设施(猫兰地被赛博犬人占领),一些米色调以打破灰色的单调,并在变暗时作为温暖的替代(稍后会讨论),其余颜色将在创建纹理时根据需要填充-这是非常主观的,无法解释,除非说“看起来不错”。调色板并不是一下子就诞生的;它涉及在资产创建、测试和总体重申期间大量的反复过程。以下是实际游戏中的一些精灵和纹理示例:色彩图 Catlantean 3D是一个传统的光线投射器。地图由大小相同的瓷砖组成;有些是墙,有些仅是有地板和天花板的空洞。为了渲染地图,渲染器为每一列屏幕使用DDA算法,遍历瓷砖地图并确定光线击中地图几何图形的位置,并根据此在屏幕上渲染适当纹理的墙柱,从适当坐标取样。地板和天花板在后面像水平扫描线一样渲染,填充屏幕的其余部分。关于光线投射的内容已经被其他博客和网站死死地讲述过,所以我不打算覆盖所有内容。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡