Loading...
 

Grafiken erstellen mit 3dsMax und Pumuckl999



dieses Tutorial wurde von Pumuckl999 2019 erstellt

Grundlagen Polygonmodellerlink


Poly- in Polygonmodeller bringt uns gleich mittenrein und zu einigen Problemen: Poly=viel, mehrere; d.h. unsere Objekte bestehen allesamt aus Flächen mit mehr oder weniger Ecken. Für die Grafikkarte werden sämtliche Polygone zudem in Dreiecke zerlegt, die Polygonart mit der geringsten Eckenanzahl. Braucht uns uns i.d.R. nicht kümmern, erzeugte Polygone werden automatisch in Dreiecke zerlegt(1).
Logisch scheint, dass man damit nur eckige Objekte bauen könne, niemals gerundete(2).

(1) Der Computer weiss leider nicht, was der Anwender genau will, deswegen müssen wir in einigen Fällen nachhelfen. Bild 1 zeigt zwei verschiedene Polygonarten, nennen wir das linke ein konvexes Polygon, die anderen beiden konkav. Bei der Zerlegung in Dreiecke werden die vorhandenen Punkte verbunden – beim linken Polygon werden diese Verbindung immer innerhalb der Fläche liegen, egal welchen Punkt wir mit einem anderen verbinden. Das können wir dem PC überlassen, gibt ja auch noch andere Hobbys. Beim mittleren sieht die Sache anders aus: Eine Verbindungsline zwischen zwei Punkten kann theoretisch auch ausserhalb der Fläche liegen und zu Darstellungsfehlern führen. Solche Flächen sollten wir also selbst so teilen, dass jede entstehende Fläche problemlos in Dreiecke zerlegt werden kann. Im rechten Beispiel ist die Fläche komplett in Dreiecke unterteilt, das ist allerdings, wie erwähnt, nicht zwingend nötig, Hauptsache wir erzeugen Flächen, bei denen Punktverbindungen immer innerhalb liegen.

Bild 1
Bild 1


Da Objekte oft durch Gittermanipulation entstehen, wir also vorhandene Punkte im Raum verschieben, führt uns das zum nächsten Problem. Bild 2 zeigt links das ursprüngliche Polygon (1). Von diesem Polygon verschieben wir den hinteren rechten Eckpunkt in die Höhe (Bsp. 2). Bei der Zerlegung in Dreiecke mit den vorhandenen Punkten gibt es zwei Möglichkeiten (Bsp. 3 und 4). Da die Grafikkarte ja nicht wissen kann, welche dieser Möglichkeiten wir wollen, sollten wir uns für Bsp. 3 oder 4 entscheiden. 3 gibt einen „Berg“ in der Mitte der Fläche, 4 ein „Tal“. Btw wird in den Grafiken für Simutrans die Darstellung entweder gleichbleibend falsch oder richtig sein, in 3D-Welten wird ggf. regelmäßig zwischen beiden Möglichkeiten gewechselt, das gibt dann im Zweifelsfall eine flackernde Fläche im 3D-Spiel.

Bild 2
Bild 2


T-Verbindungen: Genau drei Flächenverbindungen treffen sich in einem Punkt, gezeigt in Bild 3. Der erste Fall ist unproblematisch, die T-Verbindungen sind nur am Flächenrand zu finden. Beim zweiten Beispiel findet sich eine solche Verbindung in der Fläche, auch das kann zu Darstellungsfehlern führen. Also stellen wir entweder den Zustand aus Bsp. 1 her oder den aus Bsp. 3.

Bild 3
Bild 3


