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

denialBetreff: Shadowmapping (Achtung: 3 etwas größere Bilder im Thread) |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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.... ![]() 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: ![]() (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: ![]() 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: ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
zuerst ein licht vollständig berechnen (in image zwischenspeichern) und dann einzeichnen. außerdem addition statt multiplikation benutzen. | ||
MrKeks.net |
denial |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group