Echtzeit Desaturation und Colorinvert?

Previous topic - Next topic

Sebastian

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:

Quentin

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.

Sebastian

Links: normales Bild - Rechts: Fake HDR

Schranz0r

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.
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

trucidare

Fake HDR wird aus den scharfen und hellen stellen eines bildes aus merheren bildern erstellt.
total sinnlos. tools gibts genug.
MacBook Pro 2,2 GHz Core 2 Duo, 4 GB RAM, 160 GB HDD, 8600M GT
Core i3 - 3,07 GHz, 8 GB Ram, 2.5 TB HDD, Geforce GTX 260+ OC

Tenorm

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

Sebastian

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

Schranz0r

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 !
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

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.

Sebastian

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...

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Sebastian

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:

Schranz0r

Ich glaub ich schau mir das auch mal an ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard