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

Aktuelle Zeit: Mo Jul 21, 2025 16:56

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



Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
BeitragVerfasst: So Nov 18, 2007 08:14 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
gelöst


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:12, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 18, 2007 10:05 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Guten Morgähn!!!

den tiefenpuffer habe ich mit
Code:
  1. glCopyTexImage2D(GL_TEXTURE_2D,0,GL_DEPTH_COMPONENT, 0,0, ReflectionSize,ReflectionSize, 0);
  2.  

in eine textur kopiert und dann an den shader übergeben.

Empfehlenswert scheint es zu sein, die Szene zuerst ohne Texturen und sonstigen SchnickSchnack zu Rendern. In einer Präsentation zur Technik bei Crysis wurde das erklärt. Link muss ich nachreichen.
Auf jeden Fall haben die damit 'alles' gemacht. Angefangen beim Shadowmapping, über die Sichtbarkeitsprüfung des Wassers (welches nämlich mit dem Betrachter wandert, also nicht im Worldspace liegt) bis hinzu den athmosphärischen Effekten (Nebel und so zeug). War ziemlich hart zu lesen, für einen fast-Laien wie mich. :D

schönen Sonntag noch!

damadmax

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 18, 2007 19:23 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
gelöst


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:13, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 14:29 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
vorher! sonst würde es ja keinen vorteil bringen.

aber du kannst doch erst deine umgebung rendern, dann die entstandene tiefentextur nehmen und deine partikel damit überblenden.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 14:34 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
gelöst


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:13, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 22:16 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Der Z test kann voher statfinden (Early Z), aber der eigendliche Z test findet nach dem fragmentshader stat.

In dem Fall der Softpartikel gibt es einfache (aber unsinnige) Lösungen:

Die Partikel werden etwas zur kammera verschoben. Wenn man dies aber genauer betrachtet macht es keinen sinn.

Wenn in ein FBO gerendert wird, ann man einen textur als Z buffer verwenden. Wenn Partikel aktiv sind macht das schreiben dort hin keinen sinn, so das man stat dessen im shader daraus lesen kann und so die entfernung vom Partikel zum hintergrund berechnen kann. Dies ist aber auch nur für kurze entfernungen sinvoll und bringt nur marginal bessere ergebnisse als stat dessen eine größere anzahl von partikeln zu rendern.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 22:22 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
gelöst


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:13, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 23:10 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Lesen des Z Buffers im Fragmentshader ist nur möglich wenn in ein FBO gerendert wird (MSAA macht es noch komplizierter):
1. Scene rendern. Der Z-Buffer und der Colorbuffer sollten als rectangle textures implementiert werden. letzterer kann auch ein GL_RGBA_16F rendertargtet für HDR sein. Ein Stencilbuffer ist nur auf nvidia karten möglich da ATI Karten kein gepackten Stencil + Z als texturformat unterstützen. Alternative: (mit einem PBO) Den Z Buffer in eine rectangle Textur kopieren.

2. Die Z Buffer Texture binden im fragmentshader lässt sich die textur mit gl_FragCoord.xy auslesen. Allerdings muss der Z Buffer Wert zurück als entfernung umgerechnet werden.
In diesem topic auf opengl.org habe ich passenden code gepostet (Der eigendlich für deferred rendering gedacht ist):
http://www.opengl.org/discussion_boards ... 36&fpart=1

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 23:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Eventuell ist das hier gemeint:

Bild
http://www.humus.ca/index.php?page=3D&ID=36

Da wird die Entfernung zwischen (der Gerade durch Kamera und Fragment) und (dem Mittelpunkt der Lichtquelle) berechnet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 23:35 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
gelöst


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:13, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Nov 19, 2007 23:53 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Nein kopieren geht auch ohne FBO. allerdings kostet das kopieren etwas Zeit. Am schnellsten geht das kopieren mit hilfe eines PBO. Wenn man allerdings in ein FBO rendert muss man zum schluss wiederum in den Framebuffer kopieren (was nur sinn macht wenn man ein postprocessing durchführt)

_________________
Lumina plattform unabhängige GLSL IDE


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 00:05 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
gelöst


Zuletzt geändert von elektrokrach am Di Nov 27, 2007 11:14, insgesamt 2-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 20:45 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Zumindest in DirectX 10 kann der pixelshader den alten z-wert im buffer lesen, und auch den z-wert des pixels anpassen.
http://ati.amd.com/developer/samples/DepthExplosion.html
http://gamedev.de/index.php?name=News&file=article&sid=182
The sample uses 1.4 pixel shaders to render depth sprites with "texdepth" instruction. The "texdepth" instruction in 1.4 pixel shaders allows to overwrite polygons depth information with values computed in the shader as (r5.r / r5.g).

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 20:47 
Offline
DGL Member

Registriert: Di Okt 23, 2007 10:20
Beiträge: 84
Und wie soll mir das mit OpenGL weiterhelfen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 20, 2007 21:13 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Das sollte heißen dass es die neuen Grakas jedenfalls können. Und da zumindest von NVidia extesions zu dem meisten Dx10 Fähigkeiten vorliegen könnte es also auch mit OGL gehen.

_________________
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 41 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Shader


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 | 15 Queries | GZIP : On ]