menu

Forum

05. Februar 2012, 20:07:44 *

 
Willkommen Gast. Bitte einloggen oder registrieren.

Einloggen mit Benutzername, Passwort und Sitzungslänge
 
 


  Seiten: 1
  Drucken  
NaN
Newbie
*
Beiträge: 28

Shadowmap / Lightmap ?
am: 08. April 2008, 13:56:55
 
Also irgendwie werd ich aus diesem Thema nicht schlau.
Ich hab mir auch schon mal die Beispiel Cinema4D-Datei angeschaut, aber irgendwie verstehe ich es immer noch nicht.
Ich habe bisher auch leider keine passende Doku zu dem Thema gefunden.

Wie erstelle ich diese Shadowmaps bzw. Lightmaps in Cinema4D?
Und wie bringe ich diese dann ins w3d-Format?


Kann mir jemand da vielleicht weiterhelfen?
Aus der Online-Doku hier, werde ich leider nicht besonders schlau.
Oder einen Link posten, wo das Prinzip erklärt wird?

Ich benutze Cinema4D R9.
Ich verstehe schon, dass ich eine Art Material erstellen muss, welches seine Eigenschaften lediglich auf dem Kanal "Leuchten" hat.
Ich habs auch schon geschafft dieses Material dann mit der eigentlichen Textur (z.B. Holzboden) zu überlagern und zu "Backen".
Resultat war eine PSD-Datei, die aussah wie die gerenderte Textur.
Schön.
Und nun?
Das Ding ist leider immer Quadratisch und umfasst nur die Hälfte der eigentlichen Fläche. Verwende ich die PSD-Datei als Textur, wird sie gekachelt und die Licht/Schatten Informationen stimmen ab einem bestimmten Punkt nicht mehr überein.

Wie gesagt, ich habe das Konzept irgendwie noch nicht verstanden.

Regards,
NaN.
 
Lutz
Administrator
Full Member
*****
Beiträge: 218

Re: Shadowmap / Lightmap ?
Antworten #1 am: 11. April 2008, 00:02:27
Ich bin mir gerade nicht ganz sicher, ob in Cinema4D R9 das "Textur Backen"-Tag vorhanden ist oder ob das erst ab R9.5 komplett eingebaut worden ist. Leider habe ich hier gerade niemanden an der Hand, der mit einer 9er Version arbeitet.

Aber das ganze ist weniger kompliziert als es den Anschein macht.

Wofür ist das gut?
Die Grafikkarte arbeitet immer mit unkomprimierten Texturen. Diese unkomprimierten Texturen müssen dann in den Speicher der Grafikkarte passen. Eine Textur mit einer Grösse von 512x512 Pixeln benötigt etwa 1MB Speicherplatz, eine Textur die 2048x2048 Pixel gross ist benötigt dann schon 16MB (4096x4096 -> 64MB).


Prinzip
Das Prinzip das hinter den Shadowmaps steckt, ist eigentlich ganz einfach. Basis-Textur und Lichtwirkgung werden getrennt von einander in zwei Texturebenen verwendet. In der unteren Ebene befindet sich die Basis-Textur (Kachelbar, am besten quadratisch) und in der darüber liegenden Ebene befindet sich die Schatten-Textur (Shadowmap, nicht kachelbar, auch am besten quadratisch).

Die Schatten-Textur wird nun mit der darunterliegenden Textur "multipliziert". Funktioniert übrigens genau so in Photoshop, wenn man eine Ebene auf die darunterliegende "multipliziert".

Im nächsten Schritt kann man nun die Basis-Textur (z.B. eine Mauertextur) unter der Shadow-map kacheln damit Pixeldichte und Detailreichtum erhalten bleiben wenn man näher an die Modelle herantritt. Die Shadowmap bleibt ungekachelt.

Video:
Hier ist nochmal ein kleines Video in dem man die Vorgehensweise vielleicht etwas besser nachvollziehen kann: Baking Shadowmaps

Noch ein bisschen Erklärung:
Wichtig für die verwendung von Shadowmaps ist, dass die UV-Texturen abgewickelt sind. Es gibt auch die Möglichkeit Bodypaint zu überspringen und die UV-Abwicklung von dem Baker-Tag erledigen zu lassen ("Optimales Mapping").

