Tutorial Render with Blender/de

Anleitung
Thema
Bildsynthese
Niveau
Fortgeschritten
Bearbeitungszeit
60 Minuten
Autoren
vocx
FreeCAD-Version
0.18 oder höher
Beispieldateien
keine
Siehe auch
None

Einführung

Diese Tutorial zeigt, wie man die Darstellung eines mit FreeCAD erstellten Bauteils oder einer Baugruppe in Blender generiert. Es wird angenommen, dass der Anwender das Bauteil bereits in FreeCAD erstellt oder importiert hat; dann wird dieses Bauteil zum rendern nach Blender exportiert.

Es erzeugt ein Rendering mit Blender 2.80 mit den Renderern EEVEE und Cycles. Es zeigt verschiedene Python-Befehle, mit denen sich Aktionen sowohl in FreeCAD als auch in Blender schneller ausführen lassen.

Eine ähnliche Beschreibung dieses Vorgangs findet sich in einer Reihe von Videos mit dem Titel Render Solidworks and FreeCAD Models in Blender von Joko Engineering.

FreeCAD

1. Erstelle eine Baugruppe mit Körpern aus dem Arbeitsbereich Part oder Arbeitsbereich PartDesign oder eines anderen Arbeitsbereichs, der Volumenkörper erzeugt, z.B. der Arbeitsbereich Arch. Weise den einzelnen Körpern, aus denen sich die Baugruppe zusammensetzt, Farben oder Materialien zu, die in etwa der Farbe entsprechen, die man im Rendering wünscht.

Zusammenbau von drei Körpern, die in FreeCAD erstellt und mit Farben oder Materialien versehen wurden.

2. Wenn das Modell sehr detailliert ist, stellt man sicher, dass die Ansicht-EigenschaftDeviation des Körpers auf einen niedrigen Wert zwischen 0.1 und 0.01 oder sogar kleiner eingestellt ist. Je niedriger dieser Wert ist, desto detaillierter wird das exportierte Netz sein und desto besser wird die Qualität des Renderings sein.

Abweichungseigenschaft der in FreeCAD erstellten Körper; die Abweichung muss gering sein, um die Teile mit guter Auflösung exportieren zu können.

3. Man wählt den Part, dann Datei → Exportieren, oder man drückt Ctrl+E, und exportiert es als Wavefront OBJ.

Alternativ kann der Export über die Python-Konsole erfolgen. Man definiert eine Liste der zu exportierenden Objekte und verwendet die Exportfunktion mit einem Dateinamen.

import importOBJ
objs = FreeCAD.ActiveDocument.getObjectsByLabel("Part")[0]

importOBJ.export(objs, "/home/user/assembly.obj")

Hinweis: Beim Exportieren nach OBJ werden zwei Dateien erstellt: Die erste enthält die Netzinformationen selbst, assembly.obj, die zweite enthält die Definition der Materialien, in den meisten Fällen nur die Farbe, assembly.mtl.

Hinweis 2: Wenn die resultierende OBJ-Datei leer zu sein scheint, muss man möglicherweise die einzelnen Körper exportieren. In diesem Fall wählt man jeden Körper unter dem Teil aus und wiederholt den Export.

import importOBJ
objs = [FreeCAD.ActiveDocument.getObjectsByLabel("Body.base")[0],
FreeCAD.ActiveDocument.getObjectsByLabel("Body.bolt")[0],
FreeCAD.ActiveDocument.getObjectsByLabel("Body.bolt.big")[0]]

importOBJ.export(objs, "/home/user/assembly.obj")

Blender

Das Modell vorbereiten

4. Blender öffnen. Das Timeline-Fenster in eine Python-Konsole (Shift+F4) ändern. So kann man Befehle eingeben und die Ergebnisse anzeigen. Dieses Fenster kann geteilt werden, um die Konsole auf einer Seite zu behalten und die andere Seite als Info-Fenster zu nutzen. So kann man den Code der Aktionen sehen, wenn man auf die Benutzeroberfläche klickt.

Sicherstellen, dass der EEVEE-Renderer verwendet wird. Im Bereich Eigenschaften zu Renderung gehen und für Render-Engine die Option Eevee auswählen.

bpy.context.scene.render.engine = 'BLENDER_EEVEE'

5. Die Modelldatei über das Menü Datei → Importieren → Wavefront (.obj) importieren.

Alternativ kann der Import auch über die Python-Konsole erfolgen.

obj_file = "/home/user/assembly.obj"
bpy.ops.import_scene.obj(filepath=obj_file)

6. Den Maßstab ändern.

