Co to jest kolor wierzchołka?

31

Moje pytanie brzmi: co jest napisane w tytule. Często pojawia się to określenie „kolor wierzchołka”. Trudno mi to zrozumieć.

Na przykład:

Czy wierzchołek nie jest prostym punktem na przestrzeni 3D? Jeśli tak, to w jaki sposób punkt może mieć kolor? Czy ten „kolor” oznacza coś jeszcze?

W edytorze materiałów silnika nierzeczywistego istnieje węzeł „Kolor wierzchołków”.

Czy ktoś może rzucić światło na moje pytanie? Nie mogłem znaleźć niczego przydatnego, gdy przejrzałem „co to jest kolor wierzchołka”, ale dokumentacje były dla mnie zbyt techniczne.

Bora
źródło
2
W geometrii wierzchołek jest tylko punktem w przestrzeni. Ale do renderowania 3D chcesz, aby wyglądało ładnie, co może oznaczać dołączanie większej ilości informacji do każdego wierzchołka, takich jak kolor, współrzędna tekstury lub ciężary szkieletu, aby łatwiej animować siatkę lub normalny kierunek do zastosowania w oświetleniu obliczenia.
user253751
3
Myślę, że duża część twojego zamieszania wynika z częstego łączenia terminów „wierzchołek” i „pozycja” w 3D / grafice. Matematycznie stwierdzenie „Czy wierzchołek nie jest prostym punktem w przestrzeni 3D?” Jest poprawne, ale w dziedzinie silników gier i grafiki nie, pozycja jest prostym punktem w przestrzeni 3D; a wierzchołek (siatkowy) to kawałek danych, który prawie zawsze ma pozycję, ale może również mieć normalną, styczną, współrzędną tekstury, kolor i / lub dowolną z wielu innych danych . Wierzchołek siatki jest tak naprawdę tylko fragmentem danych przetwarzanych na etapie renderowania wierzchołka.
Slipp D. Thompson

Odpowiedzi:

29

Kolory wierzchołków nie są tak istotne, gdy masz w pełni teksturowaną siatkę 3d. Ale staje się interesujący, gdy masz nieustrukturyzowaną, ale kolorową siatkę. W takim przypadku przypisujesz kolor do każdego wierzchołka. Moduł cieniujący pokolorowałby następnie każdy piksel wielokąta, interpolując kolory trzech wierzchołków.

Kolory wierzchołków mogą być czasem interesujące w połączeniu z teksturami. Jeśli chcesz użyć algorytmu cieniowania, takiego jak cieniowanie Gourauda , po prostu oblicz natężenie światła na każdym wierzchołku, przypisz kolor światła do wierzchołka jako kolor wierzchołka, a podczas renderowania tekstury pomnóż wartość koloru każdego piksela tekstury przez interpolowane kolory. Pozwala to obliczyć źródła światła w module cieniującym wierzchołki zamiast modułu cieniującego piksele. Zazwyczaj jest to znacznie szybsze, ponieważ moduł cieniujący wierzchołki jest zwykle wykonywany znacznie rzadziej.

Philipp
źródło
2
btw, kolor wierzchołków był używany w niektórych starszych grach, które nie miały żadnych dynamicznych błyskawic / cieni. Na przykład Richard Burns Rally z 2004 roku używa kolorów wierzchołków do tworzenia różnych tekstur i stosowania cieni.
martin
The Witness to najnowsza gra, która szeroko wykorzystuje kolory wierzchołków i lightmapy, ale nie ma zbyt wielu tekstur.
user253751
@Philipp ”, ponieważ moduł cieniujący wierzchołek jest zwykle wykonywany znacznie rzadziej” Dlaczego? Czy moduł cieniujący wierzchołek nie jest częścią potoku renderowania i dlatego nie wykonuje każdej klatki? Dlaczego tak rzadziej? Czy „kolor” wierzchołka nie musiałby być obliczany również dla każdej klatki, tak jakby był w module cieniującym piksele?
Nikos
1
@Nikos Moduł cieniujący wierzchołek jest wywoływany raz na wierzchołek. Moduł cieniujący jest następnie nazywany raz na piksel. Wielobok z 3 wierzchołkami zwykle daje więcej niż 3 piksele na ekranie (jeśli gra kończy się obliczeniem wielu wielokątów, które pokrywają mniej niż 3 piksele, możesz zastanowić się, co możesz zrobić, jeśli chodzi o ubijanie i LOD).
Filip
25

