ue4 怎么传递变量到另一个蓝图_UE4中用Niagara实现procedural浪花

本文介绍了如何在UE4中利用Gerstner Waves模拟海浪,并通过Niagara系统生成GPU粒子来模拟浪花,强调了匹配水面位移、参数传递以及自定义碰撞行为的方法。此外,还探讨了粒子数量优化和速度拉伸效果的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

555ca0b6f13d02d3e4f12812bcfd6ae7.png

About me

大家好,我是Asher,Epic Games的Developer Relations Techical Artist,平时我的工作包括帮助各种大小游戏工作室解决技术/美术问题及实现相关引擎功能,有时间也会用引擎制作内容作为演讲和教程的示例。流程化的炫酷效果一向是我很感兴趣的领域,还在beta中的Niagara示例内容并不多,希望这篇解析可以给大家一些启发。

Summary

本篇特效的实验性质比较强,最初是为了探索BP-Material-Niagara协同工作的可能性,因为在Unreal Circle上反响很好所以决定写一篇更详尽的分析,希望可以使UE4开发者拓展对引擎框架的认识。

本文涉及到的内容比较广,关于Niagara最基础的一些部分比如怎么新建、怎样添加使用模块就不详细说明了,没用过的同学可以先看一下Epic官方文档的介绍:
Niagara核心概念

和贾越同学的系列教学直播:
https://www.bilibili.com/video/av73602807

本次工程效果:

bdd519bacaa31778e1168b377c4fe5e0.png
Niagara procedural wave splashhttps://www.zhihu.com/video/1196146896954314752

部分工程文件下载:http://asher.gg/?p=2592

为了实现海浪拍到岩石上激起千层浪的感觉,我们可以看到有几个表现上的关键点

  • 在岩石附近生成水花
  • 水花激起的时机和位置与海水的流动匹配
  • 出射速度受到海水运动和石头表面的撞击情况影响
  • 激起后水花的体积感

海面的模拟 – Gerstner Waves

游戏里模拟海水的途径是一门艰深的课题,本文就不多涉及了。这里为了制作需要,介绍一下相对直观实用的Gerstner Waves。

在流体动力学中,Gerstner Waves是周期表面重力波的欧拉方程方程的精确解。它计算机图形技术之前很久就出现了,用来描述不可压缩流体的表面波动。

5fe60649a90c5185ed7b84c12694e661.gif
单一Gerstner Wave材质应用在一个平面上的效果

数学时间

我们可以看到每一个点不止有Z轴方向的运动,也有XY轴的运动。并且这不是一个简单的sin波而是带有‘浪尖’的波形,这些都是Gerstner Wave的重要特征。

因为篇幅原因这里就不具体说公式了,本节末尾提供了我做好的材质节点可以直接下载取用。详细算法可以参考:

Chapter 1. Effective Water Simulation from Physical Modelshttps://developer.download.nvidia.com/books/HTML/gpugems/gpugems_ch01.html

简单说来,定义一个波形的属性有:
[高度, 前进方向, 波长, 陡峭度]

我们定义相位φ
φ = 方向 ⋅ 位置 / 波长 + 频率 * 时间

其中
频率 = sqrt(重力 * 2π / 波长)

那么以
z轴偏移 = 高度 * sin(φ)
xy轴偏移 = 陡峭度 * 高度 * 方向 * cos(φ)

的形式去移动海面的顶点,顶点会沿着椭圆绕圈

da78e3aafed3befce4c033fa1587ef43.gif

一系列的顶点组合在一起就会形成具有浪尖的波形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值