Posts tagged: 3d

Octopus Team – desenvolvimento de jogos independentes

Você quer começar a trabalhar com desenvolvimento de games, mas em um mercado brasileiro em crescimento e com muita concorrência, você não consegue experiência nesta área. O que fazer então?

A melhor maneira de conseguir experiência em desenvolvimento de games e montar seu portfólio é fazer jogos, mas isso pode limitar uma pessoa sozinha, pois até mesmo o desenvolvimento de um jogo simples completo (menu, animações, som, efeitos, programação, game design, etc.) é um grande trabalho multidisciplinar, exigindo que você tenha que aprender coisas que não são o seu foco.

Octopus Team

Neste caso, o melhor é criar ou participar de um grupo de desenvolvimento de jogos independentes. Muitos grupos são formandos por estudantes e entusiastas, que querem apenas aprender mais coisas em um ambiente colaborativo e assim poder focar no desenvolvimento de suas habilidades, como programação ou modelagem por exemplo.

Um grupo de desenvolvimento de jogos independentes pode se tornar uma empresa após conseguir um bom entrosamento, conhecimento e experiência. Porém, inicialmente, ganhar dinheiro com jogos não deve ser a motivação de um grupo novo, você deve fazer jogos por que gosta.

Para poder aumentar meu portfólio e ganhar experiência como programador e game designer eu entrei para um grupo de desenvolvimento de jogos independentes, o Octopus Team, liderada pelo Márcio Vinícius Mello de Freitas. Eu encontrei este grupo no fórum da UniDev, entrei em contato com o Márcio, falei das minhas experiências e objetivos e fui aceito. É nos fóruns de desenvolvimento de games que estes grupos são formados e também procuram novos membros. Outro fórum muito bom é o PDJ.

Atualmente estamos trabalhando em um jogo de estratégia em 3D, utilizando o XNA para desenvolver. O projeto já estava iniciado quando entrei neste grupo, então muita coisa estava definida, mas mesmo assim tive liberdade para dar novas idéias. Quando o projeto estiver mais avançado falarei mais aqui sobre ele.

Aproveitando o post, a Octopus Team está procurando uma pessoa para modelar personagens do nosso jogo. Não precisa ter experiência, até por que o grupo serve para aprender, mas é necessário que saiba o básico de modelagem de personagens e animação. Interessados entrar em contato pelo e-mail contato@octopusteam.com.br .

Esboço do Cenário do Jogo

Esboço do Cenário do Jogo

animação 3D com softimage XSI

Eu pensava que animar um objeto 3D era tão complicado quando modelar, mas fiquei surpreso ao descobrir que o processo de animação no Softimage XSI é muito parecido com o do Adobe Flash. Embora sejam softwares diferentes, com finalidades distintas, a idéia básica de animar por Frames está presente em ambos.

Existem dois tipos de animações: para Jogos e para Filmes. Quanto mais interatividade houver com o usuário, a animação tenderá para o lado do jogo, caso contrário a animação será um Filme. A interatividade pode variar muito de intensidade, dando ao usuário controle total, parcial ou nenhum.

Este semestre tive a matéria de animação 3D, onde utilizei o XSI para aplicar as técnicas aprendidas. Embora tenham sido poucas aulas, aprendi várias técnicas e conceitos, que devem ser básicos, além de mudar minha visão de animação; agora sou mais critico.

Eu exportei todas as coisas toscas animações que fiz em vídeo, utilizando o Start Capture da câmera do view port 3D. As animações não estão perfeitas, algumas tentei melhorar mas acabei piorando, mas dá para ter uma noção das técnicas utilizadas em cada aula.

Aula 01: Cubo animado e com alteração da cor durante a animação.

Aula 01: Movimento de subir escada utilizando Pose to Pose, ou seja, cada movimento foi animado em um quadro. O “personagem” foi modelado com figuras geométricas.

