[ eva01 @ 01.03.2005. 19:11 ] @
Dakle u mom malom programcicu imam ucitanu scenu i kamera kao i neki objeti se pomeraju. Ono sto mi predstavlja problem je sledece:

Ako je frejm rejt jednak ili iznad frekvencije osvezavanja monitora sve izgleda glatko tj. bas onako kao sam i zeleo da bude.

Ipak ako smanjim frejm rejt ispod 75 Hz (monitor mi je podesen na osvezavanje od 75Hz). Prilikom pomeranja objekata pocinjem da primecujem kako podrhtavaju. Tj. ono sto vidim je i trenutni i prethodni frejm. Uopste translatorno kretanje "secka". To se uglavnom odnosi na manje objekte i eventualno ivice vecih objekata.

Probao sam da smanjim osvezavanje na 60 Hz i sve je bilo glatko pri 60 fps dok je na 85 Hz i 60 fps bilo "seckanja".

Znam da je sve ovo jako neodredjeno ali prva stvar koju bih voleo neko da mi odgovori jeste dali je ovo normalno ? Sve bi ovo mogao dobrim teoretisanjem da podvedem pod to da moje oko vidi razliku izmedju prethodnog i trenutnog frejma. Ipak logicno mi je da i bez 75 fps mogu da imam apsolutno glatko kretanje (recimo na 30 fps).

Odmah da napomenem da sam uradio sinhronizaciju na zeljeni fps. Sve je gotovo isto i pri: D3DPRESENT_INTERVAL_ONE i D3DPRESENT_INTERVAL_IMMEDIATE. Ocigledno korsitim direct 3d (9.0).
[ Reljam @ 02.03.2005. 17:14 ] @
To jeste normalno, a taj efekat koji vidis se zove 'tearing'. Stvar se resava tako sto u control panelu iskljucis VSync (sto li su tamo stavljali tu opciju, da ih neko pita), a onda namestis D3DPRESENT_INTERVAL_ONE.
[ eva01 @ 02.03.2005. 17:38 ] @
Pa upravo sam to uradio i jednini rezultat je da sada directx ignorise D3DPRESENT_INTERVAL_ONE. Dakle maksimalni fps mi nije na frekvenciji osvezavanja monitora vec je odredjen brzinom racunara. Kada spustim fps ispod frekvencije osvezavanja i dalje imam podrhtavanja.
[ yooyo @ 02.03.2005. 21:31 ] @
Ako hoces glatko pomeranje onda moras da iscrtavas ekran na frekvenciji osvezavanja montora (60, 72, 75, 85 ili 100,...). U svim ostalim situacijama dobices nezeljene efekte. Pokusacu da objasnim nekoliko....

1. vsync je iskljucen, fps je veci od frekvenciji osvezavanja montora:
- primetices "tearing", tj. videce se horizontalna linija koja "sece" novi i prethodni frejm
- animacija je glatka ako izuzmemo prethodni nezeljeni efekat
- ako je fps blizak frekvenciji osvezavanja videce se tearing linija kako se polako krece po slici.

2. vsync je iskljucen, fps je manji od frekvenciji osvezavanja montora:
- tearing se primecuje mnogo manje ali i dalje postoji
- animacija nije glatka, primecuje se "stucanje" animacije

3. vsync je ukljucen, fps je manji od frekvenciji osvezavanja montora:
- nema tearinga
- animacija nije glatka zato sto se prakticno iscrtava 1x, 2x, 3x ili vise puta jedan te isti frame (zavisi od fps-a). Npr.. neka je fps oko 50 and refresh 60Hz. Posto je vsync ukljucen kartica ce svakih 16.666 ms osvezavati ekran. Sa druge strane, tvoj program nije u stanju da postigne tu brzinu (isporucuje nove frejmove svakih 20 ms) pa ce kartica ponavljati zadnji frame na ekranu. Kada program isporuci novi frame kartica ceka na vsync i tek tada ga prikazuje. Zbog razlike u frekvancijama osvezavanja i iscrtavanja neki frejmovi ce biti prikazani 2x a neki 1x i to je razlog zasto animacija nije glatka.

yooyo
[ eva01 @ 03.03.2005. 13:58 ] @
Malo je olakšanje zato što nije problem u mom programu... Ipak mislim da je pored toga što si naveo za primer 60 Hz i Vsznc-ON problem i u tome što kompijuterska animacija i nemože da bude glatka na npr 30 fps.

Da je problem samo u pravilnim razmacima izmedju frejmova onda bi ukljucivanje D3DPRESENT_INTERVAL_TWO (iscrtava na svakom drugom Vsync-u) rešilo stvar. Ipak bar kod mene to nije slučaj (istina primećuje se da je animacija glađa ali ivice objekata su i dalje nejasne).

Pošto sam malo tražio po net-u našao sam da 25 fps specifična vrednost samo za TV i film. Navodno zato što su slike koje emituje TV u stvari setovi zablurovanih slika (bliskih). Oko dakle vidi više bliskih slika i to ga dodatno zavarava. I naravno osvežavanje TV-a je 50 Hz ali se osvežava svaka druga vertikalna linija.

Pošto sajt na kome sam ovo našao nije vezan za neko konkretno istraživanje (sve je više odokativno), ako neko ima neke konkretnije podatke oko optimalnog fps u real time komp. animacijama neka se javi (ja nisam našao..).

Adresa je http://mikhailtech.com/articles/editorials/fps/
[ yooyo @ 03.03.2005. 17:28 ] @
Ajde pojasni, sta znaci "ivice objekata su nejasne". Mozda neki screenshot bude od pomoci.

TV funkcionise na malicice drugaciji nacin, tj. radi se o interlace-u. TV signal se sastoji od 25 slika ili 50 poluslika. Jedna poluslika (field) je skup svih parnih ili neparnih linija slike. Dve uzastopne poluslike cine sliku, ali su poluslike vremenski pomerene za 1/50Hz (20ms). To znaci da je npr. prva poluslika sadrzi akciju u 0 ms, druga u 20ms, treca u 40ms,... TV iscrtava prvu polusliku (parne linije) pa zatim drugu polusliku (neparne linije) ali se prethodna poluslika jos nije izgubila sa ekrana.
Moze se reci da TV radi na 50Hz u duplo manjoj vertikalnoj rezoluciji (720x288).

yooyo
[ eva01 @ 03.03.2005. 22:29 ] @
Izgleda da si me pogrešno shvatio. Kada uzmem screenshot ekreana sve se vidi sasvim jasno. Problem je u tome što animacija nije glatka. Ono što mi najviše smeta je to što mogu da primetim siluetu prethodne pozicije objekta. Ipak izgleda na osnovu sve ove priče da to neizbežno pri smanjenju fps ispod frekvencije osvežavanja. Okačio sam dole prepravljen d3d primer (neki od tutoriala) i namestio sam da trougao ide sa leva na desno. Iscrtavanje bafera je sinhronizovano na svaki drugi vSync. Tako da ćeš videti o čemu govorim.

E da i pripazi prepravio sam ovo da radi u full screen modu. Tako da proveri dali ti kartica podrzava 800x600 60Hz X8R8G8B8 mod. Ako ne onda prepravi u sorsu.

Ako promeniš u sorsu da se bafer iscrtava na svaki vSync onda će biti glatko.