| .. | ||
| components | ||
| config | ||
| core | ||
| utils | ||
| __init__.py | ||
| demo_fluid_scene.py | ||
| plugin.py | ||
| README.md | ||
流体动力学插件使用指南
概述
流体动力学插件提供基于物理的流体模拟功能,支持水、油、熔岩等多种流体类型。插件采用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
故障排除
常见问题
-
性能问题:
- 减少粒子数量
- 降低发射器速率
- 使用性能优化器
-
稳定性问题:
- 调整时间步长
- 检查边界条件
- 验证物理参数
-
可视化问题:
- 检查粒子系统配置
- 确认渲染节点正确附着
- 调整透明度和颜色设置
配置选项
编辑 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
}
}