Wenn die Körper sehr groß erscheinen, muss man möglicherweise die Einheiten ändern, damit die Objekte im richtigen Maßstab angezeigt werden.

Im Bereich Eigenschaften zu Szene, Einheiten gehen und das entsprechende Einheitensystem, die Einheitenskalierung und die Länge auswählen.

Bei kleinen Teilen empfiehlt es sich, die Länge auf Millimeter und den Maßstab auf 0.001 zu belassen. Bei größeren Teilen, beispielsweise dem Modell eines Gebäudes, müssen diese Werte möglicherweise auf Meter und 0.001 eingestellt werden. Nach Bedarf andere Maßstabwerte ausprobieren.

Dies kann auch über die Python-Konsole eingestellt werden.

bpy.context.scene.unit_settings.length_unit = 'MILLIMETERS'
# or bpy.context.scene.unit_settings.length_unit = 'METERS'
bpy.context.scene.unit_settings.scale_length = 0.001

Hinweis: Das Ändern des Maßstabs und der Einheiten der Szene ist nur erforderlich, wenn man mit Objekten in ihren tatsächlichen Abmessungen arbeiten möchte. Wenn man die Szene nur schnell rendern möchte, kann auf Anpassungen verzichtet werden.

6.1. Wenn man herauszoomt und die Ansicht die importierten Teile abschneidet, muss man möglicherweise die Werte für den Ansichtsausschnitt anpassen.

N drücken, um das Zusatzfenster anzuzeigen. Zum Abschnitt View gehen und End auf einen großen Wert setzen, zum Beispiel 1E6 mm oder 1000 m.

6.2. Wenn man möchte, kann ie auch die Größe des Rasters angepasst werden. Man geht dazu zu Overlays, dann zu Guides und setzet die Scale des Rasters auf 0.001.

7. Die Drehung der Objekte fixieren.

Beim Importieren können Objekte um eine der Achsen gedreht erscheinen, beispielsweise um 90 Grad um die X-Achse. N drücken, um das Zusatzfenster anzuzeigen. Ein Objekt auswählen, zum Abschnitt Transform gehen und Rotation in jedem Feld auf setzen. Diesen Vorgang für jedes Objekt wiederholen.

Dies kann durch ein kleines Skript automatisiert werden, das einfach die Rotation jedes importierten Körpers auf Null setzt, mit Ausnahme der Objekte innerhalb des fixed_objs-Tupels. Dies kann nützlich sein, wenn man Objekte in eine bestehende Szene importiert, in der sich andere Objekte bereits an der richtigen Position befinden.

fixed_objs = ('Camera', 'Cube', 'Light')

for obj in bpy.data.objects:
    if any(s for s in fixed_objs if s in obj.name):
        print('%s %s  [[No change]]' % (obj.name, obj.rotation_euler))
        continue
    else:
        obj.rotation_euler = (0, 0, 0)
        print('%s %s  ... rotated' % (obj.name, obj.rotation_euler))

In FreeCAD erstellte Baugruppe in Blender importiert; das Modell wurde gedreht und die Einheiten für die Szene wurden an die importierten Objekte angepasst.

Die Kamera der Szene vorbereiten

8. Die Kamera in die richtige Position bringen.

Den Ansichtsbereich so anpassen, dass man das Modell in der gewünschten Ausrichtung sehen kann, und dann Strg+Alt+0 (Ziffernblock) drücken oder das Menü Ansicht → Ansicht ausrichten → Aktive Kamera an Ansicht ausrichten verwenden.

8.1. Wenn man in der Kameraansicht nichts sieht, muss man möglicherweise den Ausschnitt anpassen. Die Kamera im Outliner auswählen, zum Properties-Panel gehen, dann zu Object Data, dann zu Lens und den Clip End auf einen großen Wert setzen, zum Beispiel 1E3 mm oder 1000 m.

bpy.context.object.data.clip_end = 1e+03

Wenn man das Objekt durch die Kameraansicht sehen kann, kann man das Modell nun schnell rendern, indem man F12 drückt. Dadurch wird der Bildeditor mit dem Ergebnis geöffnet. Esc drücken, um den Bildeditor zu verlassen und zum 3D-Ansichtsfenster zurückzukehren.

Erstes Rendering der Baugruppe in Blender, mit korrekter Clipping-Einstellung der Kamera, aber ohne Beleuchtung

Zwischen der Kameraansicht und dem 3D-Ansichtsfenster umschalten, indem man 0 auf dem Ziffernblock drückt. Durch Drücken von F12 wird die Kameraansicht jederzeit gerendert.

