Vastaus: PS3, Wii, X360 - kuka vetää pisimmän korren?
keiu sanoi:
Paolo, grafiikan ruudunpäivitys ei ole pakosta sidottu pelin muihin osiin. Mietihän kuinka paljon kaikki menisi päin mäntyä tietokoneilla ja lukitsemattomilla ruudunpäivityksillä jos näin olisi. Vai olenko väärässä?
Totta, se ei ole pakosti sidottua, mutta konsolipeleissä se on hyvä synkkareferenssi koska
ruudunpäivitys pyritään pitämään vakiona. Tämä siksi että ei ole normitapauksissa järkevää
päivittää tekoälyä ja fysiikka
useammin kuin grafiikka. Joissain peleissä tosin tehdään
kompromissi ja piirretään grafiikkaa asykronisesti niin tiheään kuin raudan rajoissa pystytään,
esim. GoW. Tällöin voi ajatella että järjestelmässä on kaksi asynkronista hardissäiettä, CPU
(AI, fysiikka, animaatio) ja GPU (rendaus).
Uusissa moniytimisissä järjestelmissä asiat monimutkistuu, koska säikeiden väkisinsynkkaus
johtaa helposti siihen että suurin osa ytimistä lyö tyhjää sen aikaa kun odotellaan raskainta
prosessia valmitumasta. Tämä muutos 'klassiseen peliohjelmointiin' verrattuna on yksi niistä
syistä miksi ajatellaan että next-gen laitteille kodaaminen on vaikeaa (eli kallista). Valmiita malleja
tämän ongelman ratkaisemiseen toki on, esim:
1.)
Fysiikkaa, AI:ta ja animaatiota työstetään omissa säikeissään omaan tahtiinsa, rendausvaiheessa
haetaan kunkin säikeen sen hetkinen tilanne. hyvää: skaalautuvuus, huonoa: eri osat pelimaailmassa
epäsynkassa keskenään, synkkaus hukkaa tehoja. ("asynchronous parallel function model")
Koodi:
säie 1. säie2. säie3. säie4. GPU
| | anim | |
fys | | | |
| AI anim | |
| | | - sync - - - | - - - (input)
fys | anim - | - - - render -
| | | | |
| AI anim | |
2.)
Peliobjektien fysiikka, AI ja animaatio jaetaan kokonaisuuksina säikeille, jolloin tiedetään
että kohdassa N ainakin objektin fysiikka, tekoäly ja animaatio ovat synkassa keskenään.
Rendaus suoritetaan kun tarpeelliset objektit on ajettu. Hyvää: synkka, skaalautuvuus,
huonoa: säikeiden työlastin tasapainottaminen, keskenään vuorovaikutteisten objektien
synkka. ("parallel data model")
Koodi:
säie1 säie2 säie3 GPU
|_ _ _ | _ _ _ | | input <-|
| | | | |
fys fys fys | |
| | | | |
AI AI AI | |
| | | | |
anim anim anim | |
|- - - - - - - - - - - - render - - - - |
Näin niinkuin pelkistetysti. Tekstissä varmasti vilisee virheitä, anteeksi.
edit: Hienot grafiikat!