Versuche mit Ambient Occlusion

Das Forum zum beliebten 3D-Modellierungsprogramm Blender und andere Foto-, Textur- und 3D-Software und -themen.
Antworten
Nachricht
Autor
Alwin Meschede
Beiträge: 8926
Registriert: 04.11.2001 19:57:46
Aktuelle Projekte: Zusi3 Objektbau
Kontaktdaten:

Versuche mit Ambient Occlusion

#1 Beitrag von Alwin Meschede »

Mahlzeit,
ich führe die AO-Diskussion mal in diesem Thread fort. Um nicht eine ganze Lok als Testobjekt bauen zu müssen, habe ich ein Objekt mit geringer Fallhöhe rausgesucht. Diese Trafostation mit ihrem markanten Dachüberstand soll es werden:
Bild
Die Forderung, möglichst jedem Face einen eigenen Platz auf der Textur zu geben, ist hier im wesentlichen erfüllt, bzw. wäre für die verbleibenden Faces mit geringem Aufwand machbar.

So sieht die Textur aus:
Bild

Wenn man für das Trafohaus das Blender-Baking für Ambient Occlusion durchlaufen lässt, dann outputtet er folgendes Bild:
Bild
Hier wurde also korrekt erkannt, dass das Trafohaus unter dem Dachüberstand einen sonnenstandsunabhängigen Schatten auf sich selbst wirft.
Die Texturflächen, auf denen kein Face gemappt ist, sind transparent. Nicht verschattete Flächen sind weiß. Die Graustufen sind die verschatteten Bereiche. Frage: Wie verheirate ich jetzt diese Output-Textur und die normale Textur, damit der Ambient-Occlusion-Effekt in der Zusi-Welt ankommt?
Mein Youtube-Kanal: youtube.com/echoray1

Bahnbekloppter
Beiträge: 56
Registriert: 07.01.2011 02:46:39
Wohnort: Bonn

Re: Versuche mit Ambient Occlusion

#2 Beitrag von Bahnbekloppter »

Moin.
Inwiefern es Zusi-Intern oder bei Blender (mit Blender kenne ich mich nicht aus) funktioniert, kann ich nicht sagen.

Aber der wohl simpelste Weg ist das einfache übereinanderlegen in Photoshop oder ähnlichem. In dem Fall habe ich für die Schatten-Ebene den Ebenenmodus "multiplizieren" genutzt. Alternativ würde auch "abdunkeln" oder "aufhellen" (heißt zumindest bei Photoshop so, sollte es aber auch bei Gimp geben) (eins von beiden, beim einen wird Weiß ausgeblendet, beim anderen Schwarz) passen.

Ich nehme mir mal einfach heraus, den kurzen Versuch hier zur Demonstration einzustellen.

Bild

Eventuell würde ich beim Rendern/Baken die Einstellungen noch etwas verfeinern. Dann dauert das Rendern zwar etwas länger, aber der Schattenverlauf ist etwas weicher und weniger gesprenkelt. Ich glaube, das Stichwort wonach du suchen musst lautet "Sample(s)"


Grüße aus dem Dorf mit der doppelten Vorsignaltafel :D
Daniel

thenilsman
Beiträge: 21
Registriert: 17.11.2013 17:14:46

Re: Versuche mit Ambient Occlusion

#3 Beitrag von thenilsman »

Jup, als erstes die Bake Textur auswählen, dann die normale Textur drüber kopieren und Multiplizieren wählen. Danach muss man die Textur noch aufhellen.

Vielleicht geht's auch mit den anderen Modi

Benutzeravatar
F. Schn.
Beiträge: 6629
Registriert: 24.10.2011 18:58:26

Re: Versuche mit Ambient Occlusion

#4 Beitrag von F. Schn. »

Ist das normal, dass die Ambient-Occlusion-Textur so Pixelig aussieht?
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

Benutzeravatar
Sebastian D.
Beiträge: 360
Registriert: 07.12.2011 04:08:35
Wohnort: Berlin

Re: Versuche mit Ambient Occlusion

#5 Beitrag von Sebastian D. »

Habe mich gestern beim Durchlesen dieses Themas gefragt, was eigentlich Baking ist. Bin dann auf folgendes hilfreiches Tutorial gestoßen, in dem auch erklärt wird, wie man Ambient Occlusion in Blender anbringt (etwa ab Minute 12): http://www.blendtuts.com/normalmaps_bakingtextures" target="_blank

