以下都是为了不直接在 blender 的 script ide 里写脚本而做,直接在 blender 里写的话就没什么参考意义了。
首先是2个blender的设置选项,建议开启,会比较方便。
开发选项启用后,你在一些菜单上右键的话,会多出来 在线Python参考,复制Python命令 这种按钮出来。
Python工具提示启用后,则很多操作会把它对应的 Python api 直接显示给你。
都是可以加快我们开发速度的功能。
然后是 IDE 的选择,这个比较自由,vscode, PyCharm 看你高兴。
python 环境管理,建议使用 Miniconda,可以看我之前的文章。
首先,blender 的 python api 包叫 bpy,这个玩意很特殊,它要求你的python版本在 3.7 ~ 3.8 之间,也是没谁了,太奇葩了,所以我们需要用 conda 创建一个 python 3.7 的环境,专门用来给 blender 用。
一开始我是尝试直接用 pip 安装 bpy 的,结果遇到了
LookupError: unknown encoding: future_fstrings
这种错误,百度一番发现可以用下面这个方式解决。
python -m pip install --upgrade pip wheel future-fstrings
结果后来发现,我和 bpy 这个包死磕就是在浪费时间,因为怎么折腾,它在 IDE 里都是报错的状态,这就很叫人头痛了。
然后我就发现根本不用装 bpy 这个包,有一个包叫 fake-bpy-module ,安装和你安装的 blender 相匹配版本的包,在 ide 中代码提示就不会报错了。这个包就是专门用来解决你在外部 ide 中开发 blender python api 用的,所以记住,千万不要跟 bpy 这个包死磕。
其实到这一步,已经够我们开发 blender 脚本的了,如果要执行的话,打开 blender,切到 Scripting 里,打开我们编写的 .py 文件,然后点运行就可以了。
但这样我们还需要打开 blender ,但有时我们是不想打开 blender 的。
还有一个办法是通过 subprocess 包在后台来执行脚本。
import subprocess
def run_blender_script(blender_path, internal_script_path, blend_file_path):
try:
# 在Blender外部运行,打开指定文件并执行脚本
subprocess.run([blender_path, blend_file_path, '-b', '-P', internal_script_path], check=True)
except subprocess.CalledProcessError as ex:
print(f"Error running Blender: {ex}")
if __name__ == '__main__':
blender_path = 'blender.exe的安装位置,不要加.exe后缀'
blender_file_path = '创建1个单独的 .blend 文件,做为我们的工作场景'
internal_script_path = '我们编写的要在 blender 中执行的脚本'
run_blender_script(blender_path, internal_script_path, blender_file_path)
顺便说个题外话,如果想从 blender 中导出 unity 适用的 .fbx 文件,这几个选项很重要。
首先是场景属性中,确保单位是公制的1米(和unity的一样)。
变换里,z向前,y向上,还有应用变换一定要勾上,不勾不会改的。