首页 > 其他分享 >ue4.26 niagara collisionNormal问题

ue4.26 niagara collisionNormal问题

时间:2024-10-20 21:21:08浏览次数:1  
标签:Spawn 粒子 collisionNormal ue4.26 模块 CollisionResults niagara CollisionNormal 断点

目的是让粒子片自由下落,与表面碰撞后停止并调整为与表面一致的朝向。

测试用例搭建如下:

1,建一个niageraSystem,直接用Fountain模板。

2,确认Emitter Properties中Sim Target是CPUSim(出于兼容性考虑)

2,在Solve Forces and Velocity前添加Collsion模块(CPU碰撞)。

3,将Collision中的Friction和Friction During a Bounce都给很大的值,不希望落地后滑动或反弹。

4,Emitter Settings中Interpolated Spawning去掉勾选。(无关紧要)

5,Emitter State中Loop Behavior改成Once。

6,关闭Spawn Rate模块,添加Spawn Burst Instantaneous模块,Spawn Count设置为100,Spawn Time设置为0。

7,Initialize Particle模块中Lifetime设为-1,适当调大Uniform Sprite Size。

8,关闭Sphere Locationty和Add Velocity in Cone,添加Box Location,给适当的box size。

9,关闭Drag和Scale Color。

10,将Render中的Facing Mode改为Custom Facing Vector,鼠标放在上面会有提示:此模式下是通过设置Particles.SpriteFacing调整粒子朝向。

11,在Parameters下的Particle Attributes下添加SpriteFacing变量,然后在Particle Spawn阶段赋值(0,0,1),在Particle Update末尾将[Transient]CollisionNormal赋给SpriteFacing。

注:niagara parameters中显示transient变量,需要勾选show advanced categories

 

将粒子放在斜面上方播放,在原版ue4.26下表现符合预期,粒子落地后就面向地面法线方向。

但在项目引擎里却效果却不对,粒子落地后还还是朝上。

说明在项目引擎里CollisionNormal不正确,于是怀疑是项目引擎修改过产生了bug。

用引擎源码启项目调试。

搜CollisionNormal,可以找到其赋值处:

 可见,是由CollisonTraces中取得Hit信息,然后将Hit.ImpactNormal赋予CollisionResults中的元素的CollisionNormal。

跳转到CollisionResults的定义:

 然后find references,可以找到从CollisionResults里取结果的函数:

GetQueryResult的调用处为:

这也正是CollisionNormal赋给transient变量CollisionNormal的地方了。

 

为了调试方便,将Spawn Burst Instantaneous中的Spawn Count改为1,即只生成一个粒子。待粒子落到斜面上后如下打断点:

则会发现第一个断点有时能断到,有时断不到,断点1断到的时候继续运行到第二个断点时CollisionResults中元素个数就是1,而且CollisionNormal值确实为斜面法线,断点1断不到的时候直接运行到第二个断点时CollisionResults中元素个数就是0(Empty)。

也就是说,当CollisonResults非空时法线是正确的,只不过有很多时候是空。

而出现为空的情况也不能断定就是有错,因为有可能那帧确实没监测到碰撞,就是[transient]CollisionValid=false的情况(尽管粒子都已经落地了还有监测不到碰撞的情况也让人觉得不太正常,而且原版引擎就不会这样)。

如果不深纠和原版引擎一样,而只是想个办法把问题绕过去的话,那么现在已经有方法了。方法是:既然CollisionNormal时有时无,那就自定义一个CollisionNormalLatest,用它来记录最近的一次有效的CollisionNormal,用这个Normal作为最终粒子朝向。

于是emitter修改如下:

1,添加InitCollisionNormalLatest模块,将CollisionNormalLatest初始化为(0,0,1)

2,添加SetFacingUseCollisionNormalLatest模块,计算CollisionNormalLatest并赋给SpriteFacing:

3,添加ClearVelocityAndForce模块,将已发生碰撞的粒子Velocity和PhysicsForce清零,另外对于已碰撞的粒子还要关闭Collision和Gravity Force:

 这样,粒子落地后,朝向就正确了:

 

标签:Spawn,粒子,collisionNormal,ue4.26,模块,CollisionResults,niagara,CollisionNormal,断点
From: https://www.cnblogs.com/wantnon/p/18487930

相关文章

  • UE4.26 Emissive Decal(发光贴花)模拟Light Function
    【USparkle专栏】如果你深怀绝技,爱“搞点研究”,乐于分享也博采众长,我们期待你的加入,让智慧的火花碰撞交织,让知识的传递生生不息!主要是想用EmissiveDecal(发光贴花)来模拟出SpotLight的LightFunction效果。原因是SpotLight的LightFunction依赖于阴影,而SpotLight开阴影比较费,且U......
  • ue4.26 通过材质开关控制mesh pass的blend function
    一,meshpass中blendfunction的设置方法在meshpass中设置blendfunction有如下几种方式:1,在CreateXXXProcessor(返回FXXXProcessor)中: 2,FXXXProcessor::AddMeshBatch中: 3,FXXXProcessor::Process中: 4,RenderXXX中: 二,材质开关访问途径我们知道,访问材质开关有以下几种......
  • Niagara学习
    Niagara发射器的属性里面是设置用CPU执行还是GPU执行发射器生成弄一些属性 发射器更新模块    EmitterState EmitterState 发射器状态,一个是system系统默认,一个是self自己控制,表示粒子生命结束后是否删除    SpawnRate 生成粒子的频率    Spawn......
  • Niagara 物联网技术基础应用(文章修复中)
    技术指南引言主要分以下几个模块物联网软件平台(workbench)的使用Niagara编程方式项目创建流程物联网软件平台(workbench)的使用Niagara软件流程及协议Niagara系统中主要包括几种典型程序platform(平台)Station(站点)Workbench(工作台)Daemon(守护进程)WebBrows......
  • ue4.26 CurveLinearColorAtlas支持非正方形尺寸
    默认CurveAtlas只能是正方形 改代码可以让它支持非正方形: 改法如下:CurveLinearColorAtlas.h//CopyrightEpicGames,Inc.AllRightsReserved.#pragmaonce#include"CoreMinimal.h"#include"UObject/ObjectMacros.h"#include"UObject/Object.h"#in......
  • ue4.26 forward translucency shadow
    对于前向透明材质:想找到其阴影代码。首先由于是前向透明物体,所以肯定不是像不透明物体那样有screenspaceshadowmask图,而是在shader中计算前向光照时顺便计算阴影。所以只需找到相应shader文件。为此用renderDoc截帧,但默认截帧只显示pass名,而不显示shader名,为了显示s......
  • ue4.26学习笔记1-角色移动
    ue4.26学习笔记1-角色移动角色旋转首先创建character蓝图类打开创建的蓝图类,为骨骼网格体添加模型,此处使用小白人的模型,然后添加弹簧臂组件和摄像机组件在项目设置->输入中添加鼠标x轴和y轴的操作映射,此处x轴操作映射命名为鼠标左右移动,y轴操作映射命名为鼠标上下移动,其中x......
  • WINDOWS下从源码编译Carla0.9.13+UE4.26
    CARLA是一个开源的自动驾驶模拟器,基于UE4。本篇文章讲述如何在windows系统上从源码编译Carla0.9.13+UE4.26。参考官方文档:https://carla.readthedocs.io/en/0.9.13/build_......