Projekt: „Desmond Blue“ (11)

Rendering in Eevee © Copyright 2021 by Claus Cyrny. Alle Rechte vorbehalten.

Endlich! Mit Hilfe eines netten Benutzers bei Blender Artists habe ich es geschafft, meine kurze (552 Frames) Animation erfolgreich zu rendern, und zwar rendere ich in einer Shell.

Der Befehl: blender -b desmond_blue_010721_01a.blend -E BLENDER_EEVEE -s 1 -e 552 -t 2 -a

Und die Ausgabe – hier für Frame 469:

Fra:469 Mem:166.84M (Peak 168.07M) | Time:00:00.02 | Syncing Camera
Fra:469 Mem:166.84M (Peak 168.07M) | Time:00:00.02 | Syncing Area.002
Fra:469 Mem:166.84M (Peak 168.07M) | Time:00:00.02 | Syncing Plane
Fra:469 Mem:166.85M (Peak 168.07M) | Time:00:00.02 | Syncing Circle.002
Fra:469 Mem:166.88M (Peak 168.07M) | Time:00:00.02 | Syncing Empty
Fra:469 Mem:166.87M (Peak 168.07M) | Time:00:00.03 | Rendering 1 / 32 samples
Fra:469 Mem:166.85M (Peak 168.07M) | Time:00:01.72 | Rendering 26 / 32 samples
Fra:469 Mem:166.85M (Peak 168.07M) | Time:00:02.12 | Rendering 32 / 32 samples
Append frame 469
Time: 00:02.46 (Saving: 00:00.21)

Das Problem war nur, daß, als ich im Dateimanager Caja nachgeschaut habe, kein einziger Frame gespeichert war. 🙁 Erst, als ich das Ganze nochmal mit GUI gerendert habe, ging es. Im Prinzip konnte ich so (über die Shell) aber schon mit Eevee rendern.

Was bedeutet „Rendern“?

Eine 3D-Grafik wird gerendert.

Gerade in der 3D-Grafik stößt man/frau immer wieder auf den Begriff „Rendern“. Was bedeutet das allerdings? Im Prinzip bedeutet „Rendern“ die Berechnung einer Grafik aus irgendwelchen Rohdaten. Im obigen Beispiel berechnet der in Blender integrierte Renderer Cycles eine 3D-Grafik, wobei diese Quadrat für Quadrat aufgebaut wird, bis sie fertig ist. Den Begriff „Rendern“ gibt es aber nicht nur in der 3D-Grafik. Auch etwa bei der Darstellung von Schriften spricht man/frau von „Rendern“.

Why you should not use PNG files for image sequences

Ok, natürlich war mir klar, daß das PNG-Format nicht gerade optimal komprimiert. Ich habe es aber ungeachtet dessen trotzdem verwendet, um Einzel-Frames oder auch ganze Sequenzen von Bildern zu rendern. Nun habe ich gestern abend im Blender-Meetup eine Hinweis auf den Artikel „Why you should not use PNG files for image sequences“ entdeckt und ihn mir durchgelesen. Darin ist die Rede davon, daß als PNG gerenderte Bild-Sequenzen bis zu 20 mal (!) langsamer rendern als TIFFs oder EXRs. Das ist natürlich schon ein Argument, weshalb ich jetzt auf TIFF umgestellt habe, das es auch mit optionaler LZW-Kompression (LZW steht für Lempel-Ziv-Welch) gibt.

Blender: Rendern aus einer Shell

In den Blender-Docs ist die Möglichkeit dokumentiert, aus einer Shell heraus zu rendern, d. h. ohne GUI. Ich habe – zumal unter Linux – dieses Feature schon ausprobiert und finde es schick.

Ein Beispiel:

blender -b Dateiname.blend -E CYCLES -s 1 -e 1 -t 2 -a

Die Parameter bedeuten:

-a: Eine Animation rendern; -b: Im Hintergrund rendern (ohne GUI); -E: Render-Engine (hier: Cycles); -s: Start-Frame; -e: End-Frame (bei Einzelbildern sind beide Werte '1'); -t: Anzahl der Threads (ist prozessor-abhängig). Den Parameter -a habe ich hier im Beispiel nur der Vollständigkeit halber eingefügt. Natürlich macht das bei nur einem Frame keinen Sinn. Beim Rendern mit Eevee lautet der Parameter übrigens -E BLENDER_EEVEE.