Gruß
ZusiWiki - Informationen und Wissenswertes rund um Zusi 3

YPOC
Beiträge: 82
Registriert: 06.06.2006 13:19:27

Re: Versuche mit Ambient Occlusion

#6 Beitrag von YPOC »

Hallo zusammen,

Alwin Meschede hat mir freundlicherweise ein Modell zur Verfügung gestellt, damit ich mal ein bisschen mit AO und sonstigem herumexperimentieren kann. Folgendes ist dabei herausgekommen: Bild

Ganz rechts das unveränderte Original von Alwin, in der Mitte mit AO, und links noch mit ein bisschen Schmutz auf dem Fahrerhaus.
Man sieht es schaut noch nicht perfekt aus, aber ich denke man kann sich vorstellen, was dabei herumkommen könnte.


Vorgegangen bin ich wie folgt:
Das Modell von Alwin war bereits fertig texturiert, alle Texturen waren in einer einzigen Datei, so dass die UV Map also mehrmals auf die gleichen Bildteile zugegriffen hat.
1. Mit ausgewähltem Bauteil lege ich im Object Data Tab eine neue UV Map names AO Map an.
2. Mit dieser Map ausgewählt lege ich im UV/Image Editor ein neues Image an (Image - New Image - Name: AO Fahrerhaus, Size irgendwie passend, Rest egal).
3. Im Edit Mode des Bauteils selektiere ich alle Vertices/Faces, drücke U für unwrap und wähle Smart UV Project, dort kann man mit dem Angle Limit experimentieren, wichtig ist jedoch Island Margin, das stellt den Abstand der Faces in der UV Map ein. 0.02 um den Dreh scheint ganz gut zu sein. Hierdrauf komme ich später nochmal zurück. Nach dem Unwrap sieht man im UV/Image Editor nun alle Faces, schön geordnet ohne Überlappungen, allerdings meist vollkommen durcheinander.
4. Im World Tab aktiviere ich AO und erhöhe die Raytracing Samples auf 15-30. Hier lässt sich viel an der Qualität der AO Map ändern, zulasten der Rechenzeit. Je mehr Samples desto genauer die Berechnung und desto weniger "Kriseligkeit". Hier muss man schauen wieviel Zeit man aufbringen möchte. Mit Approximate habe ich recht schlechte Ergebnisse erhalten.
5. Im Render Tab ganz unten unter Bake stellt man den Bake Mode auf AO und setzt die Margin auf 2px. Eventuell lohnt es sich noch Normalized anzuhaken.
Die Margin sollte man so einstellen, dass die Texturen der einzelnen Faces nicht überlappen, hier also mit der Island Margin herumspielen.
6. Bake drücken und staunen. ;)
7. Die nun fertig gerenderte AO Map unter einem treffendem Namen abspeichern.
8. Im Number Panel (N-Taste) setzt man unter Shading den Material Mode auf GLSL, geht in den Viewport Shading Texture Mode und aktiviert im Material des Objekts shadeless. Wurde das Material mehrfach vergeben, macht man es mit einem klick auf die kleine Zahl zu einer single-user copy (oder erstellt gleich ein neues reinweißes Material).
9. Im Texture Tab ändert man bei der bereits vorhandenen Textur unter Mapping die Coordinates auf UV und wählt dann UVMap aus.
10. Nun erstellt man unter der originalen Textur eine neue, wählt die eben erstellte AO Textur aus, setzt die Coordinates auf UV und wählt AO Map und setzt schließlich Blend auf Multiply. Nun solltet ihr das Objekt mit Textur und korrekt überlagerter AO Textur sehen.

Nützlicher Tipp: Ich habe eine große Plane unter das Modell gelegt (als "Boden"), damit von dort kein Licht den Unterbau des Modells stark aufhellt. Beim späteren Exportieren dann natürlich entfernen.
Um das ganze zu Exportieren gibt es zwei Wege: Der erste über Multitexturing im Zusi 3D-Editor, der zweite über nochmaliges Backen in Blender um die Texturen zu verschmelzen.

