Odpowiedzi:
Dam ci „prostą” wersję i pozwolę komuś innemu podać ci szczegóły, jeśli jesteś zainteresowany :).
Istnieją zasadniczo dwa sposoby modelowania obiektów 3D. Pierwszy to taki, którego nie ma wiele w grach, i wymaga użycia precyzyjnych, matematycznie zdefiniowanych krzywych do zdefiniowania kształtu obiektu. Stosując tę metodę, poziom szczegółowości jest (praktycznie mówiąc) „nieskończony”. Weźmy na przykład cylinder. Cylinder można zdefiniować w bardzo prosty sposób matematyczny: wszystko, co naprawdę musisz wiedzieć, to promień na końcach i długość cylindra. Jeśli chodzi o geometrię, ta informacja jest wszystkim, czego potrzebujemy, aby renderować cylinder w scenie 3D. Co więcej, możemy łatwo skalować cylinder, aby był większy lub mniejszy; wszystko, co musimy zrobić, to utrzymać stosunek długości do promienia. Możemy użyć tych samych wzorów do przedstawienia geometrii, ale z różnymi parametrami. Możemy reprezentować torus („pączek” kształt) również łatwo: musimy po prostu znać wewnętrzny promień i zewnętrzny promień. Na tej podstawie możemy obliczyć średnicę (a zatem promień) ciała pączka („placka”), odejmując wewnętrzny promień od zewnętrznego promienia. Okrągły korpus owija się wzdłuż łuku określonego przez wewnętrzny promień. Ten typ definicji 3D jest fajny, ponieważ jest stosunkowo prosty (w wyniku powstaje plik małego modelu) i nie ma znaczącego ograniczenia poziomu szczegółowości. Minusem jest to, że dzisiejszy sprzęt wideo nie jest zaprojektowany do wydajnego przetwarzania tego typu modeli (jeśli w ogóle). Okrągły korpus owija się wzdłuż łuku określonego przez wewnętrzny promień. Ten typ definicji 3D jest fajny, ponieważ jest stosunkowo prosty (w wyniku powstaje plik małego modelu) i nie ma znaczącego ograniczenia poziomu szczegółowości. Minusem jest to, że dzisiejszy sprzęt wideo nie jest zaprojektowany do wydajnego przetwarzania tego typu modeli (jeśli w ogóle). Okrągły korpus owija się wzdłuż łuku określonego przez wewnętrzny promień. Ten typ definicji 3D jest fajny, ponieważ jest stosunkowo prosty (w wyniku powstaje plik małego modelu) i nie ma znaczącego ograniczenia poziomu szczegółowości. Minusem jest to, że dzisiejszy sprzęt wideo nie jest zaprojektowany do wydajnego przetwarzania tego typu modeli (jeśli w ogóle).
Innym sposobem jest połączenie prostej geometrii w celu przybliżenia kształtu, który chcemy przedstawić. Robimy to w procesie zwanym teselacją . Możemy teselować walec, rozkładając go na bardziej prymitywne kształty: dwa koła i szereg długich prostokątów, które owijają się wokół zewnętrznej krawędzi. Okręgi można dalej podzielić na wiele małych trójkątów, podobnie jak prostokąty wzdłuż krawędzi. Rezultatem końcowym jest model składający się tylko z trójkątów:
Lub, dla torusa:
Dobrą wiadomością jest to, że sprzęt wideo jest zoptymalizowany do obsługi tego rodzaju geometrii. Dzisiejsze układy GPU nie mają problemu z wydalaniem ton i ton trójkątów co sekundę. Istnieje jednak oczywisty problem: próbujemy przedstawić zakrzywione powierzchnie za pomocą kształtów o płaskich krawędziach. Aby nasz cylinder wyglądał jak cylinder (w przeciwieństwie do sześcianu), chcemy go rozbić na wielemałych trójkątów. Cóż, ile chcemy? To zależy. Jaki sprzęt zostanie wykorzystany do renderowania sceny? Szybszy sprzęt może renderować trójkąty szybciej niż wolniejszy sprzęt, generując szybsze liczby klatek. Są inne czynniki, które należy wziąć pod uwagę, na przykład, ile innych obiektów będzie obecnych na scenie i jak złożone będą one? W grach w danej scenie jest zwykle wiele obiektów. Ponadto obiekty mogą podróżować przez różne sceny, z których każda ma inny poziom złożoności wizualnej. Trudno jest określić poziom szczegółowości, który należy zastosować, gdy sprzedajemy nasze modele.
Innym problemem jest złożoność geometryczna: podczas gdy definicja walca oparta na krzywej jest bardzo prosta (promień i długość), definicja mozaikowa prawdopodobnie łączy setki trójkątów, z których każdy musi zostać zdefiniowany niezależnie. W rezultacie nasz plik modelu mozaikowego będzie znacznie, znacznie większy. Powiedzmy, że mamy matematycznie zdefiniowany model czegoś złożonego, na przykład osoby. Nasz plik modelu może mieć rozmiar zaledwie 24 KB. Po tym, jak ten model jest mozaikowany, wynikowy plik może mieć rozmiar 24 MB (24 000 KB). To spora różnica.
Teselacja sprzętowa wykorzystuje shadery geometrii do wykonywania teselacji wspomaganej sprzętowo w czasie rzeczywistym (lub prawie w czasie rzeczywistym). Zasadniczo zapewnia mechanizm pobierania matematycznie zdefiniowanego modelu 3D i przekształcenia go w mozaikowy format, który karta graficzna może wydajnie renderować. Tradycyjnie twórcy gier przeprowadzali teselację w studiu i dostarczali teselowane modele wraz z grą. Teselacja sprzętowa pozwala nam odroczyć ten proces, dopóki gra nie uruchomi się na komputerze gracza. Ma to poważne zalety:
Rozmiar zawartości 3D gry dramatycznie maleje (mniej płyt lub mniejsze pliki do pobrania i mniej miejsca na dysku twardym).
Możemy kontrolować poziom szczegółowości w czasie rzeczywistym . Czy działamy na najnowszej maszynie do gier? Jeśli tak, możemy sprzedać mozaikę przy użyciu bardzo wysokiego poziomu szczegółowości. Czy działamy na starym laptopie ze zintegrowaną grafiką? Nie ma problemu; możemy po prostu zmniejszyć poziom szczegółowości, aby zwiększyć wydajność.
To jest sedno tego. Prawdopodobnie nie jest w 100% dokładny, ponieważ nie jestem programistą 3D, ale to powinno dać ci lepsze wyobrażenie o tym, o co tyle zamieszania :).
Na zdrowie,
Mike
Szkoda, że nie jest to sposób, w jaki większość programistów korzysta z teselacji teraz lub w najbliższej przyszłości. W tej chwili używają tess do przemieszczania głównie płaskich powierzchni zgodnie z mapą wysokości. Daje to również dobry wygląd, ale nadal uważam, że jest to słabe wykorzystanie znacznie bardziej wydajnej technologii.