Drawcalls

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Was sind Drawcalls wie werden sie verursacht ?
    Drawcalls:
    Ein Drawcall ist eine Information die zwischen dem CPU und der Grafikkarte ausgetauscht werden das Problem dabei ist das dass Drawcall dabei nicht einfach den Direkten Weg nehmen kann sondern es muss noch im Ram nachfragen wie die Parameter sind.
    Parameter könnten beispielsweise sein:

    1. Welcher Shader soll benutzt werden ?
    2. Welche Textur?
    3. Schattenbechnungen
    4. Anzahl der Meshes
    Batching

    Damit nun nicht jede Information einzeln von der Grafikkarte von der CPU über das RAM zur Grafikkarte gesendet werden müssen, können Informationen auch zusammengefast werden.

    Beispielsweise bekommen Objekt A, B, C,D jeweils die selben Parameter aus dem Ram. Es müssen also nur einmalig Parameter im Ram abgefragt werden und diese an Grafikkarte gesendet werden.

    Das Batching macht die Unreal Engine bei entsprechenden Einstellungen von selbst.

    Optimierung der Drawcalls:

    Drawcalls entstehen also durch das zusammenspiel verschiedener Faktoren. In der Unreal Engine könnt ihr euch zb. Ein Material erstellen und diese Material auf Verschiedene Objekte zuweisen. Ihr habt also ein Material (zb eine Wandtextur) das immer wieder auf das selbe Wand Mesh gelegt wird.

    Der NICHT performante weg wäre es zb für 10 Wände jeweils ein Material zu erstellen in dem ihr jeweils immer die selben Texturen somit hättet ihr 10 Objekte + 10 Materials statt 10 Objekten mit einem Material.
    Noch unperformanter wäre es für 10 Objekte 10 Materials zu erstellen für die ihr auch noch 10 mal die Selbe Textur verwendet.

    Textur Atlas
    Um Drawcalls weiter zu optimieren könnte man auch einen Texturatlas verwenden. Ein Textur Atlas ist eine oder Mehre Texturen die ihr in eurem Level für unterschiedliche Zwecke mehrfach verwendet.
    Man sollte den Texturatlas nicht damit verwechseln eine Textur für das ein und das selbe Objekt öffter zu verwenden. Das wäre dann einfach nur ein Material das ihr öffter nutzt.

    Ein Beispiel für einen Textur Atlas:

    Ihr verwendet diese Textur:


    Nun verwendet ihr diese Textur aber nicht nur für eine bestimmte Wand sondern zb noch für eine Brücke. Das bedeutet Ihr nutzt das selbe Material an unterschiedlichen Objekte an unterschiedlichen Stellen für unterschiedliche Zwecke.

    Textur Atlas & Vertex Paint

    Vertex Paint ist im grunde nichts anderes als mehre gekachelte Texturen übereinander zu legen. Über das Vertex Paint sagt ihr dann an welchen Stellen welche Textur sichtbar sein soll.
    Aus Photoshop kennt ihr womöglich die Masken womit ihr deine Textur mit Schwarz oder Weiß sichtbar oder unsichtbar machen könnt.



    Textur #1
    Textur #2
    Maske
    Kombination aus beiden Texturen und der Maske


    In Photoshop ist es nur möglich eine Maske mit Schwarz und Weiß zu definieren bei Vertex Paint werden die Masken aber Bildlich vorgestellt in mehren Farben erstellt.
    Wenn ihr also beispielsweise die Steintextur auf euer Objekt Malen tut, Malt in in Wirklichkeit Nicht die Textur sondern eine Maske.
    Durch die verschiedenen Farben in der Maske könnt ihr mehr als nur zwei Texturen fürs Vertex Paint verwenden.

    Per Vertexpaint lassen sich also Texturen sehr unterschiedlich kombinieren und das obwohl ihr für 10 Texturen nur 10 Materials und somit 10 Drawcalls benötigt.

    Hier noch ein beispiel wie sowas in großen AAA Produktionen verwendet werden (Einige drürften das Video bereits kennen) :



    Drawcalls sparen durch das Frustum Culling

    Durch das Frustum Culling könnt ihr zb die Sichtweite des Players einschränken wodurch man dann vielleicht nicht mehr soweit sehen kann aber wodurch man eine Menge Drawcalls sparen kann.

    Drawcalls sparen durch das LODs

    Durch Lods (Level of Detail) können Objekte nicht nur mit geringer Polygonanzahl dargestellt werden, es können auch Objekte mit einer kleineren Textur versehen werden.
    Befindet sich der Player nah am Objekt könnt ihr beispielsweise eine ein 2k Textur (2048 * 20248) Pixel verwenden. Ist der Player weiter entfernt verwendet ihr eine 1k Textur.
    Das spart sehr viel Performance.

    Drawcalls sparen durch das Camera Occlusion Culling

    Durch das Camera Occlusion Culling werden nicht wie beim Frustum Culling alle Objekte nicht gezeichnet die nicht im Sichtbereich sind sondern es werden Objekte nicht gezeichnet die von anderen Verdeckt werden.
    Nehmen wir an ihr steht mit einem Player vor einem LKW hinter dem LKW befindet sein ein Baum so ist dieser durch den Player nicht zu sehen. Er wird nicht gezeichnet und somit fallen für den Baum keine Drawcalls an.
    Befindet ihr euch aber weiter weg vom LKW so seht ihr den Baum und er wird gezeichnet.
    Ab welcher Distance was gezeichnet werden soll stellt ihr in den Camera Occlusion Settings ein.


    Änderungswünsche, Verbessungen oder dürfte ihr gerne selbst vornehmen Kritik würd ich mich ebenfalls freuen.

    3.241 mal gelesen

Unreal®, Unreal Engine, the circle-U logo and the Powered by Unreal Engine logo are trademarks or registered trademarks of Epic Games, Inc. in the United States and elsewhere.