Shader- und Rendering-System (II/II)

Na endlich, es ist soweit: Der zweite Teil über Shader- und Rendering-System ist fertig. Das hat nun aber wirklich lange auf sich warten lassen. Das lag vor allem daran, dass ich noch ein paar Probleme mit dem finalen Comic-Shader hatte. Zum Einen wollte ich zusätzlich zur Beleuchtung noch Schatteneffekte einbauen, aber das sieht bisher nicht wirklich toll aus. Insofern habe ich es jetzt doch erstmal rausgelassen. Zum Anderen werden beim Mischen der verschiedenen Material- und Beleuchtungsfarben auch die Alphawerte entsprechend gemischt. Das führte dazu, dass unter bestimmten Umständen der Alphawert gewisse Pixel transparent erscheinen ließ. Ein solches Resultat könnt ihr im folgenden Screenshot sehen:

Fehler in Shader

Um dem Problem entgegenzuwirken, muss entweder das “Alpha-Blending” komplett abgeschalten werden. Das führt jedoch dazu, dass keine transparenten Gegenstände mehr angezeigt werden können, bzw. solche Gegenstände würden halt einfach nicht transparent sondern komplett opak dargestellt (opak ist das Gegenteil von transparent). Oder aber im Shader wird der Fall abgefangen, dass sich die gemischten Farbinformationen auf die Alphawerte auswirken. Das kann jedoch — je nach Hardware — enorme Leistungseinbußen bedeuten. Dennoch ist die zweite Alternative die “bessere”, erlaubt sie schließlich weiterhin den Einsatz von transparenten Gegenständen.

Ein entsprechendes korrektes Resultat sieht dann ungefähr so aus:

Comic-Style-Shader

Ist doch schon recht hübsch, oder? Damit ihr euch ein noch besseres Bild machen könnt, gibt es noch eine kleine Anwendung zum Runterladen, bei der ihr euch das Cyber-Modell und den Comic-Style-Shader auf eurem eigenen Rechner reinziehen könnt. Falls es Probleme bei der Darstellung geben sollte, sagt mir bitte Bescheid. Aber ihr solltet die Minimalvoraussetzungen bezüglich Hard- und Software beachten:

  • 3D-beschleunigte Grafikkarte mit Shader-Modell 2.0
  • DirectX 9.0c

Aber entsprechende Fehlermeldungen bei Nichtvorhandensein der Voraussetzungen sollten in jenem Fall in der Log-Datei “logger.html” zu finden sein, die beim Starten der Anwendung erzeugt wird.

Tja, so viele Worte habe ich jetzt ja eigentlich gar nicht zu den technischen Aspekten von Shader- und Rendering-System verloren. Aber Screenshots und Downloads sollten für die meisten von euch ohnehin viel interessanter sein, denke ich. Darüber hinaus habe ich im ersten Teil ja bereits den technischen Aufbau erläutert. Hinzugekommen ist jetzt hauptsächlich noch der Szenegraph, der die komplette darzustellende Szene in kleine “Knoten” zerlegt, um diese Knoten nach Geometrie- und Materialeigenschaften sortieren zu können. Dadurch werden die einzelnen 3D-Modelle größtenteils zerpflückt. Das macht aber nix, denn im fertigen Bild ist das nicht zu sehen. Aber durch das Zerpflücken der 3D-Modelle und Sortieren der so erzeugten Knoten nach ihren Geometrie- und Materialeigenschaften werden Zustandswechsel der Grafikhardware minimiert. Diese Zustandswechsel sind nämlich maßgeblich von eben diesen Eigenschaften abhängig. Dieser durchaus gängige Ansatz  der Minimierung von Zustandswechsel der Grafikhardware bringt dann derbste Leistungsvorteile mit sich.

Eine Antwort zu “Shader- und Rendering-System (II/II)”

  1. Pölle sagt:

    Alter! Das sieht ja schon mal sehr geil aus!

Hinterlasse eine Antwort