ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

看懂 AI 替你写的代码:Blender 5.2 Python 基本盘

看懂 AI 替你写的代码:Blender 5.2 Python 基本盘

看懂 AI 替你写的代码:Blender 5.2 Python 基本盘

这是「Blender 5.2 从零到一」系列第 3 篇。上一篇你说一句"建个雪人",AI 写代码替你建好了——本篇掀开这层纸:那段代码就跑在 Blender 自带的 Python 里,你不但能看懂,还能亲手写。目标:15 分钟,认识写代码的工作区、用控制台试命令、跑起第一个脚本、逐行读懂雪人代码。懂了它,AI 建不动的地方你自己补得上,第 4 篇的户型实战才能放开了跑。

一、Blender 自带一门 Python,你什么都不用装

回收 01 篇的伏笔:Blender 安装目录里那个python3.13.dll——Blender 内置了一整套 Python 环境,写代码、跑脚本全在里面,不用装 Python、不用配环境,打开 Blender 就有。

学它不是为了当程序员,三个实在的理由:

  • 看懂 AI 在干什么:AI 每次调execute_blender_code,执行的就是一段 Python。看得懂,你才敢放它跑;看不懂,出了错只能干瞪眼。
  • 补上 AI 的短板:AI 建单件模型很快,但"把场上 30 个物体每个都换个名字"这种批量活,一段循环代码比来回对话快得多。
  • 排错有底气:02 篇 AI 自己也翻过车(中文节点名KeyError),看懂报错,你和 AI 才是搭档而不是乘客。

本篇不教 Python 语法(变量、循环那些),只教 Blender 里的用法——遇到看不懂的语法,直接丢给 AI 问,现学现用。

二、Scripting 工作区:写代码的界面摆法

顶栏标签切到Scripting——01 篇说过,工作区就是预设的界面摆法,这一副是给写代码准备的:

区域在哪管什么
3D 视口左上看代码跑出来的结果
文本编辑器中间写脚本的地方——没内容时全黑,不是死机
Python 控制台左下一行一行试命令

界面和 01 篇的布局完全不同,但场景还是那个场景——切回布局标签,物体原样都在。

检查点:切到 Scripting 再切回布局,场景没变;左右两块面板你能叫出名字。

三、Python 控制台:一问一答试 API

鼠标点进左下的Python 控制台面板,会看到一行提示和一个光标,等你说第一句。输入这行,回车:

print(bpy.data.objects['Camera'])

print 把场景里名叫Camera的物体递给你看:<bpy_struct, Object("Camera") at 0x...>——这就是"API"的意思:Blender 把自己的一切都开放出来,让你用代码问、用代码改。顺带一个小坑:不加print直接敲bpy.data.objects['Camera']回车,控制台只把原话回显一遍,加 print 才把对象倒出来——很多人第一下都栽在这。

再故意输错一次——把objects打成objecs:

红色AttributeError糊你一脸。这是常态不是事故:写代码的一半时间在看报错,红字最后一行就是答案——它不但告诉你objecs这个东西不存在,还贴心地问了一句Did you mean: 'objects'?(你是不是想打 objects)。看完改对再回车,谁都会犯的错。

检查点:查询Camera能列出它的位置;故意打错能认出红字最后一行是关键信息。

四、第一个脚本:十行代码,十个球

控制台是一问一答,脚本是整段执行。到上面的文本编辑器,点菜单文本→新建,把这段粘进去:

importbpyimportmathforiinrange(10):angle=i/10*2*math.pi x=math.cos(angle)*2y=math.sin(angle)*2bpy.ops.mesh.primitive_uv_sphere_add(radius=0.3,location=(x,y,0.3))

点编辑器右上角的▶ 运行脚本,看左上视口——中间十行代码,左上十个球围成一个圈:

这十行代码干了什么:for i in range(10)是"重复十次",每次算出一个圆周上的角度angle,换成 x、y 坐标,然后调primitive_uv_sphere_add在那个位置放一个球。手动加一个球、按 G 挪到位、再重复九次,大约一分钟;改 10 成 50,代码一行不动,手动就得五分钟——重复劳动交给循环,这就是代码的价值。

想让成果留着:编辑器菜单文本→另存为,存成rings.py。这个文件在硬盘上,任何一台 Blender 都能文本→打开再跑。

检查点:视口里十球成环;把 10 改成 6 再跑一次,变成六球环(改完先全选旧球删掉,A全选 →X删除——别让两拨球叠一起)。

