Feste Funktion vs shader-basierte
Ich bin ein Anfänger, um computer-Grafik, und ich versuche, besser zu verstehen. Mein professor hat das Thema fixed-function pipeline shader-basierte Programmierung. Wie gehen diese beiden miteinander vergleichen? Was ist der Unterschied?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die fixed-function-pipeline ist, wie der name schon sagt — die Funktionalität ist behoben. So schrieb jemand eine Liste der verschiedenen Möglichkeiten, die Sie hatte erlaubt, zu transformieren und zu rasterise geometrie, und das ist alles erhältlich. Im weitesten Sinne, die Sie tun können, linearen Transformationen und dann rasterise durch Texturierung, interpolieren Sie eine Farbe über ein Gesicht, oder durch Kombinationen und Permutationen dieser Dinge. Aber mehr als das, die fixed pipeline verankert sind bestimmte Mängel.
Zum Beispiel, es war offensichtlich an der Zeit, von design, dass es nicht genug power, um zu berechnen, Beleuchtung pro pixel. Also die Beleuchtung ist an vertices berechnet und Linear interpoliert über das Gesicht.
Gab es einige intermediate-Erweiterungen, um bestimmte Effekte — dot3 plus cubemaps für pro-pixel-Beleuchtung aus einer Hand, zum Beispiel — aber die programmierbare pipeline können Sie tun, was Sie wollen in jeder Phase gibt Ihnen die vollständige Flexibilität.
In der ersten Ort, der erlaubt, eine bessere Beleuchtung, dann besser die Allgemeinen spezielle Effekte (Wellen auf dem reflektierenden Wasser, unvollkommen, Glas, etc.), und vor kurzem wurde verwendet für Dinge wie deferred rendering klappen, dass die pipeline am Ende.
Alle Unterstützung für die Feste Funktionalität pipeline implementiert ist, die durch die Programmierung der programmierbaren pipeline auf der hardware der letzten zehn Jahre oder so. Die programmierbare pipeline ist ein Fortschritt auf seinem Vorgänger, die sich durch die hardware-Verbesserungen.
Graphics Processing Units startete sehr einfach mit festen Funktionen, erlaubt, dass die für schnelle 3D-Mathematik (viel schneller als die CPU-Mathe), und textur-lookup, und einige einfache Beleuchtung und Schattierung Optionen (flat, phong, etc.).
Diese waren sehr einfach, aber erlaubt die CPU zu entlasten, die sehr repetitive Aufgaben von 3D-rendering auf der GPU. Sobald die Grafiken genommen wurde, die von der CPU und der GPU, Spiele, machte einen gewaltigen Sprung nach vorne.
Es dauerte nicht lange, bis sich die festen Funktionen benötigt, um geändert werden, um Assembler-Programme, und bald war die Nachfrage nach mehr tun, als so eine einfache Schattierung, grundlegende Reflexionen und einzelne textur-maps angeboten, die durch die fixed-function-GPUs.
Also die 2. Rasse der GPU erstellt wurde, dieser hatte zwei verschiedene pipelines, eine, die bearbeiteten vertex-Programme und bewegt verts um im 3D-Raum, und die shader-Programme, die arbeitete mit Pixeln, so dass mehrere Texturen, die zusammengeführt werden, und mehr Licht und Schatten geschaffen werden.
Nun in der neuesten form der GPU alle Rohre in der Karte sind generisch und kann auf jede Art von GPU-assembler-code. Dies erhöht die Anzahl der Verwendungen für die Rohr - Sie immer noch vertex-mapping und pixel-Farbe Berechnung, aber Sie tun auch geometrie-Shader (tessellation), und auch Compute Shader (wo die parallel-Prozessor wird verwendet, um zu tun, eine nicht-Grafik-job).
So Feste Funktion ist beschränkt, aber einfach, und jetzt in die Vergangenheit für alle, aber die meisten Geräte beschränkt. Programmierbare Funktion Shader mit OpenGL (GLSL) oder DirectX (HLSL) sind der de-facto standard für moderne GPUs.
Wesentlichen die fixed-Funktion-pipeline ist eine festverdrahtete Implementierung von einem,, festen Programm, durch die jedes Stück von Daten von einer GPU-Prozesse durchläuft, ohne die Möglichkeit, ändern Sie die details zu jedem Schritt. Die einzige Sache, die Sie parametrisieren können, sind die gelegentlichen Zweig wechseln zwischen hardcoded Pfade im Programm (wie das aktivieren oder deaktivieren der Beleuchtung, oder mit einem separaten specular) oder einige verwendete Konstanten (Licht, Farben und Positionen, textur, Umwelt-base-color modulation). Und jeder Schritt folgt einer bestimmten Formel.
In eine programmierbare pipeline, aber die GPU ist sauber. Es ist völlig bis zu dem Programmierer, wie die verschiedenen Stufen der rendering-Prozess (vertex transformation, tesselation, fragment processing) durchgeführt werden. Und Sie können Sie verwenden, egal, welche Formel Sie sehen, passen für die Aufgabe.
Fixed-Funktion-pipeline GPUs haben genau eine Beleuchtung Modus: A Lambertian-Beleuchtung Modell, umgesetzt in Gourad-oder Phong-Schattierung. Es gab ein paar tricks etwas verändern der Beleuchtung Modell, zum Beispiel zu isotrop sein, aber Sie musste irgendwie überlisten (oder outdumb, Schleifsteine) die GPU für diese. Eine programmierbare pipeline, die Sie einfach tun, was Sie wollten zu tun in den ersten Platz.