BilateralFilter&MixedResolutionRendering

本文介绍了混合分辨率渲染技术(Mixed Resolution Rendering)的基本原理及其在游戏开发中的应用案例,包括粒子系统、阴影贴图和间接光照等场景的具体实现方法。特别讨论了如何利用双边滤波(bilateral filter)解决低精度到高精度渲染时出现的视觉瑕疵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MixedResolutonRendering, gdc09的一个paper:

http://developer.amd.com/gpu_assets/ShopfMixedResolutionRendering.pdf

里面需要的一个基础知识:bilateral filter(upsampling)

http://research.microsoft.com/pubs/78272/FinalPaper_0185.pdf

http://blog.youkuaiyun.com/bugrunner/article/details/7170471


bilateral filter

http://blog.youkuaiyun.com/bugrunner/article/details/7170471这里解释的比较清楚,理论,细节和图片。

bilateral filter在应用的时候常常是在低精度渲染贴回到高精度buffer时候做的。

像ssao,shadow,particle,indirect lighting都属于低频图像数据(效果)所以在低精度不buffer上渲染也不太看出来,然后贴回就好,这也是有10余载历史的技术(思路)了。

问题是如果直接apply回高精度buffer时候,还是会有少量的地方由于精度不同导致的比较明显的视觉bug,比如常见的particle低精buffer应用到高精buffer上的边缘有白边的问题,这个时候就借助一些其他的信息(depth,normal等)来在这里辅助filter,有些地方很连续,那么其实就是一个线性插值,有些地方从depth中判断不连续,那么在不同的像素上有不同的策略这种。

具体的filter算法也是根据需要自己来调整。


MixedResolutonRendering

particle:最典型的了,对于低精度的particle render,这些地方容易出问题:


处理办法是使用depth+normal的bilateral filter:




PullPushUpSampling:

一个典型使用的地方是标出shadow mask,进而根据是否在半影区来做昂贵计算的情况。

使用一个低精度的,记录shadow depth min/max的buffer来估计shadow半影区,文中写到对shadow depth的min/max有多层,一个金字塔。。。

这种情况下overhead就比较高了。


IndirectLighting:

使用vpl(virtual point light)来实现,由于会涉及到大量的计算,所以也使用低resolution的方式来做。

基本算法:



识别不连续的方法是:

  • 建立一个类似mipmap的depth和normal buffer,但是每一层包含min/max,而不是平均值
  • 如果max-min大于一个阀值,那么就认为是不连续
使用mix resolution render之后,indirect lighting是效率原来的将近3倍,cool。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值