
开发者用12年打造游戏引擎 Spartan,从黄色三角形做到可驾驶岛屿
来源标题:Twelve years of building a game engine, and what it means to finish one
开发者用12年、逾8000次提交完成自研游戏引擎 Spartan,从最初一个黄色三角形发展至可渲染约30公里宽的岛屿场景。该场景包含城镇、机场、200多条道路、森林、FFT 海洋和以200Hz模拟的车辆,并采用路径追踪逐帧渲染。作者称引擎永无真正“完成”之日,但 Spartan 已到可交付使用的程度。
以下正文由 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 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。