Oculus Rift

Oculus Rift

星战前夜:女武神

EVE: Valkyrie

VG人物:ACG的昔年今日:非地球人约翰·卡马克

作者 品游师   编辑 品游师   2015-08-19 22:28:14

1970年8月20日,约翰·卡马克降临地球。他是游戏领域的大师,他把神奇的“0x5f3759df”用到了游戏程序中,又补了一句“What the fuck?”。他玩过火箭,现在正在玩VR。生日快乐,活在未来的卡马克。

 

神奇的“0x5f3759df”

  卡马克最擅长的就是压榨显卡的性能,通过对软件的优化反向拉伸硬件的功率,这点上的意义超过了他开创FPS的成就。

  为什么呢?当年卡马克为了实现《雷神之锤》的真3D效果,竟自行研制了一套底层图形库,和OpenGL、D3D一样,充当软件和显卡之间的桥梁。道理和操作系统串联机器和应用相同,是一个标准制式,可以理解成是独立于3D引擎之外的图形加速软件,比引擎深一层,再深一层就是操作系统了。现在游戏公司都直接买引擎,买来开发游戏,当今90%的游戏程序员不会开发引擎,更何况是这样的底层API接口?

▲《雷神之锤》,1996年

  再说说引擎。现在很多人会用视频制作软件,把图片、音源、视频片段、字幕这些零部件统统丢进去,整合再完整播放出来,但会用不等于用得好,整合得更流畅更自然更有美感才是关键。这和游戏引擎是一个道理,让图形数据输出的速度更快,质量更高是一款好引擎的重要评判标准。引擎经常要对底层函数调用,越底层的数据调用得越频繁,尤其是3D图形的渲染这块,大家玩游戏时,碰到大场景经常出现卡顿,甚至角色悬空,其实就是图形算法的速度跟不上。

  有种算法叫“牛顿迭代运算法”。比方开方运算,计算根号2是多少,先假设认定一个数,带入到函数中,获得这个数和√2区间的某个值(函数曲线切线与x坐标轴的交点),再迭代到原函数中继续计算,不断接近函数解,最后得出1.414。如果认定这个数是2,很接近,两步就能算出来,而假定数太大或太小,就要算半天,速度就下来了,图形处理的速度就变慢了。到头来运算速度成了碰运气,运气好,1秒搞定,运气不好10秒钟,速度本身并没提升。于是大家巴不得自己都是先知,恨不得一下就能无限接近那个真实值。

  结果只有卡马克做到了,他在《雷神之锤3》的开源代码中设置了“0x5f3759df”这个常数来算那个猜测数,后面加了一句“What the fuck?”的标注就搞定了。不管算什么,这个常数的运算能力都比牛顿快4倍。卡马克首次把这种奇特的运算法调用至引擎,这就是后来著名的“平方根倒数速算法”。

  0x5f3759df犹如黄金分割线,是一道优美的自然法则,卡马克发现了它,就跟门捷列夫发现了元素周期表一样,具有里程碑的意义。

(编注:有调查显示0x5f3759df并非卡马克首创,之前就于计算机图形学的硬件与软件领域有所应用,在此不做细考。但《雷神之锤3》的代码中的确用到了0x5f3759df)

     

▲对0x5f3759df感兴趣的朋友可以参看这篇论文,《Fast Inverse Square Root》,小编对数学、编程一概不懂,不敢班门弄斧。

下页:挥一挥衣袖,不带走一片云彩

| (20) 赞(46)
品游师 VGTIME用户

关注

评论(20

跟帖规范
您还未,不能参与发言哦~
按热度 按时间