Pracowałem przy użyciu Mayi do tworzenia animacji i projektów zorientowanych na film, ale koncentruję się również na studiach nad tworzeniem gier wideo. W każdym razie rozmawiałem z jednym z moich profesorów i nie mogliśmy zrozumieć, dlaczego wszystkie silniki gier (o których wiem) zamieniają się w trójkąty.
Czy ktoś wie, dlaczego silniki gier przekształcają się w trójkąty w porównaniu z pozostawieniem modeli jako wielokątów? Jakie są wady i zalety (jeśli w ogóle) robienia tego?
graphics-programming
Dotacja
źródło
źródło
Odpowiedzi:
Najważniejsze jest rasteryzacja trójkątów, czyli sposób, w jaki komputery renderują obiekty na ekran. Chociaż inni mówią to bardziej wymownie niż ja:
Podkreśl moje. Źródło: http://www.devmaster.net/articles/software-rendering/part3.php
źródło
Trójkąty mają wiele właściwości, które sprawiają, że łatwiej i przez to szybciej rysują.
Cztery lub więcej punktów może nie znajdować się na tej samej płaszczyźnie, ale zawsze są trzy punkty (ignorując przypadki zdegenerowane). Ma to interesującą właściwość polegającą na tym, że wartości skalarne zmieniają się liniowo na powierzchni trójkąta. Nawet gdy trójkąt jest rzutowany na ekran, wartości skalarne wciąż zmieniają się liniowo względem x '/ z oraz y' / z.
To z kolei oznacza, że większość, jeśli nie wszystko, co jest potrzebne do cieniowania, mapowania tekstur i filtrowania głębokości, trójkąt można obliczyć za pomocą interpolacji liniowej, co można wykonać niezwykle szybko na specjalistycznym sprzęcie.
tl; dr: trójkąty są najprostszym prymitywem, więc algorytmy zajmujące się trójkątami można znacznie zoptymalizować.
źródło
Trzy punkty (trójkąt) ZAWSZE określają płaską płaszczyznę. Innymi słowy, biorąc pod uwagę dowolne trzy punkty, zawsze możesz stworzyć płaską płaszczyznę, która może przeciąć wszystkie trzy punkty. Jednak nie zawsze dotyczy to czterech punktów. Możesz mieć cztery punkty w samolocie, ale możesz też mieć cztery punkty, które nie są w samolocie.
źródło
Nie robią tego „silniki gier” - robi to całe oprogramowanie 3D, którego używasz. To po prostu ci o tym nie mówi, a twój profesor wydaje się dość słabo wykwalifikowany, jeśli o tym nie wie. Istnieją w pamięci komputera, nawet jeśli oprogramowanie ukrywa je przed tobą. Wszystkie programy 3D mają opcję, dzięki której trójkąty będą widoczne. Będą również mieli opcję, która dzieli je na edytowalne krawędzie, dzięki czemu można z nimi grać. Ale zawsze były na początku i naiwnością twojego profesora jest nauczanie tego tematu i wciąż zastanawianie się „po co są trójkąty”.
Trójkąt to jedyny sposób na ułożenie wierzchołków i zagwarantowanie płaskiej powierzchni. Kiedy masz quada, możesz ułożyć wierzchołki w taki sposób, aby wyginał się. Ale jest już zrobiony z trójkątów i to te trójkąty, które pozwalają na zgięcie.
źródło
Trójkąt jest najprostszym prymitywem, który można opisać osobno, ponieważ ma trzy punkty, mniej niż te, które nie opisują powierzchni w 3D.
Ponieważ trójkąt można rozpatrywać w oderwaniu, możliwe jest wykonanie fragmentu kodu lub silikonu, który jest w stanie renderować tylko jeden trójkąt, który dzięki sile powtarzania może renderować dowolną powierzchnię.
Dlatego pierwszy system komputerowy, któremu udało się renderować „dowolną powierzchnię” naturalnie zrobił to, renderując wiele trójkątów niezależnie.
Jeśli ktoś myśli o trójkątach i quadach jako o „prymitywach” (tj. O całkowicie odizolowanych fragmentach geometrii bez kontekstu), trójkąt jest bardziej prymitywny i dlatego będzie miał tendencję do „wygrywania”.
Jednak gdy komputery klasy rozrywkowej przekroczyły pewien poziom wyrafinowania w latach osiemdziesiątych, prostota rozpatrywania „prymitywów” w izolacji stała się mniej ważna. Jeśli grafika ma być produkowana masowo, wówczas korzyści skali sprzyjają przetwarzaniu grup powiązanych wierzchołków, tak samo jak sprzyjają montowaniu stu prawie identycznych samochodów na raz.
Dlatego w latach 80. filmy przyjęły „quad”, co jest mylące, ponieważ odnosi się do siatki 2D wierzchołków w przestrzeni 3D, a nie do izolowanego czworoboku.
Ta sama zmiana z trójkątów na „quady” jeszcze się nie wydarzyła w dziedzinie interaktywnej rozrywki, ale prawdopodobnie nastąpi to dość szybko iz tych samych powodów miało to miejsce w branży filmowej.
źródło
Jest tylko jeden sposób na triangulację trójkąta w stosunku do 'n - 2' sposobów dla wieloboku wielobocznego. Tak więc trójkąty są ostatecznie najmniej dwuznacznym sposobem definiowania kształtu wielościennego. Ponadto, jak wskazują inne plakaty, istnieje wiele sposobów na przyspieszenie rasteryzacji trójkątów (zamiast quad lub wyższych) (stała z jest jednym z moich ulubionych). Ponadto łatwiej jest zoptymalizować testy przecięcia trójkąt-promień niż w przypadku testów arbitralnego skrzyżowania wielokąta. W rzeczywistości wiele operacji na wielokątach n-stronnych korzysta z posiadania trójkątnej reprezentacji pod ręką. Nie oznacza to, że n-stronne reprezentacje wielokątów są „złe” - są bardzo przydatne, ale ostatecznie będziesz chciał pracować z trójkątami dla wielu operacji siatki.
źródło
Tak długo, jak trójkąt jest zdefiniowany przez trzy nieliniowe wierzchołki (czytaj: żaden z kątów nie jest dokładnie Pi), wówczas wierzchołki określają unikalną płaszczyznę.
Kwadrat jest oczywiście definiowany przez cztery wierzchołki. Jest całkowicie możliwe, że te wierzchołki będą nie współpłaszczyznowe. W takim przypadku twój quad byłby naprawdę dwoma trójkątami podzielonymi przez przekątną na quadzie. To dwie płaszczyzny, dwa zestawy normalnych powierzchni itp.
Każde dostępne narzędzie do modelowania, każdy algorytm teksturowania, oświetlenia itp. Zakłada, że model składa się z płaskich segmentów, a każda formuła, którą posiadamy (produkty krzyżowe do normalnego obliczania jest pierwszą, którą mamy) używa bezwzględnego minimalnego zestawu danych wejściowych - trzy wierzchołki definiują płaszczyznę, a płaszczyzna jest tym, czego potrzebujemy, aby wykonać wszystkie wymyślne rzeczy.
Z pewnością możesz napisać silnik do pracy z quadami, ale zignorujesz czwarty wierzchołek niemal w każdym przypadku, z wyjątkiem sytuacji, gdy (często) będziesz musiał upewnić się, że jest współpłaszczyznowy z pozostałymi trzema, które definiują quad. I najbardziej logiczne rozwiązanie do przypadku, gdy jest to nie w jednej płaszczyźnie byłoby podzielić quad na dwa trójkąty. Dlaczego więc po prostu tego nie zacząć?
Jaki byłby sens pracy z quadami?
Jeśli chcesz quad, połącz dwa trójkąty.
źródło
Jeśli założymy, że uzyskanie 4 punktów na współpłaszczyznach nie stanowi problemu (jest to, jak zauważyli inni, ale trzymajcie się mnie), to okaże się, że renderowanie dowolnego trapezu (tak zwykle będzie wyglądać czworobok) po przekształceniu w przestrzeń ekranu) nie różni się szczególnie od renderowania trójkąta - w rzeczywistości działa prawie tak samo po wykonaniu obcinania, ponieważ może wprowadzić dodatkowe wierzchołki. (Przynajmniej w modelu oprogramowania - sprzęt może mieć prostszy sposób na wycinanie).
Pozostała kwestia dotyczy zatem wydajności reprezentacji. - możesz łatwo przedstawić kwadrat z 2 trójkątami i bez żadnych dodatkowych wierzchołków, jeśli użyjesz paska trójkąta (3 wierzchołki dla pierwszego trójkąta, a następnie dodatkowy wierzchołek dla drugiego trójkąta). Z drugiej strony, jeśli spróbujesz przedstawić trójkąt z kwadratem, musisz użyć 4 wierzchołków i mieć zdegenerowany identyczny z drugim. Nie jest to idealne pod względem wydajności.
źródło