In diesem dritten Abschnitt, in dem wir uns eingehender mit der Erstellung von 3D-Spielen befassen, konzentrieren wir uns darauf, was nach der Eckenverarbeitung mit der 3D-Welt passiert und die Szene gerastert wird. Die Konfiguration ist eine der wichtigsten Phasen beim Rendern, obwohl alles, was passiert, berechnet und durch ein zweidimensionales Raster aus farbigen Blöcken ersetzt wird.

Die meisten visuellen Effekte, die heutzutage in Spielen zu sehen sind, hängen von der intelligenten Verwendung von Texturen ab - Spiele ohne sie werden langweilig und leblos. Also lass uns tauchen gehen und sehen, wie diese funktionieren!

Wie immer, wenn Sie nicht bereit sind, tief in das Gewebe einzutauchen, geraten Sie nicht in Panik - Sie können beginnen 3D-Spieleerstellung 101. Aber wenn die Grundlagen vorbei sind, lesen Sie weiter für unseren nächsten Blick auf die 3D-Grafikwelt.

Fangen wir einfach an

Wählen Sie die meistverkauften 3D-Spiele der letzten 12 Monate aus und alle haben etwas gemeinsam: Texturkarten (oder nur Texturen). Dies ist ein sehr gebräuchlicher Begriff. Die meisten Menschen erstellen das gleiche Bild, wenn sie Texturen betrachten: ein einfaches, flaches Quadrat oder Rechteck (Gras, Stein, Metall, Kleidung, Gesicht usw.), das ein Bild einer Oberfläche enthält.

Bei Verwendung in mehreren Ebenen und Kombination mit komplexer Arithmetik kann die Verwendung dieser Grundbilder in der 3D-Szene jedoch überraschend realistische Bilder erzeugen. Um zu sehen, wie dies möglich ist, überspringen wir sie vollständig und sehen, wie Objekte in der 3D-Welt ohne sie aussehen können.




Wie wir in früheren Artikeln gesehen haben, besteht die 3D-Welt aus Ecken - einfachen Formen, die später verschoben und eingefärbt werden können. Diese werden dann verwendet, um Grundelemente zu erstellen, die ebenfalls in das 2D-Pixelraster komprimiert werden. Da wir keine Texturen verwenden, müssen wir diese Pixel einfärben.




Es wird eine Methode genannt, die verwendet werden kann gerade SchattierungDabei wird die Farbe des ersten Scheitelpunkts der primitiven Substanz verwendet und diese Farbe dann für alle Pixel verwendet, die in den Bereich der Form im Raster fallen. Es sieht aus wie das:




Offensichtlich ist dies keine realistische Teekanne, zumindest ist die Oberflächenfarbe falsch. Farben springen von einer Ebene zur anderen, kein reibungsloser Übergang. Eine Lösung für dieses Problem könnte darin bestehen, etwas zu verwenden, das so genannt wird Gouraud-Schattierung.




Dies ist ein Prozess, bei dem die Farben der Ecken verwendet werden und berechnet wird, wie sich die Farbe auf der Oberfläche des Dreiecks ändert. Mathematik verwendet lineare InterpolationDies bedeutet, dass, obwohl es in Wirklichkeit schick aussieht, wenn die Farbe einer primitiven Seite 0,2 Rot und der anderen Seite 0,8 Rot ist, die Form eine Farbe zwischen 0,2 und 0,8 (d. H. 0,5) hat.

Es ist relativ einfach zu machen und sein Hauptvorteil ist die Geschwindigkeit. Viele frühe 3D-Spiele verwendeten diese Technik, da die Hardware, mit der die Berechnungen durchgeführt wurden, auf das beschränkt war, was sie konnten.




Aber auch dies hat seine Probleme, denn wenn ein Licht genau in die Mitte eines Dreiecks zeigt, können seine Ecken (Ecken) es möglicherweise nicht richtig erfassen. Dies bedeutet, dass durch Licht verursachte Glanzlichter vollständig übersehen werden können.




Während flache und Gouraud-Schattierungen im Render-Arsenal enthalten sind, sind die obigen Beispiele offene Kandidaten für die Verwendung von Texturen, um sie zu heilen. Und um ein gutes Verständnis dafür zu bekommen, was passiert, wenn eine Textur auf eine Oberfläche aufgebracht wird, sind wir in der Zeit zurück ... bis 1996.

