Devblog 108

Slack_-_Facepunch_Studios_2016-04-28_14-25-18.jpg

Mała łatka, ale dużo bugfixów i kilka usprawnień wydajnościowych!

Wydajność atmosfery (Alex Rehberg)

Andre zrobił trochę profilowania na koniec poprzedniego tygodnia i zauważył, że wydajność atmosfery był coraz wolniejszy podczas gry, więc znalazłem i naprawiłem bug, który to powodował. To prawdopodobnie nie da wam więcej FPS'ów, ale zatrzyma spowalnianie gry po paru przegranych godzinach.

Mix/polerowanie audio (Alex Rehberg)

W tym tygodniu kontynuowałem pracę nad mix'em. Miałem nadzieję skończyć to do dzisiejszej łatki, ale wciąż znajdowałem małe rzeczy, które chciałem poprawić, więc to powinno być skończone w następnym tygodniu.

W tym tygodniu głównie zająłem się pracą nad polerowaniem i konsystencją efektów dźwiękowych broni. Póki co mamy trochę ruchów mechanizmów/ubrań w tle wielu dźwięków broni, ale są naprawdę nosowe, i po trochu brzmi jak gówno, więc nagrałem trochę ruchów ubrań i skór i zastąpiłem je wszystkie. Mam również zamiar przeładować dźwięki i kurki broni i ogólnie wszystko.

Miejscowo atmosferowo drzewa/krzaki, też mają trochę miłości i dźwięk jest mniej hissy i jest bardziej dokładny.

Dźwięki jedzenia/picia (Alex Rehberg)

Odkąd jedzenie i woda są ważniejsze, to pomyślałem, że już czas dać trochę miłości dla dźwięków picia i jedzenia. Nagrałem mnie jedzącego kilka czipsów i łykającego trochę wody, i wrzuciłem je do gry. Te dźwięki są o wiele czystsze, niż stare i mamy kilka wariacji dla każdej akcji.

Myślałem, że picie wody może być trudne do nagrania, ponieważ byłem w założeniu, że większość wibracji podróżuje we wnętrzu głowy (śmieszny fakt: wasz głos brzmi dziwnie, gdy słyszycie go nagranego, ponieważ słyszycie swój głos poprzez wewnętrzne rezonanse czaszki), więc najpierw próbowałem to nagrać za pomocą kontaktowego mikrofonu. Mikrofon kontaktowy zbiera dźwięki, poprzez zbieranie wibracji z danego obiektu, którego dotyka, a nie jak standardowy mikrofon, który zbiera wibracje z powietrza.

To nie zadziałało w ogóle, co ma sens z perspektywy czasu, odkąd skóra jest zbyt miękka, do dobrego przewodzenia wibracji. Skończyłem na przyłożeniu standardowego mikrofonu cal lub dwa od mojej krtani, i to wzięło dźwięk o wiele wyraźniejszy, niż sądziłem.

Dźwięki miotacza ognia (Alex Rehberg)

Skończyłem pracę nad dźwiękami miotacza ognia, i są one teraz w grze.

Dźwięki kroków (Alex Rehberg)

Również nagrałem kilka dźwięków chodzenia boso, a konkretnie na ziemi, piasku, szkle i drewnie.

Pompa wodna (Tom Butters)

water2.jpg
water1.jpg


Odkąd dodaliśmy więcej możliwości dla wody, potrzeba na wodę wzrosła! Więc z tym, pracowałem nad pompą wodną do kładzenia. Która, jak sugeruje nazwa, pozwoli wam pobierać wodę do waszej kolekcji! Jest pracujące ramie, które jest potrzebne do aktywacji pompy - więc zaangażowaliśmy pewien poziom pracy ręcznej! :)

Wkręćcie się poniżej!

