Unity3D - Come tessere sprite 2D?


8

Uso l'illuminazione di vertici dinamici su sprite 2D. Sui folletti più grandi l'illuminazione è più brutta che su quelli più piccoli. Questo perché ogni sprite è solo un quadrato di due triangoli. Non ci sono abbastanza vertici per illuminare aree più grandi.

C'è un modo per usare più triangoli su uno sprite? Forse anche a seconda di quanto spazio sullo schermo coprono?


1
Sembra che tu voglia suddividere il tuo quad? In tal caso, ci sono alcuni buoni esempi in pseudo codice per raggiungere questo obiettivo. Afaik Unity ti consentirà di accedere a una mesh di oggetti di gioco (e ai suoi triangoli / vertici) che dovrebbe consentire di realizzare ciò che desideri. Ecco un esempio in questo caso su gamedev per i quadranti di subdiving: Come suddividere un quad? . È sulla falsariga di quello che stavi cercando?
Logham,

Sì, suddividere un quad è l'approccio che sto cercando. Ciò include gli avvolgimenti e i raggi UV, suppongo. In questo modo avrei più triangoli.
aggsol,

Hai provato a usare uno shader a tassellatura durante il disegno dello sprite? docs.unity3d.com/Manual/SL-SurfaceShaderTessellation.html answers.unity3d.com/questions/583960/...
ClassicThunder

2
Quando tessellate il quad, i valori di illuminazione per i vertici verranno semplicemente interpolati. Il quad è piatto, quindi con più vertici, l'interpolazione sarà solo lineare su tutto il quad. In che modo l'aggiunta di più triangoli risolverà questo problema. Sembra qualcosa che dovrebbe essere risolto con un pixel shader.
Arun R,

@ArunR Un buon punto, ma se ad esempio il quad è più grande della gamma di una luce puntiforme il triangolo userà la luce se il testo non è più luci. L'utilizzo del pixel shader non è purtroppo un'opzione su tutti i dispositivi.
aggsol,

Risposte:


2

Sembra che tu abbia bisogno di creare il tuo oggetto di gioco e utilizzare un algo di triangolazione personalizzato per gestire i dettagli in base a un calcolo matematico relativo alle dimensioni.

Forse qualcosa del genere potrebbe aiutare ...

http://forum.unity3d.com/threads/tessellation-algorithms-for-polygons.228051/

Altre opzioni potrebbero essere l'uso di uno shader più intelligente e una mappa di protuberanze con i tuoi approcci al tipo di spostamento del vertice sprite ...

È difficile da dire senza sapere esattamente cosa stai cercando di ottenere su ciò che potrebbe adattarsi meglio. Speriamo che uno di questi aiuti.


L'idea è di usare la luce dei vertici sugli sprite poiché è molto più veloce delle luci pixel. Soprattutto alcune piattaforme mobili hanno chip grafici a specifiche ridotte.
aggsol,

Quindi stai dicendo che hai un quad di grandi dimensioni che vuoi dividere, quindi per luce di vertice il risultato? Puoi ottenere un risultato molto migliore e più veloce usando l'illuminazione per pixel sull'IMO quad esistente a bassa risoluzione, ma se è quello che vuoi, provalo. Dividere un quad non dovrebbe essere troppo difficile, giusto?
Guerra,

Tieni presente che ciò che risparmi per illuminazione pixel perderesti efficacemente avendo buffer di vertici più grandi ... l'altra opzione ovviamente è avere un po 'di matematica nello shader di vertice per passare un livello di luce al pixel shader basato su una porzione del vertice in modo da ottenere ancora un piccolo VB e non per pixel di luce.
Guerra,

scartare quell'idea ... che non funzionerà ... hmmmm
War

1
Se hai bisogno di chiarimenti sulla domanda, pubblica un commento sulla domanda.
MichaelHouse
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.