Por que os mecanismos de jogo convertem modelos em triângulos em vez de usar quads?

47

Eu trabalhei usando o Maya para animação e mais projetos orientados para filmes, mas também estou focando meus estudos no desenvolvimento de videogames. De qualquer forma, eu estava conversando com um dos meus professores e não conseguimos descobrir por que todos os mecanismos de jogo (que eu conheço) se convertem em triângulos.

Alguém sabe por que os mecanismos de jogo se convertem em triângulos, em vez de deixar os modelos como polígonos de quatro lados? Além disso, quais são os prós e os contras (se houver) de fazer isso?

Conceder
fonte
1
Um pouco relacionado, o NVidia NV1 usou o mapeamento de textura quadtrático (que usa quads), em vez de triângulos / polígonos. Não foi um grande sucesso, para dizer o mínimo. Veja en.wikipedia.org/wiki/NV1 .
Macke
5
@ Macke: Quadrático como em "equação quadrática", não quadrático como em "quadrilateral". Não usa quads, mas uma curva quadrática definida por 9 pontos. stason.org/TULARC/pc/3d-graphics-cards-faq/...
9
+1 na sua pergunta, mas um -1 grande para o seu professor. Isso é algo básico que ele deveria ter conhecido, além de conhecer as costas de sua própria mão, e um sinal de que está um pouco fora de contato com os desenvolvimentos nos últimos 15 anos.
Maximus Minimus
1
Bem, na minha defesa de professores, ele não está do lado do desenvolvedor de jogos, ele é mais um animador / modelador. Ele sabia que era convertido em tris, mas não sabia o motivo matemático do motivo da renderização. Mas sim, ele provavelmente deveria saber.
Grant

Respostas:

56

A linha inferior é a Rasterização de triângulo, que é como os computadores processam objetos na tela. Embora outros digam com mais frequência do que eu:

Todos os objetos 3D que vemos na tela do computador são realmente feitos de pequenos objetos geométricos, geralmente chamados de primitivos. Quadriláteros, triângulos, n-gons etc. são exemplos de primitivos. Vamos nos concentrar nos triângulos principalmente por uma razão principal: todo objeto pode ser dividido em triângulos, mas um triângulo não pode ser dividido em nada além de triângulos. Por isso, desenhar triângulos é muito mais simples que desenhar polígonos de ordem superior; menos coisas para lidar. É por isso que esses triângulos são tão comumente usados ​​em computação gráfica.

Ênfase minha. Fonte: http://www.devmaster.net/articles/software-rendering/part3.php

Nate
fonte
2
Impressionante! Isso faz muito sentido quando você pensa sobre isso. Obrigado pela resposta!
Grant
1
No OpenGL ES, como parte do esforço para simplificar a API, quads e polígonos nem são suportados. Portanto, um motivo prático para usar triângulos é porque você não tem outra escolha. Mas o motivo pelo qual uma API simplificada como o ES evita outros tipos primitivos se deve aos motivos descritos nesta e em outras respostas.
Suboptimus
5
+1 Porque é uma resposta que posso usar com segurança como referência quando alguém me perguntar a mesma coisa sobre meus favoritos. Só digo que sempre pensei que a razão pela qual os triângulos são a menor primitiva possível é porque, com a imprecisão da aritmética do ponto de flutuação, tris é o único polígono seguro que você pode garantir que seja plano em todos os casos, com quads você não pode garantir que eles serão. ser plano o tempo todo. O software de modelagem provavelmente mostra objetos como quads ou n-gons como conveniência para o modelador, mas aplica polígonos de transformação / renderização como dois ou mais triângulos.
Hatoru Hansou
56

Os triângulos têm muitas propriedades que os tornam mais fáceis e, portanto, mais rápidos, de desenhar.

Quatro pontos ou mais podem não estar no mesmo plano, mas três sempre estão (ignorando casos degenerados). Isso tem a propriedade interessante de que os valores escalares variam linearmente sobre a superfície do triângulo. Mesmo quando o triângulo é projetado na tela, os valores escalares ainda variam linearmente em relação a x '/ z e y' / z.

