Deferred Shading翻译后记【二】

本周四,跟同事们讨论的时候,大概说了一下Deferred Shading的一些基本细节,以及与我们项目的关系。我对Unreal3没有全面支持Deferred Shading至今耿耿于怀,甚至有时候让一部分同事产生了对Unreal3的不信任感。其实,我最想表达的,是这个Blog一贯以来的主题:没有最好的技术,没有最坏的技术,没有有用的技术,没有没用的技术,没有正确的技术,没有错误的技术——技术就是技术,决定技术优劣的,并非技术本身,而是使用技术的人。

仍然要表明的一点是,我们并非不清楚,而是情势所迫……

这中间的滋味,那些也用了Unreal3做MMO的开发者应该能体会得更清楚……

 

无论如何,在这个讲座的过程中,我重新整理了一下DS的一些思路

 

这里总结一下小生对于DS的理解,不一定对,望指教:

 

1DS适用和不适用的场合。

DS适用于大量动态光源,高面,高场景复杂度的条件下。大量动态光源可通过硬件Occlusion来优化。高面的背面事实上不会被着色。场景复杂度高,只要遮挡没问题,最后渲染的东西还都是那些GBuffer里的。DS的性能曲线与FS的性能曲线相比,DS的起始高度高,但变化平稳,FS的起始高度低,但变化率高。

Deferred Shading翻译后记【二】_第1张图片

 

DS决不适合于对半透明有较高要求的场景。如果你要做的是一款处处薄纱、水晶、玻璃,草丛,还要这些物体与那些不透明,走DS的物体有相当程度光泽感的场景的话,并不合适。因为半透明需要使用支持稍差的FS系统来处理,而在FS系统中,由于信息的缺失或者性能的考虑,不可能像DS那样有那么美妙的逐像素光照系统。杀戮地带2最多算了4个光源,这与一个大的Mesh上可能出现的十数个光源相比,简直是太不够了。

NO SILVER BULLETS。没有任何技术会标榜自己能解决任何问题——问题只有出现了才能被解决。而标榜解决了一切问题的技术,结果往往是什么都没有解决,技术是最容不得虚假的。

 

2,材质和光源分开的优势,就不用多说了,首先,基于一套材质,光源可以想出各种各样的办法玩花样。活必须立于死的之上,死的意义,就是恒定,恒定的东西上,才能有足够的自由和灵活。

但分离也带来的一些问题:所有的一切都受限于MRT数据,这样,就有了MRT精度问题,因此DS很难模拟高精度的场景。此外,为了扩展DS的功能,我们一般都要做查询表,这就牵扯到了MRT查询表的性能问题。究竟合不合适,多大程度上合适,这就只能由每个项目自己决断了。

 

3DS的根源在于简化,而非复杂化。

事实上,DS并不适合去堆那些比较复杂的效果。所有的一切都被钳定到了GBuffer中,GBuffer的程度决定了DS的最后结果。因此DS,是一种简化的思路,而非一种复杂化的思路。可以说,它不是传统意义上的新技术,总会给你带来麻烦,相反,它是这样一种方便你简化思路的技术。然而,丧失了一定程度丰富性的DS,事实上解决了80-20中的80部分。

 

4,基于DS的引擎并非千篇一律,仍然有很大的空间。

例如,杀戮地带2的优化与Tabula Rasa的优化就瞄准了不同的方向。

Tabula Rasa认为,使用Stencil进行优化,对状态切换的压力并不能从根本上得到解决。而杀戮地带2则使用了这个技术。到底哪个费,哪个省,只有在最后的场景中才是必要的。

有些实作,用的是缓存Position Buffer,有些实作,则通过Depth反算,其实也是这样,技术没有正确和错误,只有最合适的。

 

 

 

你可能感兴趣的:(Deferred Shading翻译后记【二】)