W jaki sposób gra 3D może renderować obiekt bez sprite ' a dla każdego kąta?

Podczas nauki programowania prostych gier 2D, każdy obiekt miał arkusz z obrazkami przedstawiającymi wygląd gracza w każdej klatce / animacji. Modele 3D nie wydają się działać w ten sposób, inaczej potrzebowalibyśmy jednego obrazu na każdy możliwy widok obiektu!

Na przykład, obracająca się kostka potrzebowałaby wielu obrazów przedstawiających jak wyglądałaby z każdej strony. Więc moje pytanie brzmi, jak są "obrazy" modelu 3D reprezentowane i renderowane przez silnik, gdy oglądane z dowolnego perspektywy?

Author: SuperBiasedMan, 2015-11-23

2 answers

Wiele metod

Istnieje wiele metod renderowania i przechowywania grafiki 3D i modeli. Istnieją nawet różne metody renderowania grafiki 2D! Oprócz bitmap 2D, masz również SVG . SVG używa liczb do definiowania punktów na obrazie. Te punkty tworzą kształty. Punkty mogą również definiować krzywe. Pozwala to na tworzenie obrazów bez potrzeby stosowania pikseli. Rezultatem mogą być mniejsze rozmiary plików, oprócz możliwości przekształcania obrazu (skala i obracać) bez powodowania zniekształceń. Większość grafiki 3D używa podobnej techniki, z wyjątkiem 3D. co te metody mają wspólnego, jednak, że wszystkie ostatecznie renderują dane do siatki 2D pikseli.

Projekcja

Najczęstszą metodą renderowania modeli 3D jest projekcja . Wszystkie kształty do wyrenderowania są podzielone na Trójkąty przed renderowaniem. Dlaczego Trójkąty? Ponieważ Trójkąty mają gwarancję współpłaszczyznowości. To oszczędza dużo pracy dla renderer, ponieważ nie musi się martwić o "kolorowanie poza liniami". Jedną z wad jest to, że większość technologii projekcji grafiki 3D nie obsługuje idealnych kul lub innych okrągłych powierzchni. Musisz użyć przybliżeń i innych sztuczek, aby zrobić okrągłe powierzchnie (chociaż są pewne rendery, które obsługują okrągłe powierzchnie). Kolejnym krokiem jest konwersja lub projekt wszystkie punkty 3D na punkty 2D na ekranie (jak widać poniżej).

Obraz demonstrujÄ…cy projekcjÄ™

Od tego momentu" kolorujesz " Trójkąty, aby wszystko wyglądało solidnie. Chociaż jest to dość szybkie, kolejną wadą jest to,że tak naprawdę nie możesz mieć takich rzeczy, jak odbicia i załamania. Za każdym razem, gdy widzisz refrakcyjną lub odblaskową powierzchnię w grze, używają tylko sztuczek, aby wyglądać jak materiał odblaskowy lub refrakcyjny. To samo dotyczy oświetlenia i cieniowania.

Oto przykład użycia specjalnej kolorystyki aby przybliżenie kuli wyglądało gładko. Zauważ, że nadal możesz zobaczyć proste linie wokół wersji wygładzonej:

Obraz gładkiego cieniowania

Ray tracing

Możesz również renderować wielokąty za pomocą ray tracing . Dzięki tej metodzie w zasadzie śledzisz ścieżki, które światło zabiera, aby dotrzeć do kamery. Pozwala to na realistyczne odbicia i załamania. Nie będę jednak wdawał się w szczegóły, ponieważ jest on zbyt wolny, aby realistycznie używać go w grach. On głównie używane do animacji 3D (jak to, co Pixar robi). Proste sceny z ustawieniami niskiej jakości można szybko prześledzić za pomocą ray tracingu. Jednak przy skomplikowanych, realistycznych scenach renderowanie pojedynczej klatki może zająć kilka godzin (jak w przypadku filmów Pixar). Jednak tworzy ultra realistyczne obrazy:

Zdjęcie sceny z Ray tracingiem

Ray casting

Ray casting nie należy mylić z wyżej wspomnianym ray tracingiem. Ray casting Nie trace the ścieżki świetlne. Oznacza to, że masz tylko płaskie powierzchnie, a nie odblaskowe. Nie daje również realistycznego światła. Można to jednak zrobić stosunkowo szybko, ponieważ w większości przypadków nie trzeba nawet rzucać promieni dla każdego piksela. Jest to metoda, która była używana we wczesnych grach, takich jak Doom i Wolfenstein 3D. we wczesnych grach, Ray casting był używany do map, a postacie i inne przedmioty były renderowane za pomocą sprite ' ów 2D, które zawsze były zwrócone w stronę kamery. Sprity zostały zaczerpnięte z kilka różnych kątów, aby wyglądały 3D. oto obraz Wolfenstein 3D:

Zdjęcie Wolfenstein3D (Klon Javascript)
Zamek Wolfenstein z JavaScript i HTML5 Canvas: Obraz Martin Kliehm

Przechowywanie danych

DANE 3D mogą być przechowywane za pomocą wielu metod. Niekoniecznie zależy to od użytej metody renderowania. Zapisane dane same w sobie nic nie znaczą, więc musisz je renderować za pomocą jednej z metod, które już zostały wspominany.

WielokÄ…ty

Jest to podobne do SVG. Jest to również najczęstsza metoda przechowywania danych modelu. Geometrię definiujesz za pomocą punktów 3D. Punkty te mogą mieć inne właściwości, takie jak dane tekstur (w postaci mapowania UV), dane kolorów i cokolwiek innego.

Dane mogą być przechowywane przy użyciu wielu formatów plików. Wspólny format pliku, który jest używany jest COLLADA , który jest plikiem XML, który przechowuje dane 3D. Istnieje lot innych formatów. Zasadniczo jednak wszystkie formaty plików nadal przechowują dane 3D.

Oto przykład modelu wielokąta:

Zdjęcie modelu wielokąta

Voxels

Ta metoda jest dość prosta. Można myśleć o voxel modele Jak bitmapy, z tym, że są one kilka bitmap warstwowych razem zrobić bitmapy 3D. Więc masz siatkę 3D pikseli. Jednym ze sposobów renderowania voxeli jest konwersja punktów voxela na kostki 3D. Należy pamiętać, że voxels nie muszą być renderowane jako kostki, jednak. Podobnie jak piksele, są to tylko punkty, które mogą mieć DANE kolorów, które mogą być interpretowane na różne sposoby. Nie będę wdawać się w szczegóły, ponieważ to nie jest zbyt powszechne i generalnie renderujesz voxele metodami wielokątów (jak wtedy, gdy renderujesz je jako kostki. Oto przykład modelu voxel:

Voxel data
obrazek użytkownika Wikipedii Vossman

 86
Author: Lysol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-24 07:07:49

W świecie 2D z arkuszami sprite 'ów rysujesz jeden z sprite' ów w zależności od stanu aktora (wizualna reprezentacja Twojego obiektu). W świecie 3D renderujesz model dla swojego aktora, który jest serią wielokątów z teksturą odwzorowaną na nim. Istnieją ustandaryzowane pliki modeli (znam głównie Autodesk 3ds Max), w których model i przypisane tekstury mogą być pakowane razem (a .3DS lub .MAX file), dostarczając wszystko, czego potrzebuje Twoja biblioteka graficzna Renderuj obiekt i jego tekstury.

W skrócie, nie używasz obrazów dla każdego widoku obiektu 3D, masz model z teksturą renderowaną na nim, tworząc dynamiczny widok tak, jak jest renderowany przez Bibliotekę graficzną.

 1
Author: TheGrandPackard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-23 21:01:06