Verwenden Sie Blender als Python-Modul

Einführung

Der Mixer verfügt über eine integrierte Python-Funktion und kann die meisten internen Befehle steuern. Sie können es auch über die GUI-Konsole aufrufen oder eine Skriptdatei erstellen und ausführen.

Da der Hauptteil Blender ist, wird das übergebene Skript von Python mit integriertem Blender ausgeführt. Wenn Sie die Option --background übergeben, wird die GUI nicht gestartet, sodass sie sich so verhält, als würden Sie ein Python-Skript in CUI ausführen.

blender --background --python hogehoge.py

Im Fall von OSX müssen Sie das Argument anscheinend mit der Option --args von blender.app übergeben.

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

Dies reicht aus, um Blender mit Python zu automatisieren. Umgekehrt können Sie Blender jedoch auch als externes Modul hauptsächlich mit Python aufrufen.

Wie man ein solches Blender-Python-Modul erstellt, wird in hier beschrieben. Der Erstellungsprozess ist langwierig und wird später erläutert. Lass es uns zuerst benutzen.

Versuchen Sie zu rendern

Standardmäßig erstellt Blender beim Start eine quadratische Box, eine Lichtquelle und eine Kamera. Lassen Sie uns also das Rendering-Ergebnis im Startstatus erhalten.

import bpy

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

Bereiten Sie hogehoge.py wie vor

$ python3 ./hogehoge.py

Hat /tmp/image.png generiert.

image.png

Natürlich können Sie dasselbe tun, indem Sie hogehoge.py an den Mixer übergeben, wie zu Beginn erläutert.

Mixer auf Jupyter Notebook

Übrigens, da ich es auf die Python-Seite gebracht habe, kann es auf Jupyter-Notebooks verwendet werden. Dann möchte ich das Rendering-Ergebnis als Python-Array extrahieren und imshow. Nach ein wenig Recherche scheint es jedoch keine Möglichkeit zu geben, das Rendering-Ergebnis direkt zu erhalten, ohne die Datei durchzugehen. Die Methode von hier ist nett, aber leider Blender Ohne die GUI hat es nicht funktioniert. Da es unvermeidlich ist, werde ich es über tempfile nehmen, aber es ist ein ziemlicher Verlust.

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