(2) Wir wollen natürlich auch Objekte abbilden, die nicht eckig sind. Theoretisch gibt es dafür zwei Möglichkeiten. Die schlechtere: Wir unterteilen unsere Fläche so oft, dass auch mit den vielen entstehenden Teilflächen der Eindruck entsteht, wir hätten eine Rundung und keine Ecke. Die bessere: Wir nutzen sogenanntes Smoothing, eine Technik die erlaubt, auch eckige Formen rund abzubilden. Im Standardfall steht die Flächennormale senkrecht auf der Fläche, beim Smoothing wird eine Normale für jeden Punkt in der Fläche berechnet, so dass der Eindruck entsteht, die eckige Fläche sei rund. Wie viele Flächen wir genau brauchen, hängt von der Objektgröße und vom persönlichen Geschmack ab. Für Simutrans müssen es für Zylinder selten mehr als zwölf sein.
Smoothing muss man nicht auf ganze Objekte anwenden, man könnte zB. Auch eine Hälfte des Zylinders rund darstellen, die andere eckig.

Bild 4 zeigt links einen achtseitigen „Zylinder“, der in der Mitte hat 48 Seiten und sieht damit schon annähernd rund aus. Erzeugt leider auch mehrmals so viele Daten. Der rechte Zylinder hat acht Seiten und wurde mit Smoothing versehen. Die Mantelflächen wirken damit deutlich runder, als Bsp 1. Hinnehmbares Manko ist, dass die Deckflächen weiterhin eckig wirken. Achtet in 3D-Spielen darauf, fällt bei Vasen, Töpfen, etc. immer mal wieder auf.
Tip zu zylindrischen Körpern: Wenn man als Flächenzahl der Mantelfläche immer eine durch vier teilbare wählt, erleichtert dies die Bearbeitung. Solange der Zylinder nicht verdreht, liegen dann immer vier der Flächenkanten des Mantels auf den Hauptachsen.

Bild 4
Bild 4


Verdeckte Flächen: Bild 5 zeigt einen Würfel, der auf einer Grundplatte steht, in Simutrans könnte dies ein Haus sein, das auf der Grundkachel steht. Zu sehen ist genaugenommen aber kein Würfel, sondern nur drei Flächen davon. Da in Simutrans die Ansicht allerdings gedreht werden kann, brauchen wir fünf der Würfelflächen. Die Grundfläche ist niemals zu sehen, sollte also unbedingt gelöscht werden, spart bei unserem Beispielwürfel immerhin 1/6 der Flächen.

Bild 5
Bild 5


Detailgenauigkeit: Wir rechnen mal kurz: Eine Simutranskachel in pak128.german (bei Gebäuden) soll ca. 20x20m abbilden. Die Grafik dafür ist 128x128 Pixel gross. Die Kachel liegt allerdings in isometrischer Ansicht darin, also wir brauchen die Diagonale der Kachel. Nach Pythagoras wären das D²=(20m)²+(20m)²gibt ~28,3m für die Diagonale. Dies durch die 128Pixel Seitenlänge geteilt, gibt ~220mm/Pixel. Da sich einerseits Pixel in der Fotobearbeitung nicht teilen lassen, andererseits z.B. Schatten und/oder das später besprochene Ambient Occlusion Objekte optisch verbreitern, modelliere ich selbst Details meist >100mm. Alles was kleiner ist, wird weggelassen. Zusätzliches Problem ist, dass der Renderer i.d.R. kleinere Objekte nicht komplett verwirft, von einem Balken mit meinetwegen 80mm sind im Rendering ggf. dann einige wenige Pixel zu sehen.
Zusätzlich sollte man sich noch dazu entscheiden, nicht alle Details >100mm ins Modell zu „kneten“. Dachrinnen an Häusern sind so ein Beispiel, die lasse ich immer weg. Relativ hoher Aufwand für wenig Wirkung.

Grundlagen Fotobearbeitunglink


Nach der Erstellung des Gitters braucht unser Modell ein mehr oder weniger realistisches Aussehen. Texturen kann man direkt im Polygonmodeller erstellen oder als Bitmap-Grafik in der Fotebearbeitung seines Vertrauens selbst erstellen. Da Letzteres deutlich flexibler, gehe ich auf die erste Möglichkeit nicht ein.

