Dieser Artikel ist der zweite Tag des Adventskalenders 2019 des Mie University Computational Research Institute (https://qiita.com/advent-calendar/2019/calc-mie).
Bei der Entwicklung von Spielen im Kreis habe ich auch die Version der von Blender mit Git erstellten 3D-Modelldaten verwaltet. Um Blender-Dateien in der Spieleentwicklung zu verwenden, ist es zweckmäßig, die in FBX exportierte zu verwenden.
Wenn Sie dieses Mal eine Funktion namens Git Hook verwenden, werden ** Bildwiedergabe für Miniaturansichten ** und ** FBX-Export ** automatisch ausgeführt, wenn "Git Push" ausgeführt wird.
Dies ermöglichte nicht nur die Automatisierung der Arbeit, sondern hatte auch den Vorteil, ** Fehler in den FBX-Exporteinstellungen zu eliminieren ** und ** nicht zu vergessen, die FBX-Datei beim Bearbeiten der Mischdatei zu aktualisieren **.
Dieses Mal werde ich Git Hook und die Arbeit vorstellen, um den automatischen Export mit Blender durchzuführen.
Es ist eine Standardfunktion von Git, mit der Sie Skripte ausführen können, wenn Sie eine bestimmte Git-Aufgabe ausführen.
Als Typ
Und so weiter.
Mit diesen,
Kann gemacht werden.
Es gibt auch eine Serverseite, aber dieses Mal verwenden wir ** Pre-Push ** auf der Client-Seite, damit es automatisch gerendert und exportiert werden kann, wenn Git Push ausgeführt wird.
Platzieren Sie im Entwicklungszweig die Mischdatei und "Git Push" automatisch
Getan werden.
Die erwartete Verzeichnisstruktur ist wie folgt.
<Zweig vor Push entwickeln>
├─Scripts :Platzieren Sie Skripte für das automatische Rendern und den FBX-Export. Die spezifischen Inhalte werden später beschrieben.
└─ProjectName
│
├─blend :Verzeichnis zum Einfügen der Mischdatei
│ │ aaa.blend
│ │ bbb.blend
│ │ ccc.blend
│
└─Textures :Verzeichnis zum Einfügen der Textur
<Zweig nach Push entwickeln>
├─Scripts
└─ProjectName
│ aaa.fbx : [Automatisch erzeugt]blend/aaa.FBX-Export der Mischung
│ bbb.fbx : [Automatisch erzeugt]blend/bbb.FBX-Export der Mischung
│ ccc.fbx : [Automatisch erzeugt]blend/ccc.FBX-Export der Mischung
│
├─blend
│ │ aaa.blend
│ │ bbb.blend
│ │ ccc.blend
│
├─image : [Automatisch erzeugt]Verzeichnis, in dem das gerenderte Bild platziert wird
└─Textures :Verzeichnis zum Einfügen der Textur
<Hauptzweig nach dem Drücken>
└─ProjectName
│ aaa.fbx
│ bbb.fbx
│ ccc.fbx
│
└─Textures
Platzieren Sie die Mischdatei und die Texturdatei im Entwicklungszweig und verschieben Sie sie. Automatisch gerendert, FBX generiert, Schauen Sie sich die zu meisternden FBX- und Texturdateien an.
Diesmal unter Windows 10
Ich habe es bei gemacht.
Führen Sie zuerst den Pfad durch Blender.exe. Fügen Sie das Blender-Installationsverzeichnis zur Umgebungsvariablen Path hinzu. Wenn Sie das Installationsprogramm von der offiziellen Blender-Website heruntergeladen und installiert haben, "C:\Program Files\Blender Foundation\Blender" Wird das Installationsverzeichnis sein.
So bearbeiten Sie Umgebungsvariablen https://qiita.com/sta/items/6d29da0dc7069ffaae60 Ich denke es wird hilfreich sein.
Speichern Sie als Nächstes den folgenden Inhalt in Scripts / render.py
als Skript zum Rendern.
import bpy
bpy.context.scene.render.resolution_x = 1920
bpy.context.scene.render.resolution_y = 1080
bpy.context.scene.render.resolution_percentage = 25
path = bpy.context.blend_data.filepath.rstrip(bpy.path.basename(bpy.context.blend_data.filepath)) + "../image/" + bpy.path.basename(bpy.context.blend_data.filepath).split(".")[0] +".png "
bpy.data.scenes["Scene"].render.filepath = path
bpy.ops.render.render( write_still=True )
Wenn es sich also um blend / aaa.blend handelt, wird das Rendering-Ergebnis in image / aaa.png gespeichert.
Da es diesmal für Miniaturbilder gerendert wird, wird die Auflösung mit 25% von 1920 x 1080 angegeben.
Speichern Sie es als Skript für den FBX-Export in Scripts / ExportFBX.py
mit dem folgenden Inhalt.
import bpy,sys
def fbx_export_geometry(arg_filepath='./export.fbx'):
bpy.ops.export_scene.fbx(
filepath=arg_filepath,
object_types={'ARMATURE', 'MESH'},
bake_anim=False,
)
#Art des Ausgabeziels
# 'EMPTY': Leer
# 'CAMERA':Kamera
# 'LAMP':Lampe
# 'ARMATURE': Anker
# 'MESH':Gittergewebe
# 'OTHER': Andere
return
#Funktionsausführung
path = bpy.context.blend_data.filepath.rstrip(bpy.path.basename(bpy.context.blend_data.filepath)) + "../" + bpy.path.basename(bpy.context.blend_data.filepath).split(".")[0] +".fbx"
fbx_export_geometry(path)
Dadurch wird FBX nach aaa.fbx exportiert, wenn es sich um blend / aaa.blend handelt.
Außerdem exportiere ich hier FBX nur Armaturen und Netze, ausgenommen Kameras und Lampen.
Bereiten Sie nun ein Skript vor, um diese beiden Python-Skripte aufzurufen.
Speichern Sie es in Scripts / convert.sh
mit dem folgenden Inhalt.
#!/bin/bash
log=$(pwd)/gitPush.sh.log
echo "[$(date)] start" >> $log
echo "[Messeage by convert.sh]cd git top level dir(" `git rev-parse --show-toplevel` ")"
cd `git rev-parse --show-toplevel`
for raw in $(git log origin/develop..develop --stat | grep ".blend") ; do
if [ ${raw##*.} = "blend" ]; then
echo "[Messeage by convert.sh] blend file is ${raw}"
echo "[Messeage by convert.sh] Start Render.py"
blender --background ${raw} --python Scripts/Render.py
echo "[Messeage by convert.sh] Start ExportFBX.py"
blender --background ${raw} --python Scripts/ExportFBX.py
fi
done
echo '[Messeage by convert.sh] git commit -m "Auto Generate FBX/render image"'
git add *.fbx
git add *.png
git commit -am "Auto convert FBX and render image"
Es gibt eine Echozeile für das Protokoll, aber der Inhalt ist
git add
die FBX-Datei und das gerenderte PNG-Bildgit commit
Es ist geworden.
Lassen Sie Git Hook das zuvor erstellte Skript vorab ausführen.
Es gibt ein .git
-Verzeichnis im Git-Repository, aber speichern Sie das Shell-Skript in .git / hooks /
mit dem Dateinamen "pre-push".
Dieses Skript wird dann ausgeführt, kurz bevor Git Push ausgeführt wird.
Sie können die Datei direkt hier ablegen, aber da .git / hooks /
nicht unter Git-Überwachung steht, habe ich einen symbolischen Link eingefügt und daran gearbeitet.
Übrigens, wie Sie einen symbolischen Link in PowerShell von Windows einfügen, ist der folgende Befehl.
New-Item -Type SymbolicLink .git/hooks/pre-push -Value Scripts/hooks/pre-push
Speichern Sie die Pre-Push-Datei mit dem folgenden Inhalt.
#!/bin/sh
remote="$1"
url="$2"
z40=0000000000000000000000000000000000000000
while read local_ref local_sha remote_ref remote_sha
do
if [[ "${remote_ref##refs/heads/}" = "develop" ]]; then
`git rev-parse --show-toplevel`/Scripts/convert.sh
git checkout master
git checkout develop `git rev-parse --show-toplevel`'/ProjectName/*.fbx'
git checkout develop `git rev-parse --show-toplevel`'/ProjectName/Textures/*'
git commit -m "[Auto commit] Add FBX from develop"
git checkout develop
git push origin master
fi
done
<Git's Top Level Directory> / Scripts / convert.sh
aus. (Automatisches Rendern und FBX-Export werden hier durchgeführt)git commit
mastergit push
Es ist der Inhalt wie.
Wenn Sie dies tun, schieben Sie einfach die Mischdatei und die Textur in den Entwicklungszweig, und dies wird automatisch durchgeführt.
git commit
& push
im HauptzweigGetan werden.
Dieses Mal habe ich versucht, mit Git Hook ein System zu erstellen, das die FBX automatisch aktualisiert, wenn die Mischdatei aktualisiert wird.
Zuerst habe ich GitHub Actions ausprobiert und gedacht, ich brauche CI / CD ... aber ich war besorgt, weil ich beim Rendern mit Blender eine GPU auf der Serverseite brauchte, aber Git Hook für meine Senioren im Kreis Wurde vorgestellt.
Ich denke, wir haben das erreicht, was wir wollten, und jetzt haben wir ein kompaktes System, das auf Kundenseite fertiggestellt wird.
Ich habe auch versucht, das Blender Python-Skript zum ersten Mal mit Git Hook aufzurufen, aber dies beseitigt den Einstellungsfehler beim Rendern und beim FBX-Export, insbesondere wenn die Lampe und die Kamera fälschlicherweise im FBX-Export enthalten sind und von Unity gelesen werden. Das Problem, verrückt zu werden, ist weg.
Bisher gab es nicht viel Motivation für die Automatisierung, aber es war eine gute Gelegenheit, eine Reihe von Vorteilen aus der Automatisierung zu ziehen.
Git Hook hat verschiedene andere Zündzeiten, daher möchte ich es bequem verwenden.