五、bpy 三板斧:AI 代码的语法最小集

AI 写的代码看着五花八门,词汇量其实很小,翻来覆去就三样。在控制台里各试一条:

1.bpy.data——仓库管理员,管场景里所有的"东西":

bpy.data.objects['Camera']# 按名字取物体bpy.data.materials.new('红色')# 新建一个材质

2.bpy.ops——操作员,管所有"动作",和你点界面按钮一一对应:

bpy.ops.mesh.primitive_uv_sphere_add(radius=0.3,location=(0,0,0))

这条就是界面上的添加→网格→球体——01 篇你按Shift+A干的事,代码里就是它。你在界面上每点一个按钮,几乎都对应一条bpy.ops。

3.bpy.context——当下状态,管"现在":当前选中了谁、在什么模式:

bpy.context.active_object# 当前选中的物体

记住这个分工:找东西用 data,做动作用 ops,看现状用 context。AI 的代码你逐行看,九成是这三类。三条命令在控制台里各跑一遍,输出对得上就说明你使唤得动它们。

检查点:三条命令都在控制台跑过;能说出"添加球体"对应哪一板斧。

六、逐行读雪人代码:AI 的手法全在这段里

把 02 篇 AI 建雪人的代码翻出来(下面是同一份,加了行号讲解),粘进文本编辑器,我们逐行过:

importbpy specs=[('Snowman_Body',0.50,0.50),('Snowman_Middle',0.35,1.30),('Snowman_Head',0.25,1.85),]forname,r,zinspecs:bpy.ops.mesh.primitive_uv_sphere_add(radius=r,location=(0,0,z))obj=bpy.context.active_object obj.name=name bpy.ops.object.shade_smooth()
  • 第 3-7 行:specs是一张清单——每个雪人部件的名字、半径、高度。AI 把你的话"三个球越来越小叠在一起"翻译成了三个三元组,这就是"理解需求"的产物。
  • 第 8 行:for循环——三个部件除了数字全是一样的活,那重复就交给循环。
  • 第 9 行:bpy.ops...add,第二板斧,添加球体,location=(0, 0, z)里的 z 就是清单里的高度。
  • 第 10-11 行:刚加的球是"当前选中的"(第三板斧context),把它改名叫清单里的名字。
  • 第 12 行:shade_smooth()平滑着色——界面右键菜单里也有它,同一个动作的代码形态。

后面上材质那步 AI 还翻过一次车:它按英文名找材质节点,中文界面下节点名字被翻译了,KeyError红字报错——AI 把查找方式从"按名字"改成"按类型",第二段代码就修好了。这就是报错的价值:红字不是说"完了",是说"改这儿"。

看不懂的行不用硬啃:选中丢给 AI 问"这行是干嘛的",比查教程快。读代码和问 AI,是学的两条腿,不背。

检查点:能指着雪人代码说出"哪一行在重复、哪一行在添加物体、哪一行在改名"。

七、print 与报错:给代码装上眼睛

脚本跑完,结果都在视口里,但代码"看见了什么"你看不到——用print。在十球环代码末尾加一行:

print('我建好了',len(bpy.data.objects),'个物体')

再点 ▶ 运行。输出在哪?默认看不见。打开它:顶部菜单窗口→切换系统控制台(英文版 Window → Toggle System Console),弹出一个黑底窗口,print 那句话就在里面——我建好了 6 个物体,数字取决于你场景里有几个物体:

这个黑窗口同时是报错的老家:脚本出错时,红字会完整打在这里,比编辑器顶栏那一行小字详细得多。排错的固定动作:报错了 → 切到系统控制台 → 看最后一行。

三种最常见的红字,见过的都眼熟:

报错意思典型原因
KeyError按名字找,没这个东西名字打错、中文界面节点被翻译(02 篇实录)
AttributeError有这个东西,没这个功能拼写错:objecs打成这样就是它
ModuleNotFoundErrorimport 的库不存在库名写错,或者真的没装

检查点:print 的输出在系统控制台里看到了;能说出 KeyError 和 AttributeError 的区别。

八、番外:导出的 .glb 是什么?struct 真能解

