奇异吸引子 (Strange Attractor)
简介
奇异吸引子将混沌微分方程转化为优雅的节奏化视觉艺术。通过模拟点在三维空间中受数学规则驱动的轨迹,你可以创造出展现“混沌形状”的复杂有机结构。
核心能力:
- 数学驱动艺术:可视化经典系统(如 Lorenz, Rossler)或编写你自己的方程。
- 双渲染模式:在基于 CPU 的高质量拖尾渲染与基于 GPU 的海量粒子云渲染之间自由切换。
- 电影级控制:完整的时间线集成,支持相机运镜与参数动画。
界面概览
所有控制项位于右侧的属性面板中,分为四个主要部分:
- Geometry (几何):定义核心微分方程 (
dx,dy,dz) 和空间变换。 - Parameters (参数):定义方程中使用的自定义常量(如
sigma,rho)。 - Settings (设置):配置模拟物理属性(步长、粒子数、积分器)。
- Appearance (外观):调整视觉风格(配色、点大小、拖尾长度)。
配置指南
1. Geometry (几何方程)
这里定义速度场(Vector Field)。
- dx / dy / dz:定义位置 $(x, y, z)$ 处的速度分量的微分方程。
- 支持变量:
x,y,z,t(时间)。 - 支持函数:
sin,cos,tan,exp,log,sqrt,abs等。 - 示例 (Lorenz 系统):
- dx:
sigma * (y - x) - dy:
x * (rho - z) - y - dz:
x * y - beta * z
- dx:
- 支持变量:
- Scale / Offset (缩放/偏移):调整吸引子在场景中的大小和位置。
- 提示:不同的吸引子方程产生的数值范围差异巨大。使用 Scale 将其调整到合适的相机视野内。
2. Parameters (自定义参数)
建议不要在方程中硬编码数字,而是在这里定义命名参数。
- 添加参数:创建如
a,b,sigma这样的变量。 - 使用方法:在 Geometry 面板的方程中直接使用这些变量名。
- 实时调节:在播放过程中修改这些数值,可以动态演变吸引子的形状。
3. Settings (模拟设置)
控制系统随时间的演化方式。
- Render Mode (渲染模式):
- CPU:专为 线条与拖尾 (Lines & Trails) 设计。支持平滑、抗锯齿且不仅限宽度的拖尾绘制。适合高质量视频导出。建议粒子数 < 10,000。
- GPU:专为 海量点云 (Massive Point Clouds) 设计。利用 GPGPU 技术模拟数百万个粒子。此模式下不显示拖尾。适合实时性能表现和流体般的密度效果。
- Particle Count (粒子数):系统中独立粒子的数量。
- Time Step (时间步长 dt):
dt_min/dt_max:积分步长。值越小,模拟越精确但速度越慢。sub_steps:每帧渲染前的物理计算次数。增加此值可以加快视觉上的演化速度,同时保持数值稳定性。
- Warmup (预热):
warmup_steps:在绘制第一帧之前预先模拟的步数。用于将粒子从初始随机框引导至吸引子轨道上。stagger_min/stagger_max:为每个粒子随机增加预热步数。这能防止所有粒子在开始时聚集成同步的一团,使分布更自然。
- Initialization (初始化):
Bounds:定义粒子初始生成的 X/Y/Z 最小/最大坐标范围。
4. Appearance (外观风格)
- Dot Size (点大小):粒子头部的直径。
- Palette (配色方案):颜色列表。粒子会根据其索引值从列表中选取颜色(渐变映射)。
- 提示:使用 "Randomize" 按钮可以快速生成符合色彩理论的配色方案。
- Trails (仅限 CPU 模式):
show_trails:开启/关闭拖尾。trail_lifetime:拖尾保留的历史时长(秒)。警告:过长的寿命(>15秒)配合大量粒子会消耗极大的内存。line_weight:拖尾线条的粗细。fade_trails:开启后,拖尾会随时间逐渐变透明。
性能与最佳实践
| 目标 | 推荐设置 |
|---|---|
| 高质量视频导出 | CPU 模式。particle_count ~2,000。trail_lifetime 5-10秒。sub_steps 5-10。 |
| 实时流体感 | GPU 模式。particle_count 100,000+。sub_steps 2。 |
| 锐利细节 | 减小 dt (如 0.005) 并增加 sub_steps。 |
| 平滑开场 | 设置 warmup_steps 至少 100,避免开场时的随机框分布造成的视觉突兀。 |
疑难解答 (Troubleshooting)
- 粒子发散/爆炸:积分步长
dt可能相对于当前方程的能量过大。尝试减小dt_max。 - 拖尾不连贯:增加
sub_steps或降低整体模拟速度。 - 内存不足 (OOM):减少
trail_lifetime或切换至 GPU 模式(GPU 模式不存储历史轨迹)。