ImageMagick: Bilder mit Rand

In ImageMagick 7 gerenderte Grafik mit Rand

Die obige Grafik ist nur ein Beispiel für die vielfältigen Möglichkeiten von ImageMagick. Soweit ich das einschätzen kann, kann man/frau da noch ganz andere (und viel komplexere) Sachen machen. Mittels compose ist es beispielsweise möglich, den obigen Rand in ein vorhandenes Bild – etwa ein Foto – einzufügen. Mehr zu compose -in der Version 7 magick compose – erfahrt ihr hier. Und für einen deutlich komplizierteren Einstieg ins Thema „Compositing“ seht bitte bei W3C.

Und: Der Rand ist nicht etwa nur ein punktförmiges Rauschen, sondern ein Muster:

Der Rand in der Vergrößerung.

Hier der Code, um den obigen Rand zu erzeugen:

convert -size 625×625 xc: -virtual-pixel black -spread 25 ergebnis.png

convert ist noch der Befehl für ImageMagick 6; in der Version 7 wird dieser durch magick ersetzt. convert funktioniert aber auch noch.

Das obige Codebeispiel könnt ihr natürlich nach Gutdünken modifizieren, indem ihr die verschiedenen Parameter anpaßt. 625x625 sind die Maße des Bildes; black die Farbe des Randes und 25 dessen Breite. Gefunden habe ich den Code hier.

Und – für diejenigen, die sich mit dem Code schwer tun: Es gibt auch eine ImageMagick-Version mit grafischer Oberfläche (GUI), die die wichtigsten Features von ImageMagick unterstützt:

ImageMagick mit grafischer Oberfläche

Aufgerufen wird die grafische Oberfläche aus einer Textkonsole (Shell) heraus über display. Daraufhin erscheint das Logo von ImageMagick mit dem Zauberer. Wenn ihr in dieses Logo klickt, erscheint die grafische Oberfläche, etwas so:

Durch Links-Klicken erscheint die grafische Oberfläche von ImageMagick.

Die diversen Feature sind für jemanden, der sich mit Grafik auskennt, eigentlich selbsterklärend. Für Anfänger dagegen ist ImageMagick meiner Ansicht nach aber eher nicht geeignet.

Weiterführender Link: „Fred’s ImageMagick Scripts“.

ImageMagick 7: Eine Sinuskurve rendern

In ImageMagick 7 gerenderte Sinuskurve. © Copyright 2021 by Claus Cyrny. Alle Rechte vorbehalten.

Im Zuge meines Beitrags „Über Kreativität“ mußte ich ja eine Sinuskurve zeichnen, was ich auch so einigermaßen hinbekommen habe. Ich habe mich da aber gefragt, ob man/frau das nicht auch mittels ImageMagick machen könnte. Wie ihr seht, geht das definitiv, auch wenn ich das nicht allein geschafft habe; jemand in einem Forum bei GitHub hat mir geholfen.

Hier jedenfalls das Script für Linux:

#!/bin/sh

magick \
-size 2400×1 gradient:Black-White \
-evaluate Sin 2 \
-scale „2400×2400!“ \
-size 2400×2400 gradient: \
-compose MinusDst -composite \
-fill „#fff“ +opaque „#000“ \
-morphology edgeout diamond:1 \
-morphology dilate plus:8 \
-fill Red -opaque White \
-fill White -opaque Black \
-colorspace RGB \
-resize 25% \
-colorspace sRGB \
x2.png

Und so müßte dasselbe Script als BAT-Datei für Windows aussehen:

@ECHO OFF

magick ^
-size 2400×1 gradient:Black-White ^
-evaluate Sin 2 ^
-scale „2400×2400!“ ^
-size 2400×2400 gradient: ^
-compose MinusDst -composite ^
-fill „#fff“ +opaque #000 ^
-morphology edgeout diamond:1 ^
-morphology dilate plus:8 ^
-fill Red -opaque White ^
-fill White -opaque Black ^
-colorspace RGB ^
-resize 25%% ^
-colorspace sRGB ^
x2.png

