|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 27.01.2004, 18:58 Titel: Motion Blur |
|
|
Hallo,
Ich überlege gerade, wie man einen 2D Motion Blur effekt in OpenGL (ohne Shader) basteln könnte.
Bisher hatte ich 2 verschiedene Möglichkeiten ausprobiert:
I. Motion Blur Textur leicht verdunkelt in den Hintergrund blitten(siehe III.)
II. Szene komplett drüber rendern
III. Aktuelles Bild in der Motion blur Textur speichern.
Der Nachteil daran ist, dass ich keine Hintergründe benutzen kann und motion blur auch nur außerhalb von bildern zu sehen ist (da der rest ja ubermalt wird)
2. Möglichkeit:
I. Szene Rendern
II. Motion Blur Textur additiv drüber blenden
III. Aktuelles Bild in der Motion blur Textur speichern
So hab ich dann Motion Blur auf dem ganzen Bild. Probleme sind nur, dass dabei leicht farbverfälschungen auftreten. (gelber smilie bekommt dann grüne motion blur streifen).
Kennt ihr ne Technik, mit der man Motion Blur sonst noch anstellen könnte ?
Falsl ihr wollt kann ich auch noch screenshots zu den 2 techniken posten. |
|
Nach oben |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 12.02.2004, 09:42 Titel: |
|
|
Hm, versuchs doch mal mit Alphakanal statt additive .. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 04.08.2008, 19:38 Titel: |
|
|
Hiermit hab ich gerade ein Problem.
Mein Weg sieht zur Zeit so aus:
- Zu blurrendes Objekt immer an den aktuellen Koordonaten auf Rendertarget-Textur(A) zeichnen
- Alphawert der Pixel des Rendertargets(A) in regelmäßigen Abständen verkleinern
- Damit das klappt, brauch ich noch ein Hilfsrendertarget(B) und muss hin und her kopieren(oder kennt jemand einen anderen Weg? Kann ich per Pixelshader auf der Quelltextur herumschreiben?)
Pseudocode in etwa so:
CPP: | // #1
SetRendertarget("BlurA");
Render("Objekt");
// #2
//Blur-textur allmählich verblassen lassen
SetRendertarget("BlurB");
Clear("BlurB",D3DCOLOR_ARGB(0,0,0,0));
RenderFadingTexture("BlurA",10%);
#3
//Zurückkopieren, damit Blurtextur beim nächsten Frame noch den Schweif von früheren Frames enthält
SetRendertarget("BlurA");
Clear("BlurA",D3DCOLOR_ARGB(0,0,0,0));
RenderTexture("BlurB");
//Finale Darstellung
SetRendertarget("Backbuffer");
RenderTexture("BlurA"); |
Zu Testzwecken - und weil ich den Shader dafür noch nicht geschrieben hab - hab ich erst mal das Fadeout weggelassen und alles mit jeweils 100% Opacity kopiert. Der Schweif muss also einfach bleiben, theoretisch wird die Textur durch das Bewegen des Objekts allmählich gefüllt.
Komischerweise ist das nur zu beobachten, wenn ich den oben markierten Teil(#3) weglasse. Sobald ich ihn drin lasse, gibt es gar keinen Schweif mehr und das Objekt wird jeweils nur an den aktuellen Koordinaten gerendert. Dabei sollte doch der Code lediglich vom Ausgangspunkt BlurA das bisher gezeichnete auf BlurB und wieder zurück kopieren.
Sollte mein Code einer automatischen Optimierung zum Opfer gefallen sein, die merkt, dass hier mehrmals die gleiche Textur zum Rendertarget ernannt wird? Hab ich irgendeinen Denkfehler? Gibt es alternative Ansätze?
Wichtig ist mir in dem Fall, dass der Effekt örtlich genau abläuft, nicht durch einen Geschwindigkeitsvektor, der zurückverfolgt wird. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 07.08.2008, 20:54 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | (oder kennt jemand einen anderen Weg? Kann ich per Pixelshader auf der Quelltextur herumschreiben?) |
Ausprobiert und funktioniert =) _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
xardias JLI Master
Alter: 38 Anmeldedatum: 28.12.2003 Beiträge: 804 Wohnort: Palo Alto, CA Medaillen: Keine
|
Verfasst am: 08.08.2008, 06:25 Titel: |
|
|
Oh man.. 4 1/2 Jahre ist der Post schon alt das waren noch Zeiten ;D |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.08.2008, 07:06 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | The Lord of Programming hat Folgendes geschrieben: | (oder kennt jemand einen anderen Weg? Kann ich per Pixelshader auf der Quelltextur herumschreiben?) |
Ausprobiert und funktioniert =) |
Wie soll das gehen oder missverstehe ich dich dabei grade ziemlich?
"Texture0 = Alpha"
"RenderTarget = Alpha"
"Render"
Das ist eigentlich unmöglich |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 08.08.2008, 12:40 Titel: |
|
|
Fallen hat Folgendes geschrieben: | Wie soll das gehen oder missverstehe ich dich dabei grade ziemlich? |
Ehm...schwer zu sagen, da ich deine Ausführungen gerade nicht blicke.
Ich rendere jetzt ganz einfach auf einem Rendertarget("Blur") herum wie ich lustig bin. In regelmäßigen Abständen wird dieses Rendertarget nun auf sich selbst gerendert(Target und Quelltextur sind also gleich). Dabei verwende ich einen Shader, der den Alphawert der Pixel heruntersetzt. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 08.08.2008, 15:15 Titel: |
|
|
Zitat: | Target und Quelltextur sind also gleich |
Genau das meine ich, seit wann ist dies denn möglich? Bei mir werden dann massig Warnungen ausgespuckt bzw sogar Fehler sollte ich so etwas versuchen.
Das ist es was mich wundert. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.08.2008, 13:01 Titel: |
|
|
Hmm...was für Fehler/Warnungen kommen da denn und an welcher Stelle genau?
Compiler oder Laufzeit? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 09.08.2008, 15:08 Titel: |
|
|
Eigentlich direkt DirectX Fehler, dazu muss man aber die DX Debug Runtime aktiviert haben damit man diese auch sieht.
Ich kann ja mal schauen was genau er da ausspuckt. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.08.2008, 16:20 Titel: |
|
|
Wie kann ich sicherstellen, dass die Debug Runtime auch funktioniert?
Ich hab sie aktiviert, aber bekomme nicht mal Info-Ausgaben zu D3D. Ich hab sogar ein "#define D3D_DEBUG_INFO" hinzugefügt, aber ich bekomme einfach keine Ausgabe. _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.08.2008, 16:51 Titel: |
|
|
Welches Direct3D und welches Windows benutzt du denn? Bei mir klappt die Debugruntime unter Vista nicht für Direct3D 8.1 oder älter. Wenn sie funktioniert merkst du es an der Ausgabe . Für Direct3D 9.0 klappt das bei mir wunderbar. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.08.2008, 17:56 Titel: |
|
|
WinXP, DX 9.0 - Dezember 04 und VS 2005, falls das wichtig ist.
Es ist schon richtig, dass ich in der Debugausgabe schaue, oder? Dort sind eben fast nur Meldungen dieser Art zu finden:
Zitat: | "C:\WINDOWS\system32\kernel32.dll" geladen, Keine Symbole geladen. |
Wo wir gerade dabei sind, bei u.a. diesen DLLs spuckt er das auch aus:
C:\WINDOWS\WinSxS\x86_Microsoft.VC80.DebugCRT_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_f75eb16c\msvcp80d.dll
C:\WINDOWS\system32\d3d9.dll
C:\WINDOWS\system32\d3d8thk.dll
Was hat das zu bedeuten? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.08.2008, 20:20 Titel: |
|
|
Jo, das is schon das richtige Fenster. Kannst ja vielleicht einfach mal das Juni 2008 SDK downloaden und installieren. Diese Meldungen, die du kriegst, besagen glaube ich im wesentlichen nicht mehr, als dass diese DLLs irgendwo verwendet. Ich krieg die auch alle.
Übrigens, um mal wieder ein bisschen zurück zum Thema zu kommen: Ich meine auch, dass ich irgendwann mal eine Textur gleichzeitig gleichzeitig als Render Target und als Textur verwendet habe und wenn ich mich recht entsinne funktioniert das tatsächlich. Aber ist schon eine ganze Weile her, weiß es nicht mehr genau. Aber wenn man das machen will kann man auch einfach zwei Texturen haben und die immer abwechselnd als Quell- und Zieltextur verwenden.
Eine Möglichkeit Motion Blur zu machen ist die gesamte Szene in eine Textur zu rendern und diese dann transparent in das Render Target zu rendern. Ist allerdings nicht gerade die beste Lösung, da die entstehende Spur, sprunghaft ist (ein Stück Spur pro Frame, sieht aus wie wenn man mit einem Stift vor einem CRT rumwackelt). Meistens macht man es eher mit Blur Post Screen Shadern. Man rendert die Szene in eine Textur und diese kommt dann durch den PSS auf den Bildschirm. Der PSS Blurt die Textur auf eine bestimmte vorher berechnete Art und Weise. Man kann z.B. den Effekt nur von der Bewegung der Kamera abhängig machen. In diesem Fall würde man eine 3x3 Matrix berechnen, die beschreibt, wie ein fixiertes Dreieck auf dem Bildschirm sich durch die Änderung der Kameraausrichtung im Laufe eines Steps verändert. Von dieser nimmt man dann das Inverse und schwächt sie ein bisschen ab. Im Vertex Shader des PSS berechnet man dann durch Mehrfachanwendung dieser Matrix auf die Texturekoordinaten mehrere Texturkoordinaten. Im Pixel Shader sampelt man dann mit all diesen Texturkoordinaten jeweils einmal die Szenentextur und bastelt sich damit eine Linearkombination. Hab das ganze mal mit Pixel Shader Model 1.4 implementiert (damit was Besseres hinkriegen ist schwer). Sieht ganz ordentlich aus. Für bessere Effekte muss man zusätzlich noch Texturen rendern, die Informationen darüber enthalten wo wie stark und in welche Richtung geblurt werden muss.
Edit: Grad gesehen, dass du's ohne Shader haben willst. Schade . Aber die Technik, die ich gerade ausführlich beschrieben hab geht auch ohne Shader. Anstatt die Szenentextur ein mal mit Shader zu rendern rendert man sie dann halt ganz oft mit Transparenz und jeweils verschiedenen Texturkoordinaten. Problem ist so oder so, dass alles genau gleich geblurt wird. _________________
Ich bin da, wer noch? |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 09.08.2008, 21:31 Titel: |
|
|
Dr. Best hat Folgendes geschrieben: | Jo, das is schon das richtige Fenster. Kannst ja vielleicht einfach mal das Juni 2008 SDK downloaden und installieren. Diese Meldungen, die du kriegst, besagen glaube ich im wesentlichen nicht mehr, als dass diese DLLs irgendwo verwendet. Ich krieg die auch alle. |
Hmm, dämlich. Ich werds bei Gelegenheit updaten.
Ist es möglich, dass es an irgendwelchen IDE-Einstellungen liegen kann?
Dr. Best hat Folgendes geschrieben: | Übrigens, um mal wieder ein bisschen zurück zum Thema zu kommen: Ich meine auch, dass ich irgendwann mal eine Textur gleichzeitig gleichzeitig als Render Target und als Textur verwendet habe und wenn ich mich recht entsinne funktioniert das tatsächlich. Aber ist schon eine ganze Weile her, weiß es nicht mehr genau. Aber wenn man das machen will kann man auch einfach zwei Texturen haben und die immer abwechselnd als Quell- und Zieltextur verwenden. |
Funktionieren tuts ja bei mir auch definitiv. Ich seh es ja. Ich würde nun doch gerne wissen, ob da Warnungen ausgespuckt werden.
Das mit zwei Texturen hab ich ja versucht und in meinem Post oben beschrieben. Da gabs halt ein recht komisches Verhalten.
Dr. Best hat Folgendes geschrieben: | Edit: Grad gesehen, dass du's ohne Shader haben willst. Schade |
Das war xardias und das vor einiger Zeit. Mir sind Shader recht. Will ja gerade meinen Umgang damit trainieren
Das Problem ist, dass ich nichts in Abhängigkeit der Kamerabewegung verschwimmen lasse. Das soll nur lokal für einen Effekt angewendet werden, der sich quasi entlang eines Pfades bewegt.
Bei so einer Art von "Visual Effects" hab ich sowieso noch ein bissel Probleme, das wie gewünscht hinzukriegen. Gibts da empfehlenswerte Literatur/Links? _________________ www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console
Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet... |
|
Nach oben |
|
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|