Ein kurzes Spiel und eine GPU-Geschichte

Quake ist ein Meilenstein, der vor 23 Jahren veröffentlicht wurde id Software. Obwohl es nicht das erste Spiel war, das 3D-Polygone und -Texturen zum Erstellen der Umgebung verwendete, war es eines der ersten, das sie alle so effektiv nutzte.

Eine andere Sache, die er tat, war zu zeigen, was mit OpenGL gemacht werden konnte (die Grafik-API befand sich noch in der ersten Überarbeitung), und es war auch ein großer Beitrag zum Verkauf des ersten Grafikkartenprodukts. Sehr guter Kommentar ve 3Dfx Vudu.

Im Vergleich zu den heutigen Standards war Voodoo äußerst einfach: Keine Unterstützung für 2D-Grafiken, keine Eckenverarbeitung und nur die Grundlagen der Pixelverarbeitung. Es war immer noch eine Schönheit:

Es hatte einen ganzen Chip (TMU), um ein Pixel aus einer Textur zu erhalten, und dann einen anderen Chip (FBI), um es mit einem Pixel aus dem Raster zu mischen. Es kann ein paar zusätzliche Dinge tun, wie Nebel oder Transparenzeffekte, aber das war es fast.

Wenn wir einen Überblick über die Architektur geben, die hinter dem Design und der Funktionsweise der Grafikkarte steht, können wir sehen, wie diese Prozesse funktionieren.

Der FBI-Chip nimmt zwei Farbwerte und kombiniert sie. Einer von ihnen kann ein Wert aus einem Gewebe sein. Der Mischprozess ist mathematisch recht einfach, unterscheidet sich jedoch geringfügig zwischen dem, was genau verwechselt wird, und der API, die zum Ausführen von Anweisungen verwendet wird.

Was wir sehen Direct3D bietet In Bezug auf Mischfunktionen und Mischoperationen können wir sehen, dass jedes Pixel zuerst mit einer Zahl zwischen 0,0 und 1,0 multipliziert wird. Dies bestimmt, wie stark sich die Farbe des Pixels auf das endgültige Erscheinungsbild auswirkt. Die eingestellten zwei Pixelfarben werden dann addiert, subtrahiert oder dupliziert; In einigen Funktionen ist die Operation immer ein logischer Ausdruck, in dem so etwas wie das hellste Pixel ausgewählt wird.

Das obige Bild ist ein Beispiel dafür, wie dies in der Praxis funktioniert. des für das linke Pixel verwendeten Faktors Alpha Wert. Diese Nummer, transparent Pixel.

Der Rest der Schritte beinhaltet das Anwenden eines Nebelwerts (entnommen aus einer vom Programmierer erstellten Programmtabelle und führt dann die gleiche Mischmathematik aus). einige Sichtbarkeits- und Transparenzprüfungen und -anpassungen vorzunehmen; bevor Sie schließlich die Farbe des Pixels in den Speicher der Grafikkarte schreiben.

Warum Geschichtsstunde? Trotz der relativen Einfachheit des Designs (insbesondere im Vergleich zu modernen Giganten) erklärt der Prozess die grundlegenden Grundlagen der Texturierung: Holen Sie sich einige Farbwerte und mischen Sie sie, damit Modelle und Umgebungen sehen, wie sie in einer bestimmten Situation sein sollten.

Die heutigen Spiele tun dies immer noch. Der einzige Unterschied besteht in der Menge der verwendeten Textur und der Komplexität der Mischungsberechnungen. Zusammen simulieren sie die visuellen Effekte in Filmen oder wie Licht mit verschiedenen Materialien und Oberflächen interagiert.

Grundlagen der Texturierung

Für uns ist eine Textur ein flaches 2D-Bild, das auf Polygone angewendet wird, die 3D-Strukturen im angezeigten Rahmen bilden. Für einen Computer ist es nichts weiter als ein kleiner Speicherblock in Form eines 2D-Arrays. Jeder Eintrag im Array repräsentiert einen Farbwert für eines der Pixel im Texturbild (besser bekannt). Textfüller - Texturpixel).

