Dies ist die Norm: Was sind normale Karten und wie funktionieren sie?

Ich habe mehrere Jahre lang versucht, die normalen Karten und die Probleme zu verstehen, die normalerweise bei der Arbeit mit ihnen auftreten.

Die meisten ErklÀrungen, die ich fand, waren zu technisch, unvollstÀndig oder zu kompliziert, als dass ich sie hÀtte verstehen können. Deshalb beschloss ich, die von mir gesammelten Informationen zu erklÀren. Ich verstehe, dass diese ErklÀrungen möglicherweise unvollstÀndig oder nicht ganz korrekt sind, aber ich werde es trotzdem versuchen.

Die ersten von Menschen erstellten 3D-Modelle sahen ungefĂ€hr so ​​aus:

Bild

Das ist großartig, aber ein solches Modell hat eine offensichtliche EinschrĂ€nkung: Es sieht zu polygonal aus.

Die naheliegendste Lösung: FĂŒgen Sie mehr Polygone hinzu, um die OberflĂ€che gleichmĂ€ĂŸiger und glatter zu machen, bis die Polygone als einzelne glatte OberflĂ€che erscheinen. Es stellt sich jedoch heraus, dass Sie (besonders heute) eine große Anzahl von Polygonen benötigen, um OberflĂ€chen wie Kugeln glatt zu machen.

Bild

Eine andere Lösung war nötig, und so wurden die Normalen erfunden. (Ganz so ist es nicht passiert, aber es ist einfacher zu erklÀren und zu verstehen.)

Folgen wir der Linie von der Mitte des Polygons senkrecht zu seiner OberflÀche. Wir werden dieser Zeile einen sehr ungewöhnlichen Namen geben: normal. Das Ziel der Normalen besteht darin, zu steuern, wo die OberflÀche hinweist, sodass Licht, das von dieser OberflÀche reflektiert wird, die Normalen zur Berechnung der resultierenden Reflexion verwenden kann. Wenn Licht auf das Polygon trifft, vergleichen wir den Winkel des Lichtstrahls mit der Normalen des Polygons. Der Strahl wird im gleichen Winkel zur Normalenrichtung reflektiert:

Bild

Mit anderen Worten ist die Lichtreflexion in Bezug auf die Normalen des Polygons symmetrisch. So funktionieren die meisten Reflexionen in der realen Welt. StandardmĂ€ĂŸig werden Lichtstrahlen von allen Polygonen völlig senkrecht zu ihrer OberflĂ€che reflektiert (wie es im wirklichen Leben der Fall sein sollte), da die Polygonnormalen standardmĂ€ĂŸig senkrecht zur OberflĂ€che des Polygons stehen. Wenn es LĂŒcken in den Normalen gibt, werden wir sie als getrennte FlĂ€chen sehen, da das Licht in die eine oder andere Richtung reflektiert wird.

Bild

Wenn die beiden FlĂ€chen verbunden sind, können wir den Computer auffordern, den Übergang zwischen der Normalen eines Polygons zu einem anderen zu glĂ€tten, sodass die Normalen allmĂ€hlich in Übereinstimmung mit der nĂ€chsten Normalen des Polygons ausgerichtet werden. Wenn das Licht genau auf die Mitte eines Polygons trifft, wird es entsprechend der Richtung der Normalen direkt reflektiert. Zwischen den Polygonen wird diese normale Richtung geglĂ€ttet, wodurch sich die Lichtreflexion Ă€ndert.

Bild

Wir werden den Übergang als eine einzelne OberflĂ€che wahrnehmen, da das Licht zwischen dem einen und dem anderen Polygon auf sanfte Weise reflektiert wird und es keine LĂŒcken zwischen ihnen gibt. TatsĂ€chlich wird Licht von diesen Polygonen glatt reflektiert, als hĂ€tten wir viele Polygone.

Dies steuern wir, indem wir GlĂ€ttungsgruppen festlegen (3ds Max, Blender) oder Kanten als hart oder glatt festlegen (Modo, Maya): Wir teilen dem Programm mit, welche ÜbergĂ€nge zwischen FlĂ€chen glatt und welche hart sein sollen.

Hier ist ein Vergleich einer Kugel von 288 Polygonen mit harten und glatten ÜbergĂ€ngen:

Bild

Potenziell können wir so etwas wie ein Parallelepiped so spezifizieren, dass alle seine Scheitelpunkte gemittelte Normalen haben. Der 3D-Editor bemĂŒht sich, seine OberflĂ€che so zu glĂ€tten, dass sie wie eine einzige glatte OberflĂ€che aussieht. FĂŒr einen 3D-Editor ist dies ziemlich logisch, aber es sieht sehr seltsam aus, da wir ein Objekt haben, das offensichtlich mehrere separate OberflĂ€chen haben sollte (jede Seite der Box). Das Programm versucht jedoch, sie als eine glatte OberflĂ€che anzuzeigen.

