Dies ist der letzte Beitrag in unserer 3-teiligen Serie zum Occlusion Culling. In dem ersten Beitrag haben wir das neue Occlusion Culling System in Unity 4.3 beschrieben und sind die grundlegenden Anwendungen und Parameter durchgegangen. Im zweiten Teil hatten wir eine Liste mit Best Practices und allgemeinen Erfahrungen erstellt, um Umbra optimal zu nutzen.
Dieser letzte Beitrag beschäftigt sich mit der Fehlerbehebung einiger häufiger Probleme, die bei der Verwendung von Umbra auftreten können.
Visualisierungen.
Unity bietet ein paar Helfer, um herauszufinden, was beim Occlusion Culling vor sich geht. Diese Visualisierungen können ihnen helfen herauszufinden, warum sich das Entfernen von Occlusions nicht ganz so verhält, wie Sie es erwarten würden. Die Visualisierungen können gefunden werden, indem Sie den Visualisierungsbereich im Occlusion-Fenster aktivieren und die Kamera auswählen.
Die einzelnen Visualisierungen können dann in der Szenenansicht, im Dialogfenster Occlusion Culling ein- und ausgeschaltet werden.
Werfen wir einen Blick darauf, was die verschiedenen Visualisierungen bewirken.
Kamera-Volumen.
Die Visualisierung der Kameravolumina zeigt ihnen einfach als graue Box, in welcher Zelle sich die Kamera befindet. Für weitere Informationen darüber, was die Zellen sind, werfen Sie einen Blick auf den ersten Beitrag. Dies ist eine Möglichkeit, herauszufinden, wie der Wert des kleinsten Okkluders beispielsweise die Ausgabeauflösung der Daten verändert. Auch wenn es so aussieht, als ob die Zellgrenzen keinen Sinn machen, z.B. wenn sich die Zelle fälschlicherweise auf die andere Seite einer zu verschließenden Wand erstreckt, kann etwas nicht stimmen.
Sichtbarkeitslinien.
Der Zweck der Visualisierung der Sichtlinien ist es, ihnen die Sichtlinie zu zeigen, die Umbra sieht. Die Funktionsweise ist so, dass Umbra seinen Depth Buffer wieder in die Szene projiziert und Linien zu den äußersten nicht verdeckten Punkten im Blick der Kamera zeichnet. Auf diese Weise können Sie z.B. herausfinden, welche Löcher oder Lücken zu „Undichtigkeiten“ in der Occlusion führen, die letztlich dazu führen, dass einige Objekte sichtbar werden. Dies kann auch einige zweifelhafte Situationen aufdecken, in denen ein Objekt, das eindeutig ein guter Okkluder sein sollte, nichts okkludiert, weil es beispielsweise vergessen hat, das statische Okkluderflag für das Objekt zu aktivieren.
Portale.
Die Visualisierung der Portale zeichnet alle durchquerten Portale als halbtransparente, achsenausgerichtete Quadrate. Dies hilft ihnen nicht nur, eine Vorstellung davon zu bekommen, wie viele Portale Umbra durchquert und somit mit der Occlusion zurechtkommen, die die Performance optimiert, sondern es bietet auch eine andere Möglichkeit, das, was in Umbras Blickrichtung ist, zu betrachten. So können Sie sehen, ob es einige Stellen in der Szene gibt, die nicht wirklich eine Occlusion verursachen und wie die Portale in die Szene im Allgemeinen platziert werden.
Troubleshooting.
Während das Entfernen von Occlusions in Unity einfach funktionieren sollte, laufen die Dinge manchmal nicht ganz so, wie man es erwarten würde. Wir gehen auf die häufigsten Probleme ein, zu der Menschen neigen und wie man diese Probleme löst, damit soweit alles reibungslos läuft.
Das Culling betrifft nicht die verborgenen Gegenstände.
Manchmal fragen sich die Leute, warum einige Objekte von Umbra sichtbar gemeldet werden, während sie in Wirklichkeit verschlossen zu sein scheinen. Dafür kann es viele Gründe geben. Das Wichtigste was Sie verstehen sollten, ist, dass Umbra immer konservativ arbeitet. Das bedeutet, dass es sich immer für Objekte entscheidet, die sichtbar und nicht unsichtbar sind, wenn Unsicherheit in der Luft herrscht. Dies gilt auch für alle tiefgreifenden Situationen.
Zu beachten ist auch, dass die Occlusion-Daten eine vereinfachte Version der Okkludatoren der Szene darstellen. Genauer gesagt, stellt es eine konservativ vereinfachte Version dar, was bedeutet, dass ein Teil der Occlusion erodiert und Details verliert.
Der Detaillierungsgrad, der in den Daten erhalten bleibt, wird durch den kleinsten Okkluder gesteuert. Die Verringerung des Wertes führt zu höher aufgelösten Daten, die weniger konservativ sein sollten, aber gleichzeitig verliert das Culling etwas an Geschwindigkeit und die Daten werden größer.
Sichtbare Objekte werden gecullt.
Das wahrscheinlich rätselhafteste und problematischste Szenario ist, wenn Umbra etwas als occluded meldet, auch wenn es nicht sein sollte. Nach all den Versprechungen, immer konservativ zu sein und nie falsche Negative zurückzugeben, stellt sich naturgemäß die Frage, wie so etwas passieren kann.
Nun, es können ein paar Dinge passieren. Der erste und bei weitem häufigste Fall ist, dass man etwas durch ein Loch, eine Lücke oder einen Riss betrachtet, das durch Umbras Voxalisierung verfestigt wird. So ist typischerweise die erste Sache, die Sie versuchen sollten, den Wert des kleinsten Lochs zu reduzieren und zu sehen, ob das das Problem behebt. Sie können versuchen, es vorübergehend auch ein wenig herunterzustufen, nur um zu testen, ob das das Problem ist.
Es gibt Situationen, in denen dies nicht ganz offensichtlich ist. Wenn Sie beispielweise ein Bücherregal in ihrer Szene haben, in dem einzelne Bücher als Occluder gekennzeichnet sind, kann ein zu großes oder kleinstes Loch dazu führen, dass einige der Bücher entweder durch das Regal oder durch die anderen Bücher okkludiert werden. Also wieder, nur den Wert des kleinsten Lochs zu verringern, ist wahrscheinlich das Erste, was Sie versuchen sollten.
Ein weiterer Fall, in dem Objekte verschwinden können, ist, wenn ihre Rückseitenbegrenzung auf etwas weniger als 100 eingestellt wurde und sich ihre Kamera in der Nähe von rückwärts gerichteten Dreiecken befindet. Beachten Sie, dass die Kamera nicht unbedingt auf die Dreiecke schauen muss, noch müssen die Dreiecke an dieser Stelle von der Kamera weg gerichtet sein. Es genügt, dass es in der Nähe der Kamera einen topologisch verbundenen Ort (d.h. nicht hinter einer Wand oder irgendetwas) gibt, von dem aus man einige nach hinten gerichtete Dreiecke sehen kann.
Das erste, was Sie tun müssen, um dies zu beheben, ist offensichtlich, mit einer Rückseitenbeschränkung von 100 zu versuchen und zu sehen, ob das das Problem behebt. Wenn dies der Fall ist, kann es sinnvoll sein, die Geometrie zu ändern, indem einige der Objekte modelliert werden, so dass sie zweiseitig oder fest sind, oder indem man einfach das statische Okkluder-Flag von den problematischen Objekten entfernt. Denkbar ist auch, dass Sie sich nicht um die Größe der Occlusion-Daten kümmern oder keinen großen Nutzen aus der Backface-Optimierung ziehen, ist natürlich auch die Deaktivierung des Backface Tests durch das Setzen des Wertes auf 100 möglich.
Das Culling wird sehr nah oder in einem Okkluder seltsam.
Das Culling kann sich seltsam verhalten, wenn ihre Kamera in einen Okkluder geht oder unendlich nahe an einen. Typischerweise kann dies in einem Spiel mit einer 3rd-Person-Kamera vorkommen. Da Umbra Okkludern als feste Objekte betrachtet, bedeutet das Auslesen von innen nach außen in der Regel, dass der Großteil des Materials in ihrer Szene ausgemerzt wird. Andererseits, wenn der Backface-Test aktiviert wurde, werden viele der Stellen innerhalb von Okkludern vollständig aus den Daten entfernt worden sein, was zu undefinierten Ergebnissen führt. Deshalb sollten Sie die Kamera nicht in Okkludern gehen lassen.
Genauer gesagt, kann Umbra im Allgemeinen eine korrekte Entnahme garantieren, wenn die Kamera weiter von einem Okkluder entfernt ist als der Wert des kleinsten Lochs. In den meisten Fällen wird es immer noch funktionieren, aber in einigen Fällen, da die Einschränkungen, die die Voxelauflösung für die Genauigkeit der Occlusion-Daten mit sich bringt, kann es vorkommen, dass die Kamera eine Stelle innerhalb eines Okkluders falsch zugeordnet wird. Hinweis: Verwenden Sie die Visualisierung „Kameravolumen“, um zu sehen, in welcher Zelle sich die Kamera befindet und wie sie aussieht.
Im Allgemeinen, wenn der Backface-Test aktiviert ist (d.h. wenn der Backface Threshold etwas kleiner als 100 ist), wird Umbra in der Nähe von Okkludern eine bessere Arbeit leisten, da es in der Lage ist, dass Innere von Okkludern zu erkennen und entsprechend alle gültigen Stellen leicht zu ihnen hin zu erweitern, so dass Sie korrekte Ergebnisse erhalten, selbst wenn Sie sich beliebig nahe an einen Occluder begeben. Wenn Sie also nicht verhindern können, dass ihre Kamera einem Okkluder sehr nahe kommt, ist das erste, was Sie versuchen sollten, den Backface Threshold-Wert auf etwas weniger als 100 einzustellen. Dies hilft bei der Dilatation und kann das Problem beheben.
Wenn das Optimieren des Backface Threshold-Werts nicht hilft oder wenn ihre Kamera sehr tief in einen Okkluder eindringt, bleibt nur noch, dass Okkluderflag einfach vom Objekt zu entfernen.
Das Culling ist zu langsam.
Der Grund für das langsame Culling ist in der Regel sehr einfach. Umbra durchquert zu viele Portale, so dass die Sichtbarkeitsabfrage sehr lange dauert. Der Parameter, der die Portalauflösung in den Occlusion-Daten steuert, ist der kleinste Occluder. Ein größerer Wert ergibt ein Portaldiagramm mit geringerer Auflösung, das im Allgemeinen schneller zu durchlaufen ist, bis zu einem Punkt. Es gibt jedoch einige Situationen, in denen dies nicht der Fall ist. Insbesondere wenn die Okkluderdaten konservativ vereinfacht werden müssen, kann die erhöhte Konservalität eines Diagramms mit geringerer Auflösung manchmal dazu führen, dass die Ansichtsabstände zunehmen und damit auch die Gesamtzahl der durchquerten Portale steigt. Aber das ist nicht die typischste Situation. Im Allgemeinen erzeugt ein kleiner Okkluderwert Daten, die in der Laufzeit schneller zu verarbeiten sind, auf Kosten einer geringeren Genauigkeit der Occlusion.
Eine weitere, aber offensichtlich etwas mühsamere Möglichkeit, um sicherzustellen, dass die Anzahl der durchquerten Portale nicht außer Kontrolle gerät, besteht darin, die Geometrie der Szene so zu ändern, dass die Sichtweiten in den Problembereichen nicht zu groß werden. Das manuelle Einfügen von Occlusion in offene Bereiche führt natürlich dazu, dass die Traverse schneller beendet wird, was die Anzahl der bearbeiteten Portale reduziert und somit das Aussortieren der Occlusion beschleunigt.
Das Baking ist zu langsam,
Die Geschwindigkeit des Bakings hängt im Wesentlichen von einer Sache ab: der Anzahl der Voxel, die verarbeitet werden müssen. Die Anzahl der verarbeiteten Voxel wiederum wird durch zwei Faktoren bestimmt: die Dimensionen der Szene und die Voxelgröße. Angenommen, Sie können nicht viel gegen das Erstere tun, das Letztere können Sie leicht mit dem kleinsten Lochparameter steuern. Ein größerer Wert beschleunigt natürlich das Baking. Es kann also sinnvoll sein, mit einem relativ großen Wert zu beginnen und ihn dann abzustimmen, wenn ihre Objekte aufgrund einer zu aggressiven Okkludergeneration falsch verschwinden. Ein mikroskopisch kleines Loch kann dazu führen, dass das Baken ewig dauert und/oder lächerliche Mengen an Speicher verbraucht.
Die Occlusion-Daten sind zu groß.
Wenn das Baken ihrer Szene zu viele Occlusion-Daten produziert, gibt es ein paar Dinge, die Sie ausprobieren können. Erstens kann es ein guter Anfang sein, den Wert der Rückseitenbegrenzung auf etwas kleiner als 100 zu ändern, zum Beispiel 99, 50 oder sogar 30. Wenn Sie dies tun, stellen Sie sicher, dass das Culling in allen Bereichen, in denen sich ihre Kamera befindet, korrekt funktioniert. Lesen Sie hierzu den vorangegangenen Beitrag.
Wenn das Ändern der Rückseitenbegrenzung nicht möglich ist, unvorhersehbare Ergebnisse liefert oder die Datengröße nicht ausreichend reduziert, können Sie versuchen, den Wert des kleinsten Okkluders zu erhöhen, der die Auflödung der Occlusion-Daten bestimmt und somit einen sehr großen Einfluss auf die Größe hat. Beachten Sie, dass die Erhöhung des kleinsten Okkluders auch die Konservalität der Ergebnisse erhöht.
Schließlich ist anzumerken, dass riesige Szenen natürlich mehr Occlusion-Daten erzeugen als kleine. Die Größe der Occlusion-Daten wird im Occlusion-Fenster angezeigt.
Versagen in der Split-Phase.
In einigen seltenen Fällen, in denen die Szene groß ist und der kleinste Okkluderparameter auf einen super kleinen Wert eingestellt wurde, kann das Baken mit dem Fehler „Versagen in der Split-Phase“ fehlschlagen. Das geschieht, weil der erste Schritt des Bakens versucht, die Szene in Rechenkacheln zu unterteilen. Die Unterteilung basiert auf dem kleinsten Okkluderparameter und wenn die Szene eine große Größe hat (z.B. Dutzende von Kilometern in jede Richtung), können zu viele Berechnungskacheln erstellt werden, was zu einem Speicherfehler führt. Dies wiederum manifestiert sich dem Anwender als „Versagen in der Split-Phase“. Die Erhöhung des Wertes des kleinsten Okkluders und/oder die Aufteilung der Szene in kleinere Teile wird diesen Fehler beseitigen.
Nun sind wir soweit mit unserer 3-teiligen Serie zum Occlusion Culling durch. Wenn Sie mehr über dieses Thema erfahren möchten, stellen Sie uns gerne eine Frage in unserem Forum.
Vielen Dank für ihren Besuch.