Jeder Scheitelpunkt in einem Polygon hat normalerweise 2 Koordinaten sen, v) gibt an, welches Pixel in der Textur damit verknüpft ist. Die Ecke selbst hat 3 Koordinatensätze (X ve Z.) und Text in die Ecken eingeben. Textur-Mapping.

Um dies in Aktion zu sehen, wenden wir uns einem Tool zu, das wir in dieser Artikelserie mehrmals verwenden: Echtzeit-Erstellung WebGL Werkzeug. Zur Zeit, z Koordinieren Sie von den Ecken und halten Sie alles in einer flachen Ebene.

Wir haben die Textur von links nach rechts sen, v Koordinaten direkt auf Eckecken abgebildet x, y Koordinaten. Dann die oberen Ecken y Die Koordinaten wurden erhöht, aber da die Textur immer noch direkt auf sie abgebildet ist, wird die Textur nach oben gestreckt. Im Bild ganz rechts ändert sich diesmal die Textur: u Die Werte haben zugenommen, aber dies führt dazu, dass das Gewebe zerkleinert und dann wiederholt wird.

Weil die Textur jetzt effektiv länger ist, höher u Sein Wert sollte in das Grundelement passen - im Wesentlichen wurde die Textur teilweise wiederholt. Dies ist eine Möglichkeit, etwas zu tun, das in vielen 3D-Spielen zu sehen ist: twiederholen. Häufige Beispiele hierfür sind Szenen mit felsigen oder grasbewachsenen Landschaften oder Backsteinmauern.

Lassen Sie uns nun die Szene primitiver gestalten und die Tiefe des Spiels wieder herstellen. Was wir unten haben, ist eine klassische Landschaftsansicht, aber die Kistentruktur wird kopiert und unter den Grundelementen wiederholt.

Jetzt hat diese Kistentruktur 66 Kilo im ursprünglichen GIF-Format und eine Auflösung von 256 x 256 Pixel. Die ursprüngliche Auflösung des Teils des Rahmens, der von den Kistentexturen abgedeckt wird, beträgt 1900 x 680, sodass in diesem Bereich nur 20 Kistentrukturen in Bezug auf die Pixelfläche angezeigt werden sollten.

Wir nehmen offensichtlich mehr als 20 Wege, so viele Brusttexturen im Hintergrund sehr Kleiner als 256 x 256 Pixel. In der Tat sind und haben sie einen Prozess durchlaufen Gewebereduktion (Ja, das ist ein Wort!). Versuchen wir es noch einmal, aber diesmal kam es einer der Truhen näher.

Beachten Sie, dass die Textur nur 256 x 256 Pixel groß ist, aber hier können wir sehen, dass eine Textur mehr als die Hälfte der Breite eines 1900 Pixel breiten Bildes beträgt. Diese Textur ging durch etwas namens Gewebeaugmentation.

Diese beiden Texturprozesse treten in 3D-Spielen immer auf, da alle auf Grundelemente angewendeten Texturen zusammen mit Polygonen skaliert werden müssen, wenn sich die Kamera auf der Bühne bewegt oder wenn sich Modelle nähern und entfernen. Mathematisch gesehen ist dies keine große Sache, tatsächlich blinken selbst die einfachsten integrierten Grafikchips in einem solchen Job. Die Reduzierung und Vergrößerung des Gewebes wirft jedoch neue Probleme auf, die auf irgendeine Weise gelöst werden müssen.

Geben Sie Mini-Texturen ein

Das erste Problem, das behoben werden muss, betrifft entfernte Gewebe. Wenn wir uns das erste Kistenlandschaftsbild noch einmal ansehen, sind die richtigen am Horizont nur wenige Pixel groß. Es ist aus zwei Gründen bedeutungslos zu versuchen, ein 256 x 256 Pixel großes Bild auf einen so kleinen Bereich zu komprimieren.

Erstens nimmt eine kleinere Textur weniger Speicherplatz auf der Grafikkarte ein, was nützlich ist, um zu versuchen, eine kleine Menge Cache unterzubringen. Dies bedeutet, dass es weniger wahrscheinlich ist, dass es aus dem Cache entfernt wird, und dass die wiederholte Verwendung dieser Textur die Daten im nahe gelegenen Speicher voll ausnutzt. Der zweite Grund, warum wir für einen Moment kommen, ist, dass es beim Zoomen von Texturen auf dasselbe Problem ankommt.

Eine übliche Lösung für die Verwendung großer Gewebe, die von kleinen Grundelementen zerkleinert werden. Kupplung. Dies sind minimierte Versionen der ursprünglichen Textur. Die Spiel-Engine selbst kann erstellt werden (mit dem entsprechenden API-Befehl, um dies zu tun) oder kann im Voraus von Spieledesignern ausgeführt werden. Jede Mipmap-Gewebeebene hat die Hälfte der linearen Abmessungen der vorherigen.

Für die Kistentruktur geschieht Folgendes: 256 x 256 → 128 x 128 → 64 x 64 → 32 x 32 → 16 x 16 → 8 x 8 → 4 x 4 → 2 x 2 → 1 x 1.

Mipmaps sind alle zusammen verpackt, sodass die Textur immer noch den gleichen Dateinamen hat, aber jetzt größer ist. Das Gewebe ist so verpackt, dass sen, v Seine Koordinaten bestimmen nicht nur, welches Texel auf ein Pixel im Frame angewendet werden soll, sondern auch von welcher Mipmap. Programmierer codieren dann den Renderer, um die zu verwendende Mipmap basierend auf dem Tiefenwert des quadratischen Pixels zu bestimmen. Wenn es also zu hoch ist, befindet sich das Pixel in einem Abstand, sodass eine kleine Mipmap verwendet werden kann.

Scharfäugige Leser haben möglicherweise den Nachteil von Mipmaps erkannt und gehen zu Lasten größerer Texturen. Die ursprüngliche Kistenstruktur hat eine Größe von 256 x 256 Pixel. Wie Sie im obigen Bild sehen können, beträgt die Mipmapped-Textur jetzt 384 x 256 Pixel. Ja, es gibt viel freien Speicherplatz, aber unabhängig davon, wie Sie ihn in kleinere Texturen verpacken, beträgt die Gesamtzunahme auf mindestens eine der Dimensionen des Gewebes 50%.

Dies gilt jedoch nur für vorbereitete Mipmaps. Wenn die Spiel-Engine so programmiert ist, dass sie richtig produziert wird, kann die Erhöhung niemals 33% der ursprünglichen Texturgröße überschreiten. So erhalten Sie Leistungsvorteile und visuelle Verbesserungen für eine relativ geringe Erhöhung des Gedächtnisses in Gewebe-Mipmaps.

Unten ist ein geschlossener / offener Vergleich von Gewebe-Mipmaps:

Auf der linken Seite des Bildes werden die Kistenstrukturen "wie sie sind" verwendet, was zu einem körnigen Erscheinungsbild führt und angeblich Moiré-Muster Weg. Auf der rechten Seite bewirkt die Verwendung von Mipmaps jedoch einen viel weicheren Übergang durch die Landschaft, wobei die Kistentruktur am Horizont eine einheitliche Farbe annimmt.

Möchte jemand jedoch unscharfe Texturen, die den Hintergrund seines Lieblingsspiels stören?

Bilineer, Triple Stripes, anisotrop - alles Griechisch für mich

Der Prozess der Auswahl von Pixeln aus einer Textur, die auf ein Pixel in einem Frame angewendet werden soll Gewebeentnahmeund in einer perfekten Welt ihre Größe, Position, Richtung usw. Unabhängig von seiner Textur wäre es eine Textur, die genau ihrem Prinzip entspricht. Mit anderen Worten, die Texturabtastung ist nichts anderes als ein 1: 1-Abbildungsprozess von einem flachen Pixel zu einem Pixel.

Da dies nicht der Fall ist, muss bei der Gewebeentnahme eine Reihe von Faktoren berücksichtigt werden:

  • Ist die Textur vergrößert oder verkleinert?
  • Ist die Textur original oder eine Mipmap?
  • In welchem ​​Winkel wird die Textur angezeigt?

Lassen Sie uns sie einzeln analysieren. Das erste ist klar genug: Wenn die Textur vergrößert wird, wird mehr Text als nötig das primitive Pixel bedecken; Beim Schrumpfen ist es umgekehrt, jedes Texel sollte jetzt mehr als ein Pixel abdecken. Das ist ein kleines Problem.