Aula 02: Bola pingando utilizando Bouncing Balls. Existe uma tentativa de gravidade em cada pingo da bola.

Aula 03: Isto era para ser um sapo olhando uma mosca, utilizando Constraints para o caminho que a mosca deve percorrer e para que os olhos do “sapo” sigam a mosca.

Aula 04: O modelo do bipede foi fornecido pelo professor, apenas a animação foi feita. Este modelo possui Bones para animar cada parte e deixá-lo mais orgânico.

Aula 05: O modelo fo personagem foi fornecido pelo professor e também possui Bones para a animação. Utilizei a técnica de Walk Cycle para não precisar animar todos os quadros, apenas 3 foram animados, e o resto é repetição pelo número de frames desejado.

Aula 06: Utilizando a animação anterior, fiz alterações para fazer este personagem subir uma escada, bem parecido com a animação da primeira aula, porém está foi com um personagem com Bones e utilizando Walk Cycle para não fazer animação Pose to Pose.

Estas animações não ficaram perfeitas, e nem eram para ficar. Aprendi as técnicas mencionadas e alguns truques novos no XSI que eu não conhecia. Mesmo não sendo artista ou animador, sei que estas aulas vão ser muito úteis para programação 3D, como foi a aula de modelagem 3D. Todas estas técnicas estão no livro The Animator’s Survival Kit do Richard Williams, comentado por mim neste post.

Assim como modelagem 3D, a animação exige paciência e um pouco de perfeccionismo. Além de conhecer as técnicas e como aplicá-las nos softwares 3D, também é necessário ser observador para traduzir um movimento orgânico em digital. Como meu professor disse, vale até pedir para alguém ficar andando ou pulando para entender o movimento que o corpo faz e saber como reproduzi-lo em uma animação.

programação de jogos 3D

Programar um jogo 2D não é algo muito complexo, pois trabalhar com objetos em duas dimensões não exige muitos cálculos. Claro que existem exceções, mas, na maioria dos casos, a programação em um ambiente 2D é bem simples de fazer.

Programar um jogo 3D é um pouco mais complicado. Orientar um objeto em três dimensões não é simples de fazer, principalmente se for um objeto mais elaborado (diferente de um simples cubo, por exemplo). Este tipo de programação exige uma boa noção do que é trabalhar com três dimensões. É a mesma sensação que tive ao mexer pela primeira vez com um software de modelagem 3D; sua percepção tem que se adaptar ao ambiente 3D.

No semestre passado tive a matéria de programação 3D na pós-graduação. Por ter sido curta, não vi muitas coisas com a profundidade que gostaria, mas pelo menos a base eu tive. Nas aulas, utilizamos C++ com o Visual Studio 2005 e o DirectX SDK, que contém a biblioteca Direct3D para programação 3D.

Antes de começar a programar em 3D, é necessário entender como isto funciona. Todo o processo que gera um objeto em 3D na tela passa por uma Pipeline Gráfica no hardware. Cada estapa é responsável por uma propriedade que foi programada, como Iluminação, Textura, Projeção, Transformações, entre outros.

Pipiline Gráfica do DirectX

Pipiline Gráfica da Direct3D

Na primeira aula, fiz um programar para desenhar 3 vetores, um em cada eixo (x, y e z), utilizando um array de vetores e a função DrawPrimitiveUP() para desenhar na tela. Também desenhamos um grid e os eixos. Esta foi a parte simples de fazer; a parte mais complicada é configurar o programa para funcionar, é um pouco trabalhoso, mas depois que a base está criada, podemos utilizá-la em vários outros projetos praticamente sem alterações, como foi o caso dos demais exercícios.

Eixos desenhados utilizando DrawPrimitiveUP()

Eixos desenhados utilizando DrawPrimitiveUP()

Depois, brincamos um pouco com a Pipeline Gráfica desenhando figuras geométricas coloridas e realizado translações. É o mesmo processo utilizado para desenhar os vetores, além doD3DXMatrixTranslation() para as translações.

