Terrenos com mapa de altura, Voxel, polígono (geometria)


15

Em relação aos terrenos Heightmap, Voxel e Polygon (geometry):

  1. Quais são as principais diferenças entre todos esses três?
  2. Você pode formar um terreno "liso" com Voxels, quero dizer, você pode, por exemplo, obter uma montanha lisa com Voxels, ou Voxels são limitados a cubos?
  3. Em termos de desempenho, em unidades mundiais de 2000 x 2000, o que seria mais rápido em terrenos com mapa de altura, terreno com Voxel ou terreno com geometria baseado em polígono? (Supondo que haja ganhos / otimização de desempenho "razoáveis" feitos para renderização para todas as possibilidades)
  4. Existem mais técnicas usadas para a criação de terrenos?
  5. Algum bom título representando cada um dos tipos?

O terreno com base no polígono PS deve ser totalmente traingulado, sem material quadrado.

Respostas:


30

Mapas de altura

Com um mapa de altura, você armazena apenas o componente de altura para cada vértice (geralmente como textura 2D) e fornece posição e resolução apenas uma vez para todo o quadrilátero. A geometria da paisagem é gerada em cada quadro usando o shader de geometria ou mosaico de hardware. Os mapas de altura são a maneira mais rápida de armazenar dados de paisagem para detecção de colisão.

Prós:

  • Uso de memória relativamente baixo : você só precisa armazenar um valor por vértice e nenhum índice. É possível melhorar ainda mais isso usando mapas de detalhes ou um filtro de ruído para aumentar os detalhes percebidos.

  • Relativamente rápido : o sombreador de geometria para mapas de altura é pequeno e corre rápido. Porém, não é tão rápido quanto o terreno da geometria.
    Em sistemas sem aceleração 3D baseada em triângulo, os mapas de altura da marcha com raios são a maneira mais rápida de renderizar o terreno. Isso foi chamado de gráficos voxel em jogos mais antigos.

  • LOD dinâmico / terreno : é possível alterar a resolução da malha gerada com base na distância da câmera. Isso causará a alteração da geometria se a resolução cair muito (cerca de 0:40), mas pode ser usada para efeitos interessantes.

  • Fácil geração / criação de terrenos : os mapas de altura podem ser facilmente criados através da combinação de funções de ruído, como os editores fractal Perlin Noise e heightmap, são rápidos e fáceis de usar. Ambas as abordagens podem ser combinadas. Eles também são fáceis de trabalhar em um editor.

  • Física eficiente : uma posição horizontal é mapeada diretamente para (geralmente) uma a quatro posições na memória, portanto, as pesquisas de geometria na física são muito rápidas.

Contras:

  • Exatamente uma altura por coordenada x / y : geralmente não pode haver buracos no chão ou falésias pendentes.

  • Menos controle : você só pode controlar a altura precisa de cada ponto se o tamanho da grade corresponder às coordenadas da textura.

  • Artefatos : se os quatro vértices que definem um sub-quadrante não estiverem no mesmo plano, a divisão entre os dois vértices se tornará visível. Isso geralmente acontece em penhascos íngremes com arestas que não seguem uma direção cardinal.

Os mapas de altura são a maneira mais eficiente de renderizar terreno de longe e são usados ​​em muitos jogos mais recentes que não contam com recursos avançados de terreno e têm grandes áreas externas. A Wikipedia tem uma lista de programas que usam mapas de altura , mas não tenho certeza se isso significa que eles apenas os usam como recursos ou também para renderização, então aqui estão alguns jogos que provavelmente os usarão:

  • Just Cause 2: As regiões são carregadas em setores quadrados e não há buracos no terreno. Na demonstração, há um buraco profundo com triângulos esticados ao longo das bordas, onde normalmente haveria um edifício. (A área é normalmente inacessível, mas existem mods para remover algumas das limitações da demonstração ...)

  • Sims 2 ( talvez ): o terreno da vizinhança é carregado como mapa de altura, mas existem buracos nos locais onde os lotes (locais de construção) são colocados. No entanto, existem artefatos típicos se você criar muitas falésias, e é muito entediante adicionar uma adega a uma casa (e esconder a falésia sob uma varanda).

  • Jogos de mecanismo de origem da válvula: escovas retangulares (geometria de nível estático) podem ter terrenos mapeados em altura em suas faces. Nestes jogos, as peculiaridades habituais costumam ser escondidas com outros pincéis ou acessórios.

