delta denbora

Edozein ikusentzunezko konsumitzen ari garela pantailan bistaratzen zaizkigun irudiak mugimenduan ikusteko, fotogramen edo frameen arteko abiadura azkarra eta konstantea izatea nahi dugu. Fotogramak pantailan agertuko zaizkigun abiadurari FPS deitzen zaio (ingelesez Frames Per Second, fotogramak segunduko). Gaur egun ohikoena 60 FPS izatea da, hau da, segundu oro 60 irudi agertzen zaikigula aurrean.

Commandos jokoarekin izugarri disfrutatu nuen bere garaian, ordu pila bat pasatu (ge)nituen aritzen. Lezon nere lehengusuarekin pasatu nituen orduak ditut batez ere gogoan, hori bai dela joko batekin gustora aritzea!! Honelako itxura genuela uste dut jokoan ari ginen bitartean (dramatizazioa):

Urte batzuk beranduago, berriz aritu nahi izan nuen, ordenagailu berri eta potenteago batean. Martxan paratu eta ezin nintzen aritu, hori da hori abiadura zutena pertsonaia guztiek! Hemen sartzen da gure delta laguna eta erranen nuke Commandos egin zutenean ez zutela kontutan hartu.

Zer da delta denbora hori?

Erabili izan ditudan hainbat framework-etan dt (delta time) edo delta izeneko aldagai bat aurkitu izan dut update funtzioan, aplikazioa eguneratzen den aldi oro, alegia. Hasieran zer zen ez banekien ere, behin ikasita, zein garrantzitsua den ohartu naiz.

Aplikazio bat eguneratzen den aldi batetik hurrengora pasatu den denbora tartea da delta denbora. Jokoetan edo pelikuletan frame arteko denbora bezala uler dezakegu. 60Hz-eko maiztasunean exekutatutako aplikazioek segundu oro 60 frame bistaratuko dituzte, beraz, frame horien artean 1/60 segundu igaroko dira, 0.016 segundu. Gailu zahar eta mantso batek ez badu potentzia nahikorik segundu oro 60 frame prozesatu eta bistaratzeko, demagun 30 ‘bakarrik’ bistaratu ditzakeela segunduko. Frame bakoitzarentzat 0.033 (1/30) segundu izanen lituzke.

Adibide sinple bat: joku bateko pertsonaia pixel bat mugitu nahi dugu frame bakoitzeko. Taulan segundu batean mugituko dena ageri da.

  • maiztasuna = zenbat frame bistaratzen diren segunduko
  • fdesp = frame bakoitzeko pixel desplazamendua
  • sdesp = segundu bakoitzeko pixel desplazamendua
maiztasuna fdesp sdesp
30Hz 1 px/frame 30 px/s
60Hz 1 px/frame 60 px/s

30Hz-ra dabilen gailuan, segundu batean 30 pixel desplazatuko da gure pertsonaia. 60Hz-ra dabilen gailu batean berriz, 60 pixel. Eta momentu batean gailua mantsotzen bada eta segundu batean 40 eta hurrengoan 53 frame bistaratzen baditu? Gure aplikazioa erritmo finkoan nahi dugu!

Gure aplikazioaren abiadura gailuaren abiadurarekiko independente izateko erabiltzen da delta, grafikoen mugimenduak balio honekin biderkatuz. Aitzineko adibidearekin jarraiki, aipatutako pixel hori delta balioarekin biderkatzen badugu, berdin du zein den gailuaren abiadura, segunduaren bukaeran, distantzia bera desplazatu izanen da gure pertsonaia.

maiztasuna delta fdesp * delta sdesp
30Hz 0.033 (1 * 0.033)px/frame 1 px/s
60Hz 0.016 (1 * 0.016)px/frame 1 px/s

Nahi dugun abiadura lortzeko pixel bakar hori doitu beharko dugu, baino gailuaren abiadura edozein izanda ere, badakigu denbora tarte berdinean distantzia berdina mugituko dela.

Hemendik aurrera eginen dudan edozein joko edo aplikaziotan dudarik gabe kontutan izanen dudan aliatu bat izanen da delta.