Šis straipsnis – ankstesnio straipsnio „Fizika ir jos panaudojimas kompiuteriniuose žaidimuose” tęsinys. Šįkart, atsižvelgiant į praeito straipsnio komentarus, šiokį tokį dėmesį skirsime fizikos variklių taikymui moksliniams tikslams. Tada pradėsime nuosekliau nagrinėti fizikos variklių taikymo galimybes žaidimuose.
Norint geriau suprasti fizikos variklius, teks susipažinti su fizikoje taip plačiai naudojamomis skaliaro, vektoriaus, matricos ir tenzoriaus sąvokomis.
Skaliarą galėtume apibrėžti kaip dydį, apibūdinamą vienu skaičiumi. Fizikoje sutinkami tokie skaliariniai dydžiai, kaip masė, krūvis, laikas, varža, energija, galia ir kt.
Vektorius – tam tikras skaliarinių dydžių rinkinys. Norint atlikti algebrinius veiksmus su vektoriais, mes juos atliekame su atitinkamomis jų komponentėmis (komponenčių gali būti bet kiek). Fizikoje sutinkame tokius vektorinius dydžius, kaip atstumas, greitis, pagreitis, jėga ir kt.
Matrica – tai i eilučių ir j stulpelių turintis skaliarinių skaičių rinkinys. Matrica nuo vektoriaus skiriasi tuo, jog vektorius visada apibūdinamas viena eilute ir kiek norima daug stulpelių. Matrica apibūdinama viena papildoma dimensija, ir gali turėti be galo daug eilučių ir stulpelių. Kitaip tariant – matrica yra vektorių rinkinys.
Tenzorius – tai dar vieną papildomą dimensiją turintis darinys. Jeigu vektorių buvo galima įsivaizduoti kaip skaičių eilutę, matricą – kaip skaičių lentelę, tai tenzorių reikėtų įsivaizduoti kaip erdvinį skaičių stačiakampį. Tenzorius – tai matricų rinkinys. Moksle erdvinės figūros nelabai mėgstamos, tad tenzoriai čia vaizduojami ne kaip erdvinės figūros, o būtent kaip matricų rinkiniai.
Vis tik, modeliuojant nesudėtingus fizikinius vyksmus, dažniausiai apsiribojama skaliariniais dydžiais ir vos tris (kartais tik dvi) komponentes turinčiais vektoriais. Matricos ir tenzoriai kompiuteriniuose žaidimuose išvis nenaudojami, o moksliniuose tyrimuose naudojami payginti retai.
Pirmieji rimtesni fizikos varikliai buvo sukurti 1980 metais ir taikomi meteorologijoje. Siekiant sudaryti tikslesnes orų prognozes, buvo nagrinėjamos oro ir vandens srovės. Fizikos variklis naudojo vektorinę aproksimaciją ir bet kokią srovę suprato kaip tam tikros krypties vektorių. Modeliuojant šių vektorių tarpusavio sąveikas, buvo bandoma tiksliau numatyti srovių kitimą laike. Bandant paspartinti skaičiavimus neprarandant skaičiavimų tikslumo, buvo sukurti taip vadinami vektoriniai procesoriai. Šiaip ar taip orų prognozės tebėra netikslios. Sudarant orų prognozes kol kas nėra galimybių neatsižvelgti į nedideles oro temperatūros fliuktuacijas, kurios, prabėgus kelioms dienoms, gali duoti visiškai kitokius rezultatus, nei buvo tikimasi.
Panašia skysčių dinamika remiamasi ir kuriant naujas mašinas, lėktuvus ar laivus. Taigi daug esminių dalykų galima įvertinti dar iki transporto priemonės testavimo vėjo tunelyje.
Fizikos varikliai taip pat naudojami padangų protektorių gamykloje. Simuliuojant padangų elgesį esant lietui ar kaitrai, čia, atsižvelgiant į mašinos svorį, nustatoma, kokios medžiagos turėtų būti naudojamos padangoms gaminti.
Elektronikos specialistai, naudodami tą pačią skysčių dinamiką, modeliuoja, kaip turėtų judėti oro srovės kompiuterio viduje, kad kompiuterio vidus būtų vėsinamas optimaliai. Čia, žinoma, atsižvelgiama į didžiausio vėsinimo reikalaujančius prietaisus.
Baigiame trumpą fizikos variklių taikymo moksliniams tikslams apžvalgėlę ir peršokame prie „rimtesnių dalykų“ – fizikos variklių taikymo žaidimuose.
Pirmųjų žaidimų, naudojusių kokius nors fizikos variklius, kūrėjų galimybės buvo pakankamai ribotos, dėl labai ribotų kompiuterio galimybių. Siekiant, kad žaidimas žaidimo metu nestrigtų, žaidime sutinkami objektai buvo labai supaprastinti. Paprastai bet koks objektas būdavo apjuosiamas nematoma tik fizikos varikliui suprantama dar paprastesne figūra – kubu, sfera, cilindru ar kt. Nors skaičiavimai tapdavo paprastesni, tačiau pernelyg supaprastinus objektą, skaičiuojant įvarius kitų objektų susidūrimus su pastaruoju, judesiai būdavo atkuriami nelabai natūraliai. Galima įsivaizduoti, kaip judėtų paveikslėlyje pavaizduotas pingvinas po susidūrimo su kokiu nors daiktu, jeigu jį supaprastintume iki stačiakampio. Iš tiesų visi veiksmai, kuriuo žaidėjas atlieka su aplinkos objektais, yra veiksmai su įsivaizduojamomis paprastomis figūromis. Tais atvejais, kuomet per daug supaprastintas objektas pradeda elgtis nebenatūraliai, naudojama kelių paprastų kūnų aproksimacija. Sakykime, pingvino sparnus ir kojas galėtų atitikti keturi papildomi stačiakampiai.
Iki pat 2000 metų žaidimų realistiškumas, naudojant tuos pačius fizikos variklių principus, gerokai patobulėjo, tačiau kai kurie dalykai išliko visai nepakitę. Geras pavyzdys yra CounterStrike. Nušautas priešininkas paprastai nugriūdavo ant kelių, o tada nuvirsdavo ant pilvo. Jeigu šį užmušė netoliese vykęs sprogimas, šis nuvirsdavo kokia nors kita tradicine poza. Ir taip visada – jokios įvairovės. Žuvęs žmogus tapdavo visiškai neaktyvus, žuvusiojo būdavo neįmanoma kaip nors paveikti. Viena iš priežasčių, kodėl būdavo naudojamos standartinės žuvimo animacijos – per daug silpni procesoriai. Nuo 2000 metų pradėtos naudoti kietų kūnų sistemų fizika. Jos esmė ta, jog veikėją sudarantys paprasti objektai čia galėjo kaip nors sąveikauti vienas su kitu. Tarkim, žuvęs ir nugriuvęs žmogaus kūnas galėjo prisitaikyti prie aplinkos formų. Taip pat buvo galima realistiškiau atvaizduoti vieno veikėjo ar aplinkos poveikį kitam veikėjui.
Tuo metu dar nebuvo galima išspręsti daugelio realistiškumo pojūtį naikinančių problemų, kaip pirštų žaidime atvaizdavimas, sąnarių sukiojimasis. Taip pat veikėjai atrodė lyg iš molio nulipdyti – buvo visai nepanašu, jog jie galėjo turėti kokius nors skeletus. Nemažai vėliau sukurti žaidimai šių trūkumo neturėjo. Kietų kūnų sistemų fizika, leisdama įvairias veikėjų pozas, tame tarpe leido atsitiktinai kūnui susilankstyti ir į juokingas pozas. Kai kada tokie dalykai visai nepageidautini (sakykime, bandant sukurti labai siaubingą žaidimą). Atrodo, jog su šia pseudo-problema dar niekas rimtai nekovojo.
Havok Physics Engine – ko gero plačiausiai naudojamas fizikos variklis. Juo paremta daugiau kaip 150 žaidimų fizika; pradedant žaidimu Unreal Tournament: 2004 ir Half-Life 2, baigiant Company of Heroes. Tam tikra šio fizikos variklio versija buvo taip pat naudojama kuriant visas trilogijos Matrix dalis.
Lieka pristatyti šiuolaikinių fizikos variklių galimybes. Šią įdomią temą paliksime kitam kartui.
41 Komentarai
Profundis
Kaip zmones dar gali minusius det?.. Turbut idomiausias veikalas kuri skaiciau games.lt!Noriu dar:D
MCËJUS
man patiko, geras staipsnis..(smart)
MCËJUS
lauksiu ir kitos temos apie fizikos variklius(smart)
miozeriux
Aš irgi nesuprantu, kas sau gali leisti dėti minusus po šiuo straipsniu…
KELADUS
Buna zmoniu kurie pyksta ant viso pasaulio(nes jiem kazkas nenusiseke) ir delioja minusus issijuose :].Arba kiti nemegsta fizikos.Kaip sakant musu daug, bet visi skirtingi..
padekman
labai idomu buvo skaityti , labai , o ypac apie tyos kvadratukus ir kubus pagarba tau
GytisHV
noreciau patikslinti – matricos kompiuteriniuose zaidimuose labai naudojamos – praktiskai visa kompiuterine grafika yra paremta matricu ir vektoriu operacijomis – objektu pozicija erdveje yra nusakoma butent matrica (nelendant giliau, kitaip straipsnelis gautusi :)). is to isplaukia, jog norint efektyviai naudoti atminti ir efektyviai programuoti – programuotojai ir fizikoje priversti naudoti matricas…
siaip, jeigu butu kam idomu – kaip dirbes/dirbantis toje srityje – galeciau pabandyti suregzti koki apibendrinanti straipsneli su daugiau detaliu.
KILLERIS666
Labai geras straipsnis. Beje ar tai geras pavyzdys is filmo Matrix, kai Neo gauna Matricos vizija?
Landau
Bet kokio taško padėtis erdvėje nusakoma vektoriumi, turinčiu tiek komponenčių, kokio matavimo yra erdvė. Žinome, jog egzistuoja koordinačių sistemų transformacijos (klasikiniu atveju Galilėjaus transformacijos), nepakeičiančios sistemos būsenos. Tai reiškia, jog neegzistuoja vienintelė vektorių sistema, kuria galima apibūdinti tam tikrą taškų sistemą. Žmogus aplinkos objektus supranta kaip trimačius (neskaitome laiko ir likusių 7 hipotetinių dimensijų), tad objektų padėčiai determinuoti paprastai netenka naudoti vektorių, turinčių daugiau kaip tris komponentes.
Matricų, kaip matematinių objektų, naudojimas yra daug sudėtingesnis. Jos nekomutuoja nei sumos, nei sandaugos atižvilgiu. Tai reiškia, jeigu prie matricos A pridėsime matricą B, tai bendriausiu atveju gausime skirtingą rezultatą, nei prie matricos B pridėję matricą A. Bendriausiu atveju, jeigu matricą A galima sudauginti su matrica B, tai ko gero matricos B nepavyks padauginti iš matricos A.
Gyti, ar apie matricas rašei kaip apie matematinius objektus, ar apie kokius nors kitokius? Tarkim, klaviatūros matrica (tinklelis), monitoriaus matrica ar pan.?
Chrono
Puikus straipsnis (smart)
GytisHV
kalbejau butent apie matematines matricas.
atmetus visa sausa teorija (gal univere kaiptik matkes/modeliavimo kursa klausai ? 🙂 nes praktikai daugiausiai tokius dalykus pamirsta jau kita diena (hipotetines erdves, lala, blabla)), bet su vektoriumi tu paprastai gali nusakyti tik pozicija. grafikoje ir fizikoje to uztektu tik tuo atveju, jeigu objektas yra ideali sfera – kiti objektai, pasukti skirtingu kampu, projektuojasi skirtingai, taigi, atsiranda dar viena savoka kaip rotacija. tokiu atveju, galimi keli sprendimai – asis ir kampas arba kampai apie xyz asis.
o jeigu objektas turi kelias rotacijas ir transformacijas – vel sugroja nekomutatyvumas (tavo jau minetas matricu atveju) – pastumtas, pasuktas ir vel pastumtas objektas nebus toje pacioje pozicijoje kaip pasuktas, pastumtas, pastumtas.
o visus tuos veiksmus apsirasius matricine forma, jas sudaugine, galime gauti viena 4×4 matrica, kuri nusako visus tuos veiksmus + galime gauti nemokamu efektu (scale, scew bet kuria asimi).
siuo metu placiausiai paplite API DX ir OGL turi standartines matricu funkcijas ir netgi rekomenduoja naudoti butent matricas.
taigi, tiek apie matricas grafikoje, bet, kaip minejau, automatiskai is to isplaukia, jog ir dauguma fizikos varikliu puikiai supranta matricas ir jas naudoja – vienu atveju – del galimybes iprasta forma pilnai nusakyti objekto transformacija – kitu atveju – del paprastesnio ‘sujungimo’ su grafikos varikliu.
o seip tai restekpa – daugiau tokiu straipsniu 🙂
Comrade_911
(u) 8-|
Landau
Labai įdomiai, Gyti, parašei, labai patiko skaityti. Visgi kai kurių teiginių nesupratau. Atsiprašau, jog nepavyko visko išdėstyti trumpai.
Vienintelė matematinė abstrakcija, kurią galima aprašyti vienu vektoriumi, yra taškas (anksčiau dar buvo mėgstamos normalinės visokiausių tiesių ir plokštumų lygtys). Bet koks paviršius, tiksliai tariant, yra tam tikra erdvėje išsidėsčiusių taškų grupė, kurios elementai (paprastai jų būna be galo daug) tenkina kokią nors vieną ar kelias sąlygas. Žinant šias sąlygas, galima nusakyti bet kurio šias sąlygas tenkinančio taško poziciją erdvėje. Tarkime sferos atveju visi sferai priklausantys taškai vienodai nutolę nuo kurio nors pasirinkto erdvės taško.
Bet kokios netaisyklingos formos paviršiaus atskirus segmentus visada galima aproksimuoti algebriniu polinomu. Šis metodas plačiai taikomas netiesinėje radiotechnikoje, bandant matematiškai aprašyti įvairių netiesinių elementų charakteristikas.
Paviršiaus lygtį matematikai aprašo vektorius naudodami tik tarpiniams skaičiavimams atlikti, tačiau, tiksliai tariant, paviršiaus plotas yra vektorius, kurio kryptis sutampa su to paviršiaus normalės kryptimi.
Landau
Sistemos transformacijos atveju visada turime ją apibūdinantį operatorių. Taigi apibūdinę kurio nors taško padėtį vienoje koordinačių sistemoje, mes galime sužinoti, kokį vektorių atitiks taškas kitoje koordinačių sistemoje. Taip galima apibūdinti ir taškų sistemą. Galbūt galėtum paaiškinti, kodėl atlikus kelias transformacijas skirtinga tvarka pasireiškia nekomutatyvumas? Niekada nepastebėjau, jog taip būtų.
Dar taip pat nesupratau, kuomet rašei apie sukimo transformacijas (deja neteko girdėti, jog kas nors jas vadintų rotacijomis :(), ką būtent norėjai pasakyti žodžiais „tokiu atveju, galimi keli sprendimai – asis ir kampas arba < ...>„
Apie fizikos variklius nedaug nusimanau, tad mano straipsnis buvo tam tikra kitų autorių straipsnių kompiliacija. Manau, jog apie fizikos variklius supranti tikrai geriau nei aš, tad visiškai tikiu, jog matricos kažkokiu būdu gali būti naudojamos, tačiau niekaip nesuprantu, kam jos reikalingos atlikti tiems veiksmams, kurie jų nereikalauja.
Dėkoju, kad perskaitei :). Labai norėčiau išgirsti tavo komentarą.
-mort-
Geras, puikus straipsnis, viskas aiskiai ir suprantamai isdestyta. Laukiu tesinio 🙂
Stump
+1
Labai geras straipsnis.
fa11k3r
Jo straipsnis tikrai yra geras,ir man yra tikrai malonu,kad zmones tokiais dalikais domisi,iesko,ir skleidzia zynias visur kur tik imanoma,ir manau tai yra didelis darbas kuris negali buti gerai neivertinamas.
Tikrai giriu fenks uz geras zynias-Landau:)
Hotizzz
straipsnis tikrai vertas demesio, tai ir toliau 😉
god_of_air
geras straipsnis:-) daug suzinojau(smart)
NFSMW
nu jo … (pritariu)