Zweitens verlassen Mipmaps das Gewebe in einem Winkel, da sie verwendet werden, um das Problem der Gewebeentnahme mit entfernten Grundelementen zu umgehen. Und ja, das ist auch ein Problem. Warum? Da alle Texturen für eine Ansicht "offen" oder alle mathematisch erstellt wurden, entspricht die normale Oberfläche der Textur der auf dem Gewebe angezeigten Oberfläche.

Um zu wenig oder zu viele Texturen zu haben und Texturen in einem Winkel zu haben, Gewebefilterung. Wenn Sie diesen Prozess nicht verwenden, erhalten Sie Folgendes:

Hier haben wir die Kistentextur durch eine Buchstaben-R-Textur ersetzt, um deutlicher zu zeigen, wie viel Verwirrung sie haben wird, ohne die Textur zu filtern!

Grafik-APIs wie Direct3D, OpenGL und Vulkan bieten alle die gleichen Filtertypen für den Bereich, verwenden jedoch unterschiedliche Namen. In der Tat geht alles so:

  • Probenahme am nächsten Punkt
  • Lineare Texturfilterung
  • Anisotrope Gewebefilterung

Im Grunde, Probenahme am nächsten Punkt Wenn es nicht filtert, liegt dies daran, dass es das Pixel ist, das dem Pixel am nächsten liegt, das abgetastet (d. h. aus dem Speicher kopiert) und dann das Pixel mit seiner ursprünglichen Farbe gemischt werden muss.

Hier kommt die lineare Filterung zur Rettung. Erforderlich sen, v Texelkoordinaten werden zur Abtastung an die Hardware gesendet, aber anstatt das diesen Koordinaten am nächsten liegende Texel zu erhalten, den Sampler vier Texel. Diese befinden sich direkt über, unter, links und rechts von demjenigen, der mit der nächstgelegenen Punktabtastung ausgewählt wurde.

Diese 4 Textilien werden dann unter Verwendung einer gewichteten Formel gemischt. Zum Beispiel die Formel in Vulkan:

T "Farbe", f Vier Textilproben für die entwässerten und 1 bis 4. Werte Alpha ve Beta Wie weit von dem durch sen, v Koordinaten kommen aus der Mitte des Hahns.

Glücklicherweise geschieht jeder, der an 3D-Spielen beteiligt ist, egal ob er spielt oder spielt, automatisch in diesem Grafikverarbeitungschip. Tatsächlich hat der TMU-Chip in 3dfx Voodoo dies getan: Er hat 4 Singles abgetastet und sie dann gemischt. Direct3D nennt das seltsam bilineare Filterung, Seit der Zeit des TMU-Chips von Quake und Voodoo konnten Grafikkarten natürlich nur noch einen Stundenzyklus filtern (wenn die Textur bequem im engen Speicher gespeichert ist).

Die lineare Filterung kann neben Mipmaps verwendet werden. Wenn Sie wirklich Lust auf Ihre Filterung haben möchten, können Sie 4 Texte aus einer Textur und 4 weitere aus der nächsten Mipmap-Ebene nehmen und diese dann kombinieren. Und der Name von Direct3D dafür? trilinear Filtration. Was tri über diesen Prozess? Ihre Vermutung ist so gut wie unsere ...

Die zuletzt genannte Filtermethode wird aufgerufen Anizotrop. Dies ist in der Tat eine Anpassung gemäß dem Verfahren für die bilireare oder trilineare Filterung. Anfänglich Grad der Anisotropie primitive Oberfläche (und überraschend kompliziert) - Dieser Wert ändert das Seitenverhältnis des Grundelements aufgrund seiner Ausrichtung:

Das Bild oben zeigt das gleiche quadratische Prinzip mit gleich langen Kanten. Wenn wir uns jedoch von unserer Perspektive entfernen, sieht das Quadrat wie ein Rechteck aus und seine Breite übersteigt seine Höhe. Das Grundelement rechts hat also eine größere Anisotropie als links (und im Fall eines Quadrats ist der Grad genau Null).

In den meisten heutigen 3D-Spielen können Sie die anisotrope Filterung aktivieren und dann den Pegel anpassen (1x bis 16x). Was ändert sich jedoch tatsächlich? Die Einstellung steuert die maximale Anzahl zusätzlicher Texel-Abtastwerte, die pro ursprünglicher linearer Abtastung entnommen wurden. Nehmen wir zum Beispiel an, das Spiel ist auf 8x anisotrope bilineare Filterung eingestellt. Dies bedeutet, dass anstelle von nur 4 Textwerten 32 Werte angezeigt werden.

