Lucrul cu șablon în unity3d shaderlab

Salutări. Următoarea sarcină a crescut: pentru a întuneca întregul ecran, dar la un moment dat faceți o gaură.

Cum se poate face acest lucru?

1 Opțiune - ecran "Latent"

Fixăm ecranul cu bucăți - cred că este clar aici) Avem o textură de cerc, iar restul este susținut cu piese. Nu trebuie să mai faceți nimic altceva, doar să o faceți. DAR! Odată ce aveți nevoie de câteva "găuri", aspectul va deveni mai complicat. Și dacă trebuie să evidențiați dinamic o parte a ecranului?







Opțiunea 2 - Shadere

Cu umbrele, puteți face multe. Dar avem nevoie doar de o mică parte dintre ei - pixeli de tăiere. Ce aș vrea să văd?
1. Unele texturi pe tot ecranul, pe care le alegem culoarea și transparența
2. A doua textura, care deja definește forma "gaurii", poate fi mutată, rotită etc., dezactivată / activa când este necesar.
3. Toate acestea ar trebui să funcționeze în cadrul NGUI și UITexture

În primul rând vă recomandăm să citiți despre Stencil:
Tamponul de stencil (tampon de stencil) este un tampon suplimentar corespunzător dimensiunii cadrului de ieșire, adică fiecare pixel al imaginii de pe ecran are o valoare proprie în tamponul de stencil. De fiecare dată când punctul este atras de ecran, în plus față de teste, cum ar fi compararea cu adâncimea în buffer-ul Z, trece și testul de stencil. Aceasta este, de exemplu, puteți spune - punctul este desenat numai dacă valoarea în șablon este mai mare decât una. Pe de altă parte, puteți spune cum să modificați valoarea șablonului după ce pixelul este redat în acest loc. 1. www.gamedev.ru/terms/StencilBuffer






2. docs.unity3d.com/Manual/SL-Stencil.html

Ca bază, am luat codul de la al doilea link.

Acesta este modul în care arată codul shader pentru UITexture, care este o gaură


Ce trebuie să luați în considerare?
1. A adăugat o textură
2. Modificarea coadajului și a tipului de randare - Transparent
3. Amestecul a fost adăugat astfel încât alfa să fie vizibilă și amestecată corect
4. A schimbat shader-ul fragmentului. În general, acest lucru nu este exact ceea ce trebuie, dar am făcut ca partea transparentă a texturii să fie plină cu culoare și alfa de culoarea din UITexture, iar partea opacă devine transparentă. 0.1 este diferența dintre transparent și opac. Cârligul este mai scurt)
5. Parametrii șablonului spun că desenează toți pixelii și pune valoarea 2

Acum magia este un shader pentru un UITexture cu ecran complet


Puteți observa că textura este recomandată aici, adică pur și simplu completez întreaga rețea cu culoare, fără a folosi datele despre pixeli din textura însăși (da, acolo nu este).

1. Diferența cea mai importantă este parametrii de șablon. Acum desenăm doar acei pixeli care nu sunt egali cu 2, adică cu excepția zonei în care este desenată plasa anterioară. Cool?)
2. Culoarea este luată din parametrul de culoare din UITexture

Asta e tot) Un exemplu de lucru de mai jos. Singurul lucru în cazul în care două măști sunt suprapuse unul pe celălalt, se dovedește că nu este frumos (intersecția texturilor dă o densitate mai mare și zona este ascunsă). Fix Cred că aveți nevoie de parametrii Blend. Dacă cineva vrea să împărtășească - voi fi fericit și recunoscător!

Lucrul cu șablon în unity3d shaderlab







Articole similare

Trimiteți-le prietenilor: