Voxel dienen seit vier Jahren als Beleuchtungssystem in der Roblox-Welt. Aber früher oder später kommt in allem eine Zeit der Veränderung. Deshalb fragten sich die Entwickler, was sie als nächstes tun sollten.
Die Beleuchtung ist schwierig, daher müssen Sie bei der Auswahl neuer Technologien vorsichtig sein, da viele Faktoren zu berücksichtigen sind. Um die Entscheidungsfindung zu erleichtern, hat Roblox zwei zukünftige Systeme als Prototyp entwickelt: sogenannte Voxel und Schattenkarten. Um die Einschränkungen beider zu verstehen, ist es zunächst wichtig zu verstehen, wie sie funktionieren.
Hinweis: Die Screenshots im Artikel sind so angeordnet, dass Voxel immer links und Schattenkarten rechts angezeigt werden.
Implementierung: Voxel
Obwohl dieses spezielle System schon lange im Spiel funktioniert hat, hat die hier betrachtete Option viele Verbesserungen erfahren.
Die Weltdaten werden in eine Reihe von Voxelgittern konvertiert: Jedes Gitter ist um das Zeichen zentriert und kann Voxelgrößen von 1 bis 16 (insgesamt 5 Gitter) aufweisen. Jedes Voxel enthält Belegungsinformationen zwischen 0 und 100%. Die Beleuchtungsdaten werden dann für jedes Voxel in jedem Netz basierend auf dieser Fülle und den Lichtquellen- / Richtungsinformationen berechnet. All dies geschieht auf der GPU, da die zentrale nicht schnell genug ist, um so viele Voxel mit einer so hohen Dichte zu aktualisieren.
Das System speichert insbesondere alle Daten in Voxeln - für jedes verfügbare Voxel gibt es Daten über:
- Fülle (mehrere Werte, die beschreiben, wie voll jedes Voxel ist);
- Oberlicht (wie viel vom Himmel vom Voxel aus sichtbar ist);
- Sonnenschatten (wie viel Sonne wird vom Voxel verdeckt);
- Lichtobjekt- / Kegelfarben (Annäherung der Farbe / des Kegels an die Wirkung lokaler Lichtquellen auf das Voxel).
Diese Informationen werden später verwendet, um die Farbe jedes Pixels bei einer bestimmten Auflösung zu berechnen. Bildschirm- und Voxelauflösungen können unabhängig voneinander eingestellt werden. Teile des Voxelnetzes können Frame für Frame aktualisiert werden, wenn sich die Lichter / Objekte bewegen.
Implementierung: Schattenkarten
Diese Methode verwendet die Rasterung, um die meisten Schatteneffekte zu berechnen. Es wird in drei Stufen durchgeführt. Zuerst aktualisieren wir für jede Schattenkaste die Schattenkarte, starten mehrere Strahlengüsse von der Lichtquelle in die Szene und merken uns die Schnittpunkte. Wir bauen dann eine räumliche Beschleunigungsstruktur auf, in die wir jedes sichtbare Lichtobjekt einbetten, das im Wesentlichen ein frustokonisches Voxelgitter (auch als Froxelgitter bekannt) ist.
Das Raster deckt den gesamten Teil der Spielwelt ab, wie er von der Kamera gesehen wird. In jedem Froxel schreiben wir eine Liste aller Lichtobjekte auf, die es schneiden. Um den Einfluss aller Lichtquellen beim Rendern der Szene zu berechnen, suchen wir für jedes Pixel nach einem Froxel, das dieses Pixel enthält, durchlaufen alle Lichtquellen und berechnen für jedes Licht seinen Einfluss separat anhand der in der ersten Stufe erstellten Schattenkarten.
Das System speichert Daten in zwei Strukturen:
- Schattenatlanten (alle Schattenkarten für sichtbares Licht in einer großen Textur);
- Lichtgitter (ein Froxel-Gitter, das einen Punkt in der Kamera effektiv in eine Liste von Lichtern umwandelt).
Die Farbe jedes Pixels wird dynamisch berechnet und nicht explizit gespeichert. Teile des Schattenatlas können Frame für Frame aktualisiert werden, wenn sich die Lichter / Objekte bewegen.
Leistung: Voxel
Die Voxel-Technik eignet sich besser für die Skalierung: Um die Qualität der Ausgabe zu verringern, können wir die Anzahl der Voxel-Gitter verringern oder weniger Voxel pro Frame aktualisieren (was zu einer "Lichtverzögerung" führt - eine langsamere Aktualisierung der Belichtung von Objekten im Vergleich zur Aktualisierung der Objekte selbst).
Voxel haben drei Komplexitätsmerkmale: geometrische Komplexität, Lichtkomplexität und Pixelanzahl. Die geometrische Komplexität wirkt sich nur auf die Kosten der Voxelisierung aus, sodass das Hinzufügen weiterer Objekte keine Verzögerungen verursacht. Die Komplexität des Lichts wirkt sich nur auf die Berechnungskosten aus, die nicht von der geometrischen Komplexität oder der Anzahl der Pixel abhängen. Schließlich wird die endgültige Pixelfarbe aus der Anzahl der Voxel / Lichter / Objekte berechnet, sodass wir die Auflösung skalieren können, ohne die Lichtqualität zu beeinträchtigen.
Die Voxelleistung wird berechnet als O (G) + O (L) + O (P), wobei G die Anzahl der Dreiecke (geometrische Komplexität) ist, L die Anzahl der Lichter ist, P die Anzahl der Pixel ist.
Leider ist die maximale Voxelleistung nicht optimal, da die Voxelanzahl skaliert, da N3 und GPUs für die erforderlichen Aktualisierungsmethoden nicht ideal sind und kein gutes Leistungsmanagement aufrechterhalten können. Mit genügend Forschung im Bereich GPU-Computing kann der Leistungsverlust kompensiert werden, aber im Moment können die Grundkosten recht hoch bleiben.
Leistung: Schattenkarten
Schattenkarten sind GPU-freundlicher, da sie auf Rasterung basieren. Die Kosten für die Aktualisierung des Schattenatlas können teilweise durch Zwischenspeichern / Verzögern von Aktualisierungen reduziert werden (was logischerweise zu einer zusätzlichen Latenz führt). Durch die Optimierung der Geometriedarstellung (einschließlich der Detailgenauigkeit des Netzes) werden auch die Methodenkosten gesenkt.
Das Aktualisieren von Schatten in komplexen Szenen ist jedoch immer noch teuer, da die Kosten sowohl von der Menge der geometrischen Details als auch von der Anzahl der Lichter abhängen, die Schatten werfen. Innerhalb eines Gebäudes muss im Fall eines sich bewegenden Lichts das gesamte Gebäude in jedem Frame neu gerendert werden, um die Schatteninformationen für dieses Licht zu aktualisieren. Viele bewegte Lichtstrahlen im Gebäude führen zu einer Leistungsminderung: Wir können nicht alle Lichter im Rahmen gleichzeitig aktualisieren, was zu visuellen Artefakten führt.
Darüber hinaus erlaubt diese Methode nicht, den Auflösungsparameter von der Lichtmenge zu trennen: Für jedes Pixel müssen wir den Einfluss aller Lichtquellen neu berechnen, die ihn abdecken. Dieser Schritt kann auch nicht zwischengespeichert werden, was zu Leistungsproblemen bei hohen Auflösungen in stark beleuchteten Szenen führt: Für 20 überlappende Lichter in einem 4K-Raum sind möglicherweise 160 Millionen Lichtschätzungen erforderlich.
Die Leistung der Schattenkarte wird als O (GL) + O (LP) berechnet, wobei G die Anzahl der Dreiecke (Geometriekomplexität), L die Anzahl der Lichter und P die Anzahl der Pixel ist.
Leistungsbeurteilung
Aus Gründen der Klarheit wurden beide Methoden für speziell ausgewählte Spielebenen verwendet. Beachten Sie, dass dies bereits vorhandene Level-Implementierungen sind und nicht speziell für die Leistungsbewertung entwickelt wurden.
Paris (Sonnenschatten, sehr wenige nicht schattierende Lichtquellen)
- Voxel: Schattenaktualisierung - 6 ms, Szenenwiedergabe - 1,5 ms;
- Schattenkarten: Schattenaktualisierung - 1 ms, Szenenwiedergabe - 2,4 ms;
- Die Kosten für die Berechnung des Basis-Voxelschattens sind höher, da die GPU die Verarbeitung erschwert.
Höhlen (viele Quellen, die Schatten werfen)
- Voxel: Schattenaktualisierung - 7 ms, Szenenwiedergabe - 0,9 ms;
- Schattenkarten: Schattenaktualisierung - 10 ms, Szenenwiedergabe - 2,1 ms;
- Aufgrund der großen Menge an Geometrie und beweglichen Lichtern ist das Aktualisieren von Schattenkarten teuer.
Western (viele Schattenwurfquellen)
- Voxel: Schattenaktualisierung - 8 ms, Szenenwiedergabe - 1 ms;
- Schattenkarten: Schattenaktualisierung - 15 ms, Szenenwiedergabe - 2,5 ms;
- Mit beweglichen Lichtern und vielen Dreiecken ist die Aktualisierung der Schattenkarte teuer.
1000 Lichtquellen ohne Schatten
- Voxel: leichte Aktualisierung - 20 ms, Szenenwiedergabe - 0,5 ms;
- Schattenkarten: Lichtaktualisierung - 0,5 ms, Szenenwiedergabe - 5 ms;
- Die kumulative Menge an Licht und Voxelüberlappung verlangsamt in diesem Fall die Voxelaktualisierung. Außerdem können Sie sehen, dass in der nahen Phase die Annäherung für „ein Licht in jedem Voxel“ nicht durchgeführt wird.
Leistung: Fazit
Schattenkarten lassen sich gut für die Arbeitslast skalieren, es gibt jedoch zwei Dinge zu beachten:
- Die Kosten pro Pixel steigen mit zunehmender Auflösung, was dies zu einer praktischen Lösung nur bei mittlerer Auflösung (1080p) macht. Um über 1080p hinauszugehen, ist eine sehr gute GPU erforderlich.
- Die Kosten für das Rendern von Schatten steigen bei komplexer Geometrie vieler dynamischer Lichter sehr schnell. Dies kann durch eine bessere Keulung ausgeglichen werden, bleibt jedoch in diesem Stadium ein grundlegendes Problem.
Gleichzeitig ist die Voxelleistung im Gegensatz dazu viel weniger vom Inhalt des Levels abhängig, hat jedoch viel höhere Grundkosten. Dies kann durch verbesserte GPU-Algorithmen und reduzierte Voxel ausgeglichen werden.
Speicherbedarf
Der Speicherbedarf für Schattenkarten und Voxel hängt von der erforderlichen Qualität ab.
Bei Voxeln werden für jede Stufe mehrere Texturen gespeichert, sodass ihre Gesamtgröße von der Anzahl der Stufen und der Größe jeder Stufe abhängt. Derzeit gibt es 4 Stufen (mit den Voxelgrößen 1..8) mit jeweils 128 x 64 x 128 Voxeln, was 128 MB des verwendeten VRAM ergibt. Es wäre möglich, weitere 2 Kaskaden (0,5 Voxel und 16 Voxel) zu starten oder die vorhandenen neu zu konfigurieren, wodurch dieser Wert auf 192 MB erhöht würde. Umgekehrt können Sie die Anzahl der Kaskaden (Entfernen einiger enger Kaskaden) in Systemen mit begrenztem Speicher verringern. Die minimale Speicherauswirkung kann dann bei zwei Kaskaden (4..8) etwa 64 MB und bei drei (4 ..) etwa 96 MB betragen. Sechszehn).
Bei Schattenkarten werden ein Schattenkartenatlas und ein Froxelgitter verwendet. Letzteres hängt teilweise von der Auflösung ab. Die Größe des Schattenatlas kann wiederum verringert werden, wenn Sie die Qualität der Schatten verringern müssen, um die Leistung / den Speicher zu verbessern. Das aktuelle System verwendet 73 MB Videospeicher, von denen der größte Teil (64 MB) vom Schattenatlas belegt wird. Sie können es reduzieren und so die Anzahl der abgedunkelten Lichter oder die Qualität der Schatten begrenzen. Sie können auch einige Optionen für Schattenkarten in Betracht ziehen, die mehr Speicher benötigen, um die Transluzenz zu unterstützen. Dies bedeutet, dass sie mehr Speicherplatz beanspruchen (bis zu 130 MB oder mehr). Die minimale Auswirkung auf den Systemspeicher wird wahrscheinlich erreicht, indem der Schattenatlas verkleinert und seine einfachere Version verwendet wird, die etwa 25 MB benötigt.
Im Vergleich dazu verfügt das aktuelle Beleuchtungssystem über zwei Modi: hohe (PC) und niedrige Qualität (mobil). Die PC-Version ist ~ 40 MB (24 MB RAM, 16 MB VRAM); mobil - ~ 11 MB (6 MB RAM, 5 MB VRAM).
Tatsächlich sind beide Methoden in Bezug auf die Speicherauswirkung ziemlich nahe beieinander, aber Schattenkarten sind für denselben Licht- / Schattenbereich etwas skalierbarer.
Mobile Kompatibilität
Das Publikum des Spiels wird immer mobiler, was bedeutet, dass beim Vergleich der ausgewählten Implementierungen auch verschiedene Spielgeräte berücksichtigt werden müssen. Auf High-End-Geräten sollten genügend API-Funktionen vorhanden sein, um beide Methoden zu implementieren, aber natürlich sind sie in Bezug auf Speicher und Leistung möglicherweise nicht so praktisch.
Das vorhandene Voxel-Beleuchtungssystem eignet sich hervorragend für mobile Geräte: Es unterstützt viele komplexe Beleuchtungsfunktionen (Lichtschatten, Oberlicht usw.) und führt die meisten komplexen Berechnungen auf der CPU durch, sodass nur minimale Anforderungen an die GPU-Leistung und den Funktionsumfang gestellt werden ... Da dieses System auf absehbare Zeit weiterhin für kostengünstige mobile Geräte und PCs unterstützt werden muss, haben sich mehrere Optionen für die Unterstützung eines großen Pools von Geräten ergeben:
- Speichern Sie das vorhandene System in einer mobilen Form, das neue ist nur PC / Konsole. Dies bedeutet, dass ein großer Teil der Benutzerbasis keinen Zugriff auf das neue System hat.
- ( , ), /.
- low-end , , .
In all diesen Fällen muss die Frage nach der Kompatibilität von Inhalten beantwortet werden, da eines der Hauptversprechen der Plattform darin besteht, „Inhalte einmal herunterzuladen und überall auszuführen“. Daran müssen wir noch arbeiten. Auf den ersten Blick scheint die neue Voxellösung in dem Sinne besser zu sein, dass sie eine einheitliche Qualität / ein einheitliches Verhalten vom alten zum neuen System bietet, während Schattenkarten einen abrupteren Übergang zu einer anderen Qualität darstellen, gleichzeitig aber eher mit eingeschränkten Funktionen auf Mobilgeräten auskommen.
Qualität: Lichtquellen
Die Schattenkartenlösung liefert zuverlässige Informationen zur Simulation von Lichtquellen: Im folgenden Screenshot mit 1000 Lichtern bei Schattenkarten sehen Sie perfekt reproduzierte Glanzlichter - modelliert mit BRDF, wodurch wir die gewünschten Lichtreflexionen erhalten.
Die Voxellösung ist grundsätzlich schlechter, weil sie die Wirkung von Licht auf jedes Voxel annähert, als ob es nur aus einer Quelle stamme. Daraus können Sie ersehen, dass sich die Qualität der Spiegelreflexion verschlechtert: Bei
Voxeln im Bereich mit Glanzlichtern verschmelzen die Farben im Verhältnis 1: 1 und erzeugen gelbes Licht anstelle von Grün und Rot, obwohl in der Szene keine gelben Lichter vorhanden sind. Im Gegensatz dazu simuliert eine Schattenkartenlösung die Farbkombination genau.
In einigen Fällen erhalten wir überhaupt nicht überzeugende Ergebnisse, obwohl diese in Zukunft verbessert werden können:
Im obigen Beispiel sehen Sie gekrümmte, längliche, verzerrte Spiegelhighlights, und in mehreren Voxeln unter einem der Objekte gibt es überhaupt keine Lichtinformationen. Der gleiche Screenshot für Schattenkarten liefert ein viel besseres Ergebnis.
Qualität: Schatten
Die definierende Qualität von Schattenkarten ist die Genauigkeit, während Voxelschatten weich sind. Schattenkarten bieten ziemlich scharfe Schatten mit so wenig Details wie möglich, sind jedoch präzise genug, um einen überzeugenden Schatten für den Charakter zu erzeugen. Andererseits ist der Voxel-Algorithmus sehr gut geeignet, um wirklich weiche Schatten zu erzeugen. Schatten aus kleinen Details werden jedoch entweder überhaupt nicht aufgezeichnet oder haben eine unregelmäßige Form.
Aus diesem Grund wird derzeit eine Variante der Schattenkarte zum Rendern von Zeichenschatten verwendet. Es handelt sich jedoch eher um eine Krücke, die nur auf die sonnenwerfenden Zeichenschatten angewendet wird. Andere Lichtquellen werden nicht berücksichtigt.
Eine Schlüsseltechnik zur Beschleunigung von Voxeln ist die Verwendung von Kaskaden. Dies bedeutet jedoch, dass die Fülle-Daten gröber werden, da der Abstand vom Punkt in der Szene für uns von Interesse ist. In diesem Fall verschlechtert sich auch die Qualität des Schattens mit zunehmendem Abstand zwischen der Quelle und dem Empfänger des Schattens:
Im obigen Screenshot würde die Größe des kleinsten Voxels ausreichen, um einen hochwertigen Schatten von der Brücke zu rendern, aber die Brücke ist zu weit von der Wasseroberfläche entfernt, sodass sich ihre Voxel selbst dann als zu rau herausstellen vorausgesetzt, die Voxel in der Nähe der Wasseroberfläche sind ziemlich gut.
Qualität: Oberlicht
Eine wichtige Funktion in der Voxel-Pipeline ist die Berechnung des Oberlichtkoeffizienten, der bestimmt, wie viel vom Himmel vom aktuellen Voxel aus sichtbar ist. Es wird zum Mischen von Innen- und Außenbeleuchtung verwendet und ist sehr effektiv bei der Verbesserung seiner Qualität. Im folgenden Screenshot sollte die Außenseite des Hauses viel heller sein als die Innenseite, selbst in schattigen Bereichen. Die Voxellösung berechnet und reproduziert diesen Koeffizienten gut, aber im Fall einer Schattenkarte fehlt er, daher gibt es keine Möglichkeit, Schatten dunkler zu machen.
Qualität: geometrische Präzision
Es ist erwähnenswert, welche grundlegenden Unterschiede in der Geometriedarstellung zwischen Voxeln und Schattenkarten bestehen.
Voxel gehen davon aus, dass alle von der Light Engine unterstützten Objekte "voxelisiert" werden können - das heißt, für jedes Voxel in der Spielwelt gibt es eine schnelle Möglichkeit, den Schnittpunkt zwischen dem Objekt und dem Voxel zu berechnen. Dies funktioniert gut für primitive Formen, aber komplexe Objekte wie CSGs und MeshParts sind bereits ein ernstes Problem. Eine grobe Zerlegung und eine Reihe anderer Hacks für eine effektive Voxelisierung helfen teilweise dabei, aber dies führt häufig zu sichtbaren Artefakten. Gleichzeitig verwenden Schattenkarten dieselbe polygonale Darstellung, die beim Rendern verwendet wird, sodass sie die Formen aller Objekte perfekt darstellen können:
Qualität: leichte Lecks
Während die Form des Schattens äußerst wichtig ist, ist es vielleicht noch wichtiger, dass unsichtbare Pixel richtig behandelt werden. Wenn unterschiedliche Annäherungen dagegen verstoßen, gibt es sogenannte Lichtlecks - sichtbare Streifen, die in kontrastreichen Umgebungen die meisten Probleme verursachen - beispielsweise in einem Gebäude mit heller Außensonne. Hier ist ein Beispiel für ein Lichtleck:
Dies ist ein dünner, beleuchteter Abschnitt des Bodens direkt an der Wand. Schattenkarten bewahren die Lichtokklusion viel besser und bekämpfen dieses Problem.
Es gibt verschiedene Ursachen für Lecks bei Voxeln. Einige von ihnen können unter Beibehaltung der anisotropen Fülle erweicht werden: Beispielsweise speichert der Speicher jetzt 3 Werte pro Voxel, was für alle drei Achsen angibt, „wie viel Materie sich in der Projektion des Voxels entlang der Achse befindet“. Obwohl dies dazu beiträgt, dass subtile Details Schatten unabhängig von ihrer Dicke werfen, werden leider nicht alle Lecks behoben. Die einzige Möglichkeit, eine vollständige Blockierung des Lichts in dieser Hinsicht zu gewährleisten, besteht darin, das Teil doppelt so dick wie das Voxel zu machen. Darüber hinaus wächst die Leckage mit der Größe des Voxels, was bedeutet, dass sie bei niedrigeren Qualitätsstufen und / oder weiter entfernt stärker wahrgenommen wird.
Schattenkarten sind nicht vollständig versiegelt, aber Lecks in ihnen sind ein viel geringeres Problem. In dieser Implementierung lässt beispielsweise ein Objekt mit einer Dicke von 0,4 Voxeln kein sichtbares Licht durch (mit einer Dicke von 0,2 Voxeln kann es einen Teil des Lichts übertragen, aber auch von diesem Sie können in der Zukunft loswerden).
Qualität: Fazit
Schattenkarten sind in den meisten Aspekten der Qualität ausgezeichnet. Der einzige signifikante Absenkungsbereich ist die Berechnung des Oberlichtverhältnisses. Dies erfordert möglicherweise eine Hybridmethode, bei der die Voxelisierung für das Oberlicht verwendet wird, wodurch die Voxel-Pipeline in Schwierigkeiten gerät - oder es gibt alternative Lösungen für dieses Problem. Es wäre auch schön, weiche Schatten unterstützen zu können, was mit einigen Erweiterungen des Schattenkartenalgorithmus möglich ist.
Voxel bieten eine akzeptable Qualität, verlieren jedoch im Vergleich zu Schattenkarten viel, insbesondere bei der Wiedergabetreue von Schatten und Glanzlichtern. Wir müssen diese Probleme irgendwie lösen, um eine Voxelbeleuchtung implementieren zu können, die schöne Schatten vom Spieler liefert, da die Verwendung der aktuellen Lösung nur Schatten von der Sonne liefert, was mit der zukünftigen Vision der Welt im Spiel unvereinbar zu sein scheint.
Sichtbarkeit: Transluzenz
Das Rendern von Schatten ist für undurchsichtige Objekte ein ziemlich gut erforschtes Problem, aber die Transluzenz ist eine ganz andere Sache. Da im Fall eines Voxelsystems Licht basierend auf dem Wert der Fülle durch Voxelzellen wandert, ist es nicht allzu schwierig, halbtransparente Schatten beizubehalten, die niederfrequente (weiche) Schatten von Partikeleffekten und anderen halbtransparenten Objekten in der Szene ergeben können, einschließlich Selbstschatten für die Partikeleffekte selbst:
Unten sehen Sie ein Video dieses Effekts in Bewegung:
Die Transluzenz für Schattenkarten wird derzeit nicht unterstützt. Dies bedeutet, dass eine andere Lösung gefunden werden muss, wenn wir Partikel oder andere transparente Objekte unterstützen möchten, die Schatten werfen. Es gibt einige Untersuchungen zu alternativen Schattenkartendarstellungen, die diesem Anwendungsfall dienen könnten, aber es bleibt abzuwarten, wie effektiv dies ist.
Sicht: Vegetation
Während Schattenkarten mit Transluzenz keine besonders gute Arbeit leisten, können sie feine Details auf Objekten (wie z. B. Vegetation) zeigen, unabhängig davon, ob sie mit Geometrie oder Texturen modelliert wurden. Die Voxel sind nicht klein genug, um diesen Anwendungsfall zu erfüllen. Außerdem ist es in diesem Fall nicht einfach, auf die Informationen über die Textur zuzugreifen, da eine genaue Modellierung der Netzoberfläche und nicht des Volumens erforderlich ist. Es ist zweifelhaft, dass es jemals möglich sein wird, mit Voxeln schöne Schatten aus der Vegetation zu erhalten, wohingegen Schattenkarten dies auch mit vorhandenen Inhalten ermöglichen können, wie in diesem Screenshot gezeigt:
Sichtbarkeit: Selbstbeleuchtung
Aufgrund der Art und Weise, wie Voxel implementiert werden, ist es relativ einfach, Lichter beliebiger Form und Menge in das Netz zu injizieren, ohne die Leistung anderer Teile der Pipeline zu beeinträchtigen. Während Sie Schattenkarten viele Lichter hinzufügen, weist das Erstellen von Lichtern mit unregelmäßigen Formen einige Architektur- und Leistungsprobleme auf. Insbesondere ist es mit Voxeln viel einfacher, echte Selbstleuchtkraft zu realisieren: Neonmaterial wird derzeit verwendet, um "Licht zu emittieren", aber es emittiert tatsächlich kein Licht an andere Objekte in der Nähe.
Ja, Sie können zusätzliche Lichter hinzufügen, aber es wäre schön, alles automatisch zu erledigen. Schattenkarten sind dafür nicht sehr nützlich, aber Voxel unterstützen notwendigerweise die Voxelisierung jeder Form, und daher ist die Unterstützung der Lichtemission von selbstleuchtenden Objekten mit ihnen recht einfach.
Sichtbarkeit: globale Beleuchtung
Globale Beleuchtung (GI) bezieht sich auf die Berechnung von sekundären Lichteffekten, z. B. Licht von einer Lampe, die zweimal von Wänden reflektiert wird, um zusätzliche Beleuchtung in Bereichen bereitzustellen, in denen direkte Lichtstrahlen nicht erreicht werden können.
GI in Roblox ist äußerst komplex, und die meisten Entscheidungen müssen auf dynamische Beleuchtung, dynamische Geometrie, Leistung und großformatige Szenen verzichten. Jedes dieser Opfer ist unzulässig.
Es ist unklar, welche GI-Lösungen angesichts der engen inhaltlichen Beschränkungen praktikabel sein werden. Bisher scheint der voxelbasierte GI vielversprechender zu sein als andere Ansätze.
Ein voxelbasierter GI bedeutet natürlich nicht, dass die direkte Beleuchtung mit ihnen berechnet wird: Die meisten voxelbasierten GI-Untersuchungen umfassen heutzutage die Verwendung von Schattenkarten, um direktes Licht zu berechnen und die Ergebnisse mit Voxeln zu verbessern.
Zusammenfassung
Basierend auf der obigen Analyse werden wir eine Übersichtstabelle über die Wirksamkeit beider Lösungen erstellen. Die kursiven Zellen deuten darauf hin, dass weitere Forschung diesen Bereich verbessern kann. Die Bewertung in der Tabelle lautet wie folgt: Schrecklich <schlecht <normal <gut <ausgezeichnet.
Voxel eignen sich also hervorragend für die Modellierung indirekter Beleuchtung, aber nicht so gut für direkte Beleuchtung. Gleichzeitig sind sie sehr ressourcenintensiv, was schlecht mit der Aufgabe korreliert, einen großen Pool von Geräten zu verwalten.
Dies führte zu der Entscheidung, ein Schattenkartensystem für die direkte Beleuchtung zu erstellen. Die Lösung für das Problem des Oberlichts und der globalen Beleuchtung wurde noch nicht eindeutig gefunden, aber es wird sich höchstwahrscheinlich als eine Art Hybrid beider Systeme herausstellen.