● 第一捧沙子——soft shadow
为了削弱切糕一般的阴影边缘对视觉体验带来的影响,同时回避传统的多sample复式贴图简单粗暴所导致的画质难以提升,程序员们开始引入各种看上去精美和谐的算法来处理soft shadow的问题。
复杂数学处理出来的soft shadow
傅里叶级数、非线性函数逼近、卷积定理、切比雪夫不等式……这些一般用户一辈子绝对不可能看到3次以上的名字开始浸入到阴影处理的各个环节。他们每一个都有着华美的外表以及优美的内涵,在解决阴影边缘单个像素的比较和颜色问题时显得极其精巧和谐。
比如成熟的Convolution Shadow Maps所使用的处理过程就体现了这种精巧,在这种soft shadow处理方式中,程序会对某个处在场景中的像素与光源的距离以及这个像素在shadow map上的坐标进行比较,将比较的结果应用到卷积定理中并得到一组优雅的函数,通过对函数应用数值分析方法,利用傅里叶级数逼近来完成计算,整个过程就好像一首巴赫的交响乐一般严谨精巧甚至充满了庄严感。
但待处理的像素显然不止一个,对于每一个阴影边缘的像素,上面那些过程都要被重复最少一次,有些像素还可能会被重复很多次直到结果正确为止。于是在这些算法身上,数学最简单的暴力堆积效果被放大到了无法被忽视的高度。
举个例子,解一个简单的二元一次方程组,比如X+Y=4,X-Y=2这样的,对任何人来说都很轻松,这反映的就是数学的和谐和美丽,她是那么的精巧,那么的“刚好合适”。但如果类似的方程组从1个变成1000个,你还会觉得她很美丽很精巧么?变成10000个呢?100000个呢?2304000个呢?
解决一个单元的数学问题需要的是艺术家,解决一大堆数学问题的就是粗声大气满身臭汗的野蛮人了。一个数学问题如果是一首优美的交响乐,一大堆数学问题就成了嘈杂而且轰鸣着的噪音了……
使用soft shadow对系统的压榨时有目共睹的,最初的数个支持soft shadow的游戏比如F.e.a.r 2,S.T.A.L.K.E.R.,细胞分裂等几乎个个都是硬件杀手。这些游戏被soft shadow拖累得即便是当时最强劲的平台运行,其幁数也仅仅是勉强可玩而已,如果不是制作方明显的要让游戏最后可以动起来的优化意图起了作用的话,估计这些游戏即便放在今天都还是硬件杀手之一。
但是,这些游戏使用soft shadow所带来的效果呢?
如果我不说,你会想起这些游戏中还支持soft shadow么?你会注意到这些游戏中soft shadow的表现么?