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.
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.
Natürlich können Sie dasselbe tun, indem Sie hogehoge.py an den Mixer übergeben, wie zu Beginn erläutert.
Ü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].
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.
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.
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")
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.
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.
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