In dem gezeigten Beispiel, wird ein einfaches weisses Material verwendet und die "Oberflächenfarbe" gebacken. Man kommt auf das gleiche Ergebniss, wenn man die zwei Kanäle "Licht" und "Schatten" bäckt und in Photoshop zusammenfügt.

Ich hoffe das hilft dir erstmal ein bisschen weiter.

Grüsse!
aykay79
Newbie
*
Beiträge: 3

Re: Shadowmap / Lightmap ?
Antworten #2 am: 21. April 2008, 10:26:48
Zum Thema Shadowmap / Lightmap habe ich auch noch eine Frage!
Ist es möglich für die Lightmap ein zweites UV-Mesh zu erstellen, wie man es beispielsweise in 3ds Max kann.
Mein Problem ist das ich einige Objekte habe deren UV kordinaten sich überlappen... z.B. bei einer Pflanze ist in der Textur ein Blatt. Im 3d Modell sind es natürlich mehr Blätter die ich aber alle über einander auf das gleiche Blatt in der Textur lege. dies führt beim backen zu fehlern da ja jedes Blatt anders beleuchtet wird.
Gibt es so ein Möglichkeit oder ist es in diesem Fall notwendig die Textur neu aufzuteilen?
Lutz
Administrator
Full Member
*****
Beiträge: 218

Re: Shadowmap / Lightmap ?
Antworten #3 am: 21. April 2008, 16:15:20
Technisch funktioniert das auch mit 2 UV-Sets, es geht allerdings nur, wenn man 2 identische Modelle mit unterschiedlichen UV-Sets exportiert. Dann kann man das hinterher zu einem Modell zusammen bauen. Das ist allerdings noch nicht in Biont3D eingebaut.

Du musst also die Textur neu aufteilen. Sollte in deinem Fall aber kein Problem sein denn es gibt in Bodypaint die Funktion "Anordnen". Damit kannst du alle UVs der Blätter neben einander legen.

Setzt da mal ein Häkchen bei "Orientierung beibehalten" und setz die "Distanz" auf "0". Anschliessend liegen alle Blätter genau nebeneinander. Jetzt noch zählen wie viele Blätter in einer Reihe liegen und dann die Blatt-Textur um diesen Wert Kacheln.

Anschliessend sollte alles genau so aussehen wie vorher, nur das du jetzt auch eine Shadowmap mit dem Gewächs verwenden kannst.

Grüsse

 
aykay79
Newbie
*
Beiträge: 3

Re: Shadowmap / Lightmap ?
Antworten #4 am: 22. April 2008, 15:53:52
Danke für die schnellen Antworten!!

Habs bei meiner pflanze gelöst ohne eine neue textur machen zu müssen. :)
Ich habe die uv jedes einzelnen blattes  verschoben. so das ich nun über die kacheln funktion die lightmap erstellen kann.
NaN
Newbie
*
Beiträge: 28

Re: Shadowmap / Lightmap ?
Antworten #5 am: 27. Oktober 2008, 23:18:57
So, nun bin ich langsam mit meinem Latein am Ende.
Ich habe es genau nach Anleitung gemacht und trotzdem sieht es am Ende überhaupt nicht so aus wie z.B. in den Demos.
Zum Einen sind die Texturen viel zu dunkel und zum Anderen sind die Wände schneeweiß.

Hier mal ein paar Links zum Anschauen:

http://redaktion-pfeifer.de/diplom/test/biont3D

Ich habe dieselbe Map auch schon probiert in einem eigenen Projekt zu verwenden. Die Shadowmaps werden zwar richtig gemapt, jedoch ist die Qualität einfach scheusslich:

http://redaktion-pfeifer.de/diplom/test/

Dabei spielt es offenbar überhaupt keine Rolle, mit welcher Auflösung die Shadowmap gebacken wird. Auch wenn ich in Photoshop die Texturen bearbeite (weichzeichnen etc.) ändert das nichts an der Qualität.
Ich habe allerdings in meinem Projekt bei jedem Shader die "blendFunction" der Textur im Leuchtenkanal mit Lingo selber auf #multiply setzen müssen. Sonst wäre dort auch alles weiß gewesen.
Die Einstellungen in C4D werden beim Export für den Leuchtenkanal auf "addieren" gesetzt. Egal was ich in C4D einstelle.

Ich weiß einfach nicht wo ich da einen Fehler mache.
Hier ist mal noch die C4D Datei, falls sich jemand die Mühe machen möchte, zu schauen, ob ich vielleicht beim Backen etwas falsch gemacht habe:

