Photoshop
Cinema 4d
Fotografie
Weitere Grafiksoftware
HTML / CSS
JavaScript
Flash
PHP
Webserver
Sonstige
UV-Unwrapping in Cinema4D (Cinema 4d Tutorial)
Tutorial erstellt von emtyx in Cinema4D R11, letzte Änderung am 31.01.2010Vorwort
Willkommen zum Tutorial „UV-Unwrapping in Cinema 4D“.
In diesem Tutorial werde ich versuchen, euch die Grundlagen des Unwrappings zu vermitteln, welches den Grundstein für das UV-Texturing darstellt.
Zuerst erwartet euch eine theoretische Einführung, um die Grundbegriffe zu klären und um ein paar Überlegungen anzustellen.
Im zweiten Teil werden wir anhand eines sehr einfachen Objekts (eine Zigarettenschachtel) mit geringem Aufwand unsere erste UV-Map erstellen. Wir werden herausfinden, was eine UV-Checkermap ist, was es mit Seams auf sich hat, wie wir das UV-Wire in ein 2D-Programm exportieren können und vieles mehr.
Für den dritten Teil habe ich ein einfaches Modell eines Kampfjets vorbereitet, an welchem wir das bis dahin bereits Gelernte noch einmal vertiefen werden. Außerdem sehen wir dabei, welche Auswirkungen das HyperNURBS auf die UV-Map hat.
Lasst euch von den Begriffen nicht einschüchtern, wir werden uns der Materie Schritt für Schritt nähern.
Wichtig ist jedoch, dass ihr das Tutorial nicht einfach Punkt für Punkt „nachklickt“, da ihr das Prinzip verstehen müsst, um das Gelernte danach auf eure eigenen Objekte anwenden zu können.
Was sind „UV’s“ und was bedeutet „Unwrapping“?
In 3D-Programmen wie Cinema4D orientiert man sich anhand der 3 Achsen, die einen dreidimensionalen Raum ausmachen, nämlich X, Y und Z. Ebenso brauchen Texturen Koordinaten, damit das Programm weiß, wo es die Textur auf dem Objekt positionieren soll. Dafür werden die UVW-Koordinaten (auch Texturkoordinaten) verwendet, wobei U dem X, V dem Y und W dem Z entsprechen würde.
Beim UV-Unwrapping brauchen wir uns um die W-Koordinate nicht zu kümmern, da wir so oder so eine zweidimensionale Fläche zum Ziel haben, die sogenannte UV-Map.
Unwrapping bedeutet also in diesem Sinne, dass wir einen dreidimensionalen Körper auf eine zweidimensionale Fläche „auffalten“. Wir erstellen also eine UV-Map, bildlich gesprochen eine „Textur-Landkarte“ für das Programm, damit es unsere zweidimensional erstellte Textur nach unseren Wünschen auf das dreidimensionale Objekt legen kann.
Schön und gut, nur wozu?
Sinn des Ganzen ist, dass wir mit einem 2D-Programm (wie Photoshop, Fireworks, Gimp etc.) individuelle Texturen für unsere 3D-Szene erstellen können. Es eröffnen sich dadurch neue Möglichkeiten für das Texturieren, da wir beispielsweise 2 Fototexturen miteinander „mischen/verschmelzen“ könnten oder eine Fototextur mit einer selbst gemalten Textur kombinieren könnten. Beides wäre ohne das UV-Texturing schwer bis gar nicht realisierbar, da prozedurale Shader und andere Mapping-Methoden, wie beispielsweise das Kugel- oder Quader-Mapping, für solche Aufgaben schnell an ihre Grenzen stoßen würden.
Wie kann ich mir das vorstellen?
Das wohl einfachste und bekannteste Beispiel ist ein Karton. Stellt euch einen aufgefalteten Umzugskarton vor. Dieser besteht aus 6 Seiten (Boden, Deckel und 4 Mantelseiten) und ein paar Kartonlaschen, damit er zusammenhält. Die Laschen interessieren uns hierbei nicht, da es uns rein um die sichtbaren Flächen des Kartons geht.
Hier eine visuelle Erklärung, die besser als jede schriftliche ist:

