Leider kann ich die Frage nur sehr vage formulieren, aber vielleicht könnt ihr mir doch einen Anstoß geben. In einem Programm, das ich teilweise als Vorbild nehmen möchte, erscheinen die Landschaftstexturen sehr weich. Zwischen zwei anstoßenden Texturen gibt es eine Übergangszone, also eine Vermischung der beiden Texturen. Das ist deutlich sichtbar, aber ich habe auch eine Funktion in dem Programm gefunden, die genau die Anteile der beiden Texturen zurückliefert. Mein Frage nun:
Wie wird diese Vermischung (möglicherweise) erzeugt? Hängt das evtl. mit dem angewandten Verfahren (Quadtree) zusammen?
Diese weiche Darstellung sieht zwar sehr schön aus, ist aber nicht immer wünschenswert. Manchmal wünsche ich mir eine schärfere Abgrenzeng. Wo kann man prinzipiell ansetzen, um das zu erreichen?
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
In einem aktuellen Projekt realisiere ich solche Übergänge mit Hilfe einer extra Texture, die ich "Intensity Map" nenne. Es handelt sich dabei um eine Map, die die drei Kanäle RGB verwendet um zu bestimmen wieviel Prozent einer Texture an einer Stelle dargestellt werden sollen. Mit Hilfe eines Shaders kann man dann zur Laufzeit recht bequem alle drei Texturen entsprechend zusammenfügen. Das schöne daran ist, dass man auf diese Weise mit einem Malprogramm recht leicht schöne Übergänge erzeugen kann. Das ganze klappt sicherlich genauso gut, wenn man die Intensity Map zur Laufzeit dynamisch generiert. Ist halt alles eine Frage der Dynamik, die die Karte anschließend haben soll. Sind die Übergänge somit festgelegt, wird es sich lohnen einen "Detail Map" über die gesamte Karte (oder einem großen Teil) zu ziehen. Auf diese Weise entstehen auf der Karte zahlreiche kleinere Artefakte, so dass man nicht so leicht ein bestimmtes Muster findet, dass sich ständig wiederholt. Die Karte wird dadurch ein wenig "weicher" wirken.
Quadtrees sollten keinerlei Auswirkung auf die Darstellung haben, da sie lediglich einen Einfluss darauf haben, wie die Daten im Speicher organisiert sind. Mit einem LOD-Verfahren kann man natürlich insbesondere 3D-Karten weniger kantig darstellen, was aber weniger an der Technik selbst liegt, sondern eher damit, dass man die Grafikkarte punktuell entlastet und daher einen höheren Detail-Grad nehmen kann. Von welchem Vorbild gehst Du eigentlich momentan aus? Evtl. kann hier sogar jemand etwas genaueres zu dem Verfahren sagen, dass dort verwendet wurde.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Von welchem Vorbild gehst Du eigentlich momentan aus? Evtl. kann hier sogar jemand etwas genaueres zu dem Verfahren sagen, dass dort verwendet wurde.
Ok, ich muss jetzt wohl mit der Sprache heraus und bekennen, dass es sich um ein C-Programm handeln, nämlich das bekannte Programm Tuxracer. Aber da ich jahrelang mit Delphi programmiert habe, erlaube ich mir, mal wieder "nach Hause" zu kommen, nicht zuletzt wegen der tollen Betreuung hier. Zur Sache:
Wie gesagt, ich konnte bis jetzt nicht herausfinden, wie die Texturen gemischt werden. In der Textur-Map sind sie jedenfalls hart eingezeichnet, und es gibt auch keine Overlays, die das Ganze verwischen. Die Wirkung kann man sehr schön an einem Screenshot erkennen, den ich auf meine Webseite gestellt habe:
Am linken Rand der dunklen Textur sind deutlich die Übergänge zu erkennen. Das sieht zwar meistens sehr gut aus, erlaubt aber keine kleinen Textursprenkel, die werden ziemlich verwischt. Andererseits möchte ich natürlich auch keine quadratisch-exakten Texturfliesen.
In dem kommerziellen Programm 1.1, das man leider nicht untersuchen kann, sieht die Abgrenzungen schärfer, ohne dass die Quadratmuster in Erscheinung treten. Es ist nur eine Vermutung, aber ich glaube, es hat etwas mit den "Transition-Texturen" zu tun, von denen ich eine ganze Reihe vorfand. Ein Beispiel darf ich ja mal vorzeigen:
Registriert: Sa Mai 04, 2002 19:48 Beiträge: 3830 Wohnort: Tespe (nahe Hamburg)
Eine interessante Frage, wieso C/C++ immer wieder so schüchtern sind und ein halbes Outing raus machen. Nur weil wir ein "Delphi" im Namen heißt es nicht, dass wir Menschen mit anderen Sprachen hier nicht willkommen heißen. Sonst gäbe es nicht sowas wie:
Code:
void method(int a){
}
Tuxracer... nun ich würde in dem Fall sagen, dass Du Dir davon auch die OpenSource-Variante "ppracer" einmal ansehen solltest. Keine Ahnung wie gut der Code ist, aber die Frage nach dem "wie" wird sich dadurch vermutlich am besten lösen lassen. Ich vermute, dass man hier allerdings ein simples LOD+Quad verwendet hat, um die 3D-Landschaft zu zeichnen. Die Textur darüber würde ich zu 98% auf eine Detail Map wetten. Die dunklen Ränder auf der rechten Seite sehen für mich nach einer einfachen Beleuchtung mittels Normalen aus. Bin allerdings auch kein Großmeister auf dem Gebiet, vielleicht findest sich ja einer unserer Landschafts-Gurus, der dazu etwas sagen kann.
_________________ "Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."
Registriert: Mo Jan 31, 2005 11:02 Beiträge: 432 Wohnort: Rheinlandpfalz
Hi,
ich denke, dass die Textur eine Verlaufstextur ist, wo weiß bedeutet, dass Textur 1 benutzt wird und schwarz bedeutet, dass Textur 2 benutzt wird. (transition = Verlauf)
Am besten macht man solchen Verlauf mit Shadern, aber ohne sollte es auch gehen
@Phobeus: Wie und seit wann geht denn das mit C++ code-Highlighting??
Eine interessante Frage, wieso C/C++ immer wieder so schüchtern sind und ein halbes Outing raus machen. Nur weil wir ein "Delphi" im Namen heißt es nicht, dass wir Menschen mit anderen Sprachen hier nicht willkommen heißen.
Das hängt mit den Erfahrungen zusammen. Stell Dir den umgekehrten Fall vor: Du würdest als Pascal-Programmierer eine Anfrage in einem C/C++ -Forum stellen, und das ohne Schutzkleidung ... Leider haben viele C-Programmierer kräftig "hier" geschrieen, als es um die Verteilung von Arroganz ging.
Phobeus hat geschrieben:
Tuxracer... nun ich würde in dem Fall sagen, dass Du Dir davon auch die OpenSource-Variante "ppracer" einmal ansehen solltest. Keine Ahnung wie gut der Code ist, aber die Frage nach dem "wie" wird sich dadurch vermutlich am besten lösen lassen.
Die Sourcen von ppracer liegen auf meinem Rechner. Aber da ist nicht viel geschehen, außer dass das ganze Programm von C nach C++ umgeschrieben wurde und einiges draufgebastelt wurde. Außerdem ist ppracer von der Bildfläche verschwunden, und das wahrscheinlich nicht ohne Grund.
Phobeus hat geschrieben:
Ich vermute, dass man hier allerdings ein simples LOD+Quad verwendet hat, um die 3D-Landschaft zu zeichnen. Die Textur darüber würde ich zu 98% auf eine Detail Map wetten. Die dunklen Ränder auf der rechten Seite sehen für mich nach einer einfachen Beleuchtung mittels Normalen aus. Bin allerdings auch kein Großmeister auf dem Gebiet, vielleicht findest sich ja einer unserer Landschafts-Gurus, der dazu etwas sagen kann.
Die Beleuchtung ist recht simpel. Die Schattenbildung wird einfach durch die Position der Lichtquelle bestimmt, die man per Konfiguration allerdings einstellen kann. Materialeigenschaften für Beleuchtungseffekte werden nicht genutzt. Doch an dem Programm gibt es ja noch vieles zu verbessern.
Was die Texturierung betrifft, so werde ich wohl weiter im Programm herumwühlen müssen. Dummerweise ist gerade der Teil, der sich damit befasst, in einem schwer lesbaren C++ geschrieben, rund 2500 Zeilen Fremdcode von einem südafrikanischen Programmier-Spezi. Aber nun.
Mitglieder in diesem Forum: 0 Mitglieder und 13 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.