Es ist klar, dass die Verwendung der anisotropen Filterung Folgendes bemerken kann:

Wischen Sie einfach ein wenig nach oben und vergleichen Sie die nächste Punktabtastung für eine maximale 16-fache anisotrope trilineare Filterung. So glatt, fast lecker!

Aber es muss einen Preis geben, der all diesen schönen Buttertexturgeschmack und definitiv die Leistung auszahlt: Die maximale anisotrope trilineare Filterung bringt 128 Proben von einer Textur für jedes verarbeitete Pixel. Selbst für die besten der neuesten GPUs kann dies nicht in einem einzigen Taktzyklus durchgeführt werden.

Wenn wir so etwas wie AMD bekommen Radeon RX 5700 XTMarkieren Sie, dass jede Gewebeeinheit im Prozessor 32 Texeladressen in einer Taktschleife schließen, dann 32 Texel aus dem Speicher (jeweils 32 Bit) in einem anderen Taktzyklus laden und später 4 zusammensetzen kann. Daher wurde es für 128 Texelproben gemischt, die einen Zyklus von mindestens 16 Stunden erfordern.

Jetzt beträgt die Basistaktrate des 5700 XT 1605 MHz, sodass 16 Zyklen nur 10 benötigen nanosaniye. Tun Sie dies einfach für jedes Pixel im 4K-Frame. einer Die Gewebeeinheit würde immer noch nur 70 Millisekunden dauern. Okay, vielleicht spielt Leistung keine Rolle!

Sogar im Jahr 1996 waren 3Dfx Voodoo im Umgang mit Texturen ziemlich stilvoll. Das Maximum kann in 1 bilinear gefiltertem Texel pro Stunde angegeben werden, und während der TMU-Chip mit 50 MHz schwang, bedeutete dies, dass 50 Millionen Texine pro Sekunde geschnitten werden konnten. In einem Spiel mit 800 x 600 und 30 fps sind nur 14 Millionen Text pro Sekunde erforderlich.

All dies setzt jedoch voraus, dass sich die Texturen im nahe gelegenen Speicher befinden und dass jedem Pixel nur ein Texin zugeordnet ist. Vor zwanzig Jahren war die Idee, mehr als eine Textur auf ein Prinzip anwenden zu müssen, fast völlig unbekannt, aber jetzt ist es normal. Schauen wir uns an, warum diese Änderung stattgefunden hat.

Den Weg zu spektakulären Bildern beleuchten

Schauen Sie sich diese Szene aus Quake an, um zu verstehen, wie wichtig der Stoff geworden ist:

Dieses dunkle Bild war die Natur dieses Spiels, aber Sie können sehen, dass die Dunkelheit nicht überall gleich ist - die Flecken an Wänden und Boden sind heller als bei anderen, um ein allgemeines Gefühl der Beleuchtung in diesem Bereich zu vermitteln.

Die Grundelemente, die die Seiten und den Boden bilden, haben dieselbe Textur, aber es gibt eine zweite Textur, die genannt wird. Lichtkartewird mit Texelwerten gemischt, bevor sie mit quadratischen Pixeln abgeglichen werden. Während der Quake-Tage wurden Lichtkarten von der Spiel-Engine vorberechnet und erstellt und zur Erstellung statischer und dynamischer Lichtpegel verwendet.

Der Vorteil ihrer Verwendung bestand darin, dass komplexe Beleuchtungsberechnungen eher an Texturen als an Ecken durchgeführt wurden, was insbesondere das Erscheinungsbild einer Szene und die sehr geringen Leistungskosten verbesserte. Offensichtlich nicht perfekt: Wie Sie am Boden sehen können, ist die Grenze zwischen den beleuchteten Bereichen und denen im Schatten sehr klar.

In vielerlei Hinsicht ist eine Lichtkarte nur eine andere Textur (denken Sie daran, dass es sich nur um 2D-Datenarrays handelt). Wir betrachten hier also die frühe Verwendung des Bekannten. multiple Textur. Wie der Name schon sagt, handelt es sich um einen Prozess, bei dem zwei oder mehr Berührungen auf ein Prinzip angewendet werden. Die Verwendung von Light Maps in Quake war eine Lösung, um die Einschränkungen der Gouraud-Schattierung zu überwinden. Mit zunehmenden Funktionen von Grafikkarten nahmen jedoch auch Anwendungen mit mehreren Laufwerken zu.

