我的专栏目录:
小IVan:专题概述及目录在第一卷,先搭建了层云的模拟方法,光的衰减,云的影子,光线散射这些效果还没有往上做,先把整个天空系统搭建完成之后,再统一加这些比较好。
第一卷层云模拟链接:
小IVan:虚幻4渲染编程(环境模拟篇)【第一卷:体积云天空模拟(1)---层云】
现在来模拟下面这张参考图中的2,3部分的中低云的效果。
这种云使用程序化噪波的方式生成已经不太适用了,因为它的变化非常丰富,体积感很强而且这部分云在整个空中起到了遮挡,层次感的作用,所以某种程度上还需要我们可以控制它,最好艺术家设计师能使用软件或者什么调整它,所以3D体纹理成为了很好的选择,我们需要使用到houdini生产我们的素材。
先搭建个能work的环境。
我们拿一个甜甜圈做个快速测试。下面这个快速测试的原理可以去看我之前的博客,或者去看epic技术美术Ryan的ShaderBits博客(链接见参考文档部分)
小IVan:Begin ray marching in unreal engine 4【第五卷:3D体纹理云】
下面是在Houdini中的效果。
Houdini的设置如下
我们制作好的体纹理效果如下:
制作好体纹理后,我们需要制作一个inverse normal的正方体盒子
然后我们做一个RayMarching的材质
代码如下:
float numFrames = XYFrames * XYFrames;
float accumdist = 0;
float stepsize = 1 / maxsteps;
for(int i = 0; i < maxsteps; i++)
{
float cursample = 1 - PseudoVolumeTexture(Tex, TexSampler, saturate(Curpos), XYFrames, numFrames).r;
accumdist += cursample * stepsize;
Curpos += CameraVec * stepsize;
}
return accumdist;
效果如下:
https://www.zhihu.com/video/1046097033055866880后面建云的流程也是这样,只不过形状更复杂罢了。现在我们有了一条可以work的管线之后,接下来当然就是去做天空中的“低云”咯。
使用houdini制作一块云(我这里搭建得比较简单)
我选择模型生成的方式制作,这样方便控制。
在引擎里的效果如下(还未计算光照,只对浓度进行了积分)
https://www.zhihu.com/video/1046400779128258560目前有几个问题需要解决。第一就是云朵精度损失严重,很多细节都丢失了,这些细节如果想保留下来,就需要增大切片图的尺寸,而现在的切片图的尺寸已经很大了。
第二个问题就是我们使用ray marching来制作云的初衷是为了弥补模型云的缺陷,但是现在看来,Volume Texture也是事先烘焙的,无法使其变化。第三个问题和第一个问题有一定联系性,我们现在的诉求是做一片云海,然而现在一朵云都已经这样了,如果在尽量想为以后留优化空间的情况下,已经没有办法通过增加资源的精度来解决上述问题了。在下一节再完成对上述问题的解决。
Enjoy it!
Next:
小IVan:虚幻4渲染编程(环境模拟篇)【第三卷:体积云天空模拟(3)---高层云】参考文章