Teoretycznie Vertex Color pozwala pokolorować model bez konieczności zawracania sobie głowy teksturami. Jest to dość powszechne w CAD.

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

W praktyce jest to tylko jeden slot, którego możesz użyć do wypchnięcia danych do wierzchołka, których następnie używasz w module cieniującym wierzchołki do robienia szalonych rzeczy .

„Czy wierzchołek nie jest prostym punktem w przestrzeni 3D?”

Tak myślałem, kiedy zaczynałem od 3D. Szybko dowiedziałem się, że się mylę .

Możesz myśleć o wierzchołku jako o kropli danych, która tworzy narożnik trójkąta, który chcesz malować na ekranie (i ani część „narożna”, ani „trójkąt”, „malować” lub „ekran” nie zawsze są prawdziwe ). Pozycja jest jedna - opcjonalna - aspekt tego obiektu blob danych, który nazywamy wierzchołkiem.

Możesz wiele zrobić, dołączając dodatkowe dane do wierzchołka. Najbardziej znanym przykładem jest to, że możesz dodać współrzędne UV, aby narysować teksturę na tym trójkącie. (Zwykle) nie możesz zdecydować, którą część tekstury narysować na trójkącie, jeśli masz tylko punkt - potrzebujesz również współrzędnych tekstury.

Innymi standardowymi przykładami tego, co jest w tym obiekcie blob, są normalne i styczne. Ważne jest to, że wszystkie są opcjonalne, w tym pozycja. Kolor wierzchołka to tylko jedno z tych opcjonalnych danych wejściowych, których można użyć lub wykorzystać, aby stworzyć ładny obraz na ekranie.

Piotr
źródło
2
„.. jako obiekt blob danych tworzący krawędź trójkąta”, nawet jeśli nie jest to konieczne. Wierzchołki mogą być dobrze renderowane jako punkty.
Kromster mówi o wsparciu Moniki
3
Aby zapoznać się z kilkoma świetnymi przykładami efektów cieniowania, które można uzyskać za pomocą kolorów wierzchołków, bardzo polecam sprawdzenie przemówienia GDC Natalie Burke z zeszłego roku „Animating With Math” (wideo jest w tej chwili dostępne tylko dla członków, ale slajdy są tutaj bezpłatne ) . Pokazuje, ile animacji w ekwipunku Przeznaczenia, włosach postaci i ubraniach, a nawet częściach ich wrogów i środowisk, uzyskano za pomocą cieniujących wierzchołków, ukształtowanych i kontrolowanych kanałami kolorów wierzchołków.
DMGregory
5
Twierdziłbym, że nie były to kolory wierzchołków, ale atrybuty wierzchołków pokazane jako kolory dla łatwiejszego postrzegania.
Kromster mówi o wsparciu Moniki
W tej dyskusji na temat FortNite istnieje kilka podobnie pomysłowych zastosowań modułów cieniujących wierzchołki , chociaż jeśli dobrze pamiętam, myślę, że najczęściej używali kanałów UV wierzchołków, a nie kanałów kolorów.
DMGregory
3
Ściśle mówiąc z punktu widzenia geometrii / matematyki, wierzchołek jest tylko punktem w przestrzeni. „Kolor wierzchołka” jest atrybutem stosowanym do wierzchołka przez „ideę” wierzchołka używanego przez procesory graficzne. Jest to to samo, co koło posiadające kolor lub nie. Geometryczna / matematyczna „idea” koła nie ma koloru, ale „idea” oprogramowania do renderowania kojarzy kolor z okręgiem. Zatem argument @ Kromster jest bardziej poprawny technicznie.
Pharap
8

