Blender+AI 科研绘图智能体 · 详细介绍
一句话定位 :一个用 AI 驱动 Blender(Python/bpy + blender-mcp 实时接口)为科研论文制作
SCI / Nature 级插图与动画的智能体。调用命令 /Blender绘图。
它和"手动建模"不同------全程用代码程序化建模、打光、渲染 ,可复现、可批量、可对比;
它和"普通脚本"也不同------遇到报错能自我诊断并修复,不会停在错误上卡死 ;
它还和"只追求好看的渲染"不同------按物理机理画,经得起审稿。
目录
- 能力概览
- 错误自愈循环(含完整错误分类表)
- 两条铁律
- Harness 渲染流水线(含契约示例)
- 可复用工具库(含函数清单)
- 双风格输出(含配置示例)
- 科研风格与科学正确性(含 Knudsen 算法)
- 动画能力(含生命周期公式)
- 经验沉淀与可追溯
- 使用指南 / 适用场景 / 文件结构
1. 能力概览
| 能力 | 说明 |
|---|---|
| 代码化绘图 | bpy 程序化生成模型/材质/灯光/相机,固定随机种子 seed 可复现、可对比 |
| 报错自愈 | 抓 traceback → 分类 → 打补丁 → 重试(≤3 轮),不卡死 |
| 渲染流水线 | check→preview→full 三道闸,只走 headless,自动诊断、断点续渲 |
| 双风格输出 | 一套脚本出白底论文版 + 黑底炫光版,结构完全一致 |
| 科学正确 | 按机理画(如气体 Knudsen 气-固碰撞、吸附/脱附),不只是好看 |
| 动画 | 微观动态、无缝循环,逐帧程序化驱动(非烘焙海量关键帧) |
| 可追溯 | 工具库 + 16+ 条避坑手册 + 完整对话记录 |
c
Blender科研绘图智能体V1.0\
├── Blender科研绘图智能体V1.0.md ← 主规范(两条铁律 / 错误自愈循环 / Harness 用法)
├── harness\ ← 【harness engineering 部分】
│ ├── run.ps1 ← 编排器:headless + check→preview→full 三道闸
│ ├── sci_render.py ← 契约加载 + 预检 + traceback 自动分类
│ └── CONTRACT.md ← 图脚本契约说明
├── lib\
│ └── blender_sci.py ← 可复用工具库(已自测通过)
├── lessons\
│ └── blender_lessons.md ← 16 条避坑 + Harness 工程化
├── templates\
│ ├── figure_template.py ← 契约范例(复制改)
│ ├── example_transport_two_styles.py ← 本项目静图(白/黑两版)
│ └── example_anim_loop.py ← 本项目动画
└── 对话记录\
├── 对话_2026-06-22.md ← 结构化全过程复盘
└── raw_*.jsonl (24MB) ← 原始逐条对话(完整)
先看看效果

