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

Aktuelle Zeit: Mi Jul 16, 2025 16:43

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturen im nachhinein komprimieren
BeitragVerfasst: Do Mär 15, 2012 15:13 
Offline
DGL Member

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

in meiner Beleuchtungsengine habe ich mehrere bewegende Spots. Da sie sich immer Bewegen nutze ich Parabolide ShadowMaps und nutze nur immer den jeweiligen Ausschnitt, somit muss nicht bei jeder Bewegung die ShadowMap neugerendert werden. Das funktioniert auch super. Problem ist nur der Speicherverbrauch... Damit die Schatten rel. ordentlich aussehen muss ich schon min. 512x512 Maps bauen. Doch bei 100 Lampen summiert sich das.. Da man ja eine komprimierten Texturen im FBO verwenden kann (schade eigentlich, gibts eine möglichkeit diese nach dem Erstellen der Shadowmap zu komprimieren?

Grüße
Thomas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 15, 2012 16:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Thmfrnk hat geschrieben:
Da man ja eine komprimierten Texturen im FBO verwenden kann (schade eigentlich, gibts eine möglichkeit diese nach dem Erstellen der Shadowmap zu komprimieren?

Da fehlt mindestens eine Klammer zu. Fehlt da auch ein „k“? So ergibt der Satz für mich nicht viel Sinn, aber ich bin mir nicht sicher ;).

greetings

_________________
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: Do Mär 15, 2012 17:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Ich vermute du spielst hier auf "S3TC hardware texture compression" an. Richtig, dies ist mit einem FBO direkt nicht möglich, allerdings kannst du diese Kompression vergleichsweise leicht im Shader implementieren. Das benötigt aber auf jeden Fall einen extra Pass und ordentlich Rechenzeit. Das Hauptproblem wird hier aber sein das die komprimierten Texturformate nicht für Tiefenbuffer-Daten auslegt sind. Es gibt nur RGB und RGBA-Formate wenn ich da richtig informiert bin. Du würdest hier deinen 24bit Z-Buffer effektiv auf 5bit reduzieren....und selbst da hast du noch Kompressionsartefakte. Farben (8bit pro Kanal) sind da einfach viel weniger anfällig als Tiefendaten. Ggf. kann man da etwas tricksen in dem man den Tiefenwert auf die drei Farbkanäle verteilt, aber die Kompression wird da vermutlich massive Artefakte erzeugen.
=> Wenn du eine Shadow-Map komprimieren möchtest, reduzieren die Auflösung. Damit dürfte sich eine bessere Qualität bei gleichem Speicherbedarf erreichen lassen.

Zitat:
Doch bei 100 Lampen summiert sich das..

Kannst du nicht die Reihenfolge ändern? Also sagen wir für 10 Lampen die Shadow-Maps erzeugen, Szene damit rendern, dann die nächsten 10 Lampen. Du wirst die 100 Shadow-Maps ja sicher sowieso nicht alle in einem einzigen Pass benötigen sondern in mehreren Durchgängen. Also speichere deine Szene zwischen, nicht die Shadow-Maps.


Edit, noch eine Idee:
Wenn das mit der Reihenfolge nicht machbar ist, theoretisch kannst du die Shadow-Map im Screenspace auf "Schatten/kein Schatten" also 0/1 reduzieren. Die eigentliche Tiefeninfo interessiert nicht, oder? Dazu betrachtest du die Szene aus Perspektive der Kamera (ganz normal wie sonst auch) und kannst sogar 8 Pixel in einen komprimieren. Das gibt eine deutlich bessere Kompression, ohne Qualitätsverlust.
Wenn du PCF oder ähnliches anwendest könnte es möglicherweise Probleme geben, habe gerade nicht mehr im Kopf wie PCF nochmal funktionierte....

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 15, 2012 18:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Nachtrag ²:
Der Zeitaufwand zur S3TC-Kompression von 100 Texturen der Größe 512x512 dürfte im Sekunden-, wenn nicht Minutenbereich liegen.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 15, 2012 21:07 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
nun ich rendere ja extra Parabolide Schatten damit ich die szene nicht bei jeder Bewegung neu rendern muss... Szene hat rund 1mio Polygone.. Wenn ich da permanend die Schatten neu rendere gehts massig auf die Performance. Daher bleibt mir nix anderes übrig als pro Lampe auch dessen ShadowMap zu speichern. Ich hatte auch schon normales Shadowmapping + FrustumCulling etc.. dennoch waren hier aufgrund der permanenten Berechnung der Shadowmap nicht mehr als rund 50 Lichter möglich.. Mit der aktuellen technik krieg ich sogar mehr als 100 hin.. wenn da nicht das GRAM Problem wäre.

Nun die ShadowMap auf 0/1 zu reduzieren hört sich interessant an aber ich denke das ist nicht machbar.. ich weiß doch zum Zeitpunkt wo die Shadowmap gerendert wird nicht wo sich die Camera befindet?! Für Shadowmapping muss man doch die Tiefe aus Camera und Lampensicht checken.. Mir würde jetzt nicht einfallen wie ich da eine Schatten/KeinSchatten map so erzeugen sollte..

Nun ein weiterer Pass wäre jetzt nicht so fatal.. auch 1-2 Sek rechenzeit zum erzeugen aller Maps wären kein Problem.. Diese müssen ja nur dann erzeugt werden wenn sich was an der Szene ändert.

Zitat:
=> Wenn du eine Shadow-Map komprimieren möchtest, reduzieren die Auflösung. Damit dürfte sich eine bessere Qualität bei gleichem Speicherbedarf erreichen lassen.

versteh ich nich... Welche Auflösung??

Kann mir nicht vorstellen das die Kompression so lange dauert...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 15, 2012 21:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Nun die ShadowMap auf 0/1 zu reduzieren hört sich interessant an aber ich denke das ist nicht machbar.. ich weiß doch zum Zeitpunkt wo die Shadowmap gerendert wird nicht wo sich die Camera befindet?! Für Shadowmapping muss man doch die Tiefe aus Camera und Lampensicht checken.. Mir würde jetzt nicht einfallen wie ich da eine Schatten/KeinSchatten map so erzeugen sollte..

Ja, das tut nur wenn du das jedes Frame machen würdest.

Zitat:
versteh ich nich... Welche Auflösung??

Du schriebst oben irgendwas von 512x512 ShadowMap-Auflösung.....das auf 256 reduzieren. Das wird besser aussehen als komprimierte 512x512....eben weil die Kompression für Farben und nicht für Tiefendaten gedacht ist. Selbst mit Normalmaps kann das grauenhaft aussehen.

Zitat:
Kann mir nicht vorstellen das die Kompression so lange dauert...

Der Algorithmus ist nur wenig besser als BruteForce...der probiert quasi alle Möglichkeiten für jeden 4x4-Pixelbereich durch.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 16, 2012 09:37 
Offline
DGL Member

Registriert: Do Apr 22, 2010 17:17
Beiträge: 543
ja aber 256x256 sieht dann schon extrem scheiße aus.. Da steckt ja die komplette Szene drin.. Gibt es denn keine Verlustfreie Kompression? Mhh sonst fällt mir eigentlich nix mehr ein...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 16, 2012 11:00 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Es gibt keine Verlustfreie Kompression, für GPU, die sind Entweder Ineffizient, zu teuer in Hardware oder zu langsam.
Die Kompression von alle verfügbaren Hardwareformaten ist auch bis jetzt nicht in Echtzeit, mit ausreichender Qualität(die verfügbaren Varianten sind echt nicht schön), machbar.
Prinzipiell ist alles, was mit Transparenz oder feinen Farbübergängen zu tun hat nicht für Kompression geeignet.
Eigentlich ist es auch nicht üblich 100 Schatten zu zeichnen, schon eher ein Global Light und die n wichtigsten Lichtquellen in deinem Bild.
Techniken wie Lightprobes, Lightmaps, Ambient Occlusion und dynamik Ambient Occlusion skalieren wesentlich besser und werden eingesetzt, damit man nicht so stark merkt, dass nicht jede Lichtquelle Schatten wirft.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Mär 16, 2012 17:53 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Nun, theoretisch könntest du deine ShadowMaps auch in den Hauptspeicher auslagern. Dort wird ja sicher noch Platz sein.

Kannst du mal berechnen wie viel Platz du für deine ShadowMaps überhaupt brauchst? Also bei 512x512 * 24bit * 100 komme ich auf gerade mal 75 Mb. Was benutzt du den für eine Grafikkarte? Bei den heute üblichen > 1 GB Grafikspeicher sollte das doch machbar sein?

Noch eine Idee: Kannst du nicht abhängig von der Entfernung der Lichtquelle zur Kamera eine niedrigere ShadowMap-Auflösung wählen? Die werden ja wohl nicht alle im Vordergrund sein.

_________________
Yeah! :mrgreen:


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


Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot] und 6 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.008s | 15 Queries | GZIP : On ]