http://redaktion-pfeifer.de/diplom/test/biont3D/c4d.zip   ( ca. 10 MB! )
 
Lutz
Administrator
Full Member
*****
Beiträge: 218

Re: Shadowmap / Lightmap ?
Antworten #6 am: 29. Oktober 2008, 02:14:47
In Biont3D werden die Shader und Texturen beim Start der Szene so eingestellt, dass sich alles möglichst so verhält, wie man es erwartet. Shadowmaps werden allerdings nur dann auf "multiply" gestellt, wenn der Name des Materials beispielsweise "weiss|1" ist. Durch das "|1" wird Biont3D gesagt, das es den Leuchtenkanal als Shadowmap verwenden soll, ansonsten bleibt das Material so, wie es von Cinema4D exportiert worden ist.

In deiner Cinema4D-Datei musste ich nur das Material "Weiss" in "Weiss|1" umbenennen und alles war gut.

In deiner Demo müsstest du noch das "renderformat" für die Texturen verändern. Das steht bei Dateien die aus Cinema4D exportiert worden sind standardmässig auf "#rgba5551" was einer 16bit Textur entspricht (je 5 Bit für Rot, Grün und Blau und 1 Bit für Alpha)

Texturrenderformat:


Du könntest einfach mit folgender Zeile:
getRendererServices().textureRenderFormat = #rgba8888

Alle Texturen auf 32bit umstellen, dann sieht alles richtig aus und die Alphakanäle haben dann auch 8bit. Es ist aber auch möglich für jeden Textur einzeln die richtigen Settings einzustellen.

Schau mal in der Hilfe nach "renderformat" und "textureRenderFormat".

Noch ein Tip zum Backen:
Mit dem "Pixelrand" kann man die Ränder verschwinden lassen bzw. resistenter gegen das MIP-Mapping (Texturen die entfernter sind, werden durch verkleinerte geblurrte Texturen ersetzt) machen.



Grüsse,
Lutz



« Letzte Änderung: 29. Oktober 2008, 02:35:41 von Lutz »
NaN
Newbie
*
Beiträge: 28

Re: Shadowmap / Lightmap ?
Antworten #7 am: 29. Oktober 2008, 18:53:13
Ich bin mal wieder begeistert.
Besten Dank für die Erklärung.

Bin davon ausgegangen, dass die Kachelung im Shadernamen nur angegeben werden muss, wenn die Textur auch wirklich gekachelt wurde (1x1 habe ich einfach nicht als Kachelung angesehen).
Dass Biont3D aber davon auch abhängig macht, ob der Leuchtenkanal überhaupt als Shadowmap verwendet wird, habe ich der Doku nicht sofort entnehmen können.
Werd mich mal etwas intensiver mit dem C4D Handbuch und dem Shockwave3D Exporter befassen müssen.

Je mehr ich mich mit dem Thema beschäftige, desto mehr Respekt habe ich vor Eurer Arbeit.
Ich kratze da zwar erst an der Oberfläche, aber ich kann schon jetzt sagen, dass ich eine solche Engine nie selber umsetzen könnte.
(Nur mal aus Interesse, wieviel Entwicklungszeit steckt eigentlich in Biont3D?)

PS:
Zitat
Datum/Zeit: Heute um 03:14:47
Autor: Lutz

Sag mal Lutz, schläfst Du eigentlich auch mal ;)
 
Lutz
Administrator
Full Member
*****
Beiträge: 218

Re: Shadowmap / Lightmap ?
Antworten #8 am: 31. Oktober 2008, 04:39:57
Zitat
Nur mal aus Interesse, wieviel Entwicklungszeit steckt eigentlich in Biont3D?

Das kann ich rückwirkend gar nicht genau sagen. Immer wenn Zeit ist, wird daran weitergearbeitet. Viel Zeit ging in der Vergangenheit aber dafür drauf, die Shockwave3D Dateien aus Cinema4D so zu korrigieren, dass es am Ende möglichst Nahtlos passt. Ich wünschte es wäre möglich, "Benutzerdaten" zu exportieren und beispielsweise die Texturen in den original Formaten zu belassen (und noch ein paar andere Sachen...).

Zitat
Sag mal Lutz, schläfst Du eigentlich auch mal ;)

Gleich ist es wieder so weit ;)

  Seiten: 1
  Drucken