1.1. Ich habe das .ls3-Exportskript benutzt (über .x scheint es nicht zu funktionieren).
1.2. Im Zusi 3D-Editor öffnen, hier werden die Texturen noch nicht richtig dargestellt.
1.3. Über Mesh-Subset bearbeiten kann man sehen, ob beide Texturen korrekt exportiert wurden, falls ja kann man beim Multitexturing als Voreinstellung Tex. 1 Standard, Tex. 2 Transparent auswählen, dann Individuell auswählen, und schließlich rechts oben D3DTSS_COLOROP auf D3DTOP_MODULATE setzen.

Das entspricht laut D3D-Spezifikation einer Multiplikation der Werte (wie vorhin bei Blender eingestellt), ich bekomme aber viel zu dunkle Resultate. D3DTOP_MODULATE2X und D3DTOP_MODULATE4X multiplizieren die Werte anschließend noch mal 2 bzw. mal 4, so kann man die Texturen aufhellen. Aber auch so musste ich 2X und 4X für verschiedene Teile des Modells benutzen, so sind alle Teile 4X aufgehellt, außer dem Rahmen mit den Holzplanken, der ist 2X. Den Fehler habe ich nicht finden können.

Da man anscheinend nur zwei Texturen für das Multitexturing benutzen kann, ist es möglicherweise sinnvoll die original Textur mit der AO Textur zu verschmelzen.
2.1. In Blender erzeugt man wieder ein neues Image, z.B. namens Fahrerhaus mit AO.
2.2. Im Render Tab stellt man den Bake Mode auf Textures und drückt Bake.
2.3. Die neue Texture wieder unter einem aussagekräftigem Namen abspeichern und im Texture Tab die zweite Textur (AO) entfernen, die erste durch die gerade gerenderte ersetzen und die UV Map natürlich noch auf die AO Map setzen. Nun wie bekannt exportieren.


Es ist also durchaus möglich AO nachträglich auf ein Objekt zu zaubern, ohne sich die Mühe mit dem Verwalten der UV Map zu machen. Dadurch steigt der Speicherverbauch natürlich recht stark an. Ich denke aber durch geschicktes UV unwrapping, in dem man sowohl sich wiederholende Bildtextur als auch wiederholende AO Textur berücksichtigt lässt sich der Speicherverbrauch noch gut im Rahmen halten. Ihr könnt da besser einen Kompromiss finden.
Beim Fahrerhaus habe ich mir mal die Mühe gemacht die UV Map händisch zu erstellen, um dann nachher auf die AO Textur noch ein bisschen Dreck zu pinseln. Grade bei großen einfarbigen Flächen macht das doch sehr viel aus.


Ich hoffe ich konnte euch damit helfen, und vielen Dank an Alwin für das Modell.

Yannick
Gruß
Yannick

Mr. X
Beiträge: 1335
Registriert: 04.05.2008 22:12:22
Kontaktdaten:

Re: Versuche mit Ambient Occlusion

#7 Beitrag von Mr. X »

Als 3d-Laie frage ich mich folgendes: Sollte die 3d-Engine von Zusi - also DirectX - nicht eigentlich solche Beleuchtungseffekte und Schattenwürfe hinkriegen, also ohne große Änderungen an Texturen oder Modellen?
Zuletzt geändert von Mr. X am 05.09.2014 20:30:02, insgesamt 1-mal geändert.

Jörg_S
Beiträge: 1204
Registriert: 07.11.2001 18:45:28
Aktuelle Projekte: Signal- und Fahrzeugbau für Z3
Nachbau der KBS357,590,600
Wohnort: Ilfeld

Re: Versuche mit Ambient Occlusion

#8 Beitrag von Jörg_S »

Hallo

Wie Carsten hier schon einmal schriebhttp://forum.zusi.de/viewtopic.php?f=47&t=10409
sind das Grafiksachen die DX kann aber nicht in der Engine Prio 1 sind
Gruß Jörg

Signal-& Fahrzeugbau Ilfeld

Mr. X
Beiträge: 1335
Registriert: 04.05.2008 22:12:22
Kontaktdaten:

Re: Versuche mit Ambient Occlusion

#9 Beitrag von Mr. X »

Eben, das hatte ich mal in Erinnerung. Also ist Ambient Occlusion aus langfristiger Sicht überflüssig?

YPOC
Beiträge: 82
Registriert: 06.06.2006 13:19:27

Re: Versuche mit Ambient Occlusion

#10 Beitrag von YPOC »

