Jak wybrać współczynnik skalowania świata gier 3D?


9

Tworzę prototyp gry 3D dla czołgów z symulacją fizyki, używam C ++. Jedną z decyzji, które muszę podjąć, jest skala świata gry w stosunku do rzeczywistości. Na przykład, mógłbym rozważyć 1 jednostkę miary w grze, która w rzeczywistości odpowiada 1 metrowi. Jest to intuicyjne, ale wydaje mi się, że czegoś mi brakuje.

Mogę myśleć o następujących problemach:

  1. Kompatybilność z programem do modelowania 3D. (?)
  2. Dokładność numeryczna. (Czy to ma znaczenie?) Szczególnie w dużych skalach, w jaki sposób gry takie jak Battlefield mają ogromne mapy: jak nie stracą dokładności numerycznej, jeśli używają mapowania 1: 1 w skali rzeczywistej, ponieważ reprezentacja zmiennoprzecinkowa zwykle traci większą precyzję z większą liczby (np. z odlewaniem promieniowym, symulacją fizyki)?
  3. Rozgrywka Nie chcę, aby ruch jednostek był powolny lub szybki, przy użyciu prawie rzeczywistych wartości, takich jak -9.8 m/s^2grawitacja. (To może być subiektywne.)
  4. Czy można skalować w górę / w dół importowanych zasobów, czy najlepiej pasuje do świata o oryginalnej skali?
  5. Wydajność renderowania. Czy duże siatki o tej samej liczbie wierzchołków renderują się wolniej?

Zastanawiam się, czy powinienem podzielić to na wiele pytań ...

Odpowiedzi:


3

Ogólnie powinieneś robić cokolwiek działa.

  1. Ponieważ masz obiekty z prawdziwego życia, warto dopasować ich skalę (aplikacje do modelowania 3D zwykle mają skonfigurowane jednostki miary, metry, stopę itp.), Ale kiedy odejdziesz od zbiorników i skierujesz się na drzewa i inne obiekty scenerii - prawdopodobnie będą one potrzebować aby skalować niestandardowo, aby pasowało do Twojego stylu gry (więc modelujesz drzewo i masz możliwości skalowania go w edytorze gier, aby wyglądało dobrze, wiele razy użyjesz tego samego drzewa, ale w innej skali, aby urozmaicić).

  2. Nie przesuwaj aparatu daleko od źródła światów, ale przesuwaj świat wokół aparatu umieszczonego w pobliżu źródeł światów. W ten sposób unikniesz wielu problemów z precyzją, które pojawiają się, gdy procesor graficzny / fizyka muszą dokładnie porównywać wartości o niskiej precyzji. Jeśli przeniesiesz czołg i kamerę o 10 km od miejsca początkowego, twoja precyzja będzie wynosić ułamek milimetra za pomocą float32, co może powodować efekty podobne do walki z Z między modelami transformowanymi.

  3. Będziesz musiał dostosować globalne stałe, aby gra była przyjemna. Jest to ten sam sposób, w jaki zmieniasz względną skalę światów, aby pominąć nudne części i spakować bardziej interesujące rzeczy w małym obszarze 4x4 km (miasto, rzeka, góry itp.), Które są daleko od siebie w prawdziwym świecie.

  4. Jeśli wyglądały lepiej, skaluj je. Jeśli pasują tak, jak są - zachowaj to. Gry i filmy są bardziej sztuką niż ślepym kopiowaniem rzeczywistości. Znalazłeś więc ładnie wyglądające drzewo, które ma zaledwie 2 metry wysokości, oczywiście skalujesz je i dostosowujesz swoją grę w inny sposób (drobna paleta, szczegóły tekstury itp.)

  5. Wątpię, czy istnieje jakakolwiek różnica, o ile wyświetlają na ekranie taką samą liczbę pikseli.


8

