Diskussion:Tiefenunschärfe

Aus DGL Wiki
Wechseln zu: Navigation, Suche

Hi, das ganze ist insgesamt ein schöner Artikel und Tiefenunschärfe ist auch ein schöner Effekt. Der Effekt und die Implementierung wird verständlich erklärt, sogar mit ein paar Bildchen. Super! Unter anderem weiß ich nun endlich wozu der Accum-Buffer gut ist. Juhu! :) Da es sich aber um einen allgemeinen Artikel und nicht um ein Tutorial handelt (oder?), solltest du vielleicht einen Satz der Art "eine Möglichkeit zur Implementierung ist..." einbauen. Es gibt eigentlich immer andere Techniken, zum Beispiel fällt mir spontan die folgende ein, wobei ich diese allerdings nicht probiert habe. Das Ergebnis müsste aber ähnlich sein und könnte bei einer komplexen Szene sogar etwas schneller in der Berechnung sein.

  • Szene mit Hilfe eines FBO in die Texturen "Color" und den Tiefenbuffer "Depth" rendern.
  • Textur "Color" bluren, z.B. mit diesem Blur-Shader => Textur "Color-Blur"
  • Die Texturen "Color", "Depth" und "Color-Blur" binden und ein Bildschirmfüllendes Quad rendern. Im Shader kannst du die Position eines Pixels mit Hilfe von gl_FragCoord und dem Tiefenwert aus der Textur "Depth" rekonstruieren. Diese Position wird durch Anwendung der inversen Projektionsmatrix und anschließendem durch w Teilen zurück in den View-Space transformiert. Die Entfernung dieser Position vom Fokus-Punkt (ebenfalls im View-Space) ist dann der Blur-Radius. Entsprechend dem Blur-Radius interpolierst zwischen den Texturen "Color" und "Color-Blur".

Mit dieser Technik wäre auch ein Focus-Bereich (nicht nur Punkt) möglich. Das Problem bei diesem Effekt ist ja, dass man nicht genau weiß wo das Auge des Betrachters hinblickt. Der Betrachter blickt nämlich nicht immer in die Bildschirmmitte. Auch widerspricht dies natürlich deiner Aussage, dass es zu Umständlich wäre den Radius für jeden Punkt zu berechnen. ;)
--Coolcat 13:51, 25. Dez. 2009 (CET)