
În acest articol, vă voi arăta cum să creați o evidențiere a conturului în UE4. De obicei, dezvoltatorii sunt utilizați pentru acest lucru în două moduri diferite:
- Răsturnați grila de două ori. În acest caz, se face mai întâi o rețea (cu material standard) și apoi cea de-a doua (cu o scară ușor mărită și material de emisie)
- Se utilizează algoritmul de recunoaștere a conturului. Este definit ca un material de post-procesare
Pașii de bază
Realizarea efectului de contur al conturului sub formă de material de post-procesare are loc în mai multe etape:
- Creați un material postprocesare care va selecta conturul obiectelor cu opțiunea Render Custom Depth activată.
- Adăugați acest material de postprocesare în lista Blendables, care se află în parametrii blocului Post Volume Process.
- Activarea parametrului Render Custom Depth pentru toate rețelele scheletice și statice pentru care doriți să selectați un contur
Harta hărților
În UE4, există o funcție excelentă care vă permite să faceți grile individuale într-o hartă adâncime separată și apoi să le utilizați în materiale. Această hartă de adâncime conține informații despre distanța dintre fiecare pixel - atât în coordonatele lumii, cât și în câmpul vizual al camerei. O hartă adâncă tipică arată astfel:

Harta noastră de adâncime arată similară, cu excepția faptului că afișează numai obiecte care au opțiunea "Render Custom Depth" activată:

Crearea materialului
Cea mai dificilă etapă. Vom crea un material în care va fi implementat operatorul lui Sobel, care se va prăbuși cu o hartă de adâncime personalizată. Cu alte cuvinte, aplicăm un filtru de detectare a conturului în hartă adâncime personalizată.
Începem cu algoritmul de convoluție. Se bazează pe o matematică destul de sofisticată, dar, de fapt, totul se rezumă la câțiva pași simpli
- Luați pixelul P
- Luăm 8 pixeli de PN adiacenți pixelului P
- Înmulțiți valorile în pixeli P și PN cu ajutorul valorilor din kernelul de convoluție (adică, efectuând nouă multiplicări)
- Adăugați valorile obținute
- Returnați rezultatul

Mai întâi trebuie să utilizați o hartă de adâncime. Acest lucru se face simplu: adăugați nodul Textură de scenă și conectați-l la materialul Emissive Color. De asemenea, setați setarea ID a Texturii Scenei la CustomDepth.

Acum, să folosim pixelii adiacenți. Pentru a face acest lucru, puteți utiliza parametrul UVs în nodul Textură de scenă. Dar problema este că parametrii UV funcționează în coordonatele de textură, adică utilizați valorile de la "0,0" (colțul din stânga sus al texturii) la "1,1" (colțul din dreapta jos al texturii). Prin urmare, trebuie să luăm valoarea inversată a înălțimii și lățimii texturii, le înmulțește cu offset de la centrul celulei (-1, -1) și se adaugă apoi la UV coordonatele pixelului curent. Deci, vom selecta pixelul din stânga sus.

Acum facem același lucru pentru ceilalți șapte pixeli adiacenți. Ca rezultat, calculul offsetului pentru toți cei opt pixeli adiacenți va arăta astfel:

Deci, avem un set de parametri UV pentru toți pixelii adiacenți, deci acum puteți utiliza datele din harta adâncilor personalizate. Am creat o funcție simplă de material: ca parametri de intrare, este nevoie de coordonate UV și apoi returnează valoarea pixelului prelucrat.

Dacă utilizați această funcție pentru a procesa date din pixeli adiacenți, vom avea, de fapt, toate datele necesare pentru a recunoaște conturul. Acum, să creăm o altă funcție pentru materialul care se va convexe.

Așa că am adunat toate piesele algoritmului. Acum rămâne doar să le combinăm în materialul final.

În operatorul Sobel, de fapt, sunt implicate două funcții de convoluție: verticală și orizontală. Probabil ați observat că singura diferență dintre ele este datele de intrare de pe nucleul de convoluție.
Acum să combinăm aceste două valori.
NOTĂ: Asigurați-vă că materialul este în domeniul Post Process, mai degrabă decât suprafața (adică «materiale de domeniu», acest parametru, care este configurat, pentru care va fi utilizat materialul). Acest lucru poate fi schimbat în proprietățile materialului.
Reglarea scenei
Acum că materialul este gata, trebuie să-l adăugăm în lista de efecte post-procesare a scenei. Selectați blocul de postare a volumului de proces din scenă și găsiți elementul Blendables. Adăugați o nouă componentă în lista Blendables și apoi selectați materialul pe care l-am creat din listă. Dacă nu există o unitate post-procesare în scenă, creați-o. De asemenea, asigurați-vă că blocul Post Process are proprietatea Unbound setat la "true". În caz contrar, jucătorul va vedea numai efectul șirului dacă acesta se află în interiorul volumului de postare a procesului.

Pentru a verifica rezultatul, puneți o grilă pe scenă și activați parametrul Render Custom Depth.
Am înființat scena, astfel încât efectul de linie va apărea în plasa statică numai în cazul în care un jucător va aduce la vederea ei. Am decis să folosesc șablonul pentru FPS. În plus, am adăugat funcția Trace la bluetooth MyCharacter. Se numește de un cronometru care bate la fiecare 0,1 secunde și verifică dacă jucătorul se uită la grila statică. Dacă pare, parametrul Render Custom Depth este setat la "true". În cazul în care playerul nu se îndreaptă spre rețea, valoarea din variabila Render Custom Depth se modifică la "false". Aflați cum funcționează toate acestea, puteți găsi în fișier, un link la care puteți găsi mai jos, în secțiunea "Descărcări".
- Aici puteți descărca materialul cu efectul selectării conturului, creat conform instrucțiunilor din acest manual.
- Aici puteți descărca un proiect care utilizează acest efect.
Originalul poate fi citit aici.