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:
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.
Links: normales Bild - Rechts: Fake HDR
(http://www.mediachance.com/hdri/fake3.jpg)
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.
Fake HDR wird aus den scharfen und hellen stellen eines bildes aus merheren bildern erstellt.
total sinnlos. tools gibts genug.
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
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
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 !
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.
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...
Auch hier schaft NeHe abhilfe ;)
http://nehe.gamedev.net/data/articles/article.asp?article=21
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:
Ich glaub ich schau mir das auch mal an ;)