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?
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 network • my 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
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..
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 network • my 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
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.
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.
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.
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 network • my 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
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.
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 network • my 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
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.