2. 错误自愈循环
核心理念:遇到任何报错不停在原地等用户,而是自动往前走。
写脚本 → 低成本验证 → 读输出
├─ 成功 → 放大到全量
└─ 报错 → 抓 traceback → 分类 → 打最小补丁 → 回到验证(自循环 ≤3 轮)
→ 仍不过,才带着证据(traceback + 已尝试方案)问用户
完整错误分类对策表:
| 症状 / 报错 | 根因 | 修复 |
|---|---|---|
No data received / 像死机 |
用实时接口同步等重渲染,socket 超时(Blender 其实还活着) | 改 blender -b -P headless |
KeyError: 'Transmission Weight' |
Blender 4.x 改了 Principled 的 socket 名 | if k in node.inputs: 特性探测后赋值(safe_in) |
AttributeError 某属性不存在 |
API 版本差异 | try/except 包裹;或 hasattr 判定 |
| GPU 不渲 / 用了 CPU | headless 没启用 OptiX 设备 | 脚本里启 OptiX 设备 + cycles.device='GPU' |
| 点云在材质预览看不见 | Mesh to Points 不显示 | 用 Instance on Points(实例 IcoSphere) |
| 自发光在白底糊成白 | 高强度自发光裁剪到白 | 降发光强度;辉光阈值卡在白底亮度之上(≈1.0) |
\N character escape / unicodeescape |
字符串里 Windows 路径 E:\New... 的 \N 被当转义 |
用 r"..." 原始字符串或双反斜杠 |
| 第三方插件注销 traceback | 用户机器装了别的插件 | 无害,忽略,只看脚本自己的打印判断成败 |
工具调用纪律:一旦出现"格式错误"提示,立即用规范格式原样重发,并说明这是调用格式问题、不是渲染失败。
3. 两条铁律
铁律一 · 重渲染只走 headless。
blender -b -P 脚本.py 命令行后台渲,彻底绕开实时接口同步等渲染的 socket 超时。
实时接口(blender-mcp,端口 9876)只干轻活:建场景给你在视口看、探活、调视角------重渲染永远不走它。
铁律二 · 贵操作之前先用最便宜方式验证。
先渲 1 帧 / 低清预览,动画先 frame_step 抽几帧,确认无报错、构图对,再开全量高清。
省下的是几十分钟的白渲。
4. Harness 渲染流水线
把上面的纪律做成确定性代码闸门,让它没机会走错------这是相对"纯提示词智能体"的关键升级。
图脚本契约:任何图脚本只需实现这个最小接口,就能被流水线自动驱动:
python
STYLES = { "white": {...}, "dark": {...} } # 命名样式预设
def build(style: dict) -> dict: # 只"建场景",绝不渲染
bs.clear_scene()
... # 建模 / 材质 / 世界 / 灯 / 相机 / setup_cycles
return {"kind": "still"} # 或 {"kind":"anim","frames":(1,120,1)}
流水线自动做的事:
| 闸门 | 动作 |
|---|---|
check |
跑 build,只建不渲;预检(有物体/有相机/引擎已设);零 GPU,几秒 |
preview |
480×384、≤24 采样;动画自动抽帧 |
full |
用 STYLES 的全量采样/分辨率;动画断点续渲(已存帧跳过) |
任一闸门失败 → 抓 traceback → 错误库分类 → 打印结构化诊断 HARNESS_DIAGNOSIS → 停在该闸门。
一行命令:pwsh harness/run.ps1 -Fig 图.py -Style white(先 -Stages check 零成本预检)。
5. 可复用工具库 lib/blender_sci.py
即拿即用、跨版本防崩的函数:
text
clear_scene() 清场景
safe_in(node, key, value) 跨版本安全赋值(防 socket 改名 KeyError)
emit_mat / solid_mat 自发光 / 实色材质
tube / ball / group_under_empty 连杆 / 球 / 按锚点成组(便于动画整体缩放)
point_cloud(name, coords, r, mat) 海量点 → Instance on Points(预览/渲染都可见)
pearl_network(half, bond, n, seed) 珍珠链纳米颗粒分形网络(气凝胶正确画法)
gas_knudsen_path(centers, R, rng) 气体 Knudsen 气-固碰撞路径
set_world / add_floor / add_area / track_camera / set_glare 世界/地/灯/相机/辉光一键搭
setup_cycles / render_still / render_anim Cycles+OptiX 配置与渲染(headless 内自动启用 GPU)
life_pulse / travel_band / grow_out 无缝循环动画的生命周期函数
6. 双风格输出(一套脚本两版)
build_and_render(WHITE / DARK),固定随机种子保证两版结构完全一致,只换材质/世界/打光/色彩管理:
python
WHITE = dict(world=(0.93,0.94,0.96), glare=False, vt='Standard', exposure=0.0, ...) # 论文正文
DARK = dict(world=(0.02,0.03,0.06), glare=True, vt='AgX', exposure=-0.5, ...) # 封面/PPT
- 白底论文版:灰白底 + 实色 + 收敛辉光(阈值≈1.0,只让饱和载子起晕、白底不糊);
- 黑底炫光版:深底 + 自发光 + Fog Glow 辉光(动态发光/泯灭只在黑底好看)。
7. 科研风格与科学正确性
风格约定 :气凝胶=珍珠链纳米颗粒分形网络(99% 孔隙,非粗壁泡沫);
载子配色------声子=橙(沿固相骨架)、气体分子=青(气相孔隙)、光子=品红(辐射)、耦合点=琥珀星芒。
科学正确性(以气体为例) :气凝胶里气体处在 Knudsen 区 ------孔比气体平均自由程还小,
所以气体主要撞固体孔壁(气-固碰撞主导),这正是气凝胶隔热的根本原因。算法:
在孔隙内取起点 → 沿方向做射线-球面求交,找最近的颗粒表面
→ 命中点(在表面上)= 一次气-固碰撞 → 按表面法向做漫反射 → 继续
→ 折线拐点全落在固体表面;并体现 吸附(贴表面)/ 脱附(离表面)/ 碰撞;气体约束在多孔结构内不外逃
尾迹做成"飞机尾迹"式头实尾隐;碰撞点即耦合点,且筛到靠相机一侧,避免被前排颗粒挡住。
8. 动画能力(微观动态)
骨架静止作舞台,能量载子用错相位周期生命周期函数 + frame_change_pre 处理器逐帧驱动
(不烘焙海量关键帧;headless render(animation=True) 时处理器照常触发)。归一化时间 t=(frame-1)/N,
频率取整 → 无缝循环:
python
life_pulse(t, phase, freq, sharp) # 0→1→0 平滑脉冲:出现/泯灭
travel_band(t, x_phase, freq, w) # 沿坐标扫过的行波:固体导热脉冲
grow_out(t, phase, freq) # 从原点向外生长→消散:辐射发射
黑底上 scale→0 或 发光→0 即"泯灭";scale 0→1(锚点在原点)即"向外辐射"。
表现:气体碰撞、辐射一波波发射、声子行波、耦合点闪现泯灭。
9. 经验沉淀与可追溯
lessons/blender_lessons.md------ 16+ 条避坑/自愈手册(症状 → 根因 → 修复);对话记录/------ 完整原始 transcript + 结构化复盘,所有决策可追溯。
10. 使用指南 / 适用场景 / 文件结构
使用
- 快速调用:输入
/Blender绘图,描述要画的图(科学含义、对象、用途:正文白底/封面黑底、静图或动画)。 - 走流水线:写成契约脚本 →
pwsh harness/run.ps1 -Fig 图.py -Style white。 - 环境:Blender
E:\New Folder\blender.exe(4.1);headlessblender -b -P 脚本.py -- [white|dark|preview];实时接口端口 9876。
适用场景 :论文正文插图 / 期刊封面 / 目录图(TOC)/ 答辩与报告 PPT / 微观机理动画。
尤其适合需要可复现、可批量、需多轮迭代、且对物理正确性有要求的科研配图。
文件结构
Blender科研绘图智能体V1.0/
├── Blender科研绘图智能体V1.0.md # 主规范(铁律 + 自愈循环 + 错误分类表)
├── harness/ # 渲染流水线
│ ├── run.ps1 # 编排器(headless + 三道闸)
│ ├── sci_render.py # 契约加载 + 预检 + 自动诊断
│ └── CONTRACT.md # 图脚本契约
├── lib/blender_sci.py # 可复用工具库
├── lessons/blender_lessons.md # 避坑/自愈手册
├── templates/ # 范例:两版静图 / 循环动画 / 契约模板
└── 对话记录/ # 原始 transcript + 复盘
