Jak wygląda silnik taki jak Frostbite na wczesnych etapach? [Zamknięte]

15

Świetnie się bawię grając w Battlefield i jestem pod wrażeniem tego, jak to wszystko wygląda i brzmi. Zastanawiałem się, jak silnik gry zaczyna życie. W którym momencie pisania kodu w końcu coś robi i co zrobił, zanim zaczął renderować wszystkie tekstury, światło i cząsteczki, idealnie?

Czy są jakieś dobre artykuły, w Internecie lub przykłady, które ktoś widział?

Djave
źródło
1
nie jest to bezpośrednia odpowiedź, ale oglądanie wszystkich 5 części tego filmu może dać ci wgląd w technologię youtube.com/watch?v=EN549g0GNgc#t=9m22
Stowelly

Odpowiedzi:

25

Jeśli mówisz o tym od samego początku i zauważ, że bardzo niewiele głównych silników gier jest już kodowanych od zera, i pamiętaj, że jest to przykład i niekoniecznie tak zawsze działa. . .

Wykonanie:

Zacznij od renderowania sześcianu o płaskim cieniu. Dodaj do niego podstawowe efekty świetlne. Dodaj sposób na poruszanie aparatem. Teraz możesz latać wokół nudnego sześcianu zawieszonego w nieskończonej czarnej pustce. Tak

Następnie prawdopodobnie chcesz zaimportować model. Przynajmniej twój artysta może ulepszyć model demonstracyjny (czajniczek jest zaskakująco tradycyjny), ale może mieć rzeczywisty model gry, który może ci podać. Znowu trzymamy się teraz płaskiego cieniowania, więc pokaże się, jakby było zrobione. . . no, nie ma realistycznej substancji, ale coś w rodzaju skrzyżowania matowego plastiku z porcelaną. To , ale bez dobrego oświetlenia. I wciąż jesteśmy w punkcie, w którym jest to całkowicie nieruchome.

Następne trzy główne kroki można wykonać w dowolnej kolejności.

  • Po pierwsze, będziesz potrzebować terenu. Większość współczesnych gier dzieli renderowanie na „geometrię statyczną” i „aktorów”, gdzie geometria statyczna obejmuje rzeczy, które się nie zmieniają (ściany, ziemia, latarnie), a aktorzy to rzeczy, które się zmieniają (gracze, pojazdy, zniszczalne latarnie). podstawowa koncepcja renderowania jest taka sama dla obu, istnieją optymalizacje, które możesz zrobić dla geometrii statycznej, których nie możesz zrobić dla aktorów. Będziesz potrzebować terenu, aby inżynierowie gry mogli naprawdę zacząć, więc jeśli na ciebie czekają, nadszedł czas, aby przygotować przynajmniej podstawowe renderowanie terenu.

  • Po drugie, potrzebujesz teksturowania. To ogromny temat i istnieje szansa, że ​​osiągniesz kamień milowy, zrobisz coś innego, bardziej krytycznego, a następnie powrócisz do niego wielokrotnie. Twoje pierwsze przejście może po prostu dodać tekstury do modelu. Twoje drugie przejście może poprawić oświetlenie i zachowanie powierzchni. Twoje trzecie przejście może dodawać cienie (mógłbym wypełnić całą odpowiedź mówiącą o cieniach). W zależności od rodzaju gry może się to arbitralnie skomplikować. Gdzieś tutaj możesz również przełączyć cały silnik gry na odroczone renderowanie.

  • Po trzecie, będziesz potrzebować animacji. Twoi animatorzy (zakładając, że nie mieszkasz w 1995 r.) Skonfigurują platformy animacyjne dla swoich modeli, składające się z kości przebiegających przez model i informacji o tym, jak poruszają się kości podczas niektórych animacji. Prawdopodobnie zaczniesz od możliwości odtwarzania animacji na żądanie, a następnie dodasz możliwość mieszania animacji razem.

Po wykonaniu wszystkich tych czynności nadszedł czas na kompatybilność. Jeśli pracujesz nad grą AAA, możesz w jakiś sposób przetestować kod na wielu różnych rodzajach sprzętu - być może jest on wbudowany, a może zlecasz firmie testowej, cokolwiek. Znaczna część kodu ulegnie awarii na określonych kartach graficznych lub określonych wersjach sterowników, a Ty możesz naprawić jak najwięcej.

Czas też rozważyć optymalizację. Renderowanie to duży problem z dużą szybkością, więc teraz musisz dowiedzieć się, jak wykorzystać sprzęt na najgłębszym poziomie, aby działać tak szybko, jak to możliwe. Jeśli uważasz, że może to kolidować z „kompatybilnością”, masz rację! Zupełnie tak! Przekonasz się, że najlepsze optymalizacje nie będą działać na niektórych kartach. Możesz zrównoważyć wszystkie te czynniki.

