Ich habe die Scratchapixel- Raytracing-Tutorials online verfolgt, in denen die Theorie hinter allem und deren Implementierung hervorragend erklärt wurde. Ich habe jedoch den Punkt erreicht, an dem ich Area Lights implementieren möchte, aber ich weiß nicht, wie ich das machen soll. Das Tutorial auf der Website wurde noch nicht hochgeladen (obwohl es einen Platzhalter-Link mit einigen anderen gibt).
In Bezug auf die Implementierung ist nicht viel online, daher hat mich dies hierher geführt. Könnte jemand bitte erklären, wie ich Flächenlichter mit Ray Tracing im Gegensatz zu Punktlichtern implementieren kann ?
rendering
raytracing
physically-based
area
Arjan Singh
quelle
quelle
Antworten:
Ich werde die einfache / naive / Brute-Force-Antwort auf diese Frage geben, die funktioniert und genaue Ergebnisse liefert.
Es gibt jedoch bessere Antworten, die die Konvergenz des Renderings mit weniger Samples beschleunigen, aber fortgeschrittenere Mathematik verwenden. Ich hoffe, dass jemand anderes eine Antwort in diese Richtung gibt.
Die einfache Antwort lautet: Flächenlichter sind nur Geometrien, die einen Emissionswert haben.
Zum Glück ist es ziemlich einfach, der Pfadverfolgung Unterstützung für emittierende Werte hinzuzufügen.
Wie Sie wissen, ist die Lichtmenge, die auf ein Pixel zusteuert, die Lichtmenge, die die Oberfläche verlässt, die ein Strahl auf diesem Pixel schneiden würde.
Das wird rekursiv berechnet, indem man sieht, wie viel Licht auf diesen Punkt trifft, das BRDF integriert, mit dem Kosinus und dem ganzen Jazz multipliziert.
Zu diesem Ergebnis wird nur eine emittierende Beleuchtung hinzugefügt. Was auch immer Sie jetzt als "ausgehendes Licht" von einer Oberfläche haben, fügen Sie einfach die emittierende Farbe dieser Oberfläche hinzu. (Optional können Sie auch etwas Ähnliches wie die Texturabbildung ausführen und die Emissionswerte über das Objekt variieren lassen, möglicherweise basierend auf einer Textur.)
Das ist alles, es ist sehr einfach und leicht.
In der folgenden Rendering-GleichungL.e(ωÖ) stellt den emittierenden Term dar (dafür steht das e, emittierend), und der Rest der Gleichung ist das über der Hemisphäre integrierte Licht. Sie können sehen, dass Sie dem Ergebnis, das Sie als ausgehendes Licht von einem Punkt aus zurückgeben, nur den Emissionsgrad hinzufügen (L.Ö(ωÖ) ), um diese emittierende Beleuchtung anzuwenden.
Weitere Informationen zu einem einfachen Pfad-Tracer mit Flächenbeleuchtung finden Sie unter diesem Link, der auch C ++ - Quellcode kommentiert hat.
http://blog.demofox.org/2016/09/21/path-tracing-getting-started-with-diffuse-and-emissive/
quelle