Como funciona o mosaico de hardware?

34

Eu gostaria que alguém explicasse de maneira relativamente clara como o mosaico de hardware funciona, considerando que é a nova palavra da moda no DX11.

Obrigado.

SD021
fonte

Respostas:

42

Darei a versão "simples" e deixarei que outra pessoa o informe sobre os detalhes, se você estiver interessado :).

Existem basicamente duas maneiras de modelar objetos 3D. O primeiro é o que você não vê muito nos jogos, e envolve o uso de curvas precisas e matematicamente definidas para definir a forma de um objeto. Usando esse método, o nível de detalhe é (praticamente falando) "infinito". Pegue um cilindro, por exemplo. Um cilindro pode ser definido em termos matemáticos muito simples: tudo o que você realmente precisa saber é o raio nas extremidades e o comprimento do cilindro. Em termos de geometria, essas informações são tudo o que precisamos para renderizar o cilindro em uma cena 3D. Além disso, podemos escalar facilmente o cilindro para torná-lo maior ou menor; tudo o que precisamos fazer é manter a relação entre o comprimento e o raio. Podemos usar as mesmas fórmulas para representar a geometria, mas com parâmetros diferentes. Nós podemos representar um toro ("rosquinha" facilmente): precisamos conhecer o raio interno e externo. A partir disso, podemos calcular o diâmetro (e, portanto, o raio) do corpo da rosquinha (o "bolo") subtraindo o raio interno do raio externo. O corpo circular envolve o arco definido pelo raio interno. Esse tipo de definição 3D é bom porque é relativamente simples (resultando em um arquivo de modelo pequeno) e não há limite significativo para o nível de detalhe. A desvantagem é que o hardware de vídeo atual não foi projetado para processar esses tipos de modelos com eficiência (se houver). O corpo circular envolve o arco definido pelo raio interno. Esse tipo de definição 3D é bom porque é relativamente simples (resultando em um arquivo de modelo pequeno) e não há limite significativo para o nível de detalhe. A desvantagem é que o hardware de vídeo atual não foi projetado para processar esses tipos de modelos com eficiência (se houver). O corpo circular envolve o arco definido pelo raio interno. Esse tipo de definição 3D é bom porque é relativamente simples (resultando em um arquivo de modelo pequeno) e não há limite significativo para o nível de detalhe. A desvantagem é que o hardware de vídeo atual não foi projetado para processar esses tipos de modelos com eficiência (se houver).

A outra maneira é combinar geometria simples para aproximar a forma que queremos representar. Fazemos isso com um processo chamado mosaico . Poderíamos colocar um cilindro em mosaico dividindo-o em formas mais primitivas: dois círculos e uma série de retângulos longos, que envolvem a borda externa. Os círculos podem ser divididos em muitos pequenos triângulos, assim como os retângulos ao longo da borda. O resultado final é um modelo composto apenas por triângulos:

Imagem do cilindro triangulado

Ou, para o toro:

Imagem do toro triangulado

A boa notícia é que o hardware de vídeo é otimizado para lidar com esse tipo de geometria. As GPUs de hoje não têm problemas em produzir toneladas e triângulos a cada segundo. No entanto, há um problema óbvio: estamos tentando representar superfícies curvas usando formas com bordas planas. Para que nosso cilindro pareça um cilindro (ao contrário de um cubo), queremos dividi-lo em muitosde pequenos triângulos. Bem, quantos queremos? Depende. Que tipo de hardware será usado para renderizar a cena? Um hardware mais rápido pode renderizar triângulos mais rapidamente que um hardware mais lento, produzindo taxas de quadros mais rápidas. Existem outros fatores a serem considerados, como quantos outros objetos estarão presentes na cena e quão complexos eles serão? Nos jogos, normalmente existem muitos objetos em uma determinada cena. Além disso, os objetos podem viajar por diferentes cenas, cada uma com diferentes níveis de complexidade visual. É difícil descobrir o nível de detalhe a ser usado quando modelamos nossos modelos.

Outro problema é o da complexidade geométrica: enquanto uma definição de cilindro baseada em curva é muito simples (raio e comprimento), uma definição em mosaico provavelmente combina centenas de triângulos, cada um dos quais precisa ser definido independentemente. Consequentemente, nosso arquivo de modelo em mosaico será muito, muito maior. Digamos que temos um modelo matematicamente definido de algo complexo, como uma pessoa. Nosso arquivo de modelo pode ter apenas 24kb de tamanho. Bem, uma vez que o modelo está em mosaico, o arquivo resultante pode ter 24 MB (24.000 KB). Isso é bastante diferente.

O mosaico de hardware aproveita os sombreadores de geometria para executar o mosaico assistido por hardware em tempo real (ou quase em tempo real). Essencialmente, ele fornece um mecanismo para pegar um modelo 3D matematicamente definido e transformá-lo em um formato em mosaico que a placa de vídeo pode renderizar com eficiência. Tradicionalmente, os desenvolvedores de jogos realizam mosaico no estúdio e entregam os modelos em mosaico com o jogo. O mosaico de hardware nos permite adiar esse processo até que o jogo seja executado no computador do jogador. Isso tem alguns benefícios sérios:

  1. O tamanho do conteúdo 3D do jogo diminui drasticamente (menos discos ou downloads menores e menos espaço em disco rígido).

  2. Podemos controlar o nível de detalhe em tempo real . Estamos rodando com uma fera de ponta de uma máquina de jogos? Nesse caso, podemos aplicar mosaicos usando um nível muito alto de detalhes. Estamos rodando em um laptop antigo com gráficos integrados? Sem problemas; podemos simplesmente reduzir o nível de detalhe para aumentar o desempenho.

Então essa é a essência disso. Provavelmente não é 100% preciso, pois eu não sou um programador 3D, mas isso deve lhe dar uma idéia melhor do que se trata :).

Cheers,
Mike

Mike Strobel
fonte
Uau ... brilhante! A 'visão geral' mais longa que eu já li: P
6
Há outra coisa que determina o nível de mosaico necessário - tamanho do objeto na tela. O mosaico de tempo de execução permite que você tenha o nível correto de detalhes em qualquer lugar, sem criar várias versões de cada objeto.
Adam
Isso é um pouco pesado da CPU?
jcora
@Bane, você quis dizer GPU intensivo? A CPU poderia se importar menos.
Nate Zaugg
0

Pena que não é assim que a maioria dos desenvolvedores está usando o mosaico agora ou no futuro próximo. Tudo o que eles usam no momento é deslocar principalmente superfícies planas de acordo com seu mapa de altura. Isso também resulta em boa aparência, mas ainda acho que é um uso inadequado de tecnologia muito mais capaz.

zemit
fonte
As ferramentas e os pipelines de produção precisam ser repensados ​​e reconstruídos (como tenho certeza de que você sabe melhor do que a maioria, @SamHocevar, portanto esse comentário não é direcionado a você), e o novo hardware precisa proliferar para uma porcentagem significativa.
Rob Craig
@RobCraig Note que eu apenas corrigi a ortografia nesse comentário; Eu não sou o autor original.
Sam Hocevar
@ SamHocevar Sim, eu pensei - obrigado por esclarecer, no entanto!
Rob Craig