Jump to content
Unity Insider Forum

Große Terrains und Laden von Objekten


dosenbiiir

Recommended Posts

Heyho Leute,

ich plane eine größere Map zu designen (erstmal nur ca. 5k mal 5k), welche ich dann später gegebenfalls vergrößere. Das Spiel wird mit einem First Person Controller gesteuert.

 

Nun habe ich bereits mehrere Stunden im Internet gesucht und bin zu der erkenntnis gekommen, das es wohl am besten die Map in mehrere Terrains einzuteilen und dann immer das aktuell benutze zu laden. (und die außen herum, welche also in der Sichtweite liegen können)

 

Nun meine Fragen dazu:

Welche Größe könnt ihr mir empfehlen für die einzelnen Terrains? (1000x1000; 2000x2000..?)

 

Ich habe mich bisher noch nicht mit dem Laden von Objekten beschäftigt, aber ich weiß, dass man mit Application.LoadLevelAdditive neue Objekte in eine Scene herreinladen kann. Da würde ich mir dann irgendwas zusammen basteln, was die richtigen Terrains reinlädt.

Außerdem habe ich gelesen, dass man mit .SetNeightbour den 'Nachbar' des Terrains angeben kann (wegen dem LOD usw.) muss ich das jetzt auch machen oder kann ich das überhaupt machen? Imprinzip müsste ich ja bei jedem Laden neuer Terrains, die Neightbours neu setzen (werde ich schon irgendwie hinbekommen), die Frage macht das überhaupt Sinn und brauch ich das auch?

 

Und meine 3.Frage bezieht sich nun auf das Laden der Objekte auf der Karte (Häuser usw.) wie macht man das am besten? Direkt mit dem gesamten Terrain reinladen? oder in kleineren Einteilungen...? oder ganz anders? :D

 

Ich danke für eure Antworten ;)

 

Liebe Grüße

dosenbiiir

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich verstehe deine Frage nicht so ganz!

 

Also ein Terrain ist kein komplex Wireframe sondern einfach nur eine Plane die Tessteliert wird. Ist ein Terrain nicht sichbar weil der Player in eine andere Richtung schaut ist das Terrain Flach (Plane) Deswegen brauchst du fürs Terrain doch auch keine LOD ?

Wenn du camera occlusion culling verwendest werden doch eh alle nicht sichtbaren Elemente ausgeblendet- Die Objekte sind dann also auch erst da wenn du sie brauchst und das automatisch.

 

Lods brauchst du nur für 3D Modelle nicht aber fürs Terrain.

 

Die Terrain Größe ist doch egal da kannst du dich austoben wie gesagt das Terrain wird tessteliert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ein Terrain ist kein komplex Wireframe sondern einfach nur eine Plane die Tessteliert wird. Ist ein Terrain nicht sichbar weil der Player in eine andere Richtung schaut ist das Terrain Flach (Plane) Deswegen brauchst du fürs Terrain doch auch keine LOD ?

Erstmal danke für deine Antwort ;)

Gut zu wissen dass das Terrain tesseliert wird^^

Aber igendwas wird es mit dem LOD schon auf sich haben sonst würde es wohl nicht in der Unity Documentation stehen, obs nun die Bäume sind oder was weiß ich :D

"Lets you setup the connection between neighboring Terrains. This ensures LOD matches up on neighboring terrains."

 

Wenn du camera occlusion culling verwendest werden doch eh alle nicht sichtbaren Elemente ausgeblendet- Die Objekte sind dann also auch erst da wenn du sie brauchst und das automatisch.

 

Die Terrain Größe ist doch egal da kannst du dich austoben wie gesagt das Terrain wird tessteliert.

Naja das occlusion culling bezieht sich doch nur aufs rendern der objekte, die sonst doch trotzdem noch in der Scene und somit im Arbeitspeicher geladen und verbrauchen Leistung? Bei einer großen Map könnte da sich einiges zusammen sammeln, dazu gibts doch die möglichkeit Objekte und Scenen reinzuladen oder sehe ich da etwas falsch?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gut zu wissen dass das Terrain tesseliert wird^^

Ja das macht ja das Terrain so performant als wenn man als Terrain ein 3D Mesh Terrain verwendet.

zweite Vorteil ist das ein Terrain via Vertex Paint texturiert wird.