(Możecie się tym pobawić na ich stronie głównej: https://playrust.com/devblog-108/)

Zróżnicowanie twarzy (Taylor Reynolds)


Jedną rzeczy, która naprawdę przykuła moją uwagę podczas prac nad ekspresją twarzy w ostatnim tygodniu, było jak wszechstronny może być system kształtów twarzy. Zmiana struktur twarzy za pomocą kształtów twarzy, jest powszechnie używany w systemie kreacji postaci, by wpływać na poszczególne funkcje (np.: wielkość nosa), aczkolwiek bezkrytyczne losowanie może doprowadzić do nieprzewidywalnych rezultatów, gdyż dla algorytmu trudno jest znać "zasady" lub szablony, do których ludzka twarz powinna być ograniczona.

W tym tygodniu wzięłam trochę czasu dla prototypu systemu, w którym każda głowa gracza bierze wpływy od losowej sekcji ręcznie zrobionych kształtów twarzy, co znaczy, że struktura twarzy będzie zawsze w tych samych ograniczeniach, do których normalna ludzka twarz być powinna. Z małym wyborem wariacji, widzę już kilka rozpoznawalnych twarzy w generatorze.

(Film można zobaczyć tutaj: https://files.facepunch.com/taylor/2016/04/test1 (56).mp4)

Kobiece ubrania (Taylor Reynolds)

Spędziłam sporo czasy nad pracą, nad rzeczami postaci, więc aby te rzeczy połączyć, zrobiłam trochę konceptów odnośnie kobiecych ubrań Paul'a.

clothingfemale-700x433.png


Wydajność (André Straubmeier)

Zanim to przeczytacie, dajcie mi powiedzieć, że jesteśmy w takim punkcie rozwoju, gdzie żadna zmiana nagle zwiększy wydajność o 50%, więc jeśli tego oczekujecie, to będziecie rozczarowani. Mamy kilka małych obszarów wymagających poprawy, które mogą dać nam ogromne zyski, gdy skierowane, ale będzie to długi proces, pracując przez nie wszystkie.

W zeszłym tygodniu byłem w stanie wyśledzić problemy pogorszenia wydajności które mieliśmy, i w ciągu tygodnia wydaliśmy łatkę w celu ich rozwiązania. Przyczynami były dość stare cząstek skrypty emisji, które mogły powodować nieszczelność współprogramu i co ważniejsze przeciek emitera dźwięku w menedżerze atmosfer. Zobaczcie sekcję Alex'a na wydajność atmosfery, dla więcej szczegółów w drugim. Ta łatka wprowadza również optymalizację dla despawnu bloków budynku, co pomogło zredukować spadki klatek podczas poruszania się po okolicy.

Zacząłem nowy tydzień ustalając kolejny problem, który mógł powodować spadki klatek podczas patrzenia na pobliskich graczy - testy wskazują, że nareszcie je złapaliśmy je wszystkie.

Kolejną rzeczą na mojej liście było spojrzeń na renderowanie i culling, które są trochę bardziej złożone niż znajdywanie problemów z wydajnością spowodowanych przez nasze skrypty. Dowiedziałem się, że duża większość naszego czasu cullingu była zajmowana przez drzewa, albo ich odwołania cullingu. Wyszło na to, że było to spowodowane przez sposób, w jaki Unity zajmuje się wiatrem SpeedTree. Usunięcie tych procedur animacji wiatru doprowadziło do ulepszenia wydajności o około 7%, co jest niezłym wynikiem jak na jedną zmianę. Razem z tym usunęliśmy ostatnią z funkcjonalności SpeedTree, więc jesteśmy w tym samym miejscu, w którym byliśmy z drzewami Unity 4, tyle że zmarnowaliśmy trochę czasu. Serce boli, kiedy widzi się jak słabo działają te rzeczy w Unity, szczególnie, że w silniku nadal brakuje niektórych funkcjonalności SpeedTree. Myślimy, że najlepszym pomysłem jest napisać większość z tych rzeczy samemu, więc jeśli chodzi o wiatr, to dodamy niestandardowe rozwiązanie do shaderów naszych drzew, bez kosztów po stronie CPU.

Żeby dobrze zakończyć tydzień, zoptymalizowałem trochę kodu UI. Mamy system, który pozwala nam łatwo wyświetlać jakąkolwiek zmienną z jakimkolwiek formatowaniem w całkowicie ogólny sposób, bez skryptów. Fajnie jest coś takiego mieć z perspektywy użyteczności, plus jest to wykorzystywane do informacji dotyczących metabolizmu i życia gracza. Minusem jest to, że kod do formatowania zmiennych był niezoptymalizowany, co spowodowało, że wszystkie te zmienne razem zabierały ok. 1 ms na klatkę. Zostało to teraz naprawione i możemy dalej czerpać korzyści z tej funkcjonalności, bez spadków wydajności.

Otwarte Drzwi Nieszczęścia (André Straubmeier)

Dość długo istnieje problem, który czasami powodował, że drzwi nie domykają się do końca u niektórych klientów, co pozwalało im strzelać do rzeczy za tymi drzwiami. Było to bardzo trudne do wyśledzenia, ale w międzyczasie znalazłem dość znaczący problem z sieciowaniem slotów jednostek, który mógł prowadzić do wielu różnych dziwnych zachowań, więc uważam, że było to tego warte.

Podgląd gracza (Alex Webster)

Czuliśmy, że możemy zrobić lepszą bezczynną pozycję, więc ją zaktualizowaliśmy. Tutaj macie przed i po:

beforeafter-700x645.png


Kiedy patrzyłem na postawę bezczynną, spojrzałem też na pomysł, który chciałem wypróbować. Pomyślałem, że byłoby fajnie, gdyby podgląd nie był tylko bezczynną postawą, ale wyznacznikiem aktualnego stanu postaci. Aby bardziej to pokazać wam, jakie powinny być wasze priorytety. Mogłoby to wskazywać na chłód, głód, ból…

Tutaj macie parę postaw bezczynnych:

(Link do filmiku: https://files.facepunch.com/alex/player_preview_states.mp4)

To tylko pomysł. Jeśli go lubicie lub też nie, albo myślicie, że może być nieco rozszerzony, dajcie o sobie znać. Wraz z blendshape’ami , nad czym pracuje Taylor, możemy je połączyć ze stanami i sprawić, że gracze wreszcie będą pokazywały jakieś emocje.

No i wreszcie, macie tutaj szereg zimnych nagich ludzi:

(Link do filmiku: https://files.facepunch.com/alex/cold_players.mp4)

Dalsza część w poście poniżej!
 
Okluzja na wielką skalę WIP (Diogo Teixeira)

Parę tygodni temu zacząłem eksperymentować nad techniką ambient occlusion, która może być obliczana i zastosowana na bardzo wielkim obszarze (np. 1x1km) i nie zależy od kierunku kamery. Ta szczególna technika jest bardzo tania i była testowana na innych grach na komputerze i konsoli. Wspiera dynamiczne powierzchnie, więc może być aktualizowana w trakcie budowania struktur albo przenoszenia dużych dynamicznych elementów. Takie są dotychczasowe efekty:

lso1-700x394.gif


To pomoże przyciemnić wnętrza budynków, jaskinie, tunele, lasy i pozwoli nam podkręcić odbicia do normalnych, realistycznych. Pracowałby jako opcjonalna przestrzeń świata, niskoczęstotliwościowy dodatek do aktualnego ambient occlusion.

Nie mamy żadnej daty skończenia, ale liczę na następny tydzień.

Poprawa precyzji głębokości WIP (Diogo Teixeira)

W tym tygodniu zrobiłem przerwę w pracy nad okluzją na wielką skalę, żeby poeksperymentować nad czymś, co się nazywa “logarytmicznym z-bufferem”. Wiąże się on z patchowaniem naszych shaderów, żeby bardziej wykorzystać z-buffer/precyzję głębi na nasze zawołanie. Artefakty spowodowane przez złe wykorzystanie z-buffera jest szczególnie widoczne na wodzie oceanu (głównie płaskiej) wobec terenu, powodując przerywane migotanie pomiędzy tymi dwoma powierzchniami, zwłaszcza z dużej odległości:

water-flicker-700x394.gif


Z podobnego powodu, używając bardzo szeroką rozdzielczość ekranu, powstawało wiele różnych artefaktów z-buffera, włącznie z przejrzystymi ścianami w oddali, ponieważ wycofujemy kamery bliskie płaszczyzny aby zapobiec oszustwom. Przy wprowadzaniu logarytmicznej głębi nie mamy nawet bliskiej płaszczyzny:

widescreen-seethrough-700x319.jpg


Przybliżanie na skupionej strukturze budynków też mogło powodować przejrzystość ścian, ale ten efekt był limitowany przez rozgrywkę. To są wszystkie problemy, które spodziewam się usunąć z tym rozwiązaniem i choć nadal jest zbyt wcześnie, by wszystko potwierdzić z pewnością, rezultaty są jak na razie bardzo obiecujące.

Niestety, przez to wszystkie nasze shadery wymagają napraw, co może zająć sporo czasu i stworzyć wiele nowych błędów wizualnych. Mam nadzieję, że skończę modyfikować shadery w ten weekend, żeby mieć cały tydzień na intensywne, wieloplatformowe testowanie na gałęzi inscenizacji przed rozlokowaniem w przyszłym tygodniu.

Stalowa & kartonowa zbroja (Paul Bradley)

Więc w tym tygodniu wyrobiłem parę pomysłów na dwa różne pancerze, jeden to craftowana ciężka metalowa zbroja, która w zasadzie zmieniłaby użytkownika w pancernik, kosztem mobilności, obserwowanie tego, jak gracze wykorzystają go w ataku i obronie może być interesujące. Drugi to pancerz z kartonu, który mógłby być zrobiony ze śmieci, nie dawałby praktycznie żadnej ochrony, ale gracze mogliby na nim rysować i widzielibyśmy, jakie zastosowanie dla niego znajdą.

RUSTcardboardarmor1a.jpg

RUSTHeavymetalarmorcrafted1.jpg


Poprawa źródeł wody (Maurino Berry)

Tylko parę poprawionych błędów dotyczących dodania wody w zeszłym tygodniu
  • Naprawiono beczki z wodą, które nie blokowały budowania
  • Naprawiono wiadro z wodą, mające opcję picia jako podstawową (nie można było jego odznaczyć)
  • Naprawiono możliwość przelania wody do nietrzymanego wiadra
  • Naprawiono brak możliwości picia ostatnich 50 ml wody z torby bota

Początkowe kalorie (Maurino Berry)

Zmiany w metabolizmie z zeszłego tygodnia były ogólnie dobrze odebrane i w większym stopniu wydaje się dosyć dobrze zbalansowane (przynajmniej na ten pierwszy raz). Jedną zmianą, jaką wprowadziłem w tym tygodniu jest zwiększenie początkowej ilości kalorii z wartości pomiędzy 75-100 do 100-125, co daje wam dodatkowo około 10-15 minut na znalezienie jedzenia, co pomoże początkującym graczom. Będę to obserwował i dostosuje to w miarę upływu czasu. Na przykład powinniście raczej szybciej tracić wodę i umierać szybciej z odwodnienia niż z głodu.

Zapalenie (Maurino Berry)

Obecnie, nasz system ognia to zwykła “kula ognia”, jednostka, która może się namnażać i poruszać dookoła jak fizyczny obiekt, zadając radiacyjne obrażenia co sekundę wszystkiemu, co znajduje się z pobliżu. Noc tak na prawdę się nie zapala. Więc zacząłem pracować nad tym w tym tygodniu. Niestety jeszcze nie jest to gotowe, ale spójrzcie:

ignition-700x322.jpg


Jestem podekscytowany na skończenie tego, żebym mógł dodać do gry ogniste strzały, które podpalają graczy albo zwierzęta przy uderzeniu, z dodatkowym bonusem w postaci ugotowanego mięsa przy zbieraniu!

Lista zmian
  • Nowe dźwięki jedzenia/picia
  • Nowe dźwięki miotacza ognia
  • Naprawiono błąd związany z stopniową degradacją wydajności otoczenia
  • Naprawiono wyciek współprogramów w emisji cząstek jednostek
  • Zoptymalizowano znikanie bloków budynków
  • Naprawiono kolejny problem z wydajnością, dotyczący patrzenia na graczy
  • Naprawiono problem związany z cullingiem drzew, spowodowanym przez wiatr
  • Zoptymalizowano kod wyświetlania zmiennych UI
  • Dostosowano LODowanie trawy (mniej skalowania i niższe LODy)
  • Zaktualizowano podgląd gracza w bezczynności
  • Dodano przemieszczenie fal do wody o poziomie jakości 1
  • Ograniczono dystans cieni do 50, kiedy wyłączone są kaskady cieni
  • Lodowe prefaby korzystają z sieci LODów
  • Naprawiono mieszanie się wody i nieba na horyzoncie
  • Ulepszono przetwarzanie gęstości perspektywy powietrznej
  • Dodano shadowmode convar w celu dostosowania rzucania cienia słońca
  • Cienie słońca całkowicie się wyłączają, kiedy dystans cieni jest ustawiony jako 0
  • Dodano dodatkowe benchmarki procgenu
  • Benchmarki procgenu resetują GC, LODy, trawę, dekoracje i zadania przed każym działaniem
  • Zdjęto stare tryby mgły z compliacji shaderów i scen
  • Naprawiono błąd, który polegał na tym, że animacja drzwi zatrzymywała się klatkę za wcześnie
  • Naprawiono regresję, która czasem omijała łączenie się jednostek podczas budowania
  • Naprawiono jednostki, które nie wysyłały aktualizacji slotów, kiedy wprowadzane były zmiany po stronie serwera
  • Spowodowano, że perf convar wyświetla kolejkę zadań async, kiedy jest ustawiony na 6
  • Komenda restarty servera wywołuje komendę quit, kiedy timer dociera do 0
  • Naprawiono brakujące ikony zapalania i gaszenia na małym piecu
  • Troszkę wyższe startowe kalorie
  • Naprawiono płomienie, które zadawały mniejsze obrażenia obiektów, które znajdowały się na kamieniu/metalu
  • Zmniejszono koszt mapy do 1 papieru
  • Naprawiono beczki z wodą, które nie blokowały budowania
  • Naprawiono wiadro z wodą, które miało picie wody ustawione jako domyślną opcję (niemożliwe do nie wybrania)
  • Naprawiono możliwość transferu wody do nietrzymanego wiadra
 
Back
Do góry