EG/plugins/user/fluid_dynamics
2025-12-12 16:16:15 +08:00
..
components 编译修复 2025-12-12 16:16:15 +08:00
config 编译修复 2025-12-12 16:16:15 +08:00
core 编译修复 2025-12-12 16:16:15 +08:00
utils 编译修复 2025-12-12 16:16:15 +08:00
__init__.py 编译修复 2025-12-12 16:16:15 +08:00
demo_fluid_scene.py 编译修复 2025-12-12 16:16:15 +08:00
plugin.py 编译修复 2025-12-12 16:16:15 +08:00
README.md 编译修复 2025-12-12 16:16:15 +08:00

流体动力学插件使用指南

概述

流体动力学插件提供基于物理的流体模拟功能支持水、油、熔岩等多种流体类型。插件采用SPH光滑粒子流体动力学方法实现能够模拟流体的基本物理行为包括流动、碰撞、压力和粘性效应。

安装和启用

1. 插件结构

fluid_dynamics/
├── __init__.py
├── plugin.py                 # 插件主入口
├── core/
│   ├── fluid_world.py        # 流体世界管理
│   ├── fluid_solver.py       # 流体求解器
│   ├── fluid_material.py     # 流体材质系统
│   └── fluid_visualizer.py   # 流体可视化
├── components/
│   ├── fluid_emitter.py      # 流体发射器
│   ├── fluid_obstacle.py     # 流体障碍物
│   └── fluid_domain.py       # 流体域
├── utils/
│   ├── math_utils.py         # 数学工具
│   └── performance_utils.py  # 性能工具
└── config/
    └── default_config.json   # 默认配置

2. 启用插件

在主程序中启用插件:

# 加载插件
fluid_plugin = world.plugin_manager.load_plugin("fluid_dynamics")

# 启用插件
world.plugin_manager.enable_plugin("fluid_dynamics")

核心功能

1. 流体域 (FluidDomain)

定义流体模拟的边界和空间:

from plugins.user.fluid_dynamics.components.fluid_domain import FluidDomain

# 创建流体域
domain = FluidDomain(
    min_bound=Point3(-10, -10, 0),
    max_bound=Point3(10, 10, 20)
)
fluid_world.add_fluid_domain(domain)

2. 流体发射器 (FluidEmitter)

生成流体粒子:

from plugins.user.fluid_dynamics.components.fluid_emitter import FluidEmitter

# 创建发射器
emitter = FluidEmitter(
    position=Point3(0, 0, 10),
    fluid_world=fluid_world
)
emitter.set_emit_rate(50)  # 每秒发射50个粒子
emitter.set_emit_velocity(Vec3(0, 0, 2))  # 向上发射
fluid_world.add_fluid_emitter(emitter)

3. 流体障碍物 (FluidObstacle)

定义流体模拟中的障碍物:

from plugins.user.fluid_dynamics.components.fluid_obstacle import FluidObstacle

# 创建障碍物
obstacle = FluidObstacle(
    position=Point3(0, 0, 5),
    size=Vec3(2, 2, 2),
    obstacle_type="box"
)
fluid_world.add_fluid_obstacle(obstacle)

4. 流体材质 (FluidMaterial)

定义流体的物理和视觉属性:

from plugins.user.fluid_dynamics.core.fluid_material import FluidMaterial

# 创建水材质
water_material = FluidMaterial(
    name="water",
    fluid_type=FluidMaterial.TYPE_WATER
)

# 创建熔岩材质
lava_material = FluidMaterial(
    name="lava", 
    fluid_type=FluidMaterial.TYPE_LAVA
)

高级功能

1. 性能优化

插件提供自适应性能优化:

from plugins.user.fluid_dynamics.utils.performance_utils import FluidPerformanceOptimizer

# 创建性能优化器
optimizer = FluidPerformanceOptimizer(fluid_world)

# 启用性能优化
optimizer.optimize_for_performance()

# 获取性能报告
report = optimizer.get_performance_report()
print(f"当前FPS: {report['current_fps']}")

2. 可视化控制

调整流体的视觉效果:

# 设置流体颜色
visualizer.set_fluid_color(Vec4(0.0, 0.8, 1.0, 0.7))

# 创建粒子系统
particle_system = visualizer.create_particle_system("fluid_particles", 2000)

API参考

FluidWorld类

  • add_fluid_domain(domain): 添加流体域
  • remove_fluid_domain(domain): 移除流体域
  • add_fluid_emitter(emitter): 添加发射器
  • remove_fluid_emitter(emitter): 移除发射器
  • add_fluid_obstacle(obstacle): 添加障碍物
  • remove_fluid_obstacle(obstacle): 移除障碍物
  • update(dt): 更新流体世界
  • pause(paused): 暂停/恢复模拟
  • set_time_scale(scale): 设置时间缩放

FluidSolver类

  • set_viscosity(viscosity): 设置粘度
  • set_density(density): 设置密度
  • set_gravity(gravity): 设置重力
  • solve(dt): 执行流体求解

FluidMaterial类

  • TYPE_WATER: 水类型
  • TYPE_OIL: 油类型
  • TYPE_LAVA: 熔岩类型
  • TYPE_SLIME: 粘液类型
  • TYPE_BLOOD: 血液类型
  • get_density(): 获取密度
  • get_viscosity(): 获取粘度
  • get_color(): 获取颜色

示例场景

创建一个简单的流体演示:

def create_fluid_demo(world):
    # 1. 获取插件实例
    fluid_plugin = world.plugin_manager.get_plugin("fluid_dynamics")
    fluid_world = fluid_plugin.fluid_world
    
    # 2. 创建流体域
    domain = FluidDomain(Point3(-5, -5, 0), Point3(5, 5, 10))
    fluid_world.add_fluid_domain(domain)
    
    # 3. 创建发射器
    emitter = FluidEmitter(Point3(0, 0, 8), fluid_world)
    emitter.set_emit_rate(30)
    fluid_world.add_fluid_emitter(emitter)
    
    # 4. 创建障碍物
    obstacle = FluidObstacle(Point3(0, 0, 3), Vec3(1, 1, 3), "box")
    fluid_world.add_fluid_obstacle(obstacle)
    
    # 5. 设置求解器
    solver = FluidSolver(fluid_world)
    fluid_world.solver = solver

故障排除

常见问题

  1. 性能问题

    • 减少粒子数量
    • 降低发射器速率
    • 使用性能优化器
  2. 稳定性问题

    • 调整时间步长
    • 检查边界条件
    • 验证物理参数
  3. 可视化问题

    • 检查粒子系统配置
    • 确认渲染节点正确附着
    • 调整透明度和颜色设置

配置选项

编辑 config/default_config.json 文件可以调整默认参数:

{
  "simulation": {
    "time_step": 0.016,
    "gravity": [0, 0, -9.81],
    "viscosity": 0.001,
    "density": 1000.0
  },
  "performance": {
    "max_particles": 5000,
    "update_frequency": 60
  }
}