|
本帖最后由 Vendicare 于 2013-1-10 15:46 编辑
看见有人争论PowerVR和G70的优劣,其中扯到了TBDR技术。虽然怎么说都有点关公战秦琼的意思,不过我还是忍不住也来谈谈TBDR和Deferred shading两者的区别和优劣。
Tile-based Deferred Rendering是个很老很老的东西了。借助别人说过100遍的话:
传统的3D显示芯片处理过程是先进行几何运算,然后读取、生成纹理等操作,然后通过深度测试决定像素是否可见,之后将可见像素进行必要的处理后输出到Framebuffer显存上,之后由RAMDAC读取显存经过数模转换输出到显示器上。这个过程中有一大缺点就是无论像素是否可见,都必须经过渲染,这将浪费大量填充率和带宽,这被称为overdraw。
为了解决这一矛盾,PowerVR的TBR在几何运算后,将屏幕的像素分成了很多矩形小块,先经过每个小块的深度测试,测试小块是否可见决定小块中的像素是否应当被渲染,之后将需要被渲染的再交给渲染管线去处理,之后输出。这样一来,不可见的像素已经提前被剔去不用被渲染,很大程度上节省了带宽,减少了渲染管线的压力。
本质上TBDR就是一种Deferred shading然而TBDR有很多问题。
首先深度测试必须有人来做。不管是显卡还是CPU要想在渲染前检测景深肯定要进行计算,这部分计算的开销要么产生性能损失,要么产生电路开销。而且场景越复杂开销越惊人。(CPU蛋疼)
其次,为了检测像素是否被遮挡,state load非常频繁。而state load不利于访存,如果场景中多边形变多而且互相间关系复杂,TBDR造成的访存需求会成倍上升。带宽这东西绝大多数时间都是珍贵的,所以TBR技术一开始就没能跨过这道门槛。(带宽蛋疼)
TBDR要求需要将模型存进scene buffer里,对于现在游戏场景中随便就几千万个三角形的建模规模,要想保证不发生缓存溢出,基本上必须在显卡上集成个16M的SRAM才差不多有戏。这个晶体管数量随便就干翻HD4000了(夸张的说法,未考证,欢迎踢爆)。(缓存蛋疼)
使用TBDR的时候不能改变PS的Z值,这阻碍了很多光照特效的使用。要想作出好的效果就要不停地Disable buffered shading。编程开发工作量巨大无比。(程序员蛋疼)
最后回到主要矛盾上来,TBDR的主要受益人其实是TMU、其次是PS单元。然而TMU在很久很久以前就已经不是显卡的瓶颈了,统一渲染以后PS单元也可以灵活调配了。更为关键的是nvidia强推的Multi-Pass技术流行,这玩意在桌面领域迅速让TBDR完全没有任何存在的理由。在90年代末期的3D时代中,由于大家还在着力解决温饱问题,TBDR对于简单场景中运算资源的节约还是比较受人欢迎的。一如高粱这种农作物,当人民解决温饱问题后,没有人会再去缅怀高粱。PowerVR退出桌面是历史的选择,随着移动SOC处理能力的激进发展TBDR退出手机领域也只是时间问题。
Deferred Shading待续
|
|