Texturformate: Üblich ist heutzutage .dds, das stammt von Nvidia und geht mit den Ressourcen der Grafikkarte am sparsamsten um. Da das für die Ein- bis Mehrkachel-Miniwelten in Simutrans nicht sonderlich von Bedeutung, ist die Wahl des Bildformates hier fast frei. Man kann selbst Videos auf Oberflächen mappen.
Ich selbst verwende als Texturformat .png, meine Uralt-Fotobearbeitung kennt kein .dds.
Z.B. Photoshops .psd lässt sich in 3dsMax auch direkt als Textur verwenden, angesichts der Größe von Grafikdateien mit gespeicherten Ebenen empfiehlt sich das imo aber, wenn denn gewünscht, nur während der Erstellung, um jede Änderung quasi live verfolgen zu können. Vor dem Rendern sollte man das Bildformat aber ändern.

Während der Erstellung der Grafiken ein Format zu verwenden, das Ebenen in der Datei speichert, empfiehlt sich schon deshalb, weil spätere Änderungen an der Textur dann deutlich einfacher sind. An Programmen, die dies unterstützen, seien hier Photoshop und Gimp beispielhaft genannt.

Weiterer Grund ist, dass wir im Modeller ein 3D-Modell erstellen, auf das eine (2D-)Grafik aufgebracht werden soll. Hierfür benötigen wir Abwicklungen unserer Objekte. Diese werden in eine Grafik gerendert. Bei Formaten mit gespeicherten Ebenen können wir die Materialien unter die Ebene mit den Abwicklungen bauen. Bild 6 und Bild 7 zeigen ein Modell und die zugehörigen Abwicklungen über der Textur (die grünen und weissen Linien der Abwicklungen werden später natürlich ausgeblendet).

Bild 6
Bild 6


Bild 7
Bild 7


Es gibt zwei grundlegende Möglichkeiten, seine Abwicklungen mit Material zu füllen: Der Königsweg ist sicherlich, jedes Material selbst in der Fotobearbeitung zu malen, das kostet aber recht viel Zeit und braucht auch einige Erfahrung.
Bei der zweiten, auch in Bild7 verwendeten Möglichkeit nehmen wir Fotos von entsprechenden Materialien und füllen damit unsere Abwicklungen.

Entweder man nutzt für Texturvorlagen entsprechende Bildportale (z.B. imageafter.com – zwar keine Texturen, aber viele brauchbare Fotos) oder fotografiert selbst. Halbwegs wichtig dabei: Strahlende Mittagssonne gibt harte Schlagschatten, für Texturvorlagen ist bedeckter Himmel die bessere Beleuchtung.
Verzerrungen wollen wir möglichst nicht im Material, also besser das Normalobjektiv oder leichter Tele zwischen 80-100mm, als das Weitwinkelobjektiv.
Die Kamera möglichst senkrecht auf die zu fotografierende Fläche richten, spart wieder Zeit in der Fotobearbeitung.

Große gleichtönige Flächen sehen am Modell langweilig aus. Gilt für mit einer Farbe gefüllte Flächen, wie in Bild8 dargestellt, ebenso wie für großflächige gekachelte Grafiken (z.B. eine vielfach kopierte Dachziegel, um ein Dach zu texturieren).

Bild 8
Bild 8


In Bild 8 wird die rechte, einfarbig rote Fläche mit der mittleren, sogenannten Dirtmap, im Mergemode multiply überlagert, gibt dann die rechte rote und marmorierte Fläche.

