Minha pergunta é o que está escrito no título. Este termo "cor de vértice" aparece muito. Estou tendo dificuldade para entender isso.
Por exemplo:
Não é um ponto simples de vértice no espaço 3D? Se sim, como um ponto pode ter uma cor? Ou essa "cor" significa outra coisa?
Há um nó "Vertex Color" no editor de material do mecanismo irreal.
Alguém pode esclarecer minha pergunta? Não consegui encontrar nada útil quando pesquisei "o que é uma cor de vértice", exceto as documentações que são muito técnicas para mim.
vertex
terminology
Bora
fonte
fonte
Respostas:
As cores dos vértices não são tão relevantes quando você tem uma malha 3D totalmente texturizada. Mas fica interessante quando você tem uma malha não texturizada, mas colorida. Nesse caso, você atribui uma cor a cada vértice. O sombreador coloria cada pixel de um polígono interpolando entre as cores dos três vértices.
Às vezes, cores de vértice também podem ser interessantes em combinação com texturas. Quando você deseja usar um algoritmo de sombreamento como o Gouraud Shading , basta calcular a intensidade da luz em cada vértice, atribuir a cor da luz ao vértice como uma cor de vértice e, ao renderizar a textura, multiplica o valor da cor de cada pixel de textura por as cores interpoladas. Isso permite calcular fontes de luz no sombreador de vértice, em vez do sombreador de pixel. Isso geralmente é muito mais rápido, porque o shader de vértice geralmente é executado com muito menos frequência.
fonte
Em teoria, o Vertex Color permite colorir um modelo sem ter que se preocupar com texturas. Isso é bastante comum no CAD.
Na prática, é apenas mais um slot que você pode usar para inserir dados no vértice, que você usa no sombreador de vértices para fazer coisas malucas .
Era o que eu pensava quando comecei com o 3D. Aprendi rapidamente que estava errado .
Você pode pensar em um vértice como um blob de dados que forma um canto de um triângulo que deseja pintar na tela (e nem a parte "canto" nem as partes "triângulo", "pintura" ou "tela" são sempre verdadeiras ) A posição é unopcional - aspecto desse blob de dados que chamamos de vértice.
Há muito que você pode fazer anexando dados adicionais ao vértice. O exemplo mais famoso é que você pode adicionar coordenadas uv para desenhar uma textura nesse triângulo. Você (geralmente) não pode decidir qual parte de uma textura desenhar no triângulo se você tiver apenas um ponto - você também precisa de coordenadas de textura.
Outros exemplos padrão do que está nesse blob são normais e tangentes. O importante é que todos eles são opcionais, incluindo a posição. Vertex Color é apenas uma dessas entradas opcionais que você pode usar ou abusar para criar uma imagem bonita na tela.
fonte
Os vértices podem ter cores, é uma propriedade exatamente como o normal.
Nos ambientes 3d, um triângulo é colorido com base nas informações de cores de seus vértices. Os fragmentos mais próximos do vértice A obtêm a cor, o mais próximo do vértice B obtém a cor B e a cor interpola entre os 2.
Funciona da mesma maneira que a iluminação por vértice
É uma maneira fácil de adicionar cores a um modelo sem usar uma textura.
fonte
Já existem respostas sólidas aqui - eu só quero falar com mais uma maneira comum de ver cores de vértice usadas:
Variando as cores do objeto (ou outros atributos) em uma única chamada de lote / sorteio.
Você verá isso usado na renderização de sistemas de partículas, texto e sprites em lotes (geralmente em relevo).
Imagine que você tenha um emissor de partículas que gera partículas com uma cor inicial aleatória ou que desbota até 0 alfa durante a vida útil das partículas. Se usarmos uniformes shader para enviar esses dados de cores, precisaremos desenhar cada partícula de cor diferente em sua própria chamada de desenho, tornando o sistema de partículas muito mais caro. Em vez disso, podemos agrupar essas cores nos dados de vértice das partículas e renderizar todo o lote em uma única chamada.
O Unity parece usar essa técnica para variação de cores de partículas, bem como para colorir caracteres individuais em um TextMesh ou Sprites renderizados juntos em um lote.
Acredito que você pode fazer algo semelhante ao instanciamento da geometria, mas não sei como os dois se comparam no desempenho. É possível que hoje fazer esse tipo de ajuste instanciado através de cores de vértice seja mais um obstáculo para suportar hardware pré-OpenGL 3.1 / DX9 como alguns dispositivos móveis, em vez de uma prática recomendada para PCs modernos. Gostaria de receber comentários de pessoas que fizeram mais ajustes de desempenho com lotes e instanciamento para ajudar a esclarecer se essas técnicas substituíram as cores dos vértices para esse fim. :)
fonte