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

Aktuelle Zeit: Mi Jul 16, 2025 16:02

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 14:09 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
hallöchen allerseits,

wollte mal nachfragen ob das schon jemand hier mal gemacht hat und welche Erfahrungen ihr da gemacht habt. Hintergrund ist halt das ich mir
gerade überlege ob es sich vielleicht bei teuren Effekten wie etwa Horizonmapping lohnen würde diesen Aufwand zu betreiben....

Meine Idee wäre halt folgende:
Code:
  1.  
  2. foreach(Material in Materials)
  3. {
  4.    if(surfs.count() > x && !Material.flag.has[Alpha])
  5.    {
  6.          surfs.drawUV();
  7.          shader[texturebind & deferredLight].dosstuff();  
  8.    } else {
  9.          ....
  10.          
  11.    }
  12.    fbo.colorbuffer.blitTo(fbo.backbuffer);  
  13.    fbo.colorbuffer.clear(); //depth beibehalten!!
  14. }
  15. //schatten,caustics etc...
  16.  

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Keine Ahnung. Wovon redest du? Die vorgeschlagenen Effekte klingen spannend, aber was meinst du eigentlich?

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  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Naja die Idee ist einfach das man für die Oberflächen anstelle der Texel halt nur die Texturkoordinaten in einen Buffer schreibt (bei RGB sind das 12 bit = 4096*4096).
Anschließend nimmt man diesen Buffer und die eigentliche Texturen und jagt diese durch einen Shader.Dadurch müssten Effekte wie Parallaxmapping, Horizonmapping,
etc. (halt alles was auf der Textur wandern muss) nur einmal durchlaufen werden muss da man ja die Texel ja nur im Screenspace verschieben muss. Desweiteren erhält
man gratis noch informationen über die Kanten der Oberfläche wodurch man Unschöne Nebeneffekte beseitigen könnte.

Im Endeffekt heißt das:

P = Leistung für Polygon
S = Leistung für Shader (würde wohl etwas mehr im Screenspace brauchen...)
N = Anzahl Oberflächen

Normal: P*S*N
Screenspace: P*N + P*S

_________________
Meine Homepage


Zuletzt geändert von yunharla am Mi Mai 02, 2012 16:21, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 16:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das klingt ziemlich cool. Ist als Technik mal vorgemerkt, aber selber damit rumgespielt hab ich noch nicht :).

grüße

ps: Was ist mit „Bei RGB sind das 12bit = 4096*4096“ gemeint?

_________________
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  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 16:27 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
Lord Horazont hat geschrieben:
Das klingt ziemlich cool. Ist als Technik mal vorgemerkt, aber selber damit rumgespielt hab ich noch nicht :).

grüße

ps: Was ist mit „Bei RGB sind das 12bit = 4096*4096“ gemeint?


Naja wenn man beim FBO von einen ColorBuffer mit RBGA8 ausgeht, dann hast 2*(8+4) bit (in den Alphakanel will man halt nicht unbedingt schreiben) für deine Texturkoordinaten. Das entspricht dann
einer Textur der Größe 4096*4096.

(interessanter wirds allerdings wenn man sozusagen die "Rückseite" der Objekte auch noch speichern würde...)

_________________
Meine Homepage


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 17:56 
Offline
DGL Member
Benutzeravatar

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

ich bin mir nicht sicher ob ich dich wirklich richtig verstanden habe, deswegen mal kurz von mir zusammen gefasst:

Du renderst ein Bild in dem nur die UV Koordinaten als z.B. R und G kanal gerendert werden. In einem PostProcess nimmst du dann die UVs und packst die Entsprechende Textur drauf.


Genau so wird das in der Filmbranche durchaus gemacht, habe da schon öffters tools für Compositing Programme für geschrieben. Ich hatte selbst auch mal überlegt ob man das in die OpenGL Welt übernehmen könnte, allerdings gibt es da ein großes Problem - man hat in der Regel nicht nur eine Textur :)