É impossível ter certeza sem olhar para os shaders, porque todo terreno do mapa de altura pode ser renderizado como malha.

Voxels

O terreno da Voxel armazena dados do terreno para cada ponto em uma grade 3D. Esse método sempre usa o máximo de armazenamento por detalhes significativos da superfície, mesmo se você usar métodos de compactação, como esparsas octrees.

(O termo "mecanismo voxel" costumava ser usado para descrever um método de mapas de altura de terreno marchar com raios comuns em jogos 3D mais antigos. Esta seção se aplica apenas ao terreno armazenado como dados voxel.)

Prós:

  • Dados 3D contínuos : os voxels são praticamente a única maneira eficiente de armazenar dados contínuos sobre recursos de terrenos ocultos, como veios de minério.

  • Fácil de modificar : dados voxel não compactados podem ser alterados facilmente.

  • Recursos avançados do terreno : é possível criar saliências. Túneis são sem costura.

  • Geração de terreno interessante : o Minecraft faz isso sobrepondo funções e gradientes de ruído com recursos de terreno predefinidos (árvores, masmorras). (Leia Geração de terrenos, Parte 1 no blog do Notch para obter mais informações. Não há parte 2 a partir de 05.8.2011.)

Contras:

  • Lento : para renderizar dados de voxel, é necessário usar um traçador de raios ou computar uma malha, por exemplo, com cubos de marchas (haverá artefatos). O voxel vizinho não é independente para a geração de malha e os shaders são mais complicados e geralmente produzem geometria mais complexa. A renderização de dados voxel com alto LOD pode ser muito lenta.

  • Grandes requisitos de armazenamento : o armazenamento de dados voxel usa muita memória . Muitas vezes, não é possível carregar os dados do voxel na VRAM por esse motivo, pois você precisará usar texturas menores para compensar isso, mesmo em hardware moderno.

Não é prático usar voxels para jogos que não dependem dos recursos do voxel, como terrenos deformáveis, mas, em alguns casos, pode permitir mecânica de jogo interessante. Os mecanismos Voxel são mais comuns em jogos mais antigos , mas também existem exemplos mais recentes:

  • Motor Atomontage : renderização Voxel.

  • Worms 4: usa "poxels". Segundo a Wikipedia, é uma mistura de voxels e polígonos.

  • Minecraft: usa voxel para representar o terreno na RAM, os gráficos são gráficos poligonais. É principalmente software calculado embora.

  • Terraria: um exemplo para voxels 2D. Não sei como se processa.

  • Voxels combinados com a física : não é um jogo. mas mostra bem o potencial de destruição.

  • Voxatron : Um jogo usando voxels para quase todos os gráficos, incluindo menus e HUD.

Malhas

As malhas poligonais são a maneira mais flexível e precisa de armazenar e renderizar terrenos. Eles são frequentemente usados ​​em jogos onde são necessários recursos precisos de controle ou terreno avançados.

Prós:

  • Muito rápido : você só precisa fazer o cálculo de projeção usual no sombreador de vértices. Um shader de geometria não é necessário.

  • Muito preciso : todas as coordenadas são armazenadas individualmente para cada vértice, portanto, é possível movê-las horizontalmente e aumentar a densidade da malha em locais com detalhes mais refinados.

  • Baixo impacto na memória : isso também significa que a malha geralmente precisará de menos memória que um mapa alto, porque os vértices podem ser mais esparsos em áreas com menos recursos.
    (Veja Rede irregular triangulada na Wikipedia).

  • Sem artefatos : a malha é renderizada como está, para que não haja falhas ou bordas de aparência estranha.

  • Recursos avançados do terreno : é possível deixar buracos e criar saliências. Túneis são sem costura.

