秩序跟效率,有的时候并不是同一个方向。
ganova,开发部。
面对着计算机上解包出来的文档结构,林立新眉头微微一蹙。
“优化过于激进了啊”
开发组的技术力是绝对是全业界毫无争议的最强一档。
但面对这次的《yst》项目,这过强的技术力反倒是成了一个累赘。
要知道当年cyan工作室在开发《yst》的时候,那也是标速的cd-ro。
理论上来说不可能有这种人家能行他们ganova做不到的情况。
更何况当年cyan用的还是苹果的quickti技术和hypercard技术。
在底层性能上,无论如何也不可能他们ganova这种技术栈完整的超级大厂的对手。
现在解包一看,这才算是彻底明了。
按照开发流程,一个游戏软件在开发完成后需要进行编译工作。 将n语言转译成硬件能够理解的机器码。
同时,编译器会尝试理解开发者的意图,并尽可能地优化。
很多时候菜鸟程序员写出来的屎山在性能表现上却意外不错的原因就在这儿了。
编译器一直在替铸币们负重前行。
作为一个立项之初就面向未来的现代架构,n语言以及它的编译器在编译优化这方面做了大量的工作。
其中甚至有一大部分还是杰拉德在离职前留下的遗产。
加之林立新和卡马克长年累月的优化。
如今的n语言的sdk甚至要比那些专业软件更加庞大复杂。
而它的作用也是非常强大。
最简单的优化逻辑自然就是常量折叠和消除无效死代码这些节约文档大小的操作。
比如程序员为了可读性书写了大量的变量和计算。
但在编译器判断后发现,这些实际上可以直接用固定常量的方式一行搞定,就会直接优化掉。 循环的处理、函数的调用等等。
很多时候,他们在开发过程中是要优先保证代码的可读性的。
毕竟不是人人都是林立新。
如果让林立新自己放开手脚编写程序,的确能做到完全从机器的视角来进行编写。
毕竟他的大脑本身就是一台性能爆表的湿件超算。
但这种操作放在五年前可以,放在现在却不行。
因为游戏开发已经不是他自己一个人的事了。
大量的工作人员参与其中,必须要确保大部分人都能一眼读懂某一部分的作用。
于是乎这里便到了编译器发挥神力的时候。
如此的小伎俩在n语言的编译器中彼彼皆是。
不过真正让他们感到骄傲的机制,同时也是出现这次问题的幕后元凶。
文档系统。 为了确保游戏效率,引擎会判断游戏内资源的使用频率,并对它们进行碎片化的整理。
所有的文档都以1和0的二进位流形式,完全打碎在游戏文档里。
考虑到缓存和帧数表现,这套模式绝对是最顶级的优化思路。
但对cd-ro来说,这就是一场纯粹的灾难了。
“没想到有一天会栽到过度优化的坑里。”
林立新撇了撇嘴。
到底还是经验不足。
这大概就是开挂给他带来的一点负面影响了。
经常出现这种因为进步过快反而扯到蛋的尴尬情况,非常蛋疼。
不过一体两面的。
只要知道问题在哪,那林立新理论上来说就是无敌的。
想要修复它,其实非常非常之容易。 甚至都不需要其他人参与,也不需要改动原有代码。
只需要做一件事
‘哒’
林立新在键盘上敲了一下,将编译工具的‘文档优化系统’关闭。
done。
就这么简单。
《yst》是个慢节奏看环境玩解谜的游戏,对帧数压根没有什么要求。
直接把这些过度优化的东西全部关掉,一切就都迎刃而解了。
当然,这样做只能解决一部分问题。
剩下要怎么在这个基础之上优化,那的确还是需要精心设计一番的。
仔细盘算一下,《yst》也算是ganova历史上开发周期最长的作品之一了。 不同于《quake》这类游戏,《yst》在程序上没有太多的讲究。
绝大部分的工期都用在了建模和喧染上。
这些工作不象写代码,没法靠着技术节约工期快速推进