Wir machen es hier so das wir einen ID-Kanal rendern wo jedes Pixel zusätzlich zur UV noch eine ID hat, der Artist kann dann sagen "Das Objekt mit der ID X bekommt Textur Y". Das könnte man zwar in OpenGL genauso machen, aber stößt da sehr schnell an das Limit an Texturen die man gleichzeitig im Shader nutzen kann.

Wenn man nur ein paar Texturen pro Frame verwendet ist es kein Problem und funktioniert ganz gut, allerdings mit mehr Texturen wird es wie gesagt schwer. Zudem bräuchte man etwas wie 3D Texturen oder Texture Arrays damit man von der ID recht einfach auf die passende Textur kommt.


Aber soo viel ersparnis dürfte es auch sowieso nicht bringen.. das einzige wo wir es teilweise nutzen ist wenn wir eine fertig gerendertes Bild haben das mal eben 20h gerendert hat und dann gern im nachhinein eine Textur auf einem Objekt austauschen wollen ohne es neu zu rendern.


Aya


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Mi Mai 02, 2012 18:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
@yunharla: Also mit den Texcoords alleine wirst du nicht weit kommen. Du brauchst ja nicht nur diese sondern auch die Fragmentposition (zumindest die Tiefe musst du speichern), die Normale und ggf. noch eine Tangente. Insofern sind 12bit wohl unrealistisch. Die Begrenzung auf eine Textur ist dagegen nicht schlimm, VirtualTexturing kann man immer machen.

Zitat:
Desweiteren erhält man gratis noch informationen über die Kanten der Oberfläche wodurch man Unschöne Nebeneffekte beseitigen könnte.

In vielen Fällen reichen die Derivative-Funktionen im Fragmentshader: dFdx und dFdy. Dem Overhead von unnötig berechneten Fragmenten kann man durch einen vorherigen Z-only Pass begegnen.

Vielleicht noch ein Stichwort für dich: http://wiki.delphigl.com/index.php/Deferred_Shading

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Texturebinding im Screenspace
BeitragVerfasst: Do Mai 03, 2012 10:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Kling für mich auch nach ein klassischem deferred renderer.
Standardmässig benötigt man Normal-, UV-, Color- und Tiefen-Buffer.
Einige benutzten noch ein Velocity Buffer, um motion blur zu machen.
Ohne ein Screen Spaced AA Shader zu implementieren ist aber deferred shading eher unschön.
Du brauchst für Alpha rendering wieder ein Forward render, extra Buffer(der immer noch zu Problemen führt) oder eine sehr sehr moderne Karte, um Depth-Peeling zu machen.
Am Ende ist der Renderer nicht schneller als forward Rendering aber mit neuen Grakas und komplexeren Shading wird der Deferred Renderer wieder schneller.
Du kaufst für ne menge Aufwand dir ledeglich ein wenig mehr Power auf aktuellen und zukünftigen Karten.

Wenn du Zeit hast und dich dafür interessierst, dann sicher toll aber so ist das ne menge Arbeit, bevor du was siehst und noch mehr bevor du was siehst, was akzeptabel aussieht und noch mehr bis es gut aus sieht.

_________________
"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: Texturebinding im Screenspace
BeitragVerfasst: Do Mai 03, 2012 19:06 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Nov 08, 2010 18:41
Beiträge: 769
Programmiersprache: Gestern
naja werde wahrscheinlich sowieso nen traditionellen und diesen Codepfad einbauen, dann kann ich ja auch gleich mal nen Profiler rüberjagen ^^

achja hier mal n bissl "proof of concept" (eigentlich wars ja von Anfang klar dasses funzt ^^) screenies

http://broodtech.de/pics/deferred_enc_dec_depth.jpg
http://broodtech.de/pics/deferred_enc_dec_depthb.jpg

btw nicht über die Auflösungen wundern, musste die App 5 mal neustarten damit PLinq zuerst das zweite Material genommen hatte lol

_________________
Meine Homepage


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: 0 Mitglieder und 8 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]