PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie funktioniert NPR?


huha
2003-11-29, 14:36:54
Hallo!

Mich interessiert folgendes: Wie funktioniert NPR (Non-photorealistic rendering) auf GRafikkarten in Echtzeit?
Soweit ich mir das vorstellen kann, dürfte es doch so sein, daß man zuerst ein Bild rendern muß, dann irgendwelche Konturen finden und dann ein weiteres Bild rendern, das mithilfe dieser Werte so abgeändert wird, daß es "gezeichnet" (o.Ä.) aussieht.
Hat da jemand Informationen dazu bzw. kann es mir erklären?

Danke!

-huha

Demirug
2003-11-29, 15:28:16
Ich vermute mal du meinst den NPR Effekt den zum Beispiel XXXI benutzt.

Deine Vermutung ist weitgehend richtig. Man rendert das Bild erst einmal "normal" und ergänzt in einem zweiten Schritt die Kanten. Die Wahl der Farben macht hier natürlich schon den halben Effekt aus.

Die Kanten zu finden ist nun eine Wissenschaft für sich. Es gibt dabei:

Tiefenkanten: Diese entstehen wenn zwei gegenständen einen zu grossen Abstand in der Z-Achse haben.
Geometrische Kanten: Diese entstehen wenn zwei Flächen mit einem zu grossen Winkel aufeinader stossen.
Schattenkanten (tiefe und Geometrie): dürfte selbsterklärend sein.
Zonenkanten: Diese Kanten entstehen immer dort wo zwei unterschiedliche Texturen aufeinader treffne.

Für jede Kanteart muss man nun ein anderes zusätzliches Bild rendern. Für Tiefenkanten braucht man die Z-Werte. Für Geometrische Kanten braucht man die Pixelnormalen. Für Zonenkanten wird das Bild so gerendert das für jede Texturezone ein anderer Festwert benutzt wird. Hat man diese Bilder lässt man die Kanten von einem speziellen Pixelshader suchen und in eine neue Texture speichern. Ein weiterer Pixelshader verbreitert diese Kanten dann. Zu guter letzt legt man diese Textur welche die Kanten enthält über das Bild.

PS: Das ganze verträgt sich tendenziel leider nicht sehr gut mit AA.

Xmas
2003-11-29, 15:34:33
Non-Photorealistic Rendering ist ein weites Feld, und umfasst nicht nur Cel Shading und Hatching (Schraffur), sondern auch noch eine ganze Reihe anderer Techniken.
Vielfach benutzt man keine 2D-Posteffekte wie Konturen Finden und ähnliches was man von Photoshop kennt, sondern geht direkt von den 3D-Daten aus.

Cel Shading (Objekte im Comic-Look gefärbt) ist dabei noch relativ einfach, man berechnet hier pixelweise den Winkel des Sichtvektors zur Oberflächennormale (bzw. zum Lichteinfallsvektor) und nutzt diesen Winkel als Index in eine Tabelle (1D-Textur), die nur eine Handvoll Farbtöne umfasst. Die Farbtöne erstrecken sich jeweils über einen weiten Bereich der Tabelle, so dass das dargestellte Objekt großflächig einfarbig ist, und man ab einem bestimmten Winkel einen sprunghaften Wechsel des Farbtons hat.

Die Außenkanten findet man genauso, wie man es bei Shadow Volumes tut. Man sucht Kanten, an denen das eine Dreieck zum Betrachter hin und das andere vom Betrachter weg zeigt. Nachdem man das Bild mit Cel Shading gerendert hat kann man die auf diese Weise gefundenen Außenkanten schwarz nachzeichnen.