Autor Wątek: Czas wirtualny, a czas rzeczywisty  (Przeczytany 2092 razy)

Offline Alk

  • Użytkownik

# Kwiecień 22, 2009, 00:56:15
Witam!
Wydaje mi się, że czas rzeczywisty jest ważny, ale nie wiem dlaczego.
Np. jeśli wszystkie zadania zostały wykonane, a następne jest za X ms to traci się X ms procesora.
Z tego powodu mam pytanie:
Czy, a jeśli tak to kiedy i po co powinno się synchronizować czas wirtualny z czasem rzeczywistym. Używam harmonogramowania klatkowo-czasowego (nie znam się na tym, więc wolę napisać) - jak na razie wydarzenia można dodawać odnośnie klatki lub czasu wystąpienia. Działa to wyłącznie na czasie wirtualnym - skacze się od danego czasu do następnego, ew. odpalając nową klatkę.

Z góry dzięki za pomoc  ;)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Esidar

  • Użytkownik

# Kwiecień 22, 2009, 19:51:58
A po co synchronizować ? Potrzebujesz wyświetlić godzinę, dzień, rok, to pobierasz z systemu czas rzeczywisty. Potrzebujesz czasu do animacji to liczysz samemu. Po co jakieś komplikacje ?

Jahara

  • Gość
# Kwiecień 22, 2009, 20:15:10
A po co synchronizować ? Potrzebujesz wyświetlić godzinę, dzień, rok, to pobierasz z systemu czas rzeczywisty. Potrzebujesz czasu do animacji to liczysz samemu. Po co jakieś komplikacje ?
Żeby nie tracić czasu procka. Jeżeli jakieś obliczenia to momentem synchronizacji powinno być wypuszczenie klatki, ale:

                             następna klatka
---------------|-----------|-----------|---------->
            tu są obl. procka           a tu graf karty

tu chodzi o to że pozwalamy urządzeniom działać(oczywiście zatrzymując je jeżeli za bardzo "wypłynęły" w przód - np. jedną klatkę). myślę że to jest odpowiedź. Synchronizacja może dokonać się sama gdy (w tym przypadku) na graf kartę przerzucisz więcej obiektów.

Dodatkowo w czymś takim jest jeden problem. Pierwszy ZAWSZE powinien być procek, chyba że gracz nie zmienia swojego stanu.

Offline Alk

  • Użytkownik

# Kwiecień 22, 2009, 20:36:10
W szczególności teraz nie mam stałego fpsu. Gdy czas wirtualny zmieni się o jakąś wartość to następuje rysowanie klatki. Czyli może być rysowanie od nowa non-stop, a później długa przerwa - jak dużo zdarzeń na raz ma jakiś czas pomiędzy rysowaniami klatki.

Jahara

  • Gość
# Kwiecień 22, 2009, 20:40:16
W szczególności teraz nie mam stałego fpsu. Gdy czas wirtualny zmieni się o jakąś wartość to następuje rysowanie klatki. Czyli może być rysowanie od nowa non-stop, a później długa przerwa - jak dużo zdarzeń na raz ma jakiś czas pomiędzy rysowaniami klatki.
rozwiązaniem może być sprawdzanie zdarzenia, zatrzymanie karty(jeżeli zakończyła swoją pracę),obsługa zdarzenia, uruchomienie karty. W praktyce takie cacko może być wydajniejsze tylko w tedy gdy czynności przygotowawcze będą lecieć na osobnym wątku w 2 wątkowym procku oraz dobrego zaprogramowania. A do stałego fps. to po co wyciągać więcej niż 40(człowiek zobaczy tylko 30...)?

Offline Alk

  • Użytkownik

# Kwiecień 22, 2009, 20:55:26
Wcale nie chcę wyciągać ponad 40 fps, ale skoro jest czas, a nic się nie dzieje, to odpalane jest rysowanie, żeby później nie tracić na nie czasu.
Mamy czas 20ms,  w 40ms powinno się narysować, a w 50ms zrobić pełno rzeczy. Zamiast czekać 20ms rysuję od razu, później odpalam "pełno rzeczy". Zacząłem się zastanawiać nad tym, ponieważ w grach widać często związek czasu rzeczywistego z wirtualnym - np. odświeżanie info o surowcach w W3.

Jahara

  • Gość
