Warum beschleunigen Fertighäuser das Laden?


8

Ich habe eine Szene mit einem massiven Gelände. Das Laden dauerte lange (ungefähr 60 Sekunden), als ich die Wiedergabetaste drückte. Ich bin im Editor.

Ich habe es vorgefertigt.

Jetzt dauerte das Laden nur noch etwa 5 Sekunden, als ich die Wiedergabetaste drückte. Warum?

Ich gehe davon aus, dass beim Vorfertigen einige Vorladevorgänge durchgeführt werden, die Vorfertigung jedoch nur wenige Sekunden dauert. Das konnte also nicht der Grund sein. Irgendwelche Ideen? Ich bin ratlos.


4
Ich gehe davon aus, dass Unity kurz vor dem Ausführen den aktuellen Status der Szene im Editor zwischenspeichert, sodass beim Beenden des Spiels alles wieder so wird, wie es war (auch wenn Sie Änderungen vorgenommen haben, die noch nicht vorgenommen wurden in der Szenendatei auf der Disc gespeichert). Durch das Abladen des großen Geländes in das Fertighaus muss dieser Caching-Schritt nicht durchlaufen werden, was die Dinge beschleunigen könnte. Ich habe diese Hypothese jedoch nicht getestet.
DMGregory

2
Sprechen Sie über den Editor oder ein konformes Projekt? Im Falle einer Exe-Datei sollte es eigentlich nicht so wichtig sein (nicht getestet), aber der Editor sollte keinen Cache zur Verfügung haben. Prefabs sollten das aber haben und das könnte die Dinge im Editor beschleunigen. (All dies ist Spekulation, nicht wirklich getestet.)
John Hamilton

@ JohnHamilton Im Herausgeber
Evorlor

1
Wenn ich mich nicht irre, sind Fertighäuser in ihrer Einheit statisch, sodass die Wahrscheinlichkeit groß ist, dass sie am Anfang geladen werden. Wenn Sie also Ihr Gelände laden, ist es bereits im Speicher.
TomTsagk

Antworten:


0

Was sind Fertighäuser?

Die Unity-Dokumentation für Fertighäuser beschreibt sie einfach als

Eine Vorlage, aus der Sie neue Objektinstanzen in der Szene erstellen können. Alle an einem vorgefertigten Asset vorgenommenen Änderungen werden sofort in allen daraus erstellten Instanzen wiedergegeben. Sie können jedoch auch Komponenten und Einstellungen für jede Instanz einzeln überschreiben.

Wie wirkt es sich auf die Leistung aus?

Meine Erfahrung zeigt, dass dies nicht der Fall ist. Da Google weder auf eine starre Analyse verweist, ob Prefabs die Leistung verbessern, noch habe ich diesbezüglich Experimente durchgeführt, erklärt diese Frage von Unity answers.com dies folgendermaßen:

Fertighäuser haben nichts Magisches. Sie sind einfach eine Annehmlichkeit. Es gibt keinen Leistungsunterschied zwischen dem Einfügen von zwei Würfeln in eine Szene oder dem Erstellen eines Fertighauses aus dem Würfel und dem anschließenden Einfügen von zwei Würfelfertigteilen in die Szene.

Das ist alles. Wenn es Berichte oder Analysen zur Leistungsverbesserung oder ähnliches gibt, möchte ich dies möglicherweise auch wissen. Vielen Dank.

BEARBEITEN: Ich habe versucht, was Sie gesagt haben, ein Terrain von 50.000 x 50.000 mit einer Höhenkartenauflösung von 512 erstellt (konnte nicht höher werden).

  1. Drücken Sie die Wiedergabetaste zuerst ~ 5 Sekunden
  2. Zum zweiten Mal die Wiedergabetaste gedrückt ~ 4-5 Sekunden (ungefähr)
  3. Fertigte es vor und drückte Play ~ 4-5 Sekunden
  4. Warten Sie eine Weile, kann 5 Minuten dauern und drücken Sie Play 2-3 Sekunden

Der Zeitunterschied war nicht signifikant, aber hier ist, was mir aufgefallen ist. Immer wenn Sie die Geländeeinstellungen in der unteren rechten Ecke ändern, findet eine Verarbeitung statt. Wenn Sie dies abschließen, verringert sich die Startzeit.

So sieht es aus:

Geben Sie hier die Bildbeschreibung ein

Ich kannte Ihre Geländeeinstellungen nicht und wusste nicht, wie komplex sie waren, aber daraus kann ich schließen, dass die Verarbeitung unten rechts möglicherweise die Ladezeit verwaltet. Möglicherweise wird es in den Speicher geladen und es werden einige einmalige Berechnungen / Verarbeitungen durchgeführt.


