deV( )id Games | because we're tired of no return;

Archive for September 2010

Pré-leitura pra quem não sabe o que são normal maps e como eles são usados em jogos: http://en.wikipedia.org/wiki/Normal_mapping

Resumo pra quem tem preguiça de ler: é uma técnica onde se tenta aplicar iluminação em um objeto de poucos polígonos como se ele fosse mais detalhado do que realmente é. Na prática, isso significa que tudo fica mais bonito 😀

Pois bem. Sempre quisemos colocar isso em ação nos nossos Sumokas, mas sempre havia coisas mais importantes a se fazer (tipo menus e condições de vitória, essas coisas inúteis). Porém, com a recente (res)subimissão do jogo ao SBGames, chegamos a uma situação um pouco mais folgada que nos dá liberdade de trabalhar um pouco no que der vontade 🙂

Então, ontem à noite me deu vontade de colocar essa joça de normal mapping pra funcionar. Na verdade o material artístico necessário (a textura com o normal map do modelo baseado numa versão hi-poly) já existia e havia sido testado fora do jogo, então era “só” questão de ajeitar materiais e shaders para utilizar isso. O que, como sempre, não se mostrou uma tarefa muito trivial. Segue abaixo a sequência de resultados conseguidos até a meia-noite:

Primeira tentativa. Deu tudo errado, e entrou o material padrão.

Agora o material entra! Mas o shader tá errado, e fica tudo preto.

OK, estamos chegando a algum lugar! Mas seria bom que todos os membros funcionassem...

E este seria um ótimo resultado, se a idéia fosse uma luta entre bonecos de borracha.

Finalmente, o shader funcionou e os Sumokas parecem pessoas normais o/

O maior problema, na verdade, foi que pra começar, foi difícil achar um shader que fizesse o que a gente queria. Ou tinha coisa demais (e ia afetar a performance desnecessariamente) ou tinha de menos. Bom, como eu sou cabeça-dura, peguei um que tinha coisa de menos e fui adicionando funcionalidade aos poucos, enquanto aprendia a usar shaders com OGRE. O último screenshot mostra como a coisa estava até ontem.

O trabalho de hoje consistiu em adicionar ao shader um detalhe que havia sido esquecido: levar em consideração a cor definida pro objeto no material (por isso os Sumokas parecem mais claros do que deveriam). Mas, ainda assim, havia problemas: o shader só funcionava com Direct3D e 16 bits 😛

Era isso que acontecia se você tentasse rodar com OpenGL.

Enfim resolvi tomar vergonha na cara, usei um shader prontinho pra OGRE (que o Yanko havia achado) e agora tá tudo funcionando muito bem 🙂 Segue o resultado final (observação: as sombras projetadas foram desligadas para evidenciar as diferenças no material):

Vermelhos com normal mapping, azuis sem.

Observe em especial a diferença nos ombros, e nas gorduras localizadas nas costas 😀

E assim termina mais uma odisséia deV( )id e mais um detalhe incrementando o SumoCheckers. Pode parecer que a diferença foi pequena, mas são estes detalhes que fazem o jogo se tornar cada vez melhor 🙂

· · · ·

Theme Design by devolux.nh2.me