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?
graphics-programming
Conceder
fonte
fonte
Respostas:
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:
Ênfase minha. Fonte: http://www.devmaster.net/articles/software-rendering/part3.php
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte
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.
fonte