2009-06-18 15 views
8

Co jest podstawowym założeniem technologii, jaką można znaleźć w Oblivionie (i innych grach, jestem pewien, nie grałem wystarczająco dużo, aby wiedzieć), gdzie obiekty z daleka są niejasno pokazywane, gdy widzisz je z daleka? Na przykład duża wieża oddalona jest o milę, a zobaczysz niejasny prostokąt, który wystaje z horyzontu ... Oczywiście nie wszystkie gigantyczne sceny 3D można renderować, i wiem, że w przypadku map wysokościowych są tylko algorytmy aproksymacyjne które są używane do obniżenia jakości mapy wysokości z dala od kamery, ale w przypadku konkretnych obiektów, jaki jest najlepszy sposób na ich wyświetlanie?Odległe renderowanie obiektów 3D [gry]

Myślałem, że być może technika wstępnego renderowania, w której wybieramy określone miejsca wokół krajobrazu, a następnie tworzymy program, który rysuje wszystkie mapy wysokości i modele 3D wokół tego miejsca i robi zdjęcie. Zajmie to kilka zdjęć, a kiedy gracz znajdzie się w pobliżu tego miejsca, zdjęcia będą używane jako skybox.

Inną bardziej oczywistą techniką jest przechowywanie naprawdę zgrubnych modeli 3D, ale w takim razie, w jaki sposób system renderowania 3D wyraźnie decyduje się na renderowanie szorstkiego modelu budynku, a nie na przybliżonych modelach innych mniej znaczących (i prawdopodobnie niewidocznych) z tej odległości) obiektów? Jak zachowałbyś coś takiego wraz z mapą wysokości? Być może z założenia ma tylko kilka takich znaczących punktów, a następnie przechowuje ich listę w małym pliku, a na każdej ramce renderuje te, które są oddalone o mniej niż x daleko.

Jestem świadomy, że seria Halo postanawia podzielić grę na poziomy, a następnie każdy poziom ma inny ręcznie wykonany skybox. To jest to, o co chciałem w pierwszej sugestii, ale nie jestem tego pewien. Sądzę, że tak naprawdę staram się zebrać inne pomysły, udoskonalenia lub problemy w moich pomysłach, abym mógł wybrać prototypy z moim ograniczonym czasem i wiedzą.

Innym pokrewnym tematem jest wyświetlanie gór na odległość, ponieważ byłyby one częścią mapy wysokości, a nie modeli 3D na wierzchu, więc nie byłyby w stanie uzyskać wersji przybliżonej i wysokościowej. Algorytm aproksymacji może zepsuć górę z naprawdę odległego dystansu (zakładając, że spróbowałbyś nawet przybliżać i oddawać tak daleką geometrię, której prawdopodobnie nie zrobiłbyś). Dodatkowe punkty, jeśli pokryjesz to również w swojej odpowiedzi. :)

Dzięki!

P.S. Używam OpenGL. Po prostu szukam podstawowych pojęć, ale jeśli zdecydujesz się na przykładowy kod, użyj funkcji OpenGL i warunków! :)

EDYCJA: Dziękuję za odpowiedzi! Dla celów dokumentacyjnych tutaj znajduje się kolejny zasób, który znalazłem: Rozdział 4.9 w grze Program Gems 2 obejmuje koncepcję renderowania odległej scenerii do skybox: http://books.google.com/books?id=1-NfBElV97IC&lpg=PA416&ots=SOpnfijZly&dq=render%20distant%20to%20skybox&pg=PA416 (niestety ten podgląd to tylko pierwsza strona rozdziału ... Będę muszę pobrać tę książkę z biblioteki uniwersyteckiej, jak tylko wrócę w sierpniu)

Również po przeczytaniu tych rzeczy, nadal uważam, że LOD jest dla obiektów, które znajdują się w stosunkowo rozsądnej odległości. Jeśli obiekty nie mają nawet wielkości jednego piksela, ale nadal podajesz je karcie graficznej, marnujesz energię, korzystając z LOD lub nie. I tak by było w przypadku wszystkiego oprócz absolutnie największych odległych obiektów; kilka wysokich budynków i niektóre góry, w większości przypadków, ale małe modele szczegółów (krzewy, nawet drzewa, skały, cokolwiek innego sceneria ...) nie byłyby widoczne z takiej odległości. Więc podoba mi się technika renderowania do skybox, a kiedy dojdę do tego mostu, tak to przekroczę; i upewnię się, że użyję LOD we wszystkich modelach, po prostu nie oddam takiej odległości.