Isso, por sua vez, significa que quase todo o necessário para sombrear, mapear texturas e filtrar a profundidade de um triângulo pode ser calculado usando interpolação linear, que pode ser feita extremamente rápido em hardware especializado.

tl; dr: triângulos são os primitivos mais simples, portanto os algoritmos que lidam com triângulos podem ser fortemente otimizados.

ggambett
fonte
11
+1. Eu acho que o fato de um triângulo ser sempre plano é uma das principais razões. Polígonos não planares tornam as coisas muito mais complicadas.
bummzack
2
+1. Eu acho que triângulos sendo o único polígono que você pode garantir ser plano é a principal razão técnica para criar APIs e hardware que exijam triângulos. Provavelmente, o software de modelagem mostra malhas como quads como conveniência para o modelador.
Hatoru Hansou
1
Uma boa analogia não plana que eu uso ... Um banquinho de três pernas pode ficar no chão apenas de uma maneira, com os pés como os cantos de um triângulo. Mas um banquinho de quatro pernas pode ficar no chão de duas maneiras e oscila de uma posição para outra se uma perna for mais curta que as outras.
31413 ChrisC
Estou curioso; como é possível que um triângulo sempre aponte no mesmo plano? Como você realmente desenha uma esfera então? Pelo menos um dos pontos deve ser traduzido em um plano diferente, caso contrário, você obterá uma superfície plana.
Rataplan
@newbiez Três vértices sempre definem um único plano. Uma esfera é feita de triângulos diferentes; dois triângulos adjacentes que representam um pedaço da superfície da esfera compartilham dois vértices, mas não estão no mesmo plano. Esta imagem pode tornar as coisas mais claras: cse.csusb.edu/tongyu/courses/cs420/images/icos.jpg
ggambett
8

Três pontos (um triângulo) SEMPRE definem um plano. Em outras palavras, dados três pontos, você sempre pode criar um plano plano que possa atravessar todos os três pontos. No entanto, o mesmo nem sempre é verdade em quatro pontos. Você pode ter quatro pontos todos em um avião, mas também pode ter quatro pontos que não estão em um avião.

Tim Holt
fonte
2
De fato, é mais provável que 4 pontos aleatórios não estejam em um avião, então você terá que triangular de qualquer maneira.
9119 ChrisF
Isso só é verdade se os pontos não forem coincidentes.
notlesh
1
Mesmo que os pontos sejam coincidentes, eles são coplanares em um número infinito de planos.
3Dave
Ser coplanar "SEMPRE define um plano" .
Sam Hocevar
6

Não são os "mecanismos de jogo" que fazem isso - todo o software 3D que você usa faz isso. Simplesmente não fala sobre isso, e seu professor parece pouco qualificado se ele não souber disso. Eles existem na memória do computador, mesmo que o software os oculte de você. Todos os programas em 3D têm uma opção que tornará os triângulos visíveis. Eles também terão uma opção que os divide em bordas editáveis, para que você possa brincar com eles. Mas eles sempre estavam lá para começar e é ingênuo para seu professor ensinar esse assunto e ainda se perguntar "para que servem os triângulos".

Um triângulo é a única maneira de organizar verts e garantir uma superfície plana. Quando você tem um quadrilátero, pode organizar os verts de uma maneira que ele deve dobrar. Mas já é feito de triângulos e são esses triângulos que permitem a curva.

Domarius
fonte
3

Um triângulo é a primitiva mais simples que pode ser descrita isoladamente porque possui três pontos, menos do que os que não descrevem uma superfície em 3D.

Como um triângulo pode ser considerado isoladamente, é possível criar um pedaço de código ou silício que seja capaz de renderizar apenas um único triângulo, que através do poder da repetição pode renderizar qualquer superfície.

Portanto, o primeiro sistema de computador que conseguiu render "qualquer superfície" naturalmente o fez renderizando muitos triângulos de forma independente.

Se pensarmos em triângulos e quadríceps como "primitivos" (isto é, como pedaços de geometria completamente isolados sem contexto), o triângulo é o mais primitivo e, portanto, tenderá a "vencer".

