Jak można grać w gry, zanim zostaną w pełni pobrane?

75

Diablo 3 i StarCraft 2 mają fajną funkcję: mogę zacząć grać, zanim pełna gra lub aktualizacja zakończy pobieranie.

Myślę, że Diablo 3 pobiera obowiązkowe pliki, takie jak zasoby interfejsu użytkownika oraz niektóre siatki i tekstury, które są najpierw używane na kilku poziomach. Jednak rozpoczynając grę, mogę wybrać dowolny poziom, pod warunkiem, że mam odpowiednie zapisy. Nigdy nie spotkałem się z takim opóźnieniem podczas grania - start jest zawsze bardzo płynny.

Jak to działa? Jak mogę wdrożyć podobną funkcję?

nikitablack
źródło
2
World of Warcraft też: P
Kroltan
3
W jaki sposób strony internetowe są widoczne przed pobraniem całych stron internetowych? W jaki sposób wyszukiwarka grafiki Google może przedstawiać nieskończoną listę obrazów bez pobierania nieskończonego czasu? Gry są bardziej wyrafinowane, ale są dość podobne.
Lie Ryan
2
@LieRyan: Jeśli chodzi o „gry są bardziej wyrafinowane”, to zdanie nie ma żadnego fundamentu. Mogą istnieć gry, które są bardziej wyrafinowane, podobnie są (i patrząc na sklepy z aplikacjami, to jest zdecydowana większość oprogramowania, które nie rozwiązuje poważnych problemów) gry, które są znacznie mniej skomplikowane niż masowo skalowalne wyszukiwanie sieciowe, które rozprzestrzenia tysiące serwerów i obsługuje i przechowuje miliardy żądań użytkowników każdego dnia. A potem wyszukiwanie to tylko jedna z wielu funkcji tej firmy. Proszę więc przejść fazę życia, myśląc, że gry są z natury bardziej złożone niż „normalne” oprogramowanie.
fresnel
1
@jhocking: Mówisz do mnie? (jeśli tak, lepiej użyj @ <nazwa użytkownika>, aby otrzymać powiadomienie) Nie, nie bardzo gorzki. Kiedy byłem młodszy, myślałem, że twórca gier będzie królem wzgórza inżynierii oprogramowania. Po prostu wiem teraz lepiej, szczególnie po wydaniu wielu kodów źródłowych gier komercyjnych :) To powszechne nieporozumienie, które powtarza się, by wyskoczyć. Games-Dev naprawdę wygląda jak Elite, ale w rzeczywistości jest to po prostu kolejna specjalizacja w tworzeniu oprogramowania, podobnie jak Super Computing, wyszukiwarki, rozpoznawanie obrazów, e-mail marketing lub ERP dla dużych komputerów.
fresnel
1
Krótko mówiąc, mam słabą przepustowość w domu ( koszty utrzymania na wsi ), a gra jest dla mnie niemożliwa do gry, nawet jeśli mówi „grywalna”. Muszę czekać na „optymalne”. W przeciwnym razie utknąłem czekając 5 minut na każdy ekran ładowania, a opóźnienie jest nierealne, więc zdecydowanie pobiera trochę rzeczy w tym czasie. Prawdopodobnie może przeprowadzić dalsze testy samodzielnie, ograniczając przepustowość.
DoubleDouble

Odpowiedzi:

72

Zasoby takie jak dźwięk, wideo, modele i tekstury są w większości pobierane, a dla każdego z tych zasobów istnieje wiele wersji. Te wiele wersji ma obsługiwać różne opcje graficzne.

Wysyłając najpierw zasoby potrzebne dla niskiej opcji graficznej (które również są najmniejsze). Masz wszystko, czego potrzebujesz, aby zagrać w tę grę, mimo że masz tylko około 15% wszystkich zasobów potrzebnych do obsługi każdej opcji graficznej.

