Wie funktionieren geformte Lichter?

7

Ich kann Richtungslichter, Punktlichter und Scheinwerfer programmieren. Manchmal haben Menschen jedoch Lichter, die geformt sind - wie Balken oder sogar ein Torus.

Wie funktioniert das entweder aus strahlenbasierter oder aus Rasterungsperspektive?

Alan Wolfe
quelle

Antworten:

2

In meiner Torus Light-Implementierung (Unity3D) verwende ich dieselbe Echtzeitmethode, die in der Antwort von @ JohnCalsbeek beschrieben ist . Behandeln Sie es genauso wie Ihr normales Punkt- / Punktlicht und berechnen Sie eine einzelne Richtung und Entfernung.

Ich verwende die Torusabstandsgleichung von Inigo Quilez 'Website und hier ist die Funktion, die ich gemacht habe, um die Richtung zu einem Torus zu erhalten

float3 torusDirection(float3 p) {
float3 torusRel;
torusRel.xz = normalize(p.xz-_TorusLocation.xz);
torusRel.y = 0;

return -normalize(p-(TorusLocation+torusRel*TorusCenterRadius));
}

Insgesamt denke ich, dass es gut funktioniert, abzüglich einiger Bereiche, in denen der Torus herumläuft Beispielszene, die von einem Torus beleuchtet wird.

Der spiegelnde Hinweis ist ebenfalls deaktiviert, aber @ JohnCalsbeeks Punkt, die Rauheit zu ändern, scheint das zu beheben :).

Die derzeit größte Herausforderung für mich mit dem Licht besteht darin, einen Forward-Shader zu entwickeln, der verschiedene Arten von Flächenlichtern und mehrere Lichter unterstützt. Ich weiß nicht, wie ich das machen soll, abgesehen davon, dass ich nur eine ganze Reihe von Shader-Eigenschaften für all die verschiedenen Lichter habe. Derzeit wende ich das Licht als verzögerten Durchgang an, sodass es nur mit undurchsichtigen Objekten funktioniert, aber bald muss ich eine Vorwärtsversion für transparente Objekte erstellen. Das ist die eigentliche Herausforderung, denke ich, mehrere Flächenlichter in einem Forward-Shader zu haben.

Und hier ist eine Shadertoy-Demo eines Toruslichts, das ich zum Testen meines gemacht habe. Es basiert auf der BeyondTheStatics-Formlicht- Demo.

Ethan Shulman
quelle
Ich habe bearbeitet, um Syntaxhervorhebungen hinzuzufügen. Sie können die Sprache jederzeit ändern, wenn es eine geeignetere gibt.
Trichoplax
10

Wenn Sie in einem Pfad-Tracer einen Strahl zu einem Licht mit einer anderen Form als einem Punkt verfolgen ("Flächenlicht" ist die übliche Terminologie), wählen Sie im Allgemeinen einen zufälligen Punkt auf der Oberfläche des Lichts aus. Wenn genügend Proben entnommen werden, führt dies sowohl zu weicheren Glanzlichtern als auch zu weicheren Schatten-Penumbras: Licht wird von einer Oberfläche aus einer zufälligen Verteilung der einfallenden Richtungen reflektiert, und Strahlen, die auf ein Flächenlicht mit einer Behinderung im Weg gerichtet sind, können oder können nicht Schneiden Sie das Hindernis in Abhängigkeit davon, welcher Punkt auf dem Licht abgetastet wurde.

In Echtzeit werden Annäherungen an Flächenlichter verwendet. In diesem Whitepaper zu Unreal Engine 4 werden einige der Überlegungen beschrieben. Eine Möglichkeit ist die "repräsentative Punkt" -Methode, bei der pro Pixel ein Punkt im Volumen des Lichts (am hellsten oder am nächsten) ausgewählt und verwendet wird, als wäre es ein Punktlicht. Eine andere Option ist das Ändern der Rauheit, die in die Spiegelberechnung eingespeist wird, basierend auf einem Kegel, der sich dem Flächenlicht annähert (in der Veröffentlichung als "Spiegel-D-Modifikation").

John Calsbeek
quelle