类对马岛之魂 落叶交互

本文内容主要是在UE中优化《33号远征队》游戏环境中玩家与地面花瓣的慢速交互的效果,并尝试实现对马岛之魂/燕云十六声等游戏中的刀剑掀起落叶快速交互的效果。


前置工作

物理力分解分析:

剑刃轨迹引发的落叶飞舞效果,叶子粒子会受到多种物理力的综合作用。以下是详细的力分解:

重力-50~-500持续Gravity Force
剑刃冲击力500~1500瞬时(0.1~0.3s)Point Force/Add Impulse
升力50~300瞬时(0.2~0.5s)Calculate Lift
涡旋力200~500持续(跟随剑刃)Vortex Force
空气阻力0.1~0.3持续Drag Coefficient

重力(Gravity)

可微调至-50,-500等,调整重力强度会偏离真实物理,但在游戏开发中,需要在物理真实性和艺术表现力之间做权衡:

1)美学方面,类似《对马岛之魂》的"战鬼模式",需要延长落叶飘落时间以增强戏剧感。电影级镜头需要让粒子在画面中停留更久。

2)性能优化方面,较低速度可减少碰撞计算频率(粒子不会快速飞出视野)真实物理中,落叶缓慢下落主要靠空气阻力平衡重力,而非直接修改重力,但UE中,出于实时渲染中的局限性,单纯依赖Drag难以实现自然的飘荡(数值敏感易导致粒子停滞),所以TA做法更建议直接控制下落速度,而不去精确模拟流体力学。

剑刃冲击力(Impulse Force)

剑刃挥动时对粒子施加瞬时推力。

可以用 Point Force 模块绑定到剑刃位置,强度 500~1500,衰减半径 0.5m

升力(Lift Force)

剑刃快速运动时,下方气压差使粒子短暂浮空。(伯努利效应 快速挥剑产生的低压区

涡旋力(Vortex/Tornado Force)

模拟剑刃划过的空气涡流,使粒子螺旋运动。

空气动力学阻力(Aerodynamic Drag) (WindForce 风力开启后连带开启的模块)

减缓粒子速度,模拟空气摩擦。

典型值:0.1~0.3(落叶较轻,阻力较大)

省略对地面反弹力(Particle Collision模块自带)以及邻近粒子排斥力的分析

Niagara模块解析:

Aerodynamic drag模块的解释:

应用非物理的空气动力学阻力,这对于纸张或树叶等薄物体非常有用,因为粒子的网格方向会影响粒子的阻力、升力方向和旋转。

累积为平流速度 (AdvectionVelocity)、物理阻力 (PhysicsDrag) 和瞬态物理旋转阻力 (Transient.PhysicsRotationalDrag),分别应用于“解算力和速度”和“解算旋转力和速度”。

此模式在“解算力和速度”模块中启用旋转解算器
 

添加Wind Force模块需要连带添加Aerodynamic drag模块和Align Sprite to Mesh Orientation模块。
出于Wind Force的整体性而非局部性,添加后暂时uncheck了这个模块。

制作过程

预设参数:

关卡蓝图:

Niagara设置:

粒子需要改成CPU粒子,并且在编辑器细节中启用阴影。

其它设置概要如图中comment

效果:

结果复盘

适用性和效果评价:

以上步骤即可完成视觉上正确的互动效果,比起对马岛之魂,更适合33号远征队中,角色踩到花瓣上,应该造成的轻微飘散。因此,此系统保留。

Bug和问题:

1)WindForce没有快捷添加region mask的方法,需要禁用,否则会整体飘逸。

2)快速冲击力的效果不好,目前可能是Event Tick帧率的影响,只有慢速移动效果较好,快速移动会跳帧反而导致花瓣没有影响。

快速移动时花瓣无响应的核心问题通常是 事件检测的帧率依赖性与物理更新不同步 导致的。具体原因可能包括:

  1. Tick事件遗漏

    • 剑刃快速移动时,Event Tick 的帧率(如30FPS)可能无法捕捉到每一帧的碰撞事件,导致粒子未被触发。

  2. 碰撞检测精度不足

    • 默认的碰撞检测(如Sphere Trace)在高速移动时可能出现“隧道效应”(Tunneling),物体从碰撞体中间穿过而未触发。

  3. 力作用时间过短

    • 快速挥剑时,冲击力作用时间(如0.1秒)可能小于粒子系统的响应延迟。

参考教程及对教程的feedback:

1)CGHOW的教程效果不真实。他是用反向point attraction force,region mask结合Attractor Position Offset。在物理上应该是错误的。

2)Kerry老师在Unity VFX Graph做出来效果非常合理。但是如果需要在UE里做,Unity案例的实现方法和Niagara的实现机制会有较大差异,包括Unity中debug shader等方便的工具在Niagara里需要换一套实现pipeline。

 


待更新内容:

为了达成快速剑气冲击的效果,需要替换事件检测方式

改进方案:方案一:连续碰撞检测(CCD) 强制物理引擎在高速移动时进行子帧插值计算。

方案二:轨迹采样(Sweep Traces)对剑刃移动轨迹进行连续射线检测,补帧间遗漏。

(CCD成本较高,优先尝试轨迹采样)。

// 每帧存储剑刃上一帧位置
LastSocketLocation = SwordMesh.GetSocketLocation("Tip");

// 当前帧位置
CurrentSocketLocation = SwordMesh.GetSocketLocation("Tip");

// 计算移动方向并发射射线
Direction = CurrentSocketLocation - LastSocketLocation;
HitResult = LineTraceByChannel(LastSocketLocation, CurrentSocketLocation, CollisionChannel);

// 命中时触发粒子
if (HitResult.bBlockingHit) {
    NiagaraSystem.SpawnAtLocation(HitResult.Location);
}

并计划更新Unity VFX Graph的实现 与 UE Niagara实现的工作流对比。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值