Bild

Aus diesem Grund haben 3D-Editoren normalerweise einen Parameter zum GlĂ€tten von Winkeln: Wenn zwei verbundene Polygone in einem Winkel ĂŒber dem GlĂ€ttungswinkel liegen, ist der Übergang glatt und die Verbindungspolygone in einem Winkel, der kleiner als der GlĂ€ttungswinkel ist, sind steif. Dadurch werden steile Winkel zwischen OberflĂ€chen wie in der realen Welt als unterschiedliche OberflĂ€chen dargestellt.

Wir haben also die Normalen verwendet, um die ÜbergĂ€nge zwischen den FlĂ€chen des Modells zu steuern, aber Sie können noch weiter gehen.

Da wir die Art und Weise Àndern, wie Licht von einem Objekt reflektiert wird, können wir auch ein sehr einfaches Objekt dazu bringen, Licht als komplex zu reflektieren. Dies wird als normale Karte bezeichnet. Wir verwenden eine Textur, um die Richtung des von einem 3D-Objekt reflektierten Lichts zu Àndern, sodass es hÀrter aussieht als es wirklich ist.

Ein Beispiel aus der realen Welt sind die Hologramme, die bisher beim Kauf von Kartoffelchips (zumindest hier in Spanien) geschenkt wurden. Sie sind vollstĂ€ndig flach, reflektieren das Licht jedoch so, wie es ein 3D-Objekt tun wĂŒrde, was es schwieriger macht, als es wirklich ist. In der Welt der 3D-Grafik funktioniert dies noch besser, hat aber immer noch seine Grenzen (da die OberflĂ€che flach bleibt).

Obwohl wir die Polygonnormalen verwenden, um eine Art schwarze Magie zu implementieren, steuern wir die GlÀttung der ModelloberflÀche nicht mithilfe der Polygonnormalen. Wir verwenden Vertexnormalen, um die GlÀttung von Normalen zu steuern. Im Wesentlichen ist die Idee die gleiche, aber etwas komplizierter.

Jeder Scheitelpunkt kann einer oder mehreren Normalen zugeordnet werden. Wenn es eine Normale hat, können wir sie die gemittelte Normale des Scheitelpunkts nennen, und wenn mehrere - dann die geteilte Normale des Scheitelpunkts.

Nehmen wir zwei Polygone, die durch eine Kante verbunden sind. Wenn der Übergang zwischen zwei FlĂ€chen glatt ist (wenn wir ihn in Maya / Modo als glatt angegeben haben oder beide die gleiche GlĂ€ttungsgruppe in Max / Blender haben), hat jeder Scheitelpunkt eine Normale, die die Durchschnittsnormale der Polygone ist (weshalb sie als Durchschnittsnormale des Scheitelpunkts bezeichnet wird) ) Wichtiger Hinweis: Bis vor kurzem hat jeder 3D-Editor die Durchschnittsnormalen von Scheitelpunkten auf seine eigene Weise berechnet, d. H. Normale Karten, die in einem Programm in einem anderen berechnet wurden, können völlig anders aussehen. Im zweiten Teil des Tutorials werde ich Ihnen mehr darĂŒber erzĂ€hlen.

Bild

Wenn der Übergang hart ist (harte Kante oder verschiedene GlĂ€ttungsgruppen), hat jeder Scheitelpunkt mehrere Normalen: eine fĂŒr jeden verbundenen Scheitelpunkt, der entsprechend seiner Normalen ausgerichtet ist. In diesem Fall entsteht eine LĂŒcke zwischen den Normalen, die wie zwei verschiedene FlĂ€chen aussieht. Dies ist das, was als Split Vertex Normal bezeichnet wird.

Bild

Bild

Wie Sie vielleicht erraten haben, ist die normale Kontrolle der Scheitelpunkte sehr wichtig, wenn wir normale Karten kontrollieren möchten. GlĂŒcklicherweise mĂŒssen wir die Normalen nicht direkt Ă€ndern oder sogar sehen. Wenn Sie jedoch wissen, wie sie funktionieren, können Sie besser verstehen, warum wir diese Arbeit ausfĂŒhren, und die Probleme, auf die wir möglicherweise stoßen, besser verstehen.

Beim Backen einer normalen Karte weisen wir das Programm im Wesentlichen an, die Richtung zu Àndern, in der die Normalen des Lowpoly-Modells verlaufen, sodass sie der Richtung im Highpoly-Modell entsprechen. Daher reflektiert das Lowpoly-Modell das Licht auf die gleiche Weise wie Highpoly. Alle diese Informationen werden in einer Textur gespeichert, die als normale Karte bezeichnet wird. Schauen wir uns ein Beispiel an.

Nehmen wir an, wir haben ein solches Low-Poly-Modell (Low-Poly). Eine flache OberflÀche mit vier Eckpunkten und UV-Einstellungen, mit denen das Backprogramm eine normale Karte erstellt.

