Мой вопрос в том, что написано в заголовке. Этот термин "цвет вершины" появляется много. Мне трудно понять это.
Например:
Разве вершина не является простой точкой в трехмерном пространстве? Если так, как точка может иметь цвет? Или этот «цвет» означает что-то еще?
В редакторе материалов нереального движка есть узел "Цвет вершины".
Может кто-нибудь пролить свет на мой вопрос? Я не смог найти ничего полезного, когда гуглил «что такое цвет вершины», кроме документации, которая слишком техническая для меня.
vertex
terminology
бора
источник
источник
Ответы:
Цвета вершин не так важны, когда у вас полностью текстурированная трехмерная сетка. Но это становится интересным, когда у вас есть нетекстурированная, но цветная сетка. В этом случае вы назначаете цвет каждой вершине. Затем шейдер раскрасит каждый пиксель многоугольника путем интерполяции между цветами трех вершин.
Цвета вершин также иногда могут быть интересны в сочетании с текстурами. Когда вы хотите использовать алгоритм затенения, такой как Gouraud Shading , вы просто вычисляете интенсивность света для каждой вершины, назначаете цвет света для вершины как цвет вершины, и когда вы визуализируете текстуру, вы умножаете значение цвета каждого пикселя текстуры на интерполированные цвета. Это позволяет вам вычислять источники света в вершинном шейдере вместо пиксельного шейдера. Это обычно намного быстрее, потому что вершинный шейдер обычно выполняется гораздо реже.
источник
Теоретически, Vertex Color позволяет раскрасить модель, не заботясь о текстурах. Это довольно часто встречается в САПР.
На практике это всего лишь еще один слот, который вы можете использовать для вставки данных в вершину, который вы затем используете в вершинном шейдере, чтобы делать сумасшедшие вещи .
Это то, о чем я думал, когда впервые начал работать с 3D. Я быстро понял, что был неправ .
Вы можете думать о вершине как о двоичном объекте данных, который составляет угол треугольника, который вы хотите нарисовать на экране (и ни часть «угла», ни части «треугольника», «рисования» или «экрана» не всегда верны). ). Позиция является одним из опциональных аспектов этого блока данных, который мы называем Vertex.
Вы можете многое сделать, прикрепив дополнительные данные к вершине. Самый известный пример - вы можете добавить координаты ультрафиолета, чтобы нарисовать текстуру на этом треугольнике. Вы (обычно) не можете решить, какую часть текстуры нарисовать на треугольнике, если у вас есть только точка - вам также нужны координаты текстуры.
Другие стандартные примеры того, что находится в этом объекте, являются нормалями и касательными. Важно то, что все они являются необязательными, включая позицию. Vertex Color - это только один из этих дополнительных входов, который вы можете использовать или использовать для создания красивой картинки на экране.
источник
Вершины могут иметь цвета, это свойство, как и обычное.
В трехмерной среде треугольник окрашивается в зависимости от цветовой информации их вершин. Ближайшие фрагменты к вершине A получают ее цвет, а ближе к вершине B - цвет B, а цвет интерполируется между двумя.
Работает так же, как освещение на каждой вершине.
Это простой способ добавить цвета в модель без использования текстуры.
источник
Здесь уже есть твердые ответы - я просто хочу включить еще один распространенный способ, которым вы увидите используемые цвета вершин:
Изменение цвета объекта (или других атрибутов) в пределах одного вызова партии / отрисовки.
Вы увидите, что это используется при рендеринге систем частиц, текста и пакетных (обычно атласных) спрайтов.
Представьте, что у вас есть излучатель частиц, который порождает частицы со случайным начальным цветом или с затуханием до 0 альфа за время жизни частиц. Если бы мы использовали шейдерную форму для отправки этих цветовых данных, нам нужно было бы рисовать каждую частицу разного цвета в своем собственном вызове рисования, что делало бы систему частиц намного более дорогой. Вместо этого мы можем запекать эти цвета в данные вершин для частиц и визуализировать весь пакет одним вызовом.
Unity, похоже, использует эту технику для изменения цвета частиц, а также для окрашивания отдельных символов в TextMesh или Sprites, визуализированных вместе в пакете.
Я верю, что вы можете сделать что-то похожее с созданием геометрии, но я не знаю, как эти два сравниваются по производительности. Вполне возможно, что в настоящее время такой тип инстансированной настройки с использованием вершинных цветов является скорее задержкой для поддержки аппаратного обеспечения до OpenGL 3.1 / DX9, как некоторые мобильные устройства, нежели передовой практикой для современных ПК. Я приветствовал бы комментарии от людей, которые сделали больше настройки производительности с пакетами и инстансингом, чтобы помочь выяснить, заменили ли эти методы цвета вершин для этой цели. :)
источник