Stop! Read on! The headline may sound a bit spacey - but today it's about a really important topic. A topic that deserves much more understanding. Every application that is developed with a 3D engine is subject to certain limitations, because every device that is supposed to display it has certain hardware bottlenecks. Whether developing for a modern desktop PC with a graphics card, or for smartphones and tablets - it represents a difference of miles. Therefore, early in the course of a project, it must be decided on which systems the application should run. It is possible to port an application that was developed for high-end systems to a mobile device after the fact: But this requires a lot of time (and frustration-resistant developers who never give up).
How does 3D actually work?
Ein System wie die Unreal Engine wird auch „Renderer“ genannt. Es handelt sich dabei um eine Software die mit dem Einsatz von Grafikkarte , Arbeitsspeicher und CPU ein 3-dimensionales Bild berechnet und – sichtbar für uns Menschen – auf einem Bildschirm oder in einer VR-Brille ausgibt. Jedes der 3D-Objekte in einer Szene ist dabei eine Ansammlung von Dreiecken (zumindest in den meisten Echtzeit-Engines), so genannten Polygonen. Diese Polygone besitzen Eckpunkte, die sich Vertices nennen. Und auf diese Polygone werden wiederum Texturen „gespannt“, die die Oberfläche des jeweiligen Objektes ausmachen. Die Oberflächen sind dabei meist aus mehreren Ebenen aufgebaut um bestimmte Oberflächeneigenschaften zu beschreiben. Zum Beispiel, wie rau oder glatt eine Oberfläche ist, oder wo sich Erhebungen und Senkungen in der Oberfläche befinden (die Kombination mehrerer Texturen und der Beschreibung einer Oberfläche nennt man auch „Shader“). Abhängig von der Menge an Shadern und der Menge der Objekte in einer Szene muss eine bestimmte Menge an „Drawcalls“ vom jeweiligen System geleistet werden. Die Drawcalls beschreiben dabei stark vereinfacht gesagt, wie häufig innerhalb einer Zeiteinheit Oberflächen und Objekte in einer Szene visuell dargestellt werden müssen.
Optimize or lose
The bottlenecks in hardware have always meant that you have to think very carefully about how to solve problems in 3D space, build objects, or even use visual tricks to make things appear that aren't there. In particular, development for mobile APPs involves a great deal of optimization. If you reach the limit of the hardware, the application starts to jerk - or, even worse - the device overheats and a crash occurs.
Glücklicherweise haben sich in den letzten Jahren sehr viele Firmen mit der Optimierung von 3D-Objekten und Szenen beschäftigt. Bis vor Kurzem war dabei noch das System der „LODs“ – Level of Detail – die meist verbreitete Optimierungsmöglichkeit. Dabei wird ein 3D-Modell in mehreren Versionen abgespeichert, die verschieden hohe Detailgrade repräsentieren. Abhängig von der Entfernung des Nutzers zum 3D Modell kann man so einfach Leistung sparen: Ist der Nutzer sehr weit entfernt, wird einfach ein nur sehr simples Modell angezeigt. Mit dem Release von Unreal 5 revolutioniert Epic Games auch diese Technologie, zumindest auf Desktop PCs. Dank dem „Nanite Virtualized Geometry“ Algorithmus lassen sich plötzlich nahezu beliebige Mengen an hochkomplexen 3D Modellen in einer Anwendung darstellen. Die Menge der Polygone spielt dabei keinerlei Rolle mehr. Die Technologie zerlegt hierzu bereits beim Import in die Engine die Modelle in „Teilstücke“, so genannte Nanite clusters. Während des Renderings werden die Cluster je nach Kameraperspektive in verschiedenen Detailstufen ausgetauscht und verbinden sich perfekt und ohne Risse mit benachbarten Clustern innerhalb desselben Objekts – Quasi wie eine zerbrochene Ming-Vase, deren verschiedene Stücke in Echtzeit neu kombiniert werden. Insbesondere im Bereich der Architekturvisualisierung oder im Bereich der hochaufgelösten CAD-Daten beim Design von Fahrzeugen ermöglicht „Nanite“ die Programmierung zuvor nie dagewesener Echtzeitlösungen.
Most of the images in this blog post were provided by Epic Games.