Was sind die Nachteile, wenn beim Auspacken eines Netzes jede Kante als Naht markiert wird?

9

Ich bin ein Programmierer, der versucht, ein wenig grundlegende 3D-Modellierung zu lernen. Ich bin ziemlich vertraut mit der grundlegenden Geometriemodellierung und kann einfache Modelle auspacken und texturieren. Aber ich habe eine Frage ...

In allen Tutorials wird beim Auspacken von Modellen die Notwendigkeit hervorgehoben, beim Auspacken eines Netzes so wenig Nähte wie möglich zu markieren. Meine Frage ist, warum? Ich vermute, dass dies für Leute mit Modellierungserfahrung sehr offensichtlich ist, aber nicht für mich (da meine Texturierungsbemühungen hauptsächlich auf die Erzeugung von AO oder normalen Karten beschränkt sind).

Ich vermute, dass es nur darum geht, die Form des Modells zu erhalten, wenn es darum geht, die diffuse Textur zu bearbeiten. Ist das der einzige Grund, warum Sie nicht einfach jede Kante abschneiden und alle Flächen einzeln auslegen möchten?

Mir ist klar, dass ich meine völlige Unkenntnis des Themas zeige, wenn ich diese Frage stelle, also entschuldige mich, aber manchmal sind die überaus offensichtlichen Dinge am schwierigsten, Antworten auf  zu finden.

NM01
quelle

Antworten:

10

Jede "UV-Naht" in Ihrem Modell - dh jeder Ort, an dem die Flächen des Modells durchgehend sind, während die UV-Karte für dieselbe Kante geschnitten wird - ist sowohl für die Künstler als auch für die Hardware ein Problem.

  • Es macht es schwieriger, das Modell richtig zu texturieren. Dies gilt insbesondere dann, wenn die Bearbeitung der Textur direkt in 2D und nicht in einem 3D-Malprogramm erfolgt. Je weniger solche Nähte vorhanden sind, desto einfacher ist es, die Textur mental um das Modell zu wickeln.
  • Während einfaches Mischen für die diffuse Textur und einige andere Texturarten funktionieren kann, müssen Sie mit Dingen wie einer Tangentenraum-Normalkarte sehr vorsichtig sein. Für diese können Sie die X- und Y-Werte (normalerweise in Textur-Viewern auf R und B abgebildet) nicht einfach linear mischen (interpolieren), ohne dass der resultierende Normalvektor de-normalisiert und die Naht sichtbar wird (normalerweise etwas dunkler) "Linie") unter bestimmten Lichtbedingungen. Auf der anderen Seite kann der Versuch, die Textur zu fixieren und die Werte an beiden UV-Kanten nahe beieinander oder gleich zu halten, dazu führen, dass die Naht sichtbar wird, da sie im Vergleich zum Rest des Modells unnatürlich flach ist.
  • Die Pixel-Shader müssen bei jeder Diskontinuität mehr Arbeit leisten (auch wenn dies heutzutage normalerweise in der Hardware abstrahiert ist) und auf verschiedene Speicherplätze zugreifen, um die Texturdaten abzurufen (was normalerweise der weniger optimierte "Codepfad" in der Hardware ist). im Gegensatz zum Arbeiten mit räumlich engen Texturwerten.
  • Das automatische Mipmapping (und nur wenige Geschäfte können es sich leisten, die generierten Texturen mit niedrigerer Auflösung manuell zu bearbeiten) unterbricht die harte Arbeit, die Sie und Ihre Künstler geleistet haben, um eine Naht bei der Standardauflösung unsichtbar zu machen.

Das heißt: Wenn Ihr Kunststil vorschreibt, dass die Modellflächen klar voneinander verschieden sind und immer nur "harte", explizite Kanten haben, ist nichts davon ein Problem.

Martin Sojka
quelle
Hervorragender Punkt zu den inkohärenten Speicherzugriffen im Pixel-Shader. Wenn Sie durch eine solche Textur springen, wird der Textur-Cache wirklich verworfen.
Bob Somers
@ Bob Somers: Um fair zu sein, wird dies kein großer Leistungseinbruch sein, es sei denn, Sie programmieren entweder für eine Low-End- oder eine mobile Plattform oder Sie besteuern die GPUs bereits maximal.
Martin Sojka
Guter Punkt Martin. Ich lebe seit einem Jahr im GPGPU-Land und schreibe leistungsempfindlichen Code. Daher dachte ich, dass dies ein interessanter Punkt ist, der nicht sofort offensichtlich ist. :)
Bob Somers
6

Zwei wichtige Gründe sind die unverpackten Textur- und Kantenartefakte .

Wie Sie bereits erwähnt haben, kann es für einen Künstler sehr schwierig sein, zu verstehen, wie sich seine 2D-Bearbeitungen um das 3D-Modell drehen, wenn die Nähte keinen Sinn ergeben. In dem Fall, in dem jedes Gesicht getrennt und mit einer Art Bin-Packing-Algorithmus optimal platziert wurde, wäre es nahezu unmöglich, die Textur von Hand zu bearbeiten. Hoffentlich verwenden sie heutzutage eine Art 3D-Malwerkzeug, aber es ist immer noch schön (und notwendig!), Änderungen direkt an der 2D-Textur vorzunehmen.

Das andere Problem (Kantenartefakte) kann aufgrund von Einschränkungen der Gleitkommapräzision bei der Texturabtastung auftreten. Nehmen wir an, die Gesichter sind alle getrennt auf einem schwarzen Hintergrund angeordnet. Aufgrund von Gleitkommafehlern in Ihren Texturkoordinaten oder während des Samplings auf der Grafikkarte ist es ziemlich wahrscheinlich, dass diese schwarzen Randpixel gelegentlich angezeigt oder eingeblendet werden, wenn die Textur gefiltert wird. Da dies jedes Gesicht betrifft, tritt dieser seltsame Hintergrund-Artefakt-Drahtgitter-Effekt auf. Die einzige Möglichkeit, dem entgegenzuwirken, besteht darin, die Texturkoordinaten künstlich etwas zu verkleinern, aber dann würde jedes Gesicht seltsam aussehen, da es texturell nicht ganz mit den Nachbarn übereinstimmt.

Das Schöne an der Minimierung von Nähten ist, dass in Ihrem Modell weniger Kanten vorhanden sind, an denen sich das Gesicht neben dem (nicht verwendeten) Hintergrund befindet, sodass sich weniger Stellen für diese Artefakte einschleichen können. Die meisten Gesichter befinden sich unmittelbar neben den benachbarten Gesichtern im Das tatsächliche Modell, sodass die Kantenartefakte tatsächlich benachbarte Pixel in der Textur sind und Sie sie nie bemerken werden.

Bob Somers
quelle