A 3D-beginners first Try at Realism
Dieser Beitrag ist ein wenig aus dem Herumprobieren in Blender entstanden, und einem ersten «richtigen» Projekt darin. Und anschliessend hier dann ein Erfahrungsbericht, der versucht zu reflektieren;
(Bei weiten nicht umfassend. Bezüglich Dokumentations-Aspekt oder möglichen Potentialen.)
über das Technische und Künstlerische, was gut, schlecht und welches die richtigen Pointer für Verbesserungspotenziale sind. Die gibt’s natürlich noch unendlich viel und überall, aber das macht es für mich gerade so faszinierend, und vielleicht gibt dieser Bericht der einen oder anderen Person, und sicher mir selbst, Stichworte, in die man sich mal einarbeiten könnte und Potenzial bieten.
Anfangs wollte ich eigentlich ein kurzes Video machen, allerdings lief mir dann irgendwie die Zeit davon, und schlussendlich habe ich bloss ein paar Still’s gerendert, anstatt noch einiges zu animieren. Auch weil mein Computer sonst ewig blockiert und am Rendern gewesen wäre. Allerdings hätte das natürlich den Vorteil gehabt, währenddessen Heizkosten sparen zu können. Es ist kein Post-Processing vorgenommen worden.
Modelling
Es ist alles selbst gemodelt, bis auf die Vegetation. Ich glaube es lohnt sich, die Dinge immer in so vielen Teilen zu modeln, wie sie auch in Realität physisch hätten, so generell. Also nicht versuchen ein Zaunelement in einem Teil zu modellieren, sondern die Zaunlatten und -pfahl als einzelnes Mesh, beispielsweise.
Ebenfalls ist mir aufgefallen wie unheimlich ungleich meine Vertex-dichte verteilt ist. Je nachdem kann man sogar wieder Dinge, die weiter weg sind mit weniger «Auflösung» modellieren, angelehnt an das vom ‹Endprodukt her kommen›. Aber mit Sicherheit steckt da für mich noch Verbesserungspotenzial, etwas besser abzuschätzen, wieviel Geometrie tatsächlich nachher benötigt wird. Beispielsweise sind im folgenden Bild die Dachziegel viel zu hochauflösend, die Teekanne auch, das Geweih auch, die Weinflasche ebenfalls, und der Stehlampen-Stoff auch.
Cloth Simulationen sind ein erstaunlich einfacher Trick, um aus einer hochauflösenden Ebene oder Würfel eine Bettdecke oder Kissen zu machen, speziell wenn man vor der Simulation noch zufällig einige Punkte verzieht. Do recommend. Wurde bei der Stehlampe und Bett genutzt.
Der Zaun wurde mithilfe einer Punkte-Kurve in GeometryNodes konstruiert. Die wird auf die Oberfläche der Insel projiziert und entlang derer werden Zaunelemente verteilt. Das Dach wurde ebenfalls mit GeoNodes aufgebaut.
GeoNodes ist ein extrem mächtiges Tool um prozedural Geometry, ja sogar Animationen und bis hin zu unterstützenden Daten für’s Shading zu generieren. Es ist Node basiert und nicht extrem einsteigerfreundlich, aber hat man die Basics mal draussen, ist es erstmal vielleicht wie eine verbesserte Modifier-Anordnung, aber später bietet es unheimlich viel Potential. Do recommend; und es gibt noch so viel Potential über meine limitierten Anwendung hinaus.
Die Insel habe ich anfangs mal mit viel «echtem» Detail gesculpted, habe das aber wieder verworfen, und mit dem Shrinkwrap-Modifier ein niedrigauflösendes Raster auf die Insel projiziert, was man im folgenden Bild sehr gut sieht.
Der Ozean ist mit einem built-in ‘Ocean-Modifier’ einfach zu generieren, viel wichtiger ist hier das Material. Hier würde sich, speziell für Animationen noch viel Potential mit Fluid-Simulationen bieten.
Die Kerze habe ich gesculpted, mit viel zu viel Detail, wenn man bloss die hier aufgeführten Stills betrachten würde. Dasselbe bei dem Geweih. Bloss habe ich jenes «retopologized», die Kerze nicht, weil es eine sehr unregelmässige Form mit viel Details war, und einfach viel Arbeit. Retopologizing ist das manuelle ‘nachfahren’ der Form, so dass die Kanten an den effektivsten Stellen liegen, und nicht so zufällig und in ineffektiv grosser Menge da sind, wie es nach dem Sculpting ist. Dass ermöglicht neben Vertices-einsparen auch, dass Subdivisions etwas vorhersagbarer sind. Weshalb ich nachdem dann den Knochen wieder einmal subdivided habe? – Keine Ahnung, war eigentlich nicht nötig.
Für die Inseloberfläche habe ich statt der «echten», zugreifbaren Geometry ein experimentelles Feature der ‘Cycles’ Renderengine genutzt, die ermöglicht die Subdivision einer Geometry an die Betrachtungsentfernung anzupassen; generell ist der Detailgrad dieser Unterteilung über einen Parameter einstellbar.
So hat man dann schon echte (zwar nicht direkt editierbare) Geometrie, aber durch eine Pixelanzahl bestimmt.
Für die Vegetation habe ich mit dem Add-on «Gscatter» gearbeitet. Ich hätte das ganze über ein Particle System oder GeoNodes lieber von Grund auf gemacht, und besser verstanden und besser in der Hand gehabt. Aber es war so sehr einfach über Weightmaps (Daten ‘auf’ jedem Punkt einer Geometrie gespeichert, hat daher dieselbe Auflösung wie die Punkte-dichte, aber interpoliert zwischen den Punkten) Pflanzen-props über die Insel und Efeu über den Leuchtturm zu verteilen / malen. Siehe Bild:
Materials
Für die Materialien habe ich grundsätzlich PBR-Materials genutzt. Aber man kann auch aus einem Bild mit Adobe Substance-Sampler ein solches Material erstellen. Das habe ich beispielsweise bei der Tapete gemacht. Jenes Bild kommt aus einem Hotel in Cardiff, Wales.
Manche Materialen sind noch etwas manipuliert oder ganz prozedural (glaube bloss die Dachziegel, Glass und das Wasser sind das). Beispielsweise habe ich mit der Ambient Occlusion – Node Dreck hinzugefügt.
(AO ist eine Map welche die Nähe oder ‘Verdecktheit’ eines Punktes durch/zu andere Flächen repräsentiert. Das selektiert meist gut die Kanten und Ecken in denen sich Staub oder Moos ablagern würde. Dann kann man einfach an denen Stellen eine dunkle Farbe oder sogar eine spezifische Textur zu Grund-Textur mixen.)
Wenn man ganz genau hinschaut, sieht man das bei der goldenen Spitze des Leuchtturms.
Mit Normal- und Bump-Maps (im Effekt ähnlich, aber im UserInput unterscheidet sich die Bedeutung der beiden Bitmaps jeweils, glaube ich…) kann man noch coole Effekte machen, ohne extra Geometrie machen zu müssen. Man sieht bspw. in Abbildung 2, dass das Glas so wellig wirkt. Das ist auch durch eine Normal Map erzielt worden. Die Hinterlassenschaften einer Pasta auf dem Teller oder auch ein Löwenkopf auf zwei Beinen des Schreibtisches (nicht auf einem der Renders ersichtlich :-)). sind ebenfalls durch eine Bump-Map entstanden. Obwohl dort keine zusätzliche Geometrie ist, wird in der RenderEngine die Information genutzt, als ob es dort tatsächliche Oberflächen mit bestimmten Richtungen gäbe. So erhalten die Essensreste dann Schatten, Wie man in der 2. Abbildung sieht.
Procedural Textures oder das gemixt mit PBR-Material ist noch ein riesiger Bereich, der sicherlich viel Potential bietet. Der Shading Editor ist zwar noch kein Ersatz, glaube ich, für Substance Painter, aber er bietet schon extrem viel zum Erforschen und damit kreativ werden. Solche Auswahlen von bestimmten Orten, denen man dann Farben zuweist sind glaube ich eine mächtige Sache zum Lernen. Bspw. so Sachen wie Auswahl über AO, oder über bestimmte Richtungen in die die Ebenen schauen (Normaldirection-Selection… oder so).
Für die Insel habe ich mehrere Materialien in ein Material gemixt, über ein Color-Attribute (wiederum Daten pro Punkt). Für die Planken des Aussenhauses hätte die reine «Punkte-Auflösung» nicht gereicht, und daher habe ich dort ein Bild als Maske genutzt. So hat man viel mehr Kontrolle, und die Übergänge können überhaupt erst smooth sein, über das Mixen der Materialien, als wenn man einfach diskreten Faces bestimmte Materialen zuweist.
Auf jeden Fall entsprach dann immer der r,g oder b-Kanal der Information als die Stärke eines der drei/zwei Materialien. Im Folgenden sieht man die Maske des Aussenhauses, welche zwischen einwandfreier und abgeblätterter Lackierung gemixt hat:
Wie in Abbildung 11 zu sehen ist, erkennt man, dass die Texturen ge’tiled’ / «mehrmals nebeneinandergelegt» wurden. Um das zu vertuschen kann man typischerweise die UV-Map manipulieren und verzerren, und die einzelnen ‘Tiles’ unterschiedlich drehen. Als ich das gemacht habe, war irgendwas dadurch ‘blöd’ und nicht brauchbar. Nur blöderweise kann ich mich gerade nicht mehr daran erinnern, was das war.
(UV-Map Manipulation ist ein Grundstein der Procedural Material – Generation )
Die Texturen für das Geweih und die Etiketten auf der Tasse habe ich mit der ‘Stencil’-Method auf eine extra Textur gemalt und dann mit demselben UV-Mapping auf die Grundtextur addiert. Mit Texture Painting lässt sich das Tiling-Problem von oben umgehen. Verbunden mit mehr manueller Arbeit halt. Und es geht in Blender nach meinem Verständnis nicht so einfach, mehrere Kanäle eines Materials/Bilder zugleich malen, daher der Art Workaround mit dem Material-Mixen über R,G,B. Dafür malt man so aber nicht direkt auf eine/mehrere Texturen, und kann es immer wieder ändern.
Im Versuch noch etwas Athmosphäre hinzuzufügen, habe ich Volume Shaders benutzt. Einfach grosse Quader mit einem Volume Shader (Ein «Shader» in der Blenderumgebung ist das, was dann in der Renderengine für ein Objekt schlussendlich bestimmt, wie es mit dem Licht interagiert, oder wie schlussendlich berechnet wird, welche Farbe im Render ein Objekt wo erhält. Zumindest stelle ich es mir irgendwie so vor.)
Im unteren der beiden folgenden Bilder sieht man auf der Oberfläche die Dichteverteilung des Nebels. Allerdings resultierte das in den Renders (oberes Bild) dann doch meist einfach in einer Art globaler Kontrastreduktion (drittes folgendes Bild). Nicht so überzeugend.
Da liegt noch Verbesserungspotenzial.
Im Aussenhaus habe ich noch einen eigenen solchen Volume-Shading- Quader reingetan.
Lighting
HDRI’s sind sehr beliebt um zugleich als Hintergrundbild der gesamten Szene und als Licht-Emissions-Quelle zu funktionieren. Sie sind 360-Bilder, die im Shading des ‹Welt-Objekts› angewendet werden. So kriegt man bspw. deutlich interessantere Reflektionen, als wenn man bloss eine Sonne als Lichtquelle hätte. Trotzdem habe ich noch eine Sonnenlichtquelle aus der Richtung dazugemischt, wo sie auch im HDRI ist.
Bilder von Flammen als Textur auf Ebenen wurden als Lichtquellen benutzt, für die Kerze und Petrollampe. Ansonsten einfach normale Lichtquellen.
Ähnlich wurden auch Bilder anstatt von echten Rauch-Simulationen eingesetzt, um Tasse und Kaffeekanne Dampf zu verleihen. Das scheint zwar aus einer spezifischen Perspektive gut, ist aber meist in anderen Perspektiven unrealistisch. Und zudem statisch. Das ist definitiv verbesserungswürdig, vielleicht mit einem animierten Volumeshader, oder echter Rauch-Simulation. Wobei echte Rauch-Simulationen meines Wissens nur mit Add-ons möglich sind, oder mit viel Können in GeoNodes.
Rendering
Beim Rendering hatte ich Probleme, dass die ganzen Texturen beim Laden in den Arbeitsspeicher meiner GPU dessen Grenzen erreichten. Hieraus werde ich lernen, in Zukunft wirklich gründlich zu überlegen, wie hoch die Auflösung einer bestimmten Textur (und auch wieder Vertex-Count) sein muss.
Mann kann je nach Aufnahme allerdings auch einfach Objekte komplett aus der ‘View Layer’ nehmen, die gerendert wird (standardmässig gibt es bloss eine, aber man könnte seine Szene in mehrere unterteilen.) Das habe ich dann gemacht, und konnte dann sogar mit GPU, anstatt von CPU rendern. (dem mehr Arbeitsspeicher zu Verfügung steht)
Mir ist aufgefallen, dass je dunkler (in Aussenhaus vs ausserhalb) es ist, desto länger braucht es bis ein gewisser Noise-Threshold unterschritten wird (durch denn ich anstatt von spezifischer Sample-zahl) die Samples bestimmt habe. Ich kann mir das nicht wirklich erklären, ohne zu recherchieren, aber trotzdem denke ich ist es generell am besten einen Noise-Threshold anstatt Sample-zahl einzustellen. De-noiser ist auch je nach Noise-Threshold brauchbar.
Depth of Field in den Rendersettings einzustellen habe ich anfangs vergessen, ist aber natürlich essenziell, um photo-realistisch zu sein.
Künstlerisches
Das Künstlerische lässt sich, glaube ich, in 3D nicht vom Technischen trennen, daher zählen die bis jetzt identifizierten Verbesserungspotentiale sicherlich auch teilweise hier hinein. Und das meiste, was im Vergleich zu aktueller 3D-Art in Games o.ä. mit diesem Versuch hier auffallen könnte, fiel mir vermutlich nicht auf. Aber;
Die Proportionen stimmen nicht überall für mein Gefühl. Daher sollte man ja eigentlich immer gleich mit Real-World Abmassen modellieren, um es nachher nicht von Auge hin-skalieren zu müssen. Bspw. fallen mir da die Schreibtischlatten auf (zu gross), die Weingläser sind leicht zu klein, und die Schrauben im Schreibtisch sind leicht zu gross.
Zudem fehlt es einfach an stimmigen Props, an Details. Die Wände sind relativ kahl, es ist nicht ganz klar welches Zeitalter es ist, und dem Ganzen fehlt so etwas der Charakter. Bspw. eine Zeitung auf dem Schreibtisch, oder ein überlaufender Müllcontainer hinter dem Haus, oder abfallende Tapete an manchen Orten wäre vielleicht was.
Wobei ich mir eigentlich Mühe gegeben habe, Imperfektionen und Unregelmässigkeiten einzubauen, wo möglich. Aber irgendwie sind die noch nicht im richtigen Scale. Die Dachziegel sind zwar leicht unterschiedlich schräg, aber es könnte ja eines kaputt sein oder komplett fehlen. Oder eben etwas wie ein kaputter Hut am Kleiderhaken, oder eben ein überlaufender Mülleimer oder ein Ofen.
Die Tapete habe ich eigentlich mit einem Gradienten von unten nach oben und vor allem an den ‘tiefen’ (auf der Heightmap des Materials tiefen) mit etwas ‘Russ’ oder Dreck versehen, aber das fällt gar nicht auf. Dasselbe gilt für viele kleiner Imperfektionen, die ich versucht habe einzufügen.
Beim Maskpainting hätte ich sicherlich auch mehr Musse walten lassen können. Realistische Gebrauchsspuren (wo reisst Lack typischerweise zuerst vom Holz) sehen vermutlich anders als meine praktisch gleichmässige Verteilung der zwei Texturen. Und wenn man detaillierter die Materialien blenden würde, würden das tiling auch nicht so auffallen.
Und mir fällt gerade auf, dass mein Schaukelstuhl keine Armlehnen hat. Höhö.
Fazit
Generell ist mir aufgefallen, dass es gut ist von dem Endprodukt oder Ziel herzuarbeiten, wenn das besteht oder entstehen soll. Am besten ist man sich halt immer klar, was man gerade tut und will, denn sonst verliert man sich in einem Bereich wie 3D so schnell in ‹Rabbitholes›. Ich habe mir bspw. nicht anfangs zu dem Video-Einstellungen vorgestellt und aufgeschrieben, sondern einfach angefangen Dinge zu modeln, und habe sehr oft viel Zeit in Details versenkt, die gar nicht auffallen oder da sind, im Endprodukt. Wenn man aber als Ziel hat, sich einfach etwas neues anzuschauen oder auszuprobieren, dann ist das natürlich nicht schlecht.
Ebenfalls hälfe das bei einem weiteren wichtigen Learning; Einschränken. Ich wünschte, ich hätte mich technisch mehr auf Teilbereiche eingeschränkt, bspw. aufs ‹Sculpting›, Geometry Nodes, Procedural Materials, Texturing, Rigging, Animation oder sogar noch spezifischer auf Sachen wie: «Photogrammetry to Clean Quad-geometry» oder bloss «Vegetation Creation and Scattering».
Das muss sich auch gar nicht einem Endprodukt entgegenstehen. Man kann gut ein Video aus Etwas, das mit ganz spezifischen Bereichen zusammenhängt und aus jenen entstandenen ist machen. Oder irgendetwas Interessantes rauspicken. Bloss würde man dann weniger im Unwissen herumrühren und versuchen irgendwas «Cooles» zu machen, obwohl man manchmal nur halbwegs versteht, was man tut.
(eli)
Ich interpretiere die Reflexion hier als Reflexion zum Arbeitsprozess allgemein, unterschiedlich zu der im Beitrag. Ich denke ich hätte systematischer (genauere Ziele) und zugleich, bei den richtigen Aufgaben dann, auch kreativer sein können. Ich habe mich unheimlich oft in Irgendetwas verloren oder habe Arbeit gemacht, die hier gar nicht vorkommt oder auffällt. Gut, zugleich habe ich vermutlich auch daraus jeweils Manches gelernt.
Und insgesamt habe ich mich ein bisschen überschätzt. Zeitlich, und daher, dass ich mir zugetraut habe, über so viele Bereiche mal drüber zu gehen und die Essenz zu lernen und mitzunehmen. Bei weitem nicht.
Aber insgesamt bin ich froh, mal ein erstes 3D-Projekt von Anfang bis (zu einem) Ende zu bringen.