面向与初学者解惑
看了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中 再把一片一片的组装成一个立体的豆腐块
【深入思考,平时我们看到的立方体其实都是表皮显示,真正到里面都是空心的,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节点的,减少采样次数。