8.2. Wenn die Kamera im 3D-Ansichtsfenster sehr klein erscheint, zum Bereich Eigenschaften gehen, dann zu Objektdaten, dann zu Ansichtsfensteranzeige und einen größeren Wert für Größe einstellen, zum Beispiel 20 mm. Außerdem das Kontrollkästchen Limits aktivieren, um den Zuschnitt-Abstand der Kamera anzuzeigen.

bpy.context.object.data.display_size = 20
bpy.context.object.data.show_limits = True

Die Beleuchtung der Szene vorbereiten

9. Das Licht im Outliner auswählen, zum Properties-Panel gehen, dann zu Object Data, auf Sun klicken und die Strength auf 5.0 einstellen.

bpy.context.object.data.type = 'SUN'
bpy.context.object.data.energy = 5

Dadurch wird das Licht zu einer Sonnenlampe. Diese Art von Lampe strahlt eine unendliche Anzahl paralleler Lichtstrahlen aus, die alle in einem festen Winkel auf die Szene treffen.

Die Sonnenlampe kann an einer beliebigen Stelle im Ansichtsfenster über dem Modell positioniert werden, um die Richtung der Lichtstrahlen festzulegen. Bei einer Sonnenlampe spielt es keine Rolle, wie nah oder weit entfernt Sie die Lampe platzieren, sondern nur die Richtung der Strahlen, die durch die Drehung des Objekts Light definiert wird.

bpy.context.active_object.location = (150, 100, 100)
bpy.context.active_object.rotation_euler = (0.6, 0.05, 1.88)

Erneut F12 drücken, um eine vorläufige Darstellung des Modells anzuzeigen.

Rendering der Baugruppe in Blender mit einer hinzugefügten Sonnenlampe, die parallele Lichtstrahlen mit einem festen Winkel aussendet

Weitere Einstellungen: Boden, globale Beleuchtung, Reflexionen und weiche Schatten

10. Eine Bodenebene hinzufügen. Shift+A drücken, dann Mesh, Plane wählen und ihr Abmessungen geben, die etwa zehnmal größer sind als das Modell. Dieses Netzobjekt dient als Bodenebene oder Tischplatte, auf der das Modell steht. Die Ebene außerdem etwas nach unten verschieben, damit sie das Modell nicht schneidet; -1 mm unterhalb des Objekts ist ausreichend.

bpy.ops.mesh.primitive_plane_add(size=1500, view_align=False, enter_editmode=False, location=(0, 0, -1))

11. Die Weltbeleuchtung einstellen. Im Bereich Eigenschaften zu Welt gehen und Farbe auf einen hellblau-grauen Wert einstellen, RGB (0,358, 0,512, 0,527) und die Strength auf 0,3.

12. Reflektionen und Schatten einstellen. Der EEVEE-Renderer von Blender erzeugt schnelle Renderings, indem er zunächst die meisten Effekte deaktiviert. Um bessere Bilder zu erhalten, müssen einige Optionen aktiviert werden.

Zum Bereich Eigenschaften gehen, dann zu Rendern und Bildschirmraumreflexionen aktivieren. Im Abschnitt Schatten auch Weiche Schatten aktivieren.

bpy.context.scene.eevee.use_ssr = True
bpy.context.scene.eevee.use_soft_shadows = True

Die Materialien der Objekte festlegen

13. Das Python-Konsolen-Fenster in ein Shader-Editor-Fenster (Shift+F3) verwandeln.

13.1. Die Grundebene auswählen, zum Bereich Eigenschaften gehen, dann zu Material und auf Neu klicken. Im Shader-Editor sollte ein Knoten Principled BSDF erscheinen. Ihm eine beige Grundfarbe RGB (0,318, 0,267, 0,187) geben, den Metallic-Schieberegler auf 0,000 stellen und den Roughness-Schieberegler auf 1.000.

Prinzipieller BSDF-Shader, der in Blender verwendet wird, um eine Vielzahl von Materialien zu simulieren, von glänzenden Metallen bis hin zu rauen und undurchsichtigen Feststoffen.

13.2. Alle Teile des Modells auswählen und den jeweiligen Materialknoten Principled BSDF anpassen. Für metallische Teile die Eigenschaft Metallic vollständig auf 1.000 drehen. Den Wert von Roughness so anpassen, dass er zwischen 0.2 und 0.7 liegt. Je näher Roughness an 0.000 liegt, desto reflektierender (spiegelähnlicher) erscheint es.

Für Nichtmetalle wie Kunststoffe, Holz und Textilien den Schieberegler Metallic ganz auf 0.000 stellen und den Wert von Roughness auf einen Wert zwischen 0.4 und 1.0 anpassen.

