Utilisez Blender comme module Python

introduction

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.

Essayez de rendre

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.

image.png

Bien sûr, vous pouvez faire la même chose en passant hogehoge.py au mélangeur comme expliqué au début.

Blender sur notebook Jupyter

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).

スクリーンショット 2016-10-16 22.14.13.png

Résumé j'ai essayé d'utiliser

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.

À propos de 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.

Préparation de la construction

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")

Construire et installer

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.

Point addictif 1

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.

Point addictif 3

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

Utilisez Blender comme module Python
Utilisez pymol comme bibliothèque python
Créer un module Python
Utilisez youtube_dl comme module python. annexe) Erreur Nico Nico Video HTTP 403
Utilisez le module de papier électronique comme liste de tâches
[Python] Utiliser une séquence de chaînes
Utiliser Remotte en tant qu'utilisateur
Utilisez DynamoDB comme gestionnaire de verrouillage
Utilisez le tissu tel quel en python (fabric3)
Utilisez Python intégrable comme interface Python 3 de Vim
[Python] Utiliser les données au format JSON comme objet de type dictionnaire
Lancer le script Python en service
Utiliser l'impression dans l'expression lambda Python2
Créer un diagramme de relations des modules Python
[Python] Trier les types de collection comme référence
Sakura Utiliser le module externe Python sur Internet
Python en tant que langage fortement typé dynamiquement
Utiliser Django à partir d'un script Python local
Extrusion Python Extrude de Blender 2.9
Module de collections Python
Erreur lors de l'installation d'un module avec Python pip
python Remarque: Traitez les listes collectivement comme un ensemble
Publier un module Python qui calcule les éléments météorologiques
Comment ajouter un chemin de recherche de module Python
Utilisez un module de cryptographie qui gère OpenSSL en Python
Pour ajouter un module à python que vous mettez dans Julialang
[Python] Une compréhension approximative du module de journalisation
J'ai essayé d'ajouter un module Python 3 en C
Utilisez une page d'erreur personnalisée avec python / tornado
Utiliser python dans le conteneur Docker comme interpréteur Pycharm
Faisons un module pour Python en utilisant SWIG
Utilisez le module Python nghttp2 de Homebrew de Python de pyenv
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 7 Comment créer un module
Utilisez Thingsspeak de Python
Algorithme A * (édition Python)
Utilisez config.ini avec Python
[Python] Prenez une capture d'écran
Module Python (mémo d'apprentissage Python ④)
Essayez de créer un module Python en langage C
[Python] Utiliser JSON avec Python
Utiliser fluentd de python
(Python) Traite les valeurs entières comme un ensemble d'indicateurs
Utiliser des dates en Python
expression lambda de python ...
importation du module d'origine python
Comment utiliser Raspeye Relay Module Python
Utilisez MySQL depuis Python
Utiliser mecab avec Python 3
Utiliser le client LiquidTap Python ③
[Blender] Complétez l'API Python de Blender avec un éditeur de texte
mixeur, python, escalier en colimaçon
Utiliser DynamoDB avec Python
J'ai créé un module Python pour traduire les commentaires
Utilisez Property Decorator?
Démoniser un processus Python
Exécutez Blender avec python
mélangeur, python, comportement de la sphère
[Blender] Utilisez le module de dessin de texte à partir du script
Utilisons la version Python du module API Confluence.