光
由代码构成的世界本就与现实世界遵循完全不同的规则,程序员所做的不过是给它加上无数的规则,让它看起来与真实世界相仿。
最初的游戏世界,是没有光的。你也许能在早期的横版2D游戏的场景中看见蓝天白云,太阳高挂,但是你也知道,你能看见场景和人物并不是因为它们反射了太阳的光线,地上也不会有随玩家而移动,与玩家动作一致的影子。
后来,有人想到了利用光来丰富gameplay的点子。黑暗的山洞中伸手不见五指,点燃火把的冒险家只能看清身边的路。这种效果理论上讲一个遮罩图层就能实现,又足以达成游戏需要的效果。但这样的实现方法确实是由于机能不足,而向现实的一个妥协。
进入3D时代后,事情就没那么容易了。要做出一个看起来比较真实的世界,就得要真正去考虑光照的原理与实现了。由于PC机和家用机的性能限制,早期的一些3d游戏选择不绘制网格模型的阴影, 而只对关卡中的BSP固态场景进行光照处理,绘制阴影贴图。在关卡制作时先使用静态光源进行全局光照的烘焙,并将其结果作为关卡的光照信息保存到关卡文件中,游戏启动时直接读取并进行渲染;至于会随游戏进程而变化的动态光照效果,就放在游戏过程中即时演算,让机器实时地处理动态光源在游戏中改变时的光照。
时至今日,各种游戏对光照的拟真程度已越来越高。有的沙盒游戏能实现无缝连接的昼夜循环,有的游戏能墙壁地板天花板开洞还能透光,还有MC玩家喜闻乐见津津乐道的“不服打个光影云彩极致水反MOD!” 但这些游戏也常常存有一些缺憾,或者说局限。
以上提到的光照效果,事实上并没有用到太高深的光学原理。例如环境光遮蔽,所模拟的现实效果其实就是光的漫反射现象。不过,图形学关于光的研究仍在继续。现在已经有有人将物理光学的基本规则加入到游戏引擎中,尝试计算光的干涉、衍射以及产生的偏振现象,通过类似偏振滤镜的原理,使得游戏画面更加清澈。当然,再高深的研究也是要为gameplay服务的。希望这些成果能够进一步提升画面效率,在未来减少这些因机能受限而偏离现实的设定。