Viele Nutzen haben sich an Foren gewandt, weil Sie den Algorithmus nicht verstanden haben, den 3ds Max verwendet, um Tangenten und Binormals für das Normal Mapping zu berechnen. Dieser Algorithmus wurde zwar schon in einer der letzten Versionen der 3ds Max SDK Dokumentationen veröffentlicht, dennoch haben wir uns entschlossen auch in diesem Blog darüber zu berichten.
Zusammen mit dem Normalvektor sind der Tangenten- und Binormalvektor wichtig, weil sie eine Basis schaffen, die den Tangenraum definiert, den ein Renderer für das Normal Mapping verwendet. Im 3ds Max SDK ist die Funktion ComputeTangentAndBinormal() für die Erzeugung von Tangenten- und Binormalvektoren, die der Scanline-Renderer für die Darstellung von Normal Maps verwendet, in der Headerdatei gutil.h zu finden.
Diese Funktion nimmt zwei Punkte als Eingabe: tv, welches ein Texturvertexpunkt ist und v, welches ein Vertexpunkt ist. Es gibt die beiden Basisvektoren über das dritte Argument, bvec, zurück. Nach der Ausführung der Funktion enthält das Element bvec[0] den Tangentenvektor und das Element bvec[1] den binormalen Vektor. Der binormale Vektor ist das Kreuzprodukt der Flächen-Normals mit der Tangente.
Der von 3ds Max verwendete Algorithmus sieht folgendermaßen aus:
Allein diese Funktion ist nicht die ganze Geschichte. Es ist wichtig zu wissen, wie es in 3ds Max verwendet wird.
Beispielcode aus dem NormalBump-Sample des 3ds Max SDK demonstriert, wie diese Funktion im normalen Bump-Mapping verwendet wird und ist auch derselbe Algorithmus, der auch im Scanline-Renderer bei der Generierung und Anzeige der Normal Map verwendet wird.