Wie ihr bei dem Zigarettenschachtel-Beispiel sehen werdet, ist es keine Hexerei, einen Würfel aufzufalten.
Grundbegriffe und andere theoretische Überlegungen
Bevor wir uns der Praxis zuwenden, möchte ich noch euch noch ein paar Grundbegriffe erklären beziehungsweise euch die eine oder andere Überlegung mit auf den Weg geben.
Da das Unwrapping eure weiteren Texturierungsarbeiten stark beeinflusst, ist es wichtig, sich vorher Gedanken über das Layout der UV-Map zu machen. Unweigerlich werden dabei die Begriffe „Seams“ und „UV-Relaxing“ eine Rolle spielen.
Seams
Unter Seams versteht man nicht anderes, als die Schnittkanten der UV-Map. Die passende deutsche Übersetzung wäre in diesem Fall „Nähte“. Diese Seams stellen die Ränder der „UV-Insel“ (so nennt man die zusammenhängenden UV-Polygone auf einer UV-Map) dar. Unser Karton besteht aus einer UV-Insel und hat 7 Seams

(Gleichfarbige Kanten auf dem UV-Wire ergeben eine Schnittkante am dreidimensionalen Objekt)
Das bedeutet, dass wir, um dem Beispiel des Kartons treu zu bleiben, mit einer imaginären Schere den Karton an 7 Kanten aufgeschnitten haben, um ihn auf eine zweidimensionale Fläche legen zu können.
Man sollte bei Möglichkeit möglichst viele Seams verstecken. Anders gesagt, die Schnittkanten sollten dort gesetzt werden, wo sie aufgrund der Kameraperspektive des Renders nicht zu sehen sind. Das ist deswegen von Vorteil, da ihr so beim Erstellen der Textur nicht so genau auf die Ränder der Map achten müsst, ob diese am Objekt zusammenpassen werden.
Man sollte jedoch auch keine Angst vor Seams haben, da sich diese bei komplexeren Objekten einfach nicht immer verstecken lassen, was mich zum nächsten Punkt führt, der eng damit zusammenhängt, nämlich dem Relaxing.
UV-Relaxing
Cinema4D stellt zwei Relaxing-Algorithmen zur Verfügung, nämlich LSCM und ABF. Obwohl LSCM eher für Hardsurface-Meshes und ABF eher für Organic-Meshes konzipiert ist, ist es ratsam, beide Methoden zu probieren und zu prüfen, welche im jeweiligen Fall das bessere Ergebnis liefert.
Wie ihr an der UV-Map des Kartons/Würfels seht, sind im UV-Wire alle 6 Polygone im Verhältnis zueinander gleich groß und perfekte Quadrate, wie es sich eben für einen Würfel gehört. D.h. die UV-Polygone sind nicht verzerrt (relaxed) und somit gut vorbereitet für die Bemalung. In diesem Fall habe ich dieses Ergebnis mit dem LSCM-Algorithmus (Hardsurface/Anorganisch) erreicht.
Ok, nur was ist UV-Relaxing?
Die Algorithmen versuchen, jedes einzelne Polygon des Objekts möglichst unverzerrt auf die UV-Map aufzutragen. Man kann sich das folgendermaßen vorstellen: Das Programm sieht sich ein Polygon „normal“, also im 90°-Winkel zu dessen Oberfläche, an. Angenommen dieses Polygon hat die Form eines Trapezes, dann wird der Relaxing-Algorithmus dieses auch im UV-Wire als Trapez darstellen. Da jedoch Polygone zusammenhängen und das nächste Polygon auch wieder eine andere beliebige Form haben kann, entstehen gewisse Verzerrungen. Der Algorithmus versucht diese auzugleichen.
Um nun diese Verzerrungen sichtbar zu machen bedienen wir uns einer sogenannten Checkermap:

