使用Blender作为python模块 |
您所在的位置:网站首页 › blender不能渲染 › 使用Blender作为python模块 |
简介
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 buildblender / 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 installmake 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 |