● 商人为沙子准备了推土机
实际上微软之所以将shader效率提升到了一个极其重要的高度,跟他本身意识到了沙子-沙漠效应有直接关系。API再怎么优秀,最终的使用者都是人。微软如果想要让自己的API有更多的人使用,除了更高效更绚丽之外,逐渐降低的编程难度也是必要条件。否则光有优秀的特效,却动辄需要几万行代码才能实现,这么发展下去早晚有一天全天下的程序员都会被累死。
提倡高效的shader,推广形势更加灵活的代码形式,这从本质上就是在降低编程的难度,因为灵活本身就意味着自由和无拘无束,而自由和无拘无束的编程环境显然有利于程序员甩掉繁文冗节的累赘。同样的使用1D指令就能够达成的效果,在DirectX 10环境下的代码绝对比需要找齐规整4D格式的DirectX 9环境要简单很多。而一样是调用通用计算能力去加速图形处理过程,DirectX 11环境下干脆取消了代码的几何关联性,这使得编程难度和复杂度大幅下降到了足以让绝大多数人都能够接受的程度。
沙子-沙漠效应确实很难办,但微软有能力降低编程者的负担,减缓质变过程的难度提升。虽然微软是商人不是慈善家,但是从使用者就是最好的推广者这个角度出发,在商品中充分考虑使用者的感受应该是没有坏处的,使用者用着高兴,游戏用户看着喜欢,两边都有助于自己API的推广,剩下的事情就是非常简单的收钱和数钱了,这就是微软的如意算盘。
然而现实却往往是残酷的。在进入到DirectX 11时代的今天,我们见到了一个无比奇怪的现象——大量知名的游戏大作在号称支持DirectX 11的同时依旧提供陈旧的DirectX 9版本,而两个版本实际的画面效果和执行效率也未见什么本质的不同,这些大作背后所使用的引擎更是几乎全部由DX9版本添加一部分DirectX 11特性之后简单升级而来。对DirectX 11特性及特效的支持,仅能用浅尝即止来形容。引擎整体效率方面也没有见到具体的提升。更加悲情的DirectX 10甚至给人一种昙花一现的感觉,不仅跟现在的DirectX 11一样得不到支持,几乎所有号称支持DirectX 10的游戏均同时提供了DirectX 9版本,在其全盛期间都未见几部完全支持的大作,在DirectX 11出现之后更是第一时间消失得无影无踪,就好像从来没出现过一样。
现实世界的发展已经很明显的将微软原先的打算踩于脚下。