Author Topic: metallische Oberflächen zusammengesetzter Körper  (Read 8134 times)

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« on: March 04, 2006, 12:06:45 pm »
Ich habe kürzlich mit idx3d einen Torus mit metallischer Oberfläche programmiert. Der Torus hat einen runden Querschnitt. Die metallische Oberfläche konnte ich gut mit Environment-Mapping realisieren.
idx3d scheint jedoch zu scheitern, sobald der Torus der länge nach in zwei materalien geteilt ist, d.h. man programmiert zwei Tori, dessen Querschnitte jeweils zwei Halbkreise (jeweils gespiegelt) sind und positioniert die Halbkreise  so, daß ein einziger Torus mit einem runden Querschnitt erscheint.
Dann sieht der Torus durch das Environment-Mapping aus, als würde er aus zwei Tori bestehen, deren Quenrschnitt nicht jeweils ein Halbkreis ist, sondern ein ganzer Kreis.
idx3d streckt bzw. staucht die Envireonment-Textur einfach auf die Oberfläche, das führt zu optischen Täuschungen  :cry:  
Wie ist es bei jpct? Metallische glänzende Oberflächen? Sind sie einfach und korrekt zu realisieren?

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 11769
    • View Profile
    • http://www.jpct.net
metallische Oberflächen zusammengesetzter Körper
« Reply #1 on: March 05, 2006, 06:27:03 pm »
Das Problem wird sein, dass das Environmentmapping schlicht und einfach ein Fake ist. Bei jPCT genauso wie bei IDX3D. Für die Generierung der Koordinaten werden die Vertexnormalen genommen und die sind bei einem Objekt standardmäßig anders, als wenn du das Objekt splittest. Das liegt an der Art der Berechnung (Mittelwert auf den Flächennormalen der angrenzenden Flächen). Was man in jPCT machen könnte: Die Vertexnormalen nachträglich so ändern, dass sie korrekt sind (d.h. so, als wäre das Objekt nicht zweigeteilt). Das ist nicht sooo kompliziert, erfordert aber ein Grundverständniss, was eine Vertexnormale überhaupt ist.

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« Reply #2 on: March 06, 2006, 10:11:59 am »
Danke für die schnelle Antwort. Bringt mich auf jeden Fall weiter.
Lassen sich mit JPCT metallische Oberflächen anders als mit Environment-Mapping realisieren? Wenn nein habe ich noch ein Problem damit:
Speziell bei einem (der länge nach) zweigeteilten Torus bildet das Env.Mapping das definierte Environment auf beide Flächen jeweils komplett ab. Eigentlich müsste auf einer Seite die eine Hälfte und auf der anderen die andere Hälfte.  Das führt auch zu optischen Täuschung, wenn der Torus mit punktförmigem Licht bestrahlt wird oder die Environment Map in der Mitte ein reklektierendes Fenster hat. Es gibt dann statt einer großen zwei kleine Reflektionen auf dem Torus. Gibt es dazu auch eine Lösung?

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 11769
    • View Profile
    • http://www.jpct.net
metallische Oberflächen zusammengesetzter Körper
« Reply #3 on: March 06, 2006, 06:55:32 pm »
Und das ist anders, wenn das Objekt nicht zweigeteilt ist?

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« Reply #4 on: March 07, 2006, 10:41:15 am »
Ja, leider.  Ich habe ein Beispiel angefügt. Es sind zwei Tori, die zusammen einen Torus ergeben:
http://www.asgold.de/bilder/temp.jpg

Die Environment-Map ist auf beiden einzelnen Tori komplett abgebildet. Eigentlich müsste die Environment-Map auf jeden zur Hälfte abgebildet sein. Eine Lösung wäre natürlich die Environment-Map-Datei aufzuteilen in einzelne Hochkant-Segmente und je nach Breite auf die Tori aufsetzen, aber das ist glaube ich nicht besonders schön und bringt später viele Fehler.

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« Reply #5 on: March 07, 2006, 10:49:16 am »
Entschuldigung. Habe vergessen das gleiche Beispiel mit einem ganzen Torus mit anzugeben:
http://www.asgold.de/bilder/temp2.jpg

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 11769
    • View Profile
    • http://www.jpct.net
