Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Habs grad mal nachvollziehen wollen, aber das Ergebnis ist 100%ig korrekt, und nicht so wie du es beschrieben hast :
Der Wuerfel ist 100/100/100 groß, Lichtquelle bei 50/50/50 mit nem Radius von 80.(Bemerkung : Hab das Bild mittels Gamma-Korrektur etwas heller gemacht um den Würfel besser erkennen zu können)
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Hm...bei mir hats einwandfrei gefunzt :
Sieht vollkommen korrekt aus.Allerdings hab ich ja schon einige (kleinere) Änderungen vorgenommen, die dazu führen könnten das es bei mir korrekt aussieht.Der Lightmappercode war ja recht alt, weshalb hier und da noch Sachen drin waren die wohl nicht dahingehören.
Klammere mal folgenden Code in LightMapSystem.CalculateLightMap aus, und probier mal ob's dann geht : <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> <span class='reserved'>if</span> Lumel.x < <span class='integer'>0</span> <span class='reserved'>then</span> Lumel.x := -Lumel.x; <span class='reserved'>if</span> Lumel.z < <span class='integer'>0</span> <span class='reserved'>then</span> Lumel.z := -Lumel.z; <span class='reserved'>if</span> Lumel.y < <span class='integer'>0</span> <span class='reserved'>then</span> Lumel.y := -Lumel.y;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3--> Der stammt noch von gaaaaaaaaanz ganz Früher, und ich weis auch nicht was ich mir damals dabei gedacht hab :blink:
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Um meinen neuen Lightmaprenderer (inklusive Schatten) mal der Öffentlichkeit zu demonstrieren, hab ich mich dazu entschieden eine kleine Demo davon hochzuladen, in der ihr euch das Ganze mal ansehen könnt. Die Lightmaps wurden vorher generiert und in einem Lightmappaket (demo.lmp) gesichert, welches trotz der knapp 800 32x32 Pixel großen Lightmaps nur knapp 150 KByte hat. Da ich vorhab den Lightmapper als Standalone-Version mit einem brauchbaren Dateiformat bereitzustellen, damit man seine Projekte schnell und einfach mit Lightmaps aufwerten kann, könnt ihr euch schonmal dessen Qualitäten ansehen.
Screenshot : (Bewegt wird sich wie aus eingschlägigen Ego-Shootern bekannt mit Maus unt Tastatur.Die anderen Tasten werden im Demo angezeigt)
Ich habe mal ne kleine Frage zu den Lightmaps: Wie macht ihr das, dass die programme bei euch noch flott laufen? Ich mein: Wenn man pro Quadrat eine einzelne Lichttextur saved, dann muss man ja vor jedem Quad eine neue Textur binden. Dazu kommt noch, dass man ja dazu jedesmal vor einem neuen Objekt erneut "glbegin" bezw. dahinter "glend" aufrufen muss, da man ja (meines wissens nach) inerhalb dieses blocks die Textur nicht binden kann...
Bei mir auf nem Rechner (mit na Tnt2-Graka) habe ich mal ne szene mit KLightmaps gebastelt. Diese hatte höchstens 70-80 Dreiecke (*2 wegen Blending) und ich kam im Vollbildmodus (1024x768x32) nur gerade so auf 12-16 FpS! Wenn ich das Blending weggelassen habe und dafür Multitexturing genommen habe, waren es immerhin so etwa 20 - 27, aber uich will nicht wissen, was passieren würde, wenn ich auf diese Art und Weise versuchen würde, ein Level von der Größe eines durchschnittlichem UT-Levels zu basteln. Besonders halt das ständinge "glbegin" und "glend" kann meine Graka scheinbar gar nicht ab...
Wie kann man das problem umgehen?
_________________ 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!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Also in meiner Demo mach ich das noch so wie du es beschrieben hast.Für nen riesigen Level ist dass natürlich unpraktikabel.Les dir allerdings auch mal den Rest dieses Threads vor, denn da hab ich bereits erwähnt das man die Lightmaps auch in eine große Textur schreiben kann. Dann muss man die Texturen nicht dauernd wechseln, sondern nur noch die Texturkoordinaten entsprechend der Position der Lightmap innerhalb dieser großen Textur(en) variieren.Dadurch erspart man sich auch die vielen Texturenwechsel.
Stimmt... dein Sample sieht zwar genial aus, aber die wirklich Bombastischen 10 FPs sind schon etwas ruckelig
Naja: denn weiß ich ja, wie ich das in Zukunft machen muss: In eine möglichst große Lightmap (256x256) möglichst kleine Abschnitte reintuen (16x16), so dass ich ganze 256 Quads mit einer Lightmap abdencken kann *juhu* ... blos irgendwann einmal wird auch das unpraktikabel, da man ja irgendwie auch die normalen Texturen wechseln muss... damit wars das denn auch schon mit nem externen Lightmap-Generator, da man etwas bracuth, dass sowohl die normale Textur kennt, als auch die Beleuchtung berechnen kann, damit es die Lightmaps der Objekte, die dieselbe Base-Tex haben, auch in dieselbe Lightmap packt... :blink: :wacko:
Naja: habe mir aber shcon fast gedacht, dass es nicht anders geht... aber dennoch: danke für die Antwort
_________________ 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!
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Zitat:
...damit wars das denn auch schon mit nem externen Lightmap-Generator, da man etwas bracuth, dass sowohl die normale Textur kennt, als auch die Beleuchtung berechnen kann, damit es die Lightmaps der Objekte, die dieselbe Base-Tex haben, auch in dieselbe Lightmap packt
Mein Lightmapper kennt deine Texturen .Das Geometrieformat das ich verwende speichert neben den Vertexen deiner Primitiven (momentan Quads) auch die der primitiven zugewiesene Textur. (oder besser deren Texturenindex) In der endgültigen Version wird man dann, neben dem Lightmappaket wie im Demo die Lightmaps auch direkt auf die Platte als BMPs speichern können, und kann so dann damit machen was man will.Da du ja die Geometriedatei selbst erstellst, kannst du dann auch die erstellten Lightmaps je nach verwendeter Textur in eine größere Textur packen. Kleines Beispiel : Quad0, 2, 4 und 6 in der Geometriedatei haben alle die gleiche Textur (das weisst du, und das weiss auch der Lightmapper).Deren Lightmapdateinamen sind dann später 0.bmp, 2.bmp, 4.bmp und 6.bmp.Diese Bitmaps kannste dann ganz einfach zu einem größeren Bitmap zusammenfassen.
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Für alle Interessierten gibts als Anhang ein Zip mit neuen Lightmaps, das ihr in das Demoverzeichnis extrahieren müsst.Neben der Tatsache das die Beleuchtung sehr düster und bedrohlich wirkt, sieht man auch das selbst nur 8x8 Pixel große Lightmaps schon ausreichen können.
P.S. : Irgendwie bekomm ich beim durchlaufen des Demos mit diesen düsteren Lightmaps das Verlangen irgendein Rollenspiel/Adventure mit cthulhuiden Einflüssen zu proggen, denn dank dem Lightmapgenerator liesse sich Lovecrafts cthulhuider Stil nämlich perfekt umsezten...
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Jau das letzte LM sieht auch super aus.
@DCW_Mr_T: Die langsame Geschwindigkeit hängt wohl auch ein wenig mit der hohen Auflösung zusammen. Die Demo verwendet nämlich genau die Auflösung die dein Windows hat und bei einer TNT2 wird alles ab 1024x768 echt schmerzhaft.
Glaube ich eher nicht, denn ich kann ja auch das alte UT bei 1024x768x16 mit allen Details auf "maximum" Problemlos zocken... mit der 32 Bit Frabtiefe wird es zwar etwas ruckelig, aber auch keineswegs unspielbar. Allerdings habe ich festgestellt, dass meine Graka auf zu viele "glbegin" extrem empfindlich reagiert... angenommen ich habe ne Schleife:
Code:
for x := 0 to 64 do
begin
for y := 0 to 64 do
begin
glbegin(gl_quads);
glvertex3f(x,0,y);
glvertex3f(x+1,0,y);
glvertex3f(x+1,0,y+1);
glvertex3f(x,0,y+1);
glend;
end;
end;
oder diese hier:
Code:
glbegin(gl_quads);
for x := 0 to 64 do
begin
for y := 0 to 64 do
begin
glvertex3f(x,0,y);
glvertex3f(x+1,0,y);
glvertex3f(x+1,0,y+1);
glvertex3f(x,0,y+1);
end;
end;
glend;
Das dargestellte ist dasselbe, aber bei meiner Graka ist der Geschwindigkeitsunterschied bei einem Faktor von 4-6 !!! Auf anderen karten macht das hingegen nicht viel aus....
@ SoS: Jo, sieht echt nicht übel aus mit den dunkleren Lightmaps... *meinen Monitor etwas heller stelle* <-- Einige Detail in dem Level sind nun aber recht schlecht erkennbar (ok, in meinem Falle blendet sie Sonne auch voll gegen....:blink: ) Aber ansonsten: hat was Du willste ein Spiel auf basis dieses ganzen machen? Nur zu, ich werde dich nicht aufhalten
_________________ 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!
Aber bei UT sobald ich 1024x768 eingeschalten hatte habe ich gesehen, dass es urplötzlich ganz anders lief. Da musste ich nicht mal 32 Bit anmachen. Aber das kann sein, dass mein Proz bzw. Betriebsystem (Win2k) dazu ein wenig anders war.
1.) Hast du ne schöne Line-Triangle-Intersection Function??? Die die ich hab, funktioniert zwar, is aber super langsam (Is eigentlich nen Line-Polygon Test)... das mit dem Schatten klappt auch wunderbar
2.) Die Textur Koordinaten... da blick ich im moment nochnich so richtig durch... Wenn ich nen Triangle hab, wie verteile ich dann die Textur Koordinaten richtig??? *guckt unsicher*
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Aya hat geschrieben:
1.) Hast du ne schöne Line-Triangle-Intersection Function??? Die die ich hab, funktioniert zwar, is aber super langsam (Is eigentlich nen Line-Polygon Test)... das mit dem Schatten klappt auch wunderbar
Meine Lösung basiert auf den Tuts von <a href='http://www.gametutorials.com' target='_blank'>http://www.gametutorials.com</a>, und dürfte an sich wohl kaum viel effizienter zu implementieren sein.Einzig die vielen Berechnungen könnte man noch optimieren, in dem man sie durch 3DNow!, MMX oder SSE-optimierte Routinen ersetzt.Im Netz exisitiert eine frühe Version einer Math-Unit für Delphi, die auf 3DNow optimiert ist.Dadurch dürften die Berechnungen etwas schneller werden.Ich teste einen Lumel übrigens nur dann gegen eine Lichtquelle, wenn dieser auch in deren Reichweite liegt, und spare so jede Menge unnötiger Berechnungen. So wie ich es mache reicht mir die Geschwindigkeit eigentlich.Je nach Fall schafft mein Lightmapper knapp 400 32x32 Pixel große Lightmaps innerhalb von knapp 40 Sekunden (Athlon XP2600+).Und wenn ich nur mal ne schnelle Vorschau brauch, dann nutz ich halt nur 8x8 Pixel große Lightmaps.
Aya hat geschrieben:
2.) Die Textur Koordinaten... da blick ich im moment nochnich so richtig durch... Wenn ich nen Triangle hab, wie verteile ich dann die Textur Koordinaten richtig??? *guckt unsicher*
Das geht übers planare Texturmapping, bei dem das Dreieck auf die entsprechende Ebene projeziert wird und so die Texturkoordinaten ermittelt werden.Ganz oben hab ich ja nen Link zu nem Dokument gepostet in dem das sehr ausführlich beschrieben wird.
Mitglieder in diesem Forum: Google [Bot] und 5 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.