Figuras geométricas desenhadas e com translação

Figuras geométricas desenhadas e com translação

Utilizamos um modelo 3D de um golfinho, fornecido pelo professor, para aprender como exibir um modelo 3D simples na tela. O modelo foi exportando na extensão .X, que é do DirectX, e desenhando na dela utilizando a função D3DXLoadMeshFromX(). Além deste função, existe uma configuração de Material para que o objeto (Mesh) possa ser desenhado na tela com a função DrawSubset() do mesh.

Modelo 3D de golfinho e pirâmides de vetores desenhados na tela

Modelo 3D de golfinho e pirâmides de vetores desenhados na tela

Além de modelos 3D, também utilizamos arquivos externos para Shaders. São arquivos .FX que contém efeitos que são aplicados em um objeto. A vantagem de utilizar este arquivo é que a configuração fica separada do código, e pode ser editada em softwares de criação de efeitos. O arquivo é carregado utilizando a função D3DXCreateEffectFromFile() e o efeito desejado é aplicado com a função SetTechnique() de uma variável do tipo LPD3DXEFFECT. Nesta mesma variável, a textura é aplicada com a função SetTexture().

Modelo com Shaders e textura

Modelo com Shaders e textura

No final desta matéria, tivemos que apresentar um projeto com um objeto 3D animado e um controlado pelo teclado. Não era obrigatório utilizar o Direct3D com C++ para isto, então utilizei XNA 3.1. Fiz um cubo com textura de dado, onde sua rotação é controlada pelo teclado, e uma esféra com shaders que fica girando em torno do dado.

Dado com textura e esfera animada utilizando XNA

Dado com textura e esfera com shaders - animadas utilizando XNA

Eu tive muita dificuldade em capturar eventos do teclado utilizando o Direct3D com C++, por isso resolvi utilizar o XNA. Com XNA eu já tinha feito algumas brincadeiras, porém apenas com 2D. Este projeto foi uma oportunidade para começar a programar em ambiente 3D no XNA, utilizando modelos exportados pelo Softimage XSI em extensão .X e a textura em um arquivo .JPG.

Alias, o dado que utilizei é exatamente o mesmo que modelei e apliquei textura na aula de modelagem 3D que tive no início do curso. Esta foi a melhor parte deste projeto, pois consegui exportar um modelo 3D que tinha feito no XSI (com textura feita no Photoshop) e utilizá-lo no XNA sem muitos problemas. A imagem da esfera também foi modelada no XSI com efeitos de shader, e utilizada no XNA.

A maior dificuldade que tive foi exibir os dois modelos na tela no tamanho correto, pois cada um tinha um tamanho diferente e para corrigir isto alterei o zoom pela programação, além de fazer suas animações nos 3 eixos. Trabalhar com modelos 3D no XNA é muito fácil, pois ele tem um tipo de variável que é perfeita para isto, a Model. Para desenhar na tela, criamos um objeto ModelMesh e podemos aplicar efeitos de shader com BasicEffect no mesh.

Conhecendo a teoria, tendo uma noção de modelagem 3D e programação no XNA com C#, não é muito difícil de programar 3D, é necessário apenas muita paciência para deixar tudo certo. Ainda não fiz um jogo em 3D, apenas essas brincadeiras, mas pretendo logo criar algo bem simples para aprender mais sobre isso. A programação 3D é bem complexa, mas pelo menos no XNA isso fica mais simples. Acho que não tive uma boa experiência com Direct3D e C++, mas este é mais motivo para continuar aprendendo C++.

Para os iniciantes em programação 3D, como eu, recomendo aprender as técnicas e aplicá-las no XNA, que é mais simples, e depois partir para o C++. E, embora eu seja programador, as aulas de modelagem 3D ajudaram muito! Por isso é sempre bom ter uma noção, pelo menos básica, de tudo que envolve o desenvolvimento de um game.

Panorama theme by Themocracy