Warum kompiliert ein PC-Spiel Shader zur Laufzeit?

2 Antworten

Bin mit dem ganzen Grafik Pipline Zeug nicht sonderlich vertraut aber afaik werden Shader durchaus in der Regel precompiled in Zwischensprachen, müssen dann aber noch mal auf Hardware spezifischen Bytecode kompiliert werden entweder bevor man ein Spiel startet.

da ich mich länger nicht mit solchen Themen beschäftigt habe habe ich noch mal etwas im Internet dazu gesucht. Also das man einen Shader für bestimmte Hardware kompilieren muss ist klar, aber angeblich ist das auch eine Optimierungssache. So sollen wohl neuere Treiber bei diesem Übersetzungsprozess wohl teilweise besser optimieren können (und das man eben möglichst viel erst zu Runtime optimiert damit man immer die besten Optiemierungen machen kann ist ja bei JIT Ansätzen meines Wissens generell nichts neues).

Ich meine auch Steam hat Features um schon beim Download / vor dem Spielstart Shader zu übersetzen aber bin da nicht ganz sicher.

Warum ausgerechnet Detroit so lange beim ersten Spielstart braucht, ist mir auch aufgefallen, weiß ich aber auch nicht.

Woher ich das weiß:Recherche

Fleischesser4 
Beitragsersteller
 07.07.2021, 19:16

Detroit hat eine absurd gute Grafik, vielleicht wollten die Entwickler auch noch das aller letzte aus der Grafikkarte herausholen...

0

Weil das schlicht nicht möglich wäre. Der Vorgang ist auf die Grafikkarte zugeschnitten. Auf den Konsolen ist das ne einfache Angelegenheit, da gibt es für jedes Modell eigentlich nur einen Grafikchip. Da kann man das ganze im Vorfeld kompilieren und so in die Datensätze werfen dass das Ganze nach Abschluss des Downloads / Einlegen der Disc sofort arbeitet.

PCs kommen jedoch mit einer Vielzahl verschiedenster Konfigurationen daher. Pauschal mal eben ein paar hundert Datenpakete zu erzeugen wäre zum Einen viel zu viel Datenmüll und zum anderen würde man dankend mit dem nächsten Grafikkarten-Treiberupdate der Arbeit den Stinkefinger zeigen, wenn die Grafikkarte geänderte Anweisungen bekommen hat, wie sie die Daten verarbeitet.

Woher ich das weiß:Hobby – 1991 begann die Leidenschaft mit einem Game Boy und PC.

Fleischesser4 
Beitragsersteller
 07.07.2021, 19:14

Das ist das erste Spiel, das ich kenne, das sowas macht...

0
Limearts  07.07.2021, 19:24
@Fleischesser4

Gibt durchaus einige. Die Call of Duty-Reihe macht das seit 2014 mit Advanced Warfare und wenn ich an die fast 40minütige Odysee von Horizon Zero Dawn nach jedem Spielabsturz denke, wird mir heut noch schlecht.

1
FireEraser  07.07.2021, 19:35
@Fleischesser4

Nur weil du das nicht siehst, heißt das noch lange nicht, dass es nicht im Hintergrund passiert. Das ganze kann man für OpenGL beispielsweise hier nachlesen: https://www.khronos.org/opengl/wiki/Shader_Compilation

Der normale Weg ist den Shader zur Laufzeit zu kompilieren. Es ist zwar möglich den kompilierten Shader zu exportieren/importieren, aber das ist eher eine Zusatzfunktion. Wie auf der Seite auch beschrieben wird, wird es jedoch nicht empfohlen, Shader in dieser Form aus den oben genannten Gründen an andere Geräte zu übertragen.

0