Im Allgemeinen sind Metalle von Natur aus glatt und weisen daher einen geringen Rauheitswert auf, wodurch sie sehr reflektierend (glänzend) sind. Andere Materialien sind mikroskopisch rau und reflektieren daher weniger Licht, wodurch sie undurchsichtig sind.

14. Verschiedene Materialkombinationen testen, bis sie akzeptabel aussehen. Z und dann 8 (Ziffernblock) drücken, um in den Rendered-Modus zu wechseln. In diesem Modus zeigt der EEVEE-Renderer in Echtzeit im 3D-Ansichtsfenster, wie das endgültige Bild aussehen wird. Z verwenden, um das Pie-Menü zu öffnen und zurück zum Modus Solid (Z 6) zu wechseln, oder zum Modus LookDev (Z 2) wechseln, einem Modus, der der Szene verschiedene Arten von Beleuchtung hinzufügt, um das Aussehen der Materialien zu testen.

F12 drücken, um die Ansicht durch die Kamera zu rendern und die Bildqualität zu überprüfen.

Rendering und speichern

15. Wenn das Modell mit dem EEVEE-Renderer einigermaßen gut aussieht, kann das Bild bereits gespeichert werden, indem man zu Bild → Speichern unter geht oder Shift+S im Bildeditor drückt.

Mit Blender EEVEE erstellte gerenderte Baugruppe; alle Materialien verwenden den Principled BSDF-Shader; es wird nur eine Sonnenlampe verwendet, mit etwas Umgebungslicht im Hintergrund.

16. Wenn man die Bildqualität verbessern möchte, probiert man den Cycles-Renderer aus.

Zum Bereich Eigenschaften gehen, dann zu Rendern und für Render-Engine die Option Cycles auswählen. Mit dem Cycles-Renderer verfeinert Blender das Bild schrittweise, bis eine bestimmte Anzahl von Iterationen durchgeführt wurde. Bei jeder Änderung des Ansichtsfensters wird die Neuberechnung neu gestartet.

bpy.context.scene.render.engine = 'CYCLES'

16.1. Die Abtastrate anpassen. Zum Bereich Eigenschaften gehen, dann zu Rendern und im Abschnitt Abtastung eine geeignete Zahl für Rendern und Ansichtsfenster auswählen.

Für das Viewport reicht in der Regel eine geringe Anzahl von Abtastungen im Bereich von 32 bis 128 aus, um eine gute Vorschau des Bildes zu erhalten. Für das endgültige Bild setzt man Render auf eine höhere Zahl, von 128 bis 2000, je nach Komplexität und Detailreichtum der Szene.

F12 drücken, um die endgültige Ansicht durch die Kamera zu rendern. Je nach Grafikkarte (GPU) dauert das Rendern mit Cycles einige Sekunden oder Minuten länger als mit EEVEE, aber die Bildqualität sollte besser sein.

17. Wenn man mit der Qualität der Darstellung zufrieden ist, geht man im Bildeditor zu Bild → Speichern unter oder drückt Umschalt+S.

Mit Blender Cycles gerenderte Baugruppe; alle Optionen, Materialien und Lichter, die mit EEVEE verwendet wurden, wurden für die Verwendung mit Cycles beibehalten.

Rendering über die Befehlszeile

18. Wenn die Szene vollständig fertiggestellt ist, möchte man möglicherweise außerhalb von Blender über die Befehlszeile des Betriebssystems rendern. Dies kann nützlich sein, um verschiedene Szenen in einem Remote-System stapelweise zu rendern. Sowohl EEVEE als auch Cycles werden unterstützt.

blender -b assembly.blend -E BLENDER_EEVEE -o //assembly_EEVEE_#### -t 3 -F PNG -x 1 -f 1
blender -b assembly.blend -E CYCLES -o //assembly_CYCLES_#### -t 3 -F PNG -x 1 -f 1

Dies legt fest, dass das Rendern im Hintergrund mit -b erfolgen soll; die Rendering-Engine wird mit -E ausgewählt; der Name der Ausgabedatei wird mit -o ausgewählt; der doppelte Schrägstrich // gibt einen relativen Pfad zur Eingabedatei an; das Hash-Zeichen # wird verwendet, um die Bildnummer anzugeben, die bei Bedarf mit Nullen aufgefüllt wird, zum Beispiel 0001; Die Anzahl der beim Rendern verwendeten CPU-Threads wird mit -t 3 ausgewählt. Das Ausgabeformat wird mit -F angegeben, und die Option -x 1 fügt automatisch die Erweiterung zum Namen hinzu. Die letzte Option ist -f 1, die angibt, dass nur der erste Frame gerendert wird, was bei einer statischen Szene der Normalfall ist. Für Animationen verwendet man den Schalter -a, um für jeden Frame ein Bild zu erzeugen, die dann zu einer Videodatei zusammengesetzt werden können.

