Daļiņu sistēma

Vikipēdijas lapa

Daļiņu sistēma ir viena no metodēm, kuru izmanto spēļu fizikā, kustību grafikā, kā arī datorgrafikā, kur tajā tiek izmantota liela daļa "sprites" (metode, kas nodrošina vairāku attēlu ielādēšanu), 3D modeļu un citus grafiskos objektus, ar kuru palīdzību tiek renderēti dažādi divdimensionāli attēli vai animācijas, kuras ir ļoti sarežģīti renderēt ar parastām renderēšanas metodēm — kā, piemēram, ķīmisku reakciju darbību, haotisku situāciju attēlošanu vai dabas parādības.

Piemēri šādām parādībām, kuras parasti tiek attēlotas, izmantojot daļiņu sistēmu, iekļauj — uguni, eksplozijas, dūmus vai kustīgu ūdeni (piemēram, ūdenskritumu), dzirksteles, krītošas lapas, akmeņu krišanu, nokrišņus, miglu, sniegu, putekļus, zvaigznes, galaktikas vai vizuāli abstraktus efektus, kvēlojošus objektus, kā arī citas līdzīgas parādības. Šīm parādībām parasti tiek izmantotas daļiņas, kuras ātri izbalē — tās ir atkārtoti emitētas, kuras izmanto efektu avotus. Cita metode, kuru var izmantot lietām, kuras satur tādas lietas kā — kažokāda, zāle, mati — renderēšanā iesaistot visas daļiņas reizē, kuras tiek uzzīmētas un manipulētas kā viena lieta vaicājumā.

Daļiņu sistēmas var būt divdimensionālas vai trīsdimensionālas.

Tipiska implementēšana[labot šo sadaļu | labot pirmkodu]

Parasti daļiņu sistēmas pozīciju un kustību 3D vidē kontrolē ar tā saukto emitētāju. Emitētājs darbojas kā daļiņu avots, un tā atrašanās vieta 3D vidē nosaka, kur tām jātiek radītām, un uz kurieni tās pārvietosies. Parastu 3D objektu, piemēram, kubu vai plakni var izmantot kā emitētāju. Emitētājs ir šo daļiņu kopums, kas darbojas kā rīcības parametri. Šie parametri var iekļaut jaunu vērtību (cik daļiņas tiks uzģenerētas laika gaitā) — daļiņas — sākotnējais vektors (atrašanās vieta, kur tie tiek emitēti pēc izveidošanas), daļiņas "mūžs" (laika vienība katrai daļiņai, kura eksistē pirms pazušanas), daļiņas krāsas un daudzas citas. Visas šīs komponentes kopā parasti tiek izmantotas, lai iegūtu nepieciešamos efektus — tā vietā, lai norādītu precīzu vērtību — izpildītājs norāda galveno vērtību un grādus kā pieļaujamu nejaušību uz katru pusi no centra. Vidēji daļiņas "mūža" garums parasti ir 50 kadri ±20%. Kad izmanto objektu kā emitētāju, parasti vektors ir uzstādīts kā "normāls" atsevišķiem skatam vai skatiem objektā, kur daļiņas parādās izsmidzinātā skatā tieši no katra skata.

Tipisks daļiņu sistēmas atjaunošanas cikls (kas ir izstrādāts priekš katra kadra animācijai) var būt atdalītas divos atšķirīgos posmos, parametru atjaunināšanas/simulācijas posmā un renderēšanas posmā.

Simulācijas posms[labot šo sadaļu | labot pirmkodu]

