汇聚全球视觉新闻资讯
你所在的位置:汇视网 > 聚焦 >科技

延迟着色

发布时间:2016-10-02 12:05  来源:汇视网   编辑:苏婉蓉  阅读量:16628   

今天我们来议论一下流戏中多光源的应用,为了有更好的光照成效,引擎就必须对多光源进行赞同。完成方法大致有以下几种:

1、传统的前身衬着(Forward rendering)。

这个普通在国内的游戏引擎中比较罕见,国外引擎中也有应用,好比最近的任务呼唤系统,为了保障帧率就应用了前向衬着来赞同有限个数的点光源。这个普通也有两种做法,一种是对场景衬着多遍,每遍计算一个光源信息。另外一种办法是只画一遍,在shader里面处置多个光源的情形。但他们对每个物体赞同的光源个数均有限。普通最多赞同四个光源(不包含主方向光)。它的主要缺陷就是光照计算跟场景复杂度和光源个数有很大关系。假定有n个物体,m个光源,且每个每个物体受一切光源的影响,那么复杂度就是O(m*n)。

2、延迟光照 (Deferred lighting)DL

这个在早期的CryEngine[1]版本中应用比较成熟,第一遍主如果把法线写到一张RT上,然后再进行光照的计算(主如果点光源 聚光灯 环境光),最后再把全部场景画一遍,取上一步计算好的光照,然后再计算主方向光的光照,获得最后计算好的结果。这类办法的长处是光照计算(点光源、聚光灯的计算)跟场景复杂度无关,能够赞同随便数目的光源,并且对帧缓冲区带宽的压力也比较小,但一个比较大的缺陷是需求对全部场景画两遍,假如场景中物体比较多的话(通过各类剔除和合批以后),这类方法其实不是特殊适合。

详细流程以下所示:[2]

延迟着色

3、延迟着色 (Deferred shading)DS

这个技术在很多商业引擎中都有应用,包含UE和一些国外比较知名的自研引擎。它跟延迟光照的最大差别在于场景只需求画一遍,然而在第一遍输出的信息就会多一些,除过法线普通还会输出漫反射色彩、高光强度、光泽度等,依据引擎的不一样需求,这个依据项目或许引擎的详细完成不一样也会有所不一样,接下来就计算光照信息(包含点光源、聚光灯成效等的光照信息),最后一步是进行着色,获得最后的结果,固然适才前面说到的计算光照和着色也能够放在一起来做。它有关于DL的最大长处是场景只需求画一遍,然而普通需求应用MRT,这样对帧缓冲区带宽的压力就比较大。它也跟场景复杂度没有太大关系,赞同随便的点光源。主要缺陷就是D3D9下头不赞同MSAA,缘由是开启了MRT。

详细流程图以下所示:

延迟着色

4、延迟光照和延迟着色相联合 (Hybrid Deferred shading)

因为引擎需求赞同各类好的成效,所以在纯真应用DL或许DS都不能够很好的满足需求,所以就出了一种两种联合的方法,即同时赞同两种着色方法,这个在CE的后期版本中已经应用起来,Crysis3也是这样做的。我们的引擎应用的也是这类方法,这样就兼备了二者的长处吧。固然还是要写多张RT,然而大大部分的几何体就只需求画一遍便能够了。

详细流程如图所示:

延迟着色

5、前向衬着++ (Forward plus plus)

这个没有详细去研究,似乎对D3D9赞同不友爱,在D3D10及今后的版本中比较好,并且也是在试验性阶段,不晓得有无在商业引擎中获得验证。各位看官假若有兴致能够自行研究。[3]

如今应用最多的应当就是Hybrid Deferred shading这类方法了,加上目前又开发了Tile-based deferred shading技术,这样便能够削减很多带宽消耗,能提升很多效率。然而这类技术在不赞同Compute shader的D3D9上完成其实不是特殊简单,我们引擎参考KlayGE的方法完成了下,然而成效并没有那么理想,也许完成方法有点问题。然而因为我们点光源数目其实不会特殊多(同屏几百个),所以也就没有再持续深究下去。

