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)
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.
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:
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!