Autor Wątek: Do czego służy Real Time Loop?  (Przeczytany 1918 razy)

Offline deniol

  • Użytkownik

# Listopad 05, 2011, 20:38:25
Witam, do czego służy tzw. pętla czasu rzeczywistego w grach? Czytałem, że po to aby nasza animacja była płynna i bez skoków. No dobrze, to mam moje dt [delta czasu jak się nie mylę] i moją pętlę, w niej wykonuję obliczenia fizyczna i potem rysuję świat gry. Do czego mam użyć ten dt? Zdaje mi się, że mam np obiekt i aktualizuję jego pozycję np robią takie obliczenie
position += gravity * dt
Gdzie position jest wektorem pozycji obiektu, a gravity wektorem grawitacji [y = -9.81]

Czy tak to działa/się stosuje? Jestem totalnym amatorem i nie mam jak tego sprawdzić.

Offline Mr. Spam

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

Offline Shusty

  • Użytkownik

# Listopad 05, 2011, 20:41:43
Dokładnie

Offline deniol

  • Użytkownik

# Listopad 05, 2011, 20:43:34
Dzięki wielkie :)

Offline kapec94

  • Użytkownik

# Listopad 05, 2011, 20:44:56
Podstawy fizyki. Czas jest potrzebny do wielu obliczeń.
W tym przypadku jest założone, że grawitacja jest przedstawiona za pomocą stałej prędkości oddziałującej na ciało. A jak wiadomo ds = v * dt, gdzie dt to zmiana czasu, a v to zmienna gravity.
Po co jest pętla? Cóż, w sumie nie da  się tego przedstawić inaczej. "Dopóki gra działa, wykonuj wszystkie operacje".

Offline Avaj

  • Użytkownik

# Listopad 05, 2011, 21:02:27
Lepiej używać fixed timestepa. Tu masz taki problem, że np. jak robisz kolizje, to może ci gra zmulić, czas klatki będzie duży (=duże dt), przez co obiekt może np. przelecieć przez ścianę w jednej klatce, tak że wykrywanie kolizji nawet tego nie wykryje.

Offline deniol

  • Użytkownik

# Listopad 05, 2011, 21:11:23
Dziękować

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 05, 2011, 23:46:08
Cytuj
position += gravity * dt
Grawitacja to przyspieszenie, a nie prędkość.

Więc:
velocity += gravity * dt;
position += velocity * dt;

Cytuj
Tu masz taki problem, że np. jak robisz kolizje, to może ci gra zmulić, czas klatki będzie duży (=duże dt), przez co obiekt może np. przelecieć przez ścianę w jednej klatce, tak że wykrywanie kolizji nawet tego nie wykryje.
Dlatego zawsze jak używamy dt to przyjmujemy maksymalną wartość dt i tak piszemy obsługę czasu, żeby tej wartości nigdy nie przekroczyć. Przykładowo zakładamy maksymalne dt = 0.05. Jeżeli czas między ramkami jest większy, to dzielimy czas na równe fragmenty i wywołujemy logikę wielokrotnie. Jeżeli tych fragmentów (=uruchomień logiki) będzie za dużo na raz (np. >5), to uruchamiamy logikę maksymalna liczbę powtórzeń z maksymalną dopuszczaną przez nas deltą (czyli np. 5x logika z dt=0.05). Gra zamuli, ale sobie poradzi.

dt=0.05 to oczywiście przykład. Znam przypadki silników fizycznych, które nie dopuszczały liczenia fizyki z krokiem większym niż 1/60s (wtedy po prostu dzieliły deltę na fragmenty).

Offline Charibo

  • Redaktor

# Listopad 06, 2011, 17:31:51
A czy takie podejście ma jakieś konkretne zalety nad fixed timestepem z accumulatorem?

Offline kapec94

  • Użytkownik

# Listopad 06, 2011, 18:17:45
Ostatni raz pisałem coś, co było do grania z pół roku temu, ale wypowiem się.
Zakładając, że jedno przejście gry ZAWSZE będzie trwać x milisekund, może dojść do tego, że przy jakiejś mocniejszej "zmułce" w grze wykorzystującej fixed timestepa gra doświadczymy "bullet time'u" - gra będzie zakładać, że minęło 16 ms, a minęło 32. Mam dwukrotne zwolnienie gry :)

Offline Xender

  • Użytkownik

# Listopad 06, 2011, 18:29:13
@kapec94 - fixed timestep nie polega na przyjmowaniu założenia ile trwa obieg pętli - tak działały pierwsze gry na pierwsze komputery. Skutek - odpal taką grę na DoSa na dzisiejszym kompie to zacznie ci za... znaczy chodzić bardzo szybko.
Fixed timestep polega na  podziale kroku czasowego na stałe fragmenty.

A co do "bullet time'u" - tak by się stało tylko przy wielkiej zmułce - jakbyś odpalił coś obliczeniowego w tle albo gra sama by się zadławiła. To na wypadek, gdyby obliczenia trwały dłużej niż czas który reprezentują - gdyby nie takie ograniczenie, gra by zaczęła ścinać coraz bardziej aż do zwieszenia.

Offline deniol

  • Użytkownik

# Listopad 08, 2011, 23:29:09
Dzieki, b. Mi sie to.przyda, a jakie polecacie silniki fizyczne darmowe.do niekomercyjnego użytku, dobrze jak by miały ficzer ciał miękkich (cloth)

Offline Kelesh

  • Użytkownik

# Listopad 09, 2011, 02:58:11
Jeśli chodzi o pętlę gry to szczerze polecam ten artykuł:
http://warsztat.gd/articles.php?x=view&id=370

Offline Adam7

  • Użytkownik
    • warsztat.gd

# Listopad 09, 2011, 08:46:17
PhysX jest darmowy nawet do celów komercyjnych. Ficzer dot. ciał miękkich jest.