Jump to content
Unity Insider Forum

Zerstörbar Gebäude und Objekte - Wie würdet ihr ...


Demerion73

Recommended Posts

Hallo,

 

ich wollte mal Fragen wir ihr es am besten angehen würdet, wenn in erster Linie Häuser zerstörbar sein sollen oder zummindestens deutlich Schaden nehmen. Wobei diese Gebäude begehbar sein sollen.

 

Bisherige Ideen wären:

 

1. Das Gebäudemesh in Segmente Teilen und diese dann fragmentieren und in Unity dann Kraft auf diese Fragmente ausüben oder diese kolabieren lassen.

2. Wie (1) jedoch jeweils ein Segment das man normalerweise sieht und jeweils eine seperate Kopie die fragmentiert ist und eben geladen wird wenn der jeweilige Collider Schaden registriert.

3. Innenraum und Aussenwelt trennen was bei einer sonst offenen Welt eher störend wäre ?

 

Gibs da vieleicht nen Ansatz den schonmal jemand verfolgt hat ?

Oder hat jemand einen Tip ? Das ganze kann ja schon negativ für die Performance in Unity sein wenn man es falsch angeht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie genau müssen denn die Zerstörungen sein? Normalerweise würde ich für jedes Gebäude verschiedene Meshes bauen in unterschiedlichem Zerstörungsgrad und das jeweilige Mesh entsprechend anzeigen. Das geht natürlich auch für Gebäudeteile. Der Aufwand zum Modellieren steigt dabei natürlich gewaltig an. Dürfte aber aus Performancesicht nicht besonders nachteilig sein.

 

Wenn du natürlich jeden Einschlag und jedes Loch in der Mauer individuell haben willst, wird das aufwändig. Das Asset, das Torigas verlinkt hat, sieht allerdings schon ziemlich cool aus...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie genau müssen denn die Zerstörungen sein? Normalerweise würde ich für jedes Gebäude verschiedene Meshes bauen in unterschiedlichem Zerstörungsgrad und das jeweilige Mesh entsprechend anzeigen. Das geht natürlich auch für Gebäudeteile. Der Aufwand zum Modellieren steigt dabei natürlich gewaltig an. Dürfte aber aus Performancesicht nicht besonders nachteilig sein.

 

Wenn du natürlich jeden Einschlag und jedes Loch in der Mauer individuell haben willst, wird das aufwändig. Das Asset, das Torigas verlinkt hat, sieht allerdings schon ziemlich cool aus...

 

Ich dachte falls ich das in Wandsegmenten mache würde ein Seg. x% Schaden nimmt und dann kolabiert bzw. anfängt zu bröckeln.

Wenn dem so ist wie du sagst das es nicht besonders auf die Performance geht wäre das schon beruhigend. Ob die Wand jetzt vollständig einfällt sodas die Innenräume zu sehen sind da bin ich noch planlos.

 

Aber nein jeder Einschlag muss nicht zu sehen sein, ich dachte die Löcher ggf. als Alternative. Also die Mauer kolabiert dann nicht oder angedeutet mit nem Effekt dafür dann halt ersatzweise die Löcher.

 

Ich schau mir das Asset grade an.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also du musst das Gebäude in einzel Teilen verlegen, also z.b in Blender, dann bekommt jedes stück, was evt. abfallen soll ein collider und rigidbody, isGraftiy bei rigidbody wird deaktiviert und wenn es per script, z.b das leben des Gebäude ist 0, dann schaltest einfach isGraftiy auf true und gegebenenfalls beeinflusst, wie schnell und wohin die stücke fliegen sollen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Abnutzung des Mauerwertes kannst über Texturen laufen lassen und das ganze mit Shadern etwas ausbessern das, dass wie ein 3d modell aussieht. Einschusslöcher kannst du unabhängig von der Mauer machen. Du fragst einfach bei deinem Schuss ab wann er eine Mauer trifft und dann inialisierst du eine Plane mit der einschusstexture an die die wand und richtest sie nach außen. Um die mauer am ende auseinander fallen zu lassen müsstest du einzelne Modelle machen. Hoffe konnte dir weiterhelfen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also du musst das Gebäude in einzel Teilen verlegen, also z.b in Blender, dann bekommt jedes stück, was evt. abfallen soll ein collider und rigidbody, isGraftiy bei rigidbody wird deaktiviert und wenn es per script, z.b das leben des Gebäude ist 0, dann schaltest einfach isGraftiy auf true und gegebenenfalls beeinflusst, wie schnell und wohin die stücke fliegen sollen.

 

Ja hab die Aussenwand in Segmente aufgeteilt allerdings alle überflüssigen Poly entfernt. Muss ich ggf. nochmal machen sonst sieht man eventuell hohle Zwischenräume. Das mit dem Rigedbody aktiv/inaktiv ist ein guter Tip werde erstmal eine Segment erstellen und dann in Unity schauen wir es wirkt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Abnutzung des Mauerwertes kannst über Texturen laufen lassen und das ganze mit Shadern etwas ausbessern das, dass wie ein 3d modell aussieht. Einschusslöcher kannst du unabhängig von der Mauer machen. Du fragst einfach bei deinem Schuss ab wann er eine Mauer trifft und dann inialisierst du eine Plane mit der einschusstexture an die die wand und richtest sie nach außen. Um die mauer am ende auseinander fallen zu lassen müsstest du einzelne Modelle machen. Hoffe konnte dir weiterhelfen.

 

