Divisão de terreno em quadtree - não entendi


12

A maioria dos papéis que li baseiam seu terreno de uma forma ou de outra em um quadtree. Veja isto na página 38 :

http://www.slideshare.net/repii/terrain-rendering-in-frostbite-using-procedural-shader-splatting-presentation?from=ss_embed

O primeiro ponto não contradiz os dois inferiores? Como você pode ter uma grade de vértices 33x33 fixa por folha e falar sobre divisão adaptativa em uma árvore quádrupla? A terminologia é confusa e eu gostaria de ter alguma clareza sobre isso!


Aqui estão minhas suposições:
Substituir os patches toda vez que as alterações na quadtree forem um sucesso, não é?

http://www.dukecg.net/QuadtreeTerrain.png

  1. Quadtree começando nos limites do terreno.
  2. Iterar para baixo para o local do observador.
  3. Versão restrita (diferença não superior a 1 nível entre vizinhos)
  4. Frustum abate.
  5. Coloque o terreno em cada folha resultante, onde a escala é diferente, mas a resolução é sempre 33x33.

Respostas:


7

Não, na verdade não. Se você estiver pensando em usar um quadtree para o nível de detalhe do terreno, todos os nós armazenados geralmente possuirão a mesma estrutura de dados.

No seu exemplo, essa estrutura é uma submesh 33 × 33 que os nós manterão. Dependendo do nível do nó, essa malha 33 × 33 se adaptará (adaptável) para cobrir uma área mais ampla. O nó maior preencherá um espaço maior, mas sua submesh ainda é uma correção de vértice 33 × 33.

Depois que a árvore é construída, você pode fazer sua seleção de frustum descendo pela árvore e descartando os nós que não se cruzam.

Um aspecto a ter em mente é que você provavelmente precisará solucionar as falhas que surgem quando um nó maior se aproxima de um nó menor. Uma maneira fácil é simplesmente ajustar (recolher) quaisquer vértices não compartilhados entre as malhas.

Quanto a outra pergunta sobre a substituição da árvore, sim. A menos que você queira entrar nos dados que gerenciam a árvore, sugiro criar uma pilha e liberá-la quando a exibição se mover o suficiente.


O problema com as costuras visíveis em ladrilhos de tamanhos diferentes é explicado nos slides 39 a 40 da apresentação. Aparentemente, eles removem as junções em T usando uma das 9 malhas possíveis nas junções (consulte o slide 40).
bummzack

IMPORTANTE: IDNRTFA ;-)
bitcruncher

3

A "unidade" do terreno são 33x33 blocos. Se você estiver perto, é isso que você verá. Se você estiver mais longe, esses blocos serão fundidos em blocos LOD inferiores.

A razão pela qual eles usam pedaços fixos no nível mais baixo (folha) é porque o hardware moderno é muito mais rápido com a geometria estática. Sistemas como o ROAM, onde muito trabalho é realizado para reduzir a contagem de polígonos, sofrem penalizações consideráveis ​​no desempenho.


Portanto, a folha final não é cada folha final possível (no menor tamanho de grade), é a folha final para essa iteração, com base na distância; portanto, algumas podem ter 16x16 e as distantes com 256x256 (ou o que for)? Isso não significa que toda vez que o quadtree muda, os patches precisam ser colocados e redimensionados novamente?
George R
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.