04 篇里 AI 建完模导出的 .glb(网页 3D 版就是它变的)也是二进制。但它和 .blend 是两个世界:

  • .blend 是 Blender 的私有格式:场景内存原样打包,开头一张 DNA 自描述表,版本一升级布局就变——用 struct 硬啃是自虐。想用 Python 看它,正路是让 Blender 自己读:blender -b 工程.blend --python-expr "import bpy; print([o.name for o in bpy.data.objects])",一条命令后台盘点,知道有这招就行。
  • .glb 是 Khronos 制定的开放标准(glTF 2.0 Binary):格式说明书全公开,结构规整——struct 真就能解。

glb 的骨架就三段:

区块装什么
12 字节文件头魔数 “glTF” + 版本号 + 文件总长
JSON chunk场景的「目录」:物体名、层级、材质、网格
BIN chunk「正文」:顶点坐标、法线、索引的数值本体

struct + json 两个标准库,十行读开:

importstruct,json data=open('20_floorplan.glb','rb').read()magic,version,total=struct.unpack_from('<4sII',data,0)print(magic,version,total)# b'glTF' 2 378468 —— 正好等于文件字节数jlen,jtype=struct.unpack_from('<I4s',data,12)# 12 字节起是 JSON chunk 的头scene=json.loads(data[20:20+jlen])# 切出 JSON 部分再交给 jsonprint(len(scene['meshes']),'个网格')# 202print(len(scene['materials']),'个材质')# 23

JSON chunk 打开就是整个场景的目录——每个物体的名字、父子关系、用了哪个材质全在里面。还能顺便验货:每个网格的 POSITION 数据自带 min/max(顶点包围盒),遍历取极值就能量出模型的真实尺寸,Blender 都不用开:

mins=[1e9]*3;maxs=[-1e9]*3forminscene['meshes']:forpriminm['primitives']:a=scene['accessors'][prim['attributes']['POSITION']]foriinrange(3):mins[i]=min(mins[i],a['min'][i])maxs[i]=max(maxs[i],a['max'][i])print('%.2f x %.2f x %.2f'%(maxs[0]-mins[0],maxs[1]-mins[1],maxs[2]-mins[2]))# 11.10 x 2.80 x 11.60 —— 户型外框 11.1 米 x 11.6 米,墙高 2.8 米

这是我实测 04 篇户型 glb 的真实输出:202 个网格,量出外框 11.10 × 11.60 米,和户型图上标的尺寸链(横向 3600+450+4050+3000,纵向 700+2200+1500+1700+4500+1000)分毫不差。AI 建的模对没对上图纸,不打开任何软件就能验完。

想再往深走(直接读写顶点、改动画)再上库:pip install trimesh或pygltflib。但「看结构、验尺寸、查材质」这个层面,标准库就够。

检查点:struct 读开一个 glb,终端打出网格数和外包络尺寸。

九、你现在的位置

三篇下来,你手里的家伙事比想象的多。对照一遍:

  • 界面:添加、G/R/S、编辑模式、渲染出图,捏过方凳
  • AI:装好了 MCP 通道,一句话建模、迭代、让 AI 自查返工都跑过
  • Python:Scripting 工作区、控制台查状态、跑过十球环、读懂了雪人代码、会看 print 和三种报错
  • 加餐:能用 struct+json 读开 .glb,不装库不打开 Blender 就能验货模型

哪条没打勾,回到对应步骤重做,一分钟的事。

本系列最后一篇,把三篇的家底一次用尽:

篇标题你将学会
01从下载到捏出第一个模型(已完成)安装、界面、第一张渲染图、第一个模型
02三步装上 AI 大脑(已完成)MCP 安装连通、AI 建模、看-判断-修闭环
03看懂 AI 替你写的代码(本篇)脚本、控制台、bpy 三板斧
04一张户型图变成 3D 房完整实战:AI + Python + 素材全上

第 4 篇不学新东西——把你已经会的全用上:AI 看着户型图建模,你看懂它每一行代码,素材库补家具,Python 批量铺墙铺地板。一张平面图,走进去。


有问题留言,看到都会回。下一篇见。

参考链接

  • Blender Python API 文档(bpy 三板斧的官方词典,搜不到的属性来这里查):https://docs.blender.org/api/current/
  • Blender 官网:https://www.blender.org/
    第 4 篇不学新东西——把你已经会的全用上:AI 看着户型图建模,你看懂它每一行代码,素材库补家具,Python 批量铺墙铺地板。一张平面图,走进去。

有问题留言,看到都会回。下一篇见。

参考链接

  • Blender Python API 文档(bpy 三板斧的官方词典,搜不到的属性来这里查):https://docs.blender.org/api/current/
  • Blender 官网:https://www.blender.org/
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进