Ich habe nach Möglichkeiten gesucht, um mehrere Lichtschattierungen zu implementieren, und ich habe festgestellt, dass Unity mehrere Durchgänge verwendet, um dies zu erreichen . Es führt einen Basisdurchlauf durch, um das hellste gerichtete Pixellicht + 4 Scheitelpunktlichter + SHs und einen zusätzlichen Durchgang für jedes Pixellicht bis zu einer vom Benutzer im Editor festgelegten Grenze anzuwenden.
Ich frage mich, da ich vorher weiß, wie viele Pixel Lichter ich schattieren muss, warum nicht in einem einzigen Durchgang, wie es Scheitelpunktlichter tun? Was sind die Probleme dabei?
Wenn Sie alle Lichter in einem einzigen Durchgang machen würden, müssten Sie alle Lichter im Shader durchlaufen. Sie müssten auch alle Informationen gleichzeitig an die GPU senden.
GPUs sind in der Anzahl der Uniformen begrenzt, die Sie an einen Aufruf übergeben können. Diese Einschränkung hat sich bei UBOs und SSBOs verringert.
Sie sind jedoch immer noch auf die Anzahl der Texturen beschränkt, die Sie für die Schattenzuordnung binden können.
Lichter wirken sich oft nur auf einen kleinen Teil des Bildschirms aus, sodass die Engine möglicherweise nur Geometrie rendert, die sich in der Nähe des Lichts befindet, oder das Ansichtsfenster so anpasst, dass nur der Bereich gerendert wird, auf den sich das Licht auswirken würde.
quelle