DESENVOLVIMENTO DE UM JOGO 3D - jersonseling
Transcrição
DESENVOLVIMENTO DE UM JOGO 3D - jersonseling
UNIVERSIDADE DA REGIÃO DA CAMPANHA CENTRO DE CIÊNCIAS DA ECONOMIA E INFORMÁTICA CURSO DE INFORMÁTICA DESENVOLVIMENTO DE UM JOGO 3D JERSON DOS SANTOS SELING Bagé - RS 2009 JERSON DOS SANTOS SELING DESENVOLVIMENTO DE UM JOGO 3D Monografia apresentada ao Centro de Ciências da Economia e Informática, da Universidade da Região da Campanha (URCAMP, RS), como requisito parcial para obtenção do título de Bacharel em Informática. Orientador: Abner Guedes Bagé - RS 2009 JERSON DOS SANTOS SELING DESENVOLVIMENTO DE UM JOGO 3D TCC: Trabalho de Conclusão de Curso Data da Defesa: 16/12/2009 Resultado final: 10 BANCA EXAMINADORA _____________________ _____________________ _____________________ Profº Carlos Pereira Profº Cristiano Cachapuz Profº Márcio Spenst Bagé - RS 2009 Dedico este trabalho a minha mãe, meu pai e a Deus, sem os quais eu não teria as oportunidades de chegar aqui. RESUMO Este trabalho monográfico busca abordar o processo de desenvolvimento de um jogo 3D utilizando o engine gráfico OGRE. Além disso, procura mostrar as várias etapas do desenvolvimento de uma maneira formal e que ainda assim seja possível de o jogo ser desenvolvido por um único desenvolvedor. Os aspectos mais importantes desse tipo de aplicação são tratados neste trabalho, como a criação de personagens em um programa de modelagem 3D, criação de texturas em um programa de criação de imagens, criação de cenários em programas específicos para isso e por último a codificação utilizando como linguagem o C++. Um pequeno jogo (de tiro em terceira pessoa) foi desenvolvido junto a este trabalho e possui os elementos principais que caracterizam um jogo 3D, como cenário, manipulação de personagens, inimigos utilizadores de uma forma de inteligência artificial e um conjunto de regras que definem o objetivo do jogo e a maneira de jogá-lo. Palavras-chave: jogos 3D, programação gráfica, engines, desenvolvimento formal. ABSTRACT This monograph tries to approach the development process of a 3D game using the OGRE graphic engine. In addition, we seek to demonstrate the various development stages in a formal way and yet turn possible for the game to be developed by a single developer. The most important aspects of this application type are discussed in this work, like the creation of characters in a 3D modeling program, textures creation in an image creation program, scenario creation within specific programs to it, and finally the encoding using as data processing language the C++. A little game (a shooting type on a third person) was developed together with this work and it presents the main elements that characterize a 3D-game, to wit, scenario, character manipulation, enemies using some way of artificial intelligence, and a set of rules that define the game goal and how to play it. Keywords: 3D games, graphics programming, engines, formal development. LISTA DE FIGURAS Figura 1: Higinbotham e o osciloscópio que rodava Tennis for Two......................... 18 Figura 2: Space War! ........................................................................................................ 18 Figura 3: Pong .................................................................................................................... 19 Figura 4: Pitfall ................................................................................................................... 19 Figura 5: Elite ..................................................................................................................... 20 Figura 6: Battlezone .......................................................................................................... 20 Figura 7: Crysis .................................................................................................................. 21 Figura 8: Elementos do projeto do jogo ......................................................................... 26 Figura 9: Storyboards do jogo Portal Runner................................................................ 27 Figura 10: Partes integrantes de um jogo...................................................................... 32 Figura 11: Exemplo de modelo para jogo ...................................................................... 33 Figura 12: Textura e modelo texturizado ....................................................................... 33 Figura 13: Casos de uso do jogo Pac-Man ................................................................... 34 Figura 14: Modelo sem textura (1), modelo com textura (2)....................................... 35 Figura 15: Coordenadas UV em uma superfície 3D .................................................... 36 Figura 16: Texture Map e Light Map............................................................................... 37 Figura 17: Um Cube Map ................................................................................................. 38 Figura 18: Representação de um grafo de cena simples ........................................... 39 Figura 19: Personagem com juntas ................................................................................ 40 Figura 20: Animação de Malha ........................................................................................ 40 Figura 21: Personagem com esqueleto ......................................................................... 41 Figura 22: Biped ................................................................................................................. 41 Figura 23: Tipos de luzes ................................................................................................. 42 Figura 24: Luzes e sombras no engine OGRE ............................................................. 43 Figura 25: Implementação de neblina no engine GLScene........................................ 43 Figura 26: Um Sky Dome ................................................................................................. 44 8 Figura 27: Sky box ............................................................................................................. 44 Figura 28: Heightfield ........................................................................................................ 44 Figura 29: Billboards cobrindo um teapot ...................................................................... 45 Figura 30: Modelo 3D e seu bounding volume cúbico................................................. 46 Figura 31: 3DS Max 8.0 com plugin oFusion instalado ............................................... 48 Figura 32: Adobe Photoshop CS2 .................................................................................. 49 Figura 33: Área de download de animações do site eMotek ...................................... 49 Figura 34: Terragen ........................................................................................................... 49 Figura 35: Funcionamento do engine OGRE ................................................................ 50 Figura 36: Instanciamento da classe da aplicação e sua execução ......................... 51 Figura 37: Ambiente de desenvolvimento ..................................................................... 51 Figura 38: Câmera em terceira pessoa .......................................................................... 52 Figura 39: Interpolação linear .......................................................................................... 52 Figura 40: Projéteis sendo disparados ........................................................................... 53 Figura 41: Explosão de um inimigo................................................................................. 53 Figura 42: Storyboard do jogo Aquarius ........................................................................ 59 Figura 43: Haytron ............................................................................................................. 60 Figura 44: Aquarius ........................................................................................................... 60 Figura 45: Mevelly ............................................................................................................. 60 LISTA DE ABREVIATURAS 2D 2 Dimensions 3D 3 Dimensions 3DS 3D Studio API Application Programming Interface ASAP As Soon As Possible BBC British Broadcasting Corporation BLP Blizzard Picture BMP Windows Bitmap BSP Binary Space Partition CD Compact Disk DDS Direct Draw Surface DOS Disk Operational System DVD Digital Video Disk ESRB Entertaining Software Rating Board EUA Estados Unidos da América FPS Frames per Second FPS First Person Shooter GPU Graphics Processing Unit IDE Integrated Development Environment JPEG Joint Photography Experts Group LAN Local Area Network LOD Level of Detail MD2 Model Quake 2 MFC Microsoft Foundation Classes MIT Massachusetts Institute of Technology MMORPG Massive Multiplayer On-Line Roling Player Game OBJ Wavefront Object File ODE Open Dynamic Engine OGRE Object Oriented Graphics Rendering Engine OIS Open Input System OpenGL Open Graphics Library PC Personal Computer PNG Portable Network Graphics PSP PlayStation Portable PWC Price Waterhouse Coopers QA Quality Assurance RPG Roling Player Game RTS Real Time Strategy SDK System Development Kit STL Standard Template Library TGA Truevision Targa TV TeleVision UI User Interface UML Unified Modelling Language XNA XNA's Not Acronymed SUMÁRIO 1 INTRODUÇÃO ...................................................................................................... 12 2 PROBLEMA DE PESQUISA ................................................................................ 14 3 OBJETIVOS E JUSTIFICATIVA........................................................................... 15 3.1 OBJETIVOS ..................................................................................................... 15 3.1.1 Objetivo Geral ........................................................................................... 15 3.1.2 Objetivos Específicos ............................................................................... 15 3.2 JUSTIFICATIVA ............................................................................................... 15 4 PROCEDIMENTOS METODOLÓGICOS ............................................................. 16 5 REVISÃO BIBLIOGRÁFICA................................................................................. 17 5.1 HISTÓRIA DOS JOGOS .................................................................................. 17 5.2 GÊNEROS DE JOGOS ..................................................................................... 21 5.3 TIPOS DE MÍDIAS DOS JOGOS ...................................................................... 23 5.4 O PROCESSO DE DESENVOLVIMENTO........................................................ 24 5.4.1 Projeto........................................................................................................ 26 5.4.2 A equipe de produção .............................................................................. 27 5.4.3 O Desenvolvimento................................................................................... 33 5.4.4 Mapeamento de Texturas ......................................................................... 35 5.4.5 Tópicos Importantes de um Engine Gráfico ........................................... 38 6 CRIAÇÃO DO JOGO AQUARIUS ........................................................................ 47 6.1 6.2 6.3 6.4 6.5 O IDE DE PROGRAMAÇÃO ............................................................................ 48 FERRAMENTAS PARA CRIAÇÃO DE CONTEÚDO ...................................... 48 O PROJETO ..................................................................................................... 50 A PROGRAMAÇÃO ......................................................................................... 50 DIFICULDADES ENCONTRADAS .................................................................. 54 7 CONSIDERAÇÕES FINAIS .................................................................................. 55 8 BIBLIOGRAFIA .................................................................................................... 56 9 ANEXO: PROJETO DO JOGO AQUARIUS ........................................................ 58 9.1 9.2 9.3 9.4 9.5 DESCRIÇÃO DO SISTEMA ............................................................................. 58 ROTEIRO DO JOGO ........................................................................................ 58 STORYBOARD ................................................................................................ 59 ESQUEMA DOS PERSONAGENS .................................................................. 60 DIAGRAMAS UML ........................................................................................... 61 1 INTRODUÇÃO Este trabalho trata sobre o desenvolvimento de um jogo 3D, mostrando um método de desenvolvimento e algumas das ferramentas mais utilizadas para isso. Os jogos 3D são uma tecnologia crescente e em progresso constante, movimentando dezenas de bilhões de dólares no mercado internacional anualmente segundo a PWC (SOFTEX, 2005). O Brasil ainda engatinha nesse segmento com apenas algumas microempresas criadas por empresários jovens com alta qualificação técnica. Segundo pesquisa da Softex feita em 2003, o faturamento total relacionado ao desenvolvimento de jogos no Brasil foi de R$ 2,39 milhões, com uma média de R$ 341 mil por empresa, já em 2004 o faturamento total saltou para R$ 4,2 milhões. Na outra ponta dessa evolução tecnológica estão os desenvolvedores casuais, que programam sem nenhuma intenção comercial. Estes freqüentam ou mantêm sites renomados no Brasil como o GameDev (www.gamedev.com.br) e o UniDev (www.unidev.com.br). Tais sites possuem fóruns bem movimentados e atualizados diariamente, onde seus usuários discutem, tiram dúvidas e aprendem. Este trabalho busca demonstrar como os jogos 3D são desenvolvidos em linhas gerais, pois cada jogo, dependendo da plataforma em que rodará e o gênero ao qual pertence, pode possuir algumas etapas a menos, extras ou alternativas no desenvolvimento. Para o desenvolvimento serão utilizadas ferramentas freewares, sharewares, livres para uso não-comercial ou versões trial de softwares proprietários, demonstrando a possibilidade de se desenvolver um jogo como um passatempo sem ter gastos excessivos na compra de ferramentas. 13 Serão cobertas as etapas essenciais para o desenvolvimento de um jogo 3D e ao final estarão em anexo artigos que esclarecem tópicos relacionadas ao tema, além de documentações do jogo desenvolvido. O assunto tratado neste trabalho são os jogos eletrônicos, ou pela definição de Bethke (2003), softwares interativos para entretenimento. Por isso de agora em diante a referência a termos como “jogos eletrônicos”, “jogos digitais” ou simplesmente “jogos” significará que são softwares interativos para entretenimento e não qualquer outra forma de jogo que não essa. Este trabalho foi estruturado em quatro grandes divisões. a) A primeira divisão trata sobre as questões introdutórias do trabalho, como este capítulo, os problemas de pesquisa os objetivos gerais e específicos, a justificativa que levou o autor a escolher o tema e os procedimentos metodológicos usados para se desenvolver o trabalho; b) A segunda divisão trata da revisão bibliográfica. Ela é uma pesquisa que mostra o estado da técnica tratado pelo trabalho; c) A terceira divisão trata do desenvolvimento do jogo em si. Desde as etapas mais iniciais como o projeto, até as mais avançadas como questões relacionadas a programação do jogo; d) A quarta divisão é um anexo. Ele é a documentação do jogo desenvolvido junto a este trabalho monográfico. 2 PROBLEMA DE PESQUISA Os métodos formais de desenvolvimento de jogos ainda permanecem restritos a grandes companhias, desenvolvedores casuais, geralmente, não seguem essas definições e acabam não desenvolvimento de jogos, conseguindo finalizar frustrando-se e seus desestimulando projetos os de futuros desenvolvedores a começar a desenvolver jogos 3D. Este trabalho visa demonstrar sucintamente, esses métodos formais para que o processo de desenvolvimento se torne uma técnica automatizada e repetível, que possa ser utilizada por um único desenvolvedor ou uma pequena equipe. Outro problema comum aos desenvolvedores casuais é que raramente as fontes de conhecimento ensinam como se criar um jogo completo. Em geral, elas apenas ensinam como usar uma determinada técnica, ferramenta ou funcionalidade que pode ser útil em um jogo, mas não ensinam como usar em conjunto essas várias ferramentas e funcionalidades para criar um jogo inteiro. Com isso os desenvolvedores começam a improvisar maneiras de se interligar essas técnicas, fazendo muitas vezes o que é chamado por alguns autores de “reinventar a roda”. Logo fica a questão: Como um desenvolvedor ou uma pequena equipe pode desenvolver um jogo 3D de maneira bem planejada, utilizando as várias tecnologias disponíveis e gratuitas existentes? 3 3.1 OBJETIVOS E JUSTIFICATIVA OBJETIVOS 3.1.1 Objetivo Geral Desenvolver um jogo 3D utilizando um engine gráfico baseado em C++. 3.1.2 Objetivos Específicos a) Avaliar os engines disponíveis; b) Definir o engine a ser utilizado com base na relação custo/benefício entre esforço para desenvolver e a qualidade do resultado obtido; c) Estudar a metodologia de desenvolvimento do engine escolhido; d) Desenvolver o projeto do jogo; e) Programar e testar o funcionamento do jogo. 3.2 JUSTIFICATIVA A maioria dos usuários de jogos, provavelmente, já pensou pelo menos uma única vez em como os jogos são criados. Em como o processo de desenvolvimento pode ser divertido e gratificante. Porém são raros os que satisfazem essa curiosidade descobrindo como é este processo, isso por não haver uma literatura que esclareça de forma completa e simples o processo. Este trabalho tem por um de seus objetivos ser este tipo de literatura, explicando de forma simples as etapas e processos necessários para se desenvolver um jogo 3D. 4 PROCEDIMENTOS METODOLÓGICOS Nesta seção, apresenta-se a metodologia que foi adotada no presente trabalho, bem como as principais etapas que envolvem o método e os procedimentos a serem utilizados: a) Avaliar os engines 3D disponíveis com base em suas capacidades, disponibilidade (open-source, freeware, shareware) e requisitos para se desenvolver um jogo 3D; b) Definir o engine a ser utilizado com base na relação custo/benefício entre esforço para desenvolver e a qualidade do resultado obtido; c) Estudar a metodologia de desenvolvimento do engine escolhido, instalando e configurando a IDE de desenvolvimento (engine e compilador); d) Desenvolver o projeto do jogo, definindo o tema do jogo, formalizar o roteiro, criar os storyboards e definir o projeto a partir dos diagramas de UML; e) Desenvolver o conteúdo com o software de modelagem 3D para a criação dos modelos 3D com base nos storyboards e então programar o jogo. Com este pronto, parte-se para a fase de testes. 5 REVISÃO BIBLIOGRÁFICA Os jogos no sentido geral da palavra são formas de entretenimento praticadas pelas pessoas desde tempos mais remotos. Em sua origem e até hoje a maioria dos jogos é praticada fisicamente, ou seja, na realidade dos jogadores, assim são jogos de cartas e esportes. Porém com a criação dos computadores foi possível o desenvolvimento de realidades virtuais, mundos e regras que existem apenas nos circuitos lógicos da máquina. Ao longo do tempo essas realidades virtuais se sofisticaram ao ponto de visualmente assimilar-se a realidade “real”, graças a tecnologia 3D que permite a representação de volume matematicamente (TYSON, 2009). Segundo Huizinga (1938), jogo é uma atividade voluntária exercida dentro de certos e determinados limites de tempo e espaço, segundo regras livremente estabelecidas, mas absolutamente obrigatórias, dotado de um fim em si mesmo, acompanhado de um sentimento de tensão, alegria e de uma consciência de ser diferente de vida cotidiana. O filósofo Huizinga em 1938, escreveu seu livro Homo Ludens, no qual argumenta que o jogo é uma categoria absolutamente primária da vida, tão essencial quando o raciocínio (Homo Sapiens) e a fabricação de objetos (Homo Faber), então a denominação Homo Ludens, quer dizer que o elemento lúdico está na base do surgimento e desenvolvimento da civilização (WIKIPÉDIA, 2009). 5.1 HISTÓRIA DOS JOGOS Os ancestrais dos jogos eletrônicos atuais foram jogos que utilizavam como tela de visualização aparelhos conhecidos como osciloscópios, que serviam em um 18 primeiro momento para a representação do ambiente varrido pelas ondas de rádio nos radares (ver Figura 1). O primeiro desses jogos foi Tennis for Two, criado em 1958 por William Higinbotham (ver Figura 1) (CARVALHO, 2006). Figura 1: Higinbotham e o osciloscópio que rodava Tennis for Two. Fonte: (CARVALHO, 2006) Porém o primeiro jogo eletrônico a ter uma representação gráfica mais parecida com o que temos hoje, ou seja, numa tela normal e não em um osciloscópio, foi Space War! (ver Figura 2), criado no MIT no início da década de 60 por Steven Russel para rodar em um mainframe, mostrando o potencial gráfico deste. O monitor deste mainframe era monocromático e exibia além de caracteres, linhas e pontos. No jogo o usuário controlava uma espaçonave que devia destruir todas as espaçonaves inimigas e ir passando de nível. (CABRAL, 2005) Figura 2: Space War! Fonte: (CABRAL, 2005) Porém até esse momento os jogos eram exclusivos de computadores militares ou de instituições de ensino superior, pois não havia ainda dispositivos eletrônicos domésticos capazes de realizar a computação necessária para se rodar 19 um desses jogos. Foi só no final dos anos 60, que a empresa General Instruments criou o primeiro chip barato, permitindo em 1972 que a empresa Atari lançasse o primeiro console de videogame do mundo para o público, o Odyssey. Este console permitia a execução do jogo Pong (ver Figura 3) que era baseado nos osciloscópios. Nele dois jogadores se enfrentavam, cada um controlando uma raquete que rebatia uma bolinha ao estilo Tennis for Two (CARVALHO, 2006). Figura 3: Pong. Fonte: (CARVALHO, 2006) A partir desse momento começou uma grande disputa entre empresas como a Atari e suas concorrentes, para que cada uma desenvolvesse um jogo mais avançado que o de sua concorrente, conseguindo assim mais consumidores. Em 1975 foi lançado o Atari 2600, capaz de executar jogos coloridos com dezesseis cores diferentes. Entre eles o Pitfall (ver Figura 4) em 1982 (CARVALHO, 2006). Figura 4: Pitfall. Fonte: (CABRAL, 2005) Foi nos anos 80, que também começou o desenvolvimento de aplicações 3D interativas, o primeiro jogo comercializado 3D só foi lançado em 1984 ele era Elite 20 (ver Figura 5) criado por Ian Bell e David Braben para o BBC Microcomputer (BERGEN, 2004). Figura 5: Elite. Fonte: (BERGEN, 2004) Outro jogo 3D lançado nessa época foi Battlezone (ver Figura 6), que utilizava gráficos coloridos (CARVALHO, 2006). Figura 6: Battlezone. Fonte: (CARVALHO, 2006) Desde então, a evolução da tecnologia gráfica 3D só progrediu, chegando aos dias atuais (ver Figura 7), onde jogos apresentam gráficos quase realistas (CARVALHO, 2006). 21 Figura 7: Crysis. Fonte: (CARVALHO, 2006) 5.2 GÊNEROS DE JOGOS Para se criar um jogo deve-se projetá-lo, para isso devem-se conhecer os diferentes gêneros de jogos que existem para definir em qual desses gêneros o jogo vai se encaixar. Segundo Battaiola (2000), os principais gêneros são: a) Histórias Interativas (RPG) – RPG é o acrônimo para Role Playing Game, ou jogo de interpretação de papel. Esse tipo de jogo consiste em uma ambientação contextual (fantasia medieval, horror) e tem por objetivo criar no computador um ambiente capaz de reproduzir um ambiente real. Exemplos são os títulos Diablo I e II, Baldur’s Gate I e II, as diversas séries do jogo Ultima, dentre outros. Um nicho deste tipo de jogo que vem crescendo bastante é o de Massively Multiplayer On-line Role Playing Game ou MMORPG, aplicativos de RPG que são jogados via Internet, simultaneamente por milhares de pessoas em todo o mundo, como exemplo deste temos o World of Warcraft; b) Estratégia – São jogos que exigem raciocínio, podem ser jogados em turnos, tais como, os tradicionais jogos de xadrez ou damas como por exemplo os da série Civilization ou de estratégia em tempo real (RTS) com os jogadores jogando simutâneamente, como por exemplo, Starcraft, que em geral, apresentam um enredo envolvendo guerra; c) Simulação – São jogos que possuem níveis de complexidade variando de média a alta, em razão da grande quantidade de comandos necessários para jogar. 22 Geralmente, respeitam ou tentam respeitar, de forma fiel, as leis da física. Dentre estes jogos pode-se citar o Flight Simulator que, apesar de ser orientado para o treinamento de pilotos, é classificado como jogo; a série Test Drive e os diversos títulos de jogos de ação em primeira pessoa (simulação de pessoa ou guerreiro/soldado); d) Ação – Os jogos de ação podem ser classificados dentre os mais antigos. Suas características principais são a facilidade de operação, em virtude das poucas teclas necessárias (geralmente as setas direcionais e uns poucos botões), objetivo bem definido, história simples e exigência de bons reflexos. Dentre este tipo de jogo encontram-se os títulos Tomb Raider da Eidos Interactive; Tekken 3 da Namco e Nemesis da Konami, dentre outros; e) Adventures (aventuras) – Esse tipo de jogo, muito popular entre os micros da geração 8 bits, tinha como peculiar a interatividade da sua interface. Inicialmente o jogador digitava os textos para que as ações pudessem ser interpretadas. Geralmente, o jogo não possuía gráficos, apenas textos. Em evoluções desse tipo de jogo a interface já era composta pelas palavras (ações), que poderiam ser selecionadas com o mouse e executadas com um clique num objeto na tela, apresentando, assim, gráficos estacionários ou com pouca animação. Esse tipo de jogo se caracteriza pela exigência de raciocínio lógico e pode ser classificado, também, como uma história interativa. Como exemplos encontram-se os títulos: Amazônia da Tilt On-Line (primeiro jogo brasileiro comercializado), Full Throttle, da Lucas Arts, as séries Space Quest e King’s Quest da Sierra, dentre outros; f) Infantis – Jogos infantis se caracterizam por sua interface simples e seu caráter educacional voltado, essencialmente, para as crianças. Este tipo de jogo pode apresentar características de quaisquer dos jogos citados; g) Passatempo – São programas simples, com quebra-cabeças rápidos e sem nenhuma história relacionada, cujo objetivo essencial é atingir uma pontuação alta. Os jogos de passatempo podem imitar jogos de tabuleiro (damas, xadrez, go, etc.), de cartas (poker, paciência, sete-e-meio, etc.) ou de qualquer outra forma de jogo em que o objetivo é simplesmente o entretenimento. Estes jogos têm, usualmente, interfaces 2D simples; 23 h) Esporte – São programas que simulam esportes populares, como os jogos de futebol, futebol americano, vôlei, basquete, boxe, basebol, etc. Como o usuário comanda times inteiros, esses jogos, geralmente, têm interfaces 3D; i) Educação/Treinamento – Jogos educacionais podem envolver as características de qualquer um dos jogos anteriores. Por exemplo, um jogo de aventura pode envolver enigmas relativos a um templo maia ou a um castelo medieval e, assim, se tornar um jogo educacional sobre história antiga. Um simulador de vôo pode ser aperfeiçoado para treinar pilotos de avião. O que diferencia os jogos de educação ou treinamento dos jogos somente para diversão é que eles levam em conta critérios didáticos e pedagógicos associados aos conceitos que visam difundir; j) Advergames – Jogos interativos disponíveis, gratuitamente, em sites institucionais de empresas, visando promover marcas, produtos e atrair tráfego. Como os jogos educacionais, também podem envolver as características de qualquer um dos jogos anteriores. As tecnologias utilizadas nos jogos são acessíveis à maioria dos usuários e utilizam técnicas de marketing on-line. 5.3 TIPOS DE MÍDIAS DOS JOGOS Além da definição do gênero o desenvolvedor deve decidir em qual a plataforma (mídia) o jogo irá rodar. Segundo a SOFTEX (2005) as principais plataformas são: a) Consoles – Equipamento digital dotado de um conector para o aparelho de TV e um encaixe para algum tipo de unidade de armazenamento contendo programas e/ou dados de um jogo em particular, geralmente, CD, DVD ou BlueRay. Os consoles mais avançados disponíveis são o PlayStation 3 da Sony; o Xbox 360 da Microsoft e o Nintendo Wii da Nintendo; b) PC – Computadores domésticos. Os jogos para essa plataforma, geralmente, são vendidos fisicamente (em CD, DVD ou BlueRay) em grandes redes varejistas ou obtidos on-line via assinatura e jogados pela Internet utilizando uma conexão de banda larga; c) Aparelho celular – Aparelhos de telefonia móvel. Jogos para esta plataforma são disponibilizados para download pelas próprias operadoras de 24 telefonia ou podem ser adquiridos na internet, o download do jogo pode ser feito pelo próprio celular ou em um computador e depois transferido para este; d) Handhelds e consoles portáteis – Estas plataformas possuem telas de maior tamanho e melhor qualidade que celulares, possibilitando o acesso a jogos de melhor resolução gráfica. Os principais consoles portáteis são o Game Boy da Nintendo e o PlayStation Portable (PSP) da Sony; e) TV Digital – Jogos que podem ser rodados em aparelhos de TV digital como forma de conteúdo interativo; f) Multiplataforma – Outra possibilidade é que o jogo seja destinado a mais de uma plataforma. Assim, poderiam atingir diferentes nichos tecnológicos, tais como computadores pessoais, celulares, handhelds, Internet, videogames ou qualquer outro dispositivo. 5.4 O PROCESSO DE DESENVOLVIMENTO O desenvolvimento de jogos nada mais é do que desenvolvimento de software. Os jogos são softwares com arte, som e gameplay, assim como softwares de planejamento finaceiro são softwares especializados em transações e planejamento financeiro, e sistemas especialistas são softwares com inteligência artificial. Entretanto, alguns desenvolvedores de jogos se mantêm aparte dos métodos formais de produção e desenvolvimento de software com a falsa idéia de que jogos são uma arte, não uma ciência. Os desenvolvedores de jogos precisam controlar seus métodos de produção para que possam produzir seus jogos de uma maneira organizada e repetível. Só uma maneira rigorosa pode criar grandes jogos dentro de um orçamento e em tempo (BETHKE, 2003). A idéia do jogo é sempre controlada pelo Game Designer, o projetista de jogo, este não é obrigado a saber programar, modelar objetos 3D ou saber usar softwares de edição de imagem ou qualquer processo de desenvolvimento, entretanto ele precisa ser unicamente um visionário, o “deus” do jogo, uma das tarefas deste profissional é escrever o documento de especificação do projeto do jogo. Este documento detalha a gameplay, descreve personagens e ajustes (possivelmente incluindo diagramas e desenhos), inclui descrições e mapas dos 25 níveis a serem explorados no jogo, posições e ações de cada personagem ou classe de personagem (PEDERSEN, 2003). Abaixo do projetista está o produtor, o profissional que faz o gerenciamento do projeto. Ele deve manter a equipe de desenvolvimento produtiva e as linhas de comunicação abertas. Esta pessoa é um diplomata e um político, a força necessária para se produzir o jogo. Ele deve manter a equipe de desenvolvimento em sincronia com a idéia do projetista (PEDERSEN, 2003). A idéia de um jogo também pode partir de muitas fontes: a) Um conceito original apresentado por alguém; b) Uma seqüência para um jogo já existente; c) Uma adaptação baseada em um personagem de um jogo já existente; d) Um jogo baseado em um personagem ou história existente (como personagens de filmes, TV ou quadrinhos); e) Uma simulação de outros jogos (como jogos de tabuleiro ou de cartas); f) Uma simulação de um acontecimento do mundo real; g) Um jogo desenvolvido para aproveitar uma plataforma de jogos específica (como a Internet ou um sistema de jogos interativo avançado). Uma vez que a idéia for aceita como viável (por uma empresa ou pelo grupo de amigos que desenvolverá o jogo) passa-se a etapa de planejamento (TYSON, 2009). No caso do jogo ser desenvolvido por uma empresa, a aceitação da idéia do jogo é feita em reuniões para luz verde (green-light meeting), onde desenvolvedores, produtores e produtores executivos do jogo reúnem-se com os executivos da empresa para ver se estes aprovam o desenvolvimento do jogo. Para ajudar numa decisão positiva a equipe de desenvolvedores trabalha na criação de trechos de software e arte que tentarão provocar uma boa impressão na mente dos executivos. Isso é chamado comumente de “eye candy” (BETHKE, 2003). 26 5.4.1 Projeto Quando é dada a luz verde para o desenvolvimento do jogo, uma equipe de pré-produção é montada. Se o jogo for feito apenas por um entusiasta ou um pequeno grupo sem pretensões comerciais, ainda assim as funções desempenhadas por estas pessoas terão de ser feitas: a) Projetista; b) Produtor; c) Engenheiro de software / programador; d) Artista; e) Roteirista. Às vezes, a equipe não terá todas essas pessoas (como no caso de um único desenvolvedor); outras vezes, terá mais de uma pessoa em cada categoria (TYSON, 2009). O dever dessas pessoas é definir os quatro elementos principais do projeto de jogo (ver Figura 8): o projeto mestre, o projeto dos níveis e missões, a mecânica do jogo, a história e os diálogos (BETHKE, 2003). Figura 8: Elementos do projeto do jogo. Fonte: (BETHKE, 2003) A primeira coisa que a equipe de pré-produção faz é desenvolver o roteiro do jogo. O roteiro identifica o tema do jogo, os personagens principais e o plano geral. Uma parte importante do desenvolvimento do roteiro é saber a natureza do jogo. Isto significa que o projetista de jogos está envolvido desde o início (TYSON, 2009). 27 Uma vez que o roteiro foi desenvolvido, a equipe cria um conjunto de storyboards (ver Figura 9). Um storyboard é uma coleção de desenhos imóveis, palavras e instruções técnicas que descrevem cada cena do jogo. Figura 9: Storyboards do jogo Portal Runner. Fonte: (TYSON, 2009) Além de fazer o storyboard do jogo, os projetistas mapearão os diferentes mundos ou fases dentro do jogo durante a etapa de pré-produção. Os atributos de cada mundo e os elementos nele contidos são tirados diretamente do roteiro (TYSON, 2009). A mecânica do jogo é mais voltada à programação por isso os encarregados desta função é a equipe de programadores e o engenheiro de software, ela define como o jogo se comportará (BETHKE, 2003). A história e os diálogos são definidos por escritores especializados em jogos. A criação deste tipo de história é totalmente diferente da criação de histórias de romances ou roteiros de filmes. Um escritor para jogos precisa gastar muito tempo com o projetista para o direcionamento da história (BETHKE, 2003). Uma vez que os storyboards e os modelos gerais das fases do jogo estão completos, o jogo entra na etapa de produção. A equipe de pré-produção se expande conforme necessário para incluir outros artistas, programadores e projetistas (TYSON, 2009). 5.4.2 A equipe de produção A equipe de produção é a equipe de pré-produção expandida. Ela inclui muitos profissionais das mais diferentes áreas (TYSON, 2009). 28 A seguir segue-se uma lista segundo Bethke (2003) dos profissionais mais usados nestas equipes, além do projetista e do produtor que já foram explicados: a) Programadores chefe e diretores técnicos: O programador chefe é tradicionalmente o programador mais experiente da equipe de programadores. Ele geralmente toma para si as partes mais desafiadoras do projeto. Alguns jogos tendem a terem grandes equipes de programadores como os MMRPG Ultima Online ou EverQuest, ou jogos single-player/multiplayer como Neverwinter Nights com mais de 25 programadores. Esses projetos com equipes de programadores grandes, geralmente, possuem um diretor técnico que supervisiona os programadores e reporta-se diretamente com o produtor. Os diretores técnicos não precisam ter grande experiência em programação, eles são apenas mais requisitados no gerenciamento de programadores. Um outro modelo usado é o de se ter chefes assistentes que são responsáveis por diferentes aspectos da tarefa de programação, onde cada um cuida de alguns programadores e se reportam ao programador chefe. Este modelo é usado em empresas como BioWare e Taldren; b) Programador da mecânica do jogo: Este profissional é o que converte os documentos de projeto em código. Esta pessoa, geralmente, modela a física do mundo do jogo, como as armas e as poções funcionam, etc. Estes profissionais são freqüentemente vistos envolta dos projetistas debatendo o funcionamento das características do jogo, como o funcionamento de uma arma, por exemplo; c) Programador 3D: Esta é uma das posições mais respeitadas na indústria dos jogos. Este profissional deve ter uma forte experiência em aspectos da matemática como cálculo de vetores e matrizes, trigonometria e álgebra; d) Programador de inteligência artificial: A demanda por este profissional varia de jogo para jogo e de gênero para gênero. Steven Polge, atualmente trabalhando na Epic é um dos maiores programadores de inteligência artificial conhecidos, criador de códigos como o Bot Reaper. Estes programadores também, geralmente, programam usando linguagens de script como Lua, Ruby ou Python em vez da linguagem padrão como o C++; e) Programador de interface de usuário: Esta é a pessoa encarregada de desenvolver a interface pela qual o usuário interagirá com o mundo do jogo. Ele é um expert em bibliotecas de UI; f) Programador de áudio: Este profissional é o que codifica os efeitos de som 3D, as marcas do sistema de dublagem e os sistemas de música; 29 g) Programador de ferramentas: Companhias de desenvolvimento de jogos como a ID, revelam gastar mais de 50 por cento dos seus recursos de programação criando ferramentas. A empresa BioWare tem um departamento de criação de ferramentas com mais de dez pessoas, que criam ferramentas para todos os jogos dela. Essas companhias alegam que isso economiza um tempo precioso, o qual pode ser gasto com o trabalho de projetistas e artistas. Essa economia de tempo é devida à aceleração do trabalho dos programadores em virtude deste ser automatizado por estas ferramentas. Dessa forma com o tempo cada companhia cria seu próprio toolset (conjunto de ferramentas) para obter gráficos na tela, som nos alto-falantes e que os personagens no jogo tenham um comportamento interessante; h) Programador do editor de missões/níveis: Encarado também como um programador de ferramentas, destaca-se apenas quando o jogo lança para o público o editor de missões ou níveis; i) Programador de redes: O profissional encarregado de escrever o código de baixo nível que permitirá o jogo ser jogado por vários jogadores através de uma LAN ou ao longo da Internet; j) Diretor de arte: Este é o chefe da equipe de arte, o encarregado de fazer com que os artistas façam seus trabalhos em tempo. Um diretor de arte geralmente é um artista com mais experiência na indústria e conhecedor das experiências das mais diversas pessoas; l) Artista de conceitos: Este é um artista que vem ganhando notoriedade. No passado alguns rascunhos eram suficientes para definir a aparência de todos os personagens e locações. Porém, atualmente, os orçamentos estão de 10 a 20 vezes maiores do que eram em 1995, os riscos são maiores e a arte errada pode ser fatal ao projeto. Os desenhos em preto-e-branco de alta qualidade são coloridos (color comp) para mais tarde serem entregues ao diretor de arte, ao produtor e demais stakeholders do projeto e estes decidirem se esses desenhos serão colocados no jogo ou precisarão ser refeitos; m) Artista 2D/Projetista de interface: O artista 2D é um expert em desenho e pintura clássico. São eles que pintam fundos de cenários, retratos de personagens e criam tiles e sprites. Na era dourada do desenvolvimento de jogos, eles usavam o software Deluxe Paint, hoje usam Photoshop, Illustrator e outros pacotes. Nos jogos 3D este artista, geralmente, também assume o papel de projetista de interface; 30 n) Modelador 3D: O modelador 3D foi o foco das atenções entre 1994 e 1997. Até essa época os artistas com experiência na indústria que existiam eram invariantemente artistas 2D e esses artistas não tinham os requisitos necessários para se manipular os pacotes de modelagem 3D. Assim um estranho hibrido de programador-artista com fascínio por coisas 3D foi requisitado para operar os modeladores 3D primitivos. Esses artistas também começaram a ser requisitados na indústria de filmes, e assim as companhias de jogos tinham de pagar caro para conseguir os disputados modeladores 3D. Assim nesses anos começaram a aparecer os primeiros operadores de softwares, como as antigas versões do LightWave. Com o tempo esses pacotes foram ficando mais fáceis de se usar, assim cursos começaram a ensinar 3D Studio Max e muitas pessoas tiveram a oportunidade de aprender a usar pacotes de modelagem 3D. Esses profissionais ainda são altamente respeitados na equipe de desenvolvimento de qualquer jogo, porém agora eles são mais balanceados com outras partes chaves da arte; r) Modelador de personagens: Este profissional pertence a uma vertente especializada de modeladores 3D. Alguns artistas 3D experientes tem mais facilidade de fazer coisas mecânicas, como espaçonaves, tanques de guerra e arquitetura, enquanto outros tem a facilidade de fazer os personagens orgânicos. Os modeladores de personagens com poucos polígonos (low-polys) têm um entendimento especial de como os detalhes do personagem ganharão vida no estágio de texturização para economizar ao máximo o seu orçamento de polígonos; s) Artista de texturas: O artista de texturas, assim como, o artista de conceitos é um elemento de grande visibilidade na equipe de arte. Como os pacotes de modelagens 3D são muito sofisticados nos dias atuais é normal ver a fase de texturização ser de 3 a 4 vezes maior do que a fase de modelagem do personagem. O artista de textura é capaz de imaginar a “pele” de um objeto em sua mente e criar um conjunto de texturas para “pintar” a “pele” do modelo 3D; t) Animador/Estúdio de captura de movimentos: A animação vem em duas categorias bem distintas: a animação de personagens/animais/monstros e a animação de objetos em geral. Antenas giratórias, moinhos e radares são bons exemplos de animações da categoria objetos em geral. Animar um moinho de vento é uma tarefa mais trivial para um artista do que animar um personagem. Para se animar personagens são usadas duas técnicas: keyframing e captura de movimentos (motion capture). Keyframing é o método mais antigo e comum de se 31 animar personagens, tal técnica também é usada na animação de personagens de desenho animado e monstros que tenham movimentos extremados, movimentos impossíveis de serem capturados de um ator humano. O processo de animar por keyframing é bem diferente do de modelar, texturizar e esboçar rascunhos, se um projeto envolve personagens que precisam ser animados deve-se assegurar que a equipe tenha animadores competentes para se ter um bom trabalho em tempo, pois a animação pode ser uma arte lenta. A captura de movimentos é o estado da arte, atores humanos se movimentam e seus movimentos são capturados. A captura de movimentos pode ser cara tanto em dinheiro, quanto em tempo ao se tratar os dados obtidos para que sejam utilizáveis. Este campo vem recebendo grandes melhoramentos e há poucos estúdios fazendo esse trabalho. Algumas companhias de desenvolvimento de jogos dividem o trabalho de animação de personagens entre modeladores e animadores dependendo da natureza da tarefa, já outros estúdios como a BioWare tem uma equipe de profissionais chamados character riggers para fazerem isso; u) Storyboarder: Se o jogo tem filmes ou seqüências de cinemáticas, é importante que a equipe tenha um profissional na criação de storyboards. Este artista deve estar apto a projetar e articular cenas em seqüências tanto internas quanto externas. A maioria dos storyboarders são artistas de conceito, mas não necessariamente; v) Dubladores: Vozes em um jogo sempre trazem vida. Compilar vozes age como um reforço a outros elementos de interatividade ao se ter atores falando por um personagem. Para se obter boas vozes também é importante se ter um diretor de dublagem. Um bom diretor de dublagem é capaz de encontrar os atores mais talentosos, o estúdio de gravação e o engenheiro de som para entregar o áudio no formato requisitado; x) Engenheiros de som: São os profissionais responsáveis pela criação dos sons, em geral, do jogo. Eles fazem coisas como tratamento de sons para a criação de efeitos como explosões, tiros e músicas. Estes são só os profissionais envolvidos no desenvolvimento direto do jogo, ainda existem outros como testers, produtores de linha, produtores executivos, chefes de QA (quality assurance), advogados, executivos de vendas, etc. A figura 10 32 mostra a partir de uma visão mais ampla as partes integrantes de um jogo (BETHKE, 2003). Figura 10: Partes integrantes de um jogo. Fonte: (BETHKE, 2003). 33 5.4.3 O Desenvolvimento Nessa fase os artistas começam a desenvolver os modelos 3D que formarão o mundo do jogo com base nos storyboards, desenhos de personagens e cenários, esses modelos podem ser cenários, personagens e outros artefatos. Para o desenvolvimento desses modelos 3D usa-se softwares como Alias|Wavefront, Maya, Discreet’s 3D Studio Max, Softimage e LightWave (PEDERSEN, 2003). Figura 11: Exemplo de modelo para jogo. Fonte primária (2009) Outros artistas criam as texturas dos modelos 3D, para isso eles usam softwares como Adobe Photoshop, Jasc Paint Shop Pro, CorelDRAW, Microsoft’s Paint e Equilibrium DeBabelizer (PEDERSEN, 2003). Figura 12: Textura e modelo texturizado. Fonte primária (2009) Já os programadores começam a escrever os códigos de programação com base nos documentos do projeto, como diagramas UML de casos de uso (ver figura 13). Para a programação, em geral, usa-se a linguagem C++, um IDE muito utilizada para ela é o Microsoft Visual C++, que possui versões gratuitas para estudantes e entusiastas sem pretensões comerciais. Boa parte do código do jogo é extraído de bibliotecas especiais já prontas (bibliotecas de som, física, rede, gráficos 34 3D), que podem ser reutilizados em diferentes jogos. Uma parte do código é o engine 3D (a biblioteca de gráficos 3D), uma biblioteca que gera todos os polígonos, sombras e texturas que o usuário vê (CABRAL, 2003). Figura 13: Casos de uso do jogo Pac-Man. Fonte: (BETHKE, 2003) A questão dos engines também é um assunto polêmico entre os desenvolvedores de jogos, enquanto uns preferem desenvolver além do jogo o próprio engine, outros preferem usar engines já usados em outros jogos (desenvolvido por eles, comprados ou livres), alegando que como há repetições de código, haverá desperdício de tempo e dinheiro. Os desenvolvedores que preferem desenvolver o engine alegam que criar um engine para cada jogo dá a oportunidade de diferenciar os jogos, aumentando assim a sua competitividade (SOFTEX, 2005). Em geral desenvolvedores casuais não desenvolvem o engine 3D, pois o desenvolvimento desta é consideravelmente mais complexo que o desenvolvimento do jogo em si. Em vez disto eles adquirem um engine e abstraem os aspectos mais baixo nível como o desenho de polígonos 3D, criação de sombras e aplicação de texturas. Existem engines livres na internet que gozam de grande respeito por parte da comunidade desenvolvedora de jogos, como exemplos pode-se citar OGRE, IrrLicht (PEDERSEN, 2003) e XNA que é um engine livre da Microsoft para o desenvolvimento de jogos para PC e XBox, podendo os jogos para PC serem comercializados livremente (LOBÃO, 2008). Outra parte opcional desempenhada pelos programadores é o desenvolvimento da inteligência artificial, o uso de um engine físico, o uso de uma API de sons e o uso de alguma técnica de implementação de redes se o jogo tiver a opção de múltiplos jogadores (PEDERSEN, 2003). Esses aspectos são opcionais por dependerem muito de jogo para jogo, há jogos que não necessitam de inteligência artificial, há jogos que não necessitam de 35 uma física real, etc. A questão dos engines físicos é parecida com a dos engines 3D, mas enquanto uma cuida da exibição dos gráficos 3D, a outra cria as simulações físicas entre os objetos no mundo 3D, impedindo que uns atravessem outros, criando gravidade, empuxo, etc. Porém há jogos que utilizam inteligência artificial para suprimir a física real, ou seja, jogos que não necessitam de todos esses aspectos, como jogos de ação ou corrida de carros. Existem engines físicos proprietárias e livres, como proprietários há o Havok, entre os livres estão o ODE, Newton, Bullet e o PhysX (PEDERSEN, 2003). Quando todos esses aspectos são unidos no código, cria-se o jogo pronto. A partir disso, ele deve entrar na fase de testes, onde serão corrigidos prováveis problemas e feitos alguns aperfeiçoamentos (TYSON, 2009). Os usuários casuais tendo o concluído o jogo, poderão lançá-lo na internet para que este sirva como um diploma provando sua capacitação, já os grupos com interesses comerciais iniciarão a fase de distribuição onde o jogo passará pela sua classificação etária através de algum órgão do governo (nos EUA o ESRB, Entertaining Software Rating Board), logo será feita uma campanha de marketing e o jogo será distribuído no varejo através de algum fabricante que adquiriu a licença com os desenvolvedores (TYSON, 2009). 5.4.4 Mapeamento de Texturas Mapeamento de texturas é um método para adicionar detalhes, superfícies texturizadas ou cores a gráficos ou modelos 3D computacionalmente gerados. A aplicação dessa técnica foi pioneiramente usada por Edwin Catmull em sua tese de Ph. D. em 1974 (TEXTURE MAPPING, 2009). A técnica geralmente é utilizada para atribuir-se imagens de bitmap a objetos 3D. Figura 14: Modelo sem textura (1), modelo com textura (2). Fonte (TEXTURE MAPPING, 2009) 36 Essas imagens, geralmente, são usadas para colorir-se um objeto (Texture Mapping), porém pode-se usá-las para criar efeitos especiais como iluminação (Light Mapping), relevo (Bump e Normal Mapping) e reflexo (Cube e Spherical Mapping), entre outros (TEXTURE MAPPING, 2009). Em um objeto 3D comum, cada vértice tem uma coordenada XYZ, já em um objeto 3D com coordenadas de mapeamento de textura, cada vértice terá além das coordenadas XYZ, as coordenadas UV ou UVW (UV MAPPING, 2009). a) UV e UVW Map As coordenadas UV se referem a uma coordenada cartesiana em uma imagem de bitmap. Assim como X é a horizontal no espaço 3D, U é a horizontal em uma imagem plana 2D, ou seja, um bitmap. Da mesma forma que Y é vertical, V também é (UV MAPPING, 2009). Figura 15: Coordenadas UV em uma superfície 3D. Fonte (AUTODESK, 2009) Porém em algumas ocasiões precisa-se usar coordenadas UVW. A maioria dos modeladores 3D que faz mapeamento de texturas, geralmente usa UVW e não UV. O W é análogo ao Z, ele é a dimensão da profundidade. Pode-se pensar que uma dimensão de profundidade em uma textura é inútil, porém isso é um engano, já que esse valor pode ser usado em texturas 3D, como as texturas procedurais geradas pelo 3DS Max (UVW MAPPING, 2009). b) Unwrapping O termo inglês wrap não tem uma tradução perfeita para o português, mas em linhas gerais ele significa enrolar, envolver, encobrir e embrulhar. Unwrap é o 37 contrário, ou seja, desembrulhar, descobrir. É isso que se faz quando se deseja texturizar um objeto 3D. Quando faz-se uma projeção em um objeto 3D, obtêm-se um mapa de coordenadas UV ou UVW, esse mapa pode ser transformado em imagem e a partir desta pode-se desenhar e pintar uma textura. Normalmente, a aplicação de uma única projeção em todo o modelo não é suficiente, por isso os programas que possibilitam fazer mapeamento de coordenadas permitem que se faça a aplicação de projeções em apenas partes do modelo. c) Multitexturização Um objeto 3D pode usar mais de uma textura ao mesmo tempo. Por exemplo, um objeto pode ter um Light Map para evitar que a iluminação seja recalculada a cada vez que a cena for renderizada. Outras técnicas de multitexturização são o Bump Map e o Normal Map, que permitem que se controle diretamente a orientação das faces do objeto (normals) para propósitos de iluminação, dando a impressão que a superfície é mais detalhada do que realmente é, pois estas podem adicionar relevo a um simples polígono. O bump e o normal mapping se tornaram populares quando video games puderam usá-los no final de 2003 (EBERLY, 2005). Figura 16: Texture Map e Light Map. Fonte primária (2009) Outros tipos de técnicas usados em multitexturização são as técnicas para representar reflexão, como uma alternativa a GPU usar algum algoritmo raytracer para gerar mapas de reflexão reais, que são extremamente demorados, o que é inviável já que jogos que precisam que a cena seja renderizada em tempo real (EBERLY, 2005). 38 As duas técnicas mais usadas para isso são o cube map (também chamado cubic map) e o spherical map. Eles usam uma imagem que representa um suposto ambiente ao qual refletirão, não precisando usar o ambiente real para criar o mapa de reflexão. Por isso é comum ver essas técnicas serem chamadas de Environment Maps, pois a projeção é estática em relação ao ambiente, ou seja, cada vez que o objeto se movimenta, a projeção é refeita, dando a ilusão de reflexão (MICROSOFT, 2008). O cube mapping necessita de 6 imagens para criar um cubo que envolve o objeto reflexivo como as mostradas na figura abaixo. Há ainda formatos de arquivo como DDS (DirectDraw Surface) que podem armazenar as 6 imagens em um só arquivo (MICROSOFT, 2008). Figura 17: Um Cube Map. Fonte primária (2009) 5.4.5 Tópicos Importantes de um Engine Gráfico O engine gráfico ou de renderização é o que proporciona funções de renderização 2D e 3D. Só pode se apoiar em bibliotecas/APIs gráficas como OpenGL ou DirectX. Define uma camada de abstração entre o hardware/software e o jogo em si. Além disso, ela se encarrega da visibilidade (BSP e buffers), do mapeamento, do antialiasing e do gerenciamento das malhas 3D, entre outras coisas (EBERLY, 2001). a) Grafo de Cena O grafo de cena é uma parte muito importante de uma engine. Esta é uma estrutura de dados muito utilizada em editores gráficos baseados em vetores e em jogos. Ele se encarrega de ordenar a representação lógica e, também as vezes, espacial de uma cena gráfica. O grafo é formado de nodos. Cada nodo pode ter outros nodos filhos, mas um nodo só pode ter um nodo pai. O efeito de algo sobre 39 um pai é visível em todos seus filhos. Assim, uma operação sobre um nodo se propaga a todos os nodos filhos. Isto permite manipular (escalar/mover/rotar/etc.) grupos de objetos como se fossem um só. Nos jogos, cada nodo só pode representar um objeto na cena (FARIAS, 2005). Figura 18: Representação de um grafo de cena simples. Fonte (FARIAS, 2005) b) Modelos 3D e Texturas Os engines gráficos, geralmente, já possuem métodos para o carregamento de malhas 3D feitas em programas de modelagem 3D. Algumas vezes esses engines possuem formatos de arquivos próprios para modelos 3D, como o engine OGRE que possui o formato .MESH, embora também seja possível o uso de bibliotecas especiais chamadas loaders que carregam um ou mais tipos de formatos de arquivo, como 3DS, OBJ ou formatos criados pelo próprio desenvolvedor do jogo, como geralmente é o caso das grandes companhias desenvolvedoras de jogos (JUNKER, 2006). Além dos formatos de arquivo de malha, um engine gráfico deve dar suporte ao carregamento de arquivos imagem, como BMP, JPEG, PNG, TGA e DDS. Raramente um engine tem um formato de imagem próprio (como o usado pela Blizzard no jogo Warcraft 3, chamado de BLP, “Blizzard Picture”). Essas imagens são utilizadas em partes da interface do jogo (menus e fontes) e na texturização de modelos 3D (FINNEY, 2004). c) Animação A animação de modelos 3D é algo fundamental em um jogo. Um engine gráfico tem como requisito indispensável dar suporte a algum tipo de animação 3D. Basicamente existem 4 formas de animação 3D (BOUSQUET, 2006). 40 1) A animação procedural é a animação programável, sendo por essa razão a mais poderosa, ela pode oferecer o resultado desejado pelo programador, porém com o custo de ser complexa e precisar de muitas linhas de códigos para fazer movimentos relativamente simples. Com esse tipo de animação é que se movimentam personagens ao longo de um cenário 3D ou faz-se um personagem qualquer olhar para algo. Este tipo de animação também pode controlar os outros três tipos de animação explicados; 2) Modelo 3D com juntas é a forma de se animar mais antiga, sendo principalmente usada para animar personagens. Foi usada em consoles de video games antigos como o Nintendo 64 (BOUSQUET, 2006); Figura 19: Personagem com juntas. Fonte (BOUSQUET, 2006) 3) A animação com base na malha surgiu como uma alternativa a animação através de juntas. Ela oferece resultados mais suaves, porém difíceis de serem criados, pois necessitam-se de muitos controladores que são manipulados manualmente para se animar a malha. O formato de arquivo MD2 usado no jogo Quake 2 usa esse tipo de animação (BOUSQUET, 2006). A imagem abaixo mostra um braço e dois manipuladores necessários para se fazer um simples movimento; Figura 20: Animação de Malha. Fonte (BOUSQUET, 2006) 41 4) A animação através de esqueleto é a técnica mais moderna, ela oferece resultados rápidos, podendo estas também, serem animações complexas. Este tipo de animação também tem a vantagem de ser facilmente procedurável (BOUSQUET, 2006). Figura 21: Personagem com esqueleto. Fonte (BOUSQUET, 2006) Neste tipo de animação, uma estrutura esqueletal é colocada dentro do modelo, este esqueleto é formado por bones (ossos) que quando movimentados deformam o modelo de acordo. A associação de um modelo a um esqueleto é chamada skinning. Uma das ferramentas mais utilizadas para a criação de esqueletos para personagens é o Character Studio. Esta ferramenta é um plugin do 3DS Max. Ela permite criar animações de personagens de forma rápida e fácil (BOUSQUET, 2006). Figura 22: Biped. Fonte (BOUSQUET, 2006) O Character Studio possui 3 módulos: Biped, Physique e o Crowd. O Biped é uma estrutura esqueletal humanóide (figura 67) pronta para ser inserida em um modelo, restando apenas se fazerem pequenos ajustes. O Physique é um modifier 42 que permite que se faça o skinning do Biped em um modelo. O Crowd permite a animação de grupos de personagens 3D usando um sistema de delegações e comportamentos (BOUSQUET, 2006). d) Timer Os engines gráficos precisam de alguma técnica que permita que se renderize mais frames ao passar do tempo. É isso que possibilita a criação do movimento dos objetos 3D. A quantidade de frames renderizada em um segundo é chamada FPS (Frames Per Second). Um timer é uma classe que informa o tempo em que um novo frame deve ser renderizado, em geral a técnica mais utilizada para isso é a ASAP (As Soon As Possible), que renderiza um novo frame após o anterior terminar de ser renderizado. O timer pode retornar eventos que poderão ser utilizados pelo desenvolvedor, em geral ele retorna dois eventos, um antes do frame ser renderizado e outro após (JUNKER, 2006). e) Luzes, sombras e neblina Um engine gráfico 3D obrigatoriamente tem em si implementado alguma técnica que permita a iluminação dos objetos da cena. Em geral são utilizadas Lights (luzes), objetos que simulam a emissão de luz, afetando a aparência dos demais objetos a sua volta. A maioria dos engines permite o controle da cor e da intensidade dessa luz, já outras oferecem vários tipos de luzes, como luzes omnidirecionais (points ou omnis), cônicas (spots) e direcionais (directionals ou parallels) (EBERLY, 2001). Figura 23: Tipos de luzes. Fonte (EBERLY, 2001) Também um engine pode utilizar alguma técnica para a criação de sombras nos objetos 3D segundo as luzes. Existem vários algoritmos de geração de sombra, porém os mais comuns são os baseados em texturas e no stencil buffer (JUNKER, 2006). 43 Figura 24: Luzes e sombras no engine OGRE. Fonte primária (2009) A criação de neblina é uma função nativa das APIs gráficas como OpenGL e DirectX, por isso é comumente implantada na maioria dos engines gráficos 3D. O processo de geração de neblina baseia-se na aplicação de filtros durante o processo de renderização, por esse motivo ela não é manipulada como um objeto 3D que possa ser movimentado por exemplo (JUNKER, 2006). Figura 25: Implementação de neblina no engine GLScene. Fonte primária (2009) f) Céus O processo de criação de céus para mundos 3D é bem simples e implementado de forma similar na maioria dos engines gráficos 3D. Basicamente, existem duas técnicas que podem mudar de nome de engine para engine e também podem gerar versões modificadas destas (JUNKER, 2006). 1) Sky Dome - Um Sky Dome, geralmente, é uma estrutura arredondada que possui texturas ou cores ajustáveis para representar o céu (AHEARN, 2006); 44 Figura 26: Um Sky Dome. Fonte (AHEARN, 2006) 2) Sky Box - Um Sky Box é uma estrutura cúbica que possui texturas em cada uma de suas faces, dando a impressão de um céu (FINNEY, 2004). Figura 27: Sky box. Fonte (FINNEY, 2004) g) Terreno A criação de terrenos com relevo é uma técnica que se baseia na manipulação dos vértices de um plano 3D (chamado heightfield) seguindo como referência uma imagem de bitmap em escala de cinzas, chamada de heightmap (FEIL, 2005). Figura 28: Heightfield. Fonte (FEIL, 2005) 45 Para a criação do terreno, os pixels brancos significam a maior elevação do terreno, os pretos, as menores e os cinzas intermediários, as alturas intermediárias (FEIL, 2005). h) Partículas e Billboards Partículas são objetos indispensáveis para a produção de um jogo visualmente atrativo. Elas são basicamente polígonos de uma só face que são gerados em grandes quantidades pelo engine para simular uma grande variedade de fenômenos do mundo real como chuva, fumaça, névoa, água, respingos e fogo. Elas podem ser usadas para simular qualquer entidade que altera-se como um fluido ou gás. Até enxames de mosquitos podem ser gerados com partículas (JUNKER, 2006). Nos jogos, cada polígono de uma face que forma a partícula é texturizado por uma imagem com canal alpha (mostrado em negro na imagem 75), para controlar o formato da partícula (JUNKER, 2006). Figura 29: Billboards cobrindo um teapot. Fonte primária (2009) Um sistema de partículas é basicamente formado por três entidades: 1) Partículas: As partículas propriamente ditas; 2) Emissor de Partículas: A entidade que possibilita existência das partículas; 3) Nodo do Emissor de Partículas: O objeto ao qual o emissor de partículas está anexado. Partículas em geral são também billboards, ou seja, um polígono de uma só face e que sempre a mantém alinhada a câmera (JUNKER, 2006). 46 i) Raycasting Raycasting, ray-query ou picking ray são mecanismos para determinação de colisão de um raio com um objeto 3D. Os ditos objetos 3D são bounding volumes ou triângulos, pois é impossível matematicamente determinar se raio colide com um conjunto de triângulos de forma irregular, ao mesmo tempo. Os bounding volumes são sólidos geométricos simples que contém em seu interior completamente um objeto 3D tendo o menor tamanho possível (FARIAS, 2005). Figura 30: Modelo 3D e seu bounding volume cúbico. Fonte (WIKIPÉDIA, 2009) Através de fórmulas matemáticas envolvendo a posição de origem do raio, sua orientação e o bounding volume é possível se determinar o ponto em que o raio toca o bounding volume e a orientação da normal deste. Apenas pode-se lançar um raio em um objeto por vez para testar a colisão, não é possível lançar-se um raio para qualquer lugar e tentar colidi-lo com qualquer objeto. Uma solução para isso é lançar o mesmo raio várias vezes contra todos os objetos da cena, testando um por um (FARIAS, 2005). O raycasting é útil em editores 3D, inteligência artificial e testes de visibilidade. Quando deseja-se testar se um raio colide com a malha de um objeto 3D e não seu bounding volume testa-se a colisão do raio com todos os triângulos da malha, usando um loop. Por esse motivo, quanto mais triângulos tiver a malha, mais demorado será o teste. Uma técnica de otimização muito usada para isso é testar primeiro se o raio colide com o bounding volume, se ele colide testa com todos os triângulos, se ele não colide com o bounding volume, significa que não colide com nenhum triângulo, logo é desnecessário se fazer o teste (FARIAS, 2005). 6 CRIAÇÃO DO JOGO AQUARIUS O autor decidiu desenvolver um jogo de tiro em terceira pessoa ambientado em um universo ficcional baseado no conto literário Aquarius da autoria do mesmo. Para definir o cenário do jogo foi adaptado um pequeno trecho do conto onde o personagem Aquarius deve destruir 7 andróides em um terreno desértico. Para o desenvolvimento do jogo, foram analisados os seguintes engines e frameworks gráficos: a) GLScene: biblioteca para Delphi e Lazarus baseada em OpenGL. É uma biblioteca OpenSource desenvolvida pelo alemão Mike Lischke que tem como vantagem ser fácil de ser aprendida (GLSCENE, 2009), porém como desvantagem ela é baseada em uma linguagem pouco usada em jogos (Object Pascal) e o produto final não satisfaz as expectativas mais exigentes; b) XNA: um framework para C# baseado em DirectX. Foi desenvolvido pela Microsoft para alavancar a entrada do C# no mundo das linguagens para jogos. Ele é livre para o desenvolvimento de jogos para PC e livre para uso não-comercial para jogos para o console XBox (MICROSOFT, 2009). Como vantagem ele tem o poder de usar tecnologias bem atuais e ser muito estável, sua desvantagem é requerer uma placa de vídeo moderna para rodar até os jogos mais simples; c) OGRE: é um engine desenvolvido pelo britânico Steve Streeting para C++ e que abstrai a utilização de uma API gráfica, podendo dessa forma utilizar tanto DirectX quanto OpenGL. É totalmente livre e tem a vantagem de oferecer resultados muito satisfatórios e rodar em computadores com placas de vídeo modestas (OGRE, 2009). Sua desvantagem é o alto grau de dificuldade para se aprender a usá-lo já 48 que usa uma arquitetura totalmente orientada a objetos, sendo impossível usá-lo de outra forma. Com base nessas conclusões o autor decidiu utilizar o engine OGRE, por ele usar a linguagem C++, que é a mais utilizada na criação dos jogos atualmente no mercado (SOFTEX, 2005) e por esse engine não requerer uma placa de vídeo de última geração, pois a placa usada pelo autor foi uma ATI Radeon 9250 (placa lançada em 2007). 6.1 O IDE DE PROGRAMAÇÃO Como compilador C++ foi utilizado o Microsoft Visual C++ 2005 Express com o Microsoft Platform SDK instalado para este suprir as deficiências do Microsoft Visual C++ 2005 Express que não dispõe dos includes básicos para programação Windows através de código (windows.h, por exemplo), já que ele é direcionado apenas para a programação de aplicativos que rodam no console DOS e aplicativos Windows criados visualmente através do framework MFC (Microsoft Foundation Classes) (SEDDON, 2005). Além disso, para poder desenvolver aplicações com o OGRE que usem o DirectX, deve-se ter instalado também o DirectX SDK. 6.2 FERRAMENTAS PARA CRIAÇÃO DE CONTEÚDO Para a criação dos modelos 3D foi utilizada uma versão trial do software Autodesk 3DS Max 8.0 com o plugin oFusion for 3D Studio Max instalado para que se possa exportar modelos desse software para o formato “.mesh”, utilizado pelo OGRE. Figura 31: 3DS Max 8.0 com plugin oFusion instalado. Fonte primária (2009) 49 Para a criação das texturas foi utilizado o software Adobe Photoshop CS2 com os plugins NVidea Normal Map e NVidea DDS Exporter instalados, para que seja dado ao Photoshop a capacidade de fazer Normal Maps e exportar imagens para o formato DDS, respectivamente. Figura 32: Adobe Photoshop CS2. Fonte primária (2009) As animações dos personagens foram baixadas do site da eMotek, uma empresa especializada em captura de movimentos para utilização em jogos e que disponibiliza animações para uso não comercial. Figura 33: Área de download de animações do site eMotek. Fonte primária (2009) O terreno e o céu do jogo foram criados no software Terragen, que permite a criação de heightfields, texturas para terreno e skyboxes. Figura 34: Terragen. Fonte primária (2009) 50 6.3 O PROJETO Após a delimitação do universo do jogo através da criação de um documento de visão geral (ver anexo, item 9.1), é criado o roteiro (ver anexo, item 9.2), que esclarece a ordem dos acontecimentos da história do jogo. Logo depois foi criado um storyboard (ver anexo, item 9.3) e desenhos esquemáticos dos personagens (ver anexo, item 9.4). Com base nesses desenhos foram criados os modelos e as texturas. A partir do roteiro do jogo também é possível fazer a captura de requisitos e com estes faz-se o diagrama de casos de uso (ver anexo, item 9.5 subitem a). Este diagrama tem uma utilidade especial nos modelos dos personagens, pois ele diz quais são as animações que o personagem pode realizar. Com o diagrama de casos de uso pronto, foi feito o diagrama de classes (ver anexo, item 9.5 subitem b) e de sequência (ver anexo, item 9.5 subitem c), a partir de então iniciou-se a fase de programação. 6.4 A PROGRAMAÇÃO O engine OGRE utiliza uma arquitetura totalmente orientada a objetos que vem sendo muito utilizada nos engines modernos. Essa arquitetura pode ser arranjada de muitas formas, porém a forma mais usada e a forma que é ensinada nos tutoriais do site da OGRE é criar uma grande classe “aplicação” que é instanciada e executada através de um único método no método main do código C++ conforme pode-se ver na figura 35 e 36. Figura 35: Funcionamento do engine OGRE. Fonte primária (2009) 51 Figura 36: Instanciamento da classe da aplicação e sua execução. Fonte primária (2009) O método application::go da classe da aplicação dispara uma sequência de outros métodos que criam objetos que permitem o engine seguir renderizando. Um desses métodos é o createScene que define uma cena inicial para o universo 3D a ser mostrado na tela. Outro método importante é o createFrameListener, que cria uma classe capaz de retornar dois eventos, um antes de um frame ser renderizado (frameStarted) e um depois que o frame foi renderizado (frameEnded), pela utilização desses dois eventos é possível fazer-se interações no universo 3D da cena em tempo real. O engine OGRE é apenas gráfico, ou seja, ele não manipula sons ou entradas. Para essas funções devem-se utilizar bibliotecas específicas, como o OIS que já vem com a OGRE e é uma biblioteca especializada nessa função, podendo manipular entrada do teclado, mouse e joysticks. O OIS pode retornar eventos quando uma entrada específica é produzida (tecla pressionada, tecla solta, mouse movimentado, clique com o mouse, etc.), dando mais poder ao desenvolvedor. Figura 37: Ambiente de desenvolvimento. Fonte primária (2009) 52 Na classe da aplicação define-se que será usado um heightfield, um skybox e faz-se a carga do modelo 3D dos personagens. Também são feitos ajustes na escala dos modelos e no posicionamento da câmera em relação ao personagem. Figura 38: Câmera em terceira pessoa. Fonte primária (2009) Seguindo a hierarquia de um grafo de cena, a câmera é posicionada em um nodo filho ao nodo do personagem. Assim quando o personagem é movimentado a câmera o seguirá. Após isso é definida uma posição ao personagem no centro do heightfield. A altura dele é definida por uma ray query que é atualizado a cada novo frame, assim o personagem sempre estará em contato com o terreno. Também é definido que o personagem será movimentado em relação às teclas WASD e as setas direcionais do teclado, além dele rotacionar segundo a movimentação do mouse, deixando assim a movimentação do personagem intuitiva. Com o pressionamento do botão esquerdo do mouse o personagem dispara “feixes de energia” que atingirão o terreno ou os personagens inimigos. Para fazer o sistema de movimentação dos projéteis, optou-se por se disparar um ray-query que difinirá o ponto de partida e o de destino no projétil, então cria-se a malha do projétil e faz-se este se movimentar entre um ponto e outro através de interpolação linear conforme a fórmula da figura 39: Figura 39: Interpolação linear. Fonte primária (2009) Sendo “Vp” um vetor tridimensional que define a posição atual do projétil; “x0”, “y0” e “z0” são elementos do vetor “V0” que é o ponto de origem; ”x1”, “y1” e “z1” são elementos do vetor “V1” que é o ponto de destino. A variável “i” é um número real entre 0 e 1 que define a relação do ponto atual em relação aos pontos pólos, sendo 53 o valor 0 o pólo de origem e 1 o pólo de destino e os valores intermediários, as posições do projétil entre esses dois pontos. Esses projéteis são inseridos em uma lista duplamente encadeada disponibilizada pela STL chamada list. Através de um loop pode-se percorrer toda essa lista atualizando a posição de todos os projéteis e testando-se se eles atingiram algo para que então sejam destruídos. Figura 40: Projéteis sendo disparados. Fonte primária (2009) Quando um inimigo é atingido sua animação de morte é ativada e ele explode. A explosão é um sistema de partículas formado de billboards. Esse sistema de partículas foi feito utilizando uma ferramenta chamada Particle Accelerator que é especializada na criação desse tipo de sistema para o engine OGRE. A explosão de um inimigo pode ser vista na figura 41. Figura 41: Explosão de um inimigo. Fonte primária (2009) O jogo usa uma API de som chamada Audiere, que é fácil de ser utilizada em qualquer aplicação C++, por precisar de pouquíssimas linhas de código para reproduzir a maioria dos formatos de arquivo de som. O sistema de inteligência artificial dos inimigos consiste na aproximação destes do seu alvo (o personagem do jogador no caso) e começar a disparar quando 54 estiver a uma distância de 3 unidades deste. Cada inimigo pode disparar um tiro a cada 0,5 segundo e possui uma mira com acurácia perfeita que deve acertar o centro do alvo. Porém os inimigos não podem disparar enquanto andam. 6.5 DIFICULDADES ENCONTRADAS Uma das maiores dificuldades encontradas foi o modo de programação utilizado, pois a maioria do processamento deve ser feito em uma fração de 1/60 segundo para o jogo rodar suavemente. Quando esse processamento é demasiado o jogo começa a sofrer os chamados “lags”, que nada mais são do que atrasos da atualização dos frames gerados, criando um efeito de câmera lenta ou congelamento do tempo. Para contornar esse tipo de problema teve-se de, por exemplo, usar uma lista encadeada para armazenar os projéteis e não um vetor dinâmico como era a primeira escolha. Isso por que cada vez que um novo elemento é adicionado a um vetor dinâmico, deve-se alocar uma memória do tamanho do vetor atual mais a memória para essa uma unidade, o que não é muito demorado se forem poucos elementos, porém o problema começava a tomar outras proporções quando cada elemento era uma instância de uma classe e passavam a quantidade de 100 unidades. Com isso começava-se a ter “lags”. A solução foi utilizar uma lista encadeada, que é mais difícil de manipular, porém não desperdiçava tanto tempo de processamento em um simples adicionar de elemento. Outra grande dificuldade encontrada foi o tempo necessário para se criar os modelos 3D, mapear os mapas UVW destes, criar-se as texturas, criar-se os esqueletos, animar, exportar os modelos, criar o cenário, aprender diversas funcionalidades do engine OGRE, fundamentais para a criação de um jogo e então programar o jogo carregando os recursos criados (modelos, texturas, animações e cenário). 7 CONSIDERAÇÕES FINAIS O uso de técnicas formais no desenvolvimento de um jogo é um fator fundamental para o sucesso do projeto. Os capítulos anteriores apresentaram de uma forma resumida as principais etapas no desenvolvimento, embora esse processo possa variar de jogo para jogo, dependendo da metodologia preferida dos desenvolvedores. A não utilização de tais técnicas, geralmente, leva o projeto ao fracasso deixando os desenvolvedores frustrados. O uso dessas técnicas é importante devida a natureza de alta complexidade que é o desenvolvimento de um jogo, pois esta envolve vários ramos da ciência (matemática, programação, física, inteligência artificial) e da arte ao mesmo tempo (modelagem 3D, pintura, música). A conclusão do jogo, também mostra que é possível um único desenvolvedor criar um jogo. É claro, também, que quanto mais membros em uma equipe de desenvolvimento, mais complexo e rico em detalhes será esse jogo. Segundo o wiki Lone Developer (2009), um único desenvolvedor deve saber suas limitações e não extrapolá-las para terminar um projeto, ele deve saber programar espertamente e não duramente, pois ele também é um exército de um homem só (One-Man Army). Devendo por esse motivo também ter muita rigidez em suas tarefas, afinal é apenas ele que projeta, modela, anima, texturiza e programa. Assim, o não comprimento de uma única etapa no desenvolvimento pode levar ao fracasso do projeto inteiro. 8 BIBLIOGRAFIA AHEARN, Luke. 3D Game Textures. Focal Press, Burlington, MA, EUA. 2006. AUTODESK. 3DS Max Reference Documentation. Autodesk Inc., 2005. BERGEN, Gino van den. Collision Detection in Interactive 3D Environments. San Francisco, Morgan Kaufmann Publishers, 2004. BETHKE, Erik. Game development and production. Texas, Wordware Publishing, 2003. BOUSQUET, Michele; MCCARTHY, Michael. 3ds Max Animation with Biped. New Riders, Califórnia, 2006. CABRAL, A.; ADEODATO, B. & Carvalho, M. Entretenimento digital: Levando a sério a brincadeira. FINEP, Mimeo, 2003. EBERLY , David H.. 3D Game Engine Design: A Practical Approach to RealTime Computer Graphics. Morgan Kaufmann, San Francisco, CA, EUA. 2001. EBERLY, David H. 3D Game Engine Architecture. California, Morgan Kaufmann, 2005. FARIAS, Thiago Souto Maior Cordeiro de; PESSOA, Saulo Andrade; TEICHRIEB, Verônica; KELNER, Judith. O Engine Gráfico OGRE. Universidade Federal de Pernambuco e Escola Politécnica de Pernambuco, Recife, Pernambuco. 2005. FEIL, John; SCATTERGOOD, Marc. Beginning Game Level Design. Thomson, Boston, MA, EUA. 2005. FINNEY, Kenneth C.. 3D Game Programming All in One. Thomson, Boston, MA, EUA. 2004. GLSCENE. GLScene for Delphi Website. <http://www.glscene.org> Acesso em: 10 Nov. 2009. 2009: Disponível em: 57 JUNKER, Gregory. Pro OGRE 3D Programming. Apress, New York, NY, EUA. 2006. LOBÃO, Alexandre; EVANGELISTA, Bruno; FARIAS, José Antonio Leal de. Beginning XNA 2.0 Game Programming: From Novice to Professional. New York, Apress, 2008. LONE DEVELOPER, Wiki. Lone Developer. 2009: Disponível em: < http://gpwiki.org/index.php/Lone_developer > Acesso em 10 Jul. 2009. MICROSOFT. DirectX Documentation For C++. Microsoft Corporation, 2008. MICROSOFT. XNA Game Studio. 2009: Disponível em: <http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD4852-9883-9A33C0AD8FEE&displaylang=en#top> Acesso em: 10 Mar. 2009. NORMAL MAPPING, Wikipedia. Normal Mapping. 2009. Disponível em: <http://en.wikipedia.org/wiki/Normal_mapping> Acesso em: 19 Set. 2009. OGRE. Object-Oriented Graphics Rendering Engine Website. 2009: Disponível em: http://www.ogre3d.org Acesso em: 10 Nov. 2009. PEDERSEN, Roger E. Game Design Foundations. Texas, Wordware Publishing, 2003. SEDDON, Chris. OpenGL Game Development. Texas, Wordware Publishing, 2005. SOFTEX, Observatório Digital. Tecnologias de visualização na indústria de jogos digitais: potencial econômico e tecnológico para a indústria brasileira de software. Campinas, Softex, 2005. TEXTURE MAPPING, Wikipedia. Texture Mapping. 2009. Disponível em: <http://en.wikipedia.org/wiki/Texture_mapping> Acesso em: 19 Set. 2009. TYSON, Jeff. Como a 3DO cria videogames; 2009: Disponível em: <http://eletronicos.hsw.uol.com.br/como-a-3do-cria-videogames.htm> Acesso em: 16 Mar. 2009. UV MAPPING, Wikipedia. UV Mapping. 2009. Disponível <http://en.wikipedia.org/wiki/UV_mapping> Acesso em: 19 Set. 2009. em: UVW MAPPING, Wikipedia. UVW Mapping. 2009. Disponível em: < http://en.wikipedia.org/wiki/UVW_mapping> Acesso em: 19 Set. 2009. WIKIPÉDIA. Bounding Volume. 2009. Disponível em: <http://en.wikipedia.org/wiki/ Bounding_volume> Acesso em 29 Jun. 2009. 9 9.1 ANEXO: PROJETO DO JOGO AQUARIUS DESCRIÇÃO DO SISTEMA É proposto o desenvolvimento de um jogo 3D de tiro em terceira pessoa, ambientando em uma realidade fictícia, onde o personagem Aquarius que é o personagem controlado pelo jogador, deve derrotar sete personagens inimigos, sendo estes os andróides Haytrons. O personagem do jogador poderá se locomover livremente pelo cenário e disparar feixes de energia nos inimigos, que se acertarem, os destruirão. Os inimigos também dispararão contra o personagem do jogador, ferindo este se acertar e o derrotando depois de um limite de 10 acertos. 9.2 ROTEIRO DO JOGO a) Personagens: 1) Raiwr Aquarius: Sexo masculino, ruivo, usa um traje negro futurista; 2) Hait Mevelly: Sexo feminino, loira, usa um traje negro e rosa; 3) Andróides Haytrons: Autômatos antropomorfos de 2,5 metros de altura e longas garras no lugar dos dedos dos pés e mãos; b) Cenário: Planeta MBK-34 Nakkin: Planeta desértico com brisa eterna; c) Cena Única: Horário: Fim de tarde 59 Aquarius chega ao planeta Nakkin, onde deve derrotar os sete Haytrons guardiões da frota fantasma para adquirir esta e ajudar a Resistência Rebelde a fortalecer sua frota que foi dizimada em uma batalha espacial anterior. Os Haytrons são andróides de uma tecnologia ancestral muito evoluída, seres autômatos formados de ligas metálico-orgânicas, extremamente flexíveis e resistentes. Possuem geradores de campos de força que os protegem de agressões exteriores, além de possuírem um driver de plasma de íons de sódio (razão esta de seus feixes de energia serem vermelho-alaranjados) que usam para atacar se necessário. Quando um Haytron é danificado irreversivelmente ele se auto-destrói numa violenta explosão para proteger sua tecnologia e danificar seus agressores. Aquarius usa um gerador de campo de força para se proteger e uma pequena arma com driver de plasma de íons de chumbo. Aquarius entra em combate com os Haytrons que se mostram implacáveis e possuidores de uma acurácia perfeita em seus disparos, porém Aquarius vai derrotando um a um os Haytrons, ao perceber que estes não possuem uma inteligência muito desenvolvida. Com os guardiões derrotados Aquarius encontra a frota fantasma e chama as tropas Rebeldes para que estas levarem-na. 9.3 STORYBOARD Figura 42: Storyboard do jogo Aquarius. Fonte primária (2009) 60 9.4 ESQUEMA DOS PERSONAGENS a) Andróides Haytrons Figura 43: Haytron. Fonte primária (2009) c) Mevelly Figura 45: Mevelly. Fonte primária (2009) b) Aquarius Figura 44: Aquarius. Fonte primária (2009) 61 9.5 DIAGRAMAS UML a) Casos de Uso b) Classes c) Sequência