Vertex-Color vs. Materials

  • Hallo!


    Wir sind gerade dabei den Modelloader mit Assimp zu implementieren.
    Als wir nun die Materials importieren wollten, wurde nichts angezeigt. Doch als wir in Blender dem Modell eine Farbe pro Vertex gegeben haben (im Vertex Paint Modus) wurden sie korrekt dargestellt.


    Ich habe nur bisher gedacht, dass die Materials die Vertex-Colors sind..
    Was genau ist denn der Unterschied zwischen den beiden?
    Und wie kann ich mit Assimp die Materials importieren?


    Danke im Voraus!


    (Gruppe PieWarsReloaded)

  • Ein Material definiert dir Materialeigenschaften. Dazu gehören z.b. der Anteil des Lichtes, des bei Diffus-Beleuchtung "reflektiert" wird.
    Welche Eigenschaften genau durch das Material definiert werden, bestimmt ihr selbst durch euer Lighting-Modell.
    Mit anderen Worten: schreibt euch eine Klasse die ein Material repräsentiert, und speichert euch darin alles, was ihr braucht.


    Vertex-Colors gibt es auch noch. Sie gehören zu den Vertex-Daten (werden also pro Vertex gespeichert). Es wird immer unüblicher diese zu verwenden, da man Colors eben nur pro Vertex und nicht detaillierter speichern kann. Üblicher sind hier Texturen, welche mehr Details für eure Meshes erlauben.


    Materials selbst werden pro Mesh (oder genauer: pro Knoten in eurem scenegraph) gepeichert. Sie gelten also für einen gesamten (Sub-)Baum an Meshes (und damit Vertices).
    Meist ist es allerdings ausreichend ein Material pro Mesh zu definieren.


    Welches der beiden ihr verwendet ist schlussendlich euch überlassen. Materials braucht ihr allerdings um Textures mit eurem Meshes zu assoziieren (wenn ihr Assimp verwendet, und es nicht hard-coded).



    Materials werden von Assimp normalerweise mit der Scene geladen. Du musst sie dann nur auslesen.
    Hier ein Tutorial: http://www.lighthouse3d.com/cg…ng-3d-models-with-assimp/





    Zu eurem Problem: Ich würde versuchen eure Scene im AssimpLoader (oder ist der jetz anders benannt? auf jeden Fall das fertige Programm, welches mit Assimp mitgeliefert wird..) zu laden.
    Wenn es dort korrekt angezeigt wird, hat es auch Potential von euch korrekt dargestellt zu werden. Es kann durchaus sein, dass diverse Optimierungen euer Model zerstören.


    Wenn es dort nicht korrekt angezeigt wird, könntet ihr noch versuchen, die Scene in einem anderen Format zu speichern/laden.

    Florian Schober
    [former EVC-, ECG-, CGUE-, RTR-Tutor]

    Edited 2 times, last by Teretrus ().

  • Ist es normal dass bei einem von Assimp importierten ".obj" Modell mit nur 1 Mesh zwei Materials gibt? In dem Material mit Index 0 (gleicher Index wie Mesh) befinden sich die Material Eigenschaften des Mesh. Im Material mit Index 1 befindet sich die Textur auch mit den jeweiligen Eigenschaften und Path.


    Bezieht sich auf das "Cow.obj" Modell

  • Das Cow.obj file müsste folgende Daten enthalten:


    Materials:
    [0] Default Material
    [1] texture


    Meshes:
    [0] Mesh 1 (using Material[0] & Material[1])


    Scene:
    [0] Node (Instance of Mesh[0])



    Dass das Mesh 2 Materials verwendet ist vielleicht nicht direkt üblich, kann aber bei manchen Export-Settings passieren. In diesem Fall würde ich an deiner Stelle ein neues Material für das Mesh erstellen, indem du die alten beiden mergest (es sollte keine Conflicts geben - sprich keine Property in beiden Materials gesetzt sein - aber du kannst im Falle dass es doch so wäre das erste (vom Mesh gelistete) Material bevorzugen).


    Btw. Texture-Properties (inkl Path) sind auch Teil der Material Eigenschaften. Insofern befinden sich nicht alle Infos im Material Index 0.



    Material Indices und Mesh Indices sind (ohne weitere Relation) nicht von einander abhängig! Ein Mesh gibt immer zusätzlich an, welches Material es verwendet! (Und ein Scene-Knoten gibt an welches Mesh er verwendet.)


    Zeichnen solltet ihr eigentlich die Scene (außer es ist vom Designer/euch anders beabsichtigt).




    Edit: Nach erneutem Drüberschaun bin ich der Meinung dass du das "Default Material" (Materials[0]) ignorieren kannst.
    Schau vll nochmal nach, ob das Materials[0] wirklich dem Mesh zugeorgnet ist (leider zeigt AssimpView an, dass es so ist, aber andere Viewer ignorieren das Default-Material).


    Das Default-Material ist nicht vom Designer konfiguriert. Es ist da, ob man will oder nicht. Eigentlich sollte es von dem Mesh nicht referenziert werden, aber es kann schon sein dass es entweder schlecht exportiert wurde, oder dass AssimpView die Daten falsch/sonderbar interpretiert.

    Florian Schober
    [former EVC-, ECG-, CGUE-, RTR-Tutor]

    Edited 4 times, last by Teretrus ().