Jak działa Megatexture?

21

Zastanawiałem się nad stworzeniem małego silnika nie tylko do opracowywania małych eksperymentalnych gier, ale także jako podstawy do testowania różnych technik renderowania i tym podobnych. W tej chwili dużo myślałem o tym, jak radzić sobie z teksturami i natknąłem się na megateksturę, ale jest to nieco zagadkowe. Dużo mówi się o tym, że jest to lepsze niż tradycyjne podejście do posiadania wielu tekstur i ładowania ich w razie potrzeby, ale w jaki sposób megatexture tego unika, przeczytałem, że używają strumieniowania i możesz po prostu przesyłać strumieniowo bity i w przeciwieństwie do ładowania każdej tekstury z osobna, ale jak to zapewnia lepszą wydajność i czy nie jest to tylko inna forma uprawy roli?

Jak próbkujemy taką teksturę w module cieniującym, czy przesyłamy strumieniowo jej część do pamięci, a następnie pracujemy nad nią. Widziałem najnowsze filmy Rage'a i faktury, które wyglądają świetnie, ale czy to tylko rezultat wybitnych artystów, czy też technologia wchodzi w grę.

Podsumowując, jak to działa, dlaczego jest świetne i jak mogę zrobić coś podobnego.

Daemoniorum
źródło

Odpowiedzi:

15

Podstawową ideą mega tekstur jest użycie atlasu tekstur, w którym pakujesz wszystkie swoje różne tekstury w duże i używasz promieni UV do indeksowania tego obrazu. Potrzebna jest dobra heurystyka, aby wiedzieć, jaką część tekstury należy przesyłać strumieniowo z dysku na podstawie tego, co widać na ekranie. Plusem jest to, że możesz mieć całkowicie unikalne tekstury w całym świecie gry i przechowywać tylko widoczne dane w pamięci RAM. Dobry system przesyłania strumieniowego i buforowania jest potrzebny, aby był to niedrogi.

Polecam przejrzenie materiału na tej stronie, aby uzyskać bardziej szczegółowe informacje na temat jednego podejścia: http://silverspaceship.com/src/svt/

Flawe
źródło
4

Sprawdź mapowanie dla wcześniejszej implementacji sprzętowej SGI.

Ostatnio Megatexture jest używane jako nazwa pr dla rzadkiego wirtualnego teksturowania (SVT)

SVT renderuje widok z kamery o małej rozdzielczości, zwracając uwagę, która tekstura i mipmapa będą potrzebne. Następnie procedura CPU wysyła obciążenia do systemu dyskowego, aby wprowadzić te fragmenty tekstury / mipu do pamięci (jeśli nie są w pamięci), a następnie załadowany fragment tekstury jest umieszczany w sekcji dużego atlasu tekstur (zwykle w kawałkach, powiedzmy 128x128)

W miarę wprowadzania fragmentów tekstury aktualizowana jest tekstura przekierowania (wirtualna mapa strony), która pobiera wymagane tekstury i przekierowuje ją do konkretnej części dużej tekstury, w której jest faktycznie przechowywana.

DeanoC
źródło
To całkiem sporo wyjaśnia. Zastanawiałem się, czy trwały tylko transmisje strumieniowe, w jaki sposób udało im się przesyłać strumieniowo fragmenty tej ogromnej tekstury na dysku twardym lub dysku wystarczająco szybkim, aby można je było wykorzystać, atlas pośredni odpowiada na to całkiem ładnie. Teraz też rozumiem, dlaczego pamięć jest bardziej wydajna niż tradycyjne metody. Rozejrzę się po więcej szczegółów na temat SVT (link Flawe wygląda na dobry punkt wyjścia do tego)
Daemoniorum
1

Możesz myśleć o Megatexture jako swoistej teksturze „streaming”. Do wyświetlenia potrzebny jest jeden masywny, w pełni szczegółowy obraz tekstury (po prostu), który jest wczytywany jako jego fragmenty. Jestem pewien, że jest w tym o wiele więcej niż LOD / mipmapping, ładowanie i zarządzanie zasobami.

Wikipedia ma artykuł na ten temat.

Nick Bedford
źródło
2
Przeczytałem ten artykuł wcześniej, ale jest trochę światła na szczegóły. Trochę trudno jest uzyskać szczegółowe informacje na temat tej techniki. Chciałbym, żeby dowód zrobił z tego papier ...
Daemoniorum,