UE4的天气控制无限天气学习文件

为方便起见,****的合作伙伴学习此天气控制系统

已移动下一个教程文档

文章中涉及的视频也将尽快移动~

  • 类别: 蓝图

  • 更新: 1.1(10-09-2020)

  • 虚幻引擎: 4.23-4.25

  • 平台: ,

先进且优化的天气控制系统。

Infinity Weather是一个功能强大且清洁的系统,旨在用于虚幻引擎中的天气控制。

该软件包是7个系统的组合,可以分为独立的软件包:风,位移,景观,降水,脚步,雾气,后期处理,现在可以作为可配置的统一系统使用。

特征

移位:

  • 可配置的位移捕获蓝图

  • 使用着色器中的形状定义(球体,胶囊,盒子,圆柱体,贴花,迹线球体)渲染的位移的自顶向下投影

  • 骨骼网格位移支撑

  • 易于与所有类型的参与者集成的界面

  • 位移区域随演员或摄像机动态移动 

  • 基于时间的积雪

  • 构建函数可用于多种其他效果(例如草互动)

  • 置换材料功能(雪,泥,沙,草)

  • 小世界纹理(1024×1024)甚至可以处理150x150m的区域

后期过程:

  • 两种材料,在材料排列之间进行快速动态切换 

  • 后处理效果(雨滴,冻结,锐化/模糊)

  • 前半透明效果(雨圈,热雾,实验闪光)

  • 对天气情况做出动态反应

  • 支持字符和音序器摄像机

脚步:

  • 通知基于脚步检测系统

  • 脚步类型示例(SFX,VFX)雪,雨,泥

  • 物理材料支持

  • 可配置的足迹组件,每个角色均可调整

  • 具有优先级和有条件产卵的足迹量

沉淀:

  • 雪,雨,灰尘,冰雹的明确影响

  • GPU友好高效,可在单一材质和网格上实现。

  • 每个发射器多达65000个粒子,具有高性能

  • 遮挡图

  • 淡入淡出风雨声效

景观:

  • 基本示例材料(雪,泥,沙)

  • 用于混合位移和动态天气的高级景观材料。

  • 虚拟纹理和分层的景观材料。

  • 多个示例地面层(岩石,草,泥,沙)

环境:

  • 天气控制器演员

  • 球形体积雾面积和大气温度

  • 天气表层材质功能(雪/湿层)

  • 基于样条的彩虹网格物体,带有摄像头,

  • 水坑贴花

  • 方向性轻云阴影对风向有反应。

  • 风的反应性影响,例如降水,地面灰尘,旗帜,树木,灌木,草,发射器

  • 范例地图:雪,沙,雨,世界

  • 性格对强风的反应

项目配置

该软件包需要程序性网格组件才能工作,因此请确保已启用它。

 

我已决定将该项目作为可下载的内容添加到该项目中。虚幻引擎不支持以可下载的内容发送配置文件,因此用户必须在使用pack的项目中添加脚步配置以使其正常工作。这个过程真的很简单:

  1. 打开项目配置Edit-> Project Settings

  2. 选择选项卡Engine-> Physics并向下滚动

  3. 添加物理表面类型:雪,沙,泥,岩石

该软件包可与TPP输入配置文件完美配合。如果您使用了其他模板,那么可能必须将输入添加到项目中以进行包测试: 

  1. [/Script/Engine.InputSettings]

  2. + AxisMappings = AxisName = “ MoveForward” ,Key = W,Scale = 1.000000

  3. + AxisMappings = AXISNAME = “MoveForward” ,密钥= S,标度= – 1.000000

  4. + AxisMappings = AxisName = “ MoveForward” ,Key = Up,Scale = 1.000000

  5. + AxisMappings = AXISNAME = “MoveForward” ,密钥=减,标度= – 1.000000

  6. + AxisMappings = AXISNAME = “MoveRight的” ,密钥= A,标度= – 1.000000

  7. + AxisMappings = AxisName = “ MoveRight” ,Key = D,Scale = 1.000000

  8. + AxisMappings = AxisName = “ Turn” ,Key = MouseX,Scale = 1.000000

  9. + AxisMappings = AXISNAME = “查找” ,密钥= mouseY的,标度= – 1.000000