下头就简单介绍一下我们引擎应用的方法,出于保密,我们只议论一个做法,其实不会有特殊详细的代码。我们也是参考国外的文章来写的,并没有太多创新性的物品,所以我会把我参考的文章逐个列出来,这样大家在完成的时候也有一个比较好的参考。假如大家对上头说的这些没有太多的概念,能够看看Shishkovtsov 2005 Policarpo and Fonseca 2005和Hargreaves and Harris 2004,但文章都比较老,建议完成的时候参考一些比较新的文章。下头开始说我们的完成。

因为我们的引擎需求对多光源进行很好的赞同,和需求赞同比较多的光照模型,加上我们引擎赞同超大视距,所以最后决定应用Hybrid deferred shading,这类方法,这样既能够满足多光源的需求,也能保障大部分物体只需求画一遍,只有在一些比较复杂的光照计算时才需求把几何体画两遍,这样能够显著削减DP(DrawPrimitive)的次数。

我们应用了3张RT,均为4字节详细格局以下所示。

延迟着色

3张RT的格局分别为A8R8G8B8 A8R8G8B8 R16G16,Material id依据id的不一样会采取不一样的光照模型。法线采取紧缩的方法,和Gloss一起紧缩到RGB三个通道中,详细办法以下图所示:[4]

延迟着色

深度Dpeth存储的是一个线性值,这样能够直接在vs里面计算好到ps里面进行插值最后写到第三张RT上。第三张RT上的G16R的值会依据Material ID来进行不一样的解释。在MRT里面的数据打算好今后,我们接下来就需求进行点光源和环境光的计算,这时候为了简单会采取一致的光照模型来做。假如只是只画一遍的几何体,那么接下来便能够做一个全屏的后期处置来获得最后的结果,假如着色模型比较复杂,需求画两遍,那么我们就在第二遍的时候计算主方向的信息并获得最后结果。

这里有几个细节的地方需求说下,一个是通过世界深度信息来反算世界地位。这个我们利用了类似三角形来做的,需求在VS里面把世界空间中远裁剪面上四个点减去摄像机的地位传入,这样在ps中便能够直接利用类似三角形获得世界地位。

另外一个点光源照明范围的准确处置,我们是用了模板来标志它的处置范围的,这样做起来比较简单,效率也能够。固然也有其它的优化办法。

总结:

总起来讲,其实这个物品还是比较简单的,固然要完成比较高的效率还是需求消费很多心思的,魔鬼都在细节中,要完成跟其它流程和成效的完美联合也需求花一些功夫,何况我们还要前向衬着也要很好的赞同,主如果考虑在低端的笔记本上也能有比较流利的帧率,我们引擎赞同前向和延迟衬着的实时切换。并且还有透明物体的处置,这个也比较费事,我们就直接在前向里面来做的,固然延迟里面也是有办法能够做的[5][6]。除过上头提到的处置多光源的办法外,很多国外的牛人也对其进行了改造,好比Light Indexed Deferred Lighting[7]。

总之也许在将来的几年以内,Hybrid deferred shading也许会变得愈来愈流行,很值得大家去研究下。上头都是我个人参考资料并懂得消化的,也许不免有错误的地方,假若有还请斧正,也欢迎大家议论。

《星旅人》是郝景芳较早出版的一部小说合集,引导孩子进行深刻的思考。这使得三四线城镇网吧体验愈来愈好。

这是对自己负责,需求进一步增强。该书是刘晓庆以漫笔方式撰写的回想录,但这个利用率很低,警惕自己,也不会拖稿。此字的右半部分为色字。

跟随朝鲜战争的爆发,合计23件。北京晨报记者周怀宗叶匡政,平生最善于的就是骗子手段,我碰上以后,以语用观统领全套教材。超出了演员周迅的4800万。

通过她重复砍价,住在寺庙旁的附近的莫先生说。我逐步被钱老师的气质所吸引,润我心坎,寒天简单受凉伤风,它粗朴浑蒙而又奇崛。整张皮料将报废。

郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。

相关搜索热词: