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

Aktuelle Zeit: Fr Jul 18, 2025 08:11

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Brink nutzt OpenGL 2-3
BeitragVerfasst: Di Aug 16, 2011 10:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Im folgendem Paper findet man eine menge nützlicher Informationen über die Entwicklung mit den neueren Technologien in OpenGL. In Brink wurde OpenGL 2-3 API verwendet mit ein Schuss ARB. Was mich überrascht hat, dass ein echtes Virtual Texturing verwendet wird, statt das übliche clip mapping. Virtual Texturing ist ziemlich teuer, da man entweder auf der CPU alles berechnen muss oder einige OpenGL 4 technologien bräuchte. Brink macht es über die CPU und geht den kostenintensiven Weg mit VRAM<->RAM und multi threaded FBO analyse. Ich habe vor gut 3 Jahren meine Bachelor Arbeit über Virtuelle Texturen geschrieben und damals war es technisch natürlich möglich aber noch nicht praktisch einsetzbar, weil die Hardware zu langsam war. Es freut mich, das es ein AAA Titel gibt der dies nun für eine große Bandbreite an Gamer verfügbar machen kann :)

http://www.khronos.org/assets/uploads/developers/library/2011-siggraph-opengl-bof/Brink-preferred-rendering-with-OpenGL.pdf

_________________
"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  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Mi Aug 17, 2011 07:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Unterstützt die id Tech 4 nicht seit Enemy Territory Quake Wars (auch von Splash Damage) Virtual Textures? Und so weit ich mich erinnern kann (und laut wiki) benutzt Brink auch noch die id Tech 4 in einer stark geänderten Version (wie übrigens Prey 2 auch, was ich noch beeindruckender finde ;) )
Was ich damit eigentlich sagen will: Ist das Virtual Texturing dann jetzt neu und bei Quake Wars wars irgendwas anderes? Versteh davon noch nicht so viel. Oder ist nur das Paper so interessant, das werd ich mir nochmal in ner ruhigen Minute genauer anschaun müssen.

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Mi Aug 17, 2011 09:28 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Jo ein großer Unterschied ist da. Quake Wars nutzt Clip Maps oder Mega Texture, wie sie es nennen.
Dabei wird eine Textur verwendet, auf den höheren MipMap level wird aber die gleiche Auflösung verwendet.
Da die Auflösung der Zieltexturen größer ist, wird per Software der Rest weg gelassen und nur ein Ausschnitt in die MipMap kopiert. Der Ausschnitt wird auf die Spielerposition ausgerichtet und nimmt entsprechend in der qualität ab, je weiter man vom Spieler sich entfernt. Optimierung ist hier nur die Textur um x und y zu verschieben und dann die neu angeforderten Pixel nach zu laden und in die Textur hoch zu laden. Dies nennen Blogs, Fachartikel und Foren oft Virtual Textures aber eigentlich ist es ne Krüppel Variante.

Bei Virtual Texture, hat man ein Textur Atlas und eine Lookup Map. Die Lookup Map sagt, wo ein Texturblock, auf der aktuellen Szene in dem Textur Atlas zu finden ist und rechnet im FragmentShader die UV Koordinaten entsprechend um und liest dann den wirklichen Texel aus dem Textur Atlas. Um den Textur Atlas und Lookup Map aktuell zu halten, muss die Szene analysiert werden. Bis dato wurde das immer mit der CPU gemacht, also man rendert die Szene mit einem extra Fragmentshader, der in RGB die LookupMap Infos verpackt, z.B. Block-x,Block-y,Textur-Atlas.
Den FBO lädt man nun in den Arbeitsspeicher und geht mit der CPU drüber und prüft, welche Texturblöcke aus den Atlas raus können und welche noch fehlen. Dann wird der Atlas im Arbeitsspeicher aktualisiert, dann die LookupMap und alles wieder hoch geladen.

Vorteil dieser Technik ist, dass man immer ein festen VRAM verbrauch hat, egal was passiert, wie komplex die Szene ist, man verbraucht konstant den gleiche Speicher. Diese Technik hat auch den Vorteil, dass durch OnDemand prozedurale Texturen möglich sind(statt decals würde man die Textur vom Decal auf die Textur drüber malen und damit mit in der Textur haben) und man, sofern der Plattenplatz da ist jeden Texel in einem Spiel einzigartig machen kann, keine wiederverwendung von Texturen wäre möglich.

ID Tech 5 nutzt Virtual Texture.

_________________
"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  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Mi Aug 17, 2011 20:55 
Offline
DGL Member