2
Dies sind gute Informationen, aber sie erklären nicht das Phänomen, das OP beschreibt. Gibt es eine Idee, warum ihre Szene beim Drücken von Wiedergabe im Editor wesentlich schneller geladen wird, nachdem sie ihr Terrain als Fertighaus gespeichert haben?
DMGregory

Antwort bearbeitet.
Könnte

1
Zu Ihrer Information, diese Prozessleiste, die Sie sehen, ist das asynchrone leichte Backen.
DMGregory

Dann bin ich mir wohl nicht sicher, weil ich das Gleiche ausprobiert habe, aber es gab buchstäblich keine zeitliche Änderung für mich.
Hasnain NoOrani

Ignorieren Sie diesen Kommentar zum Clustering von 5/11-Jobs. Das ist das Backen von Light Maps für die Einheit und hat NICHTS mit der vorgefertigten Leistungssteigerung zu tun, über die Sie sprechen. Ich kann die Leistung von Prefab nicht kommentieren, würde aber gerne wissen, ob sie helfen. Ich hoffe sie tun es, es scheint, als würde es Sinn machen. Alle Informationen, die Sie dazu teilen können, sind willkommen.
AllanMac

-1

Additiv zu anderen Antworten. Wir haben ein Fliegengewichtsmuster, das sich mit Gedächtnis und Optimierung befasst. Wenn Sie viele Objekte haben, verwenden Sie das Flyweight-Muster, teilen dieselben Daten im selben Speicher und weisen neuen oder unterschiedlichen Funktionen Speicher zu. unit3d verwendet dieses Muster, um mit Fertighäusern zu arbeiten.

Ein anderer Ansatz ist die Programmierung. Das Klonen ist mit weniger Zuordnung viel schneller als das Erstellen eines neuen Objekts. in c # sein MemberWiseClone und sein Instanziieren in Unity


1
Haben Sie ein Zitat für die Behauptung, dass Fertighäuser eine Verwendung des Fliegengewichtsmusters darstellen und nicht einfach in die Szene dupliziert werden?
DMGregory

@ DMGregory Ich habe einige Erwähnungen in einem Tutorial gesehen, aber es ist offensichtlich. Das Hinzufügen externer Ressourcen zu Ihren Projekten erhöht die Größe Ihres Projekts, aber wir haben nicht so viel, wenn Sie viele Fertighäuser oder Szenen verwenden, sondern nur Instanzen. nur Unterobjekte, die das Hauptfertigteil gemeinsam nutzen. Sie denken, Einheit lädt die gesamte Textur und ... eines Objekts für jeden von ihnen? Ich glaube, eine Art von Fliegengewicht wird sicherlich in der Einheit Fertighaus verwendet
virtouso

2
Unity keine separate Kopie einer Textur für lädt jede seiner Objekte, prefabs oder nicht. Texturen verwenden unbedingt das Fliegengewichtsmuster. Prefabs enthalten jedoch eine Menge Dinge, die keine Texturen sind: GameObjects und Komponenten, die kopiert werden müssen, um die neue Instanz zu erstellen. Es ist nicht offensichtlich, warum diese vollständigen Kopien von Objekten beim Testen im Editor schneller geladen werden können als normale Szenenobjekte. Wir müssen also etwas tiefer in die Eingeweide graben, um herauszufinden, was anders ist.
DMGregory

-4

Prefab dient nur der Wiederverwendbarkeit und hat für eine wiederholbare Aufgabe keinen Zusammenhang mit der Vorverarbeitung. Wenn der Rendervorgang mit Spielobjekten stattfindet und eine Rückverfolgung zum Projektfenster erfolgt, erstellen Sie die Metadatei und speichern Sie einige Informationen darauf. Für das nächste Mal verwendet Unity diese Informationen für das nächste Mal.


6
Ich habe versucht, Ihre Frage zur besseren Lesbarkeit zu bearbeiten. Aber Sie verlieren mich nach dem ersten Satz vollständig. "Wenn (der?) Rendervorgang mit einem oder mehreren Spielobjekten stattfindet ..." ist ungefähr so ​​weit wie ich komme, bevor ich aus dieser Antwort keinen Sinn machen kann. Ich glaube, Sie meinen es gut, aber eine unleserliche Antwort ist einfach nicht hilfreich.
Gnemlock

1
Entschuldigung für die Unannehmlichkeiten, die ich versuchen kann, meine Antwort zu verbessern.
Ramesh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.