Die unmittelbare Frage lautet: Wie kann ich in HLSL eine im UV-Raum erzeugte Oberflächennormale so ausrichten, dass ich sie auf eine Würfelfläche anwenden kann?
Das Gesamtprojekt ist, dass ich versuche, einen prozeduralen Planetengenerator zu bauen. Ich benutze einen Würfel, der auf eine Kugel projiziert wird, bei der jede Fläche ein Quad-Baum ist. Das Zwischenprojekt ist, dass ich eine normale Karte für das Gelände erstellen möchte. Ich denke, der beste Weg für mich, dies zu tun (und zu verstehen, was ich tue), besteht darin, zuerst die Normalen für die Würfelversion zu generieren und dann die Transformationen zu erarbeiten, um diese Normalen in die Kugel zu verzerren.
Im Idealfall würde die Methode keinen Verzweigungscode basierend auf dem Gesicht beinhalten, an dem ich arbeite (dh wenn wir uns auf der Oberseite des Würfels befinden, dann ist U = X und V = Y). Mit anderen Worten, was ich mir erhoffe, ist eine mathematische Magie wie "Oh, kreuzen Sie einfach das Terrain normal mit dem Punktprodukt der Würfelfläche normal und bla bla bla".
20.09.10 ETA:
Ich weiß, wie man Normalen für eine flache Oberfläche berechnet. Mein nachfolgendes Problem ist zweifach:
- Wie drehe ich die normale Karte so, dass sie auf jeder der Würfelflächen richtig ausgerichtet ist?
- Wie verziehe ich die flache normale Karte so, dass sie die Kugel umhüllt?
Ich habe eine Lösung gefunden , die eine Jacobi-Matrix verwendet, aber ich kann sie nicht zum Laufen bringen. Selbst wenn alle Normalen gerade nach oben zeigen (dh eine flache Oberfläche), bringt der HLSL-Code, an dem der Jacobianer beteiligt ist, die Beleuchtung völlig durcheinander - daher kann ich meiner Implementierung der Lösung nicht vertrauen.