d3d - UV Koordinaten werden nicht korrekt übernommen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • d3d - UV Koordinaten werden nicht korrekt übernommen

    Sers,

    in meinem Nebenprojekt will ich Modelle mit UV Koordianten laden. Meine Modelle erstelle ich mit Blender, dann (da ich mich mitz dem Texturieren in Blender noch nicht auskenne) erstelle ich mit UV Mapper eine UV Map, meistens ne cubemap.
    Dannach lade ich das OBJ (wavefront) in das Programm GMModelFix. Wenn ich dann dorrt die Textur lade, wird sie korrekt dargestellt. Nur im Game Maker Studio sin d die UV Koordinaten falsch!
    Ich habe schon alles Mögliche ausprobiert, es will einfach nicht klappen. Dabei mache ich nix anders wie sonst und da ging es auch.
    Allerdings hab ich vor Kurzem auf Version 1.4.1749 upgedatet. Ich ärger mich grün und balu weil ich seit 4 Stunden (meiner kostbaren Lebenszeit) es erfolglos probiere!

    Kann mir jemand helfen?

    Schon mal danke
  • Es kann sein dass die UV-koordinaten auf der y-achse gespiegelt sind. (Kann nicht genau sagen wie GMModelfix das handhabt und ob er vor dem export die koordinaten spiegelt oder nicht.)
    Ich habe aus diesem Grund einen .obj importer geschrieben der mit blender modellen funktioniert und die uv-koordinaten gleich beim import spiegelt um sie auch korrekt darzustellen.
  • @ LEWA: Mit deinem Skript hat erst mal gar nix mehr gefunzt. Da musste ich erst mal herausfinden, dass ich bei Blender "Poke Face" auf die Faces des Models anwenden muss und die Normalen mit exportieren musss. Aber die Texture ist immer noch falsch, ich hab keine Ahnung warum. Hab auch schon texture_set_repeat an/aus gemacht und das Häkchen bei "use for 3d" bei dem Background an/aus gemacht (falls das was bewirken sollte).

    @ chris987: Ich probier jetzt mal dein Objektformat aus :)
  • Bist du dir sicher dass du beim Export auch die richtigen einstellungen in Blender vorgenommen hast?


    Hier ist der Link zum Thread und einer anleitung wie man das Modell exportieren soll: KLICK

    Es könnte natürlich sein dass sich GM Studio mit einem Update eine Änderungen bei den Verhaltensweisen von ds_lists durchgeführt hat (kann mich errinern das da mal was war.)
    Falls es probleme geben sollte, reicht es aus einfach die normals und uv-koordinaten immer zu exportieren, selbst wenn man sie nicht verwendet. (So fügt der Skript nicht irgendwelche default werte ins modell rein was zu problemen führen kann.)

    Der Skript sollte ansich auch funktionieren, da ich ihn zurzeit auch verwende und dieser keinerlei Probleme macht. (zumindest keine die mir Bekannt sind.)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von LEWA ()

  • Es will immer noch nicht klappen.

    Meine Vorangehensweise: Model erstellen mit Blender ---> als OBJ exportieren mit den Einstellungen wie auf der Abbildung ---> in UV Mapper laden, cubemap erstellen, wieder als OBJ abspeichern mit default Einstellungen -----> fertig

    Ist das falsch?


    edit: das mit den Triangulate Faces hatte ich nicht gelesen / überlesen. Daran lag das wohl vorhin mit dem gar nicht Sehen des Models. Die Funktion "Poke Faces" in Blender macht aber anscheinend nix anderes.
  • Morpheus schrieb:

    Es will immer noch nicht klappen.

    Meine Vorangehensweise: Model erstellen mit Blender ---> als OBJ exportieren mit den Einstellungen wie auf der Abbildung ---> in UV Mapper laden, cubemap erstellen, wieder als OBJ abspeichern mit default Einstellungen -----> fertig

    Ist das falsch?


    edit: das mit den Triangulate Faces hatte ich nicht gelesen / überlesen. Daran lag das wohl vorhin mit dem gar nicht Sehen des Models. Die Funktion "Poke Faces" in Blender macht aber anscheinend nix anderes.


    Wenn du das obj-modell aus blender exportiertst, brauchst du es nurnoch mit dem gml script im GM laden. Du brauchst keine andere Third-party software um das obj-modell nochmal abzuspeichern. (wenn du das tust, könnte das .obj modell sich intern ändern was dann zu unerwarteten ergebnissen führen kann.) Ich habe den gml loader so programmiert dass er die .obj modelle die von Blender erstellt wurden direkt laden kann. (Der skript übernimmt auch das Spiegeln der UV-koordinaten auf der Y-achse.)

    Es ist notwending "Triangulate Faces" zu aktivieren, da diese Option dazu führt dass die Polygone in Triangles aufgespalten werden falls Quads vorhanden sind. (das .obj format unterstützt Quads, diese werden aber von meinem loader nicht unterstützt wodurch es notwendig ist diese in Triangles aufzuspalten.)

    Morpheus schrieb:

    Die Funktion "Poke Faces" in Blender macht aber anscheinend nix anderes.

    Mir ist keine "Poke Faces" funktion in Blender bekannt. Was genau macht sie bzw. wo genau kann ich die finden?
  • Hab die Funktion gerade nachgeschaut. Was die zu machen scheint ist Quads (falls welche vorhanden sind) in Triangles so aufzuspalten, sodass diese eine "Fan"-Struktur ergeben. (Dadurch sollte das Modell schon in triangles aufgespalten werden.)
    Du kannst aber Polygone sparen indem du unter Faces die "Triangulate Faces" Option verwendest. (was defakto dasselbe ist was der obj-exporter anwendet wenn du unter "triangulate Faces" das häkchen setzt.)
  • Also Lewa, ich bin dir für deine Hilfe schon mal dankbar aber dennoch hab ich das mit der Textur noch nicht hinbekommen. Vielleicht stell ich mich einfach dumm an^^

    Variante 1:
    Hab ein Model mit Blender ertsellt ----> Lade es in UV Mapper, erstelle ne cubemap und speicher das Model ab -----> lade es wieder in Blender, erstelle ein Material, erstelle eine Textur (an dieser Stelle muss ich sagen, hab ich gestern hinbekommen, das die Textur wenigstens in Blender korrekt ist. Bin der der Meinung ich hätte bei Mapping Box und UVs ausgewählt gehabt. Geht aber heute nicht mehr so o0) ----> exportiere das Model als OBJ mit den Einstellungen wie du erklärt hast, nur dass ich auch ein Häkchen bei "Include UVs" setze ------------------------> im GMS: Textur ist falsch!

    Varinate 2:
    Ich verzichte gänzlich auf die Verwendung eines ThirdParty-Programms wie den UV Mapper. Ich mache das im Blender indem ich das Model abwickle (unwrap) und dadurch ne eigene UV Map erstelle. Doch wie mache ich das bei einem Komplexen Model am Besten? Meine bisherigen Versuche waren die, dass ich alle Edges markiere -------> Mark Seam -------> unwrap (z.B. cube projection) -------> wenn ich dann UV Image Editor das Ergebnis anschaue, sieht das ganze ziemlich verwirrend aus. Wie soll man da wissen was was ist?
  • Hast du schon probiert die Textur im GMS vertikal zu mirroren? Das muss ich nämlich immer machen, damit die Textur korrekt dargestellt wird.

    Du kannst beim Manuellen unwrappen auch zuerst nur den einen Teil des Models unwrappen, dann die UVs skalieren und hinschieben wo du sie auf der UVTexture haben willst, dann was anderes vom Modell markieren und das unwrappen usw. Das geht auch wenn du zwei verschiedene Objekte hast, unwrappest und dann joinst, dann vereinigen sich deren UVmaps. Du musst also nicht alles auf einmal unwrappen lassen. <- das wusste ich auch erst durch @LEWA

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Morpheus schrieb:

    Also Lewa, ich bin dir für deine Hilfe schon mal dankbar aber dennoch hab ich das mit der Textur noch nicht hinbekommen. Vielleicht stell ich mich einfach dumm an^^

    Variante 1:
    Hab ein Model mit Blender ertsellt ----> Lade es in UV Mapper, erstelle ne cubemap und speicher das Model ab -----> lade es wieder in Blender, erstelle ein Material, erstelle eine Textur (an dieser Stelle muss ich sagen, hab ich gestern hinbekommen, das die Textur wenigstens in Blender korrekt ist. Bin der der Meinung ich hätte bei Mapping Box und UVs ausgewählt gehabt. Geht aber heute nicht mehr so o0) ----> exportiere das Model als OBJ mit den Einstellungen wie du erklärt hast, nur dass ich auch ein Häkchen bei "Include UVs" setze ------------------------> im GMS: Textur ist falsch!

    Varinate 2:
    Ich verzichte gänzlich auf die Verwendung eines ThirdParty-Programms wie den UV Mapper. Ich mache das im Blender indem ich das Model abwickle (unwrap) und dadurch ne eigene UV Map erstelle. Doch wie mache ich das bei einem Komplexen Model am Besten? Meine bisherigen Versuche waren die, dass ich alle Edges markiere -------> Mark Seam -------> unwrap (z.B. cube projection) -------> wenn ich dann UV Image Editor das Ergebnis anschaue, sieht das ganze ziemlich verwirrend aus. Wie soll man da wissen was was ist?


    Du brauchst auf ein Mesh kein material anzuwenden um die Textur zu sehen. Was ich immer mache ist ein Fenster des UV-image editors in Blender zu öffnen und das model dort zu uv-unwrappen.
    Wenn du dann im UV-image editor ein Bild (sprich deine Textur) ladest, wird die Textur (mitsamt den UV koordinaten) auf dein Mesh angewendet und du wirst die textur auch auf dem Mesh sehen. (ich glabue du wirst das per default plazierte licht in der szene aber löschen müssen da sonst die belichtung aktiv ist und du die textur nicht gut sehen können wirst.)

    Zum uv-unwrappen:
    Markiere nicht alle edges mit "Mark Seam". Du brauchst die Funktion nur wenn du stellen angeben möchtest auf denen das 3D mesh aufgespalten werden soll.
    Wenn du dir eine Kugel (nur als beispiel) vorstellst, und du diese auf eine 2D ebene projezieren möchtest, musst du sie irgendwo "aufschneiden" sodass sich diese dann wie ein Blatt papier auf eine gerade fläche legen lässt sodass du diese dann wiederum bemalen kannst.
    Beim Würfel ist es ähnlich:


    Man versucht dabei immer die bestmögliche Art und Weise zu finden wo man die "Schnitte" (mithilfe der Seams) durchführt um das Mesh so elegant wie nur möglich auf die 2D fläche zu projezieren



    Uv-mapping ist aber eine eigene Wissenschaft für sich (vor allem bei komplexeren Models.) Wenn du da also wirklich auf eigene Faust modellieren, uv-mappen und texturieren möchtest, wirst du nicht drumherum kommen sich sowas von erfahreneren Artists abzuschauen und von ihnen zu lernen. :) (Tutorials oder ähnliches.)

    Aku_Ryou schrieb:

    Hast du schon probiert die Textur im GMS vertikal zu mirroren? Das muss ich nämlich immer machen, damit die Textur korrekt dargestellt wird.

    Du kannst beim Manuellen unwrappen auch zuerst nur den einen Teil des Models unwrappen, dann die UVs skalieren und hinschieben wo du sie auf der UVTexture haben willst, dann was anderes vom Modell markieren und das unwrappen usw. Das geht auch wenn du zwei verschiedene Objekte hast, unwrappest und dann joinst, dann vereinigen sich deren UVmaps. Du musst also nicht alles auf einmal unwrappen lassen. <- das wusste ich auch erst durch @LEWA

    Das mit dem spiegeln der Textur auf der y-achse liegt daran dass der GM eine (im gegensatz zu anderer Software wie Blender) gespiegelte Y-achse hat.
    Deshalb musste man oftmals beim laden von 3D modelle (die z.B: von Blender/Maya/3dsmax) exportiert wurden die textur spiegeln um die gespiegelten Uv-koordinaten zu negieren.
    Fun fact: 3D modelle hatten dabei nicht nur gespiegelte UV-koordinaten, sondern waren auch auf der Y-achse gespiegelt. (Fiel aber nur auf wenn man asymetrische Models geladen hat.)

    Bei meinem .obj loader muss man das aber nicht machen, da dieser die uv-koordinaten (als auch die vertices) wieder entspiegelt sodass die textur korrekt dargestellt wird. (aus diesem grund muss aber texture_set_repeat aktiviert sein.)

    /Edit: Wenn es bei dir weiterhin nicht klappt, kann ich mir das gerne genauer unter die lupe nehmen. (Falls du ein simples example hast wo dein obj modell geladen wird und der fehler dort auftaucht)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von LEWA ()

  • Vielen Dank LEWA für deine fachkompetete und grafisch verdeutlichte EInführung in das Thema.

    Aber Leute... Leute... mein Problem war ein gaaanz Anderes. Es hat sich herausgestellt, dass ich unter "Global Game Settings" ---> "Windows" ---> "Graphics" ---> "Texture Pages" ---> eine zu kleine Größe ausgewählt hatte. Dadurch wurde die Textur anscheinend wiederholt und für mich (noch so halben) 3d Noob sah es so aus als seien die UV Koordinaten falsch. Darum hat natürlich nix klappen wollen. Jeder der das hier ließt darf jetzt mal herzhaft über meine Unwissenheit lachen! :D