返回资讯中心
外部精选
软件工程
#开发者实时流

开发者用12年打造游戏引擎 Spartan,从黄色三角形做到可驾驶岛屿

来源标题:Twelve years of building a game engine, and what it means to finish one

开发者用12年、逾8000次提交完成自研游戏引擎 Spartan,从最初一个黄色三角形发展至可渲染约30公里宽的岛屿场景。该场景包含城镇、机场、200多条道路、森林、FFT 海洋和以200Hz模拟的车辆,并采用路径追踪逐帧渲染。作者称引擎永无真正“完成”之日,但 Spartan 已到可交付使用的程度。

Hacker News 最新vinyl72026/11/8 · 今天30 分钟阅读

以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。

从画出一个黄色三角形,到做出一座可以开车横穿全岛的世界。关于完成 Spartan——为什么它是我的火箭,以及为什么它不会成为你的。

大约在 2014 年,我打开一个窗口,在蓝色背景上画了一个黄色三角形。十二年、超过 8000 次提交之后,同一套代码渲染出一座约 30 公里宽的岛屿,上面有城镇、一座机场、200 多条道路、森林、一个 FFT 海洋,以及以 200 Hz 模拟的汽车。全部路径追踪。每一帧都是如此。

拖动滑块看看。一张图就是整个故事。

2014 2026 Spartan 渲染出的第一帧,以及今天的 Zakynthos。同一套代码,同一个工程师。

我以前写过这个引擎,写过十二年的重写教会了我什么关于简单性的道理。这篇不一样。这一次,我想说出一个几乎没有人能说出口的词——所有造引擎的人里,几乎没人有机会说出这个词。

我不知道有多少人能把一个引擎在公众视野里养活十二年、不间断地做下去、真正把它带到可以用来发布游戏的程度,然后坐下来写写那是什么感觉。所以,这就是了。

先把显而易见的部分说清楚:引擎永远没有完成的那一天。总有更快的路径、更好的阴影、新的 GPU 特性、一个藏在你三年没碰过的系统里的 bug。任何告诉你他的引擎已经做完的人,要么在撒谎,要么已经停止开发了。

所以当我说“完成”,我指的是很具体的东西。我指的是 Spartan 现在拥有的功能足以做出大多数游戏。不是技术演示。是游戏。它有编辑器、Lua 脚本、独立运行时、能把一个世界打包成可发布产品的游戏构建器、Steam 集成、完整文档。而就在这个月,还有可视化脚本。如果你愿意,你可以完全不写一行 Lua 或 C++ 就做出整个游戏。

最后这一块,就是我划下那条线的原因。我会解释为什么。但首先,说说一个三角形是怎么变成现在这样的。

我意识到这件事的时候,大学已经读了一大半。我这辈子得做点什么,而那个学位解决不了问题。

我从来都不相信学位。对我来说,那张纸什么都不是。它只说明你在一些房间里坐了好几年。它不说明你能造出任何东西。而我想闯进游戏行业——就我所知,这个行业在乎你能造出什么,远胜于你学过什么。

显而易见的答案是做一款游戏。但想想当年做一款游戏意味着什么。你需要一个程序员、一个设计师、一个美术、一个人做音效、一个人做动画。你需要一个团队。独自发布一款游戏难如登天,独自发布一款好游戏几乎不可能。这是个多学科的问题,而我只有一个人。

所以我没有从目标出发。我从约束条件出发,用第一性原理一路推上去。

我只有一个人。我会编程,而且能坚持非常久。一款游戏需要的学科太多,一个人做不完。于是问题变成了:我一个人能造出什么,对别人有真正的价值?一种人们愿意付钱的东西,一种永远不需要“完成”、只会不断生长的东西?

答案是游戏引擎。我选它,不是因为它酷,也不是因为有人让我这么做。是我的处境,用第一性原理推下来,定义了目标。

它起步很小,和一切事物一样。一个三角形。然后是一个带物理的贴图箱子。然后是一辆 Jeep,一个有几栋房子的世界,角落里的帧数计数器,还有截图里整个解决方案资源管理器都看得见——因为那时候,代码本身就是产品。

那时它还不叫 Spartan。它叫 Directus3D,一个沿用了好几年的代号。到 2015 年 8 月,它有了天空球、G-buffer,还有一个控制台,会骄傲地宣告它编译的每一个 shader。

然后是编辑器。层级面板、检查器、项目浏览器。它看起来就像我以为一个引擎该有的样子,因为我边做边学,边学边模仿我所敬佩的东西。

2019 年,我给它改了名。Directus3D 一直只是个代号,而那时我已经知道这个引擎实际上是什么、正在变成什么。精简。没有多余的东西。为持久而造。Spartan。

人们有时问我,十二年是怎么坚持下来的。他们期待听到一个关于动力、自律或某种保持高效的窍门的故事。诚实的答案没那么光鲜。

我从不需要去寻找力量。它本来就在那里,因为我的来处。

我的人生经历过艰难的阶段,从贫穷到你所能想象的一切。没有人给过我任何东西。一切都得我自己去拿。而当这就是你的起点时,对于“低谷”这个概念,会发生一件奇怪的事。低谷当然存在。我有过。但它们不会像人们预期的那样被感知到。艰难是基线。艰难是常态。

古代斯巴达人比任何人都更懂这一点。根据普鲁塔克的记载,斯巴达男孩七岁就被送进 agoge(斯巴达军事训练制度)。集体训练,食物极少,不穿鞋,从十二岁起,一整年只有一件斗篷。要点在于:在艰苦中长大的人,不会把艰苦当作障碍。他把它当作天气。

就是这一个想法——艰苦可以成为你的基线,而不是你的敌人——正是我所经历的。斯巴达人甚至给了我们一个词,来形容我最喜欢的写代码方式。他们来自拉科尼亚(Laconia),以用尽可能少的字说尽可能多的话而闻名。Laconic(简洁)。

只要基本需求得到满足,我就能像机器一样写代码。每一天。需要多久就多久。我从一开始就知道自己这一点,所以我从不怕一个没有截止日期的项目。

(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →