Qual é o estado da arte no LOD geométrico nos jogos?

15

Como os jogos modernos fazem o nível de detalhe da geometria para malhas de objetos, como personagens, terreno e folhagem? Existem duas partes na minha pergunta:

  1. Como é o pipeline de ativos? Os artistas criam um modelo de alto poli que é dizimado mais tarde? Em caso afirmativo, quais algoritmos de dizimação são mais populares? Às vezes, as malhas LOD são feitas à mão?
  2. Como os mecanismos fazem a transição entre diferentes LODs de objetos em tempo de execução? Existem transições suaves ou progressivas?

A resposta pode ser "estúdios diferentes usam técnicas diferentes". Nesse caso, identifique algumas das práticas mais comuns. Também seria ótimo se você pudesse me indicar documentos / slides que cobrem exemplos específicos.

ap_
fonte
1
Os avanços do SIGGRAPH 2014 na renderização em tempo real têm uma palestra realmente interessante sobre as superfícies de subdivisão do call of duty. Você deveria dar uma olhada. Em vez de ter uma alta poli malha que poli inferior é feito, que definida analiticamente formas e adicionado mais triângulos como necessário
Alan Wolfe
Podemos falar sobre o estado da arte nos algoritmos LOD e nas estruturas de dados aqui, mas se a pergunta for sobre como os jogos modernos o fazem especificamente, você poderá ter mais sorte perguntando em gamedev.se: gamedev.stackexchange.com
Pseudônimo
3
Eu duvido disso. Game dev é muito leve e gráficos. É principalmente unidade e java perguntas com alguns encontrar caminho e questões de taxa de quadro fixo jogados em: p
Alan Wolfe
1
@ Alan, a Activision usou muito algoritmo de última geração para criar um jogo estratégico 3D real, não um sn isométrico Sprite base que eu estou bem com isso, mas eles fizeram um ótimo trabalho em COD, no entanto, ainda é um pouco lento e preguiçoso mesmo nos primeiros níveis com um pequeno número de ativos (estou falando do jogo para celular em um Iphone 5s). Eu acho que você precisa aprender os recursos especializados do OpenGLES e as camadas subjacentes para conseguir escrever esse jogo.
Iman
Estou falando da versão do console do call of duty, caso isso seja esclarecido.
Alan Wolfe

Respostas:

22

Para a geometria LOD, a maioria dos jogos simplesmente alterna entre várias malhas predefinidas de LOD. Por exemplo, "Infamous: Second Son" usa 3 malhas LOD ( Adrian Bentley - "inFAMOUS: Second Son engine postmortem", GDC 2014 ) e "Killzone: Shadow Fall" usa 7 malhas LOD por personagem ( Michal Valient - "Killzone: Shadow fall demo postmortem ", Devstation2013 ). A maioria deles é gerada, mas os mais importantes (como personagem principal) podem ser feitos à mão. As malhas são frequentemente geradas usando um popular middleware Simplygon, mas às vezes são simplesmente geradas por artistas gráficos em seu pacote 3D favorito.

Os jogos com uma grande distância de extração também usam impostores para folhagem, árvores e edifícios altos ( Adrian Bentley - "inFAMOUS: Second Son engine post-mortem", GDC 2014 ). Eles também empregam LODs hierárquicos, que substituem um conjunto de objetos por um. Por exemplo, em "Just Cause 2", as árvores são renderizadas individualmente como malhas normais de LOD, depois individualmente como impostores e, finalmente, como uma única malha de floresta mesclada ( Emil Persson, Joel de Vahl - "Populating a Massive Game World", Siggraph2013 ) e em Partes distantes do mundo "Sunset Overdrive" são substituídas por uma única malha gerada automaticamente offline ( Elan Ruskin - "Mundo Aberto de Streaming Sunset Overdrive", GDC2015 ).

Outro componente de um sistema LOD é a simplificação de materiais e shaders. Por exemplo, "Killzone: Shadow Fall" desativa o espaço tangente e o mapeamento normal para os LODs distantes ( Michal Valient - "Killzone: Shadow Fall demo post-mortem", Devstation2013 ). Isso geralmente é implementado desativando globalmente um conjunto de recursos de sombreador por LOD, mas para mecanismos com gráficos de sombreador, onde os artistas podem criar sombreadores personalizados, isso precisa ser feito manualmente.

Para as transições de LOD, alguns jogos simplesmente trocam malhas e outros usam o pontilhamento para transições suaves de LOD - no comutador LOD, duas malhas são renderizadas: a primeira desaparece gradualmente e a segunda desaparece ( Simon schreibt Blog - "Assassins Creed 3 - LoD Blending" ). Técnicas clássicas de malha progressiva da CPU não são usadas, pois exigem uma atualização e um upload de malha dispendiosos na GPU. O mosaico de hardware é usado em alguns títulos, mas apenas para o refinamento de um LOD mais detalhado, pois é lento e, em geral, não pode substituir os LODs de geometria predefinidos.

Os LODs de terreno são tratados separadamente, a fim de explorar suas propriedades específicas. Geometria do terreno O LOD geralmente é implementado usando clipmaps ( Marcin Gollent - "Criação e renderização de paisagens no REDengine 3" ). Os LODs de material de terreno são tratados de maneira semelhante aos LODs de malha ou usando algum tipo de textura virtual Ka Chen - "Renderização virtual adaptativa de textura no Far Cry 4 .

Finalmente, se você estiver interessado em ver os pipelines LOD de jogos reais, basta navegar na documentação de qualquer um dos mecanismos de jogos modernos: Unreal Engine 4 - "Criando e usando LODs" , CryEgnine - LOD estático e Unity - LOD .

Krzysztof Narkowicz
fonte
1
os mecanismos de jogo geralmente têm um conjunto de métodos predefinidos e você não pode entrar no núcleo para realmente alterar o algoritmo LOD. Estou certo? Eu estava falando sobre o caso de você estar escrevendo um jogo com o framework OpenGL ou SpriteKit, não sei se é possível personalizar o algoritmo do LOD no Unity ou no Unreal, é possível?
Iman
3

LOD (nível de detalhe) significa gerenciar objetos em diferentes escalas de exibição, que podem ser divididas em duas partes. No entanto, você pode usar um deles e isso seria suficiente para a maioria dos casos.

  1. Mostrar / ocultar camadas (grupo de objetos do mesmo tipo), dependendo da magnitude (escala de exibição).

  2. Método baseado em Geomeria Algébrica, chamado Generalização (que é um algoritmo para simplificar polígonos). veja a figura a seguir

    generalização

O método mais famoso e eficiente para generalizar (simplificar) uma malha poligonal é conhecido como teorema do poliedro de Descartes-Euler (Equação 4.5, desculpe se estou me referindo a um livro, foi o melhor que posso fazer) e é usado pela maioria dos bancos de dados espaciais por exemplo, módulos PostGIS no PostgreSQL. Ele simplesmente remove os lados menores de um polígono e o torna muito arredondado. (Foto acima)

Para implementar o LOD em um jogo, você precisa salvar e gerenciar a escala do seu mapa (cena) durante as operações de zoom in / out. A escala muda de zero para o infinito e você deve dividir isso em um número específico de intervalos, por exemplo, algo como isto:

  1. 1 / zero = infinito para 1/50
  2. 1/50 a 1/100
  3. 1/100 a 1/1000
  4. 1/1000 a 1 / infinito = 0

Então você precisa definir quais tipos de seus objetos (camadas) devem estar visíveis ou invisíveis em cada um dos intervalos acima. Por exemplo, um tipo pequeno de objeto, como uma válvula de hidrante, não deve ser visível quando o usuário estiver na quarta faixa, porque será muito pequeno nessa escala e não poderá ser discriminado, portanto, não importa se você pular desenhá-la no tela.