Texturgrößen: Kantenlänge der Texturen sollte immer n2 Pixel betragen. Das nutzt den Speicher der Grafikkarte optimal. Ist in der Texturdatei dann noch Platz – stört nicht, bei etwaigen Änderungen können wir dann noch zusätzliche Objekte im Modell mit der Textur belegen.
Ich selbst verwende Texturen in den Größen 1024x1024, 2048x2048 und 4096x4096 für die Simutrans-Objekte. Für die kleinen Renderings, die in Simutrans verwendet werden, wären sicherlich auch kleinere Texturen brauchbar, arbeitet sich imo aber entspannter, wenn die Grafiken etwas schärfer.
Pixelratio: Damit alle Objekte gleichbleibend gut oder auch schlecht aussehen, sollte man eine einheitliche Pixelratio festlegen. Diese bestimmt, wieviele Pixel pro Meter verwendet werden. Bei mir sind es 40Pixel/Meter für Gebäude, 80Pixel/Meter bei Fahrzeugen. Damit kommt man dann auch meist automatisch auf die oben genannten Texturgrößen, bei sehr großen Objekten können es auch mal mehrere Texturen mit 4096Pixeln Kantenlänge werden (noch größere Texturen empfinde ich persönlich unübersichtlich während der Bearbeitung, also lieber mehrere).

Wir erstellen eine Vorlagedatei für Gebäudelink


Da ich gelernter Schlosser, nutze ich als Einheit generell Millimeter, üblich sind in der Modellierung allerdings Meter. Dies als Hinweis, falls sich jemand über recht hohe Zahlenwerte wundert.

In die Vorlage speichern wir alles, was wir für jedes Objekt brauchen: statistische Anzeigen, Grundkachel, Kamera, Licht, ggf. immer wieder verwendete Texturen.

Bild9: Hilfreich für die Modellierung ist eine jederzeit einsehbare Anzeige der aktuellen und ausgewählten Anzahl an Polygonen/ Dreiecken. Falls man sich selbst Vorgaben für eine max. Zahl an Polygonen für ein Model macht, hat man damit bessere Kontrolle, beim auswählen von Objektteilen sieht man so recht schnell, ob zu viel/zu wenig in der Auswahl.

In 3dsMax verbirgt sich im viewport links oben hinter dem kleinen + ein Einstellungsdialog (1).
Unter Statistics werden Polygon Count, Triangle Count, Edge Count, Vertex Count und Total+Selection aktiviert. Frames per Second wären ggf. auch interessant, bei mir sinken die frames per seconds in komplexeren Szenen allerdings merklich, wenn ich diese Option aktiviere Smile.
Wichtig ist natürlich auch, Show Statistics in Activ View einzuschalten.

Für die Bodenkachel erzeugen wir eine Ebene (2) → Create→ Standard Primitives → Plane. Im Command Panel unter Modify (3) können wir die Größe festlegen, bei mm als Einheit entspricht 20000x20000 einer Simutrans Bodenkachel. Beim Parameter Längen- und Breitensegmente reicht jeweils der Wert 1 für eine Bodenkachel. Wichtig hierzu: Normalerweise konvertieren wir alle Objekte in editable Polys. Die Bodenkachel lassen wir in der Vorlagedatei ausnahmsweise parametrisch. Falls wir zukünftig für ein Objekt mehr als eine Bodenkachel brauchen, haben wir so immer noch Zugriff auf die Ebenenparameter und können deren Größe und Unterteilung schnell ändern.

Die Ebene soll zusätzlich noch in x,y,z=0,0,0 liegen. Da die Datei vorher leer, können wir beim Erzeugen der Ebene schlechterdings Punkte gefangen haben, damit sollte z=0 schon stimmen. Im Koordinatenfenster (4) die beiden anderen absoluten Koordinaten auf Null setzen, dann sollte die Ebene wie gewünscht im Raum liegen.

Bild 9
Bild 9


Licht: Die beiden Lichtquellen sind nur ein Vorschlag, kann man zumindest teilweise auch anders lösen. Für die Hauptlichtquelle Bild10(1) verwenden wir create → lights → Standard → mr Area Omni und schieben sie auf die Koordinaten x,y,z=0,-200000,170000. Die zugehörigen wichtigen Parameter sind in Bild 10 rechts zu sehen. Die Hauptlichtquelle soll natürlich unbedingt Schatten erzeugen.
Zusätzlich setzen wir ein Skylight (2) auf x,y,z=0,0,egal. Dieses dient nur der Aufhellung, also soll es selbst keine Schatten erzeugen. Parameter sind im Bild10 links zu sehen.
Da das Licht beim rendern auch gerechnet wird, wenn die Lichtquellen selbst nicht angezeigt werden, schalten wir diese zum Schluß in der Layersteuerung aus (3).

