Ue4 VolumeFog 体积雾 笔记

面向与初学者解惑

看了asher大神的讲座后自己做的 。羊驼3d 贴图来源于asher的demo。如有侵权请告知,我删除此文章。

原理:

体积雾使用原理很简单,但是性能消耗大。慎用,或者优化使用

体积雾基于volume textrue,也就是3d textrue。一个volume texture 通过uvw 采样 映射到三维立方体的上的xyz点。

简单点说就是,volume texture 什么样,1:1映射到立方体,立方体就是什么样。

不好理解的可以类比 2d贴图,通过uv往一个四方形上映射的原理。

所以关键点就是如何生成你想要的volume texture。

1、材质有noise节点,可以动态生成3d texture。性能消耗巨大

2、第三方工具,做好想要的形状或者内容,切片保存成一个2d贴图,导入到ue4中,再组装成volume texture.

就好比把豆腐块切成一片一片,顺序排列保存,就变成一个2d的,到ue4中 再把一片一片的组装成一个立体的豆腐块

扫描二维码关注公众号,回复: 11194079 查看本文章

【深入思考,平时我们看到的立方体其实都是表皮显示,真正到里面都是空心的,volume fog立方体内是实心的,

内部每个点都能从volume texture上找到颜色值,这就是为什么性能消耗大的根本原因】

--------------------------------------------------------------------------------------------------------------------------------------------------------------

 volume 材质

volume fog 必须用到 volume材质,就是创建一个普通的材质,如下选择

节点就变成

 

使用方法:

 一旦volume texture制作好了,怎么用就很简单了。

 前提选项:4.24中 一个项目得有ExponentialHeightFog,同时volumetric fog 打开,然后拉个立方体actor,把volume 材质放上去就行了。

1、普通的动态流动的雾

我只贴出材质,大家自行看吧

2、圣光

 原理就是在体积雾的基础上,沿着光线方向,计算出一个与光线垂直的面,有一个贴图与这个面对应,立方体内每个点向量计算出与这个面的投影作为uv,采样得出值,再去决定这个点画不画。看材质

这个贴图是这样的一个noise 

3、有特有形状的雾

注明羊驼材质来源于asher的demo

 这个材质有云的自阴影简单的处理

4、物体形状对雾的影响。

用到了distance field

这块我做了 但是没有起作用,就补贴出来了,研究好了 再来更新。

5、引擎关于雾的参数配置

r.VolumetricFog.GridSizeZ 128 (默认值 128)
这是沿着深度轴z轴的分辨率

r.VolumetricFog.GridPixelSize 4 (default 8)
这是用来定义屏幕XY轴平面和屏幕像素分辨率的比例,4的意思是在 1920×1080 屏幕分辨率下,雾效XY平面的分辨率为 480x270。

还有一个就是体积雾会把前几帧的采样记录下来 和这一帧抖动混合,来达到真实的效果。这个是系统自己带的。

6、性能优化

[branch]
if(DF < Alpha)
{
  return float4(
    Texture3DSample(Tex, TexSampler, UVW0).r,
    Texture3DSample(Tex, TexSampler, UVW1).g,
    Texture3DSample(Tex, TexSampler, UVW2).b,
    Texture3DSample(Tex, TexSampler, UVW3).a
  );
}
else
{
   return float4(0.f, 0.f, 0.f, 0.f);
};

 写在custom节点的,减少采样次数。

原创文章 17 获赞 1 访问量 2038

猜你喜欢

转载自blog.csdn.net/opk8848/article/details/104839128