Veicot simulācijas posmu, jaunu daļiņu skaits, kas jāizveido, ir aprēķināts, balstoties uz jaunām vērtībām un intervālu starp atjauninājumiem, un katrs no tiem ir uzstādīts specifiskā novietojumā 3D laukā, balstoties uz emitētāja novietojumu un jaunām vērtībām. Katrs daļiņu parametrs (krāsas, plūsma u.c.) ir inicializēts, balstoties uz emitētāja parametriem. Katrā atjauninājumā visas esošās daļiņas tiek pārbaudītas, lai redzētu, vai tās ir pārsniegušas savu darbības laiku, ja tā noticis, tās tiek izņemtas no simulācijas. Citādā gadījumā daļiņu novietojums un citi raksturlielumi tiek uzlaboti, balstoties uz fizisku simulāciju, kas var būt var būt tik vienkārši ,cik parādīt to atrašanās vietu vai arī tik sarežģīti, cik uzstādīt tām fiziski precīzu trajektorijas aprēķinu, kas tiek iekļauti ārējos spēkos, tādos kā gravitāte, vējš, u.c. Tām ir kopīgas iezīmes, lai veiktu sadursmes noteikšanu starp daļiņām un norādītajiem 3D objektiem ainā, lai daļiņas pēkšņi atdalītos no objektiem esošajā vidē. Sadursmes starp daļiņām parasti tiek izmantotas reti, kā arī tās ir dārgas un nav vizuāli būtiskas lielāko daļu gadījumu.

Renderēšanas posms[labot šo sadaļu | labot pirmkodu]

Kad atjaunošana ir pabeigta, katra daļiņa tiek renderēta, parasti strukturētā veidā kvadrātiskā platformā (piemēram, trapece, kas vienmēr būs paralēli būs ar lietotāju, kas skatās uz šīs struktūras). Tomēr šo metodi dažreiz nav nepieciešams izmantot priekš datorspēlēm; daļiņu sistēma var būt renderēta kā viens pikselis uz mazas izšķirtspējas/ierobežotas apstrādes vides. Tāpat arī otrādi, kustības grafikā daļiņas mēdz būt pilnā, bet mazā mērogā un tādā veidā viegli renderēt 3D modeļus, lai pārliecinātos pat uz augstas izšķirtspējas. Daļinas var būt renderētas kā "Metaballs" (dažādi objekti, kas var būt dažādās dimensijās); "Isosurfaces" (Trīs dimensionāls analogs no "isoline" (trīsdimensionāla grafika)) tiek aprēķinātas no dažādiem objektiem, kas var būt n-dimensijās, lai skatu padarītu pietiekami reālu īstenībai. Visbeidzot, 3D objekti var tikt attēloti daļiņās — sniega vētra var sastāvēt no mazām 3D sniegpārsliņām, objekts var tikt dublēts un rotēts, lai iegūtu pareizo novietojumu daudziem tūkstošiem daļiņu.

Māksliniekam draudzīgi daļiņu sistēmas rīki[labot šo sadaļu | labot pirmkodu]

Daļiņu sistēmas var tikt izstrādātas un pārveidotas dažādās 3D modelēšanas un renderēšanas pakotnēs, iekļaujot Cinema 4D, Lightwave, Houdini, Maya, XSI, 3D Studio Max un Blender. Šīs rediģēšanas programmatūras māksliniekam dod atsauksmes par to, kā daļiņu sistēma izskatīsies ar uzstādījumiem un ierobežojumiem, kas tos precizē. Ir pieejamas arī plugin programmatūras, kas piedāvā uzlabotus daļiņu sistēmas efektus.

Izstrādātājam draudzīgi daļiņu sistēmas rīki[labot šo sadaļu | labot pirmkodu]

Daļiņu sistēmas kods, kas var tikt iekļauts spēļu dziņos, digitālā satura izstrādes sistēmās un efektu pielietošanā var tikt uzrakstīts no melnraksta jeb tas ir lejupielādēts. Havok piedāvā daudzas daļiņu sistēmas funkcionalitātes. Havok FX API īpaši koncentrējas uz daļiņu sistēmas efektiem. Ageia — tagad meitas uzņēmums no Nvidia — piedāvā daļiņu sistēmas un citas spēļu fizikas funkcionalitātes, kas tiek izmantotas vairākās spēlēs, iekļaujot Unreal Engine 3 games. Both Game Maker un Unity3D piedāvā divdimensionālu daļiņu sistēmu, taču šo sistēmu nevar importēt citos dziņos. Pastāv arī daudzi citi risinājumi un daļiņu sistēma bieži tiek rakstīta no nelieliem uzmetumiem, ja tie nav standartu efekti vai atbilstoši pieprasījumam.