Oto jest.

  1. Programy do modelowania 3D zazwyczaj pozwalają wybrać skalę jednostkową. Może ograniczać się do Imperial lub Metric, ale to tylko liczba. Liczby można łatwo konwertować / skalować / dostosowywać. To naprawdę nie ma znaczenia, jakiego systemu używasz jednostki, tak długo, jak korzystać z tego jeden . Zachowaj spójność, więc 1 metr nie staje się 1 stopą.

    Edycja: Książka: Ukończono kodowanie gry, trzeci dodatek, rozdział 15, str. 525, „Metry, stopy, łokcie lub Kellicams?”

  2. Gry z dużymi kawałkami wierzchołków mogą robić kilka rzeczy. Po pierwsze, mogą podzielić go na małe fragmenty, a następnie dane odnoszące się do tego fragmentu mogą określić przesunięcie. Nieco podobny do korzystania z Octrees, które jest optymalizacją renderowania, aby uniknąć renderowania dużych części niewidocznych wierzchołków. Alternatywnie, podwójne może przechowywać 1,79769e + 308 , co jest dość dużą, ale szczegółową liczbą. Pływak może przechowywać 3,40282e + 038, co też nie jest odrapane.

    Edycja: Kodowanie gry zakończone, trzecie dodawanie, rozdział 13, str. 410, „Współrzędne i układy współrzędnych” (tabela dodana na dole postu)

  3. Prawdopodobnie będziesz chciał wtedy użyć systemu metrycznego lub przekonwertować go na własny system jednostek. Warto zauważyć, że prawdopodobnie poprawisz nieco tę wartość. Jasne, twoja poprawiona wartość nie będzie fizycznie dokładna. Ale to może czuć się bardziej dokładne w, powiedzmy, -9.3 m/s^2.

  4. Możesz to zrobić w obie strony. Chociaż powiedziałbym, aby skalować aktywa. Jeśli skalujesz świat, będziesz musiał przejść przez i zmienić grawitację, obliczenia prędkości i wiele innych rzeczy. Podczas importowania zasobów do Unity3D zwykle muszę dostosować skalę modelu w ustawieniach importu, więc zakładam, że Unity to skaluje. Jeśli chcesz czegoś więcej w tym stylu.

  5. Duży lub mały rozmiar wielokątów / siatki nie ma znaczenia RAZEM tak bardzo, jak ich liczba. Przypuszczam, że może wystąpić niewielka zmiana wydajności w zależności od liczby pikseli, które model zajmuje, ale to wszystko. Poza tym liczba wynosząca 10 lub 100 nie zmienia niczego po stronie komputera. To wciąż ta sama liczba bitów do przetworzenia, po prostu różne bity mają wartość 0.

Edycja: Poniższa tabela zakłada 32-bitową liczbę zmiennoprzecinkową IEEE.

Game Coding Complete, Third Addition, Table 13.2, pg. 411
Smallest unit         Smallest Representable object  Upper Range    Description of
                      (As a textured polygon)                       largest area

100m                  A group of redwood trees       1.67x10^9      Earth/Moon System
1m                    A Human Being                  1.67x10^7      North and South America
1cm                   A coin                         1.67x10^6      California
1mm                   A flea                         1.67x10^5      San Francisco Bay Area
100 micrometer        A grain of pollen              1.67x10^4      Downtown San Francisco

Wszystkie te informacje i jeszcze więcej w Game-Coding Complete. Wpisany przez Mike McShaffry. Profesjonalista z branży zajmujący się grami od Black Jack po Thief: Deadly Shadows.


Nie jestem usatysfakcjonowany tą odpowiedzią, ponieważ tak naprawdę nie dodaje zbyt wiele do pierwotnego pytania i nie daje konkretnych przykładów. w odniesieniu do punktu 2 tak naprawdę nie pytałem o określenie widoczności lub stronicowanie geometrii ani o maksymalną liczbę zmiennoprzecinkową .. ale tak naprawdę miałem na myśli to, w jaki sposób niedokładność numeryczna jest obsługiwana z dużą geometrią, ponieważ zmiennoprzecinkowa traci dokładność z większymi liczbami, może faktycznie przechowywać bardzo duże liczby, ale ze słabą precyzją.
concept3d

Czy te edycje bardziej odpowiadają Twoim upodobaniom?
Wolfgang Skyler

cóż, tak, chociaż szczególnie pytałem o ten stackoverflow.com/questions/872544/precision-of-floating-point , szczególnie w symulacji fizyki, ale myślę, że to wymaga osobnego pytania.
concept3d
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.