Le mélangeur a un python intégré et peut contrôler la plupart des commandes internes. Vous pouvez également l'appeler depuis la console GUI, ou vous pouvez créer un fichier de script et l'exécuter.
Puisque le corps principal est blender, le script passé est exécuté par python avec blender intégré. Si vous passez l'option --background, l'interface graphique ne démarrera pas, elle se comportera donc comme si vous exécutiez un script python dans CUI.
blender --background --python hogehoge.py
Dans le cas d'OSX, il semble que vous deviez passer l'argument avec l'option --args de blender.app.
open -a blender.app --args --background --python hogehoge.py
Cela suffit pour automatiser blender avec python, mais à l'inverse, vous pouvez également appeler blender en tant que module externe principalement avec python.
Comment construire un tel module python blender est décrit dans ici. Le processus de construction est fastidieux et sera expliqué plus tard. Utilisons-le d'abord.
Par défaut, Blender crée une boîte carrée, une source de lumière et une caméra au démarrage, alors obtenons le résultat du rendu dans l'état de démarrage.
import bpy
bpy.ops.render.render()
bpy.data.images['Render Result'].save_render(filepath = '/tmp/image.png')
Préparez hogehoge.py comme
$ python3 ./hogehoge.py
A généré /tmp/image.png.
Bien sûr, vous pouvez faire la même chose en passant hogehoge.py au mélangeur comme expliqué au début.
Au fait, depuis que je l'ai amené du côté python, il peut être utilisé sur le notebook jupyter. Ensuite, je veux extraire le résultat du rendu sous forme de tableau python et le montrer. Cependant, à partir d'un peu de recherche, il semble qu'il n'y ait aucun moyen d'obtenir le résultat du rendu directement sans passer par le fichier. La méthode de here est sympa, mais malheureusement blender Cela ne fonctionnait pas sans l'interface graphique. Comme c'est inévitable, je vais le prendre via tempfile, mais c'est une perte.
def 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
Quoi qu'il en soit, si vous utilisez ceci, vous pouvez voir le résultat du rendu sur le notebook Jupyter comme ci-dessous. J'ai essayé de tracer en le déplaçant petit à petit. Vous pouvez voir le notebook jupyter ici [http://nbviewer.jupyter.org/github/ashitani/jupyter_examples/blob/master/blender.ipynb).
Comme mentionné ci-dessus, nous avons pu appeler blender du côté python.
Mais quand est-ce plus pratique que d'appeler python depuis blener comme au début? L'un est la coopération avec une bibliothèque externe, mais je pense que je viens de définir le chemin avec python du côté du mélangeur. C'est amusant à utiliser avec jupyter, mais il semble y avoir d'autres façons de google.
Après tout, ce n'est peut-être qu'une question d'humeur. C'est pénible de ne pas pouvoir échanger des images sans passer par un fichier. Eh bien, si vous aimez l'utiliser, j'ai l'impression que vous allez gagner.
Je voulais vraiment le combiner avec l'apprentissage automatique, mais j'ai épuisé mes efforts pour créer l'environnement, donc cette entrée est à ce point.
Après cela, c'est l'édition build.
En gros, vous pouvez suivre Officiel, mais il y avait quelques pièges, donc je vais garder une trace. Ce qui suit a été fait avec OS X El Capitan.
Il semble qu'il doit s'agir de python3 et qu'il doit être au format framework, donc j'utiliserai python3 de homebrew.
brew install python3
Déposez la source du mélangeur. S'il s'agit d'une ancienne source, cmake peut ne pas être en mesure de suivre la version du système d'exploitation ou de l'environnement de développement, je vais donc continuer avec la dernière source (bien qu'elle puisse avoir des mines terrestres).
blender_dev
+-- blender (De git)
+-- lib (Chez svn)
+-- build (Pour construire)
Travaillez avec une structure de dossiers comme. Sans lib, la construction ne fonctionnera pas (point d'addiction 1: voir ci-dessous).
mkdir 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 Puisque le chemin du framework par défaut est utilisé sur les lignes 96 et 210 de, spécifiez le chemin du python3 de brew (point de dépendance 2).
#-- 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")
Eh bien, c'est finalement une construction.
cd build
cmake \
-D WITH_PYTHON_INSTALL=OFF \
-D WITH_PLAYER=OFF \
-D WITH_PYTHON_MODULE=ON \
../blender/
make
make install
La destination de make install est sous bin, et il semble que les modules nécessaires soient copiés dans le dossier appelé 2.78. Après cela, le document indique que si vous copiez les dossiers bpy.so et 2.78 dans des packages de site, cela fonctionnera, mais cela ne fonctionnera pas à moins que le nom du dossier ne soit libéré au lieu de 2.78 (point de dépendance 3: décrit plus tard).
dest=/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
Vous pouvez maintenant importer bpy depuis python3.
J'étais en colère comme suit si je ne faisais pas de lib ou moins.
CMake 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'
Comme indiqué dans le Document officiel, vous pouvez utiliser les bibliothèques dépendantes précompilées. Eh bien, ce n'est pas un point addictif, mais plutôt une lecture correcte de la formule.
Quand j'importe bpy depuis python3, je me fâche et je tombe comme ci-dessous. Je n'arrive pas à trouver le chemin vers 2.78 / *, et même si je google, je peux trouver beaucoup de réponses comme "L'avez-vous copié correctement?" Je l'ai fait, mais ce n'est pas bon.
BLT_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!
Le document dit de copier le dossier 2.78, mais j'ai également dû rendre le dossier 2.78 accessible avec le nom de dossier release.
Recommended Posts