Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: So Jul 13, 2025 22:24

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Shadowmapping mittels 3D Texturen
BeitragVerfasst: Sa Okt 27, 2012 13:54 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Moin,

ich hatte gestern die Idee vielleicht 3D Texturen dafür zu nutzen um Schatten zu rendern. Das Problem gerade bei vielen Lichtquellen ist ja immer bei Bewegung die betroffenden Szenenteile neu zu rendern. Was wäre nun wenn mann die Szene, komplett oder in Bereichen, in eine große 3D Textur rendert. Die Textur müsste eigentlich nur S/W sein. Quasi ein Voxelmodell der kompetten Szene. Nun hat man ja theoretisch aus jeder Blickrichtung alle Infos über die Szene. Rendert man das Licht einer Lampe, müsste man nur die 3D Textur so "drehen" das sie entsprechend der Blickrichtung der Lampe entspricht und sich die Info holen wo Licht und wo Schatten ist. Die Linare interpolation der 3D-Textur könnte dann automatisch für Softshadows sorgen..

Denke ich hier verkehrt oder is die Idee nich schlecht?

Grüße
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Okt 27, 2012 13:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hast du mal über den Speicherverbrauch nachgedacht? Schon eine 512×512×512 Texel 8-bit Graustufen-Textur braucht 128 MB.

Weiterhin frage ich mich, wie du daraus die Infos bekommen willst. Du musst dann doch immer noch Raytracing durch die Textur betreiben, bis du an der Stelle angekommen bist, an der ein Objekt ist?

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Okt 28, 2012 18:38 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Nun Speicherverbrauch wäre mir erstmal egal.. Die meisten Karten meiners "Nutzerkreises" haben eh alle um die 3GB.. Ich denke irgendwie müsste sich das auch ohne Raytracing machen lassen. Ich weiß nur noch nicht ganz wie..


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Okt 29, 2012 15:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ohne Raytracing wird das fürchte ich nichts. Und es gibt schon Grafikkarten mit 3 GByte RAM? wie die Zeit vergeht …

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Okt 29, 2012 19:42 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Dein Bottleneck werden die nearest-neightbour queries sein. Dies kannst du umgehen in dem du Gruppen von Voxel mit gleichen Ergebnis zusammenfasst. Dann entfernst du noch alle
sinnlosen Voxelgruppen und erhälst (ich lass Reflektion mal weg) pro Licht genau ein Polyeder wo sich nur die Randbereiche ändern. Das ganze optimiert man nun weiter und erhält genau 1-6
Voxelgruppen pro Licht. Problem dabei: nicht alle Voxel liegen auf der gleichen Ebene wie bei einer Shadowmap. sprich du erhälst immer sowas wie 512*512*3 Blöcke.

Im Idealfall bist du also immer langsamer als Shadowmapping.

Bei statischen Lichtern ist es sogar noch viel mehr Verlust.

Sinnvoll könnte es allerdings in bestimmten Fall sein stattdessen pro Voxel alle Ergebnisse der Lichtrichtungen zu speichern. Also so etwas wie Horizonmapping.

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Okt 31, 2012 09:19 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
mhhh... ich hatte auch schonmal DPSM Schatten probiert (da sich die spotlights bei mir nur um ihre achse rotieren), doch die Qualität gegenüber größe der beiden maps stand in keinem verhältnis.. Daher gefiel mir der Gedanke nur eine 3D Textur nutzen zu können.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Okt 31, 2012 13:45 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Wie wäre es denn mit ner Lightmap bzw Deluxemap stattdessen?

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 01, 2012 06:56 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
Zitat:
Wie wäre es denn mit ner Lightmap bzw Deluxemap stattdessen?


Ist ja alles dynamisch.. Da bringt mir ne Lightmap nicht viel :wink:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 01, 2012 22:37 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Ohne Raytracing wird es nicht gehen. In der Realität benötigt das Licht ja auch eine Zeit um den Raum zu durchqueren oder eben auch nicht. Wenn man sofort sagen könnte ob eine Lichtquelle verdeckt ist oder nicht, könnte man auch mit Überlichtgeschwindigkeit kommunizieren.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 02, 2012 10:12 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Sorry, aber das hat damit nicht das geringste zu tun :). Bei einem geometrischen Raytracer kannst du sofort sagen, ob eine Lichtquelle sichtbar ist, indem du die Testfunktion für Schnitt zwischen Strahl und Kugel ausrechnest.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 02, 2012 18:25 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Lord Horazont hat geschrieben:
Sorry, aber das hat damit nicht das geringste zu tun :). Bei einem geometrischen Raytracer kannst du sofort sagen, ob eine Lichtquelle sichtbar ist, indem du die Testfunktion für Schnitt zwischen Strahl und Kugel ausrechnest.

Wenn du vorher weißt wieviele Objekte zwischen 2 Punkten liegen können und das dann als kontant annimmst schon. Für eine Szene mit maximal n solcher Primitive kann man immer ein Laufzeitverhalten von O(1) ansetzen, da man ja weiß das man im schlimmsten Fall eine konstante Anzahl an Objekten testen muss (und jeder Test dauert auch nur maximal eine gewisse Zeit).
Das ist aber total langweilig und sagt eigentlich nichts aus.
Nimmt man aber an das unendlich viele Objekte mehr oder weniger gleichmäßig verteilt in einem unendlich großen Raum liegen, dann nimmt im Durchschnitt die Anzahl der Objekte mit steigender Länge der Strecke zu. Und damit dauern auch die Berechnungen länger. Das ist zwar nur eine indirekte Abhängigkeit von der Länge, aber trotzdem plausibel.

PS: Für die Berechnung von Schatten benötigt man keinen Strahl sondern es reicht eine Strecke die dann auch endlich ist. Daher ist der Begriff Raytracing hier vielleicht ein bisschen unpassend. Das wollte ich nur mal anmerken falls jemand Unbeteiligtes auf diesen Betrag stößt.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 02, 2012 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich finde, die Lichtgeschwindigkeit als Begründung ranzuziehen, dennoch arg falsch :), vorallem den nachsatz mit Kommunikation mit Überlichtgeschwindigkeit.

grüße

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]