schau dir mal dashier an: <a href='http://www.Koshigaya.de/DelphiGL/Lightmapping.exe' target='_blank'>http://www.Koshigaya.de/DelphiGL/Lightmapping.exe</a>
In der mitte sehen die Texturen ok aus, aber an den Polen der Sphere... ich weiß nich, irgendwas stimmt da net (und diese 4 Schwarzen stellen... *guckt verwirrt*)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Habs mir grad mal angesehen, und es sieht so aus als ob da was mit deiner Projektion der Dreicke auf die korrespondierenden Achsen nicht stimmt, und das Lightmapping deshalb an bestimmten Stellen schiefläuft.Schau dir das von mir ganz oben gepostete Dokument mal an, denn dort wird die Projektion zum Auffinden der korrekten Texturkoordinaten sehr ausführlich erklärt.
Zu der Geschwindigkeit: Bei Unreal Tournament wird mit Hilfe eines Software Renderers vom Licht aus gesehen in 6 Richtungen gerendert und dadurch schnell geprüft, ob eine Lichtquelle sichtbar ist. Deshalb dauert es auch nicht solange wie in Quake3 ein Level neu zu berechnen. Ob das im neuen UT2003 auch noch so geschieht weiß ich nicht, aber man könnte auf aktueller HW so was ähnliches mit Hilfe der Occlussion Queries machen. Man erstellt für jeden Punkt eine Occlusion Query und rendert dann in alle sechs Richtungen von der Lichtquelle aus gesehen. Die Punkte auf der Lightmap werden dann ebenfalls als Punkte ohne DepthWrite gezeichnet. Wenn ein Punkt mindenstens einmal sichtbar war, dann gibt es eine Sichtlinie. Ich habe das noch nicht ausprobiert, aber das sollte auf allen Karten ab GF3 ziemlich schnell gehen. Da man dabei nur alles zeichnet und testet, was in Lichtentfernung liegt, muß man nicht allzuviele Occlusion Queries erstellen. Die Queries haben zwar eine kleine Wartezeit wegen der asyncronen Berechnung auf der Grafikkarte, aber wenn man erst alle Punkte zeichnet und dann die Queries abfragt, dürfte das kein Problem sein.
Nachtrag: Wenn man die Punkte, die man testen will, nicht als Punkte, sondern als Quads rendert, dann kann man ja auch sehen, wie viele Pixel davon sichtbar sind und entsprechend die Helligkeit für diesen Texel der Lightmap skalieren.
Unter <a href='http://www.flipcode.com/articles/article_lightmapping.shtml' target='_blank'>http://www.flipcode.com/articles/article_l...htmapping.shtml</a> gibt es ein neues Tutorial vom 21.07.03 zum Thema Lightmapping.
also irgendwie will das nich so recht klappen bei mir... <a href='http://www.Koshigaya.de/DelphiGL/Lightmapping.exe' target='_blank'>http://www.Koshigaya.de/DelphiGL/Lightmapping.exe</a>
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Wollt die neue Version grade ausprobieren, allerdings kommt beim Starten ein "Unbekannter Softwarefehler", und direkt danach eine EInOutError-Exception, bevor sich die Demo dann komplett verabschiedet.
Allerdings schätz ich mal, dass das planare Mapping evtl. Probleme mit bestimmten Winkeln hat und dadurch die Lumelpositionen (besonders an den Polen einer Sphere) falsch berechnet werden. Hab mir für meinen Lightmapper nen ASE-Importer geschrieben und selbst mal zwei verschiedene Kugeltypen im 3D Studio gemacht, einmal ne Geosphere und einmal eine normale Sphere.Bei beiden gibts Probleme, was man auch dann sieht wenn man durch das planare Mapping die Texturkoordinaten selbst errechnen lässt. Bin momentan auch auf der Suche nach einer Lösung für das Problem und werd dann bescheid sagen wenn ich was gefunden hab!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Hab jetzt mal mit meinem ASE-Importer für den Lightmapper rumgespielt, und bin mir fast zu 100% sicher, dass das planare Mapping Probleme mit einer solch komplexen Form wie einer Kugel hat, denn andere (eckige) Objekte funzen einwandfrei, hab auch Testweise mal ne komplette Szene in 3D Studio MAX gebastelt und mit meinem Lightmapper einwandfrei beleuchtet und schattiert. Evtl. wäre es deshalb eine Möglichkeit, die UV-Koordinaten im 3D-Modeller generieren zu lassen (geht ja in jedem 3D-Modeller über UVW-Map) und diese dann einfach für die Lightmaps als Berechnungsgrundlage holen.Rein theoretisch dürfte das dann funktionieren, ansonsten müsste man sich in mathematische Tiefen wühlen um die korrekten Lightmapkoordinaten für z.B. Kugeln zu berechnen.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Jepp, ganz genau das hab ich gemeint.Man lässt den 3D-Modeller die ganze Arbeit der Koordinatengeneration (in 3DStudio nennt sich das UVW-Map) machen, und nutzt diese dann, anstatt übers planare Mapping die Lightmapkoordinaten zu ermitteln.Denn dann hat man mit grosser Wahrscheinlichkeit korrekte Koordinaten, während planares Mapping je nach Polygonlage anscheinend fehlschlägt.
Berichte auf jeden Fall mal obs funzt, bin grad mit was anderem beschäftigt...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Das ist ja dass dumme an dieser Lightmappingmethode.Die basiert komplett auf planarem Mapping, weshalb es da schwierig werden dürfte.Evtl. könntest du aber trotzdem die UV-Koordinaten aus deinem 3D-Modeller übernehmen, dann trotzdem prüfen auf welcher Ebene das Dreieck liegt, und dann den von dir geposteten Teil mit den UV-Koordinaten des 3D-Modellers weiternutzen...ob das funzt ist allerdings fraglich.
Bin momentan selbst über ne Lösung am grübeln, aber da ich kein Mathegenie bin könnts noch etwas länger dauern bis ich mit ner Lösung rauskomme...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Für alle die unter dem gleichen Problem leiden : Ich hab zumindest die Ursache für das Fehlbeleuchten von "runden" Oberflächen wie Kugeln oder Zylindern gefunden.
Ich hab mir in meiner Matheunit ne Logdatei angelegt, in der die Normalvektoren der Flächen abgelegt werden, falls das planare Mapping deren Ausrichtung nicht ermitteln kann, und dabei ist genau das eingetreten womit ich gerechnet habe : Das planare Mapping ermittelt die Achse auf der ein Polygon liegt ja anhand der größten Komponente seiner Flächennormalen.Nun gibt es aber dumemrweise (besonders leicht bei nem Zylinder nachzuvollziehen) aber Polygone, bei denen die Flächennormale zwei gleichgroße Komponenten hat (in meinem Zylinder ist das z.B. ein Dreieck mit der Flächennormalen x:50,4750022888184 y:0 z:50,4750022888184).Natürlich scheitert das planare Mapping hier, da es keine eindeutig größere Komponente finden kann. Evtl. lässt sich das dadurch lösen, das wenn zwei Komponenten gleich sind, die dritte als größter Wert angenommen wird.Ich probiers mal aus, und werd dann ein Ergebnis posten.
Hoffe das hilfe allen die an dem Problem arbeiten ein wenig weiter, ansonsten ist mein Lightmapper nämlich schon einsatzbereit und lädt seine Szenen inzwischen in Dreiecksform direkt aus einer ASE-Datei.
Für alle Neugierigen gibts <a href='http://www.delphigl.de/lmapperag.jpg' target='_blank'>hier nen Screenshot</a>. (1280x960)
Registriert: Di Jul 01, 2003 18:59 Beiträge: 887 Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Sorry for this english answer, my german writing is not that good...
This is an interesting thread to folow.
I wonder on how i ad dynamic meshes to a ligtmapped world? Should i give that mesh a lightmap and recalculate that every move? Otherwise the dynamic mesh does not blend in with the surroundings. I dont want to know what happens to the framerate when many dynamic meshes appear in a world. Or is it not that bad on the framerate.
Isn't there any chance to combine Static and Dynamic lightmaps? I thing i should work: you could create Static Lightmaps for every Object in your scene and then when rendering you only calculate the texture for the dynamic lights... but than you have to search an method to combine the two lightmaps to one (or to add the dynamic infos to the static lightmap)... might be faster then calculating everyting new...
(i am sorry of my bad english... hobe the content is clear )
_________________ Es sind immer die guten, welche zu früh von uns gehen müssen... Meine bislang 13 Open Gl - Tuts findet ihr auf www.dcw-group.net Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Mitglieder in diesem Forum: 0 Mitglieder und 10 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.