Shadowmapping (Achtung: 3 etwas größere Bilder im Thread)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

denial

Betreff: Shadowmapping (Achtung: 3 etwas größere Bilder im Thread)

BeitragSo, Mai 23, 2004 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi...

Ich versuche zur Zeit, ein statisches (also vorberechnendes) Licht und Schattensystem für eine 2D-Tileengine zu entwickeln... Dabei hatte ich jedoch einige Probleme, ich will hier einfach mal drauflosschreiben was ich bisher so versucht hab, und wo es Probleme gab. Vielleicht hat jemand Erfahrung bei dieser Technik und kann mir helfen. Danke.

Also zuerst zur (nicht neuen Wink) Idee:
Wie die meisten anderen Tileengines basiert auch meiner auf einem 2D-Array, indem die einzelnen Tilefelder (50x50) gespeichert sind. In meinem Mapformat stehen auch Koordinaten für spätere Lichtquellen.

Eine solche Map in dem Format jage ich nun durch meinen Shadowmap-Compiler, den ich gebaut habe. Dieser sendet von jedem Licht nun im Uhrzeigersinn Strahlen aus, deren Lichtintensität sich verringert, und stoppt an Wänden. Dadurch ensteht nun ein monochromes Image, welches nun mit den Farben der Tilegrafiken multipliziert und abgespeichert werden kann. So erhält man sehr realistische Licht- und Schattenverhältnisse.
Soviel zur Theorie.... Wink

Mein erster Versuch für meinen Compiler: Ich habe im Uhrzeigersinn mit Sinus/Cosinus einzelne Pixel mit abnehmender Helligkeit gezeichnet, und an Wänden abbrechen lassen.

BILD:
user posted image
(Die schwarzen Blöcke sind hier die Wände).
Durch die Abweichung durch Sinus/Cosinus sind die Ergebnisse hier eher bescheiden,

weshalb ich nun statt einzelne Pixel einfach kleine 6x6 große Rechtecke gezeichnet habe.
BILD:
user posted image

Das Ganze wirkt schon besser, man sieht allerdings starke Ungenauigkeiten im Bezug der Schattenberechnung an den Ecken der mittigen Wand.
Ich weiß außerdem nicht wirklich, was ich tun kann, um zwei Lichtquellen miteinander zu verrechnen:
BILD:
user posted image

Man sieht deutlich die fehlerhafte Überschneidung der zwei Lichtquellen... Die Intensität müsste heller werden, wenn die Lichtstrahlen ineinander verlaufen.
Ich hab es versucht zu lösen, indem ich die Farbwerte der zwei Lichtquellen beim Zeichnen miteinander multipliziere, klappt aber nicht, da die Koordinaten, an der die Lichtquelle einzelne Lichtpunkte zeichnet, teilweise überschneiden. Somit multiplizieren sich zwei Farbwerte von EINER Lichtquelle...

So das war alles bis jetzt....
Vielleicht hat jemand Interesse mir zu helfen, oder ein Beispiel... oder sonstwas. Danke

Mr.Keks

BeitragSo, Mai 23, 2004 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
zuerst ein licht vollständig berechnen (in image zwischenspeichern) und dann einzeichnen. außerdem addition statt multiplikation benutzen.
MrKeks.net
 

denial

BeitragSo, Mai 23, 2004 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm Danke für die Antwort...
Aber bei Addition erzeuge ich doch ne Halbtransparenz? Ich will ja die Helligkeit übernehmen, nich den Farbton...

Und hast dun Vorschlag wie man die Lichtquelle füllt, also zeichnet? Wie gesagt mit einzelnen Pixel werdens einzelne Linien, mit Rechtecken wirds ungenau... Und die Sin/Cos Schrittweite verkleinern, bringt auch nich viel...

Danke.

TheShadow

Moderator

BeitragMo, Mai 24, 2004 17:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ist doch nicht schwer...

gehe einfach jeden pixel für pixel durch...

so, wenn der pixel im rechteck liegt, dann ist es schwarz
wenn linie vom pixel zur lichtquelle nicht vom rechteck geschnitten wird, dann gibt es einen sichtkontakt. berechne die helligkeit anhang der entfernung - bei mehrere lichtquellen muss man einfach die werte addieren.
wenn kein sichtkontakt besteht, dann gibts da schatten
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Mr.Keks

BeitragMo, Mai 24, 2004 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
das wollte ich auch vorschlagen, shadow. aber dann fiel mir ein, dass es mit strahlen wesentlich schneller ist (man muss wesentlich weniger strahlen berechnen) und man auch noch mehr möglichkeiten hat (reflexion, brechung etc.)
MrKeks.net

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group