Eine oder mehre Texturen werden einfach ganz oft übers Terrain gekachelt. Via Vertex Paint wird dann festgelegt wo welche Textur sichtbar ist. Das ist das selbe Prinzip wie eine Maske in Photoshop.

Würde man eine 4096 * 4096 px große Textur auf ein 2000*2000 Terrain legen hättest du ja rechnerisch 4 Pixel pro qm.

Das sieht dann natürlich ziemlich scheisse aus. Deswegen wird hier so getrickst.

 

Aber igendwas wird es mit dem LOD schon auf sich haben sonst würde es wohl nicht in der Unity Documentation stehen, obs nun die Bäume sind oder was weiß ich

 

Ja LOD gelten für Objekte die vielleicht auf dem Terrain stehen nicht aber fürs Terrain selbst.

Mit den LOD legs du ja sozusagen fest wann welches Modell eingeblendet werden soll ( Distanz abhängig)

Bist du zb 1 km von deinem Baum entfernt wird dieser nur als Plane in weiter ferne angezeigt. Du kannst dann problemlos 1000 Bäume in der ferne sehen.

Kommst du nähe ran ist dein Sichtfeld kleiner du sieht keine 1000 Bäume mehr aber dafür sind die bäume nähe und du schälst in eine andere LOD stufe wo der baum schon sehr einfach als Geometrie Objekt dargstellt wird.

Kommst du noch nähe siehst du vielleicht noch 5 Bäume und da kannst du dann deine Urspüngliche Plane komplett durch Bäume mit 10000 tris als Beispiel ersetzen.

 

Das mal zu den LODs

 

Also mit dem Speicher internen Zeugs kenn ích mich jetzt nicht so gut aus aber da du zb einen Baum als Prefab hast muss dieser nur einmal geladen werden. (Glaube ich)

Also ich bin der Meinung das du während das spiel leuft nichts reinladen musst. Wenn dann macht es doch mehr Sinn das gesamte Level vorzuladen. Auch hier frägst du den falschen.

 

Nach Amdahlsches Gesetz der Parallelisierung stell ich mir da die frage was wohl einfacher ist:

Die Elemente gleich laden und aufs Culling etc vertrauen. Den reinladen musst sie ja früher oder später eh

Oder im Spiel ständig Objekte rein und rausladen. Das braucht doch genau so Arbeitsspeicher und Rechenleistung.

 

Wie gesagt auf dem Gebiet bin ich kein Experte :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja das macht ja das Terrain so performant als wenn man als Terrain ein 3D Mesh Terrain verwendet.

zweite Vorteil ist das ein Terrain via Vertex Paint texturiert wird.

Jaa das hatte ich mich schon immer gefragt wie die das machen, ich hatte nähmlich mal ein Terrain mit Blender gemacht und bin dann an der Texturierung gescheitert^^ Das ist echt voll gut gemacht :D

 

Das mal zu den LODs

Ja das Prinzip von LODs weiß ich auch, ich weiß nur nicht was das .SetNeightbor im Bezug aufs Terrrain verändern soll, denn die Dinstanz zwischen Objekt und Kamera ist ja entscheident und die ist ja auch ohne .SetNeightbor da.

 

Wie gesagt auf dem Gebiet bin ich kein Experte :)

Ja das weiß ich eben auch nicht, habe aber gelesen das bei OpenWorldGames auch nur Teile der Map/Objekte geladen wird.

Klar brauch das rein und rausladen auch Arbeitsspeicher und Rechenleistung, aber so würde man verhindern, dass eben zu viele Objekte gleichzeitig geladen sind. Ich denke ab einer bestimmen Größe wird das perfomance sparend sein, stellt sich nur die Frage ab wann. Vielleicht mach ich nochmal ein Thread dazu auf ob man gleich die gesamte Szene laden sollte oder eben nur einzelne Teile. Aber ich will auch niemanden damit rumnerven.

 

Danke für deine Antworten

Liebe Grüße

Dosenbiiir

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 3 months later...

Ich hatte das Problem Mega Terrain http://forum.unity-community.de/topic/10243-mega-terrain/

 

Meine einzelnen Terrains haben jetzt eine Größe von 3000x3000 bei 10x10 Terrains und bei einer geplanten Sichtweite von maximal 1300. Leider teste ich selber noch an der Optimalen Größe von Terrains.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...