Cet article est le deuxième jour du Calendrier de l'Avent 2019 du Mie University Computational Research Institute.
Lors du développement de jeux en cercle, j'ai également géré la version des données de modèles 3D créées par Blender avec Git. Pour utiliser les fichiers Blender dans le développement de jeux, il est pratique d'utiliser celui exporté vers FBX.
Par conséquent, en utilisant une fonction appelée Git Hook cette fois, ** le rendu d'image pour les vignettes ** et ** l'exportation FBX ** sont automatiquement exécutés lorsque Git Push
est exécuté.
Cela permettait non seulement d'automatiser le travail, mais présentait également l'avantage de ** éliminer les erreurs dans les paramètres d'export FBX ** et de ** ne pas oublier de mettre à jour le fichier FBX lors de l'édition du fichier Blend **.
Cette fois, je présenterai Git Hook et le travail pour effectuer une exportation automatique avec Blender.
C'est une fonctionnalité standard de Git qui vous permet d'exécuter des scripts lorsque vous effectuez une tâche Git spécifique.
En tant que type
Etc.
Avec ces,
Peut être fait.
Il y a aussi un côté serveur, mais cette fois nous utiliserons ** pre-push ** côté client afin qu'il puisse être automatiquement rendu et exporté lorsque Git Push
est exécuté.
Dans la branche de développement, placez automatiquement le fichier Blend et Git Push
Sera fait.
La structure de répertoire attendue est la suivante.
<Développer une branche avant Push>
├─Scripts :Placez des scripts pour le rendu automatique et l'exportation FBX. Le contenu spécifique sera décrit plus loin.
└─ProjectName
│
├─blend :Répertoire pour placer le fichier blend
│ │ aaa.blend
│ │ bbb.blend
│ │ ccc.blend
│
└─Textures :Répertoire pour mettre de la texture
<Développer branche après push>
├─Scripts
└─ProjectName
│ aaa.fbx : [Généré automatiquement]blend/aaa.Exportation FBX du mélange
│ bbb.fbx : [Généré automatiquement]blend/bbb.Exportation FBX du mélange
│ ccc.fbx : [Généré automatiquement]blend/ccc.Exportation FBX du mélange
│
├─blend
│ │ aaa.blend
│ │ bbb.blend
│ │ ccc.blend
│
├─image : [Généré automatiquement]Répertoire dans lequel l'image rendue est placée
└─Textures :Répertoire pour mettre de la texture
<Branche principale après poussée>
└─ProjectName
│ aaa.fbx
│ bbb.fbx
│ ccc.fbx
│
└─Textures
Placez le fichier de fusion et le fichier de texture dans la branche de développement et poussez-le. Rendu automatiquement, généré par FBX, Découvrez les fichiers FBX et texture à maîtriser.
Cette fois sur Windows 10
Je l'ai fait à.
Commencez par passer le chemin via Blender.exe. Ajoutez le répertoire d'installation de Blender à la variable d'environnement Path. Si vous avez téléchargé le programme d'installation à partir du site officiel de Blender et que vous l'avez installé, "C:\Program Files\Blender Foundation\Blender" Sera le répertoire d'installation.
Comment modifier les variables d'environnement https://qiita.com/sta/items/6d29da0dc7069ffaae60 Je pense que ce sera utile.
Ensuite, enregistrez le contenu suivant dans Scripts / render.py
en tant que script pour le rendu.
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 )
En conséquence, s'il s'agit de blend / aaa.blend, le résultat du rendu sera enregistré dans image / aaa.png.
Puisque cette fois, il est rendu pour les images miniatures, la résolution est spécifiée comme 25% de 1920x1080.
Ensuite, en tant que script pour l'exportation FBX, enregistrez-le dans Scripts / ExportFBX.py
avec le contenu suivant.
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,
)
#Type de cible de sortie
# 'EMPTY': Vide
# 'CAMERA':caméra
# 'LAMP':lampe
# 'ARMATURE': Armature
# 'MESH':engrener
# 'OTHER': Autre
return
#Exécution de la fonction
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)
Cela exportera FBX vers aaa.fbx s'il s'agit de blend / aaa.blend.
Aussi, ici je suis FBX exportant uniquement des armatures et des maillages, à l'exclusion des caméras et des lampes.
Maintenant, préparez un script pour appeler ces deux scripts Python.
Enregistrez-le dans Scripts / convert.sh
avec le contenu suivant.
#!/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"
Il y a une ligne d'écho pour le journal, mais le contenu est
git add
le fichier FBX et l'image PNG renduegit commit
Il est devenu.
Enfin, laissez Git Hook pré-pousser exécuter le script que vous avez créé jusqu'à présent.
Il y a un répertoire .git
dans le dépôt Git, mais enregistrez le script shell dans .git / hooks /
avec le nom de fichier "pre-push".
Ensuite, ce script sera exécuté juste avant l'exécution de Git Push.
Vous pouvez mettre le fichier directement ici, mais comme .git / hooks /
n'est pas sous surveillance Git, j'ai mis un lien symbolique et j'ai travaillé dessus.
À propos, comment coller un lien symbolique dans PowerShell de Windows est la commande ci-dessous.
New-Item -Type SymbolicLink .git/hooks/pre-push -Value Scripts/hooks/pre-push
Enregistrez le fichier pré-push avec le contenu suivant.
#!/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
<répertoire de niveau supérieur de Git> / Scripts / convert.sh
. (Le rendu automatique et l'exportation FBX sont effectués ici)git commit
git push
Ce sont les contenus tels que.
Avec ce qui précède, poussez simplement le fichier Blend et la texture dans la branche de développement, et cela se fera automatiquement.
git commit
& push
dans la branche masterSera fait.
Cette fois, j'ai essayé d'utiliser Git Hook pour créer un système qui met automatiquement à jour le FBX lorsque le fichier de fusion est mis à jour.
Au début, j'essayais des actions GitHub en pensant que j'avais besoin de CI / CD ... mais quand j'étais inquiet parce que j'avais besoin d'un GPU côté serveur lors du rendu avec Blender, j'étais inquiet pour Git Hook A été présenté.
En conséquence, je pense que nous avons réalisé ce que nous voulions faire, et maintenant nous avons un système compact qui est complété côté client.
J'ai également essayé d'utiliser le script Blender Python pour la première fois pour l'appeler avec Git Hook, mais cela élimine l'erreur de réglage du rendu et de l'exportation FBX, en particulier lorsque la lampe et la caméra sont incluses par erreur dans l'exportation FBX et qu'elles sont lues par Unity. Le problème de devenir fou est parti.
Jusqu'à présent, il n'y avait pas beaucoup de motivation pour l'automatisation, mais c'était une bonne occasion de tirer un certain nombre d'avantages de l'automatisation.
Git Hook a plusieurs autres synchronisations d'allumage, je voudrais donc l'utiliser de manière pratique.
Recommended Posts