Portanto, quando um usuário usa mais e menos zoom para alterar a ampliação, ele se move pelos limites acima de um para o outro, e seu jogo usa essas escalas de exibição para gerenciar o nível de detalhes, mostrando ou ocultando objetos na cena. Isso cria uma solução discreta que os objetos desaparecem repentinamente durante a operação de redução de zoom, porém, com as escalas de exibição e as ampliações definidas cuidadosamente, o usuário não sentirá nada.

O grupo acima de 4 faixas é apenas um exemplo e você precisa encontrar o melhor para o seu caso por tentativa e erro. Não há regra para isso.

Às vezes, os jogos usam seus próprios métodos LOD, o Subway Surfer por instante, mostra um pequeno retângulo sem textura para mostrar um edifício ao longe e, ao aproximar-se de repente, fica com textura, o jogador sente. Você não falou sobre o seu sistema de projeção, o que é muito importante, também não falou sobre o tipo de jogo que você está criando.

No entanto, suponha que você esteja implementando um jogo 3D completo com o openGl e deseje filtrar algumas malhas antes de transferi-las para o hardware gráfico. Tenho certeza de que isso ajudará a reduzir as operações de encadernação / desatamento com objetos de buffer e arrays de vértices (VBO, VAO) enquanto lidando com o OpenGl.

Usando apenas um gerenciamento de camada ou apenas implementando a Generalização de Euler

Na maioria dos casos, não é necessário implementar um algoritmo de generalização, e a filtragem de objetos simplesmente funciona e leva você à eficiência (taxa de atualização) necessária, no entanto, depende totalmente, caso a caso. Embora seja um algoritmo fácil que apenas remova os lados pequenos de um polígono, você precisa definir um limite que é o produto da magnitude e um número constante, para que os lados maiores sejam filtrados em um ponto de vista muito mais distante.

Esquecer o gerenciamento da camada e implementar apenas o algoritmo de generalização de Eulers, fornece um método muito elegante e contínuo, no qual você apenas verifica cada lado e linha em um limite predefinido e mostra-os apenas no caso de serem grandes o suficiente para serem discriminados na tela.

PS: ampliação é um número flutuante> 0 que é igual a 1 / escala e a escala geralmente é <1, pois uma escala 1: 1 significa que você tem comprimentos do mundo real em seu jogo.

Iman
fonte
Abaixo o eleitor, considere que você vota novamente, se ainda for -1, considere deixar um comentário para mim.Obrigado
Iman
Eu não votei mal, mas parte de mim se pergunta qual é o estado da arte aqui? Então eu também não posso votar.
Joojaa 6/09/2015
1
Eu diminuí a votação porque era difícil de ler e IMHO não é relevante para os LODs nos jogos. Após reconsiderar, decidi cancelar meu donwvote com upwoting e simplesmente adicionar minha própria resposta.
Krzysztof Narkowicz 6/09/15
O estado da arte supõe significar um trabalho muito destacado, mas métodos diferentes resultam diferentemente em vários casos, por exemplo, o Call of duty possui gerenciamento de camadas e mipmaping, no entanto, Dear haunting (DH 2014) usa fundo com paralaxe e um mipmaping que foi generalizado texturas. O surfista de metrô é uma história completamente diferente, e digo o estado da arte para todos eles, embora o surfista de metrô discretamente desenhe prédios e outros objetos urbanos ou o Call of duty seja um pouco lento ao aplicar zoom ou panorâmica. Eu acho que eles são todos melhores no seu caso.
Iman
3

Iman já preparou uma resposta completa, mas gostaria de acrescentar algo a ela

LOD pode ser feito de duas maneiras diferentes

  1. Contínuo que é chamado CLOD e é uma otimização de malha de polígono
  2. Discreta, que quase todos os outros algoritmos, exceto a otimização de malha de polígonos, é considerada neste grupo.

Por exemplo, o mipmaping é bom, rápido, mas pesado, que pertence a um grupo próximo no

aqui você pode encontrar uma boa explicação para mipmaping e código de implementação com o OpenGl.

Imzich
fonte