Blender

Informationen zur Modellierung in Blender.

Auf dieser Seite findest Du alles, was Du zum Modellieren in Blender wissen musst.

Blender Starter-Kit

Hier findest Du das Blender Starter-Kit.

Blender-Einstellungen

Am besten ist es, wenn Du die Blender-Starter.blend als Grundlage nutzt, um eigene Assets zu erstellen. Dort ist bereits die Farbpaletten-Textur und das Export-Script hinterlegt.

Achte bitte darauf, dass Du das bestehende Material ColorPalette nutzt. Bitte erstelle keine weiteren Materialien und nenne das bestehende Material auch nicht um. Das Material muss ColorPalette heißen, da wir beim Import in Unity nach diesem Suchen und mit dem Material der Engine ersetzen.

Export-Einstellungen

Wenn Du mit Deinem Modell fertig bist und es exportieren willst, dann beachte bitte folgende Dinge:

  • Exportiere pro Modell eine eigene FBX-Datei.
  • Achte darauf, dass das Modell im Ursprung liegt, bevor Du es exportierst.
  • Stelle die folgenden Einstellungen im Export-Dialog ein:

Blender Einstellungen

Wenn Du mehrere Modelle in einer Blender-Datei hast, dann ist folgendes Script nützlich für den Export:

Export-Script

Das Export-Script ist in der Blender-Starter.blend im Blender Starter-Kit bereits enthalten.

Wechsle in das Scripting-Tab von Blender und erzeuge ein neues Script. Kopiere dann folgendes Script in den leeren Text-Editor.

Mit dem Skript hast Du zwei Möglichkeiten, einen Export anzustoßen.

  1. Export der aktiven Collection: Wähle hierzu einfach eine Scene-Collection an und starte das Skript. Es wird eine FBX-Datei erzeugt mit allem in der Scene-Collection. Achte hier bitte darauf, dass das Objekt im Nullpunkt steht!
  2. Export der selektierten Objekte: Wähle ein oder mehrere Objekte an und starte das Skript. Es wird pro Objekt eine eigene FBX-Datei erzeugt. Außerdem wird jedes Objekt automatisch beim Export in den Ursprung geschoben.

In beiden Fällen werden die Dateien dort abgelegt, wo auch die Blender-Datei liegt.

Bitte beachte, dass Du im Object-Mode sein musst zum Exportieren.

# https://docs.fairytaledefender.de/docs/docs-visual/blender/#export-script
import bpy
import os
import io_scene_fbx.export_fbx_bin
import mathutils

# export to blend file location
basedir = os.path.dirname(bpy.data.filepath)

if not basedir:
    raise Exception("Blend file is not saved")

view_layer = bpy.context.view_layer

obj_active = view_layer.objects.active
selection = bpy.context.selected_objects
selection_count = len(selection)

# Load the original unity settings for export
kwargs = io_scene_fbx.export_fbx_bin.defaults_unity3d()
kwargs["object_types"] = {'MESH', 'ARMATURE', 'EMPTY'};

class FakeOp:
    def report(self, tp, msg):
        print("%s: %s" % (tp, msg))

# use active collection if no object is selected
if selection_count == 0:
    name = bpy.path.display_name_from_filepath(bpy.context.blend_data.filepath)
    print(name)
    fn = os.path.join(basedir, name)
    
    kwargs["use_active_collection"] = True
    
    io_scene_fbx.export_fbx_bin.save(FakeOp(), bpy.context, filepath=fn + ".fbx", **kwargs)
else:
    kwargs["use_selection"] = True
    
    bpy.ops.object.select_all(action='DESELECT')

    for obj in selection:

        bpy.context.view_layer.objects.active = obj
        obj.select_set(True)
        bpy.ops.object.select_grouped(
            extend=True,
            type='CHILDREN_RECURSIVE'
        )
        
        # Save the initial location and set the object to 0/0/0
        oldLocation = obj.location.copy()
        oldRotation = obj.rotation_euler.copy()
        obj.location = (0, 0, 0)
        obj.rotation_euler = mathutils.Euler((0, 0, 0), 'XYZ')

        # some exporters only use the active object
        view_layer.objects.active = obj

        name = bpy.path.clean_name(obj.name)
        fn = os.path.join(basedir, name)
        
        io_scene_fbx.export_fbx_bin.save(FakeOp(), bpy.context, filepath=fn + ".fbx", **kwargs)

        # Restore the old location    
        obj.location = oldLocation
        obj.rotation_euler = oldRotation

        bpy.ops.object.select_all(action='DESELECT')

        print("written:", fn)


    view_layer.objects.active = obj_active

    for obj in selection:
        obj.select_set(True)

Blender-Studio

Studio für Videosequenzen für das Spiel.