Das ist ne sehr gute Idee, dafür hätte ich sogar noch ein Asset zum erstellen von Decals. Einschusslöcher und ggf. Risse wären einen gute Ergänzung bis die Mauer soviel Schaden hat das sie kolabiert, das hilft auf jedem Fall.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi ich würde das mit Lods lösen und in mehre Steps unterteilen.

 

1. Eine Solide Wand ohne einzelne Segemnte.

2.Wird darauf geschossen switcht du die Lod und die Kapute Wand wird angezeigt. Über einen Partikel Emiter kannst du ausserdem Mauterteile durch die Gegen fliegen lassen.

3. Du kannst durch Lods beliebig viele zerstörungs Stadien einbauen. Das macht die ganze Sache sehr Performant.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde Sleepys Methode umsetzen. Wenn du von Anfang an jede Mauer aus Einzelteilen zusammensetzt, hast du nicht nur Probleme mit der genauen Positionierung, den Texturen und der Masse an GameObjects, sondern auch mit der Performance.

 

- Mauer oder Gebäude als ein Mesh, ohne Unterteilung

- bei leichten Beschädigungen Decals

- bei schwereren Beschädigungen Mesh wechseln

- wegfliegende Teile durch Partikelsystem simulieren

 

So würde ich vorgehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi ich würde das mit Lods lösen und in mehre Steps unterteilen.

 

1. Eine Solide Wand ohne einzelne Segemnte.

2.Wird darauf geschossen switcht du die Lod und die Kapute Wand wird angezeigt. Über einen Partikel Emiter kannst du ausserdem Mauterteile durch die Gegen fliegen lassen.

3. Du kannst durch Lods beliebig viele zerstörungs Stadien einbauen. Das macht die ganze Sache sehr Performant.

 

Da klingt ja interessant. Also anstelle der Detaildarstellung über Distanz erstelle ich einen LOD Manager für mein Objekt sprich ein Script das dessen Details abhängig vom Schaden regelt ?

 

Oder kann ich das LOD System von Unity selbst für diesen Zweck nutzen ? Ich kenn das mit dem LOD nur vage als Detaildarstellung zur jew. Distanz wenn ich das richtig erinnere regelt Unity das je nach Einstellung wenn es mehrere Detailmesh findet xyz_LOD0, xyz_LOD1 usw. ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich würde Sleepys Methode umsetzen. Wenn du von Anfang an jede Mauer aus Einzelteilen zusammensetzt, hast du nicht nur Probleme mit der genauen Positionierung, den Texturen und der Masse an GameObjects, sondern auch mit der Performance.

- Mauer oder Gebäude als ein Mesh, ohne Unterteilung

- bei leichten Beschädigungen Decals

- bei schwereren Beschädigungen Mesh wechseln

- wegfliegende Teile durch Partikelsystem simulieren

So würde ich vorgehen.

 

Also der Ablauf klingt sehr sinnvoll ich weiß nur nicht ob ich das mit dem LOD richtig verstanden hab.

 

Edit: Ich würde nach meinem Verständnis dann etwas ähnlich wie dies -- Asset -- machen oder selbiges abgewandelt verwenden ohne Distanz und Abhängigkeit zur Kamera sondern relativ zum Schaden ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Das könnte so aussehen das wenn du mit der Waffe auf eine Wand zielst und abfeuerst du per Script die LOD wechselt. Solltest du treffen fliegen die Fetzen.

Wenn du nicht triffst wird dein Mesh in die Ursprüngliche LOD Stufe zurückgesetzt und du spartst dir den Polycount. für die zerstückelte Wand.

Eine Normale Wand hat so einen Polycont von vielleicht 100 Tris.

Eine Wand mit einem Treffer hat vielleicht einen Polycount von 2000 Tris

Eine Total zerstörte Wand mit mehren Bruchstücken hat vielleicht einen Polycount von 5000

Jede Explosion würde so auch unterschiedlich ablaufen.

Da gibt es bestimmt auch noch eine ganze Reihe anderer Optimierungsmöglichkeiten.

 

Also ich kann in Maya bereits die Lods als Gruppe festlegen. Alle Objekte die in dieser Gruppe liegen sind Lods.

Beim Import in Unity musst du einen Haken bei Import LODs setzen wenn ich mich recht errinere.

Den Lods switch kannst du dann bestimmt auch per Code ansprechen so das du bestimmst wann gewechselt werden soll.

 

Du brauchst im Prinzip nur ein Script das dir deine Wand im 3D Programm in Bruchstücke und separte Objekte zerlegt du kannst das natürlich auch von Hand programmieren. Für die separaten Objekte könntest dir dann nen Shader basteln der dir die teile durch die gegen fetz. So könntest du zb auch festlegen das je nach Aufschlagwinkel die teile in eine andere Richtung fliegen.

In Battelfield sind da auch manchmal zwei Objekte ineinander verschachtelt zb die Betonwand + Stahlgitter. Das sind dann unterschiedliche Meshes. Machst du ein Loch in die Wand sieht man das Stahlgitter. usw

Unterschiedlich verbogene Gitterstäbe wären auch hier via Lods möglich.

Link zu diesem Kommentar
Auf anderen Seiten teilen

...

 

Ja dann hab ich die Richtung wie man das umsetzen muß schon richtig verstanden.

 

Das mit den LOD Gruppen ist natürlich Praktisch bei Maya, muß mal schauen ob Max das auch anbietet und ob es den Export übersteht :)

 

Das mit dem Stahlgitter bzw. Wandinnenleben ist ne verdammt gute Idee das sieht bestimmt gut aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...