Contras:

  • LOD dinâmico ruim : só é possível com malhas pré-computadas. Isso causará "saltos" ao alternar sem dados adicionais para mapear antigos para novos vértices.

  • Não é fácil de modificar : a localização dos vértices que correspondem a uma área que deve ser modificada é lenta.

  • Não é muito eficiente para a detecção de colisões : diferentemente dos mapas de altura e dados voxel, o endereço de memória para um determinado local geralmente não pode ser calculado diretamente. Isso significa que a física e a lógica do jogo que dependem da geometria exata da superfície provavelmente serão mais lentas do que nos outros formatos de armazenamento.

O terreno poligonal é frequentemente usado em jogos que não têm grandes áreas abertas ou não podem usar terrenos com mapas de altura devido à sua falta de precisão e saliências. Não tenho uma lista, mas tenho certeza de que

  • todo Zelda 3D e

  • todo jogo Mario 3D

usa isto.

Outros métodos

É possível criar um terreno inteiramente no pipeline do shader. Se o algoritmo for executado apenas no sombreador de fragmento / pixel, os detalhes poderão ser virtualmente ilimitados enquanto o impacto na memória é quase zero. As desvantagens óbvias quase não têm controle sobre a forma e os problemas quando a câmera cruza a superfície de renderização original. Ainda é útil em jogos espaciais, onde os jogadores não interagem com a superfície de um planeta. As animações de parâmetros funcionam melhor com esse tipo de terreno.

Deve ser possível fazer o download da geometria do terreno gerada da placa de vídeo para usá-la no restante do mecanismo de jogo, mas não sei como é o desempenho disso ou se isso foi feito até agora.

Conclusão

Não existe um método que funcione bem para todos os cenários, mas é bastante fácil escolher um para uma determinada tarefa:

  • Os mapas de altura são a melhor solução se você não precisar de saliências ou furos na superfície do terreno e usar física ou terreno dinâmico. Eles são escaláveis ​​e funcionam bem para a maioria dos jogos.

  • As malhas têm a mais alta precisão e podem descrever saliências, furos e túneis. Use-os se você tiver terreno complexo que não mude com frequência.

  • Os voxels são bons para descrever terrenos muito dinâmicos com muitos recursos complexos. Evite renderizá-los diretamente, pois eles precisam de grandes quantidades de memória e processamento.

  • Outros métodos podem ser melhores do que os acima mencionados, se você não precisar interagir com o terreno ou precisar de gráficos muito detalhados. Eles geralmente funcionam apenas para cenários muito específicos.

É possível combinar métodos diferentes para obter recursos de mais de um, por exemplo, pavimentando terrenos de malha com um mapa de altura para aumentar a estrutura de detalhes de um penhasco.

A geração dinâmica de terrenos é muito usada na simulação de procedimentos de espaço e algumas se tornaram realmente avançadas nos últimos anos . Os fóruns desses projetos devem ter alguns recursos sobre o tema.


3
O mecanismo de origem não usa mapas de altura para seu terreno. Eles usam quads chamados "Deslocamentos" Tesselated developer.valvesoftware.com/wiki/Displacement
Tétrada

11
Essa é uma resposta agradável, daria um +3 a essa, se fosse possível. Obrigado pela informação detalhada, muito apreciada.
precisa saber é o seguinte

@Tetrad As resoluções disponíveis para deslocamentos são potências de dois (uma restrição comum para buffers de textura), a única coordenada salva por vértice é a altura e os mapas de altura do terreno são renderizados como quads em mosaico. O wiki também diz que o custo de renderização dos deslocamentos é menor do que o da geometria regular. Eu acho que é justo supor que eles são a mesma coisa com nomes diferentes.
Tamschi