Diese von Toadie und mir gebastelte Checkermap steht zu eurer freien Verfügung im Downloadbereich bereit.
Mit Hilfe dieser Checkermap, die wir als „Testtextur“ auf unser aufgefaltetes Objekt legen, können wir in der 3D-Ansicht genau feststellen, wo Verzerrungen zustande gekommen sind. So können wir Schritt für Schritt eine unverzerrte UV-Map erstellen.
Als Beispiel hier ein simples Objekt:


Man sieht anhand der Checkermap eindeutig, dass mit dem UV-Wire etwas noch nicht stimmt. Der Algorithmus versucht zwar sein bestes, aber schon geometrisch gesehen ist es nicht möglich, diese zusammenhängenden Polygone aufzufalten ohne sie zu verzerren.
Solch grobe Verzerrungen lassen meist darauf schließen, dass ein Schnitt vergessen wurde:

Durch das Schneiden der rot markierten Kanten bekomme ich eine unverzerrte Checkermap in der 3D-Ansicht zu sehen, was bedeutet, dass der Unwrapping-Prozess erfolgreich war:


Der ein oder andere mag es sich jetzt schon gedacht haben: Bezüglich der Seams ist eine entspannte UV-Map klarerweise im Vorteil, weil die UV-Polygone (und damit auch die Schnittkanten) im richtigen Größenverhältnis zueinander bzw. im richtigen Länge-Breite-Verhältnis zu sich selbst stehen. Damit steht im Idealfall der Bemalung der Schnittkanten-Bereiche auch nichts mehr im Wege.
Edge-Distortion im HyperNURBS
Dieses Thema gehört zwar noch zur Theorie, aber ich behandle erst im dritten Abschnitt (Kampfjet), da es einerseits für das erste Beispiel noch nicht relevant ist und andererseits juckt es euch wahrscheinlich schon in den Fingern.
Das erste Beispiel (Zigarettenschachtel)
Also genug von der Theorie, jetzt schreiten wir zur Tat. Zuerst holt ihr euch das Zigarettenschachtel-Ausgangsobjekt, welches im Downloadbereich bereitsteht: . Dann benötigt ihr noch die Checkermap, falls ihr diese noch nicht heruntergeladen habt: Downloadbereich
Folgende Situation/Ausgangslage: Das Modelling ist soweit abgeschlossen, nun geht es an die Texturierung. Ihr wollt eine Phantasie-Zigarettenmarke erstellen. Natürlich findet ihr keine passenden Texturen im Internet. Also bleibt nichts anderes übrig, als die Textur selbst zu erstellen. Um diese Textur möglichst gut auf dem Objekt platzieren zu können, müssen wir das Zigarettenpäckchen nun auf eine zweidimensionale Fläche aufbreiten/auffalten. Denkt dabei immer an das obige Beispiel mit dem Umzugskarton, denn hier ist es nichts anderes.
Lade Flash oder überprüfe ob JavaScript in deinem Browser aktiviert ist um das Video sehen zu können.
Die Schritte des Videos noch einmal kurz erklärt bzw. zum nachlesen:
1. In den Kantenmodus wechseln und die späteren Schnittkanten (Seams) auswählen
2. Wir wechseln in das UV-Edit-Layout
3. Wir aktivieren den UV-Polygonmodus (ACHTUNG, nicht mit dem Geometrie-Polygonmodus verwechseln)
4. Wir wählen alle UV-Polygone aus
5. UV-Befehle --> UV verbinden
6. UV entspannen: LSCM + Kantenselektion schneiden
7. Anordnen bzw. nach den eigenen Wünschen ausrichten
8. Ein neues Material erstellen und die Checkermap in den Farbkanal laden. Dem Objekt zuweisen und die Editor-Textur-Vorschaugröße höher stellen
9. Wir sehen, dass die Textur (Checkermap) spiegelverkehrt ist, deshalb spiegeln wir die UV-Koordinaten.
10. Neue Textur erstellen, Pinselfarbe schwarz und einen feinen Pinsel einstellen
11. Ebene --> Polygonkanten füllen (Wichtig hierbei ist, dass man im UV-Polygonmodus ist und alle UV-Polygone selektiert sind)
12. Wir speichern die Textur als psd-Datei (oder je nach euren Wünschen) ab. Sie beinhaltet nun unser UV-Wire.
13. Wir wiederholen den „Unwrapping-Vorgang“ für die Zigarette bzw. in unserem Fall den Zigarettenfilter (Die Schnittkante setzen wir auf der hinteren Seite, damit wir keine Seams in unsere Textur bekommen). Wir müssen dabei nur das eine Objekt bearbeiten, da die anderen 19 Zigaretten „Instanzobjekte“ sind, und die Eigenschaften übernehmen
14. Ist das Unwrappen fertig, überprüfen wir unsere Arbeit wieder mit der Checkermap.
15. Wieder sehen wir, dass die Textur noch nicht ganz stimmt
16. Wir spiegeln die UV-Koordinaten nun wieder, bis die Checkermap richtig auf unserem Objekt liegt
17. Wieder erstellen wir eine Textur, wählen alles aus und füllen die Polygonkanten mit dem vorher ausgewählten Pinsel und speichern das Ganze ab
18. Zum Schluss noch ein kleiner Überprüfungsrender
Anmerkung: Ihr könnt die Texturgröße nach euren Wünschen einstellen, je nachdem, wie hochauflösend ihr malen wollt.
Wer möchte, kann die innere Lasche des Päckchens auch noch unwrappen. Dafür müsst ihr nicht einmal schneiden (einfach Relaxen ohne Schnittkanten zu setzen)!
In einem 2D-Programm könnt ihr nun beginnen, die Textur nach euren Wünschen zu gestalten. Orientieren könnt ihr euch an der exportierten UV-Wire-Ebene. Sie zeigt euch an, wo ihr texturieren müsst.
Tipp: Bei komplizierteren Objekten kann es dann auch hilfreich sein, sich die Checkermap im 2D-Programm unter das UV-Wire zu legen und mit dem Objekt (natürlich auch mit der Checkermap belegt) zu vergleichen, um eine noch bessere und genauere Orientierung für Feinheiten zu haben.
Nach ein bisschen malen, kam bei mir folgendes heraus. Nur für Demonstrationszwecke, ihr müsst da schon mehr Liebe für Details reinstecken!

