[PYTHON] Blender-Rendering und FBX-Export automatisch von Git Hook

Einführung

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.

Was ist Git Hook?

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.

Was diesmal zu erreichen

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.

Entwicklungsumgebung

Diesmal unter Windows 10

Ich habe es bei gemacht.

Arbeitsablauf

1. Führen Sie den Pfad durch den Mixer

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.

2. Skript zum Rendern

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.

3. Skript für den FBX-Export

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.

4. Skript zum Aufrufen von zwei Python-Skripten

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

  1. Wechseln Sie in das oberste Verzeichnis von Git
  2. Rufen Sie den Namen der geänderten Mischdatei aus dem Git-Protokoll ab
  3. Führen Sie das Rendern von Bildern (Render.py) und den FBX-Export (ExportFBX.py) für die Mischdatei mit den Änderungen aus.
  4. git add die FBX-Datei und das gerenderte PNG-Bild
  5. git commit

Es ist geworden.

Git Hook Pre-Push-Einstellungen

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

  1. Finden Sie heraus, ob sich der Zweig, an dem Sie arbeiten, entwickelt
  2. Führen Sie <Git's Top Level Directory> / Scripts / convert.sh aus. (Automatisches Rendern und FBX-Export werden hier durchgeführt)
  3. Überprüfen Sie die Texturdatei und die automatisch generierte FBX-Datei im Master-Zweig
  4. git commit master
  5. Master git 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.

Getan werden.

schließlich

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.

Verweise

Recommended Posts

Blender-Rendering und FBX-Export automatisch von Git Hook
HDA-Verteilung von Houdini zum Exportieren von FBX mit Hierarchie und Transformationen
Suchen und laden Sie YouTube-Videos automatisch mit Python herunter
Holen Sie sich den Git-Zweignamen und den Tag-Namen mit Python