Mapa de altura vs modelo 3D Mesh

8

Atualmente, estou trabalhando em um jogo de PC 3D (escrito em C ++ e DirectX 9.0) e estou tentando encontrar a melhor maneira de armazenar dados de nível na memória.

A ação do jogo acontece embaixo da terra, então sempre há um teto acima do jogador. O chão é bastante acidentado e existem coisas como estalagmites presentes o tempo todo. Os níveis são pequenos e geralmente parecem corredores. Aqui estão as opções que eu consegui encontrar até agora:

Dois mapas de altura armazenados no disco rígido como um bitmap ou um arquivo binário / de texto. Um mapa de altura para o teto (em cima) e outro para o chão.

OU

Uma única malha 3D em algum formato de modelo 3D (por exemplo, .fbx, .x, .obj, o que for).

Como devo abordar o armazenamento de dados em nível? Qual seria a minha melhor opção, em termos de desempenho? Também estou tendo problemas quando se trata de texturizar um nível carregado através de um mapa de altura; o uso de um modelo 3D facilita a texturização.

Obrigado!


fonte

Respostas:

4

Em termos de desempenho, ambas as opções devem ser equivalentes, pois tudo será convertido em um modelo mais cedo ou mais tarde.

Mapas de altura:
+ Fácil de armazenar e editar
+ Fácil de calcular coordenadas de textura, se não forem pré-calculadas. - Texturização ruim em
superfícies íngremes. -
Necessita de modelos complementares para obter mais detalhes
.

Modelos:
+ Mais controle sobre o deslocamento horizontal
+ Possibilidade de sobreposição de terreno
+ Controle máximo sobre texturas - A
colisão é um pouco mais complicada -
Pode usar um pouco mais de memória no disco

Na minha experiência, é melhor usar um mapa de altura um tanto plano para o terreno base e os modelos de uso para coisas como estalagmites, e você pode até usar modelos repetidos para esses objetos (para economizar memória).

Obviamente, você pode usar um campo vetorial, mas esse é basicamente um modelo com texturas mais fáceis.

Maçãs
fonte
1

Pode ajudar se você nos disser qual é o gênero do jogo, o que a câmera vê, etc. Suponho que você esteja falando de um FPS, mas não tenho certeza.

De qualquer forma, aqui está um link para uma conversa sobre o terreno em Halo Wars que achei interessante e que pode lhe dar ideias: http://www.gdcvault.com/play/1277/HALO-WARS-The-Terrain-of . Ele lida com alguns dos problemas e possíveis soluções que você mencionou.

malho
fonte
0

Você não precisa necessariamente escolher um sobre o outro, ambos podem ser eficazes e não há motivo para não combinar os dois.

Se você usa mapas de altura, eu pessoalmente escolheria um formato de bitmap. O Directx deve poder fazer todo o carregamento de bitmap para você e transformá-lo em um recurso que você pode usar. Se você usar um arquivo de texto sem formatação, precisará analisá-lo. É claro que isso oferece mais liberdade na interpretação do arquivo e pode ser um bom ponto de partida para facilitar a experimentação.

Uma coisa a considerar, porém, é que um mapa de altura deixará você com uma resolução fixa; portanto, os estalagmites mencionados podem ser difíceis de representar bem, a menos que você aumente a densidade de pixels de todo o mapa.

Geralmente, eu diria que um mapa de altura é um meio eficaz para armazenar seu terreno, mas adicionar detalhes como estalagmites seria muito mais flexível com os modelos.


fonte