Produziert aus folgender Diffuse-Map (+ UV-Wire)


Somit haben wir unser erstes Objekt mittels UVs texturiert!
Um Übung zu bekommen, solltet ihr verschiedenste Grundobjekte wie Zylinder, Kegel und was es sonst noch alles gibt durchprobieren.
Das zweite Beispiel (Kampfjet)
Wenden wir uns nun, da wir die Basics soweit erarbeitet haben, einem etwas komplexeren Objekt zu.
Bevor wir jedoch beginnen, werde ich noch kurz auf die oben bereits erwähnte Problematik der Edge-Distortion im HyperNURBS eingehen. (Edge = Kante, Distortion = Verzerrung)
Diese Problematik tritt in Verbindung mit HyperNURBS (also dem smoothen des Meshs) auf. Wenn ein Mesh geglättet wird, entstehen neue Polygone, genauer gesagt werden die bestehenden unterteilt. Bei einer bereits bestehenden UV-Map muss das Programm also zusehen, wie die UV-Map auf das „neue“ Objekt passt. Dabei kommt es zu Verzerrungen, da es bei der Angrenzung von kleinen Polygonen an größere zu Sprüngen im Textur-Mapping kommt, die das Texturieren teilweise unmöglich machen. In den HyperNURBS-Eigenschaften gibt es daher, wenn der Typ „Catmull-Clark“ eingestellt ist (nicht NGons!), den Punkt „UV-Unterteilung“ mit den Optionen „Standard“, „Grenze“ und „Kante“. Grenze und Kante liefern bessere Resultate, je nach Situation passt das eine besser, man muss durchprobieren.
Zur Verbildlichung: 1. unsmoothed, 2. „Standard“-UV-Unterteilung und 3. „Kante“-UV-Unterteilung.

