使用Blender作为python模块

您所在的位置:网站首页 blender不能渲染 使用Blender作为python模块

使用Blender作为python模块

2023-03-30 10:49| 来源: 网络整理| 查看: 265

简介

blender具有内置的python,可以控制大多数内部命令。您也可以从GUI控制台调用它,也可以创建脚本文件并执行它。

由于主体是Blender,所以传递的脚本由内置在Blender中的python执行。如果传递--background选项,则GUI将不会启动,因此其行为就像在CUI中运行python脚本一样。

1blender --background --python hogehoge.py

对于OSX,似乎必须使用blender.app的--args选项传递参数。

1open -a blender.app --args --background --python hogehoge.py

这足以使用python自动执行Blender,但是相反,您也可以主要使用python将Blender称为外部模块。

此处介绍了如何构建这样的Blender python模块。构建过程很繁琐,稍后将进行说明。让我们先使用它。

尝试渲染

Blender在启动时默认情况下会创建一个方形框,光源和摄影机,因此让我们在启动状态下获得渲染结果。

1234import bpy bpy.ops.render.render() bpy.data.images['Render Result'].save_render(filepath = '/tmp/image.png')

准备像

的hogehoge.py

1$ python3 ./hogehoge.py

生成了/tmp/image.png。

当然,您可以按照开头所述,通过将hogehoge.py传递给Blender进行相同的操作。

Jupyter笔记本上的Blender

顺便说一句,由于我将它带到了python端,因此可以在jupyter笔记本上使用。然后,我想将渲染结果提取为python数组并进行显示。但是,经过一些研究,似乎无法不通过文件直接获得渲染结果。此方法效果很好,但不幸的是,如果没有Blender GUI,它就无法工作。由于它是不可避免的,所以我将通过tempfile来使用它,但这是一个很大的损失。

1234567891011def get_img(size=[480,640]):     scene = bpy.context.scene     scene.render.resolution_x = size[1]     scene.render.resolution_y = size[0]     scene.render.resolution_percentage = 100     tmpdir=tempfile.TemporaryDirectory()     scene.render.filepath=tmpdir.name+"/hoge"     bpy.ops.render.render(write_still=True)     img=Image.open(tmpdir.name+"/hoge.png")     tmpdir.cleanup()     return img

无论如何,如果使用它,您可以在Jupyter笔记本上看到渲染结果,如下所示。我试着在一点一点移动的同时进行绘图。您可以在此处看到jupyter笔记本。

摘要我尝试使用

如上所述,我能够从python端调用Blender。

但是什么时候比一开始就从blener调用python方便呢?一种是与外部库的合作,但我觉得我只是在搅拌器一侧使用python设置了路径。与jupyter一起使用很有趣,但是似乎还有其他Google搜索方式。

毕竟,这可能只是情绪问题。无法不通过文件就无法交换图像是很痛苦的。好吧,如果您喜欢使用它,我感觉您会赢。

我真的很想将它与机器学习结合起来,但是我在构建环境方面已经花了很多力气,因此本项到此为止。

从这一点开始,它是构建版本。

关于内部版本

基本上,您可以遵循公式,但是有一些陷阱,因此我会记录下来。以下是在OS X El Capitan上完成的。

生成准备

似乎必须是python3和框架格式,所以我将使用自制的python3。

1brew install python3

放下blender源。对于较旧的来源,cmake可能无法跟上操作系统和开发环境版本的要求,因此我们将跟上最新的消息来源(尽管可能有我的消息)。

1234blender_dev +-- blender  (gitから) +-- lib      (svnから) +-- build    (ビルド用)

使用类似

的文件夹结构。如果没有lib,则构建不会通过(成瘾点1:请参见下文)。

12345678910111213mkdir blender_dev cd blender_dev git clone git://git.blender.org/blender.git cd blender git submodule update --init --recursive git submodule foreach git checkout master git submodule foreach git pull --rebase origin master cd .. mkdir lib cd lib svn checkout https://svn.blender.org/svnroot/bf-blender/trunk/lib/darwin-9.x.universal cd .. mkdir build

blender / build_files / cmake / platform / platform_apple.cmake 由于默认框架路径用于的第96和210行,因此请指定brew的python3的路径(成瘾点2)。

1234567#-- line 96 --- #       set(_py_framework "/Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}")         set(_py_framework "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/") ... #-- line 210 --- #   set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /Library/Frameworks/Python.framework/Versions/${PYTHON_VERSION}/Python")     set(PLATFORM_LINKFLAGS "${PLATFORM_LINKFLAGS} /usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/Python") 生成并安装

好吧,它终于可以构建了。

12345678cd build cmake \ -D WITH_PYTHON_INSTALL=OFF \ -D WITH_PLAYER=OFF \ -D WITH_PYTHON_MODULE=ON \ ../blender/ make make install

make install的执行目标位于bin下,看来必要的模块已复制到名为2.78的文件夹中。之后,该文档说,如果将bpy.so和2.78文件夹复制到站点程序包,它将起作用,但是除非您使用release的文件夹名称而不是2.78的文件夹名称(上瘾点3),否则它将不起作用。 : 见下文)。

1234dest=/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages cp ./bin/bpy.so ${dest} cp -R ./bin/2.78 ${dest} ln -s ${dest}/2.78 ${dest}/release

现在您可以从python3导入bpy。

上瘾点1

如果我没有创建

lib及以下版本,我会生气如下。

123CMake Error at build_files/cmake/platform/platform_apple.cmake:36 (message):   Mac OSX requires pre-compiled libs at:   '/Users/***/git/blender/../lib/darwin-9.x.universal'

如官方文档中所述,您可以使用预编译的依赖库。好吧,这不是一个令人上瘾的观点,而是对公式的正确阅读。

上瘾点3

当我从python3导入bpy时,我很生气并跌倒如下。我似乎找不到通往2.78 / *的路径,即使我使用google,我也可以找到很多答案,例如"您是否正确复制了它?"我做到了,但这不好。

123456789101112BLT_lang_init: 'locale' data path for translations not found, continuing bpy: couldnt find 'scripts/modules', blender probably wont start. Freestyle: couldn't find 'scripts/freestyle/modules', Freestyle won't work properly. ImportError: No module named 'bpy_types' ImportError: No module named 'bpy_types' pyrna_srna_ExternalType: failed to find 'bpy_types' module ImportError: No module named 'bpy_types' ImportError: No module named 'bpy_types' pyrna_srna_ExternalType: failed to find 'bpy_types' module ImportError: No module named 'bpy_types' pyrna_srna_ExternalType: failed to find 'bpy_types' module F1016 18:22:03.065414 2006614016 utilities.cc:322] Check failed: !IsGoogleLoggingInitialized() You called InitGoogleLogging() twice!

文档说要复制2.78文件夹,但我还必须使2.78文件夹可以使用发行文件夹名称访问。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3