Lichttypen (Direct3D 9)
Die Light type-Eigenschaft definiert, welche Art von Lichtquelle Sie verwenden. Der Lichttyp wird mithilfe eines Werts aus der D3DLIGHTTYPE C++-Enumeration im Type-Member der D3DLIGHT9-Struktur des Lichts festgelegt. Es gibt drei Arten von Lichtern in Direct3D : Punktlichter, Scheinwerfer und Richtlichter. Jeder Typ beleuchtet Objekte in einer Szene unterschiedlich, mit unterschiedlichem Rechenaufwand.
Punktuelles Licht
Punktlichter haben Farbe und Position innerhalb einer Szene, aber keine einzelne Richtung. Sie geben Licht gleichermaßen in alle Richtungen ab, wie in der folgenden Abbildung dargestellt.
Eine Glühbirne ist ein gutes Beispiel für ein Punktlicht. Punktlichter werden von Dämpfung und Reichweite beeinflusst und beleuchten ein Gitter auf Vertex-um-Scheitelpunktbasis. Während der Beleuchtung verwendet Direct3D die Position des Punktlichts im Weltraum und die Koordinaten des beleuchteten Scheitelpunkts, um einen Vektor für die Richtung des Lichts und die Entfernung abzuleiten, die das Licht zurückgelegt hat. Beide werden zusammen mit der Vertexnormal verwendet, um den Beitrag des Lichts zur Beleuchtung der Oberfläche zu berechnen.
Gerichtetes Licht
Richtungslichter haben nur Farbe und Richtung, keine Position. Sie geben paralleles Licht aus. Dies bedeutet, dass das gesamte Licht, das von gerichteten Lichtern erzeugt wird, durch eine Szene in derselben Richtung verläuft. Stellen Sie sich ein gerichtetes Licht als Lichtquelle in nahezu unendlicher Entfernung vor, z. B. die Sonne. Richtungslichter sind von Dämpfung oder Bereich nicht betroffen, sodass die von Ihnen angegebene Richtung und Farbe die einzigen Faktoren sind, die berücksichtigt werden, wenn Direct3D Vertexfarben berechnet. Aufgrund der geringen Anzahl von Beleuchtungsfaktoren sind dies die am wenigsten rechenintensiven Leuchten.
Spotlight
Spotlights haben Farbe, Position und Richtung, in der sie Licht ausstrahlen. Licht, das von einem Strahler emittiert wird, besteht aus einem hellen inneren Kegel und einem größeren äußeren Kegel, wobei die Lichtintensität zwischen den beiden abnimmt, wie in der folgenden Abbildung dargestellt.
Spotlights sind von Falloff, Dämpfung und Reichweite betroffen. Diese Faktoren sowie die Entfernung, die das Licht zu jedem Scheitelpunkt zurücklegt, werden beim Berechnen von Lichteffekten für Objekte in einer Szene berücksichtigt. Die Berechnung dieser Effekte für jeden Scheitelpunkt macht Spotlights zum rechenintensivsten aller Lichter in Direct3D.
Die C++-Struktur D3DLIGHT9 enthält drei Member, die nur von Spotlights verwendet werden. Diese Member – Falloff, Theta und Phi – steuern, wie groß oder klein die inneren und äußeren Kegel eines Scheinwerferobjekts sind und wie das Licht zwischen ihnen abnimmt.
Der Theta-Wert ist der Radienwinkel des inneren Kegels des Spotlights, und der Phi-Wert ist der Winkel für den äußeren Lichtkegel. Der Falloff-Wert steuert, wie die Lichtintensität zwischen dem äußeren Rand des inneren Kegels und dem inneren Rand des äußeren Kegels abnimmt. Die meisten Anwendungen legen Falloff auf 1.0 fest, um einen Falloff zu erstellen, der gleichmäßig zwischen den beiden Kegeln auftritt. Sie können jedoch bei Bedarf andere Werte festlegen.
Die folgende Abbildung zeigt die Beziehung zwischen den Werten für diese Elemente und wie sie sich auf die inneren und äußeren Lichtkegel eines Spotlights auswirken können.
Strahler geben einen Lichtkegel aus, der aus zwei Teilen besteht: einem hellen inneren Kegel und einem äußeren Kegel. Licht ist im inneren Kegel am hellsten und außerhalb des äußeren Kegels nicht vorhanden, wobei die Lichtintensität zwischen den beiden Bereichen abschwächt. Diese Art der Dämpfung wird häufig als Falloff bezeichnet.
Die Lichtmenge, die ein Scheitelpunkt empfängt, basiert auf der Position des Scheitelpunkts in den inneren oder äußeren Kegeln. Direct3D berechnet das Punktprodukt des Richtungsvektors (L) des Spotlights und den Vektor vom Licht zum Scheitelpunkt (D). Dieser Wert entspricht dem Kosinus des Winkels zwischen den beiden Vektoren und dient als Indikator für die Position des Scheitelpunkts, der mit den Kegelwinkeln des Lichts verglichen werden kann, um zu bestimmen, wo der Scheitelpunkt in den inneren oder äußeren Kegeln liegen könnte. Die folgende Abbildung enthält eine grafische Darstellung der Zuordnung zwischen diesen beiden Vektoren.
Das System vergleicht diesen Wert mit dem Kosinus der inneren und äußeren Kegelwinkel des Spotlights. In der D3DLIGHT9-Struktur des Lichts stellen die Theta- und Phi-Elemente die Gesamtkegelwinkel für die inneren und äußeren Kegel dar. Da die Dämpfung auftritt, wenn der Scheitelpunkt vom Mittelpunkt der Beleuchtung entfernt wird (anstatt über den Gesamtkegelwinkel), teilt die Laufzeit diese Kegelwinkel in die Hälfte, bevor ihre Kosinen berechnet werden.
Wenn das Punktprodukt der Vektoren L und D kleiner oder gleich dem Kosinus des äußeren Kegelwinkels ist, liegt der Scheitelpunkt hinter dem äußeren Kegel und erhält kein Licht. Wenn das Punktprodukt von L und D größer als der Kosinus des inneren Kegelwinkels ist, befindet sich der Scheitelpunkt innerhalb des inneren Kegels und empfängt die maximale Lichtmenge, wobei die Dämpfung über die Entfernung berücksichtigt wird. Wenn sich der Scheitelpunkt zwischen den beiden Regionen befindet, wird der Falloff mit der folgenden Gleichung berechnet.
Hierbei gilt:
- I f ist Lichtintensität nach Falloff
- Alpha ist der Winkel zwischen den Vektoren L und D.
- Theta ist der innere Kegelwinkel
- Phi ist der äußere Kegelwinkel
- p ist der Fall
Diese Formel generiert einen Wert zwischen 0,0 und 1,0, der die Lichtintensität am Scheitelpunkt skaliert, um den Falloff zu berücksichtigen. Dämpfung als Faktor des Abstands des Scheitelpunkts vom Licht wird ebenfalls angewendet. Das folgende Diagramm zeigt, wie sich unterschiedliche Falloffwerte auf die Falloffkurve auswirken können.
Die Auswirkung verschiedener Falloffwerte auf die tatsächliche Beleuchtung ist subtil, und eine kleine Leistungseinbuße entsteht, wenn die Falloffkurve mit anderen Falloff-Werten als 1,0 gestaltet wird. Aus diesen Gründen wird dieser Wert in der Regel auf 1,0 festgelegt.
Zugehörige Themen