Wenn Sie dies verwenden, können Sie das Rendering-Ergebnis auf dem Jupyter-Notizbuch wie folgt sehen. Ich versuchte zu planen, während ich es Stück für Stück bewegte. Sie können das Jupyter-Notizbuch hier sehen [http://nbviewer.jupyter.org/github/ashitani/jupyter_examples/blob/master/blender.ipynb].

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

Zusammenfassung Ich habe versucht, zu verwenden

Wie oben erwähnt, konnten wir Blender von der Python-Seite aus aufrufen.

Aber wann ist es bequemer, als Python wie am Anfang von blener aus aufzurufen? Eine davon ist die Zusammenarbeit mit einer externen Bibliothek, aber ich habe das Gefühl, dass ich den Pfad nur mit Python auf der Mixerseite festgelegt habe. Es macht Spaß, mit Jupyter zu arbeiten, aber es scheint andere Möglichkeiten zu geben, um zu googeln.

Schließlich kann es nur eine Frage der Stimmung sein. Es ist ein Schmerz, keine Bilder austauschen zu können, ohne eine Datei durchzugehen. Wenn Sie es gerne benutzen, werden Sie gewinnen.

Ich wollte es wirklich mit maschinellem Lernen kombinieren, aber ich habe meine Anstrengungen beim Aufbau der Umgebung erschöpft, daher ist dieser Eintrag bis zu diesem Punkt.

Danach ist es die Build Edition.

Über bauen

Grundsätzlich können Sie Official folgen, aber es gab einige Fallen, daher werde ich Aufzeichnungen führen. Das Folgende wurde mit OS X El Capitan durchgeführt.

Build-Vorbereitung

Es scheint, dass es Python3 sein muss und es muss im Framework-Format sein, also werde ich Python3 von Homebrew verwenden.

brew install python3

Lassen Sie die Quelle des Mixers fallen. Wenn es sich um eine alte Quelle handelt, kann cmake möglicherweise nicht mit der Version des Betriebssystems oder der Entwicklungsumgebung Schritt halten. Daher werde ich mit der neuesten Quelle fortfahren (obwohl es möglicherweise Landminen gibt).

blender_dev
+-- blender  (Von git)
+-- lib      (Von svn)
+-- build    (Zum bauen)

Arbeiten Sie mit einer Ordnerstruktur wie. Ohne lib funktioniert der Build nicht (Suchtpunkt 1: siehe unten).

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 Da der Standard-Framework-Pfad in den Zeilen 96 und 210 von verwendet wird, geben Sie den Pfad von Brews Python3 an (Suchtpunkt 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")

Erstellen und installieren

Nun, es ist endlich ein Build.

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

Das Ziel von make install befindet sich unter bin, und es scheint, dass die erforderlichen Module in den Ordner 2.78 kopiert werden. Danach heißt es in dem Dokument, dass das Kopieren der Ordner bpy.so und 2.78 in Site-Pakete funktioniert, jedoch nur, wenn der Ordnername anstelle von 2.78 freigegeben wird (Suchtpunkt 3: später beschrieben).

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

Jetzt können Sie bpy aus python3 importieren.

Suchtpunkt 1

Ich war wie folgt wütend, wenn ich nicht lib oder weniger machte.

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'

Wie in der offiziellen Dokumentation angegeben, können Sie die vorkompilierten abhängigen Bibliotheken verwenden. Nun, dies ist kein süchtig machender Punkt, sondern ein korrektes Lesen der Formel.

Suchtpunkt 3

Wenn ich bpy aus python3 importiere, werde ich wütend und falle wie folgt. Ich kann den Pfad zu 2.78 / * anscheinend nicht finden, und selbst wenn ich google, finde ich viele Antworten wie "Haben Sie ihn richtig kopiert?" Ich habe es getan, aber es ist nicht gut.

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!

Das Dokument sagt, dass der Ordner 2.78 kopiert werden soll, aber ich musste auch den Ordner 2.78 mit der Freigabe des Ordnernamens zugänglich machen.

Recommended Posts

Verwenden Sie Blender als Python-Modul
Verwenden Sie Pymol als Python-Bibliothek
Erstellen Sie ein Python-Modul
Verwenden Sie youtube_dl als Python-Modul. Anhang) Nico Nico Video HTTP 403 Fehler
Verwenden Sie das elektronische Papiermodul als Aufgabenliste
[Python] Verwenden Sie eine Zeichenfolgenfolge
Verwenden Sie Remotte als Benutzer
Verwenden Sie DynamoDB als Sperrmanager
Verwenden Sie Stoff wie in Python (Stoff3)
Verwenden Sie einbettbares Python als Python 3-Oberfläche von Vim
[Python] Verwenden Sie Daten im JSON-Format als Objekt vom Typ Wörterbuch
Starten Sie das Python-Skript im Dienst
Verwenden Sie print in Python2 lambda expression
Erstellen Sie ein Beziehungsdiagramm von Python-Modulen
[Python] Sortieren Sie Sammlungstypen als Referenz
Sakura Verwenden Sie das externe Python-Modul im Internet
Python als stark dynamisch typisierte Sprache
Verwenden Sie Django aus einem lokalen Python-Skript
Blender 2.9 Python Extrude extrudieren
Python-Sammlungsmodul
Fehler beim Installieren eines Moduls mit Python pip
Python Hinweis: Behandeln Sie Listen gemeinsam als Satz
Veröffentlichen Sie ein Python-Modul, das meteorologische Elemente berechnet
So fügen Sie einen Suchpfad für Python-Module hinzu
Verwenden Sie ein Kryptografiemodul, das OpenSSL in Python verarbeitet
So fügen Sie Python ein Modul hinzu, das Sie in Julialang eingefügt haben
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Verwenden Sie eine benutzerdefinierte Fehlerseite mit Python / Tornado
Verwenden Sie Python im Docker-Container als Pycharm-Interpreter
Lassen Sie uns mit SWIG ein Modul für Python erstellen
Verwenden Sie das nghttp2 Python-Modul von Homebrew aus pyenvs Python
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 7 Erstellen eines Moduls
Verwenden Sie thingspeak aus Python
Ein * Algorithmus (Python Edition)
Verwenden Sie config.ini mit Python
[Python] Machen Sie einen Screenshot
Python-Modul (Python-Lernnotiz ④)
Versuchen Sie, ein Python-Modul in C-Sprache zu erstellen
[Python] Verwenden Sie JSON mit Python
Verwenden Sie fließend Python
(Python) Behandeln Sie ganzzahlige Werte als eine Reihe von Flags
Verwenden Sie Datumsangaben in Python
Pythons Lambda-Ausdruck ...
Import des Python-Originalmoduls
Verwendung von Raspeye Relay Module Python
Verwenden Sie MySQL aus Python
Verwenden Sie Mecab mit Python 3
Verwenden Sie LiquidTap Python Client ③
[Blender] Ergänzen Sie die Python-API von Blender mit einem Texteditor
Mixer, Python, Wendeltreppe
Verwenden Sie DynamoDB mit Python
Ich habe ein Python-Modul erstellt, um Kommentare zu übersetzen
Property Decorator verwenden?
Dämonisiere einen Python-Prozess
Führen Sie Blender mit Python aus
Mixer, Python, Kugelverhalten
[Blender] Verwenden Sie das Textzeichnungsmodul aus dem Skript heraus
Verwenden wir die Python-Version des Confluence-API-Moduls.