Wie kann ich einen aufschlussreichen Lichtstrahl implementieren?

7

In SEARCHLIGHT steuern Sie einen Lichtstrahl, der ankommende Feinde beleuchtet, die sonst am Nachthimmel unsichtbar sind. Hier ist eine Illustration:

Illustration

Wie würde ich das machen, vorzugsweise in Unity? Ich stelle mir vor, es geht weniger um Beleuchtung als um Shader, aber ich bin mir bei Details nicht sicher. Die Tatsache, dass ich sehr wenig über das Codieren von Shadern weiß, macht es noch schlimmer.

Wenn es ist etwa Shadern, was sind die Besonderheiten? Gibt es ein gestrecktes Quad, das sich mit dem darauf angewendeten Shader bewegt, oder ist die Verwendung des Linienrenderers möglicherweise eine bessere Option?

Darf ich als Anfänger versuchen, einen ähnlichen Effekt zu erzielen, oder sollte ich ihn verlassen, wenn es mir besser geht?

(PS: Das Spiel wurde in Unity erstellt. Hier ist die itch.io-Seite.)

Demetre Saghliani
quelle

Antworten:

9

Eine Möglichkeit, einen solchen Effekt zu implementieren, ist der Schablonenpuffer .

Dies sind ein paar zusätzliche Bits, die der Renderer für jedes Pixel in einem Renderziel behält, die Sie für Notiznotizen über das verwenden können, was Sie dort gezeichnet haben oder später zeichnen dürfen.

Sie können einen neuen Shader mithilfe einer der in Unity integrierten Vorlagen erstellen und oben im Abschnitt SubShaderoder einige Schablonenoperationen hinzufügen Pass:

Stencil {
    Ref 1
    Comp always
    Pass replace
}

Hier steht "Schreibe eine 1 in den Schablonenpuffer, egal was vorher da war" - lege diese auf den Shader / das Material, mit dem du dein Lichtstrahl-Quad renderst, und es markiert alle Pixel auf dem Bildschirm, die es berührt.

Verwenden Sie dann für Objekte, die nur im Lichtstrahl angezeigt werden sollen, Folgendes:

Stencil {
    Ref 1
    Comp equal
}

Dies prüft, ob die magische Zahl 1 zuvor in dieses Pixel geschrieben wurde (dh wird dieses Pixel vom Lichtstrahl beleuchtet?). Wenn nicht, bricht der Shader das Rendern dieses Pixels des Objekts ab und schneidet es sauber auf den beleuchteten Bereich Ihres Bildschirms.

Stellen Sie sicher, dass Ihre Objekte, die die Schabloneninformationen lesen , später in den Warteschlangen gerendert werden als die Objekte, die sie schreiben, damit die Informationen für sie bereit sind, wenn sie danach suchen.

DMGregory
quelle