Bild

Und sie muss Informationen ĂŒber Normalen von diesem High-Poly-Modell erhalten, dessen Normalen komplizierter sind.

Bild

Denken Sie daran, dass wir nur Informationen ĂŒber Normalen ĂŒbertragen, d. H. UV, Material, Topologie, Transformationen usw. nicht relevant. BewĂ€hrte Regel: Wenn das Highpoly-Modell gut aussieht, sind auch seine Normalen gut und sollten zum Backen geeignet sein.

Das Backprogramm nimmt ein Lowpoly-Modell auf und strahlt Strahlen aus, die den Richtungen der Lowpoly-Normalen folgen (weshalb wir die Lowpoly-Normalen kontrollieren mĂŒssen). Diese Strahlen haben eine begrenzte LĂ€nge, um keine normalen Informationen von entfernten RĂ€ndern zu erhalten (normalerweise wird diese Distanz als Backdistanz oder KĂ€figdistanz bezeichnet). Wenn diese Strahlen mit HighPoly kollidieren, berechnet das Backprogramm, wie diese Strahlen reflektiert werden, damit sie der Richtung der HighPoly-Normalen folgen, und speichert diese Informationen in der normalen Karte.

Bild

Hier ist das Backergebnis fĂŒr unser Beispiel:

Bild

Wir haben eine Textur, mit der der Motor die Lowpoly-Normalen so Àndert, dass das Licht von diesem Lowpoly-Modell genauso reflektiert wird wie von der Highpoly-Version. Vergessen Sie nicht, dass dies nur eine Textur ist, die die Silhouette des Lowpoly-Modells nicht beeinflusst (es ist unmöglich, die Art und Weise zu Àndern, in der das Licht vom Modell reflektiert wird, wenn das Licht nicht auf dieses Modell fÀllt).

Obwohl es klar ist, dass man das Erscheinungsbild von HighPoly durch das Erscheinungsbild von normalen Karten „zĂ€hlen“ kann, ist es offensichtlich, dass normale Karten keine gewöhnlichen Texturen sind, da sie Informationen nicht ĂŒber Farben, sondern ĂŒber Normalen speichern. Dies bedeutet auch, dass normale Karten nicht als normale Texturen betrachtet werden können. DarĂŒber hinaus haben sie, wie wir sehen werden, spezielle Kompressions- und Gammakorrekturparameter.

Sie können die normale Karte als einen Satz von drei Texturen in Graustufen wahrnehmen, die in einem Bild gespeichert sind:

Bild

Das erste Bild zeigt dem Motor, wie dieses Modell das rechts einfallende Licht reflektieren soll. Es wird im roten Kanal der normalen Kartentextur gespeichert.

Das zweite Bild zeigt dem Motor, wie das Modell das von unten einfallende Licht reflektieren soll *; Es wird im grĂŒnen Kanal der normalen Kartentextur gespeichert.

* In einigen Programmen fÀllt das Licht nicht von unten, sondern von oben, d. H. Es gibt möglicherweise normale Karten auf der linken und rechten Seite. Wie wir spÀter sehen werden, kann dies einige Probleme verursachen.

Das dritte Bild zeigt dem Motor, wie das Modell das von vorne einfallende Licht reflektieren soll. Es wird im blauen Kanal der normalen Kartentextur gespeichert. Da die meisten Objekte bei Beleuchtung von vorne weiß erscheinen, erscheinen normale Karten normalerweise blĂ€ulich.

Wenn wir alle drei Bilder zu einem kombinieren, erhalten wir eine normale Karte. Denken Sie daran, dass diese ErklÀrung nicht ganz richtig ist, aber ich hoffe, dass Sie damit die in der normalen Karte gespeicherten Informationen besser verstehen und verstehen können, was sie bewirkt.

Um zusammenzufassen:

Normalen sind Vektoren, mit denen bestimmt wird, wie Licht von einer OberflĂ€che reflektiert wird. Sie können verwendet werden, um den Übergang zwischen FlĂ€chen zu steuern (indem die Normalen verbundener Scheitelpunkte gemittelt werden, um einen glatten Übergang zu erstellen, oder um sie zu trennen, um einen starren Übergang zu erstellen). Sie können jedoch auch ihre Richtung Ă€ndern, sodass das Lowpoly-Modell das Licht auf dieselbe Weise wie ein komplexeres Modell reflektiert.

Diese Informationen werden in drei separaten BildkanÀlen gespeichert, und ein 3D-Editor liest sie, um zu verstehen, in welche Richtung die OberflÀche des Modells aussehen soll.

Im nÀchsten Artikel der Serie wird erlÀutert, wie diese Teile vom High-Poly-Modell in Low-Poly-Teile gebacken werden.

Source: https://habr.com/ru/post/de481480/


All Articles