Professional Documents
Culture Documents
DirectX
Particles (partikli)
Jeste li se ikada vozili svemirskim brodom? Jeste li taj svemirski brod slupali u bezbroj malenih komadia sudarivi se s kiom meteora? E, taj krajnji rezultat sudara nazivamo particles (partiklima)
pie: Ivica Hoko
efinicija partikla na prvi pogled izgleda jednostavno, no u stvarnosti ima puno filozofiranja oko njih. Partikli nam predstavljaju sitne estice koje nalazimo u prirodi - praina, estice dima, estice vode, ahure od metaka i sline prirodne pojave. U raunalnoj se grafici koriste za sve objekte koji su dovoljno maleni ili dovoljno uestali da ih se moe iscrtavati na odreeni nain. S obzirom na to da su partikli prilino apstraktan pojam, postoji nekoliko trikova koji su nam od velike koristi kod crtanja partikla u realnomu vremenu. Prvo i osnovno svojstvo jest da u veini sluajeva moemo rabiti jednostavne poligone koji su uvijek orijentirani prema kameri. Kao, recimo, kulise koje se uvijek okreu tako da budu orijentirane prema vama. Dakle, uzmu se dva poligona, spoje se u pravokutnik, nalijepi se tekstura i samo se rotira ovisno o kameri; princip koji se koristio, recimo, u starim igrama za crtanje vegetacije (ako se sjeate starih simulacija vonje automobila u kojima je svako drvo zapravo bilo "kartonsko", bez volumena).
Razliiti modeli partikla: Mogunosti partikla su ogromne i ograniene iskljuivo vaom matom. odnosno pravokutnike sastavljene od dva trokuta. Nakon toga eka vas malo ''spolnih odnoaja'' s matricama, vektorima i matematikom openito (kako biste postigli da se poligoni dobro orijentiraju prema vama, skaliraju itd.), no kad tu sitnicu prebrodite, na konju ste. Dakle, s obzirom na to da je rije o poligonima koje sami radite, moete sami i kontrolirati teksturne koordinate, odnosno moete si uzeti hrpu malenih tekstura i zalijepiti ih na jednu veliku, to recimo kod point spriteova nema puno smisla. Znai, moete crtati partikle s razliitim teksturama u istom naletu, samo pratite teksturne koordinate kako se mijenjaju. I sada kree veselje: moete si animirati neki efekt i samo posloiti sliice jednu iza druge te na taj nain dobiti fluidne animacije gotovo bilo ega. Jednako tako, moete cijelu stvar strpati na volumnu teksturu pa kombinirati izmeu raznih slojeva volumne kako biste dobili fluidniju animaciju. Moete isto tako rabiti vie tekstura koje se preklapaju i u kombinaciji daju brutalne efekte primjerice jednu "obinu" teksturu i jednu koja e vam posluiti samo da biste pomaknuli piksele s prve teksture u nekoj eljenoj pseudosluajnoj maniri. Takoer, moete samo ''pucati'' partikle na neku sekundarnu povrinu te ih iskoristiti naknadno kako biste savinuli piksele s izvornog ekrana i dobili efekt koji podsjea na vrui zrak. Moete i... OK, kod teksturiranja imamo dva osnovna principa i jako puno podvarijanti. No, kako dobiti uope same partikle? Dakle, svaki partikl ima svoja nekakva svojstva, recimo trenutanu poziciju, brzinu, smjer, vrijeme nastanka i vrijeme ivota. U praksi se
156
WWW.VIDI.HR
Problemi sa z-bufferom
Maleni problem bi vam mogao predstavljati i z-buffer. Dakle, imamo hrpu poligona koji se rotiraju i to na relativno malenoj povrini; vjerojatnost da e se njihovi poloaji preklapati je znaajna. Nadalje, partikli se mahom koriste i alfom kako bi se postigli bolji Kao na filmskom platnu: Partikli su puno pripomogli u stvaranju realnih efekata u igrama. efekti. Ako nacrtamo poligon u z-buffer, on automatski skrije sve poligone koji se nalaze ponaanja partikla i njihovom interakcijom ili ete iza njega. Ukoliko je na poligon poluproziran ili zaglibiti s poveim shaderom i hrpom parametara proziran, imamo problem. Ukoliko iskljuimo z- kojima ga morate hraniti. Ali i ovom se metodom buffer, partikli e nam kao poligoni prolaziti kroz mogu dobiti krajnje impresivni rezultati te ona sve na to naiu i nee izgledati lijepo Moemo definitivno predstavlja opciju koju treba razmotriti. Partikli dolaze u cijeloj paleti razliitih ''okusa'': dodue iskljuiti pisanje u z-buffer kod crtanja partikla, a ostaviti testiranje naspram z-buffera, no u kao maleni modeli, kao poligoni koji su orijentirani ovom sluaju se moe dogoditi da nam se poligoni prema vama, kao poligoni koji nisu orijentirani koji se inae nalaze dalje od oka iscrtavaju ispred prema vama, kao obine toke u prostoru - oni ovih bliih - zato to jednostavno nemaju informa- mogu biti u interakciji s okolinom, no i ne moraju cije o dubini na kojoj se nalaze ''kolege''. Ovo se moe rijeiti ili dobro dizajniranim sustavom partikla ili sortiranjem partikla prema udaljenosti od oka. U svakom sluaju vam ne gine malo eksperimentiranja i testiranja Bilo je i pokuaja da se partikli naprave u potpunosti preko shadera. Dakle, da shaderi preuzmu ulogu procesora to se tie pomicanja i osvjeavanja partikla. Osim to su shaderi brutalno sposobniji za takve kalkulacije, sve skupa se nalazi u grafikoj Vatromet: Efekt sastavljen od niza malih partikla-zvjezdica. memoriji te nema prebacivanja podataka lijevodesno, kreiranja buffera u realnom vremenu i mogu posluiti i samo kao ukras, ali mogu imati i slinih stvari. Maleni problem je fleksibilnost cijele bitne funkcije. Obzirom da se s partiklima moe stvari: ili ete zaglibiti s rudimentarnim modelom doista puno, posvetit emo i sljedei broj DX Insidera istoj temi, ali u poneto detaljnijem izdanju.
mizirati koliko je god to mogue. Jedna od metoda jest skucati sve partikle u jedan jedini vertex buffer (ukoliko je to mogue) te taj buffer oznaiti kao dinamiki i, recimo, samo za pisanje (D3DUSAGE_DYNAMIC; D3DUSAGE_WRITEONLY) kako biste objasnili grafikoj kartici da se ne zamara puno validacijom memorije, kopiranjem sadraja u sistemsku memoriju, internim validacijama i ''iama'', nego da jednostavno pretpostavi kako e taj komadiak memorije biti brutalno ''silovan'' u skoroj budunosti. Ukoliko ste sloili dobar format za vertekse ne bi trebalo biti problema; verteksi su redovito maleni po veliini (recimo 10.000 partikla predstavlja 10.000 x 6 verteksa po partiklu x 32 bytea po vertexu = 1.8 MB, dakle gotovo veliina prosjene teksture). Druga bi pak metoda bila da imate ve napravljen niz poligona koji sjedi u grafikoj kartici a vi samo proslijedite niz pozicija te u vertex shaderu samo pomiete svaki poligon na mjesto koje ste odredili. Ovome slina metoda jest i instanciranje. Princip instanciranja je da grafikoj kartici poaljete model koji elite iscrtati u jednom strea- Velika eksplozija: Prekrasan efekt eksplozije s partiklima i za komade svemirskog broda.
WWW.VIDILAB.COM
DirectX serijal
Grafika za sve - Vidi 117
157