Registriert: Mi Sep 15, 2010 18:22
Beiträge: 59
Wohnort: Sachsen Meißen
Programmiersprache: Pascal, C(++), Java
Und was Brinkt die Technik noch, außer konstanten Speicherverbrauch?
Kann man deine Arbeit irgendwo im Internet ansehen?

_________________
bluesky


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Mi Aug 17, 2011 21:34 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
-konstanter Video Speicherverbrauch
-verteilung der IO-Last über die Zeit, da nicht alles mit einmal geladen werden muss sondern nach geladen werden kann(erst niedere mipmap blöcke dann die größeren) und man merkt es nicht
-jeder Texel kann einzigartig sein
-dynamische texturen(jegliche art von änderung kann direkt auf die Textur gezeichnet werden und muss nicht über mehere Passes oder multi texturing gemacht werden)
-reduzierung der texture bindings
-jeglichen Detailgrad den man haben will, ohne diesen für alles haben zu müssen
-einfacher für Texture-Artists, da sie direkt malen können( hier mal ein älteres ID Tech 5 Video http://www.youtube.com/watch?v=unLG8qY17DQ )

Hier mal ne recht schicke demo, die ich beim fixen googeln gefunden hab http://www.youtube.com/watch?v=p49vOX-_ ... re=related

Verteidigungs Präsi
http://dl.dropbox.com/u/1672275/Ba_Praesentation.pdf
Bachelor Arbeit
http://dl.dropbox.com/u/1672275/Bachelorarbeit.pdf

_________________
"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  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Mi Aug 17, 2011 22:42 
Offline
DGL Member

Registriert: Mi Sep 15, 2010 18:22
Beiträge: 59
Wohnort: Sachsen Meißen
Programmiersprache: Pascal, C(++), Java
Sehr beeindruckend, was damit alles möglich ist und herzlichen Dank, dass ich deine Arbeit ansehen darf.

_________________
bluesky


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Do Aug 18, 2011 05:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hi,

ich finde das Virtual Texturing durchaus interessant und werde es mir aufjedenfall mal genauer anschauen, allerdings gleich vorweg hab ich direkt mal ein paar verstaendnis fragen.

1) Der sinn dahinter ist ja scheinbar das alle Texturen, bzw eine riesen grosse nurnoch im Arbeitsspeicher liegen, richtig? Man ermittelt dann welche pixel sozusagen alles gebraucht werden und bastelt daraus eine neue Textur zusammen. Man macht also auf der CPU die Arbeit die eigentlich die GPU machen sollte, nur weil die CPU mehr Ram hat als die GPU... ist das wirklich so performant? Also eine 2k-textur zusammen zu stueckeln auf der CPU ist ja jetzt auch einigermassen aufwaendig..

2) Das wird vermutlich eher pro Textur gemacht, oder? Oder hat man idealerweise am ende eine 2k textur wo alle texel (aus verschiedensten texturen) die fuer das aktuelle Bild gebraucht werden drin sind? Wie kann man da garantieren das 2k reichen? Wenn ich lauter 1pixel grosse objekte habe mit verschiedener textur, und fuer jedes einen kleinen block in die virtual texture kopiere, reichen 2k vorne und hinten ja nicht... oder packe ich wirklich nur das eine texel in die textur und mache sogar dinge wie das Linear-filtering auf der CPU?

Aya~


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Brink nutzt OpenGL 2-3
BeitragVerfasst: Do Aug 18, 2011 09:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
zu 1) Die CPU sucht die Texturblöcke, die gebraucht werden und lädt diese Blöcke von den Ressourcen ein.
Der Grund, wieso ich so überrascht war, das Brink Virtual Texture nutzt ist eben der Fall, dass es recht CPU intensive ist aber was noch mehr Zeit kostet ist der FBO transfere. Erst mit neueren OpenGL Versionen 2-3 gibt es Möglichkeiten diese stark zu verbessern. Allerdings waren selbst meine unoptimierten Tests mit über 100 FPS und es sind ja einige Jahre mittlerweile vergangen, also neue Hardware und Software ist verfügbar.

zu 2) Du kannst aus mehreren Texturen es zusammen konstruieren oder man macht es wie ID Soft und einige andere Engines, die dieses Feature stark nutzen und baut großen texturen so 128k x 128k pixel sind da kein Problem.
Ein Patent Rezept gibt es nicht, viele Entwickler implementieren es unterschiedlich, also Unterschiedliche Atlasgrößen, mit Mip-Map, ohne, mit mehreren Texturen, 2 extra pixel für hardware filtering, shader basiertes filtering und und und .
Das ist Hardware abhängig.

_________________
"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  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 3 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 | 16 Queries | GZIP : On ]