结论
HD2 中的泛光效果不会对发光体的类型做特别区分,不使用卷积核构造泛光形状。直接通过对下采样 RT 的长宽限制,控制泛光形状,所有泛光在同一阶段完成,分为均匀泛光与水平方向的泛光。
水平泛光的贡献强于均匀泛光。
水平方向泛光强度取决于:
1.发光区域水平方向宽度
2.发光区域亮度
泛光区域提取
首先采样当前画面的颜色。然后判断是否开启了自动曝光。如果开启,则从一个1x1大小的纹理 __tex_current_exposure 中读取当前的曝光值并相乘;否则使用固定的曝光值。
将亮度减去 Bloom 的阈值。如果亮度低于阈值,则直接变为0全黑,被剔除;如果高于阈值,则保留超出的部分。然后再把新的亮度乘回刚才的颜色上。
最后对保留下来的的高光做了一次除以(亮度+偏移量)的操作,再开始进行下采样。
$$\frac{Color}{Luma+Offset}$$
(泛光区域的提取)
下采样与合成
对于提取出的泛光区域纹理,将对其进行8次下采样处理,产生8张不同尺寸的 RT:
5张用于产生方向均匀的泛光(RT的长宽比长宽比保持原始 16:9),余下3张用于横向泛光(RT 固定高度,横向极端压缩),在原始分辨率为1080P时,以下是8级下采样 RT 的纹理尺寸的情况。
均匀泛光 RT 尺寸:
input_texture0_size 960.00, 540.00
input_texture1_size 480.00, 270.00
input_texture2_size 120.00, 67.00
input_texture3_size 30.00, 16.00
input_texture4_size 7.00, 4.00
水平泛光 RT 尺寸:
input_texture5_size 120.00, 270.00
input_texture6_size 30.00, 270.00
input_texture7_size 7.00, 270.00

(8张纹理拉伸回原分辨率后的效果)
横向泛光强度取决于发光区域的宽度:在下采样纹理在水平方向的极端压缩(最后一级mipmap的水平方向甚至只有七个像素)之后,激光子弹由于水平发光区域狭窄,在水平方向的贡献几近于0。
而具有水平宽度的发光区域将会获得极大优势,从而产生条带状泛光。
最后将 Bloom 结果与镜头纹理叠加,作为最终结果。

(__tex_global_lens_dirt_map)
眼部泛光
虽然敌人眼部发光区域宽度较小,但其亮度被赋予120+的高亮值,相比之下,上面展示的探照灯仅为20+左右。亮度值存在6倍差距,致使敌人的眼部发光区域泛光依旧明显。

(明显的眼部泛光)