包装已准备就绪!

入门

该软件包的每个用户都应首先检查产品随附的所有示例。可以在InfinityWeather / Demo / Maps文件夹中找到示例地图。

有多个示例可以预置不同的配置:

  • SnowMap –具有轻量级景观材料的简单雪景效果。

  • RainMap –简单的雨水和泥土效果以及轻巧的景观材料。

  • DesertMap –简单的沙漠和晴朗的天气以及轻巧的景观材料。

  • WorldMap –具有混合景观效果的高级多层材料。

通过添加到Demo / Mannequin / BP_DemoCharacter中的四个基本组件,实现了与无限天气世界的示例角色交互:

  • BP_InfinityFootstepComponent –从通知程序产生足迹效果

  • BP_DisplacementComponent –渲染地面位移的形状 

  • BP_InfinityPostPRocessComponent –控制后期处理和控制器通信。

  • BP_InfinityPawnComponent –在冰冷时会对诸如呼吸粒子之类的角色产生额外影响。

天气控制

包装中最重要的元素是InfinityWeather / BP_InfinityWeatherController蓝图,使用户可以控制天气状况,例如雾,风向,降水和积聚。

只需将BP_InfinityWeatherController拖放到您的关卡上即可开始控制天气。

大气效果需要将BP_InfinityWeatherControllers中的指数高度雾插入才能正常工作。记住在地图上放置高度雾化演员,并设置天气控制器的属性。

天气控制器属性列表看起来非常简单,但这是一个非常强大的工具。为了进行测试,请尝试使用类似之前的参数设置多雨的大风天气:

在游戏中使用以下功能,可以通过在参数之间进行混合来动态控制系统。

沉淀

沉淀系统是该包装中最先进的部分。该系统基于单一材料和单个网格的组合(没有Niagara或Cascade)。广告牌的效果是在相机局部空间的顶点着色器中计算的。这意味着该系统几乎没有PCU成本,而且该系统超快。

 系统中几乎没有预定义的效果(/ InfinityWeather / Precipitation /)

  • 雨/ BP_Infinity降水

  • 雪/ BP_Infinity降水雪

  • 灰尘/ BP_InfinityPrecipitationDust

无需天气控制器即可使用降水效果。将所选效果的蓝图拖放到地图上。

手动放置的actor可以配置并受降水面积的限制。用户还可以使用地图某些区域本地可见的多种天气类型。所有参数均在编辑器提示中描述。

用户可以通过扩展基础类并更改属性来为特定的雨雪配置创建自己的降水效果类。新创建的类别将在天气控制器的“降水影响类别”列表中可用。

/ InfinityWeather / Precipitation / BP_InfinityPrecipitationOcclusion是一种特定类型的actor,包含用于计算与屋顶和其他网格的降水碰撞的渲染目标纹理。将这个角色放置在场景上后,您会注意到在遮挡贴图区域中,网格下未渲染雨雪。

当前支持的每个级别只有一个遮挡图,但计划在动态地实现多个遮挡图之间的切换。

风基于对简单风向矢量起反应的多种效果的综合。

当前,可以使用BP_InfinityWeatherController中的“风向”矢量在整个场景上全局控制风效应。

对风起反应的大多数对象都使用Environment / Functions / MF_InfinityWind材质函数,该函数返回有关当前风况的所有重要信息。这是获取全球风能数据的最简单方法。

