Construção de cenário com objetos modulares

Este tipo de criação de modelos pode ajudar e muito no desenvolvimento do cenário.

PHP Moderno: Criando uma aplicação com área administrativa

Não é de hoje que nós desenvolvedores de games ficamos espantado quando estamos jogando videogame e nos deparamos com enormes construções, cenários gigantescos, entre outros elementos gráficos. Não há muito segredo para conseguir esse resultado, basicamente durante o desenvolvimento as empresas cuidam de vários aspectos, veja alguns abaixo.

-  Otimização de texturas;

- Objetos 3D modulares;

- Aplicação correta da iluminação (qual a melhor iluminação para aquela parte);

- Desativar objetos que não são visíveis (Occlusion Culling);

- Aplicar LOD (Level of Detail) em seus modelos;

- Outros.

Pois bem, notamos que existe muitas coisas que podemos trabalhar para ter ganho em desempenho e conseguir utilizar completamente os nossos modelos 3D. Dentre os tópicos destacados, neste artigo vou falar apenas sobre Objetos 3D modulares.

Você pode ver na imagem abaixo o jogo Assassin's Creed, desenvolvido pela Ubisoft, nesse cenário conseguimos ver vários modelos 3D idênticos, como: casas, muros, árvores, e outros objetos. Quando utilizamos o mesmo modelo em nosso jogo, temos ganho de desempenho, pois o objeto já vai estar na memória e consequentemente apenas duplicados, também vamos ter menos matérias com as texturas e outros aspectos, pois quanto menos material sendo utilizado, mais rápido será o cálculo dos objetos e iluminação.

Figura 1:  Assassin's Creed - Imagem Google.

Quando utilizamos recursos como LOD e desativar objetos que não estão sendo visíveis, temos ganho em desempenho pelo simples motivo de que a nossa placa gráfica não vai renderizar algumas partes. Na imagem abaixo você pode ver uma ponte, que foi modelada para ser utilizada de forma modular, ou seja, podemos criar a nossa ponte do tamanho que necessitarmos, pois basta ir encaixando as partes. Veja também que a ponte possui diversos objetos, e eles estão todo separados, o que facilitaria bastante o recurso de Occlusion Culling, no Unity 3D, por exemplo.

Figura 2: Ponte 3D - Imagem SatellaSoft

Você pode ver na imagem a seguir a aplicação na prática do Occlusion Culling no Unity 3D, veja que na janela de cima é notório as partes ocultas e na janela debaixo apenas o que a câmera (jogador) está vendo. Quando temos objetos modulares, apenas as partes não visíveis é desativado, se tivéssemos utilizando um modelo grande e único, ele possivelmente não seria desativado, pois o player está vendo uma de suas partes, logo não há como desativa-lo.

 

Figura 3: Ponte 3D com Occlusion Culling no Unity 5 - Imagem SatellaSoft

Para quem jogou Far Cry 3, possivelmente deve ter notado que as árvores distantes ficam chapadas, enquanto as próximas do player ficam normais. Se você fez um voo de Asa-delta deve ter notado que as arvores além de ficarem chapadas, elas acompanham o player, o que é bem estranho e foge do realismo. Acontece que as árvores possuem LOD e um recurso de LookAt (olhar para o player). Seria impossível que Far Cry 3 tivesse um bom desempenho se não fossem aplicadas boas técnicas de Level Design, como o LOD das árvores, gramas, água e modelos 3D.

 

Figura 4: Paisagem do Far Cry 3 - Imagem SatellaSoft

Vimos até aqui muitas coisas legais sobre o uso do LOD com objetos modulares, mas como eles podem ser criados para se ajustar adequadamente? Veja na imagem abaixo que a ponte possui três partes, e elas possuem a mesma textura, pois dessa forma o encaixe é perfeito, o que não é visível durante o jogo.

Figura 5: Ponte 3D Blender - Imagem SatellaSoft

No Unity 3D temos um recurso chamado de Snapping (tecla V no Windows), que podemos utilizar para posicionar a vértice de um modelo junto com a vértice de outro modelo, desta forma conseguimos uma união de ambas as partes, pois ficar posicionando de forma manual daria muito trabalho e pode ocorrer de uma face sobrepor a outra e então um bug de render deve ocorrer durante o jogo.

Na imagem abaixo podemos ver a nossa ponte cobrindo todo um lago, lembre-se que ela foi projetada em três partes e agora podemos utilizar em dezenas de partes.

 

Figura 6: Ponte 3D no Unity 5 - Imagem SatellaSoft

Este tipo de modelagem em pedaços ou em módulos é bastante eficiente em paredes, muros ou em objetos não orgânicos. Vale lembrar também que nem sempre vamos conseguir criar nossos modelos de forma modular, como uma janela por exemplo, mas nada impede que possamos utiliza-lo em diferentes locais, pois quanto mais cópia de um objeto, mais ganhamos em processamento, afinal, ele está utilizando a mesma textura e material que os demais.

Para a construção deste tipo de objetos, devemos tomar vários cuidados, para que ao invés de termos ganho termos perda. Estes objetos como serão duplicados pelo cenário, deve possuir a menor quantidade de vértices possível sem desfigurar o modelo, é claro. Devemos tomar cuidado com o tamanho das texturas a serem utilizadas, pois dependendo da textura, vai exigir mais da placa gráfica, mas se você realmente precisar de uma textura em alta resolução, tente compensar diminuindo em modelos não relevantes para o jogo.

Devemos criar nossos modelos de forma que ele vire um quebra cabeça, onde durante a nossas necessidades vamos montando e ajustando as peças. Na imagem a seguir você pode notar a utilização de vários modelos idênticos, porém após a texturização e exportação, ele foi exportando contendo apenas uma unidade de cada parte e dentro da game Engine ele foi montando.

 

Figura 7: Projeto da ponte 3D - Imagem SatellaSoft

Conseguimos ver na imagem abaixo uma perfeita utilização de objetos modulares, note que as portas possuem a mesma mesh, mudando apenas a textura. Note também que as paredes possuem algumas divisórias, onde possivelmente é a parte de encaixe.

Uma dica valiosa, quando você for criar algum objeto e durante o encaixe ficar muito perceptível que é uma emenda, você pode colocar algum objeto por cima ou tentar esconder, você pode colocar divisórias de madeira ou pilares.

 

Figura 8: Resident Evil Revelations 2, Prision: Imagem Gameinformer

Mas não é apenas em jogos 3D que podemos utilizar este tipo de desenvolvimento, na game engine RPG Maker, todo o game é montando utilizando os Tilesets, que são imagens/sprites que são encaixados. Na imagem a seguir, podemos ver o cenário do jogo To The Moon, criado completamente em módulos, pois a engine só tem o trabalho de carregar um objeto e na sequencia ela só precisa fazer os cálculos em outras posições, é claro que internamente ela possui um mapa de onde cada objeto está.

 

Figura 9: Jogo To The Moon - Imagem SatellaSoft

Você deve estar se perguntando, “onde eu devo utilizar este tipo de desenvolvimento”, a resposta é simples, quando você precisa criar um modelo grande para compor o cenário ou não quer exportar grandes texturas.