Nawiasem mówiąc, myślę bardziej na wzór gry w Obliviona, więc odpowiedź może zależeć od gatunku gry.

Odpowiedz

7

kilka technik, w tym te, które już wymienić:

  • poziomie szczegółowości. Przedstawiono powyżej.
  • Mipmapping. Dla tekstur.
  • Pole widzenia. Ogranicz liczbę rzeczy, które aparat może "zobaczyć", wybierając odpowiedni poziom powiększenia. Zobacz także widok uboju frustracji.
  • Samolot dalekiego obcinania. Okluzja odległych miejsc: w większości gier używa się mgły, gór lub innych wymówek, aby mieć ciężkie odcięcie od odległości. Można to zrealizować za pomocą ośmiornic lub innej podobnej techniki.Może to być oparte na całych obiektach lub wielokątach, lub czymkolwiek innym, i zwykle ma się pojawić tuż za tymi wyżej wspomnianymi górami.
  • Areny/poziomy/obszary/cokolwiek - znowu większość gier sztucznie ogranicza cię do grania na jednej arenie na raz; korzyść jest oczywista (możesz ignorować obiekty na wszystkich innych arenach)
  • Wstępne renderowanie - to jest to, co sugerujesz powyżej. W przypadku odległych scen statycznych, renderuj scenę w "typowy" widok i przekształć ją w teksturę w tle lub użyj jej jako mapy nieba/odbicia/itp.

Chodzi o to, aby wyrzucić tak dużo szczegółów, jak to możliwe, zanim użytkownicy zaczną zauważać.

Istnieje kilka wcześniej istniejących zestawów narzędzi, które wykonują te czynności automatycznie, ale zazwyczaj kosztują. Jeśli patrzysz na poważną aplikację, polecam przynajmniej poszukiwanie rozwiązań, które obejmują.

+1

Myślę, że twój punkt widzenia jest nieco niewystarczający. FOV zwykle odnosi się do kąta "kamery", którą przeglądasz.Punkt, w którym odciąłeś odległe obiekty, nazywany jest "dalekim obcinaniem" –

+0

@NeilN, masz rację; Zmodyfikuję odpowiedź. –

7

myślę, że to jest to, czego szukasz Level of Detail (LOD)

+0

Cóż, myślę, że to trochę mniejsza skala ... Mówię o naprawdę dużej skali, a LOD nie działałby, ponieważ oznaczałoby to, że wszystkie modele oddalone od hotelu nadal są rysowane, co nie byłoby możliwe. – Ricket

+2

Tak, w pewnym momencie usuniesz wszystkie obiekty, które są zbyt odległe, aby mieć znaczenie. Czasami można to znaleźć w ustawieniach programów 3D jako odległość odrysowania. kiedy coś przekracza, po prostu przestajesz go renderować. – AvatarOfChronos

+0

Oblivion rzeczywiście używa LoD do renderowania odległego terenu. Jest trochę informacji na temat elderscrolls.com, np. http://cs.elderscrolls.com/constwiki/index.php/Landscape_LOD_Tutorial – Kylotan

4

na 3D modeli, technika nazywa level of detail. Zasadniczo modele z wieloma wersjami są dostępne dla właściwego użycia w zależności od kontekstu. Nie zawsze jest to tylko odległość, ale można go również wykorzystać do utrzymywania szybkości odtwarzania w innych sytuacjach.

Bądź jednak ostrożny, powinieneś włączyć mipmapping, aby uzyskać większą liczbę tekstur na niższych modelach i uważać na animację. Przełączanie modelu pod animującym szkieletem jest trudne, więc jedną z technik jest utrzymywanie tego samego szkieletu, nawet podczas LOD-u modelowania.

Istnieją dynamiczne systemy LOD zarówno dla terenu, jak i dla modeli obiektowych, ale mogą to być ciężkie jednostki centralne.

0

Można renderować tekstury dla odległych obiektów, jednak trzeba ponownie renderować teksturę za każdym razem, gdy perspektywa zmienia się powyżej pewnego progu. Świetnie sprawdza się w odległych obiektach, gdzie perspektywa nie zmieni się tak często jak twój przykład gór w oddali, jednak jeśli źródło widoku porusza się zbyt szybko lub jesteś zbyt blisko, to dostaniesz efekt efektu rybiego oka wczesne dni renderowania nieba w trzęsieniu ziemi. Ten rodzaj systemu nadaje się do światów takich jak Eve online, które zawierają ogromne odległości.

To oczywiście kolejna sztuczka w twoim arsenale i nadal będziesz potrzebować LOD do pewnego stopnia.

0

Bardzo szczegółowe wersje modeli sprawdzają się szczególnie dobrze w przypadku pojazdów i obiektów. Z ziemią jest to bardzo trudne. Pracowałem nad grami typu Battlezone i symulacjami lotu na PC. Mała mgła pomaga zatuszować "wyskoki" między szczegółami.

Przy niższych szczegółach mapowanie tekstury jest często zastępowane kilkoma wielokątami jednokolorowymi.


„Innym bardziej oczywiste technika jest przechowywanie bardzo szorstkie modeli 3D, ale w jaki sposób system renderowania 3D specjalnie wybierać do renderowania szorstki model budynku, a nie ostre modele inne mniej istotne (i prawdopodobnie nie widzialne z tej odległości)? Jak zachowałbyś coś podobnego wraz z mapą wysokości? "

Możesz kratować swój teren i utrzymywać listę widocznych obiektów w każdej komórce siatki.

0

Jednym ze sposobów obsługi terenu jest posiadanie płytek o wielu rozdzielczościach. Podobnie jak robi to Virtual Earth i Google Maps, dzielą świat na płytki w sposób rekursywny. Tak więc, istnieją 4 płytki na poziomie 0, 16 na poziomie 1 itd. ... Następnie, stosując algorytm LoD do określenia zoomu/skali, załadowałbyś odpowiednie płytki terenu dla danego obszaru.

0

Technika dynamicznego buforowania wstępnie renderowanych widoków odległych obiektów jest zwykle nazywana "oszustami". Here's artykuł ze starej książki Gems do programowania gemów na ten temat.

Istnieje wiele technik obsługi poziomu szczegółowości w terenie mapy wysokości. Zajrzyj na stronę vterrain.org, aby zapoznać się z kilkoma popularnymi technikami. Ogólna zasada jest taka sama w większości wariantów - rozbij teren na sekcje i zastosuj geometrię o niższej rozdzielczości oraz tekstury w oddali - ale szczegóły są różne.

Aby zmniejszyć liczbę obiektów, które zostaną przesłane do karty graficznej, zwykle stosuje się pewien rodzaj usuwania widoczności. W najprostszym przypadku może to być po prostu upuszczenie modelu, którego obwiednia obejmuje mniej niż pewien próg pikseli ekranu (i tak będziesz obliczał to przy wyborze, którego LOD użyć, jeśli masz system LOD). Aby uzyskać większą wydajność, można użyć jakiejś hierarchicznej struktury danych przestrzennych do uboju - czworokąty lub oktawy, drzewa sferyczne, systemy portalowe (generalnie nieużywane w środowiskach zewnętrznych), proste schematy sieciowe itp. Podstawową ideą jest oszczędność pracy poprzez usuwanie węzła wyższego poziomu w hierarchii, a tym samym unikanie nawet patrzenia na wiele węzłów liści. Prostym przykładem może być uśpienie budynku i efektywne ubożenie wszystkich jego węzłów podrzędnych (obiektów wewnątrz lub na szczycie budynku) bez patrzenia na nie osobno.

W przypadku takiej gry, jak zapomnienie, prawdopodobnie dokonują też pewnego rodzaju eliminacji okluzji - uśmiercania obiektów przed przesłaniem ich do sprzętu graficznego w oparciu o ustalenie, że są one ukryte za innymi obiektami. Istnieje wiele różnych technik, niektóre z nich mogą być dość złożone.

Powiązane problemy