当前位置: 首页 > news >正文

类对马岛之魂 落叶交互

本文内容主要是在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实现的工作流对比。

http://www.lryc.cn/news/595843.html

相关文章:

  • “闪存普惠”如何一步到位? 华为在商业市场破题
  • 【QT常用技术讲解】QSystemTrayIcon系统托盘
  • 【bug】 jetson上opencv无法录制h264本地视频
  • 华为服务器操作系统openEuler介绍与安装
  • 【LeetCode 热题 100】46. 全排列——回溯
  • Kafka灰度方案
  • Lua语言
  • LNMP平台部署
  • 数据库—修改某字段默认值
  • [08006][1033] ORA-01033: ORACLE 正在初始化或关闭--问题修复
  • 从ZooKeeper到KRaft:Kafka架构演进与无ZooKeeper部署指南
  • 第13天 | openGauss逻辑结构:表管理1
  • CanOpen--SDO 数据帧分析
  • RabbitMQ应用问题
  • 新手向:基于Python的剪贴板历史增强工具
  • MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
  • Go 并发(协程,通道,锁,协程控制)
  • 基于 FFT + VMD 预处理的 1DCNN‑Informer 双支路并行、多头注意力融合分类模型
  • 【JS】获取元素宽高(例如div)
  • 力扣-链表相关题 持续更新中。。。。。。
  • 【Android】Popup menu:弹出式菜单
  • KafkaMQ 日志采集最佳实践
  • 《一种利用电阻抗和声学断层扫描进行触觉感应的仿生弹性机器人皮肤》论文解读
  • 基于开源AI智能名片链动2+1模式与S2B2C商城小程序的淘宝新店引流与好评优化策略研究
  • 92套毕业相册PPT模版
  • ES操作笔记
  • 认识自我的机器人:麻省理工学院基于视觉的系统让机器了解自身机体
  • 机器人芯片(腾讯元宝)
  • 合同审核:法务的“冰与火之歌”,如何唱出企业安全新篇章?
  • Python趣味算法:实现任意进制转换算法原理+源码