Możesz to sprawdzić ponownie instalując StarCraft 2. Zagraj w niego, gdy tylko pozwoli Ci przejść do ekranu opcji graficznych. Wiele opcji i ustawień będzie niedostępnych.

ClassicThunder
źródło
24
Możesz również zastosować tę samą technikę do całych map lub poziomów w grach z odpowiednią liniowością - najpierw pobierz pierwsze poziomy lub coś takiego. Na przykład Guild Wars 2 dostarczało tylko płyty audio i obszary początkowe (plus trochę więcej) na płycie.
Josh
12
Niektóre gry (np. Gry Blizzard) mają również możliwość pobierania zasobów na żądanie, w zależności od bieżącej lokalizacji w grze. Działa to podobnie do tego, jak często zasoby są asynchronicznie przesyłane strumieniowo z lokalnego dysku twardego, ale w tym przypadku z większym opóźnieniem, zanim żądane zasoby staną się gotowe.
bcrist
1
IIRC, Diablo 3 korzysta z metody opisanej przez Josha Petrie - można ją zagrać, gdy tylko zasoby (być może tylko wersja niskiej jakości, jak opisano w tej odpowiedzi), ale tylko Akt I jest początkowo odtwarzany. Oznacza to, że jeśli dławisz wystarczająco swoje połączenie internetowe, będziesz zmuszony przerwać i pozwolić, by pobieranie nadrobiło zaległości po ukończeniu Aktu I.
Aaron Dufour
1
Innymi słowy, gra może technicznie działać natychmiast po zainstalowaniu pliku wykonywalnego . Może to być zaledwie kilka megabajtów danych. To, jak daleko możesz się dostać do gry, zależy od liczby dostępnych zasobów. Gra instalowana w 20 GB zawiera około 19,9999 GB danych i 0,0001 GB kodu wykonywalnego; tak długo, jak można kontynuować ładowanie danych z sieci, gra może działać z ukończonym mniej niż 1% instalacji.
phyrfox
1
@Brian Spójrz na historię edycji. Nie zadałem żadnej z tych rzeczy, kiedy napisałem odpowiedź.
ClassicThunder
33

Kiedyś wdrożyłem to dla MMO. Pewnego weekendu, gdy próbowałem zainstalować WOW dla mojej córki, upłynęło 48 godzin (łatki, błędy pobierania itp.), Więc postanowiłem stworzyć własne, lepsze rozwiązanie.

Gra zwykle wymaga powiedzenia 10 GB danych przed uruchomieniem. Nie wszystkie pliki są od razu potrzebne, ale gry zwykły czekać, aż wszystkie pliki będą obecne lokalnie. Moje rozwiązanie polegało na tym, aby gra działała lokalnie w normalny sposób, ale plik EXE został oszukany (przy użyciu minifiltratora plików systemu Windows), aby pomyśleć, że wszystkie pliki są już obecne. Gdy żądany plik nie był lokalny, system plików go pobrał i zapisał. W miarę potrzeby gra była powoli kopiowana lokalnie. Gdy dostępna była przepustowość, w tle spływały inne niepotrzebne jeszcze pliki. Działało to ze WSZYSTKIMI grami bez potrzeby ponownej kompilacji, ponieważ mój sterownik minifiltru pobierał pliki w razie potrzeby.

Najgorszą wadą było opóźnienie. Moim rozwiązaniem było stworzenie małego modelu łańcucha Markowa, aby przewidzieć, który plik może być potrzebny, i nadać priorytet programowi ładującemu w tle. Działa to jak urok, a nasza gra MMO była w stanie uruchomić prawie NATYCHMIAST po zaledwie EXE i kilka plików ekranu ładowania było lokalnych (~ 20 MB). Byliśmy w stanie kliknąć link na stronie internetowej i uruchomić naszą grę o pojemności ponad 10 GB w około 30 sekund . Mieliśmy 99% trafień, co oznacza, że ​​kiedy gra potrzebowała nowego pliku po raz pierwszy, już tam był!

