Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich hatte in den letzten paar Tagen nicht besonders viel Zeit um am Lightmapper weiterzuarbeiten, bin der Lösung allerdings schon etwas näher gekommen.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Also ich habs bei mir mit deinen Veränderungen probiert, und hab dabei nen anderen Fehler in meinem Lightmapper gefunden (irgendwo war ein u mit nem v vertauscht).
Deine Änderungen ändern nichts am Ergebnis, aber nach meiner kleinen Korrektur klappts jetzt perfekt mit dem Beleuchten einer Kugel, trotzdem thx für deine Mühe.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wenn du den kompletten Quellcode von mir übernommen hast, dann gleich mal folgenden Code ab (in der Routine um die Lightmaps zu berechnen) :
Code:
if PolyPlane = 'YZ' then
begin
x := -(PolyNormal.y*uMin + PolyNormal.z*vMin + PlaneDistance) / PolyNormal.x;
UVVector := glVertex(x, uMin, vMin);
x := -(PolyNormal.y*uMax + PolyNormal.z*vMin + PlaneDistance) / PolyNormal.x;
Vect1 := glVertex(x, uMax, vMin);
x := -(PolyNormal.y*uMin + PolyNormal.z*vMax + PlaneDistance) / PolyNormal.x;
Vect2 := glVertex(x, uMin, vMax);
end;
Dort hab ich noch was korrigiert, ansonsten nirgendwo.Der Lightmapper funzt jetzt auch einwandfrei auf Kugeln und Zylinder, einzig an der Geschwindigkeit müsst ich noch feilen (besonders mit Schattenberechnung dauerts bei ner aufwendigen Szene doch schon recht lange).Bin jetzt fleissig dabei ne richtig aufwendige Szene im 3DStudio zu basteln um den Lightmapper mal richti zur Schau zu stellen
Wenn du den kompletten Quellcode von mir übernommen hast
Nich ganz komplett, aber einige teile doch schon..
@Schatten: Jep... dauert leider echt ziemlich lang... schaut aber zummindest richtig gut aus finde ich *g*
Ach ja... z.B. berechne ich für jede Lightmap eigene Textur koordinaten... ich bin am überlegen ob das irgendwie geht das ich die Texturkoordinaten vom Triangle übernehme... rein rechnerisch ja kein problem, aber wenn das Triangle z.B. die X-TexturKoordinaten von 33-34 hat, würde das bei ner 32x32 Lightmap schonmal garnich gehen... oder??? *guckt unsicher nachdenklich*
hab grad das mal geändert was du gesagt hast.. aber bei mir funktioniert's dannach garnemmer *gg*
Hab den fehler wohl schon irgendwo früher rausgemacht
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Ich wollt zuerst auch die im 3D-Modeller generierten UV-Koordinaten für die UVs meiner Lightmaps nehmen, hab das dann aber sein gelassen, da man ja in 3DStudio und Co dort frei modifizieren kann und so ein Rückrechnen recht komplex und manchmal sogar unmöglich wäre.
Allerdings berechne ich die Lightmapkoordinaten (wie du wohl auch) übers planare Mapping, und das funzt einwandfrei und in allen Lebenslagen
Und die Texturkoordinaten haben übrigens garnix mit der größe der Lightmap zu tun...
jep.. mach es auch über PlanarMapping (Sogar über eine ganz allein von mir selbst ausgedachte Funktion dafür *g* War zu faul im Netz zu suchen, und eigentlich isses ja auch total simpel wie PlanarMapping funzt )
Nur das doofe is halt.. ich hab bei meiner GraKa nur 2 TMUs für MultiTexturing = 1 TMU geht für die normale Textur drauf, eine andere für Lightmaps... ich wollte Lightmap und normale Textur zusammen als eine Textur machen.. aber, na ja.. mal schaun
Eine frage noch zu der sache, alle Lightmaps als eine große zu speichern... da gehen doch im grunde dann nur max 256 32x32 Maps in eine Textur, oder?? Weil größer als 512x512 wollte ich ungern werden damit... oder gibt's da auch noch ne bessere methode wovon ich mal wieder nix weiß? *g*
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Aya hat geschrieben:
Nur das doofe is halt.. ich hab bei meiner GraKa nur 2 TMUs für MultiTexturing = 1 TMU geht für die normale Textur drauf, eine andere für Lightmaps... ich wollte Lightmap und normale Textur zusammen als eine Textur machen.. aber, na ja.. mal schaun
Das geht definitiv nicht!Stell dir mal vor du hättest ne Szene mit 10.000 Polygonen, und dann müsstest du, wenn du die Textur mit der Lightmap in eine Textur kombinieren wolltest, stolze 10.000 Texturen erstellen...da freut sich keine Grafikkarte drüber. Und wenn du nur 2TMUs hast, aber mehr brauchst, führt halt leider kein Weg am Multipass+Multitexturing vorbei, was allerdings immernoch weitaus besser ist als das Verbrechen was du da oben an der Graka begehen wolltest
Aya hat geschrieben:
Eine frage noch zu der sache, alle Lightmaps als eine große zu speichern... da gehen doch im grunde dann nur max 256 32x32 Maps in eine Textur, oder?? Weil größer als 512x512 wollte ich ungern werden damit... oder gibt's da auch noch ne bessere methode wovon ich mal wieder nix weiß? *g*
Ab ner RivaTNT kannste ruhig bis 1024x1024 rauf gehen, und da passen jede Menge Lightmaps rein, zumal oft ne Lightmapgröße von 16x16 ausreichend ist.Eine weitere Möglichkeit wäre es, wenn du statt der kompletten quadratischen Ligtmap in ein Quadrat zwei gegenüberliegende dreeckige Lightmaps zeichnest (vorausgesetzt dein Lightmapper und deine Szene basieren auf Dreiecken).Dann bekämst du nämlich doppelt so viele Lightmaps in eine Textur, und bei ner LM-Größe von 16x16 Pixel könntest du so 8192 Lightmaps in ne 1024er Textur quetschen.Und wenn du dann eine LM-Textur pro Mesh machst, sollte das auf jeden Fall reichen.
Das geht definitiv nicht!Stell dir mal vor du hättest ne Szene mit 10.000 Polygonen, und dann müsstest du, wenn du die Textur mit der Lightmap in eine Textur kombinieren wolltest, stolze 10.000 Texturen erstellen...da freut sich keine Grafikkarte drüber. Und wenn du nur 2TMUs hast, aber mehr brauchst, führt halt leider kein Weg am Multipass+Multitexturing vorbei, was allerdings immernoch weitaus besser ist als das Verbrechen was du da oben an der Graka begehen wolltest
Haaalt halt halt *g*
wenn ich 10.000 Triangle habe, habe ich so oder so 10.000 Lightmaps... (mal angenommen ich packe sie nicht in eine große Lightmap).. Mein gedanke war (und dürfte wohl ziemlich unmöglich werden), die Lightmaps für ein Objekt in eine große Textur packen, und diese Textur dann mit der Textur des Objektes zusammenpacken. so hätte ich pro Objekt nur eine Textur inkls. Lightmap
So mache ich es ja bei meiner Engine mit Detailmaps etc... ich blende die Detailmap nicht erst im Spiel via MultiTexturing, sondern bereits in dem Editor, und speichere die resultierende Textur als ein ganzes.. so spare ich mir einmal das MultiTexturing, und ich hab eine Textur weniger im endeffekt... Denn, 1 Textur mit 5 verschiedenen DetailMaps = 6 Texturen... ich hab nur 5
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Öhm...Detailtexturen dienen doch dazu die geringen Details von Basistexturen zu erhöhen.Also wenn man ne 128x128er Basistextur hat, dann legt man dort z.B. 10x die Detailtextur drauf um den Eindruck einer detaillierteren Oberfläche zu erwecken.
So wie du das kombinierst, hast du ja eigentlich nur zwei Möglichkeiten : Entweder du zeichnest die Detailtextur 10x in die Basistextur, was deren Sinn komplett vernichtet, da dadurch kein neuen Details entstehen.
Oder du erstellst eine riesige Textur, stretcht dort deine Basetextur rein und zeichnest dann 10x die Detailtextur drüber.Dadurch verbrauchst du allerdings viel mehr Speicher.
Also ohne Multitexturing machen Detailtexturen keinen Sinn, und wenn du meinst das deine Lösung das umgeht, dann poste mal nen Screenshot, denn nach solch einer Methode ist die komplette 3D-Proggercommunity auf der Suche...
Bei deiner Methode würd ich mal gern ein riesiges Terrain mit ner 512er Basistextur und Detailtexturen sehen...das sieht niemals so aus wie beim Multitexturing.
Genausowenig lassen sich die Basistextur und die Lightmaps in einer Textur sinnvoll verbinden ohne irgendwelche stark einschränkenden Kompromisse einzugehen.
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.