11
@NickWiggill O significado de "voxel" parece ter mudado bastante nos últimos 10 anos. Vou com a definição atual da Wikipedia de voxels como valores em uma grade 3D regular . A entrada em Outcast menciona a diferença de significado. Eu adicionei a minha resposta para esclarecer isso.
Tamschi 6/11/11

2
Nota lateral: O "terreno poligonal" também é chamado de " Rede Irregular Triangular " ("TIN" abreviado)) em GIS; e geralmente consome menos memória do que mapas de altura da mesma resolução efetiva, pois não se preocupa em registrar dados não essenciais ou em locais onde não há dados. O primeiro jogo gótico o usou (não tenho certeza dos outros).
Martin Sojka

8

Gostaria de salientar que nenhum dos termos que você mencionou é mutuamente exclusivo - você pode até ter um jogo baseado em voxel que usa mapas de altura e é processado usando polígonos.

  1. Mapas de altura são representações bidimensionais da altura do solo em cada ponto específico. Eles geralmente são armazenados como imagens em escala de cinza, onde o brilho representa a altura desse ponto. Os voxels são basicamente um bitmap 3D. Há uma variedade de técnicas usadas para renderizar um espaço voxel.

  2. Você pode criar um terreno suave com voxels, e eles não se limitam a cubos. Uma dessas maneiras é usar um algoritmo como cubos de marchas , que pode converter uma representação de voxel em uma lista de polígonos.

  3. Aquele com menos triângulos seria o mais rápido: 3

  4. Algoritmos de fractal, como o ruído Perlin, podem ser usados ​​para criar paisagens com muitos
    detalhes. Superfícies paramétricas como nurbs podem ser usadas para criar terrenos suaves com poucos requisitos de armazenamento permanente.

  5. Delta Force é um jogo antigo que usa voxels. O Minecraft pode usar o armazenamento voxel para representar a paisagem (não tem certeza). Sacrifice by Shiny é um jogo que usa mapas de altura com bons resultados. A maioria dos jogos com paisagens usa terrenos geométricos.


11
Uma observação, no ponto 3, enquanto a GPU se importa apenas com a contagem de polígonos, ainda há o lado da geração de geometria. Gerar geometria para um campo de voxel geralmente é um processo mais lento (blocos / cubos de marchas são processos mais complexos) do que o terreno do mapa de altura (que é um processo simples) ou baseado em polígonos (que obviamente já são dados de geometria). Editar: isso também depende se você pretende que o terreno seja deformável.
Michael

Para o terceiro ponto ... Bem, o mapa de altura ainda precisa ser processado e só então ele se transforma em uma geometria, certo? Tendo isso em mente, uma malha poligonal seria um pouco mais rápida? Você poderia apontar algumas das técnicas usadas para renderizar voxels?
precisa saber é o seguinte

2
Você pode usar um sombreador de geometria para gerar a malha a partir de um mapa de altura. Dessa forma, você armazena apenas o mapa de altura e parâmetros como posição e resolução enquanto a geometria é gerada em cada quadro no pipeline do shader. É mais rápido que marchar em cubos e mais lento que uma malha poligonal. A vantagem dos mapas altos é o baixo consumo de memória: apenas um pouco mais de 1/3 do que uma malha precisaria. A desvantagem é que não é tão flexível (sem pequenos detalhes, sem saliências). Você pode ajustar dinamicamente os detalhes da malha gerada, mas isso causa alterações na geometria.
Tamschi 5/08/11

@ Tamschi, se você desse uma resposta, exatamente o que eu estava procurando. :)
joltmode

@ Tom, vou ver se consigo formatá-lo e encontrar mais alguns exemplos.
Tamschi
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.