虚幻4渲染编程(环境模拟篇)【第三卷:体积云天空模拟(3)---高层云】

本文详细介绍了在虚幻4中使用Ray Marching方法实现体积云天空模拟的全过程,包括3D Value Noise生成函数、分形部分、raymarching逻辑、云朵光影的完善,以及对Henyey Greenstein模型的应用,最终呈现逼真的云海效果。
摘要由CSDN通过智能技术生成

我的专栏目录:

小IVan:专题概述及目录

目前业内流行有两种体积云模拟的方式,模型+特殊shader法,RayMarching法。我前两篇文章已经对它们都做了介绍。当然还有些比较非主流的,比如粒子云法,点云法。这篇将作为体积云天空模拟部分的终篇,如果有一些更好的方法,我会更新这三篇文章。前面两篇介绍了它的原理。这里将记录Ray Marching法的完整具体实现方法。

虚幻4渲染编程(环境模拟篇)【第一卷:体积云天空模拟(1)---层云】

虚幻4渲染编程(环境模拟篇)【第二卷:体积云天空模拟(2)---3D体纹理低云】


下面是使用ray marching的办法构造天空。第一步是构造出一个体积场。我使用3D Value Noise

v2-4855b8551cf73753bbcfd86ee04b51ba.jpg https://www.zhihu.com/video/1048682116862308352

下面是我的Noise生成函数的代码

v2-6b30f542c57853015ec1f1b3e2f42dfe_b.jpg

分形部分的代码

v2-763d550a11601be76df9493c73931781_b.jpg

raymarching部分的代码如下:

v2-e8917730ae31cea26931dcf164401535_b.jpg

这部分逻辑非常简单,从视口方向发射射线,每0.01单位的距离采样一次,并且把采样结果累加起来。因为我们的摄像机是世界空间的,而noise使用的是另一个空间的(这里把它叫作Noise Space吧),所以我们需要对其进行尺寸缩放转换。所以我乘了一个0.001的缩放值。

现在得到了一个体积场,但是这个体积场还离我需要的云的效果还很远。云除了有一定的形状结构外,还要相对于世界的高度等。

用目前这种积分方式是渲染不出云海的

v2-ce61ba73cf356b469a91ba76182077f9_b.jpg

因为迭代次数有限,根本不可能渲染到很远的地方,于是我改进了一下积分的步长算法,让步长不是等距的。

v2-e85ccd508873f802bd62034a943b4f6b_b.jpg
v2-8ae150c539a71af04e381c1060e1f55f_b.jpg
        curpos += rd * exp(0.01 * i) * stepsize;
      

可以看到算法改进前后的差别

(等距)

v2-35f5ed37c9fc902d1cb52d487765e3c7_b.jpg

(非等距)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值