Meine Frage ist, was in Titel geschrieben steht. Dieser Begriff "Scheitelpunktfarbe" taucht häufig auf. Es fällt mir schwer, das zu verstehen.
Beispielsweise:
Ist ein Eckpunkt nicht ein einfacher Punkt im 3D-Raum? Wenn ja, wie kann ein Punkt eine Farbe haben? Oder bedeutet diese "Farbe" etwas anderes?
Es gibt einen Knoten "Vertex Color" im Materialeditor der unreal engine.
Kann jemand meine Frage beleuchten? Ich konnte nichts Nützliches finden, als ich "Was ist eine Scheitelpunktfarbe" googelte, aber die Dokumentationen, die mir zu technisch sind.
vertex
terminology
Bora
quelle
quelle
Antworten:
Scheitelpunktfarben sind nicht so relevant, wenn Sie ein vollständig texturiertes 3D-Netz haben. Interessant wird es jedoch, wenn Sie ein unstrukturiertes, aber farbiges Netz haben. In diesem Fall weisen Sie jedem Scheitelpunkt eine Farbe zu. Der Shader färbt dann jedes Pixel eines Polygons durch Interpolation zwischen den Farben der drei Scheitelpunkte.
Scheitelpunktfarben können auch manchmal in Kombination mit Texturen interessant sein. Wenn Sie einen Schattierungsalgorithmus wie Gouraud Shading verwenden möchten, berechnen Sie einfach die Lichtintensität für jeden Scheitelpunkt, weisen dem Scheitelpunkt die Lichtfarbe als Scheitelpunktfarbe zu und multiplizieren beim Rendern der Textur den Farbwert jedes Texturpixels mit die interpolierten Farben. Auf diese Weise können Sie Lichtquellen im Vertex-Shader anstelle des Pixel-Shaders berechnen. Dies ist in der Regel weitaus schneller, da der Vertex-Shader in der Regel weitaus seltener ausgeführt wird.
quelle
Mit Vertex Color können Sie theoretisch ein Modell einfärben, ohne sich um Texturen kümmern zu müssen. Dies ist im CAD durchaus üblich.
In der Praxis ist es nur ein weiterer Slot, den Sie verwenden können, um Daten in den Scheitelpunkt zu verschieben, den Sie dann im Scheitelpunkt-Shader verwenden, um verrückte Dinge zu erledigen .
Das habe ich gedacht, als ich zum ersten Mal mit 3D angefangen habe. Ich habe schnell gelernt, dass ich falsch lag .
Sie können sich einen Scheitelpunkt als einen Datenfleck vorstellen, der eine Ecke eines Dreiecks bildet, das Sie auf dem Bildschirm zeichnen möchten (und weder der "Ecken" -Teil noch der "Dreieck" -, "Mal" - oder "Bildschirm" -Teil sind immer wahr ). Die Position ist eine -optionale - Aspekt dieses Datenblobs, den wir Vertex nennen.
Es gibt eine Menge, die Sie tun können, indem Sie dem Scheitelpunkt zusätzliche Daten hinzufügen. Das bekannteste Beispiel ist, dass Sie UV-Koordinaten hinzufügen können, um eine Textur auf dieses Dreieck zu zeichnen. Sie können (normalerweise) nicht entscheiden, welcher Teil einer Textur auf dem Dreieck gezeichnet werden soll, wenn Sie nur einen Punkt haben - Sie benötigen auch Texturkoordinaten.
Andere Standardbeispiele für den Inhalt dieses Blobs sind Normalen und Tangenten. Wichtig ist, dass alle optional sind, einschließlich der Position. Vertex Color ist nur eine dieser optionalen Eingaben, die Sie verwenden oder missbrauchen können, um ein hübsches Bild auf dem Bildschirm zu erstellen.
quelle
Scheitelpunkte können Farben haben, es ist eine Eigenschaft wie die normale davon.
In 3D-Umgebungen wird ein Dreieck basierend auf den Farbinformationen der Scheitelpunkte eingefärbt. Die Fragmente, die dem Scheitelpunkt A am nächsten sind, erhalten dessen Farbe, die Fragmente, die dem Scheitelpunkt B am nächsten sind, erhalten die Farbe von B, und die Farbe interpoliert zwischen den beiden.
Dies funktioniert genauso wie die Per-Vertex-Beleuchtung
Auf einfache Weise können Sie einem Modell Farben hinzufügen, ohne eine Textur zu verwenden.
quelle
Hier gibt es bereits solide Antworten - ich möchte nur auf eine weitere übliche Weise eingehen, bei der Scheitelpunktfarben verwendet werden:
Unterschiedliche Objektfarben (oder andere Attribute) innerhalb eines einzelnen Batch / Draw-Aufrufs.
Dies wird beim Rendern von Partikelsystemen, Text und gestapelten (normalerweise zusammengefassten) Sprites verwendet.
Stellen Sie sich vor, Sie haben einen Partikelemitter, der Partikel mit einer zufälligen Startfarbe erzeugt oder der im Laufe der Lebensdauer der Partikel auf 0 Alpha abfärbt. Wenn wir Shader-Uniformen zum Senden dieser Farbdaten verwenden würden, müssten wir jedes andersfarbige Partikel in einem eigenen Aufruf zeichnen, was das Partikelsystem erheblich verteuert. Stattdessen können wir diese Farben in die Scheitelpunktdaten für die Partikel einbrennen und den gesamten Stapel in einem einzigen Aufruf zusammen rendern.
Unity scheint diese Technik zur Variation der Partikelfarbe sowie zum Färben einzelner Zeichen in einem TextMesh oder Sprites zu verwenden, die in einem Stapel gerendert werden.
Ich glaube, Sie können mit Geometrieinstanzen etwas Ähnliches tun, aber ich weiß nicht, wie sich die beiden in der Leistung vergleichen lassen. Es ist heute möglich, dass diese Art der instanziierten Optimierung durch Vertex-Farben eher eine Verzögerung darstellt, um Hardware vor OpenGL 3.1 / DX9 wie einige Mobilgeräte zu unterstützen, als eine bewährte Methode für moderne PCs. Ich würde Kommentare von Leuten begrüßen, die mehr Performance-Optimierungen mit Batches und Instanzen durchgeführt haben, um zu klären, ob diese Techniken zu diesem Zweck Scheitelpunktfarben ersetzt haben. :)
quelle