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

UE5 Grid3D 学习笔记

一、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列表中。

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

相关文章:

  • 低延时高速数据链技术在无人平台(无人机无人船无人车)中的关键作用与应用
  • Android大图加载优化:BitmapRegionDecoder深度解析与实战
  • 认知智能平台搭载LLM+RAG,重构行业洞察与决策支持体系!
  • 零基础学习RabbitMQ(5)--工作模式(1)
  • Elasticsearch 索引设计与性能优化实战指南
  • Docker 入门教程(八):Dockerfile
  • MyBatis CRUD 常用动态 SQL 标签整理
  • ​19.自动补全功能
  • Swift 小技巧:用单边区间优雅处理模糊范围
  • 杨洋出席喜临门Ai净眠智能新品发布会 今夜无人失眠
  • 基于Java+Springboot的宠物健康咨询系统
  • tmux-copy mode相关配置文件
  • 小米路由器 AX3000T自定义子网掩码
  • rollupOptions 详细讲解,如何优化性能
  • 07-Seq2Seq英译法案例
  • 模运算优化
  • 用R包mice进行多重插补
  • Git安装全攻略:避坑指南与最佳实践
  • Bugku——WEB篇(持续更新ing)
  • 代理模式 - Flutter中的智能替身,掌控对象访问的每一道关卡!