Frage zu Tangent Space
-
Hallo zusammen
Ich bin gerade debei ein per pixel environment mapping zu implementieren und habe dazu eine kleine Frage. Sehe ich das richtig, dass ich hierfür für jeden einzelnen Pixel einer Oberfläche deren Position im Worldspace berechnen muss? Ich hatte mir schon gedacht, dass es viel weniger rechenintensiv wäre, stattdessen sämtliche objekte in den den Tangentspace umzurechnen, aber das Problem dabei ist, dass ja doch jedes Surface einen anderen Tangentspace hat, sofern es sich nicht gerade um eine Ebene handelt. Sehe ich das richtig oder habe ich etwas durcheinander gebracht?P.S.
Ich hatte das Environmentmapping per vertex implementiert, was auch super geklappt hatte. Aufgrund der Tatsache, dass ich nun zusätzlich eine Normalmap verwenden möchte, ist dies aber nicht mehr genügend...Mfg Samuel
-
Normal wird die Tangentspace Basis sogar für jeden Vertex berechnet.
-
Normal wird die Tangentspace Basis sogar für jeden Vertex berechnet.
Ja genauso habe ich es nun gemacht. Und nun multipliziere ich jeden einzelnen Pixel (Normalenvektor rgb) mit der Tangentbasis um die Position des Pixels im 3D - Raum zu erhalten. Ist das korrekt? Ich frage, weil es mir schier Wahnsinnig erscheint, für jeden einzelnen Pixel eine Matrixmultiplikation durchzuführen... :p
-
du kannst in jedem space beleuchten, tangen-, object-, world-, view-space.
das haengt davon ab in welchem space die normalen sind, in welchem die lichtquellen und welche effekte zu erziellen willst. fuer simples diffuse kann es reichen die light direction pro vertex in den tangentspace zu transformieren und pro pixel nur noch normalisieren und dot mit der bump.3 dots im pixelshader zu haben ist nicht so grausam viel, schon das pow das die meisten leute fuer specular machen braucht oft genau soviel zeit.
-
Ishildur schrieb:
Normal wird die Tangentspace Basis sogar für jeden Vertex berechnet.
Ja genauso habe ich es nun gemacht. Und nun multipliziere ich jeden einzelnen Pixel (Normalenvektor rgb) mit der Tangentbasis um die Position des Pixels im 3D - Raum zu erhalten. Ist das korrekt? Ich frage, weil es mir schier Wahnsinnig erscheint, für jeden einzelnen Pixel eine Matrixmultiplikation durchzuführen... :p
Ja, das ist auch, im Normalfall, der falsche Weg. Die Oberflächennormalen liegen häufig schon im Tangentspace vor und sollten dort bleiben dürfen. Alle anderen Informationen, die du zum Beleuchten brauchst, transformierst du in den Tangentspace. Das dürfte im Normalfall wesentlich weniger Aufwand sein.