|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Dr. Best Senior JLI'ler
Alter: 34 Anmeldedatum: 17.06.2004 Beiträge: 269 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 09.08.2008, 22:31 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Das war xardias und das vor einiger Zeit. |
Das hat man dann davon sich in Topics so spät einzklinken ohne sie vorher verfolgt oder in einem durch gelesen zu haben .
The Lord of Programming hat Folgendes geschrieben: | 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. |
Motion Blur ohne Post Screen Shader halte ich für eine ganz schlechte Idee. Das Problem dabei ist, dass Shader, die direkt Objekte beeinflussen eben nie über die Grenzen der Geometrie hinaus wirken können. Und das ist bei Motion Blur eben nicht ausreichend. Man könnte mit einer extrudeten (ich weiß grauenhafter Anglizismus) Kopie des Modells rumfuschen, aber mit einem PSS geht das einfach besser.
Wenn der PSS sich nur in einem bestimmten Bereich auswirken soll schlage ich vor, dass du einfach eine Textur renderst, die festlegt wo das ist. Einfach eine Render Target Textur mit recht niedriger Auflösung machen und mit Schwarz füllen. Dann das Objekt, dass geblurt werden soll (evtl. in extrudeter Fassung) weiß reinrendern und Objekte die es verdecken könnten wiederum Schwarz. Der PSS holt sich dann für jeden Pixel auf dem Bildschirm den Farbwert aus dieser Textur und benutzt ihn um zwischen der Farbe in der Szenentextur und der Farbe, die berechnet wurde, linear zu interpolieren. Wo Weiß ist wird geblurt, wo Schwarz ist nicht und dazwischen ist ein linearer Übergang (dank Texturfilter).
The Lord of Programming hat Folgendes geschrieben: | Bei so einer Art von "Visual Effects" hab ich sowieso noch ein bissel Probleme, das wie gewünscht hinzukriegen. Gibts da empfehlenswerte Literatur/Links? |
Viel rumexperimentieren hilft auf jeden Fall. Oft ist es hilfreich sich zu überlegen, wie der gewünschte Effekt in der Realität entsteht (hat mir bei einem Wolkenshader z.B. mal sehr geholfen), manchmal führt das aber auch eher vom rechten Pfad weg. Ich hab das Meiste was ich so gemacht hab entweder aus Online Tutorials (meistens bei GameDev.net nach dem gesucht was ich haben wollte) oder selbst erdacht. An Literatur sind nach allem was ich gehört hab die ShaderX Bücher sehr zu empfehlen. ShaderX² gibt es ja jetzt auch umsonst. _________________
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, 23:21 Titel: |
|
|
Hmm...aber das Geblurre geht ja bei dieser Methode nur in eine Richtung. Wenn das Objekt einen variablen Richtungsvektor hat, geht das halt schwer.
Stell dir z.B. vor, dass bei einem Snake-Spiel die Schlange einen Schweif ziehen soll.
Dr. Best hat Folgendes geschrieben: | Viel rumexperimentieren hilft auf jeden Fall. Oft ist es hilfreich sich zu überlegen, wie der gewünschte Effekt in der Realität entsteht (hat mir bei einem Wolkenshader z.B. mal sehr geholfen), manchmal führt das aber auch eher vom rechten Pfad weg. |
Jo, stimmt. Danke für die Tipps. Is nur manchmal so, dass es den Effekt halt nicht in der Realität gibt, sondern einfach ein cooles Gimmick àla blingblingglitzerglänztuirgendwas sein soll, das der Grafik und dem gesamten Auftreten etwas mehr Tiefe verschaffen soll.
Dr. Best hat Folgendes geschrieben: | Ich hab das Meiste was ich so gemacht hab entweder aus Online Tutorials (meistens bei GameDev.net nach dem gesucht was ich haben wollte) oder selbst erdacht. An Literatur sind nach allem was ich gehört hab die ShaderX Bücher sehr zu empfehlen. ShaderX² gibt es ja jetzt auch umsonst. |
Cool, danke. Hab den Thread absolut übersehen _________________ 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: 10.08.2008, 10:10 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Hmm...aber das Geblurre geht ja bei dieser Methode nur in eine Richtung. Wenn das Objekt einen variablen Richtungsvektor hat, geht das halt schwer.
Stell dir z.B. vor, dass bei einem Snake-Spiel die Schlange einen Schweif ziehen soll. |
Jo, klar, das ist der Nachteil der Technik. Wenn du es noch besser haben willst musst du eben eine Textur mit Screen Space Richtungsvektoren für den Blureffekt vollrendern. Mit deren Hilfe musst du dann im Pixel Shader (statt im Vertex Shader) die Texturkoordinaten berechnen und der Rest ist wieder das alte Spiel.
The Lord of Programming hat Folgendes geschrieben: | Jo, stimmt. Danke für die Tipps. Is nur manchmal so, dass es den Effekt halt nicht in der Realität gibt, sondern einfach ein cooles Gimmick àla blingblingglitzerglänztuirgendwas sein soll, das der Grafik und dem gesamten Auftreten etwas mehr Tiefe verschaffen soll. |
Für Blingbling kommt man mit den immer gleichen Tricks meistens schon recht weit. Meistens ist es da ganz gut einfach irgendwie per Pixel Shader an den Farben rumzuschrauben. Die komischsten Sachen führen manchmal zu guten Effekten (das ist es was ich mit viel rumexperimentieren meinte). Man könnte zum Beispiel mal probieren was dabei rauskommt wenn man eine 3x3 Matrix nimmt um Farben zu rotieren. Mit unstetigen Shaderfunktionen wie min(...), max(...) und slt(...) lassen sich manchmal auch interessante Sachen machen. Hab damit zum Beispiel mal einen ps_1_1 Laverlampeneffekt gemacht. Eine Technik, die auch immer wieder gut ist, ist Texture Perturbation. _________________
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: 10.08.2008, 11:49 Titel: |
|
|
Dr. Best hat Folgendes geschrieben: | The Lord of Programming hat Folgendes geschrieben: | Hmm...aber das Geblurre geht ja bei dieser Methode nur in eine Richtung. Wenn das Objekt einen variablen Richtungsvektor hat, geht das halt schwer.
Stell dir z.B. vor, dass bei einem Snake-Spiel die Schlange einen Schweif ziehen soll. |
Jo, klar, das ist der Nachteil der Technik. Wenn du es noch besser haben willst musst du eben eine Textur mit Screen Space Richtungsvektoren für den Blureffekt vollrendern. Mit deren Hilfe musst du dann im Pixel Shader (statt im Vertex Shader) die Texturkoordinaten berechnen und der Rest ist wieder das alte Spiel. |
Hmm, hat man da nicht dasselbe Ruckel-Problem? Wenn die Framerate unregelmäßig ist, werden die Richtungsvektoren auch nur an ein paar Stellen in die Textur gebaut werden können, anstatt eine durchgängige Bewegung zu haben.
Dr. Best hat Folgendes geschrieben: | Für Blingbling kommt man mit den immer gleichen Tricks meistens schon recht weit. Meistens ist es da ganz gut einfach irgendwie per Pixel Shader an den Farben rumzuschrauben. Die komischsten Sachen führen manchmal zu guten Effekten (das ist es was ich mit viel rumexperimentieren meinte). |
Jo, hab auch schon viel durch rumprobieren erreicht. Das Problem is halt, dass das recht unzielgerichtet ist und man oft zig Effekte entwirft, die man so gar nicht braucht. Klar kann man die später weiterverwenden. Muss man sich wohl erst durch Zufall ne riesige Datenbank zusammenstellen, bis man mal viel draus verwenden kann.
Dr. Best hat Folgendes geschrieben: | Man könnte zum Beispiel mal probieren was dabei rauskommt wenn man eine 3x3 Matrix nimmt um Farben zu rotieren. |
Den Vektor, den man durch die Pixelfarbe bilden kann, oder wie?
Dr. Best hat Folgendes geschrieben: | Eine Technik, die auch immer wieder gut ist, ist Texture Perturbation. |
Sieht gut aus, schau ich mir an =) _________________ 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: 10.08.2008, 13:51 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Hmm, hat man da nicht dasselbe Ruckel-Problem? Wenn die Framerate unregelmäßig ist, werden die Richtungsvektoren auch nur an ein paar Stellen in die Textur gebaut werden können, anstatt eine durchgängige Bewegung zu haben. |
Nein hat man nicht, ich glaube da hast du irgendetwas Missverstanden. Der Effekt ist wie ein Motion Blur Filter in Photoshop oder Gimp, beeinflusst einfach das fertig gerenderte Bild (wie jeder PSS). Die Textur mit den Richtungsvektoren bestimmt wo, wie stark, in welche Richtung geblurt wird und da du die zur Laufzeit ständig neu renderst sind da immer genau die richtigen Werte drin.
The Lord of Programming hat Folgendes geschrieben: | Den Vektor, den man durch die Pixelfarbe bilden kann, oder wie? |
Ob Vektor oder Farbe macht für den Shader keinen großen Unterschied. Sind alles temporary register (r#), also vier floats (bei älteren Grafikkarten manchmal auch weniger präzise Datentypen) auf einem Haufen. Kannst also eine Farbe genauso mit einer Matrix multiplizieren wie einen Vektor. Solltest bloß danach nochmal saturate (in HLSL bzw. _sat instruction modifier in ASM) drauf anwenden.
The Lord of Programming hat Folgendes geschrieben: | Sieht gut aus, schau ich mir an =) |
Vor allem für Feuer gefällt mir die Technik sehr. Sieht dann aus wie auf diesem Screenshot. _________________
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: 10.08.2008, 14:05 Titel: |
|
|
Dr. Best hat Folgendes geschrieben: | Nein hat man nicht, ich glaube da hast du irgendetwas Missverstanden. Der Effekt ist wie ein Motion Blur Filter in Photoshop oder Gimp, beeinflusst einfach das fertig gerenderte Bild (wie jeder PSS). Die Textur mit den Richtungsvektoren bestimmt wo, wie stark, in welche Richtung geblurt wird und da du die zur Laufzeit ständig neu renderst sind da immer genau die richtigen Werte drin. |
Nuja, die Textur mit den Richtungsvektoren muss aber auch während der Laufzeit generiert werden. Wieso soll das ungestreifter gehen als das direkte aufzeichnen und halt verblassen lassen des Rendertargets?
Dr. Best hat Folgendes geschrieben: | Vor allem für Feuer gefällt mir die Technik sehr. Sieht dann aus wie auf diesem Screenshot. |
Okay, ganz nett. _________________ 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: 10.08.2008, 14:41 Titel: |
|
|
The Lord of Programming hat Folgendes geschrieben: | Nuja, die Textur mit den Richtungsvektoren muss aber auch während der Laufzeit generiert werden. Wieso soll das ungestreifter gehen als das direkte aufzeichnen und halt verblassen lassen des Rendertargets? |
Es sind komplett verschiedene Ansätze, die sind garnicht vergleichbar. Die Methode mit dem verblassen lassen bringt dir eine Art Linearkombination verschiedener Frames. Die Technik, die ich erklärt habe, nimmt ein Bild (von einem einzigen Frame) und verwischt es. Die Richtungsvektoren Textur entsteht auch jeden Frame komplett neu, da ist auch nix mit verblassen lassen oder dergleichen. Um die zu erstellen braucht's einfach einen Vertex Shader und ein bisschen Mathe um zu berechnen wie sich ein Vertex im Screen Space von irgendwann bis jetzt bewegt hat. _________________
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: 10.08.2008, 15:55 Titel: |
|
|
Dr. Best hat Folgendes geschrieben: | Die Richtungsvektoren Textur entsteht auch jeden Frame komplett neu, da ist auch nix mit verblassen lassen oder dergleichen. Um die zu erstellen braucht's einfach einen Vertex Shader und ein bisschen Mathe um zu berechnen wie sich ein Vertex im Screen Space von irgendwann bis jetzt bewegt hat. |
Eben nicht. Die Bewegung kann total chaotisch und zufällig sein.
Nimm als Beispiel den Mauszeiger, der einen langen Schweif hinter sich ziehen soll. Wie willst du daraus die Richtungsvektoren-Textur erstellen, wenn deine Framerate auch nur stichprobenartige Positionsänderungen zulässt?
Wenn die Maus ein Frame später 50 Pixel weiter rechts ist, woher weißt du, was zwischendurch passiert ist? _________________ 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: 10.08.2008, 16:02 Titel: |
|
|
Ach das ist dein Problem. Joah, bei dem Effekt macht man halt die Annahme, dass der Schweif immer linear verläuft (nicht nur von Step zu Step sondern sogar darüber hinaus). _________________
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: 10.08.2008, 16:17 Titel: |
|
|
Jo. Wenn sie linear wäre, könnte man auch bei der Rendertarget+Verblassungsmethode ohne Probleme interpolieren.
Also gibts für sowas bisher keine wirkliche Lösung? _________________ 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: 10.08.2008, 16:58 Titel: |
|
|
Wenn du einen langanhaltenden MotionBlur haben möchtest, gäbe es folgende Varianten (ich gehe hier davon aus das dein Mauszeiger geblurt werden soll):
- Einfach -
1. Den letzten Frame abgeschwächt über den aktuellen Frame blenden.
2. MotionTrails verwenden, dies ist zwar gefakt aber sieht bei uniformen Objekten noch ganz gut aus (Schwertstreich, fliegender Ball, etc.).
3. Das Objekt entlang der Bewegungsbahn welche es beschritten hat alle par Millisekunden Abstand schwächer werdend rendern.
4. Für das Objekt intern einen MotionTrail halten, diesen in eine seperate Textur rendern (gerendert wird die Abschwächung in den Alphakanal und die Richtung in RGB). Mit dieser Hilfstextur kannst du nun einen sehr akkuraten MotionBlur Effekt erhalten. Die Probleme welche hier bestehen sind allerdings folgende:
- unter Umständen sind viele Blurschritte notwendig
- Drehungen des Objektes können nur schwer getrackt werden (evtl mehrere Texturen verwenden oder mehr Infos mitliefern)
- Für jedes Objekt welches den Motionblur erhalten soll wird eine Textur benötigt
- Transparente Objekte machen ebenfalls Probleme (evtl das Objekt auch seperat in eine Textur rendern)
- Komplex -
Aber wozu diese Genauigkeit, gutes Motionblur ist doch für eine 1cm Abweichung ganz gut zu gebrauchen, schau dir zB mal die Projekt Offset Videos an. |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 10.08.2008, 21:13 Titel: |
|
|
Jetzt wo du MotionTrail erwähnst, war das sowieso mein Ziel, nicht unbedingt reines MotionBlur.
Aber das Problem sind ja gerade die Sprünge, die es bei höheren/unsteten Frameraten gibt. Ist wohl die Entscheidung, ob man interpoliert oder nicht, oder? Die Informationen, die zwischen den Frames fehlt, krieg ich ja nicht.
Die Genauigkeit ist wünschenswert, weil das geblurrte Objekt - ähnlich einer Snake - entlang geknickten Pfaden laufen soll. _________________ 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: 11.08.2008, 06:47 Titel: |
|
|
Du kannst zum interpolieren Splines oder ähnliche Sachen verwenden, die habe ich mal verwendet als ich das selbe Problem hatte mit den Knicken, zwar nicht perfekt, aber schon beinahe. |
|
Nach oben |
|
|
PeaceKiller JLI Master
Alter: 35 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 17.08.2008, 13:20 Titel: |
|
|
Crytek hat eine Präsentation über ihre Effekte, da ist auch ein Teil über ihre Motion-Blur Technik drin. _________________ »If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine |
|
Nach oben |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 23.08.2008, 13:47 Titel: |
|
|
Ich hab nun noch mal ein bisschen darüber nachgedacht. Ich nehme jetzt eine wohl splineartige Herangehensweise. Ist ja nicht schwer, bis zum Schnittpunkt zu interpolieren.
Nun hab ich nur noch eine Frage: Komme ich um das mehrmals pro Frame zeichnen herum, indem ich das Objekt entlang der berechneten (geknickten) Linie verwische? Wichtig ist eben, dass das Objekt im Ergebnis nicht in der Mitte am sichtbarsten ist, sondern am Ende der Linie. Es soll also ein linearer(oder evtl. auch exponentieller) Verlauf des Alphawerts vom Anfang bis zum Ende der Linie sein.
Die Crytek-Präsi ist echt interessant =)
Konnte da aber im Bezug auf mein Problem nichts finden. _________________ 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
|