In Spielen beeinflussen Materialien oft nur das visuelle Erscheinungsbild von Objekten. Das optische Erscheinungsbild wird durch Shader beeinflusst. Gibt es also einen terminologischen Unterschied zwischen Materialien und Shadern? Sollten Sie einen Shader für ein Material schreiben?
shaders
terminology
materials
danijar
quelle
quelle
Antworten:
Ein Material ist eine Kombination von Attributen, die beschreiben, wie eine Oberfläche des angegebenen Materials aussehen soll.
Einige Engines verwenden unterschiedliche Shader für unterschiedliche Materialien. In diesem Fall könnte eine Materialdefinition folgendermaßen aussehen:
Andere Engines verwenden einen Shader für alle Objekte (oder vielmehr die Engines entscheiden, welcher Shader verwendet werden soll, abhängig von den Parametern, den Fähigkeiten der GPU und anderen Faktoren wie der Entfernung). In diesem Fall würde ein Material ungefähr so aussehen:
quelle
Ein Material gibt an, wie ein Objekt auf Licht reagiert.
Es gibt einige allgemeine Parameter:
Angenommen, Sie haben ein mit Material gerendertes Dreieck
M
.M
hat Kd = (1,0,0) (rote diffuse Antwort), Ks = (1,1,1) (weiße spiegelnde Antwort), Ns = 25 (spiegelnde Hervorhebung ist ziemlich scharf und nicht unscharf) und keine map_Kd ( keine Textur).Die Aufgabe des Shaders besteht darin, mithilfe von Mathematik die Scheitelpunktpositionen des Dreiecks , die Position des Lichts, die Materialfarbwerte und die Farbe des Dreiecks zu ermitteln. Ein Vertex-Shader führt diese "Shading-Berechnung" einmal an jedem Vertex durch und interpoliert die Farbe über das Dreieck.
Eine häufige Operation in einem Shader zum Berechnen der diffusen Antwort an einem Scheitelpunkt ist:
quelle
Ein Material wird auf die Geometrie angewendet, um ihr Farbe und Muster zu verleihen. Eine Textur ist eine Komponente eines Materials.
Ein Shader ist ein kleines Programm, mit dem dieses Material zur Laufzeit gerendert werden kann. Das Schöne an Shadern ist, dass Sie alles tun können, vom einfachen Rendern des Materials über das Hinzufügen dynamischer Effekte wie Glanzlichter und Reflexionen bis hin zu äußerst cleveren Dingen wie dem Rendern von falschen Löchern in Wänden, in die eine Kugel getroffen wurde.
Als Antwort auf Ihre Frage - ja, es gibt einen Unterschied, es gibt auch eine kleine Überlappung - können Sie entweder ein rotes Material erstellen oder einen Shader schreiben, um die Dinge als rot darzustellen, aber beide ermöglichen Ihnen auch viele Dinge, die Sie tun konnte nicht mit dem anderen.
und nein, Sie brauchen nicht einen Shader pro Material. Obwohl für ein Material ein Shader zum Rendern erforderlich ist, können Sie einen für alle Materialien verwenden, wenn Sie dies möchten. Sie tun bestimmte Dinge. Wenn Sie zum Beispiel möchten, dass alles glänzend ist, können Sie einfach eine schreiben.
Ein schönes Beispiel für Shader sind Kriegsgeräte. Es gibt eine Reihe von Materialien für die Szene. Wenn Sie jedoch eine Taste drücken, um zur taktischen Ansicht zu wechseln, ändern sich die Shader, die diese Materialien rendern, so dass die Dinge umrissen und im Allgemeinen anders aussehen. Dasselbe passiert in Batman: Arkhams 'Detektivmodus'.
quelle
Obwohl es zu spät ist, gibt es einen "Betrüger", der Ihnen helfen kann, besser zu verstehen.
Ein Material ist alles, was einem bestimmten Shader für diesen Zeichenaufruf zugeordnet ist.
In der obigen Antwort haben Sie beispielsweise folgendes Material: [Material] Shader = NormalMappedSpecular.glsl Texture1 = Rock.png Texture2 = RockNormal.png Texture3 = RockSpecular.png
Das bedeutet, dass Sie mit einem Shader rendern, der eine normale Karte und eine Spiegelberechnung durchführt, und die drei Texturen in diesem Shader verwendet.
Später können Sie denselben Shader mit verschiedenen anderen 3 Texturen (wie car, carNormal und carSpecular) wiederverwenden. Sie führen einen anderen Zeichenaufruf mit einem anderen Material aus, nur weil Sie die Shader-Parameter geändert haben.
Alles in allem ist ein Material alles, was einen Zeichenaufruf mit demselben Shader und denselben Parametern (Texturen, Uniformen, Attribute) auf einmal erstellt.
Ich hoffe, das hilft, es besser zu visualisieren
quelle