JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=e0d3351e3a04e0f0ffad77677d66a307Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Motion Blur
Gehe zu Seite 1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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

BeitragVerfasst am: 27.01.2004, 18:58    Titel: Motion Blur Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 12.02.2004, 09:42    Titel: Antworten mit Zitat

Hm, versuchs doch mal mit Alphakanal statt additive ..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 04.08.2008, 19:38    Titel: Antworten mit Zitat

Hiermit hab ich gerade ein Problem.
Mein Weg sieht zur Zeit so aus:
  1. Zu blurrendes Objekt immer an den aktuellen Koordonaten auf Rendertarget-Textur(A) zeichnen
  2. Alphawert der Pixel des Rendertargets(A) in regelmäßigen Abständen verkleinern
  3. 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 07.08.2008, 20:54    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
xardias
JLI Master


Alter: 38
Anmeldedatum: 28.12.2003
Beiträge: 804
Wohnort: Palo Alto, CA
Medaillen: Keine

BeitragVerfasst am: 08.08.2008, 06:25    Titel: Antworten mit Zitat

Oh man.. 4 1/2 Jahre ist der Post schon alt Very Happy das waren noch Zeiten ;D
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.08.2008, 07:06    Titel: Antworten mit Zitat

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 Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 08.08.2008, 12:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 08.08.2008, 15:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.08.2008, 13:01    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 09.08.2008, 15:08    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.08.2008, 16:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.08.2008, 16:51    Titel: Antworten mit Zitat

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 Wink . Für Direct3D 9.0 klappt das bei mir wunderbar.
_________________

Ich bin da, wer noch?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.08.2008, 17:56    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr. Best
Senior JLI'ler


Alter: 34
Anmeldedatum: 17.06.2004
Beiträge: 269
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 09.08.2008, 20:20    Titel: Antworten mit Zitat

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 Very Happy . 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name MSN Messenger
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 09.08.2008, 21:31    Titel: Antworten mit Zitat

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 Very Happy

Das war xardias und das vor einiger Zeit. Mir sind Shader recht. Will ja gerade meinen Umgang damit trainieren Wink
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite 1, 2, 3  Weiter
Seite 1 von 3

 
Gehe zu:  
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

Impressum