No entanto, uma vez que os computadores com nível de entretenimento excederam um certo nível de sofisticação nos anos 80, a simplicidade de considerar "primitivos" isoladamente se tornou menos importante. Se os gráficos devem ser produzidos em massa, as economias de escala favorecem o processamento de grupos de vértices relacionados, da mesma forma que favorecem a montagem de cem carros quase idênticos ao mesmo tempo.

É por isso que, na década de 1980, os filmes adotaram o "quad", que é um nome impróprio porque se refere a uma grade 2D de vértices no espaço 3D, e não a um quadrilátero isolado.

A mesma mudança de triângulos para "quads" ainda não aconteceu no campo do entretenimento interativo, mas é provável que isso aconteça muito em breve e pelas mesmas razões que aconteceram no ramo de filmes.

bmcnett
fonte
2

Existe apenas uma maneira de triangular um triângulo vs. formas 'n - 2' para um polígono de n lados. Portanto, triângulos são a maneira menos ambígua de definir uma forma poliédrica. Além disso, como outros pôsteres indicaram, existem várias maneiras de acelerar a rasterização de triângulo (em vez de quadruplo ou superior) (a constante z é uma das minhas favoritas). Além disso, é mais fácil otimizar os testes de interseção de triângulo de raios do que nos testes de interseção de polígonos arbitrários de raios. De fato, muitas operações em polígonos de frente e verso se beneficiam de ter uma representação triangulada em mãos. Isso não quer dizer que as representações poligonais em frente e verso sejam 'ruins' - elas são muito úteis, mas, no final das contas, você desejará trabalhar com triângulos para muitas operações de malha.

Lutero
fonte
2

Desde que o triângulo seja definido por três vértices não colineares (leia-se: nenhum dos ângulos é exatamente Pi), os vértices definem um plano único.

Um quad é, é claro, definido por quatro vértices. É perfeitamente possível que esses vértices não sejam coplanares. Nesse caso, seu quad seria realmente dois triângulos divididos por uma diagonal no quad. São dois planos, dois conjuntos de normais de superfície, etc.

Todas as ferramentas de modelagem disponíveis, todos os algoritmos de texturização, iluminação etc. assumem que um modelo é feito de segmentos planos e todas as fórmulas que temos (produtos cruzados para cálculo normal é o primeiro que temos) usam o conjunto de dados de entrada mínimo absoluto - três os vértices definem um plano, e o plano é o que precisamos para fazer todas as coisas sofisticadas.

Você certamente poderia escrever um mecanismo para trabalhar com quads, mas se veria ignorando o quarto vértice em quase todos os casos, exceto quando você (freqüentemente) precisaria se certificar de que é coplanar com os outros três que definem o quad. E, a solução mais lógica para o caso em que não é coplanar seria dividir o quadrilátero em dois triângulos. Então, por que não fazer isso apenas para começar?

Qual seria o sentido de trabalhar com quadriciclos?

Se você quer um quadrilátero, coloque dois triângulos.

3Dave
fonte
2

Se assumirmos que obter 4 pontos como co-planares não é um problema (é, como os outros já apontaram, mas têm paciência comigo), então você descobrirá que renderizar um trapézio arbitrário (que é como geralmente é um quadrilátero) quando transformado em espaço na tela) não é particularmente diferente de renderizar um triângulo - na verdade, funciona da mesma maneira quando você executa um recorte, pois pode introduzir vértices extras. (Pelo menos em um modelo de software - o hardware pode muito bem ter uma maneira mais simples de fazer força de recorte.)

A questão restante, portanto, é de eficiência representacional. - você pode representar facilmente um quad com 2 triângulos e sem vértices extras se usar uma faixa de triângulo (3 verts para o 1º triângulo e, em seguida, uma vert adicional para o 2º triângulo). Por outro lado, se você tentar representar um triângulo com um quadrilátero, precisará usar 4 vértices e ter um degenerado que seja idêntico ao outro. Isso não é ideal em termos de eficiência.

Kylotan
fonte