Jump to content
Unity Insider Forum
Cenix

Marching Cubes Planet

Recommended Posts

Hallo Leute,

meine bisherigen Erfahrungen in der Spiele-Programmierung beschränken sich im Moment noch auf kleinere 2D Spiele (Point-and-Click).

Jetzt möchte ich mich gerne an ein kleines 3D-Spiel wagen. Und zwar möchte ich ein Planetenspiel basteln, der Punkt an dem ich allerdings nicht weiterkomme liegt leider bei einer recht komplexen Sache, zu der ich trotz googeln nicht besonders weit gekommen bin. Das Problem ist dass ich einige Anforderungen an das Planeten-GameObjekt habe, bei denen ich nicht weiß, wie ich das umsetzen könnte.

Die Anforderungen an den Planeten sind folgende: 

1. Prozedural erzeugt

2. Marching Cubes Planet wie im Spiel "Space Engineers" 

3. Zufällige Ressourcen-Erzeugung innerhalb des Planeten (Erzadern und Hotspots) ähnlich wie beim Myzel von Pilzen

4. Planetare Schichten (Planetenkern,  Planetenmantel (in diesem speziellen Fall "heißes Gestein",  und vorkommen von Magma), Planetenkruste festes Gestein)

5. Erhöhter Druck und Hitze je näher man dem Kern kommt

6. Gravitation (mein geringstes Problem, da ich sowas selber schon mal umgesetzt habe)

7. Prozedural erzeugte Schäden/Krater bei Meteorit-/Asteroideinschlägen an der Position des Einschlags.

 

So jetzt wisst ihr schon mal meine Anforderungen an meinen Planeten. Zu Punkt 1 und 2 habe ich mir schon einige Tutorials angeschaut, besesen etc., auch die auf Youtube von Sebastian Lague ( https://www.youtube.com/channel/UCmtyQOKKmrMVaKuRXz02jbQ ).

Dort habe ich fast das gefunden was ich suche, der Punkt ist nur ich hab keine Ahnung wie ich den Marching Cubes Algorythmus auf einen Prozedural erzeugten Planeten anwende. Mit einem einfachen Terrain ist es ja bei meinen Anforderungen nicht getan. Es gibt in dem "Marching Cubes" Video von Sebastian Lague eine kurze Szene, bei dem er einen Planeten  erzeugt. Allerdings weiß ich nicht wie er das macht. Ich habe versucht, das nach zu vollziehen, aber ich bekomme maximal eine Sphere daraus. 

Natürlich bin ich mir voll bewusst, dass das ein seeeeehrrr komplexes Thema ist.

Vielleicht hat jemand von euch sowas in der Art oder etwas Ähnliches gemacht und/oder kann mir ein paar Tipps geben?

Share this post


Link to post
Share on other sites

Marching Cubes generiert ein normales Mesh aus einer SDF, den musst du gar nicht "auf einen Planeten anwenden", der Algor_i_thmus bleibt genau gleich.

Den groben Lösungsansatz siehst du in seinem Video beim Planeten

float distance = radius - length(pos) + noise(pos);

Das ist in dem Fall deine SDF, wobei die SDF einer Sphäre

float SphereSDF (vec3 pos)
{
 return length(pos) - radius;
}

ist (normalerweise genau umgekehrt, aber das macht nichts, dann kehrt sich einfach nur dein Distanzwert um). Das erklärt also warum du ne Kugel rauskriegst.

Was dir fehlt ist noise(pos) und hier wirds deutlich schwieriger. Im Grunde versuchst du mit Funktionen so rumzumodellieren dass du irgendeine modifizierte Form deiner Kugel kriegst.
Es gibt jede Menge unterschiedliche Algorithmen um die unterschiedlichsten Ergebnisse zu erzielen. Da wirst du wild ausprobieren müssen und das wird dauern bis du auf ein Ergebnis kommst mit dem du zufrieden bist.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...