● 成也Unified Shader,败也Unified Shader
其实从现象上来看,目前这种有API也没人用的局面完全是自己挖坑自己埋这个词的完美注脚。
作为统一构架的开端,DirectX 10为了解决不同shader单元利用率不均的问题而创造了Unified Shader单元,这个单元可以无差别的处理传统的Vertex Shader和Pixel Shader指令。微软的初衷是好的,这种解决方案不仅能够保证Shader指令执行率的最大化,更可以最大限度的保障对旧有指令格式的兼容性。也就是说,即便是一个编程习惯和思路依旧停留在DirectX 9时代的程序员,他所写出的仅符合DirectX 9要求的代码,在DirectX 10硬件中依旧可以被完全无问题的执行。
这也就意味着,开发商并不需要为新的API开发什么新的具备更高自由度啊、使用灵活shader啊、玩命透过像素来表达正确效果啊之类的引擎,程序员也不需要去学习新的编程方式,改变自己的编程习惯。他们只需要为自己的引擎添加最基本的新版本API的特性,扩展好shader以外的诸多更新比如更好的纹理压缩方式等,然后就可以一切照旧继续写游戏了。反正我精力数有限,除了结构上要求严格点复杂点以外,光栅化发展到今天这个地步,指令数一定的前提下1D指令写出来的东西在最终效果上跟4D也没有什么特别本质区别,可能4D指令因为执行效率更低指令更加复杂从而导致了同样条件下效果会稍稍差些,但也不是简陋到完全不能忍受的地步,配合我们无敌的美工精心烘焙的各种精美的纹理,创造沙漠可能困难些,弄个大点的沙地出来您完全可以凑活凑活嘛。
于是,我们面前的游戏继续是4D指令满天飞,依旧是颇具“油画风格”的光照系材质,仍然是各种从03年04年修补到现在依旧坚挺的陈旧引擎。于是,我们看到了虽然更好用但却得不到应用的API,还有符合API设计却得不到施展,只能乏力的继续吞吐旧指令的构架。于是,我们看到了今天这个乱局。
即便升级到支持DirectX 11,UE3依旧无法摆脱过重材质的“油画感”
现在屏幕前的您明白为什么在游戏测试中,我们并没有看到构架设计上所导致的差异了吧。
当然,这仅仅是现象,现象距离本质还有一段不小的距离呢。