GLBasic forum

Other languages => GLBasic - de => Topic started by: Sebastian on 2008-Jul-04

Title: Echtzeit Desaturation und Colorinvert?
Post by: Sebastian on 2008-Jul-04
Wie ihr vielleicht wisst, versuche ich mich derzeit mit mehr oder weniger großem Erfolg an Post Process Effekten die komplett in GLBasic geschrieben sind. Für Motion Blur hab ich auch schon eine Idee, aber was mich derzeit beschäftigt ist Fake HDR. Die Methode dafür ist eigentlich einfach:

1. Rendere die 3D Szene
2. Kopier die gerenderte Szene in ein Sprite
3. Wende Desaturation darauf an (d.h. dem Sprite wird die Farbe entzogen, Greyscale sozusagen)
4. Invertiere das neue "Grau"-Sprite
5. Blende es mit Alphamode über die gerenderte Szene

Das sind 5 Schritte, aber immer wenn ich versuche, das kopierte Sprite mit Setpixel und Getpixel zu manipulieren bekomme ich erstens nur noch 0-2 Frames und 2tens scheint der Greyscale Code den ich im Netz gefunden habe nicht zu funktionieren (der Bildschirm wird bis auf die FPS Anzeige schwarz). Ich verwende derzeit eine Auflösung von 640x480 und bin mir durchaus bewusst, dass 307200 Iterationen pro Frame kein Pappenstiel sind, aber schon mit einem Virtuellen Bildschirm der Auflösung 64x48 (=3072) ruckelt es auf 0-2 Frames vor sich hin. Deshalb meine Bitte:

Wer mir Tips geben kann zum SpeedUp und funktionierende Codes für das Desaturieren und Invertieren der ist herzlich eingeladen mir zu helfen  :nw:
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Quentin on 2008-Jul-04
auch wenn das für mich eher böhmische Dörfer sind, von denen du da sprichst ... ;)

GETPIXEL ist wohl eher ungeeignet, weil die gelesenen Farbwerte von den tatsächlichen abweichen können (siehe auch Hilfethema zu GETPIXEL) und zweitens weil der Befehl für diese Datenmenge einfach zu langsam sein wird.

Ein Äquivalent zu GETPIXELFAST wie in anderen Dialekten müsstest du dir wohl eher selbst basteln, evtl. mit INLINE-C++.

... oder du probierst mit "trickreichen" mehrfachen ALPHPAMODES und DRAWSPRITE hintereinander herum, wobei mir nicht ganz klar ist, welchen Effekt du eigentlich erreichen willst. Hast mal eine Grafik als Beispiel? Hört sich auf jeden Fall ziemlich interessant an.
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Sebastian on 2008-Jul-04
Links: normales Bild - Rechts: Fake HDR
(http://www.mediachance.com/hdri/fake3.jpg)
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Schranz0r on 2008-Jul-04
Sebastian du Hund....

Absolut geile Idee!


Leider ist der Readpixel-Befehl von GLB sauuuuuuuuuuuuuu laaaaaaaannnnnnnnggggggggsssssaaaaaaaammmm...
Sonnst hätte man da evtl was machen können.

Hmm was bleibt über?
Ich überlege mir was.
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: trucidare on 2008-Jul-04
Fake HDR wird aus den scharfen und hellen stellen eines bildes aus merheren bildern erstellt.
total sinnlos. tools gibts genug.
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Tenorm on 2008-Jul-04
So was geht einfach nur langsam, sogar wenn du einen Screenshot machen würdest. Alleine das einladen von diesem würde viel zu lange brauchen. Aber vielleicht schaffst dus ja, das du über Inline schon vorm zeichnen der Szene den Kontrast und die Helligkeit zu verändern. Das ganze bewirkt doch so nur eine Vergrößerung der Abstände zwischen Hellen und Dunklen Pixeln, lässt alles plastisch wirken. Ich weiß nicht wo sowas Anwendung findet, aber bleib mal dran.  :good:

Gruß

Tenorm
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Sebastian on 2008-Jul-04
Ich überleg schon, ob man mit diversen Alphablendings und schwarzen bzw. weissen Sprites sowas erreichen könnte. Bei Blitz3D gibt es WritePixelFast und ReadPixelFast, mit denen man z.B. in Echtzeit monochrom rendern kann. Und von monochrom rendern zu Fake HDR ist es eigentlich nur ein kleiner Schritt.
In Spielen versteht man unter Fake HDR meistens den Glow bzw. Bloom Effekt, den man in meiner Demo schon anschauen kann. Evtl. kann ich da noch was anpassen...  :S
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Schranz0r on 2008-Jul-04
Quote from: trucidare on 2008-Jul-04
Fake HDR wird aus den scharfen und hellen stellen eines bildes aus merheren bildern erstellt.
total sinnlos....

Ja, wenn man mit Spieleprogrammierung nix zu tun hat !
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Kitty Hello on 2008-Jul-06
Das würde ich über einen Shader laufen lassen, der das gerenderte Bild einfach intern so umwandelt. Das sollte krass schnell sein.

GETPIXEL ist ein no-no.
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Sebastian on 2008-Jul-06
Hast du vielleicht Einsteigertutorials zu dem Thema?
Ich hab in meinem Leben noch keinen Shader programmiert, in HLSL hab ich zwar schonmal an ein Paar Pixelshadern rumgeschraubt aber GLSL ist für micht gähnende Leere...
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Schranz0r on 2008-Jul-06
Auch hier schaft NeHe abhilfe ;)

http://nehe.gamedev.net/data/articles/article.asp?article=21
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Sebastian on 2008-Jul-06
Vielen Dank Schranz0r. Ich zieh mir die nächsten Tage/Wochen mal rein, was das Tut zum Thema Fragment Shader zu sagen hat. Denn eigentlich interessieren mich nur die  :whistle:
Title: Re: Echtzeit Desaturation und Colorinvert?
Post by: Schranz0r on 2008-Jul-07
Ich glaub ich schau mir das auch mal an ;)