对风力产生作用的已实现效果和对象的列表。

  • 降水方向–降水蓝图中的“属性风”可缩放影响程度

  • 植被– MF_WindBush,MF_WindTreeLeafs,MF_WindTreeTrunk,MF_WindGrass节点实现了风对植被的影响。

  • 标志–标志材料M_Flag的特定实现。

  • 级联粒子发射器(“天气控制器”中的“受风影响的发射器”属性是应该使用“风向”和“风强度”参数进行反应的发射器列表。(示例Environment / Dust / PS_SnowBlowingLarge)

  • 灰尘–预定义的平面灰尘效果会根据风向旋转和衰减。

  • Grass – MF_WindGrass材质节点。

  • 景观灰尘– MF_GroundDust对沙地景观的影响。 

  • 云影– M_CloudsShadow

  • 灌木和雨水的影响受风向的影响。

多雾路段

BP_InfinityFog actor可用于更改某些区域的雾设置。雾男演员分为两部分

  • 雾体积–渲染为覆盖网格的雾的体积形状。

  • 雾大气–大气设置。当摄像机处于雾体积内时,控制器将使用这些设置根据“权重”属性值将其融合为新参数。

目前支持的是唯一的椭圆形雾。

积累

累积是一组参数,这些参数控制使用 主材质中的MF_InfinityWeatherSurface节点的网格的雪覆盖度和湿度。  

MF_InfinityWeatherSurface是一个高级节点,可将基础颜色,正常值和粗糙度值调整为由材料中使用的两个基本参数设置的当前天气状况。

  • Weather.Controller.WetSurface –控制表面的湿度

  • Weather.Controller.SnowySurface –控制表面上的雪壳。

岩石材料M_RockSnowMaterial中提供了使用MF_InfinityWeatherSurface的示例。在地图上拖放岩石网格物体(/ InfinityWeather / Demo / Environment / Rock / sM_Rock),以检查天气情况如何影响材料。请注意,潮湿和多雪的物质的结合可以产生冰雪的漂亮效果。

此外,可以用顶点颜色(红色通道)绘制网格,以掩盖对遮挡物下方的网格的影响。

有关其他参数的更详细说明,请参见“景观和位移”部分。

排量

Infinity Weather系统引入了基于渲染目标的高级置换材料系统。简而言之,BP_InfinityDisplacementCapture actor正在围绕实现BPI_DisplacementShape的焦点搜索actor。BPI_DisplacementShape实现将形状列表(形状和变换的一种)添加到堆栈中。在最后阶段,将形状堆栈渲染为置换纹理。每帧重复执行,并带有一些随机偏移。  

基本上,需要三个元素才能使系统正常工作:

  1. 位移接收器的景观和支撑位移的材料。(MI_LandscapeSnow / MI_LandscapeMud / MI_LandscapeSand,MI_LandscapeCombined)

  2. 放置在地图上的位移捕获角色(BP_InfinityDisplacementCapture),用于捕获景观地面。

  3. 会影响地面的位移网格物体actor或组件(BP_InfinityDisplacementStaticMeshActor)

以下视频显示了如何组合所有这些工具并使之工作:

景观材料

景观材料是一个高级主题,因为需要有关虚幻材质系统的基础知识才能将其注入到项目中。

示例内容(横向/材质)附带了横向配置的一些示例,以使此步骤更容易。有简单的材料可以通过一种位移完全覆盖景观:

  • M_LandscapeSnow(使用MF_InfinitySnow)

  • M_LandscapeMud(使用MF_InfinityMud)

  • M_LandscapeSand(使用MF_InfinitySand)

还有一种高级版本的材质,它将一个场景中的所有三种效果结合在一起。此外,扩展版本还支持MF_InfnityWeather。提供两种版本的虚拟纹理化和多层化 

  • MI_LandscapeCombinedLayered

  • MI_LandscapeCombinedVirtual 

让我们看一下在DesertMap上使用的示例Sand(M_LandscapeSand)材质:

材质是四个节点的组合:

  1. MF_GroundDand –它是包含颜色图,法线贴图粗糙度等的沙子的基础材料层。可以用任何材料(例如从GameTextures / Example Project / Any pack创建的任何材料)替换它。

  2. MF_InfinityDisplacement –是一个基础节点,可读取位移渲染目标并从中返回数据。作为输入,它需要位移层强度。这是用于在景观上绘画的图层。

  3. MF_InfinitySand –合并位移和地面层的数据。此外,此节点还实现了一些其他效果,例如为位移的地面着色。这里可以使用另外两个节点来实现另一种效果MF_InfinityMud,MF_InfinitySnow。

  4. MF_InfinityWeather –添加可以由天气控制器控制的湿表面的叠加效果。

位移捕捉

该BP_InfinityDisplacementCapture是准备排量深度纹理景观的主要演员。下面简单说明该参与者的算法实际上是如何工作的:

  1. 位移捕获演员正在寻找与位移区域重叠的演员。

  2. 如果检测到支持位移接口的演员,则会询问他有关位移地面的列表形状。

  3. 新生成的形状将添加到堆栈中。

  4. 在最后一步中,位移捕获角色会渲染添加到堆栈中的所有形状。  

场景的简单配置及其位移如下所示:

  1. 将BP_InfinityDisplacementCapture拖放到地图上。

  2. 将Landscape 角色添加到BP_InfinityDisplacementCapture.GroundMeshes。

    这是向系统通知位移接收器的重要步骤。

  3. 选择景观,然后使用支持位移的材质,例如M_LandscapeSand。

  4. 编辑景观并在其上绘制位移层。

为了优化,仅在焦点区域内显示位移。焦点来自BP_InfinityDisplacementCapture。CaptureActor。如果CaptureActor为null,则它将字符Pawn用作焦点。如果Pawn为null,则使用摄像机位置。

系统中定义了两种类型的渲染目标。捕获位移actor中两个区域的大小都可以更改。

  • 捕获渲染目标-缓存焦点周围的形状。修改CatureTextureSize属性。

  • 世界渲染目标–合并所有缓存的数据。修改渲染目标TR_Persistent.resolution以调整历史记录的大小。

简单的静态形状

位移贴图渲染基于着色器中的光线跟踪形状来获得最佳的效率,但它也限于着色器中预定义的形状数量。可以移动地面的形状在/ InfinityWeather / Displacement / Blueprints / Shapes /文件夹中定义:

  • BP_DisplacementStaticMeshCapsule

  • BP_DisplacementStaticMeshCube

  • BP_DisplacementStaticMeshCylinder

  • BP_DisplacementStaticMeshSphere

  • BP_DisplacementDecal(地面上的高度图映射)

所有这些都可以放置在地图上并进行缩放。

使用BP_InfinityDisplacementCapture中的Debug Option预览由捕获位移渲染的形状

字符位移

BP_InfinityDisplacementComponent是一个组件,它允许附加影响位移地面的一系列形状。

以下视频中展示了使用干净的人体模特角色置换组件的示例实现:

向角色添加位移确实很容易:

  1. 打开角色蓝图,将BP_InfinityDisplacementComponent添加到您的角色中。

  2. 选择零部件并设置“位移形状”数据资产。您可以使用完整的布娃娃(DS_MannequinRagdoll)或脚(DS_MannequinFoots)实施,该实施速度更快并且可以步行。

  3. 选择顶部栏上的“类设置”,然后将BPI_DisplacementShape接口添加到“已实现的接口”列表中。它应该看起来像在屏幕上:

5.现在实现名为AddDisplacementShapeData的接口函数。

经过这些步骤后,将检测到字符并准备工作。

位移数据资产

附加到角色的位移形状的配置存储在数据资产(PDS_DisplacementShapes)中。

“无限天气”几乎没有用于人体模型和车辆的数据资产的示例,但是任何用户都可以创建将与特定骨骼网格配合使用的自定义数据资产。创建位移数据资产很简单:

  1. 在内容浏览器中按鼠标右键

  2. 选择其他-> DataAsset

3.选择PDS_DisplacementShapes并创建

4.设置新创建的数据资产的名称“ DS_ExampleDataAsset”以备将来使用。

可以在字符中使用新创建的数据资产,但是我们仍然需要一些形状定义。可以手动添加形状,但是Infinity Weather带有一个简单的编辑器,可帮助预览形状的附加方式。


  1. 在地图上拖放编辑器类(BPU_InfinityDisplacementShapesEditor)。

  2. 选择编辑器,然后在“数据”属性中选择新创建的数据关联(DS_ExampleDataAsset)。

  3. 选择骨骼/静态网格物体参考,该参考将可视化表示产生位移的形状。它可以是您的角色或汽车。

  4. 按“加载”,现在可以将形状添加到“列表”中。形状说明如下。

  5. 工作后,按“保存”以保存更改。记住要在DisplacementComponent中应用新创建的数据资产。

形状属性描述插座骨或套接字名称用作附件转换。使用组件转换未定义。形状类型形状类型。当前支持:盒子/球体/圆柱体/胶囊/贴花,拖轮,拖球形状强度缩放互动的强度(尚未实施)形状变换依恋空间的相对变换。形状图案在置换贴花中用作图案的纹理。

脚步声

Weather System还支持基于动画中放置的通知程序的高级足迹系统集成。  

使用足迹系统:

  1. 将BP_InfinityFootstepComponent组件添加到角色。组件的配置包含人体模型的效果和附件的默认预定义模板。

  2. 将BP_NotifyFootstep添加到脚踩在地面上时的步行/跑步动画中。在属性中选择左脚或右脚。

  3. 在您的场景上添加BP_FootstepVolume并选择应该在体积内部产生的足迹预设。

足迹量

引擎有时会错误地检测足迹地面,这是因为在地面追踪过程中,有限的景观图层混合在一起。足迹体积BP_FootstepVolume可以轻松解决此问题。当角色在体积内时,系统将使用在体积定义中设置的足迹,因此将覆盖不正确的足迹效果。

在选择最相关的足迹效果时,要考虑优先级和所需条件。它甚至可以被过滤。下面的示例显示了如何将生成雪的第二优先级(优先级更高,更重要)配置音量,并且仅当至少有0.1%的天气位移处于活动状态时才可见。

屏幕效果

放置在包含相机组件的角色中的BP_InfinityPostPRocessComponent将自动添加后处理材质,并与天气控制器进行通信以获取有关当前状况的信息。

支持三种类型的后处理视图对象:

  1. 后置摄像头–默认情况下,系统在所有者中搜索摄像头。

  2. 后流程组件–如果所有者中没有摄像机,则系统将搜索组件。

  3. 后处理体积–可以通过设置“后处理体积”属性为场景中的角色设置自定义体积。

还可以通过功能SetPostPRocessView设置自定义的后处理对象。

特征:

  • 仅当降水参与者的IneractWeather> 0.0时,雨滴和圆圈才会显示。这意味着雨滴仅显示在雨量内部。

  • 屏幕上的雨滴在一段时间后逐渐消失。淡入淡出的持续时间可以由BP_InfinityPostPRocessComponent.Rain参数控制。

  • 当相机在盖子下时,它不会弄湿,也不会出现雨滴。

  • 冻结和热霾失真是根据天气控制器和雾气演员的大气局部计算的。(温度,失真)

屏幕效果是使用两种后处理材料实现的。

M I_InfinityPreTranslucent –在半透明层之前渲染的一组效果。

  • 雨圈–雨水活跃时自动启用。

  • 失真–产生热雾效应 

  • 闪闪发光–在雪和沙滩上闪闪发光的实验性禁用效果。

MI_InfinityPostPRocess –色调映射后呈现的一组效果。

  • 锐化–附加的锐化效果,可通过UseSharpening改善封闭对象的质量(可以禁用)。

  • 水滴–仅当相机暴露在雨中时,屏幕上的动画雨滴才可见。

  • 冻结-屏幕边缘冻结。

复写

天气的复制是在服务器端实现的。这意味着应该在服务器上激活BP_InfinityWeatherController中控制天气的所有功能,然后将状态自动发送给客户端。当玩家在一段时间后加入游戏时,天气状态也会被复制。

位移渲染目标不会被复制,而是仅在跟随本地玩家0的位移捕获actor的焦点周围进行局部计算。这意味着,如果多个actor同时在同一区域中行走,则结果将在本地进行计算,并且对于他们全部。它的行为方式不是因为已被复制,而是因为它是使用相同数据在本地模拟的。

在多人游戏中测试位移时,请确保在单独的游戏实例中运行它,否则UE4会共享地面纹理的内存,并且存在错误,因为多个位移角色会同时渲染相同的位移纹理。此问题不会影响最终发行的游戏,所以请不要担心。使用选项SinglePRocess = false可以在编辑器中以多个窗口中适当的位移测试游戏。

多人游戏将实现的未来功能:

  • 目前尚不支持本地气象控制器,但这是我的路线图。

  • 复制的食品印刷贴花将发送给客户,并在置换角色关闭时激活。

END 

资源下载: