|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
Hobits Indago organizātors
Joined: 04 Jul 2003 Posts: 491 Location: Riga
|
Posted: Mon Sep 17, 2007 4:26 pm Post subject: |
|
Un kaa tu noskaidro kad objekts ir gatavs rendereeshanai, tas ir, vinsh netiek updeitots? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Mon Sep 17, 2007 4:55 pm Post subject: |
|
Man bija divi apmēram šādi te divi threadi:
1) update threads - neko nezin par renderēšanu:
Code: | while (running)
{
lock();
wait_event(PREPARE_FINISHED);
update_logics();
update_physics();
signal_event(UPDATE_FINISHED);
unlock();
} |
2) renderēšanas threads - (gandrīz) neko nezin par spēles loģiku:
Code: | while (running)
{
lock();
wait_event(UPDATE_FINISHED);
prepare_state();
signal_event(PREPARE_FINISHED);
unlock();
render();
} |
prepare_state funkcija izpildījās ļoti ātri, jo tā visiem objektiem tikai saglabāja to stāvokli, kas nepieciešams renderēšanai (pozīcija/rotācija/..) atsevišķā mainīgajā, kuru nelieto loģikas/fizikas threads. wait/signal funkcijas dara apmēram to pašu, ko WinAPI Event objekts - nopauzē threadu, ja events ir neaktīvs (wait_event), vai arī atdzīvina citu threadu, kurš gaida uz konkrēto eventu (signal_event). lock/unlock ir visparastākais critical section objekts. Var redzēt, ka render() fja ir ārpus lock sadaļas un izpildās paralēli nākamajam updeitam. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Nov 04, 2007 12:31 am Post subject: |
|
bubu wrote: | Mūsdienās spēles loopam jābūt tādam, lai inputu/loģikas apstrāde notiktu biežak nekā renderēšana, ja dators to spēj pavilkt. |
nu es pārāk ilgi par šo domāju, citādāk es šo topiku neceltu augšā..
esmu spēlējis jaunās spēles...
tajās ir dažādi spēles loop'i...
un piemēram, spēle "Stranglehold", uz Unreal 3..
nu nepatīk man tad tāds timestep's, kādu tu, bubu, gribi ieteikt..
iedomājies datoru, kuram ir tikai 512 MB RAM... vajag palaist spēli, kura prasa 1 GB RAM.. tas, protams, izdodas, bet nāvīgi lēni strādā ALT+TAB, WinKey - spēles minimizēšana, ja tas nepieciešams... un lēni viss strādā tad, kad līmeņa spēlēšanas laikā vajag ielādēt dažas hi-res textūras un augstas kvalitātes modeļus... nu un piemēram, spēlē notiek apšaude, palicis maz dzīvību... un pēkšni sāk lādēties tie modeļi un tekstūras.. viss smagi raustās - ap 10 FPS +-5... nu lūk, tad spēle tākā grafiski ieķeras, bet spēles loops vēl joprojām turpina spēles darbību... nu un nesagaida input'u, spēles galvenais varonis stāv uz vietas, kamēr spēle nemanāmi slīd prom... beidzot ielādējas tekstūras.. viņš ir BEIGTS!!! un tas viss dēļ draņķa loopa... cik esmu spēles spēlējis, tad diezgan daudz tā ar mani noticis..
draņķīgi loopi daudzās spēlēs...
tāpēc es piedāvāju, lūk, šādu variantu...
loģika tiek apstrādāta tikai atlikušajā laikā no paredzētā..
daļa paliek renderēšanai.. pēc iepriekšējā kadra izlemj, cik atstās renderēšanai, no paredzētā to laiku atņem un tad izpilda vienreiz loģiku, ja vēl ir laiks, tad vēlreiz, u.t.t. līdz nonāk pie renderēšanas un norenderē! _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Nov 04, 2007 1:10 am Post subject: |
|
Tas, ko tu stāsti, tam nav sakara ar šiem geim-loopiem. Tavā gadījumā ir vienkārši par maz atmiņas spēlei. Un lai arī kā tu mēģināsi to "apiet" nekas tev nesanāks. Spelē būs novērojama aizķeršanās vienā vai citādākā veidā. Spēles loops tur nekādā gadījumā neturpinās. Ja notiek bremze, tad bremze notiek uz visu sistēmu. Un spēlē nav paredzēta un uztaisīt šādas bremzes apiešana (lasi efektīvās kods). Vienīgais, kas tur var palīdzēt, ir spēles koda optimizēšana, lai tam pietiek ar pieejamo brīvo datora atmiņu.
Pēdējā rindkopā tavis aprakstītā shēmai ļoti līdzīga laika soļa fiksēšanai: parādīta šeit: http://www.gaffer.org/game-physics/fix-your-timestep/ (tavā gadījumā tur tik vajadzētu to while cikla iterāciju skaitu limitēt).
Taču es uzreiz tev var pateikt, ka tādā veidā kā tu saki un arī kā ir rakstīts tajā linkā - tas ar labi nestrādās atmiņas nepietiekamības gadījumā. Skaties, pieņemsim, ka renderēšanai vajadzīgs šausmīgi ilgs laiks (tekstūras lādējas/slikti kešojas/šeideri lēni vai tml) - 0.5 sekundes. Iedomājies, ka tu gribi panākt 10fps. Tātad viena renderēšanas iterācija var būt tikai 0.1 sekundi. Tavs loģikas apstrādes algoritms apskatīsies uz iepriekšējā kadra renderēšanas ilgumu: 0.5 > 0.1 - sapratīs, ka viņam nav laika ko domāt, jo viss laiks ir javelta renderēšanai, un nekā nesaptrādās. Viskritiskāk šis notiek fizikas simulācijām, kurās obligāti nepieciešama kaut viena iterācija itin-bieži. Un ja šī iterācija aizņem ilgāk laika nekā realitātē paredzēts, tb 0.1 sekundi ilgi simulāciju rēķina 0.5 sekundes, tad nākamajā ciklā vajadzēs rēķināt 0.5 sekundes simulāciju, kas aizņems 0.5*(0.5/0.1) = 2.5 sekundes. Iestāsies pamatīga bremze.
Un tas, ko tu tur noquotēji, es tur nebiju teicis, ka renderēšana drīkst notikt reti. Nē. Tas bija jāsaprot tā, ka loģikas apstrādei nevajadzētu būt piesaistītam pie fps. Protams, ka tai nevajadzētu ļoti bremzēt renderēšanas darbu. Tāpēc jau tur teikuma beigās pierakstīts "ja dators to spēj pavilkt." Bet kā to noteikt/izvairīties/apstrādāt - tas jau atkarīgs no pašas spēles arhitektūras un vieda. Loģikas apstrādei bez šaubām jābūt sasinhronizētai ar renderēšanu. Un tā arī vairums spēļu ir. Vienīgi renderēšanai ir mazāka prioritāte nekā spēles loģikai. Būtu stulbi, ja pie lielākas noslodzes tiku apstrādināta spēles loģika/fizika (tb spēles pasaule apstātos vai piebremzētu), taču renderēšana turpinātu renderēt (vienu un to pašu kadru). Multiplayer spēles tas vispār nedrīkst notikt, citādi tā jau būtu čītošana. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Nov 04, 2007 9:22 am Post subject: |
|
bubu wrote: | Spēles loops tur nekādā gadījumā neturpinās. |
nu nezinu, no pieredzes ir bijis tā, kā teicu - spēle palēnām nemanot turpinās... 2 piemēri: R6:Vegas un Stranglehold abi uz U3 dziņa.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Nov 04, 2007 11:39 am Post subject: |
|
Tu, protams, vari tam neticēt, bet ja dators spēlei ir par vāju (maz rama, vājš CPU, veca videokarte, daudz palaisti smagi background procesi), tad nekas cits, kā spēles fīču diseiblošana vai arī datora upgreidošana, nelīdzēs. Programma nevar sev dabūt brīvus resursus no nekurienes :) |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Nov 04, 2007 11:52 am Post subject: |
|
bubu wrote: | Tu, protams, vari tam neticēt, bet ja dators spēlei ir par vāju (maz rama, vājš CPU, veca videokarte, daudz palaisti smagi background procesi), tad nekas cits, kā spēles fīču diseiblošana vai arī datora upgreidošana, nelīdzēs. Programma nevar sev dabūt brīvus resursus no nekurienes | nu labi - spēle lēni iet, kompis nedaudz par vāju, tas tad vienalga! bet ja pēkšņi dēļ viena idiota, kurš pa skype visu laiku - ew ew ew ew... - spēle daļēji apstājas, un tomēr ķer nost visu inputu, turpina darbību, bet neparāda to... tad nav labi...
vislabāk būtu tad, ja vispār strādātu vairāki gameloop'a varianti... viens - labiem datoriem, viens vispār - logic,render,logic,render... - lēniem datoriem... bet nu tā nav... un es nezinu, kautkādu brīnumu dēļ vienreiz kad spēlēju Stranglehold, lecu uz priekšu.. kautkas sāk lādēties.. un pēkšņi esmu beigts un iekritis grafikas tukšumā (nezinu, kā to pareizi sauc)... _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Tenjou
Joined: 22 Nov 2005 Posts: 275
|
Posted: Sun Nov 04, 2007 1:01 pm Post subject: |
|
snake5: Tici vai nē, bet viņu(industrijas spēļu izdevēju) interesēs ir tikai, lai Tu nopirktu labāku tehniku, nevis vēl, lai ko pielāgotu.
Un to būšanu ar input var viegli "izlabot" nevis vienkārši paķert pēdējo pogu, bet gan kā to dara līdzigi Windows, buffero visus eventus + salikt kopā ar piemēru, ko deva bubu ar threadiem. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Nov 04, 2007 1:32 pm Post subject: |
|
Tenjou wrote: | snake5: Tici vai nē, bet viņu(industrijas spēļu izdevēju) interesēs ir tikai, lai Tu nopirktu labāku tehniku, nevis vēl, lai ko pielāgotu.
Un to būšanu ar input var viegli "izlabot" nevis vienkārši paķert pēdējo pogu, bet gan kā to dara līdzigi Windows, buffero visus eventus + salikt kopā ar piemēru, ko deva bubu ar threadiem. | var arī labi nesanākt ar bufferošanu - viss ienāk novēloti, pietam, jo prasīgāka spēle, jo vēlāk visi keypress event'i nonāks.. _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Tenjou
Joined: 22 Nov 2005 Posts: 275
|
Posted: Sun Nov 04, 2007 1:55 pm Post subject: |
|
Neviens jau netraucē Tev piefiksēt laiku, kad keys press tikka pievienots, bonusā vēl paņem flagus kuri nosaka, kuri ir diskardojami kuri nē u.tt.
Tak pavisam vienkārši tas viss ja izmanto fantāziju. Nav jau grūti to izveidot, grūti ir visu to izveidot pietiekami ātru. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Nov 04, 2007 2:10 pm Post subject: |
|
nu... esmu mobilajās spēlēs šito redzējis un... notika tas, ka par daudz piespiesti key'i, un kamēr visus apstrādā...
nu ar Prince of Persia: The Two Thrones uz mobilā.. ja uzinstalē Nokia versiju uz SE, tad - cik reizes nospiedi key'u, tik reizes notika attiecīgā darbība, bet pa to laiku spēle bija nekontrolējama, un tomēr turpināja savākt key'u eventus..
Tenjou wrote: | Neviens jau netraucē Tev piefiksēt laiku, kad keys press tikka pievienots... |
bet tas nepalīdzēs pret bufferī sakrātiem event'iem.. vnk nāks virsū problēma tāda, ka nekas nestrādās, ja tad, kad spēle kautko lādēs, un būs par daudz taustiņi saspaidīti! _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
Tenjou
Joined: 22 Nov 2005 Posts: 275
|
Posted: Sun Nov 04, 2007 2:34 pm Post subject: |
|
Līdzes, jo uztaisi vienkāršu čeku, kas ignorē ja taustiņš nospiests bijis pirms tik un tik un izdzēš no buffera. Kā teicu iepriekš vēl ņem pieliec flagus, lai piem pogai kas ver vaļā karti ir flags, kas diskardo keyu ja netika apstrādāts nākamajos divos frame u.tml. |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Nov 04, 2007 2:55 pm Post subject: |
|
Un cik tad buferī tu eventus varētu sakrāt, tb taustiņus sekundē nospiest? 40? 50? Un saki, ka dators nespēs apstrādāt 50 taustiņu eventus vienā kadra iterācijā (ja pieņem, ka fps=1)? Nu ja tu uz katru eventu lasīsi failu/dekompresēsi mp3 failu, tad jā. Bet ja vienkārši padosi ziņojumu kautkādam objektam savā spēles sistēmā, lai tas pie sevis saglabā šo eventa stāvokli, tad visu paspēsi apstrādāt. Savukārt tas, ka spēles objekti nespēs izpildīt tiem padotās komandas ir drusku cita problēma. Šī problēma saucās lēns un vecs dators (vai arī pārslogots dators, piemēram, ar antivīrusa palaišanu fonā). Un ja nu tā notiek, tad tur nekas nav jāmēģina apiet, nav vērts čakarēties. Lietotājs vien pats ir vainīgs, ka lieki noslogo sistēmu vai arī mēģina uz Celerona palaist Doom 3. |
|
Back to top |
|
|
snake5 Indago dalībnieks
Joined: 27 Jun 2007 Posts: 2590
|
Posted: Sun Nov 04, 2007 3:01 pm Post subject: |
|
bubu wrote: | Lietotājs vien pats ir vainīgs, ka lieki noslogo sistēmu | lietotājs ir vainīgs arī tad, kad viņam kāds pa skype - "ew ewewewe wewe we we w ew e"? _________________ "There are two choices here: "looks good" and "realism"." -- Paul Nettle |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Sun Nov 04, 2007 3:07 pm Post subject: |
|
Nē, tur skype ir vainīgs, ka nesprot, ka fonā jādarbojas netērejot daudz resursu :) Un lietotājs ir vainīgs, ka palaidis skype fonā :)
Tu nekad nevarēsi paredzēt kā, ko un cik daudz lietotājs ir palaidis fonā un kas īsti bremzē gala lietotāja datorā. Nevajag to mēģināt apiet. Liekas problēmas tikai sev sagādāsi. Neviens normāls izstrādātājs par to īpaši neiespringst, jo saprot cik bezjēdzīgi ir ko tādu mēģināt realizēt. Ja cita programma jaucās pa vidu, nu lai arī jaucās. Vienprocesora dators paredzēts izpildīt tikai vienu smagu procesu vienā laikā. Viņš fiziski nevar divus procesus reizē izpildīt. Tur var līdzēt tikai dual-core procesori. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|