暗黑三泛光算法研究
GPA过好几次暗黑三的绘制,曾经对其绘制某些物体两遍的操作感到不解,这两天又看了一眼,知道,其是为了绘制GLOW。
暗黑三中并没有使用浮点精度贴图格式,其泛光计算与UE3的浮点溢出算法不一样。一般的使用8位图的游戏,是全部全屏处理查找亮色来计算泛光区域,我搞过类似的效果给美术查看,不尽人意。瀑布就是发白啊,就是不想泛光啊之类的。
暗黑三是比较取巧的方法,其首先将需要泛光的物体绘制了两遍,其渲染系统为,第一遍绘制,与大部分的物体的绘制方式一样,只是颜色只写到RenderTarget的RGB通道内(通过设置RenderState的ColorWriteEnable)。对于泛光的物体,有第二遍绘制,此时会往RenderTarget的Alpha通道中绘制遮罩信息。
一、泛光绘制第一步,执行down sample和high-pass filter。通过采样刚才生成的RenderTarget,并通过检测其Alpha通道,将颜色图中颜色计算亮度,将亮度较大的颜色输出到新的四分之一的RT上。
二、对刚才的图像进行高斯Blur
三、将Blur图像叠加到原图中,公式一般自由发挥。暗黑计算中比较诡异(配合第一步计算中的潜规则),,其Bloom颜色乘以了4.5。。
作者:康斯特
个人WIKI(常年更新):http://dev.wannaplay.cn/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
期待技术交流,共同进步