Deweloperzy przyznają, że paski ładowania w grach są często bezczelnym kłamstwem
Moje ulubione paski ładowania są z Xcom gdzie ładowanie trwa 10s bez względu jaki PC masz, ale jak dasz Caps to animacje są pomijane i trwa 2s
??? Przecież wszyscy to już wiedzą od 15 lat , nie którzy dłużej , skąd wy się urwaliście ??
Zdziwi cię to, ale nie wszystkich interesują technikalia gier. Niektórzy po prostu odpalają grę i chcą się w niej dobrze bawić, w dupie mają to jak działa pasek ładowania. Też pierwszy raz się dowiedziałem o tych paskach.
Najbardziej traumatyczny pasek jaki pamiętam był w Sin z 1998 r. Wgrywanie było kompletnie zwalone i gra wisiała w jednym punkcie przez parę minut, co oczywiście odbiło się również na qsave\load. Potem jakiś patch skrócił to chyba dwukrotnie.
Do dyskusji włączył się także twórca gry Nuclear Throne, Rami Ismail, który zdradził, że pracował „nad projektami, w których fałszowano paski ładowania, wydłużano czas animacji lub sprawiano, że poruszają się one z nierówną prędkością”.
Na koniec dodał, że jeszcze nigdy nie zdarzyło mu się zaprogramować prawidłowo działającego paska ładowania.
Ostatnie zdanie w tym fragmencie chyba najbardziej sensowne jest z tych wszystkich tłumaczeń deweloperów przedstawionych w artykule. Po prostu trudno byłoby się komukolwiek przyznać, że nie potrafi stworzyć dobrze działającego paska ładowania, więc trzeba wymyślić jakieś historie ukrywające ten fakt :P
No bo co to znaczy "dobrze działający pasek"? Jedyne co pasek może zrobić, to pokazać, że ukończył się pewien etap ładowania.
Logicznym jest, że aby pasek mógł płynnie w czasie rzeczywistym pokazywać realny procentowy CZAS ładowania, to aplikacja musiałaby z góry ten czas znać :D A to niestety wymaga zdolności jasnowidztwa :D
Żeby to może komuś lepiej uzmysłowić: wyobraźcie sobie, że trwa maraton. Komentator może Wam powiedzieć wyłącznie, że jakiś zawodnik pokonał już np. 1/3 dystansu, ale NIE MOŻE powiedzieć, że upłynęła 1/3 czasu jego biegu, bo nie wie ile czasu zawodnikowi zajmie dotarcie do mety :D
Mógłby co najwyżej zgadywać, np. na podstawie jego średniego tempa z pokonanego dystansu, czy nawet jego wcześniejszych wyników, ale przecież to wszystko tylko zgadywanie, bo może ulec zmianie...
Tak samo pasek postępu, w najlepszym razie może próbować ZGADYWAĆ ile potrwają dalsze etapy działania aplikacji, ale to wyłącznie zgadywanie, więć 100% dokładność i płynność paska jest niemożliwa :D
Ogólnie to da się to rozwiązać na co najmniej dwa sposoby.
Pierwszy, co w sumie sam też ująłeś w podobnym kontekście np. pierwsze ładowanie (lub kilka pierwszych) zrobić sztucznych, ale jednocześnie wykonywać pomiar czasu rzeczywistego ładowania i wyciągnąć średnią. W następnych ładowaniach już będzie realniejszy czas ładowania, bo bazujący na pomiarach, i nawet jeśli gracz zmieni komputer na szybszy (lub wolniejszy), to tutaj nadal jest kwestia żeby dobrze to dopasować.
Inne rozwiązanie, bardziej realistyczne wg mnie to bazujące na ilości plików do załadowania np. gra sprawdza (lub z góry wie, że) mamy 1000 plików do załadowania różnej wielkości i maksymalna liczba plików będzie równoznaczna 100% (choć nie musi być pokazywana ilość procentowa, wystarczy sama wizualna prezentacja) a każdy plik, no to będą jakieś ułamki procentów większe lub mniejsze.
Tam gdzie będą mniejsze pliki to naturalnym jest, że pasek będzie postępował szybciej, a tam gdzie trzeba będzie przetworzyć plik dużych rozmiarów, to pasek postępu ładowania zwolni.
To drugie rozwiązanie jest dla mnie o tyle bardziej realistyczne, bo akurat jak starą grę modowałem pewnego razu, to ma ona możliwość pokazania jak to się dzieje "od spodu", czyli zamiast patrzeć na wizualizację, to można sobie obejrzeć który plik jest w danym momencie ładowany i kilka poprzednich. Pokazuje też podgląd procentowy ile się załadowało plików w całokształcie.
Myślę, że jeszcze dałoby radę wymyślić kilka innych sposobów na rozwiązanie prawidłowo działającego paska postępu ;) Także możliwości są, choć zrozumiałe jest dla mnie, że przecież pasek postępu to nie jest coś co musi być cudownie zrobione, bo na miejscu dewelopera to bym się skupił na tym, by gra była dobra a nie na tym, żeby pasek ładowania super działał :D
edit. w sumie zauważyłem teraz, że w niektórych komentarzach niżej są przedstawione też podobne rozwiązania co do ładowania paska, ale w takim razie zostawię to co napisałem niejako dla potwierdzenia ;)
No to są sposoby o których pośrednio wspominałem, co nie znaczy, że nie jest to nadal zgadywanie, czy powiedzmy szacowanie, ale z czysto teoretycznego punktu widzenia oczywistym jest, że to nie jest 100% realne i prawidłowe wskazanie czasu :)
Dlatego porównałem to do dystansu, liczba załadowanych plików to dystans do pokonania i pasek pokazuje wtedy nadal postępy w dystansie, a nie czas :) A przecież nie każdy etap, plik itd. załaduje się w takim samym czasie. Ba, gra nie musi nawet z góry wiedzieć ile plików ma załadować, bo to może się różnić w zależności od zapisanego stanu gry chociażby i może być doczytywane w trakcie samego ładowania na podstawie zawartości pliku :)
Stąd też oczekiwanie graczy, że jakiś pasek jest w stanie pokazać rzeczywisty upływ czasu mniej więcej tak jak robi to zegarek powiedzmy, jest nierealne i niewykonalne przy obecnym stanie wiedzy ;)
Dlatego musielibyśmy najpierw umówić się, co to znaczy "prawidłowo działający" :) Dla mnie wiele pasków może być prawidłowo działających, bo ja je traktuje właśnie raczej jako wskaźnik postępu (ile % plików zostało załadowanych itp), a nie jako wskaźnik czasu :)
Paski ładowania nie mierzą czasu, tylko wizualizują stopień ukończenia pewnych procesów. Na przykład wczytując 100 plików z teksturami, dzielisz pasek ładowania na 100 segmentów i po każdej załadowanej teksturze podnosisz stan paska o jeden, aż dojdziesz do 100/100.
Ba, gra nie musi nawet z góry wiedzieć ile plików ma załadować, bo to może się różnić w zależności od zapisanego stanu gry chociażby i może być doczytywane w trakcie samego ładowania na podstawie zawartości pliku :)
Jeżeli gra wczytuje cokolwiek z pliku, to zazwyczaj doskonale wie ile i czego ma załadować. Dałoby się to robić w ciemno (rekursywne), ale to byłby kiepski design.
Persecuted
W zasadzie sporo z tego co napisałeś, to już zostało ustalone :) Jeśli chodzi o rozwiązanie paska postępu to ja to napisałem, jako drugi wariant i który uważam za realistyczniejszy, bo bazuje na praktycznym doświadczeniu z modowaniem gry, która pokazuje ile plików zostało załadowanych na maksymalną liczbę dla danego poziomu. I wszystko się zgadza, bo ładowane są dźwięki, tekstury, modele, skrypty i co tam jeszcze się wymyśli.
W przypadku ładowania "w ciemno" to gry które umożliwiają modyfikację plików w tym dokładanie kolejnych lub odejmowanie, powinny być przygotowane na taki scenariusz, chociaż chyba się nie spotkałem z takim rozwiązaniem by gra ładowała coś w ten sposób. Jednakże myślę tutaj jak interpretować ładowanie "w ciemno" tj. czy na bieżąco w trakcie ładowania innych plików coś gra doczytuje i wyszukuje ? Bo jeśli ten wariant, to faktycznie może to być nieoptymalne, chociaż... wciąż tutaj jest kwestia umiejętności programisty. Dla chcącego nic trudnego myślę :P
Ale akurat bardziej prawdopodobne będzie właśnie gotowa lista plików do załadowania i z tego co kojarzę to ta gra którą modowałem z tego właśnie korzysta, czyli wie nawet co trzeba załadować nawet jeśli się będzie modyfikowało, dokładało, usuwało itp. pliki.
Teraz sobie przypomniałem jednak o jednej rzeczy, mianowicie w tej grze pasek postępu dobrze się sprawdza przy trybie jednego gracza, ponieważ w trybie wieloosobowym trzeba jeszcze uwzględnić synchronizację z serwerem czyli ładowanie aktualnego stanu gry wieloosobowej m.in. pozycje innych graczy, pojazdów, aktualny system punktów w grze, stan przejętych flag. Oprócz tego dochodzą jeszcze inne zjawiska niezależne od gry np. wydajność samego serwera, opóźnienie na łączu internetowym itp. i tutaj się zaczynają schody robić, bo tutaj już pasek niekoniecznie dobrze zadziała.
Jeśli będziemy pierwszym graczem który dołączy do gry, to praktycznie będzie tak samo szybko się ładowało jak w trybie jednego gracza, a może ciut szybciej bo logika gry spoczywa wtedy po stronie serwera. Natomiast im więcej graczy, to będzie się to ładowało znacznie dłużej ze względów opisanych powyżej.
gry które umożliwiają modyfikację plików w tym dokładanie kolejnych lub odejmowanie, powinny być przygotowane na taki scenariusz
Tak, ale takie zmiany nie mogą zachodzić w trakcie samego wczytywania, że np. jak zaczyna ładować to jest 1236 plików, a w trakcie robi się z tego 1459 plików, więc pasek się wydłuża. Gra najpierw opracowuje listę rzeczy do wczytania (czasem jest ona statyczna, czasem dynamiczna, a zazwyczaj jest to miks jednego i drugiego), a potem dopiero wszystko ładuje (zwykle z podziałem na typy danych, żeby bardziej optymalnie zarządzać pamięcią podręczną).
Jednakże myślę tutaj jak interpretować ładowanie "w ciemno" tj. czy na bieżąco w trakcie ładowania innych plików coś gra doczytuje i wyszukuje ?
Jak pisałem, poprzez ładowanie "w ciemno" miałem na myśli rekursję (rekurencję), która działa mniej więcej w ten sposób, że dany kod powtarza sam siebie tak długo, aż zostaną spełnione określone kryteria, przy czym kod "nie wie", kiedy to może nastąpić, bo kryteria są sprawdzane każdorazowo po jego wykonaniu. Nie widzę jednak sensu, żeby projektować loading w grze w taki właśnie sposób.
Teraz sobie przypomniałem jednak o jednej rzeczy, mianowicie w tej grze pasek postępu dobrze się sprawdza przy trybie jednego gracza, ponieważ w trybie wieloosobowym trzeba jeszcze uwzględnić synchronizację z serwerem czyli ładowanie aktualnego stanu gry wieloosobowej m.in. pozycje innych graczy, pojazdów, aktualny system punktów w grze, stan przejętych flag. Oprócz tego dochodzą jeszcze inne zjawiska niezależne od gry np. wydajność samego serwera, opóźnienie na łączu internetowym itp. i tutaj się zaczynają schody robić, bo tutaj już pasek niekoniecznie dobrze zadziała.
Jeśli będziemy pierwszym graczem który dołączy do gry, to praktycznie będzie tak samo szybko się ładowało jak w trybie jednego gracza, a może ciut szybciej bo logika gry spoczywa wtedy po stronie serwera. Natomiast im więcej graczy, to będzie się to ładowało znacznie dłużej ze względów opisanych powyżej.
Ale sama zasada działania takiego paska zostaje bez zmian, dochodzi po prostu kwestia komunikacji z serwerem.
Tak czy inaczej, wszyscy chyba jesteśmy zgodni co do tego, że żaden pasek, dobry czy zły ;) nie mierzy czasu :) Reszta to technikalia ;)
A mierząc postęp pełna płynność też jest wątpliwa, bo ze 120 plików pierwsze 10 wczyta się np. w sekundę, a kolejne 2 w 5 sekund.
Persecuted
Zgadzam się co do tych 3 odpowiedzi, bo sam tak myślę, tylko może niekoniecznie dobrze czasami to przelewam na słowa np. piszę skrótowo, dlatego mogą drobne niejasności wynikać i czasem wolę dopytać albo coś w ten deseń ;) Także tutaj dzięki za potwierdzenie.
Guybrush Threepwood
Tak czy inaczej, wszyscy chyba jesteśmy zgodni co do tego, że żaden pasek, dobry czy zły ;) nie mierzy czasu :) Reszta to technikalia ;)
I tym akcentem z mojej strony mógłbym zakończyć, bo z mojej perspektywy w sumie piszemy wszyscy praktycznie o tym samym, tylko w nieco innych słowach :P
A mierząc postęp pełna płynność też jest wątpliwa, bo ze 120 plików pierwsze 10 wczyta się np. w sekundę, a kolejne 2 w 5 sekund.
Dodać tylko mogę, że w zasadzie "płynność" paska to już kosmetyka typowo, niespecjalnie potrzebna. Akurat w modyfikowanej przeze mnie grze to jest ten wariant "raz szybciej, raz wolniej" i taki jest naturalny wg mnie, czyli coś w sposób jak pisałem wyżej :)
Tam gdzie będą mniejsze pliki to naturalnym jest, że pasek będzie postępował szybciej, a tam gdzie trzeba będzie przetworzyć plik dużych rozmiarów, to pasek postępu ładowania zwolni.
Najlepiej jest to widoczne na emulowanych grach np z PS2. Paski sa konstruowane zeby naniesc poprawke na wczytywane elementy z plyty a poniewaz gra dziala z dysku to wtedy robi sie juz animacja niz funkcjonalny gadzet.
Pamiętam jak w którymś STALKERze pojawił się komunikat o zgonie na ekranie ładowania bo mutanty się zrespiły na mnie podczas zmiany mapy.... typowy wtorek w Zonie.
Zaraz... w pewne gry grałem wiele razy na różnych komputerach znaczących się mocą. Ich paski ładowania wryły mi się na całe życie. Doskonale pamiętam różnicę w BG2 albo JA2 gdzie paski na szły naprzemiennie i skokowo, a po zmianie kompa na nowy płynnie, a po latach na komputerze "rakiecie" wczytywały się w sekundę zapełniając się automatycznie i nie zdążyłeś nawet przeczytać/obejrzeć co tam było. To jak one były zaprogramowane?
Cóż, trzeba odróżnić pewne faktyczne etapy ładowania od tych fejkowych, które może nie do końca są fejkowe, bo jednak czasem też maskuje jakieś niedoskonałości w czasie ładowania, a raczej zbyt szybkiego rozpoczęcia gry w czasie gdy załadowanie jeszcze się nie skończyło. Niektóre gry mogą mieć możliwość rozpoczęcia rozgrywki szybciej przed kompletnym ładowaniem co rodzi problem, który wymusza takie rozwiązanie. A ponieważ np. gra już się zaczęła, to niestety trudno zaimplementować pasek postępu, który będzie dokładnie śledził procesy, które wciąż trwają po rozpoczęciu gry, więc czasem dają pasek postępu, który będzie miał stały czas "ładowania", czasem też pasek postępu o losowym zakresie czasu ładowania, by nie wzbudzać podejrzeń.
Pamiętny morrowind miał taki cyrk z ładowaniem gry. Zewnętrzna mapa była podzielona w komórkach - odrębnych stref osobno ładowanych, możliwe że to przez jakieś ograniczenie silnika. Ten problem występuje też w oblivionie i skyrimie, ale trochę inaczej, bo całe mapy zewnętrzne są jedną olbrzymią komórką za wyjątkiem większych miast. Jak w morku ustawiłeś multum prędkości łącznie w statach i eq postaci, a następnie biegłeś przed siebie, to miałeś festiwal ładowania :D.
Z jednej strony dobre rozwiązanie, bo szybciej ładowało(w końcu pojedyncza i niewielka strefa do załadowania) i pozwalało odpalać grę na słabszych komputerach, ale z drugiej strony jak ktoś miał super szybką postać to mógł odczuć problem. Jednak obecnie ten problem niemal nie istnieje, trudno zauważyć pasek wczytywania przy przejściu do następnej komórki tak jak sam zauważasz :).
Pamiętam, że pod koniec epilogu w DA:I, kiedy między cutscenami pojawia się ekran ładowania to już wtrakcie było słychać dialog postaci, że aż się zaniepokoiłem czy wszystko jest ok, w końcu gra do teraz ma sporo bugów
Coś w tym jest.
Mam znajomego o nazwisku Pasek.
Też kłamie i to prosto w oczy.
Czyżby natura źle go "zaprogramowała" ?
Taa, gothic jakos dobrze sie wczytuje na dzisiejszych kompach a kiedys sie czekalo kilka minut. Dla mnie zawsze wydawalo sie ze im plik wiecej wazy to oczywiste ze bedzie pasek skakal. Tak samo gta. Wydaje mi sie ze to zalezy od wielkosci plikow i nic wiecej. Jak chcesz stworzyc plynny pasek ladowania to musialbys podzielic 100% przez wielkosc i ilosc plikow, a wtedy ladowanie by jeszcze dluzej trwalo...
Przy premierze Ghost of Tsukushima chyba był news, że niezależnie od szybkości ładowania i tak będzie wymuszone opóźnienie by przeczytać tipy na ekranie, mimo iż gra wczytała się szybciej. Więcej przypadków nie kojarzę oszukiwania graczy.
Zdecydowana większość pasków ładowania jest fałszywa, nie tylko w grach. Generalnie samo ładowanie jest często oszustwem - czasami jakaś akcja wykonuje się błyskawicznie albo przynajmniej na tyle szybko, żeby nie było potrzeby tego pokazywać, ale ludzie po prostu lubią widzieć, że coś się dzieje.
Aż się przypominają czasy komputerów 8-bitowych, kiedy gra wczytywała się z kasety magnetofonowej np. 5-10 minut :D
Ja tam wolę jednak żeby się coś szybko ładowało dlatego np. w androidzie mam wyłączone te różne przejścia i animacje, bo jakoś mnie to nie fascynuje. Stawiam raczej wydajność, praktyczność i użyteczność ponad wygląd, czyli pewnie stoję w opozycji do większości ludzi :P
W przypadku stron internetowych mam nieraz podobną irytację z tymi animacjami tak jak w androidzie i tutaj przykład z życia wzięty, bo pewnego razu (nie wchodząc już w szczegóły) miałem test do wykonania z ograniczeniem czasowym. Wszystko było ok, pytania wcale nie trudne, były jak najbardziej do ogarnięcia, ale przejścia między pytaniami trwały z dobre 5 sekund ze względu na te "cudowne" animacje, co niepotrzebnie pożerało czas :| Trzeba być jakimś sadystą by robić test z ograniczeniem czasowym ale jednocześnie z długimi przejściami między pytaniami :D
brzmi treść postu Mike’a Bithella, twórcy gry Thomas Was Alone
Nie no, Thomas Was Alone to naprawdę bardzo ciężka i bardzo obciążająca sprzęt gra.
Najlepszy pasek ładowania, to był w pierwszym Risenie. Zapełniał się kilkadziesiąt razy, tak o, w ekspresowym tempie. Więc nawet nie mieliśmy żadnego złudzenia ile gry się załadowało.
Koniec świata, to wiadomość gorsza niż ta że Święty Mikołaj nie istnieje.
To to ja kilkanaście lat temu odkryłem. Teraz pytanie czy ten portal jest tak zacofany, czy brak już sensownych tematów?
W jakim sensie "odczuwamy niepokój" gdy pasek idzie bez zatrzymywania? Mnie akurat zawsze denerwowało gdy pasek się zatrzymywał choćby na sekundę, wtedy zawsze dopada mnie takie domniemanie że oho, coś się zje%#$@.
A tak po mojemu to w większości przypadków deweloperzy pewnie daliby radę zupełnie pozbyć się pasków ładowania w obecnych czasach z naszymi sprzętami i ich możliwościami no ale... trzeba by przyjść do roboty kilka dni więcej przed premierą gry więc się nie opłaca.
Programista płakał, jak odpowiadał. Czy zastanowiliście się, jak byście sami zaprogramowali pasek postępu? Żeby było łatwiej to sobie wyobrazić, to niech będzie to postęp przeprowadzki, takiej prawdziwej, w życiu. Może 1 wniesiony do busa karton z książkami to 5%? Tylko jeśli takich kartonów jest 19, to już macie tylko z tego 95% na pasku, więc najlepiej zaprogramować pasek, żeby w razie czego wisiał na 99%, jeśli pogonicie go zbyt wcześnie. Spakowaliście wszystko, czekacie na chodniku, a firma przeprowadzkowa dała znać że bus przeprowadzkowy stoi w korku i przyjedzie, kiedy się da. I wasz pasek postępu stoi w miejscu przez małą wieczność (co nie jest korzystne, bo macie uczucie, jakby palec jakiegoś bożka już spoczywał na przycisku reset). Może lepiej było, żeby pasek powoli pełzał do już osiągniętego statusu, żeby gracz spokojnie i cierpliwie czekał? A co, gdy przewidzieliście, że na pakowanie zejdzie 5h, a na trasę 2h? Przecież żeby ten pasek pełzał z jakąś prędkością, to trzeba z góry wywróżyć, w jakim czasie ma osiągnąć jakiś %, żeby odzwierciedlić ukończenie jakiegoś etapu. Pakowanie poszło dobrze, zajęło 3h, a na autostradzie był korek i trasa trwała 4h. W przypadku gry ładowanej na komputerze wystarczy, że jeden gracz ma ekonomiczny HDD, a inny topowego gamingowego SSD-ka. Jeden procesor przetwarza spakowane dane szybciej, a drugiemu idzie trochę wolniej. W takim kontekście
Aby paski ładowania były płynne można głównie zmierzyć czas poszczególnych etapów wczytywania i ewentualnie potem zaktualizować czasy wg tego co się działo na sprzęcie gracza.
I tak bardziej użyteczne może być wyświetlenie tego co jest wczytywane.
Jak instaluję mody i gra 2D uruchamia się 5minut z najszybszym SSD, to wolę wiedzieć przez co.
Inne gry powinny głównie tylko przełączać co jakiś czas to co się wyświetla na ekranie ( nagłe szarpnięcie paska też się klasyfikuje ). Wolałbym wiedzieć czy gra się nie zawiesiła.
Ewentualnie do większych gier przydałby się jakiś sekundnik aby mniej więcej wiedzieć ile ostatnim razem gra się wczytywała. Można wtedy pójść po np. jakiś napój i go wydalić.
Najbardziej i tak niepokojące dla mnie są Loga producentów - przed ładowaniem gry. Ostatnio tak gdybam ile Gearsy 5 by mi się wczytywały jakby nie było tych log producentów.
Może wtedy gra jest też wczytywana, ale jakoś wątpię. Dzięki takim logom np. XBox we wspomnianej grze - kojarzą mi z firmą gówniane rozwiązania. Jeszcze bardziej szlak mnie trafiał jak nie zacząłem jeszcze grać a w menu miałem zasrany ekran reklamami.
Wiedźmin 1 i konkretnie długie ładowania przed patchem 1,4, szczególnie jak się człowiek pomylił i wszedł do domu, czekanie 5 minut żeby wejść i kolejne 5 minut żeby wyjść.
Deweloperzy przyznają, że paski ładowania w grach są często bezczelnym kłamstwem
To chyba jakas nowa tendencja - za dawnych dobrych czasow, nawet jak gra nie wypisywala wszyskiego co sie akurat dzieje, to mozna bylo po zmianach predkosci ladowania czy nawet jego zatrzymaniu zorientowac sie w konfiguracji komputera na ktorym gre odpalono.
Serio ktoś zwraca na to uwagę? Jedynym ekranem ładowania, który zapadł mi w pamięć, to ładowanie Diablo II na win98, miałem coś nie tak z DirectX 5 i gra ładowała tyle, że mogłem do sklepu skoczyć. I najlepsze, że jakoś w co trzecim ładowaniu, gra miała obraz do góry nogami. Szczęśliwie to były czasy crt i od biedy dało się to postawić tak żeby dało się grać. Dopiero jakoś nowszy DirectX z płyty od jakiegoś cdactiona rozwiązał problem, bo o necie to można było pomarzyć.
W grze rust jest najlepszy pasek a dokładniej go brak a gra zamiast niego pokazuje co jest aktualnie wczytywane, prędkości wczytywania gry jest zależna od dysku jaki mamy.