Bild 10
Bild 10


Kameras (Bild11) finden sich in 3dsMax unter Create → Cameras. Ob target oder free ist prinzipiell egal, bei der TargetCam lässt sich der Zielpunkt allerdings separat verschieben, die Ausrichtung ist also einfacher. Kamera wird auf x,y,z=100000,-100000,82000 geschoben, das Ziel ist der absolute Nullpunkt x,y,z=0,0,0. Wichtig ist die eingeschaltete Option orthographic projection, um eine Verzerrung durch die Brennweite zu verhindern. Brennweite wird vorläufig auf 62,3mm gesetzt, das sollte für Einkachelobjekte passen. Für größere Objekte passe ich die Kamerabrennweite an. Könnte man auch anders lösen und den Objektmaßstab größerer Objekte ändern.

Kamera kann in der Layersteuerung auch auf unsichtbar geschaltet werden, es lässt sich trotzdem auf die Kamerasicht schalten.

Bild 11
Bild 11


Rendersetup (Bild12): Als Renderer habe ich 3dsmax.scanline.no.advanced.lightning.high gewählt. Das ist aber kein Dogma.
Wichtige Einstellungen:
<Common>
Renderbreite 128Pixel (für Einkachelgebäude)
Renderhöhe 128 Pixel (bei z.B. Hochhäusern muss der Wert erhöht werden)
Force 2-Sided einschalten (Normalerweise wird die Textur von einer Flächenseite gezeigt, von der anderen Seite sind die Flächen transparent. Bei geschlossenen Körpern ist der Parameter egal, falls wir aber z.B. einen Zaun nur aus einer Fläche bauen, wollen wir die Textur natürlich von beiden Seiten sehen)
<Renderer>
Antialiasing (Kantenglättung) habe ich ausgeschaltet. Führt bei den Minigrafiken schnell zu einem matschigen Bildeindruck.
Hintergrund: Rendered framed window → environment and effect dialog → background → color, hier tragen wir die Werte RGB=231,255,255 ein, das ist die Farbe, die in Simutrans transparent dargestellt wird. Wer den Hintergrund transparent will (unterstützt Simutrans mittlerweile auch), kann dies später beim speichern der .png etc. als Option setzen (das Bildformat muss natürlich den Alphakanal unterstützen).

Speichern, fertig?

Sicherheitshalber rendern wir die Vorlage noch, (icon rechts neben rendered framed window) das Ergebnis sollte wie in Bild13 aussehen. Vorher, um in die Kamerasicht zu kommen, braucht es Taste <c>. Um aus der Kamerasicht wieder zurückzuschalten, btw <u> für othografische Ansicht oder für die perspektivische Ansicht <p>.

Mit dem Mausrad lässt sich direkt im Renderfenster zoomen. Wenn die Kachel links und Rechts jeweils in einer zwei Pixel breiten Spitze ausläuft und die untere Ecke 4Pixel breit, dann ist alles richtig. Der Kachelrand sollte dann immer in Schritten von zwei Pixel nach links oder rechts und ein Pixel nach unten oder oben springen.

Bild 12
Bild 12


Bild 13
Bild 13


Bei mir ist für die Texturierung des Schnees noch eine Materialdefinition in der Vorlage, Erstellung von Texturen wird aber später beschrieben.

Wir bauen ein Hauslink

Rate this page:

Contributors to this page: Frank .
Page last modified on Thursday October 31, 2019 22:18:55 CET by Frank.

Online Users

50 online users

Newest Forum Posts

No records to display