Z przyjemnością pomogę komukolwiek innemu to wdrożyć.

Chris Mayer
źródło
5
+1 i byłoby wspaniale, gdybyś mógł udostępnić ten sterownik, ponieważ szukałem czegoś takiego i chciałem go stworzyć sam, jak ty, ale jeśli to już zrobione, chętnie go użyję.
Furkan Omay
5
Ciekawe zastosowanie całkiem zaawansowanej inżynierii. Powinieneś naprawdę napisać o tym post na blogu. :) Jak bardzo pomogły techniki uczenia maszynowego? Jak dobrze potrafią przewidzieć, jakie pliki będą potrzebne?
Paul Manta
1
@FurkanOmay takie rzeczy są prawie zawsze własnością firmy czyjegoś pracodawcy. Nie proś ludzi, by prawdopodobnie złamali warunki swoich umów.
jwenting
@jwenting Z tego co rozumiem, nie zrobił dla firmy, ale dla swojej córki i gier takich jak WoW. Po prostu uprzejmie pytam, nikt nie jest zmuszony. Może po prostu odmówić z jakiegokolwiek powodu i wszystko będzie dobrze. Zapytałem, ponieważ powiedział: „Byłby szczęśliwy, mogąc pomóc komukolwiek innemu we wdrożeniu tego”, więc nie sądzę, aby prośba o przynajmniej punkt wyjścia nie była złym pomysłem, ponieważ już powiedziałem, że jestem gotów wdrożyć to od podstaw w górę.
Furkan Omay
3

Również w niektórych grach obszary świata i pliki są opóźnione, zachowywane są tylko obszary obowiązkowe i można je również zainstalować podczas gry.

Chantola
źródło
2

Podsumowując to, co powiedziało kilka osób, i może dodaj kilka informacji:

  • wstępne pobieranie jest niewielkie, tylko pliki startowe i menedżer pobierania do końca. Byłoby miło włączyć do tego tworzenie konta, tworzenie awatarów i być może strefy początkowe.
  • gdy to działa, użytkownik loguje się i tworzy swoje awatary, najpierw zaczyna pobierać inne rzeczy, strefy niskiego poziomu i wspólne pliki (takie jak podstawowe dźwięki i tekstury, ponownie używasz ich tak często, jak to możliwe w całej grze)
  • gdy użytkownik przechodzi przez kolejne poziomy, zacznij pobierać nadchodzące strefy i inną zawartość
  • jeśli użytkownik wybierze opcje wymagające pobrania, najpierw pobierz wersje o niskiej rozdzielczości, a następnie, gdy gra, pobierz w razie potrzeby wersje o wyższej rozdzielczości i zamień wersje o niskiej rozdzielczości na te wyświetlane w locie. W ten sposób użytkownik coś widzi i stopniowo ujawnia się pełna chwała gry (jeśli oczywiście ma wystarczającą przepustowość i moc komputera)
  • powtarzaj, aż wszystko zostanie pobrane


Będzie to oznaczać większe obciążenie sieci podczas grania, dopóki cała zawartość nie zostanie buforowana lokalnie, ale mniejsze początkowe obciążenie seryjne na twoich serwerach, a także krótsze i mniej frustrujące oczekiwanie na użytkowników podczas początkowego pobierania gry.
Oczywiście, jeśli użytkownik ma wolne połączenie sieciowe, może nadal wyświetlać komunikaty „proszę czekać, ładowanie zawartości” (podaj te) podczas przełączania stref lub możesz sprawdzić przepustowość przy pierwszym uruchomieniu gry i jeśli jest zbyt niski, aby pobrać niezawodnie w locie każą mu tam czekać, a następnie przez co najmniej cały pierwszy poziom (i jeszcze raz, gdy wchodzą do stref, które nie zostały jeszcze w pełni pobrane).
Zapobiega to opóźnieniom gry przez użytkownika, ponieważ jego połączenie sieciowe zostaje zablokowane.

jwenting
źródło