Plugin importieren

In den meisten Fällen funktioniert es, wenn Sie das Wavefront-Zwischennetz (.obj) erstellen und dann in Blender importieren. Es besteht jedoch auch die Möglichkeit, die FreeCAD-Datei (.FCStd) mithilfe eines Plugins direkt in Blender zu importieren.

Dies ist ein Blender-Plugin. Damit es funktioniert, muss Blender in der Lage sein, FreeCAD als Modul aus der Python-Konsole zu importieren.

import FreeCAD

Dies ist nur möglich, wenn sowohl Blender als auch FreeCAD mit derselben pythonX.Y (Haupt- und Neben-)Version kompiliert wurden. Wenn Blender beispielsweise mit Python 3.7 kompiliert wurde, muss FreeCAD ebenfalls mit einer Python 3.7-Version kompiliert werden. Wenn FreeCAD mit einer anderen Version kompiliert wurde, beispielsweise Python 2.7.15 oder Python 3.6.7, funktioniert das Plugin nicht. Die Mikroversionsnummer (dritte Zahl) spielt keine Rolle, d. h. das Plugin sollte funktionieren, wenn eine Software mit Python 3.7.5 und die andere mit Python 3.7.8 kompiliert wurde.

Darüber hinaus sollte das vorkompilierte Python-Modul von FreeCAD, FreeCAD.so unter Linux und FreeCAD.pyd unter Windows, im Python-Pfad enthalten sein, den Blender zum Importieren von Modulen verwendet. Dieser Pfad kann je nach Betriebssystem und Python-Distribution auf unterschiedliche Weise eingerichtet werden.

In Blender kann man alle durchsuchten Pfade anzeigen, indem man die Variable sys.path überprüft. Das FreeCAD-Modul sollte sich in einem dieser Verzeichnisse befinden.

import sys
print(sys.path)
ln -s /usr/lib/freecad/lib/FreeCAD.so $HOME/.config/blender/2.80/scripts/addons

ln -s /usr/lib/freecad/lib/FreeCAD.so $HOME/.local/lib/python3.7/site-packages
import sys
sys.path.append("/usr/lib/freecad/lib/FreeCAD.so")

Schlussbemerkungen

EEVEE ist kein physikalisch präziser Renderer, seine größte Stärke liegt jedoch darin, dass es sich um eine Echtzeit-Engine handelt, die schnelle Renderings direkt im 3D-Viewport erstellen kann. In vielen Fällen haben diese Bilder eine für die Endproduktion ausreichende Qualität, sodass in sehr kurzer Zeit ein gutes Ergebnis erzielt werden kann. In Fällen, in denen komplexe Lichtinteraktionen gewünscht sind (Reflexionen, Brechungen, volumetrisches Licht und Kaustik), ist EEVEE eingeschränkter und erfordert einige Optionen und Tricks, um einige dieser Einschränkungen zu umgehen.

Cycles hingegen ist ein echter Raytracing-Renderer, was bedeutet, dass er die Lichtwege in einer Szene genauer berechnet. Cycles ist der empfohlene Renderer, wenn beste Qualität (fotorealistische Ergebnisse) gewünscht wird, allerdings auf Kosten einer längeren Renderzeit.

Beide Renderer können genutzt werden, um die jeweiligen Vorteile auszuschöpfen. In vielen Fällen kann die Szene schnell mit EEVEE vorbereitet und getestet werden, um vorläufige Renderings zu erhalten. Anschließend kann dieselbe Szene mit geringfügigen Änderungen mit Cycles verwendet werden, um ein qualitativ hochwertigeres Endergebnis zu erzielen. Insbesondere wenn eine mit EEVEE eingerichtete Szene mit Cycles verwendet wird, müssen möglicherweise die Werte und Positionen der Lichter angepasst werden, da beide Renderer Licht unterschiedlich behandeln.

Das Erreichen guter Ergebnisse hängt stark von den Rendering-Optionen, den Materialien und der Beleuchtung ab. Der Material-Shader Principled BSDF ist eine generische Lösung, die in vielen Fällen gut funktioniert. Um jedoch wirklich fotorealistische Ergebnisse zu erzielen, ist die Verwendung von Textur- und Normal-Maps sowie eine sorgfältige Beleuchtung der Szene nach wie vor sehr wichtig.