GitHub - SakuraEntropia/Boids: An implementation of Boids Algorithm · GitHub
Skip to content
SakuraEntropiaPublic

About

An implementation of Boids Algorithm

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

Arrow-Mesh Multi-Species Boids Simulator 🐟🔺

基于 Taichi (现代 GGUI 后端) 开发的高性能 GPU 并行多物种集群(Boids)仿真器。本项目抛弃传统的圆形粒子渲染,创新性地采用动态三角形网格缓存(Triangle Mesh Buffering),通过每个粒子的速度矢量实时定向构造流线型箭头,并支持同物种聚合、对齐及全物种排斥的复杂涌现行为。


🚀 核心特性

  • 高性能 GPU 并行计算:利用 Taichi 的 @ti.kernel 和矩阵向量算子,在 GPU 上单帧轻松支撑数千个粒子的邻域搜索与行为结算。
  • 面向方位的三角形箭头拓扑渲染:
    • 动态根据粒子速度矢量计算朝向(Heading)与正交副法线(Side)。
    • 每个粒子当场生成 3 个顶点构成的箭头(尖端、左翼、右翼),通过 canvas.triangles 高效灌入显存渲染,具备极佳的视觉方向性。
  • 多物种群落生态 (Multi-Species Swarming):
    • 预设红、绿、蓝三种不同生态群落(Species)。
    • 相同物种之间产生内聚力 (Cohesion) 与对齐力 (Alignment);所有物种之间共享排斥力 (Separation),形成逼真的群游、分流与追逐动态。
  • 全功能 ImGui 交互面板:实时调节群体规模、行为权重、感知半径及箭头几何尺寸,并支持一键重洗(Re-shuffle)集群。

🔬 核心仿真规则模型

仿生群集行为(Craig Reynolds' Boids Algorithm)在本引擎中通过三个基础动力学算子实现:

  1. Cohesion (内聚):引导同类粒子向邻域局部质心(Center of Mass)靠拢。
  2. Alignment (对齐):调整自身速度趋向于同类邻域的平均速度。
  3. Separation (排斥):防止粒子间距过近而产生近距离排斥反冲力($\propto 1/dist^2$)。
  4. Boundary Reflection (边界硬碰撞):二维边界墙壁反射,使粒子群永不丢失。

🛠️ 安装与运行指南

确保您的系统已安装 Python 以及支持 GPU 加速的硬件环境。

1. 依赖安装

pip install taichi numpy

2. 运行脚本

将代码保存为 boids_simulator.py 并运行:

python boids_simulator.py

🎛️ 交互控制面板说明

启动程序后,左上角将弹出 Universe & Arrow Control 实时调参面板,支持动态调整:

  • Global Simulation Scale:
    • Total Arrows (N):实时调节激活的粒子总数(最高支持 3000 个静态预分配上限)。
  • Steering Weights (行为权重):
    • Cohesion (Intra):同物种内聚权重。
    • Alignment (Intra):同物种对齐权重。
    • Separation (All):全物种排斥防撞权重。
  • Perception & Spatial Radii (感知半径):
    • Visual Radius:视线感知范围。
    • Separation Radius:紧凑避障半径。
  • Physics & Visuals (物理与视觉):
    • Max Speed Limit:最大移动限速。
    • Delta Time (dt):时间步长。
    • Arrow Scale:三角形箭头在屏幕上的绝对几何尺寸大小。
    • Re-shuffle Swarm:一键重置所有粒子坐标与群落分布。

📜 许可证

本项目基于 MIT License 开源协议。

About

An implementation of Boids Algorithm

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages