Jaki jest możliwy do osiągnięcia sposób ustawiania budżetów treści (np. Liczby wielokątów) dla zawartości poziomu w tytule 3D?

13

Odpowiadając na to pytanie dla swquinn , odpowiedź podniosła bardziej trafne pytanie, na które chciałbym usłyszeć odpowiedzi. Zamieszczę własną strategię (obiecuję, że nie zaakceptuję jej jako odpowiedzi), ale chciałbym usłyszeć innych.

W szczególności: jak zająć się ustalaniem rozsądnego budżetu dla zespołu ds. Treści. Zazwyczaj jednym z pierwszych pytań zadawanych w trakcie rozwoju jest: jaki jest nasz budżet wielokąta? Oczywiście w dzisiejszych czasach rzadkość stanowi fakt, że sama liczba wierzchołków / poli jest czynnikiem ograniczającym, zamiast tego wchodzą w grę złożoność shaderów, współczynnik wypełnienia, złożoność oświetlenia.

Zespół ds. Treści chce mieć pewne twarde liczby / limity, aby mieć uzasadnione oczekiwania, że ​​ich zawartość, gdy trafi do silnika, nie będzie zbyt ciężka. Biorąc pod uwagę, że „to zależy” nie jest szczególnie użyteczną odpowiedzią, chciałbym usłyszeć strategię, która pozwala mi nadać im realne granice bez a) wprowadzania w błąd lub b) błędnego.

MrCranky
źródło
1
To bardziej „przedprodukcja” niż „produkcja”.
Patrick Hughes,

Odpowiedzi:

5

Z mojego rozumienia znacznie łatwiej jest zmniejszyć złożoność modelu niż dodać szczegóły modelu, który został oskórowany i zmontowany. Wiem, że niektóre firmy wykorzystują to, łącząc bardzo szczegółowe zasoby i zmniejszając je w zależności od sytuacji.

Valve robi to ze swoimi NPC. NPC są modelowane w najdrobniejszych szczegółach bez jakiegokolwiek mapowania, a następnie skalowane w dół do poziomu akceptowalnego przez obecną technologię i sztuczki, takie jak różne techniki mapowania stosowane w oparciu o szczegółowe modele (lub nawet tworzone automatycznie).

Pomaga to również w korekcie na przyszłość, ponieważ nigdy nie będziesz musiał ponownie tworzyć zasobów, tylko dostosowuj je do każdego nowego projektu. Ma to również tę zaletę, że nie trzeba czekać, aż zespół przeprowadzi testy porównawcze, które są specyficzne dla kontekstu, zanim zasoby będą mogły zostać opracowane. Artyści mogą być w pełni zaangażowani od pierwszego dnia.

ClassicThunder
źródło
2
Nie zapewnia to jednak tak naprawdę budżetu: „uczyń go tak złożonym, jak potrzebujesz, a później go zmniejszymy” to strategia produkcyjna. : - /
MrCranky
16

Okej, więc naszą strategią jest:

  • Stwórz pewną geometrię zastępczą, z grubsza odpowiednią skalą dla treści końcowej. Mogą to być budynki lub postacie. Nie musi to wyglądać jak końcowa treść, mogą to być pudełka / kule / itp., Ale powinny być mozaikowane, aby miały przyzwoitą liczbę wielokątów. Jeśli wykonujesz postacie, spraw, aby miały reprezentatywną liczbę kości.
  • Ewentualnie użyj geometrii innej osoby. Jeśli masz tytuł, którego poziom jakości próbujesz dopasować, znajdź sposób, by złapać ich modele (być może za pomocą grabbera sceny DirectX).
  • Upewnij się, że Twoja geometria ma reprezentatywny moduł cieniujący. Jeśli spodziewasz się mieszać kilka tekstur, zrób to, nawet jeśli tekstury są jednokolorowe. Upewnij się, że tekstury mają niebanalne rozdzielczości, nawet jeśli wszystkie są w jednym kolorze.
  • Umieść rozsądną liczbę świateł.
  • Umieść aparat w realistycznym miejscu, wskazując na największą możliwą geometrię (np. Stojąc na szczycie wzgórza i patrząc na poziom)
  • Załaduj scenę na najwolniejszym i najszybszym docelowym sprzęcie i zmierz FPS.
  • Zmieniaj wartości geometrii / świateł / cieniowania / rozdzielczości tekstur w górę lub w dół, aby zorientować się, jakie są kompromisy (np. Możesz mieć tuzin dodatkowych świateł, ale musisz zmniejszyć liczbę poli o połowę).

Wreszcie: zachowaj ostrożność przy swoich liczbach. Renderowanie nie jest jedyną rzeczą, którą będzie musiała zrobić Twoja gra, więc zdecyduj, jaką część klatki chcesz wydać na renderowanie, i ustaw swój cel. Np. Jeśli chcesz spędzić dwie trzecie klatki przy renderowaniu z prędkością 30 klatek na sekundę, w swoich testach wybierz wartość docelową 1s / 22ms (45 fps).

Poza tym powinieneś być w stanie podać przykładowe sceny. Np. Oto scena z 200 000 wielokątów, 5 statycznymi światłami i nie więcej niż 3 dynamicznymi światłami na model, z 15 znakami 50 000 polis i 30 kośćmi, i działa z prędkością 60 klatek na sekundę i zajmuje 30 MB pamięci.

MrCranky
źródło
2
tl; dr: Benchmark to sam;)
Nicol Bolas,
+1 To naprawdę jedyny sposób, buduj i mierz.
Patrick Hughes,
Naprawdę? Miałem nadzieję, że znajdzie się mądrzejsze / tańsze rozwiązanie, o którym nie pomyśleliśmy.
MrCranky
@MrCranky niestety tak. Jeśli używasz istniejącego silnika, możesz szybko rozpocząć proces, mierząc istniejące przykładowe dane i wykorzystując je jako podstawę do dostosowania liczb w swojej grze - każda gra jest inna.
Patrick Hughes,
4

Liczba wierzchołków

Badałem „Polygon Count” od ponad 15 lat. Nie ma ścisłego sposobu określenia, ile wynosi limit, szczególnie w przypadku nowocześniejszego oprogramowania i sprzętu. Limity były znacznie bardziej przydatne w silnikach, które obsługiwały jedynie 4000 trójkątów dla całego poziomu. Teraz przekonasz się, że większość obiektów w środowisku gry przekroczy to indywidualnie.

Ostatecznie liczy się to, co robi silnik z pasami wielokątów.

Gdy silnik renderuje każdy model, pobiera współrzędne odwzorowane na UV, teksturę / materiał przedstawiony na trójkątach i tworzy paski trójkąta. W większości przypadków wentylator trójkąta jest podzielony na osobne paski trójkąta na trójkąt. Zwiększa to liczbę pasków trójkąta, zmniejszając wydajność.

Doskonałym przykładem tego rozwiązania jest płaski cylinder cylindra. Pakiety 3D zazwyczaj tworzą trójkątny wentylator z wierzchołkiem pośrodku. Usuwam krawędzie i środkowy wierzchołek, a następnie tworzę kwadraty w poprzek twarzy. To powinno następnie triangulować w pojedynczy pasek trójkąta zamiast wielu pasków jednej twarzy, bez zmiany liczby wielokątów.

Liczbę wielokątów należy traktować jako wskazówkę i zadbać o sposób modelowania, a także UV Mapuj siatkę. Mniej podziałów w siatce, gdy mapowanie UV często może być bardziej korzystne.

Następnie zastanów się, co można sfałszować za pomocą normalnych map. Płaska twarz z dużą ilością szczegółów zwykle jest odwzorowana normalnie. Zaokrąglenia muszą być okrągłe, aby zobaczyć sylwetkę. Patrząc z przodu na zakrzywione twarze, nie powinieneś zauważać różnicy między zasobem wysokiej rozdzielczości a zasobem rozdzielczości gry. To sylwetka robi różnicę w twoim modelu, gdy w grę wchodzą normalne mapy. Sylwetkę można teraz modyfikować za pomocą DirectX 11, korzystając z mozaikowania i mapowania przemieszczeń.

Design gry

Podczas projektowania gry weź pod uwagę następujące kwestie:

  1. Zdefiniuj typ gry (np. Akcja / przygoda / wyścigi / scroller)
  2. Zdefiniuj typ widoku (np. Pierwsza osoba / trzecia osoba / ortografia)
  3. Zdefiniuj moc obliczeniową dla swojego rynku. (np. entuzjasta / zwykły gracz)
  4. Stwórz styl wizualny, który chcesz osiągnąć. Czy chcesz, aby wyglądało to na przykład Crysis 2, Borderlands, Bloodforge lub Gears of War?
  5. Zdefiniuj ważne przedmioty dla gracza. Czy twoje rekwizyty będą w centrum uwagi, czy tylko w tle?
  6. Czy siatki wizualne są również siatką kolizyjną?