Ich denke an programmseitiger Unterstützung von AO, Schatten etc. wird kein Weg vorbeiführen, wenn man eine ansprechende Grafik erhalten will. Die Verdunklung des Bodens um ein Haus z.B. kann nur so realisiert werden.
Es gilt aber wie so oft beim Programmieren eine Balance zwischen Leistung und Speicherverbrauch zu finden. Es ist möglich alles und jedes durch Zusi berechnen zu lassen, es ist aber auch möglich einige Schritte vorweg zunehmen, also durch Berechnungen vor Programmstart oder direkt beim Modellieren.
Grade bei den komplexeren Modellen wie Loks und Wagons würde sich das vorherige Backen lohnen.
Gruß
Yannick

Benutzeravatar
Johannes
Beiträge: 3197
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Versuche mit Ambient Occlusion

#11 Beitrag von Johannes »

YPOC hat geschrieben:1.3. Über Mesh-Subset bearbeiten kann man sehen, ob beide Texturen korrekt exportiert wurden, falls ja kann man beim Multitexturing als Voreinstellung Tex. 1 Standard, Tex. 2 Transparent auswählen, dann Individuell auswählen, und schließlich rechts oben D3DTSS_COLOROP auf D3DTOP_MODULATE setzen.
Wenn man den LS3-Exporter benutzt, kann man das uebrigens auch direkt in Blender in den Materialeinstellungen setzen. Hat zwar auf die Darstellung in Blender keine Auswirkung, man spart sich aber das Setzen der Einstellungen nach jedem neuen Export.

Generell waere ich mit solchen Effekten zurueckhaltend. Es fuehrt zunaechst zu einer Art Zweiklassengesellschaft bei den Modellen, naemlich solchen mit Effekten und solchen ohne. Hier sieht man z.B., dass das Stellwerk einen Schatten unter dem Dachueberhang hat, die anderen Haeuser nicht. Das ist jetzt noch relativ unauffaellig.

Und wenn man dann programmseitige Unterstuetzung fuer visuelle Schmankerl hat, hat man die ganzen manuellen Effekte umsonst erstellt bzw. muss sie sogar wieder entfernen.

Gruesse
Johannes

YPOC
Beiträge: 82
Registriert: 06.06.2006 13:19:27

Re: Versuche mit Ambient Occlusion

#12 Beitrag von YPOC »

Wenn man den LS3-Exporter benutzt, kann man das uebrigens auch direkt in Blender in den Materialeinstellungen setzen. Hat zwar auf die Darstellung in Blender keine Auswirkung, man spart sich aber das Setzen der Einstellungen nach jedem neuen Export.
Wo genau?
Und wenn man dann programmseitige Unterstuetzung fuer visuelle Schmankerl hat, hat man die ganzen manuellen Effekte umsonst erstellt bzw. muss sie sogar wieder entfernen.
Es sollte ja sehr einfach umsetzbar sein ein Häkchen zu setzen um solche Effekte auf dem Objekt zu (de)aktivieren. Ich denke das könnte sich der Performance wegen immernoch lohnen.
Gruß
Yannick

