UE4体积云制作
云渲染的问题从去年十月就开始缠绕着我,期间看了很多资料与文章,知道了渲染云需要使用raymarch为基础框架,需要自己写云的着色模型。尝试挣扎了很多次,还是只到raymaech渲染了一些基础场景就再进不能。虽然收获了很多知识但还是没有达到自己的目标(请原谅我的愚蠢)。在今年年初在家时看到了Asher,Ryan的文章使用unreal内置体积雾系统来做基础框架渲染体积顿时就豁然开朗找到了美术上快速实现体积云的方法。
在前面的一系列文章中我尝试制作了所有体积云系统所需的技术,实现体积渲染我们需要的准备有:基础体积材质着色的trick,在引擎中塑造云形态的Tile NoiseTexture生成。
本文章节:
[*]基础云
[*]云海
一、基础云
Figure 1: Cloud Shader
独立云体模型的生成分为两部分,一是生成基础的sdf模型,过后是体积的着色绘制。
扭曲物体也许有一个固定的套路,将它对应的进行计算的采样坐标扭曲。
二维图片采样于uv coord,uv coord+noise达到扭曲图像的目的。
Figure 2: 2D distortion
三维sdf采样于position。对P+vector noise即可扭曲sdf,出现类似云的形态,将sdf连接到体积材质的密度。
Figure 3: 3D distortion,这里的CurlNoise贴图生成位于下文中的图片
在SDF部分我想要演示更加直观且简单的操作,因此我未使用sphereMask,如果你想要一个更加标准化的结果可以考虑使用它。
Figure 4: 左图Debug Material右图Volume Material
制作Volume shader时我更习惯先制作一个debug材质测试出效果再连接,因此这里并未直接写入体积材质而是先测试他的参数。
Figure 5: Tile Curl Noise
这里使用的是unreal自带的vectornoise 生成3dtexture,但是对于ue中的noise tile总是无法合适的调整对应周期值产生无缝平铺。绘制完成基础SDF后只需要添加自己的着色到体积材质即可。
Figure 6: Full Material Connect
最终的densityColor处用了CurveAtlas来remap颜色数据
Figure 7: Shader Parameter
二、云海
需要生成大面积的云海时,前面的算法就不太靠谱了,很多云应该有的功能并没有加入进去只是演示了一个扰乱SDF的计算。
这里我先提供一个简易算法,非常的简单,图片流可以解释完全。
但是更多具体的物理观察于总结我推荐nubis的成果。
云系统的组成分为:高度轴向映射云范围,添加Noise,coverage重映射密度范围。
Figure 8:Component
使用体积容器的高度轴向重映射定义自己的云层是Stratus,Cumulus(云在不同高度处生成的类型分类)。
Figure 9:Set Range
Figure 10:difference frequency noise combination
return new_min + (((original_value - original_min) / (original_max - original_min)) * (new_max - new_min));
Figure 11:Add Noise in range and Coverage(useing curve remap)
这里的smoothstep,curve atlas本身都有remap的效果,但是控制上多一些改变,如果只需要代码形式的可以全部替换为前方代码。
Figure 12:Simple Shader
Figure 13:Final
以上是关于塑造云形态的快速内容
The End.
对于使用体积材质制作云体问题是非常多的,首先面对的就是volume material精度问题,如果放置在天上精度无法控制太远了会消失,其次是着色这一块我做得非常简单。
后面如果能学会,我应该会使用raymarch来制作一个自己的云系统并且加上正确的着色。
参考
[*]^ab自定义体积着色https://zhuanlan.zhihu.com/p/108535872
[*]^Tile Noise方法https://zhuanlan.zhihu.com/p/115253953
[*]^3D Texturehttps://zhuanlan.zhihu.com/p/108855365
[*]^Curve Remap Colorhttps://zhuanlan.zhihu.com/p/107645706
[*]^Nubis关于体积渲染的技术文档https://www.guerrilla-games.com/read/nubis-authoring-real-time-volumetric-cloudscapes-with-the-decima-engine
[*]^云的分类https://en.wikipedia.org/wiki/Cloud
很清晰 很简洁,也比较容易懂 云已经是3d里面最简单的渲染了 Min noise和Remap节点怎么拖出来 体积云可以和角色交互吗 自定义节点
页:
[1]