3Dfx Voodoo war wie andere Karten seiner Zeit darauf beschränkt, wie viel es in einem Rendering tun konnte bestehen. Dies ist im Wesentlichen eine vollständige Rendersequenz: von der Verarbeitung von Ecken über das Rastering des Frames bis hin zum Ändern der Pixel in einen endgültigen Frame-Puffer. Vor zwanzig Jahren machten Spiele fast immer einen einzigen Durchgang.

Der Grund dafür war, dass es in Bezug auf die Leistung sehr kostspielig war, da Sie die Ecken zweimal bearbeiten möchten, nur um mehr Textur aufzutragen. Einige Jahre nach Voodoo mussten wir warten, bis die Grafikkarten ATI Radeon und Nvidia GeForce 2 verfügbar waren, damit wir in einem einzigen Renderübergang mehrere Zeichnungen durchführen konnten.

Diese GPUs hatten mehrere Textureinheiten pro Pixelverarbeitungsabschnitt (d. H. RohrleitungEs war ein Kinderspiel, ein gefiltertes Texel aus zwei getrennten Texturen zu bringen. Dies machte die Lichtzuordnung noch beliebter und veränderte die Lichtwerte aufgrund von Änderungen in der Spielumgebung, wodurch die Spiele voll dynamisch wurden.

Aber es gibt noch viel mehr, das mit mehreren Texturen gemacht werden kann. Schauen wir uns das an.

Es ist normal, die Höhe zu multiplizieren

In dieser Artikelserie über 3D-Rendering haben wir nicht angesprochen, wie die Rolle der GPU wirklich zum gesamten Problem passt (wir werden es noch tun, noch nicht!). Aber wenn du zurückkommst Episode 1Wenn Sie sich die komplizierte Arbeit der Eckenverarbeitung ansehen, denken Sie vielleicht, dass dies der schwierigste Teil des gesamten Arrays ist, den der Grafikprozessor rendern kann.

Es ist schon lange her und Spielprogrammierer haben ihr Bestes getan, um diese Arbeitsbelastung zu reduzieren. Dies bedeutete, die visuelle Trickkiste zu erreichen und so viele Verknüpfungen und Tricks wie möglich zu entfernen, um das gleiche visuelle Erscheinungsbild zu erzielen, indem überall mehrere Ecken verwendet wurden, aber tatsächlich nicht viele zum Starten verwendet wurden.

Und die meisten dieser Tricks, Höhenkarten ve normale Karten. Die beiden beziehen sich auf die Tatsache, dass die zweite aus der ersten erstellt werden kann, aber jetzt schauen wir uns nur eine Technik an, die heißt: Bump Mapping.

Bei der Knollenkartierung wird eine 2D-Sequenz verwendet, die als Höhenkarte bezeichnet wird und wie eine einzelne Version des ursprünglichen Gewebes aussieht. Im obigen Bild wird beispielsweise eine realistische Ziegelstruktur auf zwei flache Oberflächen angewendet. Die Textur- und Höhenkarte sieht folgendermaßen aus:

Die Farben der Höhenkarte stellen die Normen der Ziegeloberfläche dar (wir haben behandelt, was normal ist Episode 1 diese Artikelserie). Wenn die Rendersequenz den Punkt erreicht, an dem die Ziegelstruktur auf die Oberfläche angewendet wird, wird eine Reihe von Berechnungen durchgeführt, um die Farbe der Ziegelstruktur auf normal einzustellen.

Obwohl die Steine ​​noch völlig flach sind, sehen sie daher mehr 3D aus. Besonders wenn Sie sich die Kanten der Steine ​​genau ansehen, können Sie die Grenzen der Technik erkennen: Die Textur sieht ein wenig verdreht aus. Für eine schnelle Anzahl weiterer Details zu einer Oberfläche ist die Knollenabbildung jedoch sehr beliebt.

Eine normale Karte ist wie eine Höhenkarte, aber die Farben dieser Textur sind selbst normal. Mit anderen Worten, eine Berechnung ist nicht erforderlich, um die Höhenkarte zu normalisieren. Sie fragen sich vielleicht, wie Farben verwendet werden können, um einen Pfeil im Raum darzustellen. Die Antwort ist einfach: Jedes Texel ist ein bestimmtes R, G, B. Werte (rot, grün, blau) und diese Zahlen sind direkt X ve Z. Werte für den Normalenvektor.

Im obigen Beispiel zeigt das linke Diagramm, wie sich die Richtung der Normalen auf einer holprigen Oberfläche ändert. Um die gleichen Normalen in einer flachen Textur darzustellen (mittleres Diagramm), weisen wir ihnen eine Farbe zu. In unserem Fall, R, G, B. Erhöhen Sie die Werte (0,255,0) für die Gerade und dann die Menge an Rot für links und Blau für rechts.

Beachten Sie, dass diese Farbe nicht mit dem Originalpixel gemischt wird. Sie teilt dem Prozessor mit, in welche Richtung die Normale zeigt, damit die Kamera die Winkel zwischen den Lichtern und der strukturierten Oberfläche genau berechnen kann.

Wenn auf der Bühne dynamisches Licht verwendet wird, leuchten die Vorteile von Bump und normaler Anpassung wirklich, und der Renderprozess berechnet die Auswirkungen von Lichtänderungen pro Pixel, nicht für jede Ecke. Moderne Spiele verwenden viel Textur, um die Qualität der Magie jetzt zu verbessern.

Diese realistisch aussehende Wand ist unglaublich einfach eine flache Oberfläche - die Details über Ziegel und Mörtel werden nicht mit Millionen von Polygonen hergestellt. Stattdessen werden nur 5 Texturen und viele intelligente Mathe-Jobs ausgeführt.

Die Höhenkarte wurde verwendet, um die normale Karte zu erstellen, um den Pfad der Schattierungssteine ​​für sich selbst und alle geringfügigen Änderungen an der Oberfläche zu simulieren. Die Rauheitstextur wurde verwendet, um zu ändern, wie Licht verschiedene Elemente der Wand reflektiert (z. B. reflektiert ein abgeflachter Ziegel gleichmäßiger als rauer Mörtel).

Die letzte Karte, die im obigen Bild mit AO gekennzeichnet ist, ist Teil eines Prozesses, der als Medienüberlastung bezeichnet wird: Dies ist eine Technik, die wir in einem späteren Artikel betrachten werden, aber im Moment sind es nur Schatten.

Tissue Matching ist sehr wichtig

Es ist absolut entscheidend für das strukturierte Spieldesign. Holen Sie sich die 2019-Version von Warhorse Studio Das Königreich kommt: Erlösung Ein Rollenspiel aus der ersten Person, das im 15. Jahrhundert in Böhmen, einem alten Land im Nahen Osten Europas, gegründet wurde. Die Designer waren bestrebt, für den betreffenden Zeitraum eine möglichst realistische Welt zu schaffen. Und der beste Weg, den Schauspieler vor Hunderten von Jahren zum Leben zu erwecken, ist, dass jede Landschaftsansicht, jedes Gebäude, jedes Kleidungsset, jedes Haar, jede tägliche Ware usw. Es sollte den richtigen Look dafür haben.

Jede einzigartige Textur in diesem einzelnen Bild im Spiel wurde von den Künstlern erstellt und von der programmierergesteuerten Render-Engine verwendet. Einige sind klein, einfach und benötigen nur sehr wenig, um andere Gewebe (wie Hühnerflügel) zu filtern oder zu verarbeiten.

Andere sind hochauflösend und zeigen viele feine Details; anisotrop gefiltert und mit normalen Karten und anderen Texturen gemischt - schauen Sie einfach auf das Gesicht des Mannes im Vordergrund. Die unterschiedlichen Anforderungen an die Texturierung jedes Elements auf der Bühne werden von Programmierern erklärt.

All dies geschieht jetzt in vielen Spielen, weil die Spieler auf mehr Details und Realismus warten. Texturen wachsen und werden mehr auf einer Oberfläche verwendet, aber das Abtasten von Text und das Anwenden auf Pixel ist im Wesentlichen der gleiche wie an Beben-Tagen. Die beste Technologie stirbt nie, egal wie alt!