Blender+AI 科研绘图智能体详细介绍

Blender+AI 科研绘图智能体 · 详细介绍

一句话定位 :一个用 AI 驱动 Blender(Python/bpy + blender-mcp 实时接口)为科研论文制作

SCI / Nature 级插图与动画的智能体。调用命令 /Blender绘图

它和"手动建模"不同------全程用代码程序化建模、打光、渲染 ,可复现、可批量、可对比;

它和"普通脚本"也不同------遇到报错能自我诊断并修复,不会停在错误上卡死 ;

它还和"只追求好看的渲染"不同------按物理机理画,经得起审稿。


目录

  1. 能力概览
  2. 错误自愈循环(含完整错误分类表)
  3. 两条铁律
  4. Harness 渲染流水线(含契约示例)
  5. 可复用工具库(含函数清单)
  6. 双风格输出(含配置示例)
  7. 科研风格与科学正确性(含 Knudsen 算法)
  8. 动画能力(含生命周期公式)
  9. 经验沉淀与可追溯
  10. 使用指南 / 适用场景 / 文件结构

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);headless blender -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 + 复盘