Wierzchołki mogą mieć kolory, jest to właściwość taka jak normalna.

W środowisku 3d trójkąt jest barwiony na podstawie informacji o kolorze ich wierzchołków. Fragmenty najbliższe wierzchołkowi A uzyskują jego kolor, zbliżenie do wierzchołka B uzyskuje kolor B, a kolor interpoluje między 2.

Działa tak samo jak oświetlenie na wierzchołki

To łatwy sposób dodawania kolorów do modelu bez użycia tekstury.

Bálint
źródło
+1 za podanie (miejmy nadzieję) znanego przykładu innego podobnego atrybutu wierzchołka
AC
Problem z kolorami wierzchołków i normami polega na tym, że zakładają one, że wierzchołek jest częścią siatki (przybliżenie zakrzywionej powierzchni). Jeśli chcesz mieć ostre krawędzie lub twarze o różnych kolorach (np. Na sześcianie), potrzebujesz osobnych wierzchołków dla każdej twarzy, co znacznie zwiększa użycie pamięci (i spowalnia renderowanie).
am
@aml Możesz użyć płaskiego „operatora” w glsl, aby uzyskać efekt płaskiego cieniowania. Nie jest tak samo, ale działa.
Bálint
inny interpolowany atrybut: współrzędna tekstury i bufor Z! mamy moduł cieniujący wierzchołki obliczający dane dla każdego z 3 wierzchołków trójkąta, które są interpolowane podczas rysowania trójkąta na ekranie (lub w pewnym buforze), a moduł cieniujący piksele jest wywoływany z wartością interpolowaną dla każdego narysowanego piksela
user1952009
@aml Oczywiście x2 nie jest wąskim gardłem. I powiedziałbym, że są do tego stworzone shadery geometrii (np .: przekształcanie tekstury głębokości w trójkąty )
user1952009
2

Istnieją już solidne odpowiedzi - chcę tylko włączyć się w jeszcze jeden typowy sposób, w jaki zobaczysz używane kolory wierzchołków:

Różne kolory obiektów (lub inne atrybuty) w ramach jednego wywołania partii / rysowania.

Zobaczysz to używane do renderowania układów cząstek, tekstu i zestawionych (zwykle atlasowanych) duszków.

Wyobraź sobie, że masz emiter cząstek, który spawnuje cząstki o losowym kolorze początkowym lub który zanika do zera w ciągu życia cząstek. Gdybyśmy mieli użyć mundurów cieniujących do wysłania tych danych kolorów, musielibyśmy narysować każdą cząstkę o innym kolorze we własnym wywołaniu losowania, dzięki czemu układ cząstek byłby znacznie droższy. Zamiast tego możemy upiec te kolory w danych wierzchołków dla cząstek i renderować całą partię w jednym wywołaniu.

Wydaje się, że Unity używa tej techniki do zmiany koloru cząstek, a także do kolorowania pojedynczych znaków w TextMesh lub Sprite renderowanych razem w partii.

Wierzę, że możesz zrobić coś podobnego z instancjami geometrii, ale nie wiem, jak te dwa wypadają pod względem wydajności. Możliwe, że dzisiaj tego rodzaju podkręcanie za pomocą kolorów wierzchołków jest raczej wstrzymaniem do obsługi sprzętu sprzed OpenGL 3.1 / DX9, takiego jak niektóre urządzenia mobilne, a nie najlepszą praktyką dla nowoczesnych komputerów. Z radością powitam komentarze ludzi, którzy dokonali większego dostrajania wydajności za pomocą partii i instancji, aby pomóc wyjaśnić, czy te techniki zastąpiły w tym celu kolory wierzchołków. :)

DMGregory
źródło