Dlaczego trójniki w siatkach powodują pęknięcia?


19

Słyszałem z wielu źródeł, że łączenie teowe w siatkach 3D jest złym pomysłem, ponieważ może powodować pęknięcia podczas renderowania. Czy ktoś może wyjaśnić, dlaczego tak się dzieje i co można zrobić, aby ich uniknąć?


Odpowiedzi:


20

Odpowiedź lhf jest dobra z punktu widzenia teselacji, ale mogą one wystąpić w przypadku prostszych przypadków użycia siatki trójkąta.

Weźmy ten trywialny przykład trzech trójkątów w przestrzeni ekranu , ABC, ADE i DBE ...

wprowadź opis zdjęcia tutaj

Chociaż punkt E, matematycznie, miał być dokładnie na odcinku linii AB, rurociąg nie będzie wykorzystywał w pełni dokładnych wartości, takich jak liczby wymierne (np. Https://gmplib.org/ ). Zamiast tego prawdopodobnie będzie używać liczb zmiennoprzecinkowych, więc zostanie wprowadzone pewne przybliżenie / błąd. Prawdopodobnie wynikiem będzie coś takiego:

wprowadź opis zdjęcia tutaj

Zauważ, że wszystkie wierzchołki mogą mieć niedokładności. Chociaż powyższy przykład pokazuje pęknięcie, złącze T może zamiast tego powodować nakładanie się wzdłuż krawędzi, powodując dwukrotne narysowanie pikseli. Może to nie wydawać się tak złe, ale może powodować problemy z przezroczystością lub operacjami matrycy.

Można by pomyśleć, że przy zmiennoprzecinkowym wprowadzony błąd będzie nieznaczny, ale w rendererze wartości wierzchołków przestrzeni ekranu (X, Y) są prawie zawsze reprezentowane przez liczby stałoprzecinkowe, a zatem przemieszczenie z idealnej lokalizacji będzie zwykle są znacznie większe. Ponadto, ponieważ sprzęt do renderowania „interpoluje” segment linii piksel po pikselu z własną wewnętrzną precyzją, istnieje jeszcze większa szansa, że ​​odejdzie on od zaokrąglonej lokalizacji E.

Jeśli trójnik zostanie „usunięty” przez, powiedzmy, również podzielenie trójkąta ABC na dwa, tj. AEC i EBC, problem zniknie, ponieważ przesunięcia wprowadzone przez błędy będą spójne.

Teraz możesz zapytać, dlaczego rendery (szczególnie HW) używają matematyki stałoprzecinkowej dla współrzędnych XY wierzchołka? Dlaczego nie używają liczb zmiennoprzecinkowych w celu zmniejszenia problemu? Chociaż niektórzy to zrobili (np. Dreamcast Segi), może to prowadzić do innego problemu, w którym matematyka konfiguracji trójkątów staje się katastrofalnie niedokładna, szczególnie w przypadku długich cienkich trójkątów i zmieniają rozmiar w nieprzyjemny sposób.


2
Kiedy mówisz, że „wartości wierzchołków (X, Y) są prawie zawsze reprezentowane przez liczby stałoprzecinkowe”, domyślam się, że masz na myśli współrzędne wierzchołków przestrzeni ekranowej w rasterizerze, prawda? Nie oryginalne wierzchołki przestrzeni modelu.
Nathan Reed,

2
@NathanReed Tak. Tylko X&Y w przestrzeni ekranu (i być może na niektórych GPU Z). Zedytuję to, aby to było jaśniejsze.
Simon F

9

Podczas modelowania powierzchni parametrycznych z siatką w dziedzinie parametrów, złącza T najprawdopodobniej pojawią się jako nieciągłości na powierzchni. Pojawią się one jako przerwy w renderowaniu. Patrz poniżej.

Mówiąc bardziej ogólnie, połączenia T w siatkach trójkątów prawdopodobnie spowodują nieciągłości interpolowanych atrybutów, takich jak kolor i normalne.

wprowadź opis zdjęcia tutaj wprowadź opis zdjęcia tutaj



4

Błąd zaokrąglenia zmiennoprzecinkowego.

Po przekształceniu skrzyżowania T punkt w T może zostać zaokrąglony od krawędzi.

Wtedy może się zdarzyć, że fragment, który jest próbkowany dla piksela, leży w szczelinie między 2 powierzchniami.

Można to naprawić, nie mając trójnika.


3

Prostym sposobem na uniknięcie tego jest upewnienie się, że wszystkie wierzchołki są zespawane

Problem polega na tym, że masz cięcia wzdłuż krawędzi z wierzchołkiem, ale nie masz odpowiedniego wierzchołka na sąsiedniej krawędzi do spawania / łączenia go, jeśli myślisz o tym jak o guziku na koszuli, zasiałeś przycisk do krawędzi, ale nie dał mu dziury, więc materiał jest otwarty.

Na poniższym rysunku czerwone kropki reprezentują prawidłowo zespawane wierzchołki, wszystkie niebieskie kropki potrzebują dodatkowego wierzchołka, aby wyciąć je na sąsiedniej krawędzi.

wprowadź opis zdjęcia tutaj

Ogólnie rzecz biorąc, dobrą praktyką jest utrzymywanie modelowania w quadach i triach, pomaga to złagodzić ten problem, ponieważ zawsze powinieneś mieć odpowiedni wierzchołek do spawania. Pomaga także trzymać się quadów, jeśli planujesz używać jakichkolwiek metod podziału na siatce.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.