Skip to content

Archive

Tag: tile
KlayGE 4.4中的Tile-based Deferred Rendering(TBDR)是个基于pixel shader的算法,每个batch最多32个光源。这个方法适合于不支持compute shader的设备。因为在compute shader里,可以利用group memory把更多光源打包到同一个batch里,进一步提高效率并减少带宽。 改进的算法 CS可以通过group memory在thread之间共享数据,只要利用得好这部分,就能极大提升性能。在TBDR中,group memory主要用在两部分。第一部分是tiling阶段,用的是常见的reduce方法。先让所有thread读满32x32个depth,reduce得到1x1,再写入目标纹理。 第二部分是shading阶段。每个group会对所有光源做一次求交测试,把有效的光源写入group memory。接着在同一个sh ...
KlayGE从4.0开始引入deferred rendering层(DR),并且这几个版本都在持续地改进,以提高性能和降低使用难度。在即将发布的4.4里,deferred rendering更是往前跨了一大步,实现了一个初步的Tile-based Deferred Rendering(TBDR)。和常见的TBDR不同之处在于,这里的方法只需要SM3。(其实SM2也没问题,只是如果光源较多,会遇到指令长度限制) Tile-based 在传统的deferred rendering中,每个光源需要和每个像素做一次相交测试,测试通过的才计算光照。这个相交测试一般通过light volume的方式进行优化。但最终仍然需要对每个light画1次。也就是说,每个像素需要对每个光源读取一次G-Buffer,计算一个光照,并做一次blend写入。这个带来的 ...