Fizikas dzinis

**Fizikas dzinis** (angļu: *Physics engine*) ir datoru programmatūra, kas nodrošina aptuvenu simulāciju noteiktu fiziskās sistēmas, piemēram, cieta ķermeņa dinamiku (ieskaitot sadursmes atklāšanu), mīksto ķermeņa dinamiku, un šķidruma dinamiku, izmantošanas darbību jomās datorgrafikā, videospēlēs un filmās. To galvenie pielietošanas veidi ir videospēlēs (parasti kā starpprogrammatūra), šajā gadījumā simulācijas notiek reāllaikā. Termins dažreiz tiek izmantots vispārīgāk, lai aprakstītu jebkuru programmatūras sistēmu fizisku parādību imitēšanai, piemēram, augstas veiktspējas zinātnisko simulāciju.

## Apraksts
Ir divas fizikas dziņu klases: reāllaika un augstas precizitātes. Ļoti precīziem fizikas dziņiem ir nepieciešama lielāka apstrādes jauda, lai aprēķinātu ļoti precīzu fiziku un tos parasti izmanto zinātnieki un datoru animācijas filmās. Reāllaika fizikas dziņi - tie tiek izmantoti videospēlēs un citos interaktīvās skaitļošanas veidos - izmanto vienkāršotus aprēķinus un samazinātu precizitāti, lai savlaicīgi aprēķinātu, lai spēle reaģētu ar spēlei atbilstošu ātrumu.

### Zinātniskie dziņi
Viens no pirmajiem vispārējas nozīmes datoriem, ENIAC, tika izmantots kā ļoti vienkāršs fizikas dziņa tips. To izmantoja, lai izstrādātu ballistikas tabulas, lai palīdzētu Amerikas Savienoto Valstu militārajam novērojumiem, kur dažādu artilērijas lodes nolaižas, kad tās izšautas mainīgā leņķī,  kā arī ņemot vērā vēja izraisīto novirzi. Rezultāti tika aprēķināti tikai vienu reizi, un tie tika tabulēti drukātās tabulās, kuras izdalīja artilērijas komandieriem.

### Spēļu dziņi
Lielākajā daļā datorspēļu procesora ātrums un spēle ir svarīgāki par simulācijas precizitāti. Tā rezultātā tiek izstrādāti fizikas dziņu projekti, kas dod rezultātus reāllaikā, bet kas atkārto reālās pasaules fiziku tikai vienkāršiem gadījumiem un parasti ar nelielu tuvinājumu. Biežāk simulācija ir vērsta uz “uztveres pareizas” tuvināšanas, nevis reālas simulācijas sniegšanu. Tomēr daži spēļu dziņi , piemēram, Avotu, izmanto fiziku mīklās vai kaujas situācijās. Tam nepieciešama precīzāka fizika, lai, piemēram, objekta impulss varētu pieklauvēt šķērsli vai pacelt grimstošu priekšmetu.

Fizikāli balstīta personāžu animācija agrāk izmantoja tikai stingru ķermeņa dinamiku, jo tos ir ātrāk un vieglāk aprēķināt, bet mūsdienu spēles un filmas sāk izmantot ķermeņa mīksto ķermeni. Mīkstā ķermeņa fizika tiek izmantota arī daļiņu iedarbībai, šķidrumiem un audumam. Dažreiz tiek nodrošināta noteikta veida ierobežota šķidruma dinamika, lai modelētu ūdeni un citus šķidrumus, kā arī uguns un sprādzienu plūsmu caur gaisu.

### Sadursmes atklāšana
Spēlēs esošie objekti mijiedarbojas ar spēlētāju, vidi un viens ar otru. Parasti lielāko daļu spēļu 3D objektu attēlo divas atsevišķas acis vai formas. Viena no šīm acīm ir ļoti sarežģītā un detalizētā forma, kas redzama spēles spēlētājam, piemēram, vāze ar elegantiem izliektiem un cilpveida rokturiem. Ātruma labad objekta attēlošanai ar fizikas motoru tiek izmantota otra, vienkāršota, neredzama acs, lai fizikas motors parauga vāzi traktētu kā vienkāršu cilindru. Tādējādi nebūtu iespējams izšaut lādiņu caur vāzes roktura caurumiem, jo ​​fizikālā motora modelis ir balstīts uz cilindru. Fizikālajā apstrādē izmantoto vienkāršoto sietu bieži sauc par sadursmes ģeometriju. Tas var būt iesiešanas kaste, lode vai izliekts korpuss. Dzinēji, kuru galīgā forma sadursmes noteikšanai izmanto ierobežojošās kastes vai ierobežojošās sfēras, tiek uzskatīti par ārkārtīgi vienkāršiem. Parasti ierobežojošo lodziņu plašas fāzes sadursmju noteikšanai izmanto, lai sašaurinātu iespējamo sadursmju skaitu, pirms sadursmes atklāšanas šaurā fāzē tiek veikta dārga acs sadursmes noteikšanai.

Cits diskrētas sadursmes noteikšanas precizitātes aspekts ietver kadru ātrumu vai mirkļu skaitu sekundē, kad tiek aprēķināta fizika. Katru rāmi uzskata par atdalītu no visiem pārējiem kadriem, un atstarpe starp kadriem netiek aprēķināta. Zems kadru ātrums un mazs ātri pārvietojošs objekts rada situāciju, kad objekts vienmērīgi nepārvietojas telpā, bet, šķiet, tā vietā teleportējas no viena vietas telpā uz nākamo, kad tiek aprēķināts katrs kadrs. Šāviņi, kas pārvietojas ar pietiekami lielu ātrumu, palaida garām mērķus, ja mērķis ir pietiekami mazs, lai ietilptu spraugā starp ātri kustīga šāviņa aprēķinātajiem kadriem. Šīs nepilnības novēršanai tiek izmantotas dažādas metodes, piemēram, Second Life lādiņu attēlojums kā bultiņas ar neredzamām aizmugures astēm, kas garākas par rāmju spraugu, lai sadurstu ar jebkuru objektu, kas varētu ietilpt starp aprēķinātajiem kadriem.

### Mīksta ķermeņa dinamika
Alternatīva cieto ķermeņa fizikas sistēmu ierobežojošo kārbu balstīšanai ir izmanto uz galīgo elementu balstītu sistēmu. Šādā sistēmā 3D objektam tiek izveidots trīsdimensiju, tilpuma sadalījums. Testēšanas rezultātā tiek iegūti vairāki ierobežoti elementi, kas attēlo objekta fizikālās īpašības, piemēram, stingrību, plastiskumu un tilpuma saglabāšanu. Pēc konstruēšanas galīgos elementus risinātājs izmanto, lai modelētu spriegumu 3D objektā. Uzsvars tiek izmantots, lai vadītu lūzumus, deformācijas un citus fiziskus efektus ar augstu reālisma un unikalitātes pakāpi. Palielinoties modelēto elementu skaitam, palielinās motora spēja modelēt fizisko izturēšanos. 3D objekta vizuālo attēlojumu maina galīgo elementu sistēma, izmantojot deformācijas ēnojumu, kas darbojas uz CPU vai GPU. Pabeigto elementu bāzes sistēmas nebija praktiski izmantojamas spēlēs, jo tām bija raksturīga augsta veiktspēja un trūka instrumentu, lai izveidotu 3D elementu galīgo elementu attēlojumus. Ar augstākas veiktspējas procesoriem un instrumentiem, lai ātri izveidotu apjomīgus teselējumus, rotaļās sāka izmantot reālā laika galīgo elementu sistēmas, sākot ar Zvaigžņu kariem: *[[Zvaigžņu kari: Spēks mostas|Spēks mostas]]*, kas izmantoja digitālo molekulāro materiālu koka, tērauda, miesu un augus, izmantojot doktora disertācijas ietvaros algoritmu, ko izstrādājis Dr James O'Brien kā daļu no savas doktora disertācijas.