# Kwiecień 22, 2009, 20:58:45
Wcale nie chcę wyciągać ponad 40 fps, ale skoro jest czas, a nic się nie dzieje, to odpalane jest rysowanie, żeby później nie tracić na nie czasu.
Mamy czas 20ms,  w 40ms powinno się narysować, a w 50ms zrobić pełno rzeczy. Zamiast czekać 20ms rysuję od razu, później odpalam "pełno rzeczy". Zacząłem się zastanawiać nad tym, ponieważ w grach widać często związek czasu rzeczywistego z wirtualnym - np. odświeżanie info o surowcach w W3.
Problem w tym że dane ciało może zmienić swój stan po rysowaniu a więc zamiast 1 masz 2. I tutaj mamy problem.
Pozatym człowiek widzi ok. 35 "klatek"/s więc po co pakować 650 fps?(skoro nawet monitor wyświetli 60fps)

Offline Esidar

  • Użytkownik

# Kwiecień 22, 2009, 21:08:53
odświeżanie info o surowcach w W3.
Jaki to ma związek z czasem rzeczywistym/wirtualnym ? Surowce się odświerzają co 1sek... Do tego wystarczy liczenie czasu wirtualnego każdej klatki. Nikogo nie obchodzi czy 15sek wirtualne ma pokrycie w 15sek rzeczywistego. Twoja klatka ma 40ms więc surowce się odświerzą co 25 klatek z dokładnością do 0.04s.

Żeby nie tracić czasu procka.
A co on ma lepszego do roboty ? Jeżeli grasz w grę, to gra go może zajmować w 100%. Nie musi w międzyczasie ratować świata.


Nie chcesz mieć więcej niż 40fps ? Sleep( 1/40fps - czas_klatki ). A procesor w czasie Sleep nie będzie nic robić.

Offline Alk

  • Użytkownik

# Kwiecień 22, 2009, 21:11:59
Czyli synchronizacja czasu wirtualnego z rzeczywistym nie jest konieczna? :)

Jahara

  • Gość
# Kwiecień 22, 2009, 21:31:52
Czyli synchronizacja czasu wirtualnego z rzeczywistym nie jest konieczna? :)
w jest! synchronizacja kiedy WSZYSTKIE urządzenia zakończą swoją pracę.

Offline Alk

  • Użytkownik

# Kwiecień 22, 2009, 21:49:48
Co oznacza, że zakończą swoją pracę ???
Dopóki jest gra, trzeba odświeżać ekran, więc praca nie będzie tu zakończona...

Offline Esidar

  • Użytkownik

# Kwiecień 22, 2009, 21:50:52
w jest! synchronizacja kiedy WSZYSTKIE urządzenia zakończą swoją pracę.
Zdefiniuj urządzenia i "pracę". Ja znam 2: CPU i GPU. Liczenie i Rysowanie.

Jahara

  • Gość
# Kwiecień 22, 2009, 21:52:11
Co oznacza, że zakończą swoją pracę ???
Dopóki jest gra, trzeba odświeżać ekran, więc praca nie będzie tu zakończona...
dopóki procek nie przestanie liczyć aktualnej klatki a gfx card również. W tej klatce nie mają nic do roboty. Ot zakończą swą pracę. Na początku myślałem że chcesz to jakoś bardziej usprawnić.

@Esidar: jeszcze karta dźwiękowa, sieciowa itp. komputer to nie 2 urządzenia!

Offline Pet

  • Użytkownik

# Kwiecień 22, 2009, 22:08:06
A do stałego fps. to po co wyciągać więcej niż 40(człowiek zobaczy tylko 30...)?
Pozatym człowiek widzi ok. 35 "klatek"/s więc po co pakować 650 fps?(skoro nawet monitor wyświetli 60fps)

To ile w końcu widzi człowiek, 30 czy ok. 35 ? Jeśli nie wiesz to nie wprowadzaj ludzi w błąd bo się grubo pomyliłeś. Człowiek jest w stanie dostrzec wielokrotnie więcej FPS. W sieci znajdziesz dużo informacji na ten temat, a zacznij od tego: http://amo.net/NT/02-21-01FPS.html.

Offline Esidar

  • Użytkownik

# Kwiecień 22, 2009, 22:36:29
@Esidar: jeszcze karta dźwiękowa, sieciowa itp. komputer to nie 2 urządzenia!
I ich obsługa zajmuje 0.01% czasu CPU. Od tego jest system wielozadaniowy aby sam decydował kiedy i jakie urządzanie obsłużyć. Gra ma niski priorytet i jeśli system zdecyduje zatrzymać grę na 5sek żeby obsłużyć jakieś urządzenie (np. HD) to sam to zrobi i nic na to nie poradzisz. Gra może jedynie stwierdzić, że od poprzedniej ramki upłyneło 5000ms i o tyle zwiększyć czas wirtualny w grze. Nie potrzeba do tego synchronizacji czasu rzeczywistego.