Physically Based and Scalable Atmospheres in Unreal Engine - YouTube
talk:s2020_pbs_hillaire_slides.pdf (selfshadow.com)
atmosphere paper:https://sebh.github.io/publications/egsr2020.pdf
https://mp.weixin.qq.com/s/_YJmkNUV1t3K1vg1JC2iqA《暗区突围》
总结
需求
- 性能scalable,只需要修改LUT分辨率和Sample Count
- 支持TOD,weather,支持从太空看
本文优化
- Sky-View 2D LUT
- low resolution, runtime raymarching (low frequency)
- Lat-Long mapping (switch to raymarching in the outer space)
- Non-linear coding, improve precision at the Horizon
- Multiple LUT,提出一种把递归简化成等比函数直接求解
- 主要是把多级散射简化成均一光照(否则只能递归采上一阶光照)
- 优点:效率很高,手机可用
- 缺点:做了很多近似 - 2阶及以上各向同性,2阶以上光强近似相等,导致相位系数高,密度高时结果不正确
- light shaft:screen space raymarching with sampling shadowmap (need 20+ steps without temporal filter)
Sky rendering
- Transmittance LUT
- Sky LUT
- Lat-Long mapping,Non-linear encoding,improve precision at the Horizon
- 8 step count on mobile
- sun direction and camera position related
- Aerial Perspective LUT
- froxel - 32x32x32
- transparent applied per-vertex - the fog is low frequent.
- Multiple Scattering LUT
- 做了很多近似 - 导致Mie各向异性强,或密度高时,多次散射结果不准确
- 2阶以上采样点周围光照强度相同(简化递归计算的关键)
- 2阶及以上相位函数近似成各向同性
- 2阶以上不考虑遮挡
- 求2阶散射系数 - 其实计算的是大气在高度上的2阶散射分布
- (球面积分,64个ray cone,还可以只积分上下两个方向做简化,效果有时也还行)
- 考虑遮挡,考虑散射率,透射率等,各向同性
- 求每一阶散射的传递函数- 把递归简化成等比数列
- (也是球面积分,同上)
- 近似认为多级散射分布均匀(能简化的关键,如果分布不均匀,则只能递归采前一阶的结果)
- 不考虑遮挡,考虑散射率,透射率等,各向同性
- 然后乘一起就是多次散射系数了,存到2D LUT中(h, L)
- 运行时乘以光照强度即可得到2阶-无穷的散射光结果,再加上single scatter即可得到多次散射光照,再求最终的路径积分即可
- Performance - Fortnite《堡垒之夜》 iphone6s上大概1ms(居然是全实时)
- Transmittance - 256 x 64 - 0.53ms (Transmittance精度比较影响结果)
- Sky-View - 96 x 50 - 0.27ms
- AP - 32 x 32 x 16 - 0.11ms
- Multi Scatter - 32 x 32 - 0.12ms