Disegnare particelle come una chiazza liscia


12

Sono nuovo nello sviluppo di giochi / grafica e sto giocando con le particelle (in 2D). Voglio attirare particelle vicine tra loro come una chiazza, proprio come liquido / acqua. Non voglio disegnare grandi cerchi sovrapposti poiché il blob non sarà liscio (e troppo grande). Non conosco davvero la fisica ma presumo che ciò che voglio sia qualcosa di simile alla tensione superficiale.

Non sono riuscito a trovare nulla su stackexchange o su Google (forse non conosco le parole chiave corrette?). Finora ho trovato due possibili soluzioni, ma non sono riuscito a trovare alcuna informazione concreta sugli algoritmi.

Uno di questi è calcolare lo scafo concavo di particelle che considero un blob. Posso calcolare il BLOB creando una classe di equivalenza (sulla relazione "vicini l'uno all'altro"). Stranamente non sono stato in grado di trovare alcun algoritmo che spiegasse come calcolare lo scafo concavo. Molti post (e tra stackexchange) si collegano a librerie o prodotti commerciali che fanno questo (ho bisogno di librerie per funzionare in C #), ma mai nessun algoritmo. Anche questa soluzione potrebbe avere un problema con un cerchio di particelle, che non rileverebbe lo spazio vuoto nel mezzo.

Durante la ricerca dello scafo concavo, mi sono imbattuto in qualcosa chiamato forme alfa. Il che sembra essere esattamente quello che voglio fare, tuttavia, proprio come con lo scafo concavo, non ho trovato alcuna fonte che spieghi come funzionano effettivamente. Ho trovato del materiale di presentazione ma non abbastanza per continuare. È come un grande segreto che tutti conoscono tranne me: - /

Dopo aver calcolato lo scafo concavo o la forma alfa, voglio renderlo una curva di Bézier per renderlo liscio e piacevole.

Anche se trovo il mio approccio un po 'troppo complesso, forse sto cercando di risolverlo nel modo sbagliato? Se puoi suggerire un'altra soluzione al mio problema o spiegare i pezzi che mi mancano, sarei molto felice e grato :-)

Grazie.



@BlueRaja Grazie per il tuo commento. Anche se avevo già trovato quel post ma l'ho licenziato perché le risposte si collegano a documenti che non risolvono direttamente il mio problema, ma i loro riferimenti potrebbero o un brevetto che non posso usare apertamente (penso, non sono bravo con la burocrazia) (Non ho nemmeno trovato il link per il download).
Nömmik,

1
Il brevetto dei "cubi in marcia" è scaduto nel 2005, la maggior parte degli esempi 2D sono molto più vecchi ed è per questo che potresti averli visti avvertirti del loro uso su vecchie pagine web.
Patrick Hughes,

1
Ecco un articolo di Gamedev che si occupa sia di metaballs che di isosuperfici, con alcuni esempi per chiarire le idee: link
Patrick Hughes,

Grazie per avermi illuminato sui metaballs, sembrano fare quello che voglio :-)
Nömmik,

Risposte:


8

La parola chiave di cui potresti aver bisogno è "Metaballs" e spazia dal complesso campione di gemme GPU nVidia fino alle versioni guidate di scena demo progettate solo per apparire belle e funzionare velocemente.


Anzi, non conoscevo la parola chiave :-) Lo guarderò più da vicino e se sembra essere ciò di cui ho bisogno, accetterò la tua risposta. Grazie!
Nömmik,

1
+1 per me pensando che fossero "polpette" prima di leggerlo una seconda volta.
James,

2
Potresti aggiungere qualche dettaglio in più a questa risposta? +1 se lo fai.
Attaccando

@James Penso che tutti facciano quell'errore la prima volta che vedono la parola!
Jeff,

1

Per convertire un gruppo di particelle in una mesh per renderizzare, in stile metaballs, puoi dare un'occhiata all'algoritmo Marching Cubes , che genera una mesh poligonale dai dati voxel. C'è una demo demoscene che ne ha un ottimo esempio, con tutto ciò che è generato sulla GPU: res numb .


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.