UE5 Grid3D 学习笔记

发布于:2025-06-30 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、Neighbor Grid 3D 的核心作用

NeighborGrid3D 是一种基于位置的哈希查找结构,将粒子按空间位置划分到网格单元(Cell)中,实现快速邻近查询:

  • 空间划分:将模拟空间划分为多个三维网格单元(Cell),每个单元可存储多个粒子(称为 “Neighbor”)。

  • 加速查询:通过位置→网格索引→粒子索引的映射,避免全局遍历粒子,极大提升邻近粒子搜索效率(如查找最近粒子、属性传递)13。

  • 典型应用:颜色传递、距离检测、动态碰撞等需粒子交互的场景。

二、“Initialize Neighbor Grid” 的具体功能

该模块负责初始化网格的基础参数和变换矩阵,是后续操作的前提:

  1. 网格参数配置

    • NumCell:定义网格在X/Y/Z轴的分辨率(如 (10,10,10) 表示10×10×10的网格)。

    • MaxNeighborsPerCell:限制单个Cell内可存储的粒子数量(超出时粒子可能注入失败)1。

    • GridExtents:通过输入世界空间范围(如 WorldGridExtents)定义网格的物理大小12。


  • 步骤1:通过位置获取所在Cell的索引。

  • 步骤2:遍历该Cell内所有Leader粒子,比较距离并记录最近粒子的Index。

  • 步骤3:用 Attribute Reader 读取该粒子的属性(如颜色)13。


  • Avoid Distance Field Surface 是 Niagara 粒子系统中用于动态规避场景距离场表面的模块,通过计算粒子与全局距离场(Global Distance Field)的交互力,实现粒子在运动过程中自动绕开静态网格体表面。其核心原理如下:

  • 距离场基础
    距离场(Signed Distance Field, SDF)存储了空间点到最近物体表面的有向距离:

    • 正值:点在物体外部,距离表面越远值越大。

    • 负值:点在物体内部,距离表面越近值越接近零37。

  • 规避力计算
    模块根据粒子当前位置采样距离场值,生成一个排斥力方向(从表面指向粒子),力的大小随距离递减:

    • 粒子接近表面时排斥力增强,防止穿透。

    • 粒子远离表面时排斥力减弱,避免过度偏移

Nearest Surface Avoidance (最近表面避免)

  • 目的: 让粒子远离它当前位置最近的任何场景表面

Oncoming Surface Avoidance (迎面表面避免)

  • 目的: 让粒子避免撞击到它当前运动方向正前方的表面

  • 工作原理:

    • 对于每个粒子,沿着其当前速度方向(Velocity 向量) 发射一条射线(Ray)

    • 使用全局距离场进行高效的射线步进(Ray Marching),检测射线前方一定距离(由参数控制) 内是否有表面。

    • 如果检测到前方有表面(即射线击中了距离场),则计算一个排斥力向量

    • 这个力的方向通常是从检测到的撞击点指向粒子当前位置的方向(或者基于撞击点表面法线的某种反射/偏转方向)。

    • 力的强度通常基于粒子到预测撞击点的距离以及粒子速度的大小进行调节(距离越近、速度越快,力越强)。


Populate Neighbor Grid(填充邻域网格),通过输入Grid3D,粒子位置信息,本地空间的转换,来构建

  • 输入粒子位置、变换矩阵、Grid对象。

  • 通过HLSL代码将粒子位置转换为网格索引(CellIndex),并将粒子索引(Particle Index)关联到对应Cell的Neighbor列表中。

说白了,就是构建粒子的查询哈希表


网站公告

今日签到

点亮在社区的每一天
去签到