Jump to content
Unity Insider Forum

"Netz" auf kugelförmiges Mesh


Mordna

Recommended Posts

Hallöchen,

ich versuche momentan zu erreichen, dass ein Netz aus Secksecken und 12 Fünfecken um eine Kugel (bzw. Planet) gelegt wird, also in etwa sollte es so aussehen:

http://prntscr.com/b3zdho

(Das habe ich per GL c# code erreicht)

Jedoch soll es später mal ein Planet werden, also nicht ganz kugelförmig:

http://prntscr.com/b3zdkb

Das Problem ist sichtbar...

Außerdem will ich kein Mesh haben, das die Linien darstellt, da

  1. Mehrere Submeshes benötigt werden (64k limit)
  2. Man weit rauszoomen darf , sodass eventuell die fps nur aufgrund der Linien zu Grunde geht
  3. Die Landschaft prozedural auch im Spiel noch verändert wird

Ich habe bereits alle Punkte dieses Netzes, kann daraus auch Linien machen.

Mein Ansatz mit dem Shader war:

  1. Ich berechne für jede Linie im Netz die Normale eine Ebene (e:n*(x-a) = 0), d.h. n = vecAB x a = b x a ,da vecAB = b - a
  2. Somit kann ich für jeden Punkt p die Distanz berechnen
  3. falls die kleiner als ein bestimmter Wert ist, berechne ich die x3 Differenz:

  • falls negativ und die Punktnormale ist nach oben gerichtet: ignoriere den Punkt
  • falls negativ und die Punktnormale ist nach unten gerichtet: arbeite mit diesem Punkt
  • falls positiv und die Punktnormale ist nach oben gerichtet: arbeite mit diesem Punkt
  • falls positiv und die Punktnormale ist nach unten gerichtet: ignoriere den Punkt

  1. Dann wird anhand dem x1 und x2 Abstand eine Farbe berechnet (wie mit Color.Lerp())->output

Meine Probleme:

  1. Mit Shadercode kenne ich mich noch nicht so gut aus, arbeite lieber mit c#
  2. Ich muss für jedes Netz neue Shader erstellen, da die arrays im Shader eine vordefinierte Größe haben müssen?
  3. Brauch man dazu einen Surface Shader oder reicht ein vertex shader?
  4. Wäre dieser Ansatz effizient (bei mehr als 36.000 Kanten (s. Beispiel)), wenn nein, gibt es einen besseren Ansatz (möglichst ohne einen Shader zu benutzen)
  5. in cg oder hlsl werden arrays doch in etwa so erstellt:

const uniform float3 _LevelNormals[36120] = { (-0.00267519,-0.003161566,0.001888227),(0.00267519,-0.003161566,0.001888227)};
//natürlich sind da noch 36118 mehr Normalen drinnen...

 

Ich hoffe man versteht mein Problem. Danke im Vorraus!

MFG Mordna

Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

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

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

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

Lädt...
×
×
  • Neu erstellen...