### Brauna kustība
Reālajā pasaulē fizika vienmēr ir aktīva. Visām Visuma daļiņām ir pastāvīga Brauna kustība, kad spēki virzās uz priekšu un atpakaļ viens pret otru. Spēļu fizikas dzinējam šāda pastāvīga aktīva precizitāte lieki tērē ierobežoto CPU jaudu, kas var izraisīt tādas problēmas kā samazināts kadru ātrums. Tādējādi spēles var likt objektus “gulēt”, atspējojot fizikas aprēķināšanu objektiem, kuri noteiktā laika posmā nav pārvietojušies noteiktā attālumā. Piemēram, 3D virtuālās pasaules spēlē Second Life, ja objekts atrodas uz grīdas un objekts nepazūd no minimāla attāluma apmēram divās sekundēs, objektam fizikas aprēķini tiek atspējoti un tas vietā sasalst. Objekts paliek sasalis, līdz fiziskā apstrāde objektam atkal aktivizējas pēc sadursmes ar kādu citu aktīvu fizisku objektu.

### Paradigmas
Videospēļu fizikas dziņiem parasti ir divi galvenie komponenti: sadursmju atklāšanas / sadursmes reaģēšanas sistēma un dinamikas imitācijas komponents, kas atbild par spēku novēršanu, kas ietekmē imitētos objektus. Mūsdienu fizikas dziņos var būt arī šķidruma simulācijas, animācijas vadības sistēmas un aktīvu integrācijas rīki. Ir trīs galvenās cietvielu fiziskās imitācijas paradigmas:

* Soda metodes, kurās mijiedarbība parasti tiek modelēta kā masveida atsperes sistēmas. Šis dziņa tips ir populārs deformējamās jeb mīkstā ķermeņa fizikā.
* Uz ierobežojumiem balstītas metodes, kur tiek risināti ierobežojumu vienādojumi, kas novērtē fizikālos likumus.
* Uz impulsiem balstītas metodes, kur impulsus piemēro objekta mijiedarbībai.

Visbeidzot, ir iespējamas hibrīdas metodes, kas apvieno iepriekšminēto paradigmu aspektus

## Ierobežojumi
Fizikas dziņa reālisma galvenā robeža ir skaitļu precizitāte, kas apzīmē objektus un spēkus, kas iedarbojas uz objektiem. Ja precizitāte ir pārāk zema, noapaļošanas kļūdas ietekmē rezultātus un mazās svārstības, kas nav modelētas simulācijā, var krasi mainīt paredzamos rezultātus; simulēti objekti var uzvesties negaidīti vai nonākt nepareizā vietā. Kļūdas tiek kombinētas situācijās, kad divi brīvi kustīgi objekti ir savienoti kopā ar precizitāti, kas ir lielāka par to, ko var aprēķināt fizikas dzinis. Tas var novest pie nedabiskas uzkrāšanās enerģijas objektā noapaļošanas kļūdu dēļ, kas sāk vardarbīgi kratīt un galu galā izpūst objektus. Jebkurš brīvi kustīgu fizikālu objektu tips var parādīt šo problēmu, taču tas ir īpaši pakļauts ķēžu posmu ietekmēšanai zem lielas spriedzes un riteņu priekšmetiem ar aktīvi fiziski nesošām virsmām. Augstāka precizitāte samazina pozīcijas / spēka kļūdas, bet rēķinoties ar lielāku CPU jaudu, kas nepieciešama aprēķiniem.

## Dziņi

### Reāllaika fizikas dziņi

;Atvērtā koda

*Advanced Simulation Library - atvērtā koda aparatūras paātrināta daudzfizikas simulācijas programmatūra
*Box2D
*Bullet
*Chipmunk physics engine - divdimensiju fizikas dzinis
*Newton Game Dynamics
*Open Dynamics Engine
*PAL (Physics Abstraction Layer) - Vienota API, kas atbalsta vairākus fizikas dziņus
*PhysX
*Siconos  Modelēšanu un simulāciju mehāniskās sistēmas ar kontaktu, triecienu un Kulona likums
*SOFA (Simulation Open Framework Architecture)
*Tokamak physics engine

;Publiski pieejams

*Phyz (Dax Phyz) - 2.5D fizika simulators / redaktors.

;Slēgto avotu / ierobežota bezmaksas izplatīšana

*Digital Molecular Matter
*Havok
*Vortex by CMLabs Simulations
*AGX Multiphysics by Algoryx Simulation AB
*Algodoo by Algoryx Simulation AB

### Augstas precizitātes fizikas dzinēji

* VisSim - vizuālas simulācijas motors lineārai un nelineārai dinamikai
* Darba modelis ar Design Simulation Technologies

## Atsauces


## Ārējās saites