(Auf jeden Fall eine Erleichterung für die Texturierung!)
Diese Option hat nur leider ihre Grenzen, und funktioniert bei sehr starken Smooths (also wenn das HyperNURBS wenig Polygone zur Verfügung hat --> LowPoly) nicht immer ausreichend. Dies ist auch bei meinem Kampfjet der Fall, weswegen ich ein HyperNURBS auflösen werde, also die Unterteilung direkt als Polygonobjekt übernehme. Das bedeutet, dass unser UV-Wire um einiges „dichter“ sein wird. Das bietet den Vorteil, dass ich sehr genau malen kann und somit die Distortions in den Griff bekomme.
So, nun aber endgültig genug Theorie, im Downloadbereich steht ein einfaches Modell eines Kampfjets für euch bereit.
Teil 1 (Schnittkanten auswählen und HyperNURBS auflösen)
Lade Flash oder überprüfe ob JavaScript in deinem Browser aktiviert ist um das Video sehen zu können.
Teil 2 (Checkermapping & UV-Map "berichtigen")
Lade Flash oder überprüfe ob JavaScript in deinem Browser aktiviert ist um das Video sehen zu können.
Erklärungen zum Video:
Entschuldigt den einen oder anderen Shortcut, aber das Video ist so schon etwas länger und ich wollte nicht zuviel Recording-Zeit opfern. Vor allem im UV-Edit-Modus, beim drehen, verschieben und überprüfen der Inseln habe ich stark mit Shortcuts gearbeitet:
Verschieben = Taste „E“, Drehen = Taste „R“, Skalieren = Taste „T“, zwischen aktuellem Werkzeug und Selektion umschalten = Leertaste.
Ansonsten benutze ich für die Selektion der Schnittkanten nur Loop-Selektion und die Pfadselektion, einmal mit „einfacher Kantenloop“ und das andere Mal mit „Livepfad“.
Beim Auflösen des HyperNURBS seht ihr, dass die vorher selektierten Kanten auch nach dem Smooth noch selektiert sind. Falls euch das nicht "sicher" genug ist, könnt ihr die Selektion vor dem HN-Auflösen einfrieren, sie wird dann auf das neue Objekt mitübernommen.
Bei Minute 9:00 von Teil 2 seht ihr in der linken Bildhälfte (bei den zwei hinteren „Flügeln“) sehr schön, was das HyperNURBS bei falscher UV-Unterteilung anrichtet. Durch das vorherige Auflösen des HyperNURBS habe ich die Edge-Distortion jedoch sehr gut unter Kontrolle.
Der Rest erfolgt nach der gleichen Vorgehensweise wie das erste Video.
Das Ergebnis könnte ungefähr so aussehen

(... oder ganz anders, euch sind jetzt keine Grenzen mehr gesetzt)
Diffuse-Map (Farbkanal):

(Ich habe noch eine schwarz-weiße Version meiner Diffuse-Map als Bump-Map im Reliefkanal und eine Specular-Map im Spiegelungskanal)
Schluss
Hiermit sind wir am Ende angelangt: Gratulation an alle, die durchgehalten haben. Ich hoffe ihr konntet einiges mitnehmen und seit nun für eure eigenen Meshes gewappnet. Natürlich würde ich mich über Feedback und Kritik freuen.
Zum Abschluss noch ein Danke an Toadie und Chris für die Hilfe und Geduld.
>> Allgemeine Fragen oder Probleme mit dem Tutorial? Hier gehts zum Forum!