Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Kasenoru

Frischling

  • »Kasenoru« ist der Autor dieses Themas

Beiträge: 79

Beruf: Softwareentwickler

  • Private Nachricht senden

1

11.08.2013, 16:29

Unity - Geometry Explosion Shader

Hi Leute,

ich habe vor kurzem mal damit angefangen mich mit Unity3D zu beschäftigen, hauptsächlich wegen der Plattformunabhängigkeit, da es ja jetzt auch mit Windows Phone & BlackBerry gehen soll. Wie ich festgestellt hatte, gingen viele Dinge am Anfang noch recht einfach. Aber wehe man versucht mal was spezielles zu machen….

Eigentlich möchte ich nur einen einfachen Shader für einen "Geometry Explosion Effect" erstellen. Also das die Geometrie eines Models "zerspringt". Sprich die Dreiecke bewegen sich entlang ihrer Flächennormale und rotieren dabei um ihr eigenes "Zentrum". Natürlich hatte ich schon in der Unity Community gefragt.... aber die Ratschläge dort konnte ich irgendwie nicht für voll nehmen, z.B. ich solle alles per CPU machen weil sowas ginge ja nicht mit Shadern........

Dabei ist das, zumindest aus meiner Sicht, eigentlich keine große Sache, ich hatte so einen Effekt bereits damals mit meiner eigenen Engine + Model-Format gemacht. Ich hatte einfach einen eigenen Exporter für Blender geschrieben, der mir beim Export-Vorgang auch die Flächennormalen + Zentrum in die Vertex-Struktur gepackt hat.

In meinem GLSL Shader brauchte ich dann nichts weiter tun als jeden Verhex entlang der Flächenormale zu bewegen und dabei um das Zentrum des Dreiecks, zu dem der Vertex gehört, zu rotieren. Das war zumindest meine Lösung, weiß nicht ob es da noch bessere Wege gibt (?).

Jetzt sitze ich vor Unity und benutze das FBX-Format und exportiere meine Models mit Blender. Ich denke nicht das der FBX-Exporter von Blender die Flächennormalen & Zentren berechnet. Bleibt also nur noch der Import-Vorgang in Unity, da kann man sich ja einklinken (AssetPostProcessor). Sprich ich könnte dort die Vertex-Struktur nachträglich bearbeiten und die Werte berechnen die mir fehlen, wenn das alles mit Unity denn überhaupt so einfach geht. Da sitze ich dann aber bestimmt wieder einige Stunden dran.

Habt ihr ne andere Idee? Was wäre das beste? Gehe ich eventuell falsch an das Problem ran? (Aber ich schätze mal ich werde wohl nicht drum herum kommen.)

EDIT:

Hier auch mal ein youtube video: http://www.youtube.com/watch?v=4UbJ6YPDP4Q

Das ist der Effekt den ich meine, nur das in dem Video die Rotation fehlt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kasenoru« (11.08.2013, 16:41)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

11.08.2013, 18:20

In meinem GLSL Shader brauchte ich dann nichts weiter tun als jeden Verhex entlang der Flächenormale zu bewegen und dabei um das Zentrum des Dreiecks, zu dem der Vertex gehört, zu rotieren. Das war zumindest meine Lösung, weiß nicht ob es da noch bessere Wege gibt (?).

Du übersiehst bei deinen Überlegungen wohl, dass sich in der Regel mehrere Dreiecke den selben Vertex teilen, so einfach wie du dir das vorstellst, geht's also zumindest im Allgemeinen wohl leider nicht. Eine Lösung führt z.B. über Geometry Shader; da kannst du dir dann auch das Vorberechnen von Zentrum und Flächennormale sparen. So lange sich die Vertices auf einer analytisch berechenbaren Bahn bewegen sollen, geht's dann so wie du dir es vorstellst. Ansonsten wirst du Compute Shader oder zumindest die Stream Output Stage brauchen, sofern du alles auf der GPU rechnen willst...auf Smartphones schaut's mit all dem allerdings eher düster aus... ;)

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »dot« (11.08.2013, 18:33)


Kasenoru

Frischling

  • »Kasenoru« ist der Autor dieses Themas

Beiträge: 79

Beruf: Softwareentwickler

  • Private Nachricht senden

3

12.08.2013, 09:40

Hi dot,

erstmal danke für deine Antwort :)

Zitat


Du übersiehst bei deinen Überlegungen wohl, dass sich in der Regel mehrere Dreiecke den selben Vertex teilen, so einfach wie du dir das vorstellst, geht's also zumindest im Allgemeinen wohl leider nicht.


Ja, das Model was ich für den Effekt benutze ist entsprechend bearbeitet, damit eben ein solcher Fall nicht eintreten kann. Wie gesagt hatte ich es ja eben genauso schon einmal implementiert gehabt, nur halt nicht in Unity.

Das mit dem Geometry Shader kommt für mich wohl nicht in Frage, da es halt auch auf mobilen Geräten laufen soll. Aber wie ich sehe bleibt mir dann wohl nichts anderes übrig als entweder auf den Effekt zu verzichten oder mich halt bei Unity in den Import-Prozess einzuschalten und die Werte zu berechnen.....

Letztlich geht es mir halt nur darum, Objekte in meinem Spiel zu zerstören. Da es sich dabei um Blöcke handelt(Ähnlich wie Blöcke in z.B. einem Tetris-Spiel), bietet sich dieser "Zerspring"-Effekt besonders an. Ich war mir aber bisher nie sicher ob mein Vorgehen für diesen Effekt gut ist und ob ich mir die Mühe in Unity jetzt nochmal machen sollte oder ob es nicht bessere Lösungen dafür gibt. Aber deiner Antwort nach zu urteilen wohl eher nicht.

Naja, falls ihr noch weitere Ratschläge oder Tipps zu dem Thema habt, freue ich mich natürlich :) .

Werbeanzeige

Ähnliche Themen