Por que as coordenadas homogêneas são usadas em computação gráfica?

Respostas:

12

Eles simplificam e unificam a matemática usada nos gráficos:

  • Eles permitem representar traduções com matrizes.

  • Eles permitem que você represente a divisão por profundidade nas projeções em perspectiva.

O primeiro está relacionado à geometria afim. O segundo está relacionado à geometria projetiva.

lhf
fonte
Que tipo de exemplos você está procurando? Matrizes de tradução e qualquer coisa relacionada a projeções em perspectiva deve ser fácil de procurar?
Bart Bart
@ Bart, analogia necessária.
2
Sinto muito @anonymous, mas isso realmente não me diz nada. Você precisará usar mais palavras para explicar exatamente o que está procurando.
Bart Bart
Eu acho que essa resposta não é muito votada porque é muito técnica para nós, novatos. Talvez um exemplo simples com palavras simples ilustrasse melhor os princípios
214
5

Está no nome: coordenadas homogêneas são bem ... homogêneas. Ser homogêneo significa uma representação uniforme de rotação, translação, escala e outras transformações.

Uma representação uniforme permite otimizações. O hardware gráfico 3D pode ser especializado para realizar multiplicações de matrizes em matrizes 4x4. Pode até ser especializado para reconhecer e salvar em multiplicações por 0 ou 1, porque essas são frequentemente usadas.

Não usar coordenadas homogêneas pode dificultar o uso de hardware altamente otimizado ao máximo. Qualquer que seja o programa que reconheça que instruções otimizadas do hardware podem ser usadas (normalmente um compilador, mas às vezes as coisas são mais complicadas) para coordenadas homogêneas, será difícil otimizar para outras representações. Ele escolherá instruções menos otimizadas e, portanto, não usará o potencial do hardware.

Como havia pedidos de exemplos: o PS4 da Sony pode realizar multiplicações matriciais massivas. É tão bom nisso que ficou esgotado por algum tempo, porque grupos deles foram usados ​​em vez de supercomputadores mais caros. A Sony exigiu posteriormente que seu hardware não pudesse ser usado para fins militares. Sim, supercomputadores são equipamentos militares.

Tornou-se bastante comum os pesquisadores usarem placas gráficas para calcular suas multiplicações matriciais, mesmo que não haja gráficos envolvidos. Simplesmente porque são magnitudes melhores do que as CPUs de uso geral. Para comparação, as CPUs modernas de vários núcleos têm da ordem de 16 pipelines (x0,5 ou x2 não importa muito), enquanto as GPUs têm da ordem de 1024 pipelines.

Não são apenas os núcleos que os pipelines que permitem o processamento paralelo real. Os núcleos funcionam em threads. Threads devem ser programados explicitamente. Os oleodutos funcionam no nível da instrução. O chip pode paralelizar instruções mais ou menos por conta própria.

NoAnswer
fonte
"O PS4 da Sony pode executar multiplicações matriciais massivas". Você quer dizer o processador Cell do PS3, certo? O PS4 possui um processador x86 bastante comum.
Wumpf 28/09/2015
Embora essa seja uma boa resposta, não acho que ela responda à pergunta dos OPs e sugere que sejam usadas cordas homogêneas porque o hardware é otimizado para isso, cordas homogêneas são mais úteis e, eventualmente, o hardware foi desenvolvido em torno disso. Outro argumento para vec4s é que eles são 128 bits alinhados que o torna mais eficiente para ler no ônibus de memória de largura (GPUs)
PaulHK
4

complemento:

coordenadas homogêneas também permitem representar o infinito: em 3D, ou seja, o ponto no infinito na direçãox,y,z(x,y,z,0)=x,y,z0x,y,z . Normalmente, fontes de luz em posição finita ou infinita podem ser representadas da mesma maneira.

Sobre a transformação de perspectiva, ele ainda permite interpolar corretamente, sem distorção de perspectiva (ao contrário do hardware gráfico inicial no PC).

Fabrice NEYRET
fonte
2

Como gosto pessoal, sempre me abstive (quando possível) de usar coordenadas homogêneas e preferi a formulação cartesiana simples.

O principal motivo é o fato de que coordenadas homogêneas usam 4 entradas triviais nas matrizes de transformação (0, 0, 0, 1), envolvendo armazenamento e computação inúteis (também a sobrecarga das rotinas de computação de matriz de uso geral que são "por padrão" usadas em este caso).

A desvantagem é que você precisa de mais cuidado ao escrever as equações e perde o apoio da teoria das matrizes, mas até agora eu sobrevivi.

Yves Daoust
fonte
1
Em princípio, podem ser implementados tipos de dados que, na verdade, não armazenam essas entradas, mesmo que eles ajam como eles.
1
@Hurkyl Obviamente. Isso raramente é feito, pois há caixas de ferramentas de matriz de uso geral.
Yves Daoust
@YvesDaoust Você poderia fornecer um exemplo plain Cartesian formulationou link para um recurso que descreve seu uso em gráficos 3D?
27417 Dan
@ Dan: use y = Ax + b onde A é uma matriz 3x3 e um vetor ba 3x1, em vez de y '= Ax' onde y ', x' são vetores aumentados e A uma matriz 4x4.
Yves Daoust
@YvesDaoust Então você está passando uma matriz 3x3 e um vetor 3x1 para seus shaders em vez de uma matriz 4x4? Onde você calcula e armazena w?
28417 Dan
2

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]

Seja R e S matrizes de rotação e escala e T seja um vetor de conversão. Na computação gráfica, você pode precisar fazer uma série de traduções até certo ponto. Você pode imaginar como isso pode ser complicado.

p=SR(Sp+T)+T
Não é tão ruim, mas imagine que você fez esse cálculo em um milhão de pontos. O que gostaríamos é representar rotação, escala e tradução, tudo como multiplicações de matrizes. Em seguida, essas matrizes podem ser pré-multiplicadas juntas para uma única matriz de transformação com a qual é fácil fazer cálculos.

M=TSRTS
p=Mp

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]
Você deve elaborar alguns exemplos para se convencer de que eles realmente oferecem a transformação desejada e que você pode compor uma série de transformações multiplicando várias matrizes.

p=[xyw]
Q=[1000010000100010]
Mandril
fonte
1

Os cálculos nas coordenadas afins geralmente exigem divisões, que são caras em comparação com adições ou multiplicações. Geralmente, não é necessário dividir ao usar coordenadas projetivas.

O uso de coordenadas projetivas (e mais geralmente, a geometria projetiva) também tende a eliminar casos especiais, tornando tudo mais simples e uniforme.


fonte
"Cálculos em coordenadas afins geralmente exigem divisões": não vejo o porquê. De fato, você calcula exatamente as mesmas expressões.
Yves Daoust
@ Yves: estou respondendo ao tópico mais geral "uso em computação gráfica", não à pergunta específica sobre "transformações da matriz de computação".
@Hurkyl: eu também. Ao renderizar uma cena, você calcula exatamente as mesmas expressões, com a mesma quantidade de divisões (a diferença está em termos fictícios com um fator 0).
Yves Daoust 25/15
@ Yves: Hrm. Estou acostumado a fazer cálculos em que a conversão de volta para affine pode ser adiada até certo ponto; Vou ceder à sua experiência se você disser que isso não ocorre com frequência.
-1
  • fórmulas mais simples
  • Menos casos especiais
  • Unificação e
  • Dualidade
Shamsul Huda
fonte
2
A resposta é muito clara. Você deve elaborar sobre cada ponto.
Rotem