Pre-Compositing Textures for Terrain Rendering

本文介绍了地形渲染中的预复合纹理技术,用于降低shader复杂度和GPU消耗。通过将地形区块渲染到缓冲区,近处的地形渲染时只需采样较少纹理,显著减少了纹理采样次数,提升了近处sector的性能。然而,该技术需要权衡额外的显存、内存消耗及CPU开销,且不支持抗拉伸,适用于特定场景。
摘要由CSDN通过智能技术生成

地形渲染作为室外游戏必备的功能,已经有很多成熟的LOD和Shading的算法,LOD的种类非常多,但基本都是那几种LOD的变种,技术也很成熟,一般来说好的游戏的LOD技术一定不会差。换句话说LOD不会是游戏渲染的瓶颈,地形很多时候是占屏幕像素最多的集合体,大部分地形都是通过分块也就是sector来渲染的,离camera最近的几个sector往往是像素贡献大户,很多时候离camera最近的4个sector会占到整个地形的一般渲染时间,原因就是因为像素多,而且Materlal LOD采用的是最复杂的。游戏里地形的Materal用的最多的就是多层贴图通过一张blend map进行加权混合级Texture Composite.


    这个Compsite混合的层数越多,shader越复杂计算量越大,在游戏里大多采用5层贴图进行混合,加上法线贴图就需要sample 11次(5次 diffuse,5次 normal,一次blend map),如果有specular的话还需要再采5次specular,可见这是一个很费的操作,雪上加霜的是离得近的sector的像素非常多,这导致GPU时间消耗的非常多。

    Intel的这个方法就是为了降低地形的shader复杂度,(像素数目是没办法减少的),通过将Sector渲染到一张buffer上,然后画地形近处sector的时候只需要采一个diffuse和normal这样11个sample就变成了2个(因为blend map也不需要采了),这样可以极大的降低texture sample同时可以减少GPR的数目从而增加GPU并行线程。这可以很大程度的提高近处sector的性能。红色区域采用的就是Pre-Compositing Textures。从Intel的场景来看可以提升整体GPU 20%的性能,对于这个sector性能提升了48%(估计是极限了,即便是画一个quad采一个贴图的性能也不过如此)


   前面只是简单的对于一个secto来说怎么实现这个优化,对于真实场景还需要考虑camera动起来的情况,camera一旦动起来,移动的距离超过一定阈值就需要对当前camera附近的sector更新,这里更新的是camera附近的9个sector。


    这些被Pre-Composting的texture的格式是rgba8,会占很多显存,Intel采用实时的压缩方式将这些贴图压缩成DXT,大大的节省了显存和内存的消耗,但是也需要付出一些CPU消耗,如果有足够的CPU时间用这个方法还是挺好的。

   当然这个方法也不是万能的,在性能方面的确可以有很大帮助,但是额外的显存内存以及CPU时间会让这个技术受到很多限制,因为游戏里各种资源都是很宝贵的,所以要权衡,根据实际情况来决定这个技术是不是真的适合你的游戏;还有另一个缺陷是现在很多地形都考虑了抗拉伸(uv distortion),采用这个方法就无法支持抗拉伸了,因为这个方法只采了一次贴图,而且uv是不均匀的无法做到抗拉伸。但是无论如何,这个方法的思路非常不错,也许有一天这个思路用在别的方法上可以达到不俗的效果。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值