metallische Oberflächen zusammengesetzter Körper
« Reply #6 on: March 07, 2006, 06:22:59 pm »
Ok, ich verstehe jetzt, was du meinst. Das Problem liegt (wie schon angerissen) bei den Vertexnormalen. Was man machen müsste: Die Vertexnormalen der beiden Tori so ändern, dass sie denen eines einzelnen entsprechen. Mit jPCT kann man das mit einer Implementierung von GenericVertexController erreichen, die wird allerdings nicht ganz trivial.
Ich würde es etwa so angehen: Einzeltorus nehmen und mit einem GenericVertexController die ganzen Normalen inkl. der Vertexkoordinaten selber rausziehen. Dann einen weiteren GenericVertexController auf die beiden Tori ansetzen, der für jeden Vertex eines Halbtorus' einen aus der gemerkten Liste der Vertices des Einzelobjekts ermittelt, der von den Koordinaten her möglichst ähnlich ist. Von diesem die gemerkte Normale nehmen. Das kann klappen, wenn die beiden (bzw. drei) Objekte an sich sehr ähnlich (nur eben mittig geteilt) sind. Ob das hier so ist...keine Ahnung, dazu müsste ich ein Drahtgitter sehen.
Ansonsten könnte man die Normalen auch komplett "von Hand" neu berechnen, aber das klingt zumindest erstmal nach noch mehr Aufwand.

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« Reply #7 on: March 08, 2006, 09:29:39 am »
Vielen Dank. Werde mal das versuchen. Hab' aber eine letzte Frage: Geht mit jpct auch echtes Bump Mapping?

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 11769
    • View Profile
    • http://www.jpct.net
metallische Oberflächen zusammengesetzter Körper
« Reply #8 on: March 08, 2006, 07:14:14 pm »
Quote from: "ender"
Geht mit jpct auch echtes Bump Mapping?
Was meinst du mit "echt"? Unter Angabe von Normalmaps? Dann nein, es geht "nur" das environmental mapped BM des Softwarerenderers und das auch nur dort.

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« Reply #9 on: March 09, 2006, 10:19:07 am »
Ich meine Bump Mapping wie bei
http://de.wikipedia.org/wiki/Bump_Mapping

Ich möchte nämlich einen Torus bestehend aus verschiedenen metallischen Materalien darstellen. Diese Materialien sind entweder glänzend oder auch nicht glänzend. Die nichtglänzenden Oberflächen sollen wie sandgestrahlt oder wahlweise wie mattgeschliffen aussehen. Die glänzenden Materialen lassen sich gut durch Environment-Mapping realisieren. Die nichtglänzenden Oberflächen, die eine Oberflächen-Struktur  haben, ließen sich gut durch Bump-Mapping realisieren. Es ist sicher auch eine Frage der Performance. Mir würde es reichen, wenn man aufgrund von Performance-Problemen einen Snapshot  der Szene erhalten könnte. (Ich möchte kein Spiel programmieren, sondern ein Programm mit dem so ein Torus konfiguriert und möglichst realistisch dargestellt werden kann.)
Planst Du irgendwann echtes Bump-Mapping? Oder kann man es mit Hilfe von JPCT mit entsprechendem Programmieraufwand realisieren?

Offline EgonOlsen

  • Administrator
  • quad
  • *****
  • Posts: 11769
    • View Profile
    • http://www.jpct.net
metallische Oberflächen zusammengesetzter Körper
« Reply #10 on: March 09, 2006, 05:44:40 pm »
Naja, also du kannst mit dem vorhandenen Bumpmapping schon Strukturen simulieren, sofern du dich auf den Softwarerenderer beschränkst. Die Strukturen nicht nur nicht korrekt ausgeleuchtet, sondern eher ein Fake...wobei es auf die verwendete Bumpmap ankommt, wie gut oder schlecht es aussieht. Hier ein kleines Beispiel: http://www.jpct.net/download/bumpdemo.zip

Offline ender

  • byte
  • *
  • Posts: 7
    • View Profile
metallische Oberflächen zusammengesetzter Körper
« Reply #11 on: March 09, 2006, 06:28:20 pm »
Ich glaube das sieht gut aus. Ich werde es mit einem Torus mal probieren. Vielen Dank.