Benutzeravatar
Johannes
Beiträge: 3197
Registriert: 14.03.2009 22:36:06
Aktuelle Projekte: Zusitools (http://git.io/zusitools)

Re: Versuche mit Ambient Occlusion

#13 Beitrag von Johannes »

YPOC hat geschrieben:
Wenn man den LS3-Exporter benutzt, kann man das uebrigens auch direkt in Blender in den Materialeinstellungen setzen. Hat zwar auf die Darstellung in Blender keine Auswirkung, man spart sich aber das Setzen der Einstellungen nach jedem neuen Export.
Wo genau?
Bei aktiviertem LS3-Exporter gibt es in den Materialeinstellungen einen Abschnitt "Zusi specific properties". Dort kann man Texturpresets waehlen und auch (wenn man es auf "Custom" stellt) eigene Einstellungen fuer D3DRS_* vornehmen.

Gruesse
Johannes

Benutzeravatar
Carsten Hölscher
Administrator
Beiträge: 33384
Registriert: 04.07.2002 00:14:42
Wohnort: Braunschweig
Kontaktdaten:

Re: Versuche mit Ambient Occlusion

#14 Beitrag von Carsten Hölscher »

Zu den Ausgangsfotos:Die beiden linken sehen im Bereich der Kabine teils recht überbelichtet aus. Im Bereich der Ladefläche wirkt es gut.
Ich halte es nicht für sinnvoll, solche Berechnungen an den Simulator abzugeben, da es auf jeden Fall Rechenzeit kostet und man auch das Ergebnis nicht so gut beeinflussen kann.

Carsten

AndiS
Beiträge: 379
Registriert: 20.09.2011 13:26:52
Wohnort: Wien

Re: Versuche mit Ambient Occlusion

#15 Beitrag von AndiS »

Carsten Hölscher hat geschrieben:Ich halte es nicht für sinnvoll, solche Berechnungen an den Simulator abzugeben, da es auf jeden Fall Rechenzeit kostet und man auch das Ergebnis nicht so gut beeinflussen kann.
Danke. Das ist eine dieser Klarstellungen, die externen Entwicklern helfen, Prioritäten zu setzen. Ich hätte mir automatische AO auch schwierig vorgestellt, aber man soll nie ausschließen, daß das Christkind kommt.

Beim vorliegenden Modell würde ich vor allem einmal anschauen, wo die Normalvektoren hinzeigen. Keine Ahnung, wie die verbogen wurden, aber manche von denen müssen nach (schräg) oben zeigen.

Das dunkle Dreieck rechts unten am Führerhaus entsteht dadurch, daß die Kanten auf smooth gesetzt sind. Dadurch weist der Normalvektor dieses Dreiecks nach unten. Eventuell ist auch nur in der rechten Hälfte (aus Sicht des Betrachters) die Unterkante smooth und links sharp.

Ich würde dem Mesh ein paar Polygone mehr spendieren und den Bevel Operator anwenden um an den vertikalen Kanten ein paar Zwischenschritte einzuschalten. Dann werden die Vektoren der großen Flächen weniger beeinflußt und auch das offensichtlich ziemlich runde schmale Fenster in der Ecke sieht besser aus.

Woher die helle Diagonale im rechten Vorderfenster kommt, weiß ich nicht. Natürlich auch eine Normalvektorensache, aber was genau kann ich mich nicht erinnern.

Wie das Ganze im Zuge des AO Baking passiert ist, kann ich mir nicht ausmalen. Das neuerliche Unwrappen kann m.W.n. nicht die Normalvektoren beeinflussen.

Die Überbelichtung kann auch mit Art der Überlagerung von AO Output und Originaltextur zusammenhängen. Ich würde auf Addieren mit gleichzeitigem Abdunkeln des Originals setzen, oder noch besser darauf, den inversen AO Output als seinen Alphakanal zu verwenden. D.h. nur wo er dunkel ist, wird er überlagert, ansonsten bleibt die Originaltextur unverändert. Man muß sie trotzdem aufhellen, weil der AO Output oft grau ist - oder man hellt letzteren auf.

Sobald ich dazu komme, meine AO Bemühungen auszumotten, kann ich da einmal eine Noodle posten, die diese Überlagerung bewerkstelligt. Schade, daß die Doku dazu so lückig ist, das hat mir schon frühere Experimente vermiest. Jedenfalls kann man die Performance steigern, wenn man diese Überlagerung in Blender erledigt und nur eine Textur exportiert. Es gibt aber auch die Denkschule, die eine hochauflösende Textur für die (wiederholten) Details mit einer niedrig auflösenden für die AO kombiniert, mit 2 verschiedenen UV Maps.

Danke für den Hinweis, wie ich die Pixeligkeit des AO Outputs wegkriege. In dieser Ecke war ich offensichtlich nicht radikal (oder geduldig?) genug in meinen Tests.

Zum Speicherverbrauch muß sich jeder selbst seine Milchmädchenrechnung machen. Als Impuls wäre anzumerken, daß 1 GB GPU-Speicher 4.000 512x512 Texturen speichern kann, oder 16.000 256x256 Texturen. Wieviele Objekte man gleichzeitig oder rasch hintereinander sieht ist natürlich nicht genau festzumachen. Aber ein paar 1.000 ist eine realistische Obergrenze. Wenn jetzt noch die Mehrheit der Texturen 256x256 ist, dann kommt man mit 1 GB recht weit, auch wenn ein Teil der Objekte mehr als eine Textur verwendet. Und Grafikkarten mit 1 GB Speicher sind heutzutage eher etwas Bescheidenes.

Antworten