x2.png ist dabei die Grafik mit der Sinuskurve, die – wie man/frau sehen kann – oben und unten leider etwas abgeschnitten ist. Ich werden hier aber noch den optimierten Code posten.

Und so sieht die korrekte Kurve dann aus. (Ich habe das jetzt im Gimp editiert.)

In ImageMagick 7 gerenderte Sinuskurve. © Copyright 2021 by Claus Cyrny. Alle Rechte vorbehalten.

Wie man/frau sieht, kann man/frau mittels ImageMagick total schicke Sachen machen. Leider hat sich dieses Programm aber außerhalb von Grafikkreisen ob seiner komplexen Handhabung nicht so richtig durchsetzen können. ImageMagick gibt es zwar mit grafischer Oberfläche (GUI); diese Version unterstützt aber nur sehr rudimentäre Funktionen. Codebeispiele finden trotzdem Interessierte auf der ImageMagick-Homepage.

P. S.: Hier wie versprochen der korrekte Code des obigen Scripts:

#!/bin/sh

magick \
-size 2400×1 gradient:Black-White \
-evaluate Sin 2 -evaluate Multiply 0.98 -evaluate Add 1% \
-scale „2400×2400!“ \
-size 2400×2400 gradient: \
-compose MinusDst -composite \
-fill „#fff“ +opaque „#000“ \
-morphology edgeout diamond:1 \
-morphology dilate plus:8 \
-fill Red -opaque White \
-fill White -opaque Black \
-colorspace RGB \
-resize 25% \
-colorspace sRGB \
x2.png

Und als BAT-Datei müßte das etwa wie folgt aussehen:

@ECHO OFF

magick ^
-size 2400×1 gradient:Black-White ^
-evaluate Sin 2 -evaluate Multiply 0.98 -evaluate Add 1% ^
-scale „2400×2400!“ ^
-size 2400×2400 gradient: ^
-compose MinusDst -composite ^
-fill #fff +opaque #000 ^
-morphology edgeout diamond:1 ^
-morphology dilate plus:8 ^
-fill Red -opaque White ^
-fill White -opaque Black ^
-colorspace RGB ^
-resize 25%% ^
-colorspace sRGB ^
x2.png

User snibgo von GitHub hat mir gerade noch eine optimierte Version zugemailt; zuerst mal als Windows-BAT-Datei:

@ECHO OFF

magick ^
-size 2400×1 gradient:Black-White ^
-evaluate Sin 2 ^
+write x.png ^
-scale „2400×2400^!“ ^
-size 2400×2400 gradient: ^
-compose MinusDst -composite ^
-fill #fff +opaque #000 ^
-morphology edgeout diamond:1 ^
-size 2400×8 xc:Black +swap -append ^
-size 2400×8 xc:Black -append +repage ^
-morphology dilate plus:8 ^
-fill Red -opaque White ^
-fill Blue -opaque Black ^
-colorspace RGB ^
-resize 25%% ^
-colorspace sRGB ^
x2.png

Weiterführende Links: Meine Beiträge „ImageMagick: Scans optimieren“ mit einem relativ einfachen Codebeispiel sowie „ImageMagick unter Windows“.

Blender: Modifier

Würfel mit blauem Hintergrund

An sich eine recht triviale 3D-Szene, die ich gerade in Blender gemodelt und mit Cycles gerendert habe. Um die Kanten des Würfels abzurunden, habe ich einen sogenannten bevel modifier verwendet. Gerendert wurde das Ganze mit 512 Samples, um die Artefakte („fireflies“) in dem blauen Schatten wegzubekommen.

Was heißt eigentlich rendern?

Screenshot: Rendern mit der Render-Engine Cycles

Gerade in der 3D-Grafik taucht häufig der Begriff „Rendern“ auf. Was heißt das eigentlich? „Rendern“ bedeutet, daß das 3D-Programm bzw. genauer der sog. Renderer aus der 3D-Geometrie ein fertiges Bild oder eine Animation berechnet.