Hotdry.

Article

从Amiga ADF镜像恢复1987年Juggler光线追踪器源码:早期图形算法的工程实践

解析Eric Graham 1987年Amiga Juggler光线追踪器的源码恢复过程,探讨ADF磁盘格式解析、HAM显示模式与早期光线追踪算法的浮点优化技巧。

2026-06-03systems

1987 年,Eric Graham 为 Commodore Amiga 编写的 Juggler 光线追踪演示程序震撼了计算机图形学界。这个仅持续数秒的动画展示了一个抛接彩色球体的机器人,其渲染质量之高,连 Amiga 的制造商 Commodore 公司都不相信这是在该平台上实时计算的 —— 他们推测计算工作必然是在大型机上完成,Amiga 仅负责播放预渲染结果。近四十年后,这段具有里程碑意义的源码通过 ADF(Amiga Disk File)磁盘镜像的逆向工程得以重见天日,揭示了早期个人计算机图形编程的精妙之处。

散佚的源码与 ADF 格式壁垒

Juggler 的原始源码长期难以获取。虽然 archive.org 保存了压缩的 ADF 磁盘镜像,但这种格式构成了现代访问的技术屏障。ADF 是 Amiga 软盘的原始位级镜像,内部采用 OFS(Old File System)文件系统编码。与当代的 ZIP 或 tar 归档不同,ADF 需要专门的提取工具才能访问其中的文件内容,这一特性甚至阻碍了大多数 AI 训练工具对原始数据的解析。

AlphaPixel 团队面临的第一个挑战是构建可靠的提取工具。他们选择了 Michael Steil 开发的 extract-adf C 程序作为参考实现,该工具能够处理损坏或部分可恢复的 OFS 镜像。为了便于现代开发者使用,团队使用 AI 辅助将 C 代码移植为 Python 版本,保留了原始功能的同时增加了对 gzip/ADZ 和 ZIP 内嵌 ADF 的支持。验证阶段使用了 ADFlib 项目的测试镜像进行字节级比对,确保提取的准确性。

源码结构:三模块架构

提取出的源码揭示了 1987 年光线追踪器的模块化设计。核心代码分布在三个 C 文件中:rt1.c实现光线追踪的核心算法,rt2.c负责场景设置与 HAM 像素转换,rt3.c处理 Amiga 特有的屏幕与图形支持。此外还包含一个功能相似的 BASIC 版本raytrace.a,展示了同一算法在不同语言环境中的实现差异。

有趣的是,公开的 C 代码仅实现了单个 "DULL" 材质球体的追踪,球心位于 (0, 0, 2),半径 3.0 单位,颜色为淡红色(RGB 1.0, 0.7, 0.7)。而 Juggler 演示中令人印象深刻的机器人、龙和大象场景,则需要名为 SSG(Scene Simulation Generator)的独立工具解析对应的.dat场景描述文件。这些场景文件(robot.datdragon.datele.dat)虽然随磁盘保存,但 SSG 工具的源码并未包含在原始分发介质中,成为完整复现的历史缺口。

HAM 模式与浮点运算优化

Juggler 的技术成就很大程度上依赖于 Amiga 独特的 HAM(Hold-And-Modify)显示模式。这种允许在单个像素级别修改颜色分量的技术,使 Amiga 能够在受限的显存预算下呈现超过 4096 种颜色的视觉效果。rt2.c中的像素转换代码直接操作这一硬件特性,将浮点计算结果映射到 HAM 编码的色值。

在 1987 年的 Amiga 68000 处理器上,浮点运算是性能瓶颈。源码中可见大量针对定点数和整数运算的优化痕迹,光线与球面的相交测试采用代数展开以减少浮点操作次数。这种在精度与性能之间寻求平衡的策略,是早期实时图形编程的标志性特征。与现代 GPU 的大规模并行光线追踪相比,这段代码展示了在单核、无浮点协处理器环境下实现可交互渲染的创造性工程。

授权澄清与数字保存

技术恢复完成后,AlphaPixel 面临版权层面的考量。磁盘中的原始声明仅授予 "复制和修改" 权限,但未明确允许公开分发。团队直接联系 Eric Graham 本人,获得了清晰的授权:"任何人都可以随意使用这段代码,只要提及我的名字。" 这一确认使源码能够以公共领域形式托管于 GitHub,附带原始 ADF 镜像和提取工具,确保恢复过程的可重复性。

这次恢复工作的意义超越了单纯的怀旧。它展示了数字考古的完整流程:从二进制介质的物理保存,到格式解析工具的开发,再到法律层面的授权确认。对于计算机图形学的研究者而言,原始源码提供了理解早期光线追踪算法演进的第一手资料;对于复古计算社区,这是防止数字遗产进一步 decay 的积极行动。

现代启示

Juggler 源码的恢复揭示了软件保存的系统性挑战。当原始分发介质采用专有格式、依赖特定硬件平台时,即使源码本身存在,也可能因技术门槛而长期无法访问。AlphaPixel 开发的 Python 版 ADF 提取器现已开源,为其他 Amiga 软件的保护工作提供了工具基础。

从工程角度看,这段近四十年前的代码仍然具有教学价值。其清晰的三模块架构、场景描述与渲染引擎的分离、以及对硬件特性的直接操作,都是嵌入式图形编程的经典范式。尽管现代开发者很少需要直接操控像素级 HAM 编码,但理解这些底层机制有助于把握图形管线演进的脉络。

当前,恢复团队计划进一步工作:将代码移植到现代平台,并尝试重建缺失的 SSG 场景生成器。这将使原始的机器人、龙和大象场景能够在新一代硬件上重新渲染,完成从二进制恢复到可执行复现的完整闭环。


资料来源

  • AlphaPixel Software Development: "Recovering Eric Graham's 1987 Amiga Juggler raytracer source code" (2026-06-02)
  • GitHub: AlphaPixel/Extract-ADF-Python - ADF 磁盘镜像提取工具的 Python 实现
  • archive.org: raytracer-1987-graham-source-code.adf.7z - 原始磁盘镜像存档

systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com