找回密码
 立即注册
查看: 497|回复: 6

UE4体积云制作

[复制链接]
发表于 2022-3-17 12:02 | 显示全部楼层 |阅读模式
云渲染的问题从去年十月就开始缠绕着我,期间看了很多资料与文章,知道了渲染云需要使用raymarch为基础框架,需要自己写云的着色模型。尝试挣扎了很多次,还是只到raymaech渲染了一些基础场景就再进不能。虽然收获了很多知识但还是没有达到自己的目标(请原谅我的愚蠢)。
在今年年初在家时看到了Asher,Ryan的文章使用unreal内置体积雾系统来做基础框架渲染体积顿时就豁然开朗找到了美术上快速实现体积云的方法。
在前面的一系列文章中我尝试制作了所有体积云系统所需的技术,实现体积渲染我们需要的准备有:基础体积材质着色[1]的trick在引擎中塑造云形态的Tile NoiseTexture[2]生成
本文章节:

  • 基础云
  • 云海
一、基础云




Figure 1: Cloud Shader

独立云体模型的生成分为两部分,一是生成基础的sdf模型,过后是体积的着色绘制。
扭曲物体也许有一个固定的套路,将它对应的进行计算的采样坐标扭曲。
二维图片采样于uv coord,uv coord+noise达到扭曲图像的目的。



Figure 2: 2D distortion

三维sdf采样于position。对P+vector noise即可扭曲sdf,出现类似云的形态,将sdf连接到体积材质的密度[1]。



Figure 3: 3D distortion,这里的CurlNoise贴图生成位于下文中的图片

在SDF部分我想要演示更加直观且简单的操作,因此我未使用sphereMask,如果你想要一个更加标准化的结果可以考虑使用它。



Figure 4: 左图Debug Material  右图Volume Material

制作Volume shader时我更习惯先制作一个debug材质测试出效果再连接,因此这里并未直接写入体积材质而是先测试他的参数。



Figure 5: Tile Curl Noise

这里使用的是unreal自带的vectornoise 生成3dtexture[3],但是对于ue中的noise tile总是无法合适的调整对应周期值产生无缝平铺。
绘制完成基础SDF后只需要添加自己的着色到体积材质即可。



Figure 6: Full Material Connect

最终的densityColor处用了CurveAtlas来remap颜色数据[4]



Figure 7: Shader Parameter

二、云海

需要生成大面积的云海时,前面的算法就不太靠谱了,很多云应该有的功能并没有加入进去只是演示了一个扰乱SDF的计算。
这里我先提供一个简易算法,非常的简单,图片流可以解释完全。
但是更多具体的物理观察于总结我推荐nubis的成果[5]。
云系统的组成分为:高度轴向映射云范围,添加Noise,coverage重映射密度范围。



Figure 8:Component

使用体积容器的高度轴向重映射定义自己的云层是Stratus,Cumulus[6](云在不同高度处生成的类型分类)。



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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-3-17 12:05 | 显示全部楼层
很清晰
发表于 2022-3-17 12:06 | 显示全部楼层
很简洁,也比较容易懂
发表于 2022-3-17 12:09 | 显示全部楼层
云已经是3d里面最简单的渲染了
发表于 2022-3-17 12:17 | 显示全部楼层
Min noise和Remap节点怎么拖出来
发表于 2022-3-17 12:26 | 显示全部楼层
体积云可以和角色交互吗
发表于 2022-3-17 12:28 | 显示全部楼层
自定义节点
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-11 05:16 , Processed in 0.144519 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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