W tym momencie Twoi artyści będą wymagać nowych narzędzi do teksturowania lub nowych funkcji animacji, a projektanci poziomów będą chcieli nowych technik renderowania terenu. Wróć do „kolejne trzy główne kroki można wykonać w dowolnej kolejności” i powtarzaj, aż gra się zakończy.

Rozgrywka:

Pominę te części, które nie są szczególnie widoczne wizualnie. Po pierwsze, musisz trochę poczekać, aż rendering terenu się skończy, chociaż do tego czasu możesz zrobić wiele backendów.

Gdy to osiągniesz, skonfigurujesz kilka podstawowych kolizji. Najprawdopodobniej przyjmie to formę lotu do miejsca w grze, a następnie naciśnięcia przycisku upuszczającego kostkę. Kostka spada i uderza o ziemię. Gdy kostka konsekwentnie wyląduje na ziemi, możesz rozpocząć konfigurowanie ruchu gracza, abyś mógł biegać po świecie w taki sam sposób, jak gracz.

Kiedy już zaczniesz pracować z podstawową fizyką ruchów, ponownie znajdziesz się w jednym z tych segmentów „można to zrobić jednocześnie”:

  • Walka musi zostać zaimplementowana. Potrzebujesz rzeczy, które mogą strzelać do różnych rzeczy, a wszystkie te rzeczy muszą się odpowiednio zachowywać.

  • Fizyka musi zostać zaimplementowana. Działają kolizje, ale kolizje są tylko małym segmentem fizyki. Kiedy ktoś wysadza jeepa ze zbiornika, wszystko musi zachowywać się mniej więcej tak, jak zamierzano.

  • Mechanika gry musi zostać zaimplementowana. Skąd wiesz, kiedy wygrałeś lub przegrałeś? Jak często rzeczy się pojawiają i co to kontroluje? Jeśli komuniści zdobędą punkt odradzania, dlaczego wciąż odradzają się pojazdy anarchistyczne? Coś w tym rodzaju.

Wszystko to może zająć kolejny raz, w zależności od tego, ile rzeczy twoi projektanci chcą, abyś zrobił. Będziesz także spędzać mnóstwo czasu na śledzeniu błędów („hej, zobacz, co się stanie, gdy wbrę czołg na skrzydło tego myśliwca”). Zauważ, że wiele z tego nastąpi w świecie bez tekstur, w modelach biegnących w pozycji na platformie dla postaci lub w czołgach, które są po prostu dużymi skrzyniami ze słowem „ZBIORNIK” niezdarnie pomalowanym.

Interfejs użytkownika:

Interfejs użytkownika może faktycznie uruchomić się przed wejściem głównego kodu renderowania, ponieważ interfejs użytkownika i rendering w świecie gry zwykle używają zupełnie innych ścieżek kodowych. Zamiast zaczynać od sześcianu, zaczniesz od ramki, następnie dodasz tekstury do ramki, a następnie dodasz tekst do ramki.

W tym momencie twoje życie spędza się na szukaniu wystarczającej ilości czasu, aby napisać widżety ogólnego przeznaczenia, a jednocześnie poświęcić wystarczająco dużo czasu interfejsu użytkownika, aby projektanci i twórcy mechaniki gry mogli przetestować grę z niejasnym pozorem realizmu. W pewnym momencie twoi artyści interfejsu użytkownika wymyślą spójne wyczucie interfejsu użytkownika, a następnie zaczniesz pracę nad ostatecznymi elementami interfejsu użytkownika, jednocześnie testując te elementy interfejsu na rzeczywistych odtwarzaczach, aby upewnić się, że są zrozumiałe i użyteczne.

W razie potrzeby mogę mówić o nich więcej, ale jeśli to zrobię, zmieni się to w mega-odpowiedź, więc na razie nie będę :)

ZorbaTHut
źródło
4
Niesamowite .. dzięki za poświęcony czas i fascynujący wgląd!
Djave,
If the Communists conquer a spawn point, why does it keep spawning Anarchist vehicles?Pracujesz nad grą o hiszpańskiej wojnie domowej?
Peter Taylor,
1
Nieźle, ale twój post dotyczy tylko podstawowych gier, a nie gier AAA. Teraz dni techniczne to tylko połowa sukcesu, inne narzędzia. Wystarczy rozejrzeć się po UDK, a zobaczysz, ile różnych funkcji jest w nim zainstalowanych.
Peter Ølsted,
1
Również prosta koncepcja tekstur i shaderów jest teraz znacznie bardziej niepewna dzięki zastosowaniu rozproszonego, lustrzanego, środowiskowego i emisyjnego (między innymi). Wystarczy spojrzeć na to, jak materiały są tworzone teraz kilka dni. udk.com/elements/img/galleries/features-shaders-hero.jpg
Peter Ølsted
1
To była niesamowita odpowiedź.
jcora,