游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2836|回复: 0

地平线:黎明时分中的云渲染技术

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2019-12-30 11:39:00 | 显示全部楼层 |阅读模式
image002.jpg

image004.jpg

最简单的办法是采用raymarching,噪声可以简单的采用fbm,但是程序感严重

image006.jpg

image008.jpg

两种噪声叠加,Perlin-Worley noise,连续感减弱不少

image010.jpg

一张基础的3d纹理,控制大体形状,一个通道存Perlin - Worley noise,其他三个存不同频率的Worley noise

image012.jpg

一张细节3d纹理,不同频率的Worley noise

image014.jpg

一张2d纹理,curl noise,一般用于流体模拟,可以对云进行distort,增加湍流感

image016.jpg

在高度上使用纹理控制密度,可以表现层云,积云,积雨云

此外,在高度上整体设置一个0-1的渐变,因为低空没云

image018.jpg

image020.jpg

在云的边界处减去第二个3d纹理,能够得到侵蚀效果

小贴士,如果你把基础云层的Worley noise倒置,会得到一些不错的形状。

使用2d纹理去distort第二个3d纹理,可以模拟大气湍流造成的旋涡扭曲

image022.jpg

用一张图去整体上控制云层,能够模拟不同天气下的表现,r通道表示密度,g通道表示降雨量,b为云形。天气系统通过在游戏过程中进行的模拟来调节这些通道。积雨云直接在头顶(白色),远处是规则的积云。我们可以让艺术家去控制这些模拟。

image023.jpg

默认天气是积云和层云的组合。大部分是层云。

降水量达到0.7将会产生积云。

image026.jpg

使用天气系统来确保地平线上的云层总是有趣的,并在山上分开。

从15000米的距离开始…在玩家周围35000米半径范围内绘制云景

image028.jpg

渲染采用Beer’s law

image030.jpg

image031.jpg

前向散射几率更大,使用henyey greenstein function来矫正

image033.jpg

image035.jpg

image037.jpg

此外,云层厚的地方in-scattered light更多,导致边缘会暗一些

image039.jpg

加入powder函数,两个公式叠加去模拟这个效果

image041.jpg

image043.jpg

image045.jpg

注意这个效果和方向光方向及视角方向有关

image047.jpg

在有雨的地方增加光吸收率,来使其变暗

image049.jpg

最终公式

image051.jpg

image053.jpg

地球是圆的,所以远处地平线会和云接在一起

image055.jpg

1500米到4000米之间是体积云

海拔4000米以上是alto和卷云。上层云不是很厚,可以通过动画纹理模拟
image057.jpg

由于存在基础噪声和细节噪声,只有在基础噪声返回非0时才需要检测细节噪声

image058.jpg

为了不"错过",切换到高细节样本之前要向后退一步

image059.jpg

当到达alpha为1时,也就是到最高点了,停止Raymarching

image060.jpg

如果连续返回非0,切换到基础噪声,直到再次返回0

image061.jpg

采样点数量和视角相关

注意密度会随高度衰减,也就是上面提到的0-1渐变

但是这样还不够
image063.jpg

在朝向光的圆锥上采样6个点模拟阴影,最后一点距离要远一点

为了提高采样的性能,当alpha达到0.3时,切换到简单版本的着色器版本进行采样。这使着色器速度提高了2倍

6点采样在低空的贡献大于比尔定律,而随着高度上升,又会回到标准的体渲染方式

image065.jpg

最后一步,采样最高层的二维纹理

image067.jpg

以上是高空云层的几种形态

image069.jpg

现实中,不同频率的光线在云中混合,会产生非常美丽的色彩效果。所以我们要根据以下模型为云上色:

  • 环境光贡献随高度增加而增加
  • 直接照明将以阳光颜色为主
  • 大气散射会随高度增加去替代云层颜色

image071.jpg

优化:每帧渲染1/4

前一帧要reproject,如果是边缘,无法reproject,则从一个低分辨率buffer上采样

image073.jpg

在half res下渲染,最后upscal

相关阅读:

作者:风和雨林

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-12-22 20:37

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表