Korzystając z gry i typów widoków, zdecyduj, jaka będzie głębia widoku. Czy widzisz odległe obiekty iz jaką jasnością? Czy robisz coś z ograniczonym widokiem, na przykład strzelanka na korytarzu? (np. Gears of War) Czy robisz coś w swobodnym roamingu z otwartymi krajobrazami? (np. Skyrim)

Gdy już wiesz, jak to powinno wyglądać, możesz zbadać podobne gry.

Animacja ograniczy wtedy twoją zdolność do zwiększenia liczby wielokątów. Siatki statyczne, wszystko, co pozostaje w tej samej pozycji, jest najtańsze na GPU i CPU. Zwłaszcza jeśli nie są obiektami fizyki. W przypadku obiektów fizyki często można tworzyć proste kadłuby zderzeniowe i złożone siatki wizualne. W większości gier nie ma wystarczającej interakcji, aby zauważyć różnicę. Animacja przesuwa twój model 3-wymiarowo, z kilkoma kośćmi na wierzchołek, mieszając się między ważeniem każdego z nich. Może to być kosztowne w stosunku do czasu procesora, co może kolidować z AI i fizyką opartą na oprogramowaniu. Im większa liczba wierzchołków, na które wpływa liczba kości w całym modelu, obniży wydajność procesora. Jest to kolejny powód, dla którego postacie w grze są uważane za „sztukę”. Bardzo trudno jest zdefiniować granicę wielokąta.

Mój przykład

Korzystam z UDK, tworząc powolną strzelankę z perspektywy trzeciej osoby, z ograniczoną liczbą graczy i postaci niezależnych na ekranie w dowolnym momencie. W tym celu zamierzam uzyskać około 10 000 trójkątów na gracza, 5000 trójkątów dla typowych, ogólnych wrogów, a gdybym tworzył postać w stylu „bossa”, około 15 000. Dodatkowo, broń dla trzeciej osoby, około 4000 trójkątów, będzie bardzo szczegółowa. Pojazdy około 10 000 trójkątów. Wszystko będzie wymagało poziomu szczegółowości, ponieważ wymagam długich odległości widzenia.

Gdybym robił pierwszą osobę, oparłbym ramiona na około 2000 trójkątów, broń na około 5000 trójkątów, z normalnym odwzorowaniem dla każdego.

Wniosek

Oto, co prawdopodobnie oznacza „To zależy”, ale pomyślałem, że może wyjaśnić pewne rzeczy, o których ludzie często się zastanawiają.

  1. Użyj liczby wielokątów jako przewodnika.
  2. Spójrz na obszary, które mogą być normalnie zmapowane zamiast modelowane.
  3. Zachowaj ostrożność, umieszczając wentylatory trójkątne, jeśli to możliwe, utwórz pasek.
  4. Używaj mniej podziałów na siatce podczas mapowania UV, pamiętając o paskach.
Markham Ward
źródło
2

Jedną z metod, o której mogę myśleć, jest użycie automatycznie skonstruowanych scen do generowania danych statystycznych, na podstawie których można rozszyfrować poszukiwane informacje.

  1. Uzyskaj duży wolumen zasobów (potencjalnie może zostać wygenerowany automatycznie).

  2. Utwórz narzędzie do generowania scen, które mogą być ładowane przez silnik za pomocą puli zasobów.

  3. Uruchom bota, który będzie poruszał twoim aparatem po scenie. Możesz także uruchomić inne boty, aby scena była bardziej dynamiczna, w tym światła.

  4. Zbierz jak najwięcej informacji i wrzuć je do bazy danych; fps, liczba poli-, zmiany cieniowania, liczba świateł, losowanie połączeń itp.

  5. Utwórz / uzyskaj narzędzia do wyświetlania danych w bazie danych na jak najwięcej sposobów.

Ten link może dostarczyć więcej pomysłów: Dead Rising Tools

OriginalDaemon
źródło
Podoba mi się ta odpowiedź, ponieważ dotyczy najdroższej części naszej własnej strategii: ktoś musi podjąć wysiłek, aby stworzyć reprezentatywne sceny. Generowanie algorytmów lub skrypty do szybkiego umieszczania dużej liczby zasobów o rozsądnych rozmiarach znacznie przyspieszyłyby tworzenie testowalnej sceny. Przyjmuję bardziej popularną odpowiedź, ale myślę, że ta jest warta nagrody.
MrCranky