Unreal 5 实现场景环境控制组件

我在场景中发现了一个环境控制器,这个场景实现了雨天天气和晴天风沙天气,接下来我分析一下这个天气控制器是如何实现。
实现流程:

  1. 将环境控制器拖入场景,在配置项上面设置相应的雾,主光源,天空光。
  2. 在环境控制器中去设置场景上面的相关配置。
  3. 在环境控制器中去修改材质上的配置项
    接下来,我们看一下案例场景中的实现过程。

环境控制器蓝图实现

首先看一下环境控制器的配置项,
Wetness Level 则是湿度 会控制场景内材质的光滑度
Raindrops Amount 则会显示雨滴落到地面上的效果密度
Allow Particles 是否更新粒子
Is Raining 是否是雨天
关卡列表上面可以根据下来选择场景中的 雾 主光源 天空光
Unreal 5 实现场景环境控制组件_第1张图片
在构造函数中,设置材质函数库地面湿度和雨滴的密度的配置
Unreal 5 实现场景环境控制组件_第2张图片
然后根据设置是否雨天配置,设置分支
Unreal 5 实现场景环境控制组件_第3张图片
雨天中,修改雾的配置
Unreal 5 实现场景环境控制组件_第4张图片
修改直接光的配置
Unreal 5 实现场景环境控制组件_第5张图片
修改天空光的配置
Unreal 5 实现场景环境控制组件_第6张图片
晴天中,修改雾的配置
Unreal 5 实现场景环境控制组件_第7张图片
修改直接光的配置
Unreal 5 实现场景环境控制组件_第8张图片
修改天空光的配置
Unreal 5 实现场景环境控制组件_第9张图片
在事件图表中,事件开始运行时,根据是否雨天,设置材质参数集的值,当前为雨天的设置,并调用雨天特效
Unreal 5 实现场景环境控制组件_第10张图片
如果是晴天,使用设置的湿度和密度设置,并调用移动风沙效果。
Unreal 5 实现场景环境控制组件_第11张图片
定义了两个自定义事件,这两个事件是给房屋提供的事件调用,在上一篇讲过,房屋蓝图里面碰撞体和玩家产生碰撞以后,就会触发Inside事件,而完成碰撞以后,就会触发Out事件。如果Allow Particles的值为true,才会更新粒子特效,并且根据是否雨天,调用雨天事件或者风沙天气事件。
Unreal 5 实现场景环境控制组件_第12张图片
雨天事件,会根据是否在建筑内,选择添加或者删除特效,如果选择添加,会在玩家控制的摄像机上面添加一个粒子系统
Unreal 5 实现场景环境控制组件_第13张图片
风沙特效也是同样的道理
Unreal 5 实现场景环境控制组件_第14张图片
它们最后都调用了建筑内的特效,这个只会在屋内显示的效果
Unreal 5 实现场景环境控制组件_第15张图片

设置材质的参数

修改场景内的材质的相关参数来表现晴天和雨天的不同效果,这里环境控制器是通过设置标量参数值实现的,主要是设置一个浮点数,其实还有一个就是设置向量参数值,这个需要传入一个四维向量去设置。那么,接下来讲解一下如何在材质中实现当前值的使用,并分析一下场景内的材质如何实现雨天材质和晴天材质的变化。
Unreal 5 实现场景环境控制组件_第16张图片
如果能够设置到材质里面,需要创建材质参数集
Unreal 5 实现场景环境控制组件_第17张图片
材质参数集里面可以设置标量和向量,标量就是单个浮点,向量就是四维向量,
Unreal 5 实现场景环境控制组件_第18张图片
这个文件可以直接拖入到材质或者材质函数中使用,运行时,修改了当前的值,材质相应的值也会被修改。
Unreal 5 实现场景环境控制组件_第19张图片
拖入后,选择节点,可以选择参数集中使用的参数
Unreal 5 实现场景环境控制组件_第20张图片

场景里地面材质的实现

我们可以看一下场景里面的Road的材质怎么实现的,里面使用了两套纹理实现的,纹理也是标准的pbr物理光照材质实现的纹理设置,一张反射率贴图,一张法向贴图,还有一张Mask贴图
Unreal 5 实现场景环境控制组件_第21张图片
这一块是实现的视差遮挡偏移,视差遮挡偏移的原理是根据相机朝向和物体高度图来偏移uv实现。后面就是宏去开启或者关闭,并且还可以根据清晰度设置来开启和关闭。
Unreal 5 实现场景环境控制组件_第22张图片
然后使用uv去拾取反射率贴图
Unreal 5 实现场景环境控制组件_第23张图片
然后采样Mask贴图,R通道是高度,G通道是粗糙度,B通道是环境遮挡,因为路面不是金属,所以直接设置金属度为0即可。
Unreal 5 实现场景环境控制组件_第24张图片
还有采样了法向贴图
Unreal 5 实现场景环境控制组件_第25张图片
然后创建了材质属性节点,这个节点主要就是保存设置的信息,也方便lerp插值以及选择。
Unreal 5 实现场景环境控制组件_第26张图片
这个材质使用了两套贴图,所以需要一个mask去获取当前到底使用哪个属性
Unreal 5 实现场景环境控制组件_第27张图片
两套属性的混合使用是在世界坐标系下面的混合,通过位置进行三平面映射,获取到纹理的G通道,
Unreal 5 实现场景环境控制组件_第28张图片
G通道的效果是这样,然后还将强度乘以2,让第一个通道的属性显示区域大一些,估计是trick。

然后使用混合材质属性节点,使用mask去混合,如果不开启宏,则直接使用第一套材质属性。
Unreal 5 实现场景环境控制组件_第29张图片
然后使用了环境光遮挡处的苔藓效果,然后使用烘焙的ao去作为mask混合苔藓和基础默认的材质属性
Unreal 5 实现场景环境控制组件_第30张图片
然后创建了水的材质属性
Unreal 5 实现场景环境控制组件_第31张图片
水的函数里面就是生成了一套材质属性,水的反射率贴图,法向贴图和粗糙度,还有根据高度,根据高度生成了Mask
Unreal 5 实现场景环境控制组件_第32张图片
然后就是最后根据水的mask混合材质属性
Unreal 5 实现场景环境控制组件_第33张图片
属性通过雨滴效果函数设置,然后生成最终显示在材质。
Unreal 5 实现场景环境控制组件_第34张图片
在雨滴特效函数里面,修改了基础颜色,粗糙度和金属度
Unreal 5 实现场景环境控制组件_第35张图片
还有修改法向
Unreal 5 实现场景环境控制组件_第36张图片
里面重点的部分就是FlipBook,然后使用一张序列帧图片,来循环实现雨滴效果。
Unreal 5 实现场景环境控制组件_第37张图片

你可能感兴趣的:(unreal,人工智能,unreal,engine,5,游戏引擎,游戏)