You are on page 1of 127

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

Associao Pr-Ensino Superior em Novo Hamburgo - ASPEUR Universidade Feevale

Jogos Eletrnicos na Prtica


Livro de Tutoriais do SBGames 2012
2 edio - Revisada e Ampliada

Organizadores Marsal Branco (Universidade Feevale) Silvano Malfatti (Univ. do Tocantins) Marcus Vinicius Lamar (UnB)

Novo Hamburgo - Rio Grande do Sul - Brasil 2013

EXPEDIENTE Presidente da Aspeur Argemi Machado de Oliveira Reitor da Universidade Feevale Ramon Fernando da Cunha Pr-Reitora de Ensino Inajara Vargas Ramos Pr-Reitora de Extenso e Assuntos Comunitrios Gladis Luisa Baptista Pr-Reitor de Pesquisa e Inovao Joo Alcione Sganderla Figueiredo Pr-Reitor de Planejamento e Administrao Alexandre Zeni Coordenao Editorial Inajara Vargas Ramos Realizao Instituto de Cincias Sociais Aplicadas ICSA Curso de Jogos Digitais Editora Feevale Celso Eduardo Stark Daiane Thom Scariot Graziele Borguetto Souza Capa Eduardo Fernando Mller Gabriel Hilgert Editorao Eletrnica Daiane Thom Scariot Organizao Editorial Kaline Hilgert Perius Reviso Textual Dos autores. Organizao do Evento Coordenador Geral Carla Castanho (UnB) Trilha de Computao Ricardo Nakamura (USP) Licnio Gomes Roque (Universidade de Coimbra, Portugal) Rodrigo Bonifcio (UnB) Trilha de Arte e Design Maria das Graas Chagas (PUC-Rio) Tiago Barros P. e Silva (UnB) Trilha da Indstria Fred Vasconcelos (Abragames) Saulo Camarotti (IESB/Behold Studios) Luiz Sakuda (USP) Trilha de Cultura Roger Tavares (UFRN) Nelson Zagalo (Univ. do Minho, Portugal) Mauricio Miranda Sarmet (UnB) Tutoriais Marsal Branco (Universidade Feevale) Silvano Malfatti (Univ. do Tocantins) Marcus Vinicius Lamar (UnB) Festival de Jogos Independentes Bruno Campagnolo (PUC-PR) Artur Mittelbach (PUC-PR) Guilherme Novaes Ramos (UnB) Games for Change Gilson Schwartz (USP - Cidade do Conhecimento) Mostra de Artes Suzete Venturelli (UnB) Felipe Ferreira Costa (IESB) Coordenadores de Publicao (Publication Chairs) Luciana Rocha Clua (PUC-Rio) Luiz Gonzaga (Unisinos) Comisso Especial de Jogos e Entretenimento Digital da SBC Esteban Clua (UFF) Bruno Feij (PUC-RIO) Soraia Musse (PUC-RS) Carla Castanho (UnB) Ricardo Nakamura (USP) Steering Committee (Comit Volante) Luiz Gonzaga (Unisinos) Joo Mattar (Univ. Anhembi Morumbi / PUC-SP) Joao Ricardo Bittencourt (Unisinos) Juliano Barbosa Alves (Abragames) Lynn Alves (UNEB) Rafael Dubiela (UFPR)

Dados Internacionais de Catalogao na Publicao (CIP) Universidade Feevale, RS, Brasil Bibliotecrio responsvel: Jogos Jogos eletrnicos na prtica : livro de tutoriais do SBGames 2012 [recurso eletrnico] / organizadores Marsal Branco, Silvano Malfatti, Marcus Vinicius Lamar. 2. ed., rev. e ampl. - Novo Hamburgo : Feevale, 2013 125 p. : il. Modo de acesso: World Wide Web <www.feevale.br/editora> Inclui bibliografia. ISBN: 978-85-7717-159-0 l. Jogos Eletrnicos - Simpsios. 2. Games. 3. Tecnologia. I. Branco, Marsal. II. Malfatti, Silvano. III. Lamar, Marcus Vinicius. IV. Simpsio Brasileiro de Jogos e Entretenimento Digital. CDU 794:004 Editora Feevale Os textos assinados, tanto no que diz respeito linguagem como ao contedo, so de inteira responsabilidade dos autores e no expressam, necessariamente, a opinio da Universidade Feevale. permitido citar parte dos textos sem autorizao prvia, desde que seja identificada a fonte. A violao dos direitos do autor (Lei n. 9.610/98) crime estabelecido pelo artigo 184 do Cdigo Penal. Universidade Feevale Campus I: Av. Dr. Maurcio Cardoso, 510 CEP 93510-250 Hamburgo Velho Novo Hamburgo RS Campus II: ERS 239, 2755 CEP 93352-000 Vila Nova Novo Hamburgo RS Fone: (51) 3586.8800 Homepage: www.feevale.br

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

O Brasil da Tecnologia: Uma Viso da Intel


Qual a imagem que o mundo tem do Brasil? O mundo conhece a tecnologia que se desenvolve aqui? Para tentar responder a estas perguntas resolvi pesquisar na Internet, e como qualquer outra pessoa interessada em ver o Brasil pelo mundo online eu simplesmente digitei Brasil e <enter>, o que eu recebi foi uma coleo infinita de belas imagens de nossas paisagens, pontos tursticos, do povo bonito e claro, do futebol... mas de tecnologia no se v quase nada... O que leva a crer, para os leigos, que o Brasil consome sim muita tecnologia, mas pouco se produz aqui. O que um engano. O Brasil produz sim, muita tecnologia local, nas mais diversas reas da televiso digital aviao, passando pelas urnas eletrnicas, tecnologias embarcadas, automao comercial e bancria, extrao de petrleo, entretenimento e muitas outras reas em que o pas se destaca e referncia mundial. O que todas estas reas tm em comum? O uso de Software que tambm em muitos casos se desenvolve aqui. O Brasil j uma potncia em desenvolvimento de software, contando hoje com aproximadamente 350 mil profissionais da rea de desenvolvimento. E as previses indicam que em 2015 o pas j ter mais de 500 mil profissionais e ser o sexto maior pas em nmero de desenvolvedores de software no mundo (fonte: Evans Data Corp). Impressionante? Sim. Por acaso? No. Isto se deve unio da indstria, sociedade e governo que abraaram juntos o desafio de desenvolver aqui mesmo as solues para nossos problemas. Alguns podem at dizer que o perodo da reserva de mercado da dcada de 80 foi o grande responsvel por deflagrar o Brasil tecnolgico, talvez tenha sido em parte um catalisador importante, mas na verdade a reserva acabou h mais de 20 anos e o Brasil continua trilhando seu prprio caminho e liderando em diversas reas. E o futuro? O futuro o da criatividade e inovao, como mostra este livro. Da mesma maneira que o brasileiro cria contedo de entretenimento consumido no mundo todo e d dribles desconcertantes no futebol, tambm capaz de criar software e servios inovadores. Ns da Intel apostamos nisso, estamos no Brasil h mais de 25 anos, e neste perodo participamos ativamente do desenvolvimento das indstrias de hardware e software nacionais, tanto apoiando-a comercialmente como estabelecendo acordos de colaborao

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

tecnolgica com empresas do setor aqui presentes. Temos apoiado tambm a indstria com os Investimentos da Intel Capital, presente h mais de 10 anos no Brasil, e nos engajamos em projetos de relevncia nacional como, por exemplo, o apoio ao uso de tecnologia na educao. J treinamos no Brasil mais de 250 mil professores no uso de tecnologia em sala de aula e foi aqui que os primeiros computadores para o uso dos alunos foram concebidos, os Classmate PC. Voltando pergunta inicial, O mundo conhece a tecnologia que se desenvolve aqui? Talvez muitos ainda no conheam... Mas a Intel conhece e se orgulha de ter feito parte do processo de desenvolvimento da indstria nacional nos ltimos 25 anos. E como tecnologia uma lngua que j se fala aqui h muito tempo, deixo esta mensagem em hexadecimal para os iniciados: 6120496e74656c206163726564697461206e6f2042726173696c2c2071 75652076656e68616d206f73207072f378696d6f7320323520616e6f732121

Nuno Simes Intel Diretor de Iniciativas de Software Brasil

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

Caro Leitor
Neste ano, o Simpsio Brasileiro de Jogos e Entretenimento Digital (SBGames) chega a sua XI edio. Considerado o evento de pesquisa mais importante na rea de jogos e entretenimento digital da Amrica Latina, o SBGames faz parte de um mercado que cresce a cada ano e que possui como diferenciais a diverso, a criatividade e a inovao. Durante sua realizao, o SBGames proporciona espaos voltados discusso e pesquisa relacionadas as diversas reas que atravessam a produo dos jogos eletrnicos: Arte e Design, Computao e Indstria. Esses fruns no apenas representam pontos de encontros e de trocas, como marcam um momento em que desenvolvedores/pesquisadores organizam sua produo e apresentam resultados. Paralelamente, e para alm da pesquisa, o SBGames marca de maneira forte a produo de jogos propriamente dita. Uma das formas como faz isso um dos pontos altos do evento atravs do Festival de Jogos Independentes, uma competio de jogos desenvolvidos de forma Indie sem apoio de empresas ou rgos financiadores. A outra maneira atravs dos Tutoriais. Os tutoriais tm como objetivo estimular e propor prticas de desenvolvimento de jogos. So criados por profissionais experientes e de renome, com o intuito de proporcionar a troca de conhecimentos entre tutoriantes, comunidade acadmica e desenvolvedores. Neste ano, uma das principais novidades que nos deixa muito orgulhosos a publicao desse livro que constitui uma memria fsica dos cursos apresentados durante o evento. Alm do registro, espera-se que este livro cumpra sua funo de estmulo produo e multiplique conhecimentos para que alunos, professores e profissionais da rea aprendam e contribuam cada vez mais com a pesquisa e desenvolvimento de jogos em um pas que vem se destacando como um celeiro de bons profissionais nessa rea. A equipe do XI SBGames deseja a todos uma boa leitura.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

Este livro a concretizao de uma vontade antiga. Um velho desejo que de to maduro, quando acontece, nos d no apenas o prazer de v-lo realidade, mas vem acompanhado de um senso de realizao, de um trabalho (em todos os sentidos) construdo sobre a pacincia e disciplina. O SBGames se faz maduro. Como tal, conquista o livro que voc tem em mos e o faz da melhor forma possvel: pela mistura improvvel de habilidades, pessoas, instituies e embates que caracterizam o processo de maturao pela qual passa a indstria de jogos brasileira. Uma indstria que sofre as dores da profissionalizao, que tensiona e obriga mudanas e adaptaes rpidas. Indstria que se v representada nesse novembro de 2012 em Braslia, reunindo em um evento s articulaes cientficas, educacionais, polticas comunicacionais e tecnolgicas, alinhadas apontando um futuro brilhante. Os Tutoriais so fruto de uma demanda tcnica. Demanda que representa uma dimenso fundamental nos alicerces da indstria de jogos. No basta apenas levantarmos as bandeiras necessrias, todas do reconhecimento do uso dos jogos na sociedade, das regulamentaes, dos processos de gesto e na formao de recursos humanos. Os tutoriais no nos deixam esquecer as bases: preciso saber fazer jogos, colocar a mo na massa, se sujar em arte e cdigo. Os tutoriais representam a paixo silenciosa que nos faz atravessar as noites testando coisas, criando solues e novos problemas. Criando jogos. com esse sentido que entregamos a vocs o primeiro livro impresso dos tutoriais do SBGames. Um rebento modesto, mas um rebento e, sobretudo, uma vitria. T vivo, t a. Use-o sem moderao.

Dos chairs dos tutorias SBGames 2012 Marsal Branco, Silvano Malfatti e Marcus Vinicius Lamar

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

Sumrio
A Evoluo das Tcnicas de Inteligncia Artificial..............................10
Bruno Duarte Correa Thiago Dias Pastor

Gameficao - Uma Anlise das Tcnicas de Engajamento Atualmente Utilizadas...........................................................................23


Alexandre Sena Dennis Kerr Coelho

Introduo ao Desenvolvimento de Games com GWT e HTML5........35


Ely Fernando do Prado

Introduo ao Unity...............................................................................53
Jay Clei Garcia dos Santos

Organizando os Mapas de Iluminao dos Assets de Arte para os Motores de Jogos: Consideraes Metodolgicas para o Caso da Produo Voltada ao Motor de Jogos UDK...........................................84
Lus Carlos Petry Eliseu de Souza Lopes Filho Maigon Nacib Pontuschka Felipe Dacal Fragoso Gabriel Cavalcanti Marques Winna Hita Iturriaga Zansavio

Point Based Graphics e Aplicaes em Jogos......................................103


Luciano Silva

Sumrio

A Evoluo das Tcnicas de Inteligncia Artificial


Bruno Duarte Correa1 Thiago Dias Pastor2

Abstract
Since the dawn of the digital games there is a desire to replicate situations that make us somehow part of a context and closer to reality. The importance of artificial intelligence is at the convergence of this longing in simulating increasingly challenging realities. The techniques of artificial intelligence for games in general are part of a trend that argues that the role of IA is to simulate the behavior near human and not like other environments eg optimization objectives, seek to achieve levels of decision making and speed of reasoning very above an ordinary human being. Artificial intelligence in games is beginning to maximize the fun emulating a smart player just right, neither too smart nor too dumb demonstrating weaknesses purposeful. The purpose of this article is to demonstrate some techniques used in some classic and current games showing their uses and problems.

1 Introduo
Desde os primrdios dos jogos digitais existe a vontade de replicar situaes que nos faam de certa forma fazer parte de um contexto.Quanto mais prximo da realidade
1 Department of Computer and Digital Systems Engineering, Escola Politcnica da Universidade de So Paulo, Brazil. 2 Department of Computer and Digital Systems Engineering, Escola Politcnica da Universidade de So Paulo, Brazil.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

10

Sumrio

melhor tal experincia. A importncia da inteligncia artificial est na convergncia desse anseio em simular realidades cada vez mais desafiadoras. As tcnicas para jogos em geral fazem parte de uma vertente que defende o papel da IA como o de simular um comportamento prximo do humano, no como em outros ambientes com objetivos por exemplo de otimizao buscam atingir nveis de deciso e velocidade de raciocnio muito acima de um ser humano comum. A inteligncia artificial em jogos tem por princpio maximizar a diverso emulando um jogador inteligentes na medida certa, demonstrando fraquezas propositais. A proposta desse artigo demonstrar algumas tcnicas clssicas e algumas utilizadas nos jogos atuais mostrando os seus usos e problemas com o intuito de desmistificar a IA de alguns jogos e, como em um PostMortem, estimular o uso de tais tcnicas.

2 Histrico
No princpio, a inteligncia artificial nos jogos tinha o papel de alimentar mquinas caa nquel com o objetivo de manter o jogador por horas e horas entretido e gastando dinheiro. Jogos como Pong e Pac-Man utilizavam listas pr determinadas de aes e algumas poucas tomadas de deciso aleatrias na tentativa de tornar os jogos um pouco mais interessantes. Com o tempo, jogos comearam a utilizar tcnicas um pouco mais avanadas, mas ainda assim incipientes. Entretanto na dcada de 80 e 90 houve uma grande reviravolta com jogos preocupando-se com o papel da inteligncia artificial em ttulos como Age of Empires II e Warcraft II. Em 1998 a Valve revoluciona com HalfLife e um incrvel avano nos jogos em primeira pessoa. Em 2000 jogos como The Sims, totalmente focados na experincia do jogador com a inteligncia artificial em jogos que aprendiam com os jogadores, tambm contribuiram para a evoluo do mercado. A grande realidade que a inteligncia artificial comeou a tomar corpo nos jogos quando as empresas comearam a lev-la a srio como realmente uma rea de desenvolvimento que deve entrar no processo e no encarada como um adicional no jogo que em geral poderia ser desenvolvido no ltimo quarto de tempo do projeto, o que acabava por gerar comportamentos previsveis e jogos nem to desafiadores quanto poderiam ser. A viso atual da inteligncia artificial a de que ela seja totalmente direcionada a contribuir com o gamedesign de tal forma que facilite as modificaes de acordo com a concepo do jogo, podendo traduzir sentimentos e sensaes de forma a tornar a imerso dos jogos muito maior, e no mais encarar as tcnicas de inteligncia artificial como uma ferramenta para simplemente melhorar a experincia do usurio.

3 Motivao
A evoluo das tcnicas utilizadas em jogos eletrnicos evidente nos ltimos anos, tornando a experincia muito mais imersiva e trazendo jogos cada vez melhores. de suma importncia conhecer o estado da arte atual para aplicar tais recursos.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

11

Sumrio

4 Tcnicas bsicas
A classificao quanto s tcnicas clssicas e tcnicas atuais aqui empregada foi feita pensando na utilizao das mesmas e no por questes temporais como as mais antigas ou mais recentes. 4.1 Agentes Agentes so entidades capazes de perceber o ambiente atravs de sensores e modificlo atravs de atuadores. O nvel de percepo e o raio de atuao dos mesmos determina diretamente a qualidade da nossa abstrao do agente. A maneira como o conhecimento de um novo acontecimento no mundo transmitido entre outros agentes pode determinar uma reao justa ou no por parte dos agentes que no participaram de fato do evento. Um exemplo clssico desse problema demonstrada em um jogo de tiro, quando o personagem principal avistado por um inimigo e imediatamente todos os outros sabem sobre a sua localizao sem um prvio aviso. 4.1.1 Percepo Como explicitado no tpico anterior, a modelagem da percepo que o agente faz do cenrio dita em muito a qualidade da inteligncia artificial. Uma abordagem colocar sensores representando os cinco sentidos. Os mais comuns em ordem de usabilidade so viso e audio, mas podemos ter representaes de olfato ou tomadas de sensao de temperatura dando uma maior relevncia para as informaes de cena, auxiliando na deciso dos agentes. Outra abordagem colocando em evidncia a percepo de cena como um todo e no a percepo micro de um s agente so os blackboards, que tem por objetivo compartilhar informaes de acontecimentos em uma base comum de tal forma que todos os agentes tenham conhecimento. Essa abordagem a mais utilizada, porm preciso tomar cuidado para no tornar injusta a reao dos agentes.

Figure 1: Stira da percepo de um agente

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

12

Sumrio

4.2 Maquinas de estado O controle de eventos ou comportamentos totalmente ligado ao contexto do jogo. Sendo assim, separar em momentos bem definidos facilita em muito a segregao de eventos, uma melhor depurao de problemas e implementao de novos comportamentos.

Figure 2: Maquina de estados de um agente

Mquinas de estado so teis em todos os tipos de jogos por facilitarem a organizao de informao em momentos e servir como controle de tomada de deciso. 4.3 Navegao Os algoritmos de busca de caminho so a implantao de inteligncia artificial mais utilizadas em jogos eletrnicos, tendo solues das mais rudimentares s mais avanadas e em essncia podem ser divididos em: busca cega: a busca em que o agente no tem conhecimento do cenrio tendo apenas como indicador do caminho a seguir os sensores e uma funo objetivo que dita o quo bom tomar o prximo passo busca informada: o agente de alguma forma tem informao do ambiente em que se encontra, podendo formular uma soluo, conectando o ponto de origem ao ponto de destino de forma mais acertiva, em geral so solues mais elegantes, nos dando a impresso de um movimento mais fluido. Devemos entretanto nos preocupar em dosar o conhecimento dos personagens para no acabarmos com a naturalidade de uma busca por caminho que um ser humano comum precisa fazer para ir de um ponto A a um ponto B. Os algoritmos de navegao, por serem um grande objeto de estudo da robtica, so uma rea muito desenvolvida e geralmente subdividida em um nvel mais alto de abstrao em busca de caminho (pathfinding) e fuga de obstculos (obstacle avoidance). Nos jogos atuais essa diferena foi desaparecendo gradativamente, visto que raramente encontramos situaes em que no meio de nosso caminho no existam outros agentes ou mesmo obstculos mveis.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

13

Sumrio

4.3.1 A star uma busca do tipo informada, ou seja, o agente tem conhecimento do cenrio em que se encontra. Tem como algoritmo geral a Busca pela Melhor Escolha (best-first-search). De posse de uma rvore de possibilidades do prximo passo a tomar, ou prximo n a escolher. A grande diferena do A star para as outras implementaes de best-first-search que alm de levar em conta o melhor prximo n tambm leva em considerao a distncia j percorrida na equao, no somente o custo da expanso do n atual. 4.3.2 WayPoints Uma abordagem um pouco mais refinada para a busca de caminho o uso de WayPoints [~blog 2008], muito famosos em jogos como Counter Strike.

Figure 3: WayPoints em Halaa

Assim como as rvores de possibilidades nas busca informadas, os WayPoints so utilizados como modelo de representao do cenrio, porm de forma mais visual e intuitiva. Os WayPoints so ns bases sob os quais so interpoladas as posies intermedirias. Como observado nessa imagem, em alguns casos necessrio um nmero muito grande de ns e caso esses no forem bem posicionados podem causar zig-zags na movimentao dos personagens. Para ambientes mais complexos no difcil notar que essa uma fonte de erro muito grande. possvel notar tambm que mesmo com um nmero bem grande de pontos, ainda assim existem reas em que a qualidade da soluo est totalmente ligada maneira como interpolamos as informaes, visto que elas de fato no existem, o que pode ocasionar no clssico problema do personagem andando rente paredes ou estruturas. A utilizao dessa tcnica no prev qualquer informao fora do grafo, o que dificulta a retomada do caminho no advento de um obstculo mvel ou mesmo a mudana do cenrio por exemplo com a gerao de um buraco durante uma batalha. Os WayPoints

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

14

Sumrio

ainda so muito utilizados em jogos eletrnicos e muitas vezes se mostram suficientes para resolver o problema da navegao, mas em situaes um pouco mais complexas e querendo representar a movimentao de forma mais fluida ela se torna invivel. 4.4 Algoritmos Genticos Algoritmos genticos (AG) so em essncia ferramentas de busca local com um toque elevado de aleatoriedade, em geral utilizado para procurar solues fugindo do problema dos mnimos locais, atingindo resultados inesperados, o que para o universo dos jogos eletrnicos se torna muito interessante. Assim como o processo de evoluo humana, os AG passam por etapas como: Herana: durante o processo de gerao da prxima gerao alguns genes so herdados do pai ou da me, portanto de forma aleatria selecionada a origem de cada um. Mutao: alguns genes aps o processo de herana formando o descendente cannico so modificados para aumentar o fator aleatrio da prxima gerao. Seleo: segundo uma funo objetivo que dita o quo bom uma soluo , alguns descendentes so eliminados ou selecionados Cruzamento: assim como no processo de mutao alguns genes foram modificados, na etapa de cruzamento de cromossomos uma fatia do mesmo trocada com outro cromossomo. Um grande desafio de se obter AGs usuais para o universo de jogos eletrnicos o fato que esse processo assim como o processo de evoluo natural demorar para convergir para uma soluo tima, nesse caso devemos com uma funo objetivo bem calibrada atingir uma soluo boa. A deciso de como utilizar AG na soluo do problema em geral tambm esbarra na definio do cromossomo. Uma boa soluo totalmente dependente de uma boa modelagem do seu cromossomo. Em geral AGs so bem empregadas para definir comportamentos de personagens obtendo a partir de um dicionrio de possibilidades uma enorme variedade de personagens nicos e inusitados, sendo utilizado portanto massivamente em jogos de estratgia. 4.5 Redes Neurais As redes neurais, como citado em [~Charles1], assim como os algoritmos genticos, tentam imitar um comportamento da natureza, nesse caso buscam emular o funcionamento do nosso crebro que como j sabemos transmite e armazena informaes atravs de neurnios por meio de suas conexes e sinapses. A proposta das redes neurais formar a partir de uma base de dados conhecida e um processo de treinamento uma simulao de aprendizado, modificando conexes entre neurnios e seus pesos de importncia. Assim como nos algoritmos genticos a modelagem dos neurnios diretamente ligada

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

15

Sumrio

qualidade da soluo e velocidade de aprendizado. A idia de criar um jogo que aprenda com o jogador ou mesmo trein-lo na fase de balanceamento sempre empolgou os desenvolvedores, entretanto raramente feito de maneira aceitvel. O aprendizado basicamente dividido em: Supervisionado: fornecemos para a rede neural dados de entrada e a resposta desejada, sendo assim o sinal de entrada propagado por toda a rede e caso atinja uma soluo, tal comportamento reforado, do contrrio as conexes e pesos so refeitas de forma a aderir soluo. No Supervisionado: tenta a partir de uma base de dados inicial representar a estrutura estatsticas dos dados de entrada, sem saber na verdade a soluo, tenta a partir dos dados interpretar o comportamento esperado. Reforo: o comportamento que mais se assemelha maneira como aprendemos sozinhos, por tentativas e erro avaliando se estamos mais prximos de atingir o resultado esperado. Por exemplo como aprendemos a andar, a dirigir ou a lutar.

Figure 4: Aprendizado por reforo

O grande problema da rede neural mal desenvolvida o aprendizado no convergir para a soluo esperada, podendo, no extremo, por exemplo com um aprendizado no supervisionado aps varias entradas erradas, treinar a rede para responder de forma inesperada. As redes neurais podem ser empregadas em dois momentos: Balanceamento: de posse de uma massa de dados de testes feitos por testers calibramos a rede para responder de acordo com um comportamento previamente conhecido. Durante o jogo: com o uso de sensores e atuadores a rede interpreta durante o jogo os comportamentos e balanceia constantemente os pesos e conexes. Essa abordagem se no bem dosada pode gerar partidas muito difceis e desestimular o jogador, alm de ser mais complexa a formulao do algoritmo de aprendizado. Jogos como Black and White

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

16

Sumrio

usam massivamente o aprendizado por reforo durante o jogo, retirando feedbacks dos jogadores na tentativa de compreender os seus desejos.

Figure 5: Cena de Black and White

Jogos sociais como The Sims tambm utilizam aprendizado por reforo em tempo real para compreender o modo como o jogador gostaria que o seu avatar se comporte.

5 Tcnicas atuais
5.1 Behavior Tree uma mquina de estados finitos hierrquicos disposta na forma de uma rvore. De forma mais explcita um grafo direto aciclico e cada n pode ter vrias conexes permitindo o reuso de sub behavior trees como citado em [2009]. As behavior trees vieram para substituir a intangvel soluo de construir um grafo como uma mquina de estados com transies e aes definidas por uma abordagem mais simples com uma passagem por uma rvore de comportamentos hierarquicamente aninhados, alm de permitir a modificao em tempo real de maneira bastante intuitiva.

Figure 6: rvore de comportamento

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

17

Sumrio

Inicialmente o agente deve ser modelado como uma tabela de caractersticas e flags que sero modificados e consultados durante cada ciclo de passada pela rvore, formando a base de conhecimento do agente. Tal tabela deve ser feita com o mnimo possvel de informaes para facilitar a depurao. A cada ciclo, rodamos a base de conhecimento de cada agente na rvore, fazendo testes condicionais com o objetivo de atingir uma folha da rvore e executar uma ao. As aes usualmente so pedaos de cdigo que sero executados caso a folha seja atingida na passagem da rvore executando uma busca em largura. Uma caracterstica da behavior tree a fcil adio de novos comportamentos mesmo em tempo real, simplesmente anexando uma folha a algum n. Cada n composto basicamente por uma condio, uma lista de filhos e uma ao, podendo a lista e a ao serem nulas. Podemos adicionar tticas de grupos por exemplo simplesmente adicionando ao n uma quantidade mxima de participantes alm da sua condio. Atualmente utilizado em jogos como Halo 2, Halo 3, Crysis, Left 4 Dead e vrios outros ttulos. 5.2 Navegao Os jogos atuais tem abordagens com resultados mais fluidos do que os apresentados na seo anterior, conferindo ao movimento mais naturalidade e possibilitando uma melhor manipulao do mundo, facilitando a criao e modificao. 5.2.1 Steering Behavior Steering Behaviors um tpico bastante grande e no restrito navegao. Diversos efeitos interessantes como Flocking podem ser obtidos com o uso desta tcnica. Neste artigo nos restringimos a Steering Behaviors aplicado a navegao, em especial aos behaviors: AvoidObstacle, Seek, StayOnPath e AvoidNeighbors. Existem diversas maneiras de enxergar os Steering Behaviors, foi escolhida a abordagem baseada em campos eltricos pela sua fcil compreenso. Cada objeto no mundo virtual cria uma campo atrator ou repulsor. (Conceito bastante semelhante aos campos eltricos). Se um agente estiver sob o raio de ao de um destes campos, uma fora proporcional ao valor dele ir aparecer no agente. A intensidade e o decaimento destes campos so parmetros de difcil medio cujos valores vm da experincia do designer e da experimentao.

Figure 7: Campo sobre um agente

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

18

Sumrio

O projeto de um sistema de navegao seguindo Steering Behaviors completamente diferente dos sistemas clssicos usando PathFinding. No existe fase de pr-processamento para gerao de WayPoints alm da diferena na semntica das variveis que neste caso esto sempre relacionadas com a fsica. O primeiro passo de um sistema de Steering Behaviors definir um agente(o agente de Steering contm alguns atributos a mais do que um agente de PathFinding) que normalmente modelado como um veculo (entidade que possui uma acelerao, um torque e uma velocidade mximas, alm de um vetor direo que aponta para a sua frente e um sistema auxiliar que ir converter a resultante que o agente est submetido em variveis fsicas como acelerao). Este agente ir possuir alguns comportamentos chamados na tcnica de Behaviors. Um comportamento descreve como o agente ir enxergar os campos do mundo virtual (atrator ou repulsor). A seguir os comportamentos usados pelo sistema de navegao sero descritos: AvoidObstacle: comportamento bastante simples que consiste em enxergar os campos dos obstculos estticos como repulsores que decaem com a distncia. Seek: comportamento que consiste em enxergar o Destino como um atrator, ele ser um campo uniforme e no decair com a distncia. O Parmetro de entrada a posio do destino. AvoidNeighbors: comportamento bastante complexo (sua explicao detalhada esta fora do escopo do artigo) que consiste em evitar colises com outros agentes. O mtodo usado baseado em previso futura de posio (supor que os agentes mantero a mesma acelerao e velocidade, e prever sua posio em um tempo futuro prximo, verificar se existe alguma coliso em potencial e, se houver, enxergar a posio da coliso com o campo repulsor.

Figure 8: Comportamento AvoidNeighbors

StayOnPath: comportamento que mantm o agente atrado a um percurso. Fazendo uma analogia, seria como se o agente estivesse dentro de um tubo com atrao eltrica alta, sendo assim o agente sempre tenderia a voltar para a sua envoltria. Existem muitos outros comportamentos para o Steering Behavior. A grande vantagem de se utilizar essa abordagem obtermos comportamentos mais dinmicos e podermos adicionar novos comportamentos a qualquer momento visto que com a abordagem de

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

19

Sumrio

campos eltricos, cada comportamento no passa de um vetor a mais, somado ao movimento do agente. A utilizao isolada entretanto pode causar problemas muito srios, como por exemplo o personagem ficar preso em quinas ou devido ao mal calibramento dos campos, um objeto no conseguir chegar ao seu objetivo. Uma forma de corrigir tal problema com uma abordagem hbrida com A star, criando previamente um caminho entre origem e destino, e com um comportamento StayOnPath garantir que o caminho traado teria os pontos bons do A star, a garantia de convergncia, e do Steering Behavior, movimentao fluida e com adio de comportamentos. 5.2.2 Navigation Mesh Os Navigation Mesh como citado em [~blog 2008] so representaes do mundo assim como os WayPoints citados na seo anterior, entretanto ao invs de representar o modelo como uma lista de pontos, utiliza um modelo que demonstra os locais onde os agentes podem se locomover. Os meshes podem ser gerados em modeladores 3D em geral no mesmo momento que o designer est desenvolvendo o modelo do cenrio, j tem a possibilidade de desenvolver o terreno de locomoo. Como os meshes so representaes de posies livres para andar enquanto no houver movimentao ou modificao do cenrio, os testes de coliso podem ser reduzidos consideravelmente pois garantimos que nenhum NPC vai tentar atravessar alguma parede ou colidir com algum objeto. Com o uso dos WayPoints, tinhamos regies que eram interpoladas, com o uso dos Navigation Mesh, temos uma densidade de informao bem maior com uma quantidade de dados armazenado muito menor como mostra na figura:

Figure 9: Navigation Mesh em Halaa

Como temos uma densidade de informao bem maior, podemos ter uma interpolao entre pontos muito mais suave, e reaes para desviar de obstculos moveis que no tinham sido previstos no advento da criao da cena, por exemplo. Ao invs de representar o mapa como um grafo de pontos conectados, utilizamos como um grafo de polgonos convexos. Navigation Mesh so muito utilizados ultimamente por exemplo em jogos como: Halo 2, Halo 3, First Encounter Assault Recon (F.E.A.R.), Counter-Strike: Source, Metroid Prime, Metroid

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

20

Sumrio

Prime 2: Echoes, Metroid Prime 3: Corruption, Jak and Daxter: The Precursor Legacy, Jak II, Jak 3, Uncharted: Drakes Fortune, Scarface: The World is Yours e muitos outros. 5.3 Planning GOAP (Goal-Oriented Action Planning) GOAP como citado em [2003] e [2006] uma tcnica para tomadas de decises que produz uma sequncia de aes (plano) para atingir objetivos. O sistema composto por: Goal: qualquer condio que o agente deseja satisfazer; Action: um passo atmico no Plan que faz o personagem fazer algo; Plan: uma lista de Actions. um processo que no elimina as mquinas de estado mas simplificam em muito a sua utilizao alm de tornar dinmica a sua criao, sendo composto por um estado inicial, uma meta (Goal) e aes atmicas para concluir, assemelhando bastante com a idia de uma maquina de estados, entretanto, ao contrrio desta, as conexes podem ser vrias, obtendo uma grande gama de possibilidades, o que aumenta em muito a diversidade das solues, impedindo que o jogador aprenda como o jogo se comporta e burle a inteligncia artificial. Essa estrutura dinmica possibilita tanto solues inesperadas quanto uma fcil adio de novos comportamentos.

Figure 10: Processo de formao de soluo

A criao dos planos feita por uma busca em um grafo de aes em geral utilizando A star, considerando os ns como os estados e as arestas como aes. As vantagens sobre a soluo clssica de tomada de deciso das maquinas de estado que a princpio no necessrio determinar previamente todas as conexes que levam at as metas sendo que a nica coisa que temos que especificar so pr-condies e efeitos para cada ao. Devido flexibilidade e a facilidade de depurao e criao dos planos esta tcnica, apesar de considerada nova, est tomando fora frente aos novos jogos utilizada em jogos como F.E.A.R.(X360/PS3/PC), Condemned:Criminal Origins (X360/PC), S.T.A.L.K.E.R.: Shadow of Chernobyl (PC), Mushroom Men: The Spore Wars(Wii), Ghostbusters(Wii), Silent Hill: Homecoming ( X360/PS3), Fallout 3 ( X360/PS3/PC), Empire: Total War (PC), F.E.A.R. 2: Project Origin (X360/PS3/PC), Demigod (PC), Just Cause 2 (PC/X360,PS3), Transformers: War for Cybertron (PC/X360/PS3), Trapped Dead (PC), Deus Ex: Human Revolution (PC/X360/PS3).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

21

Sumrio

6 Tendncias
A evoluo da inteligncia artificial tem de estar sempre junto com a evoluo da qualidade grfica dos jogos, do contrrio todo o esforo em computao grfica ser em vo, obtendo jogos frustrantes. A simulao de eventos ou comportamentos tem de ser cada vez mais verossmil. Por isso existem desenvolvimentos de ferramentas de teste e calibrao dos algoritmos de forma mais intuitiva para que o designer possa modificar os dados sem a ajuda de um programador. Com a migrao de parte do processamento da inteligncia artificial para as placas de vdeo, o poder computacional empregado crescer bastante, sendo possvel por exemplo o desenvolvimento de simulao de multido mais realista e cut scenes interativas eliminando os cinematics pr renderizados. Uma forte tendncia aumentar o poder das IAs online, podendo evoluir o aprendizado de redes neurais a partir de informaes dos jogadores.

7 IA na GPU
Devido ao crescente papel da inteligncia artificial nos jogos eletrnicos o percentual ocupado de cada ciclo de atualizao comeou a tornar-se significativo, influenciando no tempo de renderizao, simulao fsica ou gameplay. Como no podemos reduzir a qualidade das simulaes fsicas ou diminuir a qualidade visual do jogo, a nica soluo era utilizar o tempo ocioso da placa de video enquanto no estivesse renderizando para fazer clculos para IA. fato que ainda so poucas as implementaes que se utilizam de tal benefcio, mas a tendncia a de cada vez mais migrar para a GPU, visto que a mesma possui poder de processamento muito superior ao da CPU para clculos vetoriais ou repetitivos.

References
[~blog 2008] ai blog, 2008. Why waypoints arent for pathfinding, 7. [and Mcglinchey] Charles, D., and Mcglinchey, S. The past, present and future of artificial neural networks in digital games. [2003] Orkin, J., 2003. Applying goal-oriented action planning to games. [2006] Orkin, J. 2006. Three states and a plan: The a.i. of f.e.a.r. GDC. [2009] Pilosu, R., 2009. Coordinating agents with behaviour trees. [2004] Reynolds, C. W., 2004. Steering behaviors for autonomous characters.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

22

Sumrio

Gameficao - Uma Anlise das Tcnicas de Engajamento Atualmente Utilizadas


Alexandre Sena1 Dennis Kerr Coelho2

Resumo
O sucesso que os jogos eletrnicos, ou games, vm fazendo em todas as faixas etrias inegvel e grande parte deste sucesso s pode ser explicado analisando certos aspectos do game relacionados com sua habilidade de manter o jogador o maior tempo possvel interessado. Para entender o que cativa um jogador importante descobrir suas motivaes e de que formas os games trabalham seus desejos e geram novas motivaes. Estudos demonstram que possvel a utilizao de tcnicas de engajamento idealizadas para incutir no jogador emoes e sentimentos, conforme o seu perfil, para garantir seu interesse no game, aumentando o tempo dedicado ao mesmo. Este tutorial apresenta alguns cases de softwares de setores considerados tradicionais que utilizaram tais tcnicas e assim se beneficiaram de um processo de gameficao, o qual pode ser definido como o uso das mecnicas de game em aplicativos e software. A ideia encorajar os usurios a adotar comportamentos desejveis por meio de tcnicas que tiram vantagem das caractersticas psicolgicas humanas. Mas vale a pena ressaltar que a gameficao pode auxiliar em muito o setor tradicional de software, mas no se deve esperar que a ela seja a soluo mgica para qualquer coisa. Ou seja, estas

1 Universidade Federal de Santa Catarina, Departamento de Engenharia e Gesto do Conhecimento, Brasil. 2 Universidade do Vale do Itaja, Centro de Cincias Tecnolgicas da Terra e do Mar, Brasil.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

23

Sumrio

tcnicas podem agir como ferramentas complementares, mas no oferece vantagem se o servio/atividade onde esto sendo implementados, no ofeream a sensao de realizao. Palavras-chaves: Games. Motivao. Perfil do jogador. Tcnicas de engajamento.

Introduo
O sucesso que os jogos eletrnicos, ou games, vm fazendo em todas as faixas etrias inegvel. Segundo a consultoria online (Newzoo, 2011), h nos Estados Unidos 145 milhes de jogadores (43% da populao), os quais passaram 215 milhes de horas jogando videogame por dia. Grande parte deste sucesso s pode ser explicado analisando certos aspectos do game relacionados com sua habilidade de manter o jogador o maior tempo possvel interessado. Deste modo, a primeira seo deste tutorial se dedicar a apresentar conceitos tericos que auxiliaro na contextualizao da base dos estudos. Em especial alguns aspectos psicolgicos, como a motivao. A segunda seo do tutorial apresenta a motivao no contexto apresentado pela indstria de games, por meio de seus desenvolvedores. Pois como diz Ghozland (2010), a importncia do game est relacionada com a capacidade do mesmo em gerar e manter o interesse dos jogadores, sendo a motivao o fator que define o tempo que este jogador se manter jogando, alguns minutos ou vrias horas. A terceira seo dedica-se demonstrar um resumo das diversas tcnicas de engajamento e alguns exemplos de games que as utilizaram, bem como uma proposta dos melhores usos de cada tcnica, tendo em vista o perfil do jogador. Para finalizar feito um levantamento na quarta seo sobre como as tcnicas identificadas anteriormente esto sendo implementadas por softwares tradicionais, por meio da gameficao.

Conceituao Terica
Antes do estudo dos cases esta seo se dedica a apresentar alguns conceitos bsicos no que se refere aos aspectos psicolgicos deste tema. Os primeiros conceitos so aqueles relacionados a dimenso subjetiva, a qual pode ser reconhecida tambm em produes para games por meio de representaes sociais, identidade social, ideologia, valores, rituais, hbitos, costumes, leis e regras. A subjetividade cria produtos coletivos, nos quais se percebe a participao de sujeitos. (Gonalves & Bock 2009) O psiquismo uma chave para entender esta subjetividade, sendo suas principais categorias: atividade, conscincia, identidade e afetividade. Tais categorias permitem pensar a realidade psquica em seu movimento de transformao e nas relaes que se estabelecem para a produo do que chamado subjetividade. (Gonalves & Bock 2009)

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

24

Sumrio

E um fator que influencia definitivamente na criao da subjetividade a motivao. Em seus estudos, Matlin (2004) faz uma grande pesquisa sobre motivao, utilizando como referncia diversos autores. Como base nestes estudos, algumas consideraes podem ser feitas sobre este assunto. H, por exemplo, dois tipos de motivao: a intrnseca e a extrnseca. A primeira se refere motivao para se trabalhar com aquilo que se considere interessante, empolgante ou pessoalmente desafiador. O segundo tipo, por sua vez trata da motivao para se trabalhar em um determinado assunto com a promessa do recebimento de uma recompensa. A autora identificou ainda uma relao entre motivao intrnseca e a criatividade, ou seja, as pessoas tendem a ser mais criativas quando fazem algo que lhes d prazer. Mas no se pode simplesmente descartar a motivao extrnseca como forma de alcanar resultados criativos. Uma anlise mais detalhada sugere que alguns tipos de motivao extrnseca na verdade podem melhorar a criatividade. Um exemplo o proveito que se pode ter da motivao extrnseca quando ela vem na forma de informaes teis e quando ajuda a executar uma tarefa com mais eficincia.

Figura 1 Resumo de teorias clssicas (Vassileva 2012)

Finalizando esta seo, a figura 1 apresenta um interessante resumo de teorias clssicas que podem auxiliar a entender aspectos psicolgicos importantes para o estudo da motivao, os quais valem destacar (Vassileva 2012):
Garantir recompensas, segundo a teoria da motivao extrnseca, leva o sujeito a realizar uma determinada ao ou apresentar um determinado comportamento; Todos os seres humanos necessitam socializar e procuram por formas de reconhecimento social e de status; Reconhecimento e reputao esto associados com as capacidades do sujeito (Teoria da auto-eficcia de Bandura); A teoria da cognio dissonante cita que as pessoas tendem a comparar-se quelas que consideram semelhantes a elas, e objetivam com isto avaliar formas de melhoria. A comparao social parece ser um poderoso incentivo para aumentar a contribuio em comunidades online.

Motivao do Jogador
Para entender o que cativa um jogador importante descobrir suas motivaes e de que formas os games trabalham seus desejos e geram novas necessidades. O santo graal da

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

25

Sumrio

indstria dos games decifrar o mecanismo da motivao do jogador. Game Designers ao redor do mundo esto tecendo suas teorias sobre a motivao dos jogadores e como tirar proveito dela em seus games. Segundo Ghozland (2010):
A importncia da experincia de um jogo depende de quanto interesse ele pode gerar. Criar e manter o interesse dos jogadores a maneira de gerir a sua motivao. Sua motivao o fator que ir determinar se um jogador vai continuar a jogar depois de alguns minutos, bem como quanto tempo ele vai jogar e se ele vai terminar o jogo.

O objetivo desta seo mesclar o contedo prvio apresentado com a viso de mercado. O primeiro passo entender como os game designers utilizam a motivao, em especial a intrnseca. Em 1996, Bartle publicou um estudo onde prope uma taxonomia para entender como os diversos perfis de jogadores so motivados. Como pode ser observado na figura 2, os jogadores foram divididos em quatro categorias: Realizadores, Exploradores, Socializadores e Predadores.

Figura 2 - Taxonomia de Jogadores (Bartle, 1996)

Os realizadores so motivados por fazer o que o game lhes pede (misses, quests, etc.) e em agir sobre o mundo virtual. O ambiente do game um mundo pleno e ele pode mergulhar da maneira que achar mais atraente. O compartilhamento deste mundo com outros jogadores normalmente apenas adiciona um pouco de autenticidade imerso e, talvez, um elemento competitivo. Realizadores se orgulham de seu status formal na hierarquia do game e do pouco tempo que eles levaram para alcan-lo. J os exploradores esto interessados em serem surpreendidos pelo game, ou seja, em interagir com o mundo criado e descobrir seus segredos. o sentimento de admirao que os motivam a seguir em frente. Outros jogadores adicionam profundidade ao game, mas eles no so componentes essenciais para sua permanncia, exceto, talvez, como meios de acesso a novas reas. Exploradores se orgulham de seu conhecimento dos pontos mais delicados do game e gostam de se considerarem gurus para os jogadores menos experientes.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

26

Sumrio

A terceira categoria, os socializadores, esto interessados em interagir com outros jogadores. Isso geralmente significa conhecer, informar-se e comunicar-se com outros jogadores. Muito mais do que trat-los como um simples meio de atingir seus objetivos, o socializador se orgulha de suas amizades, seus contatos e sua influncia. Finalmente, os predadores esto interessados em demonstrar sua superioridade sobre outros jogadores. Normalmente veem estes outros jogadores como adversrios ou meras ferramentas para seus objetivos, no se importando com a interao social. Usam o mundo do game como uma catarse, realizando aes que no mundo real no seriam permitidas. Predadores se orgulham da sua reputao e de suas habilidades frequentemente praticadas em combate. Fica claro que o entendimento dos perfis dos jogadores auxilia os desenvolvedores a incluir elementos que garantem a existncia da motivao intrnseca. Contudo, tal fator isolado no pode garantir o sucesso de um game. Alm deste aspecto, Clark (2007) identificou outras seis caractersticas subjetivas que fazem os games cativantes: autonomia, auto-confiana, desafios, feedback, metas e interao social. Uma anlise mais aprofundada demonstra que entre estas sete caractersticas, uma relativa aos aspectos do relacionamento coletivo (interao social); trs esto focadas com aspectos inseridos no game (desafio, feedback e metas); e os trs ltimos necessitam ater-se a uma dimenso subjetiva da realidade, pois dependem da produo de certas emoes no indivduo para gerar os efeitos desejados (motivao intrnseca, autonomia, autoconfiana). Para tanto importante a insero no game de uma narrativa criativa e no- linear, que tenha suporte nos diferentes elementos hipermiditicos fornecidos por videogames e computadores. H trs elementos que devem ser inseridos nesta narrativa, assim como no prprio design do game: necessidade, desafios e recompensas. Deste modo, gerenciando essas trs variveis seria possvel gerenciar a motivao do jogador assim como os demais elementos subjetivos. Tendo isto em vista, Ghozland (2010) argumenta que o design do game deve construir o ciclo de necessidades do jogador e depois respond-las com uma sucesso de desafios e recompensas. Esta estrutura inerente a um game construdo em torno dos princpios de crescimento, progresso e realizao do individuo, afetando diretamente seu sentimento de autonomia e autoconfiana. Alm dos fatores previamente apresentados, Novak (2010) apresentou complementarmente em seu livro outros fatores que motivam os jogadores a continuarem jogando: Escapismo: Muitos jogadores indicam que tendem a jogar para escapar das tenses e dos desafios da vida real. O mundo imaginrio do game segue suas prprias regras, algumas das quais so menos restritivas que as da vida real.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

27

Sumrio

Compulso: Alguns jogadores afirmam que so motivados pela tendncia de concentrar-se em uma atividade em prejuzo de todas as demais. Uma dos maiores elogios que um game designer pode receber de um jogador e ele dizer que o game viciante.

Tcnicas de Engajamento
Com base no exposto, possvel a utilizao de determinadas tcnicas para incutir no jogador emoes e sentimentos, conforme o seu perfil, para garantir seu interesse no game, aumentando o tempo dedicado ao mesmo. Estas tcnicas de engajamento so recursos de game design utilizados para motivar e manter um jogador interessado no game. Existem vrias tcnicas que vm sendo usadas nos mundos dos games a bastante tempo, mas foi a partir do sucesso dos games para redes sociais que mais pesquisas foram feitas. Essa popularizao fez com que fossem criadas pequenas receitas de bolo que podem ser utilizadas nos mais diversos games ou aplicativos. A seguir so apresentadas algumas destas tcnicas. Achievements ou Badges so pequenos prmios virtuais na forma de bottons ou insgnias, esses prmios so oferecidos aos jogadores depois de realizarem alguma tarefa ou obterem alguma conquista. Segundo Zichermann e Cunningham (2011), badges so uma excelente maneira de incentivar a promoo social de produtos e servios relacionados ao game. Badges tambm marcam a concluso das metas e o progresso constante dentro do sistema do game.

Figura 3 Exemplo de badges do game Battlefield: Bad Company 2

Desafios e Misses so tcnicas muito utilizadas para manter o jogador ocupado ou evitar a sensao de fim do game. Alm disso, essas tcnicas fazem com que o jogador siga um caminho no mundo virtual condizente ao planejado pelo game designer. Algumas pessoas entram no game sem a menor ideia de seus objetivos ou fundamentos, assim, mesmo se um desafio no est no centro da experincia do game, utilizar desafios uma opo para adicionar profundidade e significado para o jogador. (Zichermann & Cunningham 2011)

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

28

Sumrio

Figura 4 - No Game CityVille quests so uma forma do game designer orientar o jogador na forma deste interagir com o mundo criado

Rankings e Leader Boards objetivam incentivar a competio entre os jogadores, fortalecendo assim sua motivao para jogar e evoluir.

Figura 5 - A utilizao de Learder Boards pea fundamental no game Fruit Ninja

Progress Bar demonstra a evoluo do jogador ao longo do game, assim o jogador sabe o quo perto de completar algum desafio ou objetivo ele se encontra. Uma recurso muito adotado pelos desenvolvedores sempre manter o jogador perto de finalizar uma progress bar, seja mudar de nvel de experincia, melhorar uma habilidade ou adquirir uma arma melhor. Deste modo, no momento que um objetivo alcanado, outro est muito prximo de ser completado, o que aumenta o tempo de permanncia.

Figura 6 - Exemplo da progress bar do MMO World of Warcraft

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

29

Sumrio

Gifting um sistema implementado no game para aumentar a interao social. Com esse sistema o jogador estimulado a dar presentes para seus amigos, os quais so atradas ao game. A troca diria de presentes pode criar grupos fiis de jogadores que retornam periodicamente.

Figura 7 - Opes de presentear amigos se tornou rapidamente item obrigatrio de qualquer jogo em redes sociais, como o caso do game FrontierVille

Como base no exposto, a tabela a seguir apresenta uma proposta dos autores do melhor uso de tcnicas de engajamento, tendo em vista o perfil do jogador e os aspectos subjetivos envolvidos.
Tabela 1 - Relao entre tcnicas de engajamento e subjetividade (fonte: autores)
Tcnicas de Engajamento Achievements ou Badges Caractersticas Reforadas Autonomia, auto-confiana, desafio, feedback, metas, escapismo, compulso. Motivao intrnseca, Desafios e Misses auto-confiana, desafio, feedback, metas, escapismo, compulso. Autonomia, auto-confiana, desafio, metas, interao social. Motivao intrnseca, Progress Bar auto-confiana, desafios, feedback, metas, compulso. Interao social. Todos Realizadores, Exploradores Perfil do Jogador Realizadores, Socializadores, Exploradores

Rankings e Leader Boards

Predadores, Socializadores

Gifting

Socializadores

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

30

Sumrio

A proposta apresentada na tabela 1 uma simples generalizao, pois como Bartle tambm mencionou em seu trabalho, os jogadores podem apresentar, mesmo e menor grau, caractersticas de diversos perfis simultaneamente.

Cases
A presente seo apresenta alguns cases de softwares de setores considerados tradicionais que utilizaram tcnicas de engajamento e assim se beneficiaram de um processo de gameficao. Gameficao o uso das mecnicas de game em aplicativos e softwares. A ideia encorajar os usurios a adotar comportamentos desejveis por meio de tcnicas que tiram vantagem das caractersticas psicolgicas humanas. Essas tcnicas encorajam o usurio a realizar tarefas consideradas normalmente entediantes como completar uma pesquisa, comprar algo, ou manter um cadastro atualizado. O Foursquare, por exemplo, um servio baseado em localizao com mais de 20 milhes de usurios em sua plataforma. O servio foi construdo em torno de tcnicas de engajamento. Os usurios podem reclamar de prefeituras, destravar os badges, receber ofertas especiais e recompensas, tais como descontos, e disputar contra amigos por meio de um ranking. Utilizando as tcnicas de engajamento o Foursquare cria e mantm uma base de dados da localizao de locais e construes de interesse das pessoas. Pessoas que acabam buscando no Foursquare informaes mais detalhadas sobre esses lugares. Com essa estratgia o Fousquare construiu essa base de dados com um custo infinitamente menor ao de outras empresas que construram atravs de suas prprias foras.

Figura 8 - Exemplo de aquisio de Badge

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

31

Sumrio

Apesar da falta de estudos cientficos, outra rea que parece se beneficiar do potencial das tcnicas aqui apresentadas so as solues para ERP e CRM. Entendendo este potencial, a Salesforce.com permitiu que terceiros desenvolvessem solues que se integrasse ao seu CRM com utilizao de leaderboards e badges, como demonstrado na figura 9.

Figura 9 - Exemplo de ranking e badges

Um fator apontado por JP Rangaswami, cientista chefe da Salesforce.com que o uso de badges e ranking traz inmeras vantagens. Para o funcionrio da empresa, ao receber um distintivo virtual toda vez que ele realiza uma ao a favor da empresa, ou toma a iniciativa de capacitar-se, fica evidente aos indivduos que a empresa est acompanhado os esforos e motivando o crescimento. Como empresa, ter um resumo visual de cada colaborador da forma apresentada na figura 9 facilita em muito o processo de criao de equipe de trabalho ou acompanhar a performance de uma equipe de vendedores, por exemplo. A rede social LinkedIn tambm oferece um pequeno exemplo de gameficao ao incentivar usurios a completar seu perfil, por meio de uma barra de progresso sempre visvel. Ao fornecer este recurso, os desenvolvedores esperam desencadear um comportamento que impele o usurio tentar chegar aos 100%. O gerenciado financeiro pessoal Mint oferece um score para seu desempenho em gesto financeira baseada em tcnicas de engajamento associadas com a progresso do usurios na concluso de tarefas e quests. Ao tornar uma atividade comum em uma experincia de game casual, o Mint cria uma oportunidade para impulsionar a aquisio de novos usurios de uma forma criativa. Para finalizar, vale ressaltar que a gameficao pode auxiliar em muito o setor tradicional de software, visto que a gerao atualmente ativa no mercado de trabalho, mesmo aqueles que no so gamers, com certeza esto familiarizados com os mecanismos utilizados nos games (competividade, rankings, etc.) Contudo, no se pode esperar que a gameficao seja a soluo mgica para qualquer coisa. Ou seja, estas tcnicas podem agir como ferramentas complementares a uma estratgia da empresa, mas no oferece vantagem se o servio/atividade onde esto sendo implementados no ofeream a sensao de realizao.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

32

Sumrio

Referncias
Anderson et al., 2004. Continental Airlines Flies High with Real-time Business Intelligence Continental Airlines Flies High with Real-time Business Intelligence Introduction. MIS Quarterly Executive 3, (4), pp.163 176. Bartle, R., 1996. Heart , Clubs , Diamond , Spades: players who suit muds. The Journal of Virtual Environments, 1(1). Available at: http://www.mud.co.uk/richard/hcds.htm [Accessed February 9, 2012]. Clark, D., 2007. Games , motivation & learning, Sunderland, UK. Available at: www. caspianlearning.co.uk. Cooper, B.L. et al., 2000. Data Warehousing Supports Corporate Strategy at First American Corporation. MIS Quarterly, 24(4), pp.547567. Cooper, S. et al., 2010. Fold it. Available at: http://fold.it/portal/about [Accessed June 12, 2012]. Coren, M.J., 2011. Foldit Gamers Solve Riddle of HIV Enzyme within 3 Weeks. Scientific American, p.1. Garrido-Moreno, A. & Padilla-Melndez, A., 2011. Analyzing the impact of knowledge management on CRM success: The mediating effects of organizational factors. International Journal of Information Management, 31(5), pp.437444. Available at: http://linkinghub.elsevier.com/retrieve/pii/S026840121100003X [Accessed July 20, 2012]. Ghozland, D., 2010. Designing for Motivation. Gamasutra, pp.19. Available at: http:// www.gamasutra.com/view/feature/1419/designing_for_motivation.ph p. Gonalves, M. da G.M. & Bock, A.M.B., 2009. A dimenso subjetiva dos fenmenos sociais. In M. da G. M. Gonalves & A. M. B. Bock, eds. A dimenso subjetiva da Realidade Uma leitura scio-histrica. So Paulo: Cortez Editora, p. 160. Hajji, A. et al., 2012. Dynamic pricing models for ERP systems under network externality. International Journal of Production Economics, 135(2), pp.708715. Available at: http://linkinghub.elsevier.com/retrieve /pii/S0925527311004348 [Accessed August 5, 2012]. Matlin, M.W., 2004. Psicologia Cognitiva 5a Ediao., Rio de Janeiro: LTC. Newzoo, 2011. Infograph US. Newzoo. Available at: http://www.newzoo.com/templates/ dispatcher.asp?page_id=1589 [Accessed February 11, 2012]. Novak, J., 2010. Desenvolvimento de Games, So Paulo: Cengage Learning. Polat, K. & Durduran, S.S., 2011. Subtractive clustering attribute weighting (SCAW) to

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

33

Sumrio

discriminate the traffic accidents on Konya Afyonkarahisar highway in Turkey with the help of GIS: A case study. Advances in Engineering Software, 42(7), pp.491500. Available at: http://linkinghub.elsevier.com/retrieve /pii/S0965997811000573 [Accessed August 5, 2012]. Ramakrishnan, T., Jones, M.C. & Sidorova, A., 2012. Factors influencing business intelligence (BI) data collection strategies: An empirical investigation. Decision Support Systems, 52(2), pp.486496. Available at: http://linkinghub.elsevier.com/retrieve /pii/ S0167923611001722 [Accessed July 25, 2012]. Vassileva, J., 2012. Motivating participation in social computing applications: a user modeling perspective. User Modeling and User- Adapted Interaction, 22(1-2), pp.177 201. Available at: http://www.springerlink.com/index/10 .1007/s11257-011-9109-5 [Accessed March 26, 2012]. Wybo, M., Robert, J. & Lger, P.-M., 2009. Using search theory to determine an applications selection strategy. Information & Management, 46(5), pp.285293. Available at: http://linkinghub.elsevier.com/retrieve /pii/S0378720609000597 [Accessed August 5, 2012]. Zichermann, G. & Cunningham, C., 2011. Gamification by Design: Implementing Game Mechanics in Web and Mobile Apps 1st ed., Sebastopol (CAN): OReilly Media, Inc.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

34

Sumrio

Introduo ao Desenvolvimento de Games com GWT e HTML5


Ely Fernando do Prado1

Figura 1: Logotipos do Google Web Toolkit e do HTML 5

Resumo
O advento da tecnologia do HTML 5 tem aberto um novo mercado de jogos para internet, onde os usurios podem interagir com o game atravs de diferentes equipamentos, como computadores, tablets e celulares sem a necessidade de instalao prvia da aplicao ou mesmo algum plug-in. Por outro lado o framework Google Web Toolkit tem se mostrado uma boa alternativa para desenvolvimento de aplicaes ricas para internet, utilizando a linguagem Java para gerar cdigos HTML, CSS e JavaScript. Assim este trabalho tem por objetivo apresentar o framework GWT como soluo para o desenvolvimento de jogos para
1 Departamento de Computao, Universidade Federal de So Carlos (UFSCar), So Carlos, SP; Libertas Faculdades Integradas, So Sebastio do Paraso, MG; Universidade de Franca (Unifran), Franca, SP. Authors contact: ely.prado@dc.ufscar.br

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

35

Sumrio

internet em HTML5, demonstrando todos os passos necessrios para codificao de um game loop, animaes e interao com o usurio. Keywords: GWT. HTML5. Jogos. Canvas.

1. Introduo
Atualmente estamos presenciando um grande crescimento na demanda por jogos para internet. Outro acontecimento que est em bastante evidencia hoje o surgimento e amadurecimento do HTML 5, que tem possibilitado a criao de jogos que rodam direto no navegador de maneira leve e prtica. A principal motivao para este tutorial o grande crescimento no mercado de jogos para internet. O surgimento do HTML 5 permitiu que passssemos a desenvolver aplicaes complexas para internet, sem ter que depender de algum plug-in especfico. Alm disso, aplicaes desta natureza podem ser executadas em qualquer dispositivo que possua internet, como computadores, tablets e celulares de qualquer sistema operacional atual. Um bom exemplo que tem alcanado bastante sucesso entre o pblico so os jogos adicionados no logotipo do Google, chamados doodles. Os doodles games so adicionados ao site de pesquisa do Google em comemorao a alguma data ou evento especial, e so jogveis no prprio site. Graas a grande experincia alcanada pelos engenheiros da Google no setor de aplicaes ricas para internet, foi criado por eles o framework Google Web Toolkit (GWT), que tem facilitado muito criao de aplicaes complexas na web, incluindo os jogos. O objetivo deste tutorial apresentar o framework GWT como uma alternativa para o desenvolvimento de jogos para internet. Para isso ser apresentado como se d o desenvolvimento de um jogo nesta tecnologia, sendo um jogo com poucas funcionalidades, porm o suficiente para dar os primeiros passos neste framework.

2. HTML 5
O padro HTML5 complementa as capacidades das normas existentes no HTML com vrios novos recursos. Embora o HTML5 seja um padro web de propsito geral, muitos dos novos recursos so destinados diretamente para tornar a Web um lugar melhor para aplicaes web com estilo desktop. Dentre os novos recursos esto a capacidade das aplicaes executarem em modo off-line e de armazenar dados localmente no computador ou dispositivo. Um recurso importante, especialmente quando se trata de desenvolvimento de jogos o elemento Canvas, que oferece uma tela de desenho 2D, permitindo o desenho de formas grficas, imagens e texto em tempo de execuo. Outros recursos disponibilizados pelo HTML5 so para permitir que arquivos de mdia (udio e vdeo) sejam executados no navegador sem necessidade de plug-in externo, tambm h elementos para carregamento de dados de

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

36

Sumrio

forma assncrona e apoio para eventos de arrastar e soltar. Alm dos recursos citados, a especificao HTML5 define inmeros outros acrscimos, mas muitas destas especificaes, bem como a especificao do HTML5 em si, esto ainda em definio, de modo que na verso final os seus detalhes podem variar. (Taivalsaari e Mikkonen, 2011) Para o desenvolvimento de jogos o HTML por si s no suficiente. O HTML uma linguagem de marcao, que permite incluir elementos em uma pgina, como campos de formulrio, texto, imagens, canvas, etc. Mas todos esses elementos so estticos. Para superar as limitaes do HTML podemos utilizar o Javascript, pois a ao toda precisa ser escrita em uma linguagem de programao. Javascript uma linguagem de programao poderosa, com sintaxe baseada em C++, porm com suporte apenas parcial orientao a objetos. Javascript uma linguagem interpretada, sendo assim sua velocidade de execuo e sua compatibilidade depende da mquina interpretadora que o navegador possui. (Nrnberg, 2011)

3. Google Web Toolkit


O framework GWT (Google Web Toolkit) foi criado para facilitar o desenvolvimento de aplicaes ricas para web fornecendo uma camada de abstrao, que esconde os detalhes do Javascript e tambm as diferenas entre os ambientes especficos dos navegadores. Toda aplicao escrita utilizando a linguagem Java, e o framework GWT traduz este cdigo em JavaScript, DHTML e CSS. Ao efetuar esta compilao so geradas verses especificas da aplicao para cada tipo de navegador, tornando a aplicao compatvel com os mais variados ambientes, e tambm com as diferentes verses desses navegadores. (Smeets, Boness e Bankras, 2009) Seu objetivo permitir o desenvolvimento produtivo de aplicaes Web de alto desempenho sem que o desenvolvedor necessite ser um especialista nas peculiaridades de cada navegador, XMLHttpRequest e JavaScript GWT um framework essencialmente para o lado do cliente (cliente-side) e d suporte comunicao com o servidor atravs de RPCs (Remote Procedure Calls). Ele no um framework para aplicaes clssicas da web, pois deixa a implementao da aplicao web parecida com implementaes em desktop. Para quem est habituado a desenvolver aplicaes desktop, especialmente na linguagem Java se sente familiarizado com o uso do framework GWT. (Geary, 2008) O GWT utilizado por muitos produtos do Google, incluindo o Google Wave e Google AdWords. Tem sido utilizado tambm para a construo de jogos para internet, como por exemplo, a verso web do jogo Angry Birds. GWT de cdigo aberto, totalmente gratuito, e utilizado por milhares de desenvolvedores ao redor do mundo. Est disponvel sob a Licena Apache v. 2.0, concedendo-lhe uma licena perptua, mundial, no exclusiva, sem nenhum custo, isenta de royalties, direitos autorais irrevogveis para reproduzir, preparar trabalhos derivados, publicamente exibir, executar publicamente, sublicenciar e distribuir o trabalho.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

37

Sumrio

J que GWT compila cdigo Java para JavaScript, importante questionarmos quais so as vantagens de se desenvolver a aplicao em Java com GWT, ao invs de escrever diretamente em cdigo JavaScript. A vantagem mais bvia est no fato de GWT criar JavaScript perfeitamente compatvel com os diferente navegadores, sendo assim no precisamos escrever estruturas condicionais para cuidar das diferenas do navegadores. Mas Dwyer, 2008, ainda faz a seguinte afirmao: h trs reas especficas em que o GWT supera o JavaScript: escalabilidade, suporte refatorao, e familiaridade.. Isso se deve ao fato de GWT utilizar a linguagem Java, que apesar de seu nome sugerir o contrrio, Java tem mais diferenas com JavaScript do que igualdades.

3.1 Ambiente de Desenvolvimento


Como o framework GWT executa sobre a plataforma Java, voc pode preparar seu ambiente de desenvolvimento nos principais sistemas operacionais disponveis (Windows, Linux ou MacOS), porm necessrio ter instalado o Kit de Desenvolvimento Java em seu computador. Alm disso, requisito bsico ter feito download e descompresso do Google Web Toolkit SDK. Ambas ferramentas citadas podem ser encontradas nos links a seguir: Java SE Development Kit (JDK): http://java.sun.com/javase/downloads/ Google Web Toolkit SDK: https://developers.google.com/web-toolkit/download Apesar de no ser um pr-requisito, bastante interessante utilizar uma IDE de desenvolvimento. Dentre as principais IDEs utilizadas para desenvolvimento de aplicaes Java, podemos destacar o Eclipse que possui um plug-in oficial da Google para trabalhar com GWT. Tanto a IDE como o plug-in para desenvolver em GWT podem ser encontrados no link a seguir: IDE Eclipse: http://www.eclipse.org/downloads/ Google Plugin for Eclipse: http://dl.google.com/eclipse/plugin/4.2 Para este tutorial foi utilizado a verso 4.2 do Eclipse, apelidada de Juno. Para configurar o plug-in do GWT no Eclipse, basta clicar no menu do Eclipse Help, logo em seguida em Install New Software. Depois clique no boto Add e digite no campo Location o endereo http://dl.google.com/eclipse/plugin/4.2 e clique em Ok. Marque os itens Google Plugin for Eclipse, GWT Designer for GPE e SDKs.Clique no boto Next, aguarde o download ser terminado e clique em Finish. Com essas etapas, o Eclipse est preparado para ser utilizado com ferramente de desenvolvimento para o framework GWT.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

38

Sumrio

3.2 Objeto Canvas


O objeto Canvas representa o elemento de mesmo nome do HTML 5, e pode ser utilizado para processamento de grficos em tempo de execuo. Uma caracterstica importante deste elemento que ele consegue redimensionar seu contedo para adequar resoluo do navegador do usurio. Pode ser executado na maioria dos navegadores atuais, porm em verses antigas de navegadores ele no aceito, por se tratar de uma tecnologia recente. 3.2.1 Principais mtodos setCoordinateSpaceWidth (int width) Argumento: width: largura em pixels Descrio: Define a largura do espao interno do Canvas, fazendo com que independente da resoluo do dispositivo do usurio, as coordenadas dos objetos sejam sempre as mesmas. setCoordinateSpaceHeight(int height) Argumento: height: altura em pixels Descrio: Define a altura do espao interno do Canvas. setWidth (String width) Argumento: width: largura do objeto, em unidades de CSS (por exemplo: 10px, 1em) Descrio: Define a largura do objeto Canvas na pgina. setHeight(String height) Argumento: height: altura do objeto, em unidades de CSS (por exemplo: 10px, 1em) Descrio: Define a altura do objeto Canvas na pgina.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

39

Sumrio

setFocus(boolean focused) Argumento: focused: indica se o objeto receber o foco ou se perde o foco. Descrio: Indica o objeto como focado ou no focado. Apenas um objeto da pgina pode ter o foco por vez, e este o que receber todos os eventos de teclado. 3.3 Objeto Context2d O objeto Context2d faz referncia ao elemento de mesmo nome do HTML 5. Referese ao contexto de renderizao, podendo ser utilizado para desenhar formas e imagens no objeto Canvas. 3.3.1 Principais mtodos setFillStyle(String fillStyleColor) Argumento: fillStyleColor: cor como uma String no formato CssColor. Descrio: Define a cor de preenchimento dos elementos que forem desenhados em seguida. fillRect (double x, double y, double w, double h) Argumentos: x: posio horizontal do canto superior esquerdo do retngulo y: posio vertical do canto superior esquerdo do retngulo w: largura do retngulo h: altura do retngulo Descrio: Desenha um retngulo. drawImage (ImageElement image, double dx, double dy) Argumentos: image: imagem no formato de um objeto ImageElement

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

40

Sumrio

dx: posio horizontal do canto superior esquerdo da imagem dy: posio vertical do canto superior esquerdo da imagem Descrio: Desenha uma imagem previamente carregada. 3.4 Objeto Timer O objeto Timer um temporizador, que tem por finalidade fazer chamada automtica a um mtodo qualquer em um tempo pr-programado. 3.4.1 Principais mtodos scheduleRepeating (int periodMillis) Argumento: periodMillis: o tempo de espera em milissegundos entre cada repetio da chama do mtodo. Descrio: Ativa um temporizador que decorre repetidamente com um tempo determinado.

4. Desenvolvimento de Projeto
Para facilitar a compreenso das ferramentas aqui citadas, ser descrito neste capitulo um guia passo a passo de como se d o desenvolvimento de um jogo em HTML 5 utilizando o framework GWT. 4.1 Projeto Inicial Para criar uma nova aplicao GWT no Eclipse, basta clicar no menu File -> New -> Project. Selecione o tipo de projeto Google -> Web Application Project e clique em Next. Digite o nome do projeto e o nome do pacote padro. Desmarque a opo Use Google App Engine e tambm Generate project sample code para que no seja criada nenhuma classe de exemplo no projeto, deixando assim o projeto apenas com as configuraes iniciais bsicas. Por fim clique no boto Finish. O prximo passo aps a criao do projeto criar um novo Mdulo GWT clicando o boto direito do mouse no projeto e depois na opo New->Other. Selecione o item Google Web Toolkit->Module e clique em Next. Informe o nome do pacote e do modulo,

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

41

Sumrio

preferencialmente coloque o mesmo nome de pacote mencionado na criao do projeto e clique em Finish. Em seguida configure uma classe java como ponto de entrada do sistema. Para isso, clique com o boto direito do mouse no pacote client, que foi criado automaticamente na criao do mdulo. V em New->Other, selecione o item Google Web Toolkit->Entry Point Class e clique no boto Next. Preferencialmente digite o nome da classe como Main e clique em Finish. Um recurso importante no projeto a pasta war, onde estaro localizados todos os recursos externos do projeto como imagens, folhas de estilo e arquivos HTML. Nesta pasta tambm dever estar uma pgina HTML que ir iniciar a aplicao. Para criar este arquivo clique com o boto direito do mouse na pasta war e depois em New->Other e selecione o item Google Web Toolkit->HTML Page. Digite o nome do arquivo como index e clique em Finish. Por fim, necessrio fazer uma pequena configurao para que o aplicativo inicialize o mdulo corretamente. Supondo que o mdulo criado se chame jogo, abra o arquivo jogo.gwt.xml localizado no pacote principal e adicione um apelido ao mdulo editando sua tag inicial como:
<module rename-to="modulo">

Para editar o arquivo XML necessrio clicar na aba source na parte inferior do Eclipse e editar a linha mencionada, que a terceira linha do cdigo. Edite tambm o arquivo index.html localizado na pasta war, para que sua chamada ao mdulo gwt, na sexta linha, fique da seguinte forma:
<script type="text/javascript" language="javascript" src="modulo/modulo.nocache.js"></script>

Aps essas tarefas podemos executar o aplicativo, porm no ser mostrado nada no navegador ainda, pois teremos que codificar a classe Main. Ao abrir a aplicao pela primeira vez solicitada a instalao de um plugin no navegador. Este plugin utilizado para depurao do cdigo em tempo de desenvolvimento, e no ser solicitado quando o usurio acessar a aplicao final compilada. Todo esse processo de configurao do projeto poderia ser simplificado apenas deixando a opo Generate project sample code marcada, porm isso faria com que fosse gerada uma srie de cdigos desnecessrios para nossa aplicao. Como o objetivo deste projeto desenvolver um jogo em HTML 5, sua codificao deve ser iniciada com o acrscimo de um elemento Canvas e definio de seus parmetros. Primeiro deve ser feita uma verificao se o navegador do usurio d suporte ao elemento

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

42

Sumrio

Canvas do HTML 5. Depois devem ser removidas a margem e a barra de rolagem da pgina. Por fim so definidos o tamanho e a resoluo do elemento Canvas e logo em seguida adiciona-o na pgina do usurio, conforme mostrado no quadro 1.
public class Main implements EntryPoint { private Canvas canvas; private Context2d context; private static final int WIDTH = 800; private static final int HEIGHT = 600; public class Main implements EntryPoint { private Canvas canvas; private Context2d context; private static final int WIDTH = 800; private static final int HEIGHT = 600; @Override public void onModuleLoad() { canvas = Canvas.createIfSupported(); if (canvas == null) { RootPanel.get().add( new Label(Navegador sem suporte ao Canvas)); return; } Window.setMargin(0px); Window.enableScrolling(false); canvas.setWidth(Window.getClientWidth() + px); canvas.setHeight(Window.getClientHeight() + px); //define resoluo do objeto canvas canvas.setCoordinateSpaceWidth(WIDTH); canvas.setCoordinateSpaceHeight(HEIGHT); //adiciona o elemento na interface RootPanel.get().add(canvas); context = canvas.getContext2d(); } }

Quadro 1 Configuraes Iniciais o Projeto

4.2 Game Loop Os jogos so dirigidos por um loop que executa uma srie de tarefas a cada frame, construindo a iluso de um mundo animado. No caso de um jogo que roda a 30 frames por segundo, cada execuo das tarefas de um frame devem ser feitas em 33,3 milissegundos. (Rabin, 2012). Para conseguir executar este loop no tempo previsto, pode-se utilizar o objeto Timer, o qual controlar o tempo de execuo de cada frame. A principio as duas tarefas executadas pelo frame sero desenvolvidas nos mtodos update e draw. O mtodo update responsvel pode atualizar a posio dos objetos do jogo, assim como as transformaes necessrias para prover os efeitos de animao. O mtodo draw responsvel por renderizar as imagens no objeto canvas. Pode-se ver a estrutura de um game loop no

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

43

Sumrio

Quadro 2, onde o mtodo update ainda no possui nenhuma funcionalidade efetiva e o mtodo draw apenas pinta uma cor de fundo no objeto canvas. O restante do cdigo ser demonstrado nos prximos captulos.
public class Main implements EntryPoint { private Canvas canvas; private Context2d context; private static final int WIDTH = 800; private static final int HEIGHT = 600; private Timer timer; @Override public void onModuleLoad() { canvas = Canvas.createIfSupported(); if (canvas == null) { RowotPanel.get().add(new Label(Navegador sem suporte ao Canvas)); return; } Window.setMargin(0px); Window.enableScrolling(false); canvas.setWidth(Window.getClientWidth() + px); canvas.setHeight(Window.getClientHeight() + px); canvas.setCoordinateSpaceWidth(WIDTH); canvas.setCoordinateSpaceHeight(HEIGHT); RootPanel.get().add(canvas); context = canvas.getContext2d(); timer = new Timer() { @Override public void run() { update(); } }; timer.scheduleRepeating(33); } public void update() { //lgica do jogo draw(); } public void draw() { //desenha o fundo CssColor cor; cor = CssColor.make(rgba(0,50,255,1)); context.setFillStyle(cor); context.fillRect(0, 0, WIDTH, HEIGHT); } }

Quadro 2 Game Loop

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

44

Sumrio

4.3 Animao J que GWT permite a codificao da aplicao na linguagem Java, nada mais justo que tirar proveito dos recursos da orientao em objetos para desenvolver seu game. Uma boa metodologia criar uma classe java para cada tipo funcionalidade, pensando nas tcnicas de reuso que a linguagem disponibiliza. Desta forma, para criar um objeto retangular que ser desenhado no jogo, pode-se definir atributos encapsulados para determinar sua posio nos eixos horizontal e vertical, alm de declarar um mtodo capaz de fazer a deteco da coliso entre outro retngulo. O resultado desta Classe Java pode ser visto no Quadro 3.
public class Retangulo { private int x; private int y; private int height; private int width; public Retangulo(int x, int y, int height, int width) { this.x = x; this.y = y; this.height = height; this.width = width; } public int getX() {return x; } public void setX(int x) { this.x = x; } public int getY() {return y; } public void setY(int y) { this.y = y; } public int getHeight() { return height; } public void setHeight(int height) { this.height = height; } public int getWidth() { return width; } public void setWidth(int width) { this.width = width; } public boolean colide(Retangulo c) { if ((c.getX()+c.getWidth() >= getX()) && (c.getX() <= getX() + this.width) && (c.getY() + c.getHeight() >= getY()) && (c.getY() <= getY() + this.height)){ return true; } else { return false; } } }

Quadro 3 Objeto Retangulo

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

45

Sumrio

Desta forma j podemos construir toda a lgica do jogo. Como a ideia apenas apresentar a tecnologia, iremos demonstrar o desenvolvimento de um jogo simples, apenas com as classes Main e Retangulo. Assim a estrutura do jogo deve ficar igual mostrada na figura 2.

Figura 2 Exemplo de imagens

O escopo do projeto ficar ento como sendo um jogo onde o usurio ir controlar uma plataforma, a qual ir rebater uma bola em movimento. A partir deste exemplo o desenvolvedor poder facilmente estender suas funcionalidades para tornar o jogo parecido com um Pong ou Breakout mostrados na figura 3. Podem ser utilizados grficos com tima qualidade j que as imagens que sero inseridas so no formato PNG, bem diferente do que se tinha na poca em que esses dois jogos citados foram criados.

Figura 3 Jogos Pong (1972) e Breakout (1976)

Para continuar o desenvolvimento, deve ser declarado dois atributos retngulo na classe Main, um para a plataforma base e outro para a bola. Tambm declare atributos para armazenar a direo a qual a bola dever se movimentar. A cada frame, incremente a posio da bola para dar a iluso de movimento, e desenhe os dois retngulos na tela. Sobre a movimentao da bola, importante que ela mude de direo sempre que colidir com alguma das extremidades da tela, ou mesmo com a plataforma base tambm. Algumas estruturas condicionais podem realizar esta tarefa, alm de fazerem a validao, caso a bola encontre a extremidade inferior da tela informando ao usurio que ele perdeu o jogo. Considerando os critrios mencionados, a classe Main dever ficar conforme est mostrado no quadro 4.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

46

Sumrio

public class Main implements EntryPoint { private Canvas canvas; private Context2d context; private static final int WIDTH = 800; private static final int HEIGHT = 600; private Timer timer; private Retangulo base = new Retangulo(350, 550, 25, 100); private Retangulo bola = new Retangulo(0, 0, 25, 25); private int dirX = 3; private int dirY = 3; @Override public void onModuleLoad() {... public void update() { bola.setX(bola.getX()+dirX); bola.setY(bola.getY()+dirY); if (bola.getX()+bola.getWidth()>=WIDTH) { dirX *= -1; } if (bola.getX()<=0) { dirX *= -1; } if (bola.getY()<=0) { dirY *= -1; } if (base.colide(bola)) { dirY *= -1; } if (bola.getY()+bola.getHeight()>=HEIGHT) { Window.alert(Voc Perdeu!); bola.setX(0); bola.setY(0); dirX = Math.abs(dirX); dirY = Math.abs(dirY); } draw(); } public void draw() { //desenha fundo CssColor cor; cor = CssColor.make(rgba(0,50,255,1)); context.setFillStyle(cor); context.fillRect(0, 0, WIDTH, HEIGHT); //desenha bola e base cor = CssColor.make(rgba(0,255,50,1)); context.setFillStyle(cor); context.fillRect(bola.getX(), bola.getY(), bola.getWidth(), bola.getHeight()); context.fillRect(base.getX(), base.getY(), base.getWidth(), base.getHeight()); } }

Quadro 4 Animao

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

47

Sumrio

4.4 Interao por Teclado Em se tratando de interao do usurio com o jogo, uma das formas muito utilizadas a interao por teclado. No exemplo apresentado neste tutorial, vamos controlar a plataforma base com as setas do teclado para direita e para esquerda. Para esta tarefa foram declaradas duas variveis booleanas, as quais indicaro o estado de cada tecla. Tambm foi criado um mtodo chamado initKeyHandlers responsvel por inicializar a captura das aes de pressionar alguma tecla (KeyDownHandler) e de soltar alguma tecla (KeyUpHandler). Atravs das variveis de estado para as setas esquerda e direta do teclado, podemos movimentar a plataforma base nesses mesmos sentidos. Esta tarefa realizada no mtodo update conforme pode ser visto no Quadro 5.
public class Main implements EntryPoint { ... private boolean keyLeft = false; private boolean keyRight = false; @Override public void onModuleLoad() { ... initKeyHandlers(); canvas.setFocus(true); }

public void initKeyHandlers() { canvas.addKeyDownHandler( new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { int key = event.getNativeKeyCode(); if (key == 37) { keyLeft = true; } else if (key == 39) { keyRight = true; } } }); canvas.addKeyUpHandler( new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { int key = event.getNativeKeyCode(); if (key == 37) { keyLeft = false; } else if (key == 39) { keyRight = false; } } }); }

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

48

Sumrio

public void update() { ... if ((keyLeft) && (base.getX()>0)) { base.setX(base.getX()-10); } if ((keyRight) && (base.getX()+base.getWidth()<WIDTH)) { base.setX(base.getX()+10); } draw(); } public void draw() { ... } }

Quadro 5 Interao por Teclado

4.5 Interao por Mouse e Toque Frequentemente o teclado pode no ser a nica forma utilizada para interao do usurio com o jogo, podendo este utilizar o mouse ou at mesmo o toque em dispositivos que disponibilizam tal entrada. Quando estamos tratando de um jogo para internet, temos que ter a conscincia de que este aplicativo pode ser acessado por uma diversa quantidade de dispositivos, como computadores, celulares, tablets e at mesmo videogames. Portanto, tratar outros tipos de entrada, como mouse ou toque passa a ser uma exigncia do jogo, caso queira ter compatibilidade com todos esses dispositivos. No framework GWT, o mouse e o toque so tratados por mtodos distintos. Sendo assim, vamos criar um mtodo chamado initMouseHandlers, para cuidar destes tipos de entrada. A inteno movimentar a plataforma base do jogo de acordo com a posio do mouse ou do toque. Muito cuidado ao atribuir a posio da base, pois o objeto Canvas estar na resoluo 800x600 independente da resoluo e tamanho do navegador, porm o mouse ou toque retornaro a posio relativa ao dispositivo. Sendo assim deve ser realizado um calculo de converso como mostrado no Quadro 6.
public class Main implements EntryPoint { ... @Override public void onModuleLoad() { ... initMouseHandlers(); } public void initKeyHandlers() {... public void initMouseHandlers() { canvas.addMouseMoveHandler(new MouseMoveHandler() { @Override public void onMouseMove( MouseMoveEvent event) { int x = event.getX();

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

49

Sumrio

x = x*WIDTH/Window.getClientWidth(); base.setX((x-base.getWidth()/2)); } }); canvas.addTouchMoveHandler( new TouchMoveHandler() { @Override public void onTouchMove(TouchMoveEvent event) { int x = event.getTouches().get(0). getClientX(); x = x*WIDTH/Window.getClientWidth(); base.setX((x-base.getWidth()/2)); } }); } public void update() {... public void draw() {... }

Quadro 6 Interao por Mouse e Toque

4.6 Imagens A ltima etapa deste tutorial se refere ao uso de imagens no jogo, ao invs de simplesmente desenhar formas geomtricas. aconselhvel que seja usado o formato de imagens PNG, devido ao seu timo algoritmo de compresso. Desenhe no editor de imagens de sua preferncia uma figura para a bola, na largura de 25px e altura de 25px. Depois desenhe uma figura para a plataforma base com largura de 100px e altura de 25px. Salve ambas figuras na pasta war do seu projeto. Para utilizar as imagens, dever ser declarado na classe Main, objetos do tipo ImageElement, os quais tero funcionalidade de carregar as imagens para que sejam desenhadas no objeto Canvas. O cdigo para tal tarefa pode ser visto no Quadro 7.
public class Main implements EntryPoint { ... private ImageElement imgBola = ImageElement.as(new Image(bola.png).getElement()); private ImageElement imgBase = ImageElement.as(new Image(base.png).getElement()); @Override public void onModuleLoad() {... public void initKeyHandlers() {... public void initMouseHandlers() {... public void update() {... public void draw() { //desenha fundo CssColor cor; cor = CssColor.make(rgba(0,50,255,1));

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

50

Sumrio

context.setFillStyle(cor); context.fillRect(0, 0, WIDTH, HEIGHT); //desenha bola e base context.drawImage(imgBase, base. getX(), base.getY()); context.drawImage(imgBola, bola.getX(), bola.getY()); } }

Quadro 7 Renderizao e imagens

Aps a insero das imagens o jogo fica semelhante ao que est mostrado na Figura 4. Caso queira fazer animaes, basta trocar as imagens a cada frame, o que torna o visual do jogo bem mais agradvel. Para isso pode ser utilizada a tcnica de sprites. Outra sugesto interessante o uso de uma imagem de fundo, que pode ser desenhada da mesma forma que as imagens da base e da bola.

Figura 4 Exemplo de imagens

5. Perspectivas
O objetivo deste tutorial foi apresentar o framework GWT como alternativa para o desenvolvimento de jogos para internet. Percebemos que este jogo pode ser implementado com facilidade e que o framework GWT proporciona um bom ambiente de desenvolvimento e uma boa organizao do cdigo. A partir dos conceitos demonstrados aqui, este jogo pode ser estendido, aumentando sua complexidade e melhorando sua jogabilidade. Com os recursos proporcionados pela programao orientao a objetos, pode-se criar uma aplicao com muitas linhas de cdigo, sem perder a organizao do projeto. Estes recursos tambm proporcionam a utilizao de tcnicas de reuso do cdigo, como encapsulamento, herana e outros. Apesar do HTML 5 ser uma tecnologia recente j possvel desenvolver jogos com qualidade e a tendncia melhorar ainda mais, tanto na compatibilidade com os navegadores, quanto na velocidade de renderizao proporcionado pelos mesmos.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

51

Sumrio

Ainda poderemos ter alteraes no que se refere ao HTML 5 e at mesmo nas tcnicas para desenvolvimento de jogos para internet, j que o consrcio internacional W3C ainda no homologou oficialmente esta linguagem. Mas o framework GWT tem se adaptado bem s ultimas mudanas e de interesse da Google continuar a manter o framework o mais atualizado possvel, continuando a nos proporcionar compatibilidade garantida com os mais diversos navegadores da internet.

Referncias
SMEETs, B., BONEss U. E BANKRAs R., 2009. Programando Google Web Toolkit, Rio de Janeiro: Alta Books, 1a edio. GEARY, D., 2008. Google Web Toolkit solutions. Boston: Pearson. DWYER. J., 2008. Pro Web 2.0 Application Development with GWT. New York: Apress. TAIVALsAARI, A. E MIKKONEN, T., 2011. The Web as an Application Platform: The Saga Continues. 37th EUROMICRO Conference on Software Engineering and Advanced Applications. NRNbERg, L. HTML 5 futuro dos jogos para web. Disponvel em <http://abrindoojogo. com.br/html-5-futuro-dos-jogos-para-web> Acessado em setembro, 2011. Google Web Toolkit API Reference. Disponvel em <http://google-web-toolkit.googlecode. com/svn/javadoc/2.4/index.html> Acessado em setembro, 2011. Google Web Toolkit. Disponvel em <https://developers.google.com/web-toolkit/> Acessado em setembro, 2011. RAbIN, S., 2012. Introduo ao desenvolvimento de games, So Paulo: Cengage, 2 Edio.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

52

Sumrio

Introduo ao Unity
Jay Clei Garcia dos Santos1

Resumo
Este tutorial tem como objetivo demonstrar a facilidade de criao de um nvel de jogo em primeira pessoa (First Person Shooter) desde o zero.

Introduo
A Unity uma ferramenta de desenvolvimento de jogos 2D / 3D multiplataforma que tem como principais caractersticas a facilidade de uso, rpida prototipagem e integrao com ferramentas externas como Maya, 3D Studio, Photoshop, Blender, entre outras. O objetivo da empresa democratizar o desenvolvimento de jogos. Sua facilidade de uso e preo acessvel fizeram com que a Unity atingisse mais de 50% de penetrao no mercado de desenvolvimento mobile mundial. Hoje a Unity conta com 1,5 milhes de usurios registrados no mundo, desde desenvolvedores amadores fazendo um jogo em seu tempo livre, at grandes empresas como Electronic Arts, BigPoint e Nintendo.

Conceitos bsicos
OBS.: Todos os materiais e contedos utilizados neste tutorial podem ser baixados no link http://tinyurl.com/sbgames-unity. 1 Unity Technologies.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

53

Sumrio

OBS. 2: Na parte de animao do rob (8. Criando um inimigo) utilizado o sistema de animao Mecanim, presente na nova verso 4.0 do Unity. Todo o resto do tutorial pode ser feito na verso 3.x

1. Criando o Projeto Caso voc ainda no tenha o Unity instalado em sua mquina, voc pode baix-lo em http://unity3d.com/unity/download/. Ao iniciar o Unity clique em File -> New Project defina onde seu projeto vai ser salvo e na janela Import the following packages selecione Character Controller, Skyboxes e Water (Pro Only) (Fig. 1) e clique em Create Project.
OBS.: O package Water (Pro Only) est disponvel apenas na verso Pro do Unity. Ao baixar do site voc tem 30 dias de trial da verso Pro. Caso seu trial tenha expirado, utilize a Water (Basic).

Fig. 1: Janela Project Wizard

2. Criando o personagem de primeira pessoa Ao terminar a criao do projeto, a tela abaixo exibida (Fig. 2)

Fig. 2: Tela inicial do projeto.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

54

Sumrio

Clique na aba Game, arraste ela um pouco para baixo e para a direita para separarmos ela da janela Scene (Fig. 3)

Fig. 3: Tela inicial com a janela Game separada.

Agora vamos criar o controle de primeira pessoa. Vamos iniciar criando um plano, que vai servir de cho. Clique em Game Object -> Create Other > Plane. Aps acrescentar o plano, clique na tela scene e aumente o zoom (usando o mouse scroll) para deixar o plano mais prximo para editar. Expanda as pastas Standard Assets e Character Controllers, clique e arraste o First Person Controller para a janela Scene e coloque-o sobre o plano (Fig. 4).

Fig. 4: Plano e controle de primeira pessoa acrescentados

Clique o boto Play na parte central no topo da tela e clique na janela Game. Voc agora pode controlar o personagem usando W, S, A e D e espao para pular. Voc pode notar tambm que a gravidade j est atuando na cena: Caminhe com o personagem at alm do plano criado e voc vai notar que o personagem vai cair. Na janela Inspector se voc expandir a opo Movement dentro de Character Motor (Script) voc tm todos os parmetros de movimento do personagem, que podem ser configurados diretamente no editor, sem a necessidade de alterar cdigo-fonte (Fig. 5).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

55

Sumrio

Fig. 5: Parmetros de configurao de movimento.

3. Acrescentando elementos a cena: Luz, objetos, Skybox e texturas A cena que criamos est escura. Vamos agora adicionar iluminao. Clique em Game Object -> Create Other -> Directional Light. Voc vai notar que o cho da cena j ir ficar muito mais iluminado. Por enquanto vamos manter a luz assim (Fig. 6).

Fig. 6: Mesma cena, agora iluminada.

Vamos agora criar duas plataformas. Clique em Game Object -> Create Other -> Cube. O Cubo vai ser criado aproximadamente na mesma posio que o personagem. Na tela Scene clique na seta vermelha e arraste o cubo para o lado. Quando a tela Scene est com esta funcionalidade ativada voc pode mover objetos atravs da cena. Clique tambm na seta verde e arraste um pouco o cubo para cima. No canto superior esquerdo da tela existem quatro botes com as funcionalidades da tela Scene, da esquerda para a direita: Primeiro Boto (mo): Arrasta a cena inteira para facilitar a visualizao. Segundo Boto (tooltip: move the selected objects): Move o objeto dentro da cena. Terceiro Boto (tooltip: rotate the selected objects): Rotaciona o objeto na cena. Quarto Boto (tooltip: scale the selected objects): Altera o tamanho do objeto na cena.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

56

Sumrio

Os atalhos para este botes so Q, W, E e R, respectivamente. Aps arrastar o cubo vamos alterar suas dimenses, transformando-o em uma plataforma e colocando-o um pouco acima do cho. Uma vez feito isso digite CTRL+D (ou command+D no MacOS) para duplicar a plataforma e coloque a nova plataforma um pouco mais a frente e um pouco mais alto da primeira plataforma (Fig. 7).

Fig. 7: Plataformas criadas.

Clique em Play e mova seu personagem para cima das plataformas. Se as plataformas estiverem muito altas e voc no conseguir alcana-las pulando, diminua um pouco a distncia entre elas. Agora vamos adicionar um Skybox (uma imagem que envelopa a cena e da sensao de profundidade). Clique em Edit -> Render Settings, uma srie de parmetros sero exibidos na janela Inspector, clique no boto a direita da opo Skybox Material e selecione qualquer uma das opes apresentadas no pop-up. Uma vez selecionado o material feche o pop-up (Fig. 8).

Fig. 8: Cena com o Skybox Sunny 2 Skybox aplicado.

Porm os objetos continuam apenas brancos, o prximo passo adicionar uma textura aos nossos pisos. Clique com o boto direito na janela Project, selecione Create -> Folder e crie uma pasta Textures. A criao de pastas no necessria mas recomendada para a organizao do projeto.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

57

Sumrio

Arraste o arquivo Sand.psd para dentro da pasta Textures, uma vez feito isso arraste o Sand.psd de dentro da pasta Textures para cima do plano (Fig. 9).

Fig. 9: Plano com a textura de areia aplicada. Repare que as plataformas esto sem textura.

No Unity voc tambm pode trabalhar com texturas procedurais. Primeiro crie um novo cubo (como j feito anteriormente) e altere as dimenses e posio para que ele fique como um muro saindo do cho de areia. Arraste o arquivo bricks_008.sbsar para dentro da pasta Textures na janela Project, expanda o object bricks_008 criado e arraste o bricks_008 para cima do muro na janela Scene (Fig. 10).

Fig. 10: Muro com a textura procedural aplicada. Voc pode ver qual o bricks_008 que deve ser arrastado indicado na janela Project.

Com o bricks_008 selecionado no Project voc pode ver na janela Inspector diversos parmetros que podem ser alterados para modificar a textura (Fig. 11).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

58

Sumrio

Fig. 11: Muro aps alterar alguns parmetros da textura. Compare com o muro da Fig. 10.

4. Acrescentando elementos a cena: Modelos 3D e texturas Vamos substituir nossas plataformas brancas e sem forma por modelos 3D. Na janela Projects crie uma nova pasta chamada 3D Models. Arraste os arquivos platform_LOD0. fbx e platform_DIF.tga para dentro da pasta 3D Models. O arquivo .fbx o modelo 3D e o arquivo .tga a textura a ser aplicada a esse modelo. Como o nome dos dois igual a textura imediatamente aplicada ao modelo. Se voc clicar no objeto platform_LOD0 dentro da pasta 3D Models voc j vai ver na janela Inspector o modelo com a textura, altere o Scale Factor dentro da janela Inspector para 0.5 (Fig. 12).

Fig. 12: Modelo 3D da plataforma com a textura j aplicada. Note que o Scale Factor j foi alterado para 0.5.

Clique no objeto platform_LOD0 e arraste-o at a janela Scene para acrescentar uma plataforma a cena. Clique em Play e tente pular em cima da plataforma. Voc caiu direto por ela! O que aconteceu? Porque apesar de voc j ter o modelo 3D da plataforma ela ainda no tem uma caixa de coliso para impedir sua queda. Vamos criar uma agora. Selectione o objeto platform_LOD0 na janela Hierarchy e clique em Components -> Physics -> Box Collider. Voc pode ver na janela Scene que uma grade verde aparece em volta da plataforma. Clique em Play e agora voc pode subir na plataforma (Fig. 13).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

59

Sumrio

Uma explicao rpida sobre a diferena entre as janelas Project e Hierarchy: A janela Project mostra todos os elementos disponveis no seu projeto, e Hierarchy mostra todos os elementos que esto sendo utilizados neste exato momento na cena em que voc est trabalhando.

Fig. 13: Personagem em cima da plataforma aps adio do Box Collider. Repare na caixa verde em volta da plataforma.

Seria possvel tambm criar um Mesh Collider na plataforma. A diferena que o Mesh Collider se ajusta exatamente ao modelo 3D da plataforma. A vantagem de usar um Mesh Collider que voc no ter colises inexistentes, principalmente nas bordas dos objetos. A desvantagem que o custo de processamento de um Mesh Collider muito mais alto do que de um Box Collider. Normalmente recomendado utilizar Box Collider (ou um conjunto de Box Colliders distribudos pelo objeto) ao invs de Mesh Collider, o resultado satisfatrio e muito mais barato em termos de processamento. Vamos agora criar um muro e entender como duplicar e conectar elementos. Arraste os arquivos EV_Wall.FBX e EV_Wall_DIF.tga para a janela Project e clique no objeto EV_Wall criado dentro da pasta 3D Models. Voc vai reparar que o nosso modelo est sem textura. Para aplicar uma textura a um objeto de scroll na janela Inspector at o final. Uma pequena janela quadrada com o texto None (Texture) vai aparecer. Arraste o objeto EV_Wall_DIF.tga de dentro da pasta 3D Models para esta janela e a textura vai ser aplicada (Fig. 14).

Fig. 14: Modelo 3D EV_Wall com a textura j aplicada.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

60

Sumrio

Para trabalhar com o EV_Wall vamos limpar nossa cena um pouco. Na janela Hierarchy apague todos os objetos (selecione o objeto, clique com o boto direito e selecione Delete) com exceo de: First Person Controller Plane Directional Light Clique em EV_Wall na janela Project e arraste para a janela Scene para adicionarmos uma parede a cena. Agora queremos fazer com que essa parede comece exatamente em cima do nosso cho, para fazer isso vamos usar o comando de Vertex Lock. Para fazer isso, clique na parede na janela Scene e clique no boto Move the selected objects no canto superior esquerdo da janela (ou use o atalho W). Feito isso ponha o cursor em cima do muro e aperte a tecla V, voc vai notar que o cubo para movimentao do muro vai se mover para cima do cursor, e se voc mover o cursor o cubo vai acompanhar. Posicione o cursor em um dos cantos inferiores do muro, depois clique no muro e arraste. Voc vai notar que a movimentao do muro agora se d em pulos. Isso porque com o V pressionado, o vrtice selecionado do muro est se conectando diretamente ao vrtice do cho mais prximo. Dessa maneira voc garante que o muro est comeando assim que o cho termina (Fig. 15).

Fig. 15: Muro preso ao cho aps o uso do comando Vertex Lock.

Podemos usar o Vertex Lock para facilmente expandir o muro. Selecione o muro na janela Scene e pressione CTRL+D (ou command+D) para duplicar o objeto, feito isso arraste o muro duplicado para o lado usando a seta verde para arrast-lo e afaste-o do muro original. Depois disso pressione o V, selecione um vrtice do canto inferior e prenda-o a um vrtice do canto inferior do muro original. Repita o procedimento algumas vezes at voc se sentir confortvel com esse procedimento (Fig. 16).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

61

Sumrio

Fig. 16: Muro copiado cinco vezes (Note cinco objetos EV_Wall na janela Hierarchy).

Se voc pressionar Shift e clicar em cada um dos muros criados na janela Scene, voc pode selecionar todos os muros e trabalhar com todos ao mesmo tempo. 5. Prefabs e Packages Prefabs (de prefabricated, pr-fabricado), so objetos que voc pode replicar e utilizar diversas vezes durante seu projeto. O uso de prefabs facilita muito a criao de itens iguais ou mesmo com comportamento similares. Vamos criar um prefab contendo o muro com vrios segmentos que criamos. Colapse todas as pastas da janela Project e clique em GameObject -> Create Empty. Voc vai notar um novo objeto na janela Hierarchy chamado GameObject. Todo objeto de um projeto Unity um GameObject. importante saber isso para a programao de scripts pois praticamente todas as classes so herdeiras da classe GameObject. Selecione todos os EV_Wall da janela Hierarchy utilizando Shift e clicando nos EV_ Wall e arraste todos para cima do GameObject recm- criado. Voc vai notar que todos os EV_Wall agora esto abaixo do GameObject, isso significa que agora todos eles so filhos do GameObject (vamos falar mais a respeito no futuro). Agora arraste o GameObject para a janela Project. Foi criado um objeto novo com um cubo como cone. Esse cubo significa que esse objeto um prefab (Fig. 17).

Fig. 17: Prefab recm criado na janela Project. Note no preview o muro mais extenso que criamos.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

62

Sumrio

Para entender como funcionam os prefabs, selecione o objeto chamado GameObject na janela Hierarchy e apague-o (clique com o boto direito e selecione Delete). Todos os muros da cena iro sumir. Agora clique no Prefab criado na janela Project e arraste para dentro da janela Scene. Voc vai notar que um muro extenso foi criado. Como esse prefab est disponvel no meu Projeto ele pode ser usado em qualquer cena do meu jogo. Mas voc tambm pode usar o prefab em outros projetos, criando um Package. Para criar um package, clique com o boto direito no prefab GameObject na janela Project e selecione Export Package. Um pop-up mostrando os elementos que sero inclusos no package exibido. Note no pop-up que alm do prefab tambm so inclusos todos os modelos 3D, materiais e scripts que esto associados a esses objetos (no nosso caso no temos nenhum script associado ainda), clique em export, d um nome ao package, defina onde voc vai salv-lo e clique em Save. Ser criado um arquivo .unitypackage contendo o prefab que foi criado. Agora esse package pode ser importado para outros projetos. 6. Importando um Package J temos tudo que precisamos para criar nossa fase do FPS, mas para acelerar o processo vamos importar um arquivo .unitypackage com nossa fase j pronta. Apague todos os elementos da cena e deixe apenas: First Person Controller Plane Agora clique em Assets -> Import Package -> Custom Package... e selecione o arquivo game_level_prefab.unitypackage e clique Import no pop-up. Na janela Project dentro de Game_level_and_Props -> Prefab h um prefab chamado Level, arraste-o para a janela Scene. Ajuste a posio do First Person Controller e do Plane dentro da janela Scene para que o First Person Controller fique em cima de uma das plataformas e o Plane cubra toda a parte debaixo da fase (Fig. 18).

Fig. 18: Janela Scene mostrando o First Person Controller em cima de uma plataforma e o Plane cobrindo a fase todas.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

63

Sumrio

J temos tudo que precisamos para criar nossa fase do FPS, mas para acelerar o processo vamos importar um arquivo .unitypackage com nossa fase j pronta. A cena est bastante escura, vamos ajustar a iluminao, mudando a iluminao ambiente e acrescentando um Directional Light. Para mudar a iluminao ambiente clique em Edit -> Render Settings e clique em Ambient Light, e ajuste-a para aproximadamente o exibido na Fig. 19, voc vai perceber que a cena j ficar um pouco mais clara.

Fig. 19: Configurao do Ambient Light.

Agora clique em Game Object -> Create Other -> Directional Light, na janela Inspector na sesso Light, mude a opo Shadow Type para Soft Shadows, e voc vai perceber que a cena ficar mais iluminada e aparecero sombras. Aps acrescentar a luz, na janela Inspector altere a propriedade Rotation para: - X: 50 - Y: 260 - Z: 0 Dessa maneira teremos algumas reas de sombra que utilizaremos para a parte de Lightprobing (Fig. 20).

Fig. 20: Fase com a Directional Light acrescentada, note a configurao de rotao e a rea de sombra abaixo do tnel.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

64

Sumrio

7. Acrescentando gua, arma e animao da arma Para acrescentar a gua, na janela Project, na pasta Standard Assets-> Water (Pro Only) ou Water (Basic), clique em Daylight Simple Water e arraste-a para a tela Scene. Ajuste o tamanho para cobrir toda a fase e coloque-a um pouco acima do plano original (Fig. 21).

Fig. 21: gua acrescentada ao projeto.

Aps colocar a gua, vamos acrescentar uma arma ao nosso jogador. Arraste para dentro da pasta 3D Models na janela Projects os arquivos: - bazooka.fbx - bazooka_colormal.tga - bazooka_normalmap.tga Se um pop-up aparecer, pode clicar em Fix now. Como os arquivos j esto com os nomes corretos, se voc clicar no prefab bazooka dentro da pasta 3D Models, na janela inspector j ser exibido o modelo 3D com a textura aplicada corretamente. Agora clique no prefab bazooka dentro de 3D Models e arraste-o para cima do objeto Main Camera dentro de First Person Controller na janela Hierarchy. Dessa maneira o objeto bazooka ficar dentro do Main Camera, isso significa que bazooka agora filho de Main Camera, e sempre que Main Camera se mover, bazooka se mover tambm (fig. 22).

Fig. 22: Bazooka como filho de Main Camera na janela Hierarchy.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

65

Sumrio

Precisamos ajustar a posio da bazooka para que ela fique no canto inferior direito da tela. Voc pode ajustar manualmente atravs da janela Scene, ou ento selecione bazooka na janela Hierarchy, e configure o parmetro Position da janela Hierarchy para: - X: 0.7 - Y: -0.1 - Z: 0.7 Sua janela Game ficar similar a da Fig. 23.

Fig. 23: Posio da arma aps ajuste da posio.

Clique em Play, voc pode perceber que a animao da arma executada apenas uma vez e a arma pra. Isso acontece pois as duas animaes associadas a esse modelo (a animao quando a arma est Idle e quando a arma disparada) esto salvas como uma animao s. Agora vamos dividir estas animaes e aplicar a animao de Idle. Na janela Project embaixo da pasta 3D Models clique no prefab Bazooka. Na janela Inspector, procure a seo Animations, logo abaixo de Split Animations h uma lista por enquanto vazia (Fig. 24).

Fig. 24: Seo Animations do prefab. A tabela est na parte debaixo da imagem.

Clique no + para acrescentar uma animao a lista, os parmetros da animao so: - Name: O nome da animao, pode manter idle;

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

66

Sumrio

- Start: Quadro de incio da animao, pode manter 1; - End: Quadro de trmino da animao, configure para 60; - WrapMode: Modo de Wrap da animao, para esta animao configure como Loop. Clique novamente no + para acrescentar mais uma animao, a configurao da nova animao deve ser: - Name: shoot; - Start: 61; - End: 75; - WrapMode: Once. Desa um pouco mais na janela Inspector e clique no boto Apply. Clicando em Play voc pode notar que a animao de idle (a arma subindo e descendo) fica ativada em loop. 8. Criando a munio e o processo de disparo O prximo passo criar a munio da arma. Vamos usar um cubo como munio. Clica em GameObject -> Create Other -> Cube, diminua o tamanho do cubo (na janela Inspector, configure os parmetros X, Y e Z de Scale para 0.15) e aperte Play. Voc pode notar que o cubo fica flutuando no espao. Para que possamos aplicar outras foras no cubo, voc deve adicionar um Rigidbody ao cubo. Na janela Hierarchy selecione o Cubo, depois clique em Components -> Physics -> Rigidbody, aps fazer isso se voc apertar Play voc vai notar que o cubo vai cair. Agora vamos definir a Tag associada a nosso cubo. A Tag vai ser utilizada frente quando analisarmos a coliso da bala com o inimigo. Na janela Inspector, clique no pulldown ao lado de Tag no canto superior esquerdo e selecione a opo Add Tag..., expanda a opo Tags (primeira linha) e na linha Element 0 escreva Bullet Vamos definir um tempo para o cubo desaparecer aps ser disparado. Na janela Project clique em Create -> C# Script, procure o objeto NewBehaviourScript e renomeie-o para BulletController e clique duas vezes no objeto para abrir o editor. Uma vez aberto, altere o nome da classe para BulletController. A classe que foi criada j tem duas funes: - Start(): Essa funo chamada sempre que o GameObject ao qual o script est associado criado; - Update(): Essa funo chamada toda vez que um frame desenhado. O que queremos que, depois de um determinado tempo, o cubo desaparea. Na funo Start() acrescente a seguinte linha:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

67

Sumrio

Destroy(gameObject, 5.0f); O que essa linha faz destruir o gameObject ao qual o script est associado em cinco segundos. Salve o script, volte ao Unity e na janela Project, clique no BulletController e arraste-o ao objeto Cube na janela Hierarchy, se depois disso voc clicar no Cube em Hierarchy, voc vai notar no Inspector que surgiu uma nova sesso chamada Bullet Controller (Script) (Fig. 25).

Fig. 25: Inspector do Cube com o Bullet Controller na parte de baixo. Note tambm a Tag Bullet j associada ao Cube

Clique em Play, depois de cinco segundos o cubo desaparece do jogo e desaparece tambm do Hierarchy (lembre-se, o Hierarchy mostra apenas os objetos que existem na cena, como destrumos o objeto ele deixa de existir).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

68

Sumrio

Mas da maneira como o tempo para destruio do cubo est configurado, a nica maneira de alter-lo entrando no cdigo fonte e alterando o valor, vamos facilitar esse processo, volte ao editor do cdigo, e crie uma varivel na classe: public float timeToLive = 5.0f; Depois disso, altere a chamada de Destroy para: Destroy(gameObject, timeToLive); Depois disso, volte ao Unity, clique no Cubo na janela Hierarchy e repare no Inspector que dentro da seo Bullet Controller voc agora pode configurar a varivel do tempo de destruio do cubo sem ter que alterar o cdigo fonte (Fig. 26).

Fig. 26: Inspector agora com o parmetro Time To Live.

Arraste o Cube da janela Hierarchy para a janela Project. Dessa maneira vamos criar um prefab do Cube que usaremos no futuro para criar as balas que so disparadas pela nossa arma. Agora voc j pode apagar o Cube da Scene. Agora vamos criar o processo de disparo da arma, o processo basicamente o seguinte: - Quando o boto de disparo for pressionado: Uma bala ser criada na frente da arma; A arma vai tocar a animao de Shoot e depois voltar para Idle; Um som ser tocado. Primeiramente vamos definir a posio onde sero geradas as balas que so disparadas. Clique em GameObject -> Create Empty. Esse GameObject ser vazio, apenas com um script associado, portanto para facilitar sua visualizao vamos acrescentar um label a esse GameObject. Selecione o GameObject criado na janela Hierarchy e clique no cubo verde, vermelho e azul no canto superior esquerdo da janela Inspector e selecione um dos cones apresentados. Agora um label com o nome do GameObject estar presente na janela Scene sempre (Fig. 27).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

69

Sumrio

Fig. 27: Label GameObject presente na janela Scene.

Antes de posicionar o GameObject vamos renome-lo e torn-lo filho da bazooka (para que ele acompanhe o objeto bazooka), clique com o boto direito no GameObject na janela Hierarchy e selecione Rename e altere o nome para BulletSpawn. Agora posicione o GameObject vazio em frente a arma arrastando o objeto na janela Scene ou selecione o objeto BulletSpawn na janela Hierarchy, e na janela Inspector configure os parmetros de position para: - X: 0; - Y: -7.7; - Z: -1.2. Feito isso, selecione o arquivo BulletShooter.cs e arraste para dentro do diretrio Project e depois arraste-o da janela Project para o objeto BulletSpawn na janela Hierarchy. Feito isso, clique no objeto BulletSpawn na janela Hierarchy e verifique se agora h uma seo chamada Bullet Shooter (Script) (Fig. 28).

Fig. 28: Janela Inspector do BulletSpawn com o script.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

70

Sumrio

Vamos analisar o que est sendo feito no script BulletShooter.cs, a funo Start() no faz nada, ou seja, quando o cubo criado nada acontece, na funo Update(): void Update () { if(Input.GetButtonDown(Fire1)) { Rigidbody bullet = Instantiate(myBulletPrefab, transform.position, transform.rotation) as Rigidbody; bullet.velocity = transform.TransformDirection(new Vector3 (0,0,shootForce)); audio.PlayOneShot(shootClip); gun. animation.Play (shoot); gun.animation.PlayQueued (idle); } } Toda vez que a tela redesenhada, eu verifico se o boto foi pressionado (if(Input. GetButtonDown(Fire1))): - Rigidbody bullet = Instantiate(myBulletPrefab, transform.position, transform.rotation) as Rigidbody; - Eu crio uma cpia do prefab myBulletPrefab na posio e rotao do objeto ao qual est associado o script (no caso, o BulletSpawn); - bullet.velocity = transform.TransformDirection(new Vector3 (0,0,shootForce)); - Defino a velocidade do prefab instanciado para X = 0,Y = 0 e Z = shootForce; - audio.PlayOneShot(shootClip); - Comeo a tocar o audio - gun.animation.Play (shoot);- Comeo a tocar a animao shoot; - gun.animation.PlayQueued (idle); - Assim que a animao atual terminar, comeo a tocar a animao idle; Agora necessrio definir as variveis utilizadas pela classe, que so: public Rigidbody myBulletPrefab; public int shootForce = 20; public AudioClip shootClip; public GameObject gun; - Rigidbody myBulletPrefab: Esse o prefab da bala que criamos; - int shootForce: Velocidade inicial da bala; - AudioClip shootClip: O som a ser tocado quando a arma disparada;

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

71

Sumrio

- GameObject gun: A arma, precisamos saber qual a arma para poder tocar as animaes shoot e idle; Como demonstramos quando criamos a bala, como essas variveis so pblicas elas podem ser alteradas dentro do editor: - Varivel myBulletPrefab: Arraste o prefab Cube da janela Project para o campo My Bullet Prefab da seo Bullet Shooter (Script); - Varivel shootForce: Mantenha o valor 20; - Varivel shootClip: Arraste o arquivo bang.wav para a janela Project e depois arraste o objeto bang da janela Project para o campo Shoot Clip da seo Bullet Shooter (Script); - Varivel Gun: Arraste o objeto bazooka da janela Hierarchy para o campo Gun Clip da seo Bullet Shooter (Script). Sua configurao deve estar igual a Fig. 29.

Fig. 29: Janela Inspector do objeto BulletSpawn aps configurao das variveis.

Clique Play e teste o disparo clicando o boto esquerdo do mouse. Tudo funciona exceto o som. Isso porque necessrio tambm acrescentar um componente chamado AudioSource ao objeto BulletSpawn, para que o som possa ser executado. Clique no objeto BulletSpawn na janela Hierarchy, depois clique em Component -> Audio -> Audio Source. Clique Play e agora o udio deve estar funcionando corretamente. 9. Criando um inimigo Agora vamos criar um rob que ser o nosso alvo. Clique em Assets -> Import Package -> Custom Package e selecione o arquivo robot.unitypackage, clique em Import no pop-up. Selecione o prefab Robot_Animated e arraste- o para a janela Hierarchy, depois posicione o rob em frente a cmera (Fig. 30).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

72

Sumrio

Fig. 30: Rob criado e em frente a cmera.

Aperte Play. Voc vai notar que o Rob j tem uma animao de Idle (ele fica balanando). Tente disparar no rob, voc vai notar que a bala passa atravs dele. Esse o mesmo problema da plataforma que tivemos no incio do tutorial, o rob no tem um box collider. Na janela Hierarchy, clique no objeto Robot_Animated, depois clique em Component -> Physics -> Box Collider. Depois voc deve ajustar o tamanho e posio do Box Collider de acordo com a Fig. 31.

Fig. 31: Configurao do Box Collider para o rob, note o Box Collider (caixa verde) na janela Scene.

Clique Play, agora as balas param no Rob. O prximo passo e fazer o tratamento da coliso da bala com o rob. Arraste o arquivo BulletHit.cs para a janela Project, depois arraste o objeto BulletHit para o objeto Robot_Animated na janela Hierarchy. Vamos analisar a classe BulletHit:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

73

Sumrio

public class BulletHit : MonoBehaviour { void OnCollisionEnter (Collision other) { if (other.gameObject.tag == Bullet) { Destroy (gameObject); Destroy (other.gameObject); } } } O primeiro detalhe a falta das funes Start() e Update(), na verdade estas funes no so necessrias, voc pode ter uma classe sem ambas sem problemas. A funo OnCollisionEnter() chamada no momento em que um objeto entra numa rea de coliso pertencente ao objeto ao qual este script est associado. Neste caso, o Box Collider do rob que acabamos de criar, e o objeto que entrou na rea de coliso o parmetro other da funo. O que est acontecendo dentro desta funo: - if (other.gameObject.tag == Bullet): Verifica se o objeto que colidiu com a caixa de coliso (other) tem a Tag Bullet; - Destroy (gameObject): O objeto ao qual o script est associado destrudo; - Destroy (other.gameObject): O objeto que colidiu com a caixa de coliso destrudo; Aps arrastar o script para o objeto Robot_Animated, clique em Play e tente atirar no rob, agora tanto o rob quanto a bala desaparecem, conforme explicado acima. 10. Acrescentando um Navigation Mesh Vamos fazer agora com que o inimigo nos siga pelo nvel. Para isso vamos criar um Navigation Mesh (mapa indicando os caminhos que podem ser percorridos) e adicionar o NavMesh Agent ao nosso rob. Para fazer parte de um Navigation Mesh, um objeto deve ser Navigation Static, para verificar o status de um objeto, clique nele na janela Scene, ou Hierarchy, e no canto superior direito da janela Inspector voc tem um pull-down com todas as configuraes de esttica do objeto (Fig. 32).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

74

Sumrio

Fig. 32: Configuraes de static para um objeto. Como ele Navigation Static ele pode ser utilizado num Navigation Mesh.

Para comear necessrio selecionar todos os pisos que faro parte do nosso Navigation Mesh, faa isso clicando em cada uma das partes do cho da nossa fase na janela Scene (para selecionar mais de um objeto utilize CTRL+click no Windows ou command+click no MacOS) (Fig. 33).

Fig. 33: Todas as partes de cho selecionadas que faro parte do Navigation Mesh (o cho dentro do tnel tambm foi selecionado).

Uma vez selecionados os segmentos de cho que faro parte do Navigation Mesh, clique em Window -> Navigation e clique no boto Bake no canto inferior direito (Fig. 34).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

75

Sumrio

Fig. 34: janela Navigation.

Aps o termino do Bake, adicione um Nav Mesh Agent ao objeto Robot_Animated: Clique em Robot_Animated na janela Hierarchy e depois clique em Components -> Navigation -> Nav Mesh Agent. Depois arraste os arquivos agentLocomotion.js e robotController.js para a janela Project e depois arraste os objetos agentLocomotion e robotController para o objeto Robot_Animated na janela Hierarchy, depois disso clique em Clique em Robot_Animated na janela Hierarchy e na seo Robot Controller (Script) altere a varivel Nav Distance para 3 e arraste o objeto First Person Controller da janela Hierarchy para a varivel Nav Target (Fig. 35).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

76

Sumrio

Fig. 35: Configurao do objeto Robot_Animated. Notle os componentles adicionados e as configuraes do Robot Controller

11. Adicionando uma exploso ao rob


Vamos criar um efeito de exploso no momento em que o rob destrudo. No script BulletHit.cs, descomente as linhas 6 (public GameObject explosion;) e 14 (Instantiate(explosion, transform.position, transform.rotation);). Depois, clique em Assets -> Import Package -> Custom Package e importe o pacote fireExplosion.unitypackage. Feito isso, selecione o objeto Robot_Animated na aba Hierarchy, note que dentro do script BulletHit Voc agora tem uma varivel Explosion. Na janela Project expanda as

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

77

Sumrio

pastas Explosion -> Effects e arraste o prefab fireExplosionBase para a varivel Explosion (Fig. 36).

Fig. 36: Script Bullet Hit do objeto Animated_Robot com a varivel Explosion configurada.

Aperte play. Agora quando voc atirar no rob o mesmo desaparece e uma exploso aparece no cho.

12. Otimizao: Lightmapping


Neste exato momento, toda a iluminao da sua cena est sendo calculada em tempo de execuo. Porm para a grande maioria dos elementos da sua cena esse clculo no necessrio, as paredes e plataformas por exemplo no mudam de posio, portanto a iluminao e sombreamento destes elementos ser sempre a mesma. A fim de economizar processamento fazemos o lightmapping da fase, que substitui as sombras dinmicas por texturas. O lightmapping gera um mapa que aplicado aos elementos estticos da fase. Todos os elementos que estamos utilizando j esto configurados como estticos (ou no). Na aba Hierarchy, clique em First Person Controller, no canto superior direito da aba Inspector h o pull-down menu de Static, expanda ele e voc ver que o First Person Controller no est configurado para ser esttico, isso significa que ele no ser afetado pelo lightmapping (Fig. 37).

Fig. 37: Configurao esttica do First Person Controller

Porm, se voc selecionar qualquer um dos objetos dentro de Level na aba Hierarchy, voc vai notar que estes elementos esto configurados como static, e sero afetados pelo lightmapping (Fig. 38).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

78

Sumrio

Fig. 38: Configurao de um dos elementos da fase

Para configurar o lightmapping clique em Window -> Lightmapping, uma nova janela ser aberta, clique no boto Bake na parte superior da janela e certifique-se que o Mode est configurado para Single Lightmapping e configure o valor de Resolution para 5. Feito isso, clique no boto Bake Scene no canto inferior direito e aguarde o trmino da criao do lightmapping (Fig. 39).

Fig. 39: Aba lightmapping aps a concluso. Note o mapa de texturas de sombras no Preview.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

79

Sumrio

13. Otimizao: Occlusion Culling


OBS: Occlusion Culling est disponvel somente na verso Pro do Unity. Caso voc tenha a verso bsica e seu trial de 30 dias da Pro expirou, voc no conseguir executar esse captulo do tutorial.

Por default, o Unity utiliza Frustum Culling desenha todos os polgonos que esto dentro da rea de viso da cmera, independente se eles esto escondidos atrs de outros objetos (Fig. 40).

Fig. 40: Exemplo de Frustum Culling. Esta nossa fase vista de cima, o cone branco mostra o cone de viso da cmera. Todos os polgonos neste cone so desenhados, inclusive os que esto atrs da parede destacada em vermelho e que no podem ser vistos pelo jogador.

Para otimizao, possvel utilizar Occlusion Culling nos jogos feitos em Unity. O Occlusion Culling vai desenhar somente os objetos que so efetivamente vistos pelo jogador, mesmo que estejam no cone de viso da cmera. Para ativar o Occlusion Culling, clique em Window -> Occlusion Culling. O grid branco do Occlusion Culling vai aparecer na janela Scene, ajuste o tamanho do grid com a ferramenta de Scale e certifique-se que toda a cena est dentro do grid (Fig. 41).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

80

Sumrio

Fig. 41: Janela Scene com o grid de Occlusion Culling aplicado em toda a cena

Feito isso, clique no boto Bake no canto inferior direito da aba Occlusion. Uma vez terminado o Bake, aperte Play, e note na aba Scene que agora s os polgonos que esto sendo desenhados so exibidos

Fig. 42: Aba Scene com Occlusion Culling ativado. Compare com os polgonos que seriam desenhados na Fig. 40.

14. Otimizao: Lightprobing


OBS: Lightprobing est disponvel somente na verso Pro do Unity. Caso voc tenha a verso bsica e seu trial de 30 dias da Pro expirou, voc no conseguir executar esse captulo do tutorial.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

81

Sumrio

Com a ativao do lightmapping surgiu um problema: Os elementos que tem iluminao dinmica passam a no ter sua iluminao alterada quando passam de uma zona iluminada para uma zona com sombra. Voc pode notar essa diferena ao passar pelo tnel indicado na Fig. 43. Alm disso note a diferena de iluminao na Fig. 44.

Fig. 43: Mapa da fase destacando em vermelho o local da anlise da Fig. 45

Fig 44: As figuras de cima mostram o jogo com Lightmapping desativado, note que a diferena de iluminao na arma na imagem da esquerda (regio iluminada) e na imagem da direita (regio com sombra). As figuras de baixo mostram o jogo com Lightmapping ativado, note que a iluminao na arma no muda entre as duas imagens.

A soluo usar lightprobes. Lightprobes coletam informao de iluminao nos pontos onde so colocados e geram um efeito similar a iluminao dinmica com baixo custo de processamento.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

82

Sumrio

Para acrescentar Lightprobes a sua cena clique em GameObject -> Create Empty, e um objeto chamado GameObject vai surgir na aba Hierarchy, clique com o boto direito no GameObject criado e o renomeie para Lightprobe. Com esse objeto selecionado clique em Component -> Rendering -> Light Probe Group e agora vamos criar os Light Probes. Como melhor prtica o ideal criar um volume com os Light Probes para que a coleta seja eficiente. Para adicionar Light Probes selecione o objeto Lightprobe na aba Hierarchy e clique no boto Add Probe na aba Inspector. Voc vai notar que uma esfera azul vai surgir na janela Scene, altere a posio dela e inclua mais probes no formato de um volume (Fig. 45).

Fig. 45: Sistema de Light Probes criado na cena. Note que parte dos probes est na parte iluminada e parte est na parte sombreada da plataforma.

Uma vez criado o conjunto de Light Probes, procure o objeto Bazooka1 dentro da aba Hierarchy, e dentro do Mesh Renderer na janela Inspector, ative a opo Use Light Probes (Fig. 46). Feito isso clique em Window -> Lightmapping e clique no boto Bake Scene, pois uma vez criados os light probes necessrio refazer o bake do Lightmapping. Uma vez feito o bake clique em play e passe pelos probles criados, voc vai notar que a iluminao na arma modificada (Fig. 46).

Fig. 46: Cena com Lightmapping e Light Probes ativados, note a diferena de iluminao na arma entre a regio iluminada (esquerda) e regio sombreada (direita).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

83

Sumrio

Organizando os Mapas de Iluminao dos Assets de Arte para os Motores de Jogos: Consideraes Metodolgicas para o Caso da Produo Voltada ao Motor de Jogos UDK
Lus Carlos Petry1 Eliseu de Souza Lopes Filho2 Maigon Nacib Pontuschka3 Felipe Dacal Fragoso4 Gabriel Cavalcanti Marques5 Winna Hita Iturriaga Zansavio6

1 Pontifcia Universidade Catlica de So Paulo - Brasil; Programa de Ps-graduao Inteligncia e Design Digital (TIDD); petry@pucsp.br, alletsator@gmail.com. 2 Pontifcia Universidade Catlica de So Paulo - Brasil; Programa de Ps-graduao Inteligncia e Design Digital (TIDD); eliseulopes@pucsp.br. 3 Universidade Federal de Rondnia (UNIR); maigonp@gmail.com. 4 Pontifcia Universidade Catlica de So Paulo - Brasil; Programa de Ps-graduao Inteligncia e Design Digital (TIDD); fefragoso@gmail.com. 5 Pontifcia Universidade Catlica de So Paulo - Brasil; Programa de Ps-graduao Inteligncia e Design Digital (TIDD); arzael_wolf@hotmail.com. 6 Pontifcia Universidade Catlica de So Paulo - Brasil; Programa de Ps-graduao Inteligncia e Design Digital (TIDD); vampyr_flicka@hotmail.com.

em Tecnologias da em Tecnologias da

em Tecnologias da em Tecnologias da em Tecnologias da

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

84

Sumrio

Figura 1: Cena temtica renderizada do motor UDK.

Resumo
O presente artigo apresenta uma metodologia que se prope a organizar os mapas de iluminao7 dos objetos tridimensionais que so produzidos para o motor de jogos8 UDK. Identifica a problemtica na comunidade de produtores, realiza um apanhado das solues encontradas e prope uma metodologia que pode ser aplicada de modo rpido e eficiente. Tal metodologia se embasa em pesquisas acadmicas e nos ensinamentos da histria do desenho e da pintura Ocidentais. Mostra que com uma rigorosa metodologia cientfica que oriente o labor tridimensional possvel a produo de recursos tridimensionais no padro da indstria internacional de jogos (triple A). Palavras-Chave: Metodologia 3D. Modelagem 3D. Lightmap. Topofilosofia. UDK. Maya.

1. Introduo
Todos os dias os artistas tridimensionais enfrentam problemas tcnicos e conceituais na dura tarefa de produzir recursos de qualidade para os motores de jogos. Mas, quando uma dificuldade combina ambos, tanto os requisitos tcnicos como os conceituais que eles so alertados para a importncia de uma atitude e uma disciplina de trabalho organizada metodologicamente. No presente artigo enfocamos um destes momentos comuns que tem exasperado inmeros usurios do motor de jogos UDK no mundo inteiro e tem sido fonte para debates em fruns, artigos e extensa documentao: a importao de recursos de arte que tenham uma apresentao e performance de qualidade profissional, quando submetidos ao sistema de Lightmass do motor. Para alcanar este objetivo, os artistas tm de lidar com os requisitos envolvidos na produo de um mapa de iluminao para os objetos tridimensionais, fato que envolve tanto aspectos conceituais dos mais diversos, desde conhecimentos referentes a teorias da luz, da parametrizao dos objetos, da organizao de mapas de UV, etc.

7 Os termos tcnicos utilizados pela comunidade de produo so traduzidos na verso portuguesa do presente artigo visando a sua mxima inteligibilidade conceitual. Lightmap traduzido por mapas de iluminao; assets por recursos 8 Os termos engine e game engine, foram respectivamente traduzidos por motor e motor de jogo

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

85

Sumrio

nesse sentido que o presente artigo enfoca a produo de recursos de arte tridimensional e seus requisitos tcnico-conceituais envolvidos, a fim de serem integrados em ambientes digitais pelo motor de jogos UDK no quesito da produo de mapas de iluminao. Nossa pesquisa abarca os seguintes aspectos: a identificao dos problemas mais comuns na importao de assets de arte (objetos tridimensionais) no motor de jogos UDK relacionados com os requisitos tcnicos do plano UV, nos mapas de iluminao para a ao do Lightmass; a apresentao de uma metodologia normativa e sequencial para a preparao de recursos de arte para sua importao no motor de jogos; a estruturao das etapas de trabalho para a produo de assets de arte em uma pipeline exequvel, rpida e eficaz; a demonstrao das etapas da metodologia proposta em um exemplo prtico de trabalho de produo de um recurso de arte padro; a mostrao [Petry 2003] da possibilidade da produo de assets de arte de qualidade superior para o uso em produes de jogos comerciais e acadmicos no Brasil; finalmente, estimular a colaborao conceitual e pragmtica possveis entre as pesquisas acadmicas de jogos e os esforos da indstria nacional de jogos. O relatrio completo da pesquisa do grupo pode ser acessado no site de pesquisa topofilosofia.net, na seo pesquisa. Nele o interessado ter acesso a todo o material, bem como a uma documentao que contempla a teoria e o conjunto de tutoriais e recursos produzidos9.

2. Aspectos da problemtica metodolgica envolvida


A produo de recursos tridimensionais para motores de jogos envolve um conjunto de conhecimentos de amplo escopo e o seu domnio tcnico e conceitual demanda uma curva de aprendizagem considervel. Ele est inserido em um campo que mescla dinamicamente habilidades e competncias artsticas e requisitos tcnicos. Como muito bem diz Rabin [2012], o modelador 3D profissional um escultor e um tcnico. Ele um artista e um engenheiro. Uma anlise da situao mostra que o domnio dos processos de produo de recursos de arte tridimensional para o motor de jogos UDK exige do designer um grande esforo de formao e a constante busca de atualizao dos conhecimentos tcnicos relacionados, tanto no que diz respeito modelagem 3D, bem como aos requisitos estabelecidos pelo motor de jogo. Inmeros so os exemplos de solicitaes de ajuda por parte dos iniciantes nos usos do motor UDK em relao aos problemas de sangramento (bleeding) na produo dos mapas

9 A metodologia sintetizada no presente artigo o resultado de parte de uma pesquisa acadmica (no TIDD) que tem como enfoque central o estudo das capacidades tcnicas dos softwares tridimensionais e dos motores de games para a produo de ambientes (e seus objetos) e recursos expressivos para o estabelecimento de uma linguagem dos jogos (sintaxe e semntica) ao modo das pesquisas j realizadas para as linguagens do teatro, cinema e hipermdia.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

86

Sumrio

de luz para o Lightmass10. o caso do pedido de ajuda do usurio SeBeQ (Iron Guard, dos EUA), do qual recolhemos uma amostra imagtica (figura 2) do problema apresentado por ele:

Figure 2: Imagem apresentando o problema de sangramento do mapa de luz. Modelo apresentado pelo usurio SeBeQ no frum da EPIX em fevereiro de 2010. As marcas de vermelho indicam as regies de sangramento.

Outro usurio, Philhowlett, no frum do game-artist.net, coloca o problema do mapa de iluminao em uma construo urbana tridimensional: Se algum pudesse me ajudar com isso seria brilhante! E expe a sua problemtica dizendo, estou tendo um momento muito difcil em meu trabalho e luto para conseguir que meus objetos tenham um bom mapa de iluminao no UDK, situao que mostramos na figura 3 postada por ele no frum.

Figura 3: As setas brancas indicam os pontos de problemas com o mapa de iluminao.

Foi a partir dos inmeros problemas identificados, tanto nos fruns dos desenvolvedores como no estudo que realizvamos do motor de jogos, que nossa equipe resolveu transformar o chamado problema de produo em uma problemtica de pesquisa, ao modo da metodologia topofilosfica11: quais os fundamentos e passos metodolgicos a serem realizados para a produo de mapas de iluminao adequados para o motor de jogo UDK?

3. O motor de jogos UDK e seus mapas de iluminao


O motor de jogos UDK12, sigla do Unreal Development Kit, derivado do motor Unreal 3 da EPIC e teve a sua abertura gratuita para a comunidade em novembro de 2009. Pautado
10 Exemplos da problemtica podem ser encontrados nos inmeros pedidos de ajuda postados nos fruns de usurios. Citamos dois deles aqui: http://forums.epicgames.com/archive/index.php/t-743360.html; http://www. game-artist.net/forums/support-tech-discussion/13168-udk-light-mapping-help-pretty-urgent.html 11 Detalhes sobre a metodologia topofilosfica podem ser encontrados em Petry (2003). 12 O UDK possui seu site em: udk.com.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

87

Sumrio

por uma poltica audaciosa, o UDK desde o incio foi balizado por atualizaes mensais. Com essa poltica ele estimulou a comunidade de desenvolvedores e estudiosos na produo de jogos, comerciais e indie dentro do padro de qualidade da indstria internacional (triple A). Ainda que a ferramenta no fosse desconhecida pela comunidade internacional de desenvolvedores, uma vez que se aproximava muito do editor de nveis da franquia de jogos tambm pertencentes Epic, o Unreal Tournament 3, o lanamento do Unreal Development Kit foi acompanhado da promessa de que os produtores seriam capazes de gerar um executvel de seu projeto e no mais apenas Mods da franquia13. Nesse sentido, o lanamento do UDK se constituiu em um marco no desenvolvimento de jogos, principalmente do ponto de vista dos desenvolvedores indie e da academia. Porm, cada motor de jogos possui peculiaridades tcnicas e conceituais que devem ser observadas, as quais estruturam pr-requisitos para um adequado desenvolvimento. o caso do motor de jogos UDK, que mesmo com a sua liberao gratuita para a comunidade, mantm seu padro de funcionalidade dentro de escopo profissional internacional. Neste sentido, uma das mais importantes e poderosas funcionalidades do motor, a iluminao baseada no Lightmass14, tem como pr-requisito a organizao prvia de mapas de iluminao (lightmaps). Tal aspecto, fez com que uma comunidade de desenvolvedores, acostumada a trabalhar privilegiando o estilo de modelagem intuitiva em detrimento dos preceitos tcnicos da teoria parametrizada dos objetos, enfrentasse um grande desafio. Foi a partir da constatao dessa necessidade e oportunidade metodolgica que estruturamos a problemtica indicada no tpico 2 acima.

4. Trabalhos relacionados
Muitos profissionais dedicados ao desenvolvimento com o motor de jogos UDK e envolvidos com o ensino da utilizao das ferramentas de modelagem associada ao motor de jogo produziram materiais bibliogrficos que discutem amplamente o conceito e a produo dos mapas de iluminao. Richard Moore, autor do Unreal Development Kit: Beginners Guide, reserva toda uma seo de seu livro para a discusso geral do conceito relacionado aos objetos BSP15 e aos

13 Um dos aspectos j referidos que um grande diferencial a ser observado, foi a coerente continuidade que a equipe da EPIC manteve nas atualizaes mensais do motor de jogos, sem restries de uso e aplicao tcnicas, as quais permitiram inmeros lanamentos de jogos e metaversos em um alto padro de qualidade. 14O Lightmass com a estrutura de lightmap foi introduzida em Junho de 2009 no UDK com o Build: QA_ APPROVED_BUILD_JUN_2009. 15 Objetos BSP: o termo utilizado para designar um tipo especial de objeto interno ao motor de jogo. A sigla BSP significa: Binary Space Partitioning, diviso (partio) binria do espao. Eles so objetos criados que tm a finalidade de compor parte de uma cenrio, unicamente a partir dos brushes disponibilizados pelo motor UDK.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

88

Sumrio

chamados Static Meshes16 [Moore 2012]. Thomas Mooney, autor de Unreal Development Kit Game Design Cookbook, discute a resoluo a ser utilizada nos lightmaps de objetos e a necessidade de se manter os mltiplos de 2 [Mooney 2012]. Jason Busby, Zak Parrish e Jeff Wilson, os autores do Mastering Unreal Technology I e II, discutem detalhadamente a questo da iluminao e dos mapas de iluminao dentro do Unreal Engine 3 [Busby et al. 2009]. O site educacional criado por Jason e Angela Busy, o 3dbuzz.com, dentre as centenas de vdeos didticos sobre o UDK, possui 14 vdeo-aulas dedicadas especificamente ao tema dos mapas de iluminao e do sistema de Lightmass, constituindo-se em uma referncia para quem deseja dominar a problemtica [Busby 2012]. Temos tambm o Belga, Sjoerd Hourences De Jong, notrio artista e didata no mundo do Unreal, que nos apresenta uma slida introduo ao Lightmass e ao lightmap nos seus artigos, Introduction to using the Lightmass system e Lightmapping Meshes In The Editor: How to set up lightmapping on a mesh [Hourences 2010]. Ainda que ambos sejam direcionados ao UT3 (Unreal tournament 3) a sua estrutura conceitual e de parametrizao inteiramente aplicvel ao UDK. Por outro lado, Stephen Jameson escreveu um artigo no qual, dentre outras coisas, demonstra a necessidade da produo de mapas de iluminao diferenciados para os objetos e a sua disposio em um alinhamento parametrizado na grade do mapeamento UV [Jameson 2009]. Outro grande designer, Alex Galuzin, em seu site didtico, World of Level Design, apresenta inmeros artigos que tratam de forma concisa e eficaz a problemtica em questo. So eles: UDK: Lightmap Basics and 18 Important Principles for Creating and Using Lightmaps; UDK: Lightmap UV Layout Techniques and How to Create a Second UV Channel in Maya; UDK: How to Fix Lightmap Light/Shadow Bleeding and Seams; UDK: Lightmap Resolution for Static Meshes and BSP; UDK: Lightmap Common Problems and Solutions. [Galuzin 2012] O trabalho de Galuzin pode ser considerado uma das maiores, mais generosas e importantes contribuies realizadas at o momento para o entendimento e entrelaamento entre o UDK e as ferramentas de modelagem tridimensional, especialmente o Maya. Finalmente, no prprio sistema de documentao da EPIC Games, a partir da introduo do sistema de Lightmass, em 2009, Daniel Wright publica um artigo intitulado, Lightmass Static Global Illumination [Wright 2009]. Nesse artigo ele nos indica a correlao

16 Static Meshes: o nome dado para os objetos poligonais 3D que compem um cenrio, cena de um jogo ou espao navegvel. So chamados de static, porque esses objetos so estticos, ou seja, no esto animados, muito menos sofrem qualquer reposicionamento no campo paramtrico do mapa durante o jogo. Eles servem ao propsito de compor, dar identidade e decorar o cenrio. Assim, eles so construdos nos softwares de modelagem e so exportados para o motor de jogo. Sem os static meshes, no h ambiente do jogo, nem espao navegvel; restaria apenas uma cena vazia. Dessa forma, tudo aquilo que ocupa a cena 3D, objetos, mveis, vegetaes, entre outros, e que no animado, uma static mesh. neles que incide a problemtica dos mapas de iluminao.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

89

Sumrio

entre o Lightmass e o lightmap, mostrando que o segundo uma direta e consequente construo do primeiro17. Todos esses trabalhos nos incitam a pesquisar tambm os fundamentos presentes no conceito de mapa de iluminao no UDK, dado que ele implica em uma teoria da luz e uma normatizao na produo dos objetos tridimensionais. Enfim, uma mirade de materiais de qualidade sobre o tema que hoje esto disponveis na Rede para os pesquisadores. A cada dia [,] novos materiais que discutem propriedades conceituais ou tcnicas do tema so disponibilizados para a comunidade de desenvolvimento, enriquecendo a base de informao sobre esse campo de conhecimento. Nossa concluso que a literatura encontrada sobre o tema dos mapas de iluminao deixa absolutamente claro que devemos sempre nos armar de uma metodologia na produo tridimensional que permita a construo de mapas de iluminao parametrizados para nossos objetos. Mais do que uma recomendao simplesmente operacional, ela nos indica um alerta que combina tcnica e conceito na visada da qualidade da produo de recursos para jogos.

5. A teoria da parametrizao dos objetos e da luz e sua relao com o mapa de iluminao no UDK
Dois aspectos so fundamentais para a organizao dos mapas de iluminao dos objetos tridimensionais: [1] a sua parametrizao no espao tridimensional e [2] a sua organizao em relao luz que ser produzida no motor de jogo. Enquanto a luz organiza as massas dentro do mundo digital do jogo, a parametrizao dos objetos no espao digital, no que tange aos seus mapas UV, estrutura a prpria rea do objeto e o seu como o objeto ser afetado pela luz dentro do ambiente digital. o que discutiremos a partir de agora. 5.1 A estrutura parametrizada do ambiente de construo tridimensional Todo objeto tridimensional que importamos para o ambiente de produo do motor de jogo um recurso que compreendido pelo sistema do motor a partir de parmetros, a partir do que, na tradio Ocidental, ficou conhecido como parametrizao dos objetos. A teoria da parametrizao dos objetos remonta aos trabalhos renascentistas de Leonardo Da Vinci [1452-1519] e Albrecht Drer [1471-1528]. Enquanto que do primeiro ns recebemos a perspectiva de organizao formal da figura humana [Mussara 2011], o segundo nos conduziu ao sistema de parametrizao dos objetos na grade de desenho paramtrico (figura 4), o qual pode ser utilizado de inmeras formas para a produo de representaes artsticas e paramtricas.
17O Lightmass cria lightmaps com interaes complexas de luz como reas de sombreamento e inter-reflexes difusas. Ele ortogonal ao restante da renderizao do pipeline (iluminao dinmica e sombreamento. Ele apenas substitui os lightmaps e mapas de sombras estticas por outros de qualidade superior [Wright 2009].

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

90

Sumrio

Figura 4: Duas representaes artsticas da Grade de Drer (1 e 2) e uma reconstruo atual dela (3)

Do trabalho conceitual de Drer deriva o ambiente das Janelas de visualizao em grade dos softwares de modelagem 3D atuais. Dele tambm derivam as tcnicas de desenho projetivo e os seus correlatos designados por diversos nomes, tais como blueprint, model sheet em alguns casos, etc. Todos os desenhos que inserem um dado objeto em uma grade orientada, seja para reproduo pantogrfica, modelagem 3D, etc., possuem no trabalho de Drer o seu fundamento formal. Considere em um Cubo a transposio do esquema de Drer para o software de modelagem 3D (figura 5). A parametrizao, esse importante elemento que conjuga arte e cincia, oferece-nos a chave para entender que todo objeto tridimensional deve ser compreendido dentro de um campo de coordenadas espaciais delimitadas pelos eixos X (horizontais) e Y (verticais) de um dado plano. a partir dessa racionalidade que temos os mapas de iluminao, derivados de uma organizao de mapas UV, orientados por coordenadas. Dessa premissa deriva que, dado que todo objeto construdo no campo tridimensional compreendido entre coordenadas tridimensionais, a representao de seu mapeamento UV, que poder ser utilizado para a construo de seu mapa de iluminao, deve ser pensado dentro do campo abrangido pelas coordenadas UV (nos eixos X e Y do plano do mapa)18. Demonstra-se assim, com a teoria da parametrizao, o primeiro construto de nosso fundamento tcnico-conceitual.

18 Isso sem falar aqui por falta de espao do trabalho do filsofo francs Blaise Pascal que, em 1639, com seu Ensaio sobre cnicas, organiza a ideia das projees sobre um plano que servir, duzentos anos depois, como base para o desenho projetivos de objetos e mquinas [Attali 2003].

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

91

Sumrio

Figura 5: esquerda um Cubo na janela frontal e direita a sua disposio nas coordenadas do mapa UV .

5.2 A estrutura da luz nos jogos e a sua relao com a teoria da parametrizao dos objetos a luz que d volume, forma, cor e sentido aos objetos no mundo real e, da mesma forma, no mundo digital. Light, seeking light, doth light of light beguile; So are you find where light in darkness lies, Your light grows dark by losing of your eyes disse William Shakespeare [1598]19. Desde os gregos, com seu teatro, a questo da luz ocupava um papel fundamental. Tendo um forte impacto na estruturao dos elementos cnicos e na produo de sentido, do teatro ao cinema, temos todo um desenvolvimento de linguagem que faz com que a iluminao se constitua em um elemento nuclear da linguagem, em um real produtor de sentido, de sentimentos e vida, como muito bem j havia nos mostrado, Goethe [1810] j no Sculo XIX, com a sua Zur Farbenlehre, (Sobre a Teoria das Cores) (figura 6).

Figura 6 : Retrato de Goethe e sua Roda das Cores, hoje usada como estrutura do padro cromtico e da luz digital. 19 Luz, buscar a luz, por ventura a luz nos desvia da luz? Ento se voc buscar a luz onde h trevas, A sua luz se esmaece na escurido pela perda de sua viso.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

92

Sumrio

Nos jogos, a luz comporta em funes (e propriedades) tcnicas e semnticas. Ela participa da construo formal do objeto; dirige e molda o sentido perceptivo20 do jogador em tempo real durante todo o processo do jogo. A luz acentua ou diminui um conceito ou ideia durante o jogo, dependendo de sua estrutura, sua cor, sua intensidade, de seu FOV ou de seu Falloff, de seu foco, de seu ponto de origem, de sua animao, etc. Pode ser a responsvel pelo anncio sgnico de que algo ir acontecer, ser o detonador de um estado de tenso ou de medo no jogo, de xtase e assim por diante. Ela a alma oculta e amorosa de todas as coisas que existem, seu fundamento ontolgico mais ntimo. Enfim, a iluminao possui um papel fundamental na constituio do quadro visualperceptivo-afetivo do jogo, sendo inclusive a responsvel pelo ocultamento ou revelaoacentuamento de todos os demais elementos tridimensionais do jogo. A sua presena, regulada dentro de princpios de iluminao que conduzem parte da estrutura do jogo, responsvel pela valorizao e nfase das personagens e dos objetos e da arquitetura (static meshes). Sem a sua presena os elementos do jogo se tornam artificiais, pois perdem o elemento mais bsico de sua ligao com o ambiente. Este dado pela sombra, que na sua ausncia, transforma o que poderia ser um cenrio realista em um ambiente plastificado, incidindo drasticamente na reduo da sensao de presena [Pinheiro 2012] e do sentimento de imerso [Murray 2003]. Nessa direo que Bahia [2006] nos chama a ateno para a relao existente entre iluminao e histria da arte. Em diferentes momentos e perodos os artistas trabalhavam pontos de luz que estruturavam semanticamente o trabalho representado, transmitindo maior ou menor realismo, conduzindo ou se afastando de uma produo esttica que produzisse a verossimilhana. Ao pensar a questo do ponto de luz na produo de sentido da obra de arte, em uma comparao entre o trabalho de Da Vinci e Tintoretto [1518-1594], Bahia [2008] identifica neste ltimo qualias simblicas que o colocam como um construtor de cena na qual a luz evidencia o seu papel formador: ao colocar a cena em runas, com seu anjo entre dois mundos e com a luz divina projetando-se sobre ele, o artista estrutura uma densidade sem par para a cena pictrica (figura 7).

Figura 7 : Anunciao de Tintoretto, entre 1583 e 1587. 20 Referncias que aqui podem ser muito elucidativas quanto funo da luz na percepo humana do mundo so as produzidas pelo fenomenlogo Merleau-Ponty [1945 e 1964].

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

93

Sumrio

Esta mesma estrutura superlativa aparece nas pinturas de Caravaggio [1571-1610] e Rembrandt [1606-1669]. Isso nos leva ao fato de que em termos de artes visuais, um dos elementos mais importantes a serem ressaltados a iluminao, a qual se faz presente e notada inclusive desde os primeiros estilos e movimentos artsticos. No caso da percepo barroca, a iluminao adquire contornos fortes no elemento visual final, passando a ser mais trabalhada e adquirindo uma superlativa importncia na composio final da cena. o caso da inspirao temtica, pictrica e de iluminao dos jogos Dead Space 2 [2011] e Deus Ex Human Revolution [2011], que inspiram-se fortemente no modelo de iluminao pictrica do barroco rembrandtiano. Dead Space 2 foi o primeiro jogo a adotar o conceito de uma equipe dedicada de light design [Milhan 2011], os quais igualmente tomaram como inspirao o modo de ser da luz barroca, especialmente a pintura de Rembrandt, A aula de anatomia do Dr. Tulp [1632] (figura 8), na qual o prprio ponto de emisso de luz tende a se construir como uma personagem prpria21.

Figura 8 : A incrvel e expressiva iluminao da Aula de anatomia do Dr. Tulp de Rembrandt.

A unio destes dois elementos: parametrizao dos objetos e estruturao da luz, joga um papel fundamental na composio de uma cena com objetos dentro do motor de jogo. De acordo como organizarmos a parametrizao dos mapas de iluminao de nosso objeto e a disposio das luzes na cena teremos diferentes resultados.

6. Aplicao dos conceitos at aqui desenvolvidos na parametrizao do mapa de iluminao de um objeto tridimensional
Na presente seo iremos aplicar as ideias at aqui delineadas, sobre mapas de iluminao e parametrizao de objetos, na organizao de um mapa de iluminao de um objeto tridimensional, que se destina a ocupar um importante espao dentro de uma cena em um mapa no UDK. Enquanto que mostraremos aqui o processo da organizao
21 Rachel Cross a light artist ou light designer de Dead Space 2 que fala sobre o desenvolvimento desta ideia.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

94

Sumrio

do mapa de iluminao no software de modelagem Maya 2012 (em nosso site de pesquisa apresentamos tambm o tratamento realizado no Cinema 4D para o problema), a verso utilizada do build, para mostrar os resultados, ser a de Julho 2012 UDK Beta - MD5 661430d4df82c524b07a1f4f6c955f90 (figura 9).

Figura 9 : Imagem da referncia da Verso de Julho de 2012 do UDK.

O objeto escolhido, dentro dos vrios objetos trabalhados em nossa pesquisa ser o de um cubo que sofreu uma transformao homognea de extruso em suas seis faces, com a consequente aplicao de uma textura conceitual. Ns o intitulamos tematicamente com o nome de Cubo Metafsico.

Figura 10: Apresentao do Cubo Metafsico: nosso objeto de trabalho aqui.

O cubo metafsico (figura 10) foi concebido em 1998 a partir de um curso que um dos membros da equipe realizou com a artista digital Eni Oken, uma das designers tridimensionais da Srie Zork Nemesis: The Forbidden Lands [1996] e Zork, Grand Inquisidor [1997] e desde ento fez parte de projetos de games e metaversos, como por exemplo, a pera Quntica AlletSator 4.5 [2008]. 6.1 A parametrizao do mapa de iluminao no Maya 2012 O mapa de iluminao utilizado pelo UDK para o Lightmass se constitui em uma projeo ortogonal da superfcie total do objeto disposta em um plano que segue as coordenadas XY [Wright 2009]. Como mapa de iluminao, o UDK utiliza um canal de UV

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

95

Sumrio

do objeto importando, por default, no canal Um de UV do objeto. Ele armazenado em uma varivel, no painel de Edio do Objeto, designada por Light Map Coordinate Index. Para o mapa de texturizao, o UDK reservar o canal 0 (Zero) das UVs do objeto. Assim, esse canal Um de UV, produzido no software de modelagem, ser utilizado para a produo do mapa de iluminao do objeto a ser exportado para o UDK. Este canal corresponder a um segundo canal de UV criado manualmente no Maya.

Figura 11: Correspondncia dos Canais de UV: UDK e Maya

Reservamos ento o primeiro canal de UV no Maya para a organizao da textura do objeto e, deste modo ele pode permitir, caso necessrio, a sobreposio de faces para o incremento da resoluo da textura, fenmeno designado em ingls pelo termo overlay. No painel de Edio do Objeto no UDK (figura 13) podemos ter uma ideia da organizao do mapa de iluminao dos objetos e avali-la visualmente.

Figure 12 : O painel de Edio do Objeto. Legendas: 1. canais de UV; 2. malha do mapa de iluminao; 3. o Light Map Coordinate Index.

Para mostrarmos a nossa perspectiva metodolgica iniciaremos apresentando uma situao de erro, na qual um mapa de iluminao construdo de forma automatizada e incidindo em problemas de iluminao dentro do UDK. Aps constatarmos o erro, ns iremos apresentar uma forma de tratar adequadamente o mapa de UV do objeto para a produo de um mapa de iluminao de qualidade para ser utilizado no UDK. comum os usurios dos Softwares de modelagem utilizarem os recursos automticos do mesmo e plug-ins para facilitar, automatizar e acelerar o processo de produo.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

96

Sumrio

Entretanto, nem sempre um recurso automtico permite alcanar resultados melhores do que os alcanados pelo trabalho manual.

Figura 13 : Mapa UV resultante da opo Automatic Mapping. Legendas: 1. Cubo; 2. Mapa de UV (Automatic Map).

Figura 14: Os dois erros evidenciados no render: 1. sangramento da textura e da luz; 2. vincos e rupturas nas faces.

Aqui enfocamos a situao dentro do Maya, no qual a opo de mapeamento Automatic Mapping produz uma verso do mapa UV do objeto, a partir dos eixos X, Y e Z colocando-o em uma projeo UV que aplana o objeto em coordenadas XY. Apresentamos um dos objetos de nossa pesquisa, o cubo metafsico com o correspondente resultado da utilizao do processo do Automatic Mapping (figura 13). O mapa de UV gerado para o objeto com este mtodo produzir um mapa de iluminao organizando as faces do objeto nas coordenadas bidimensionais do plano UV, na regio cinza no painel direita na imagem da figura 13. No caso apresentado, a organizao das faces do objeto poligonal dispostas no plano UV segue a orientao de cada um dos seis lados do campo tridimensional, correspondendo s faces correlatas aos eixos X (vista esquerda e direita), Y (vista superior e inferior) e Z (vista frontal e traseira) das janelas de trabalho do software de modelagem.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

97

Sumrio

Com isso cortes na malha do objeto so realizados respeitando a orientao de um mapeamento cbico, sem que seja permitido nenhum controle ou ajuste. O resultado que esse procedimento produz dentro do motor, aps o processo do Lightmass, permite mostrar os erros visveis do mapa de iluminao gerado com o mtodo Automatic Mapping (figura 14). Na imagem capturada do render do objeto na UDK, pode-se visualizar os erros de iluminao quando adotamos o mtodo do Automatic Mapping. Esse mtodo pode ser considerado como NO ADEQUADO para a produo de um mapa de iluminao de qualidade [Galuzin 2012 and Hourences 2010], a no ser que, partindo do Automatic Mapping, o mapa de UV passe por uma profunda edio e modificao manual. Mas ser que esta forma derivada de ajuste da malha no canal de UV se constitui na melhor soluo para o problema? Mostramos agora que na maioria dos casos sempre ser necessria a edio da malha do objeto na UV. Entretanto, nossa pesquisa mostrou que o caminho comeado com o Automatic Mapping, ainda que julgado tentador por muitos, no se constitui no mtodo mais eficiente, dado que demanda um intenso labor e destreza manual por parte do artista digital na edio de faces, vrtices e pontos dentro do plano UV. Em nossa pesquisa observamos que se no for possvel produzir-se naturalmente um mapa planar do objeto com todas as suas faces desdobradas e aplanadas na superfcie, para a gerao do segundo canal de UV, o mtodo de mapeamento mais adequado geralmente est relacionado com a forma topolgica do objeto. Tomando por base a topologia do objeto, podemos utilizar o sistema de projeo do mapa de UV que mais se aproxima dela. No caso modelo do Cubo Metafsico, a topologia mais prxima a cbica. Apresentamos na Figura 15 uma sntese dos passos para se construir o mapa de iluminao. A figura 15 sintetiza os seguintes passos: 1. Aplanamento das faces selecionadas de acordo com a orientao de seus eixos guiado pelo gizmo do eixo universal; 2. Reescalonamento e reposicionamento da face central do cubo para abertura de espao para encaixe das faces transversais da seco do cubo; 3. Aps o aplanamento da face transversal do cubo (ao modo do feito em 1 acima), reposicionamento dela com relao s demais faces de sua continuidade no plano UV; 4. Seleo de pontos soldagem dos pontos (UV together); 5. Resultado da soldagem dos pontos indicados em 4 acima; 6. Resultado da soldagem de todas as faces transversais resultando em um aplanamento completo de uma das faces do cubo; 7. Mostra do processo realizado em todas as seis faces do cubo, resultando no aplanamento completo do mapa UV.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

98

Sumrio

Figura 15 : Passos do processo realizado em todas as seis faces do cubo, resultando no aplanamento completo do mapa UV .

O resultado obtido por este procedimento pode ser observado na figura 16, a qual apresenta a renderizao do cubo dentro do UDK. Com isso ns estamos no caminho de produzir um mapa de iluminao de qualidade para o nosso objeto a ser importando pelo UDK. Dois requisitos ou passos ainda precisam ser cumpridos. Em primeiro lugar importante lembrar que a organizao das faces poligonais do objeto no plano UV corresponde ao que j apresentado na seo 5.1 acima, a uma parametrizao do objeto (um aplanamento do mesmo em termos topolgicos). Ento, para que esta parametrizao alcance o maior resultado possvel na gerao de um mapa de iluminao de qualidade, ser necessrio que os limites topolgicos das reas abrangidas pelas linhas exteriores dos grupos contnuos estejam alinhados com a prpria grade do plano UV e, inclusive, respeitando distncias entre elas que devem ser mltiplos de 2 (2, 4, 8 pixeis, por exemplo). Dado este importante passo estamos prontos para exportar o Cubo Metafsico do Maya para o UDK. Recomendamos que o objeto passe pelo processo de triangulao de suas faces e seja conferido se as mesmas seguem todas a mesma orientao. A possibilidade de produzir uma triangulao sem uma adequada e mesma orientao topolgica para o objeto pode incidir em problemas com o mapa de iluminao. Em exemplos com polfonos com este tipo de triangulao no orientada uniformemente, a luz pode tender a colidir com uma face e produzir manchas, cortes ou os chamados sangramentos (bleedings) no material do objeto distorcendo a sua visualizao. O objeto pode ser exportado nos formatos FBX ou ASE. Ainda que o formato ASE tenha sido descontinuado como plug-in, ele continua funcional. Entretanto, como o objeto foi modelado e trabalhado em seus mapas UVs no Maya ele foi exportado no formato FBX.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

99

Sumrio

As notas do UDK, July 2012 Unreal Development Kit Beta, trazem informaes importantes para orientar os usurios quanto aos requisitos da exportao de recursos no formato FBX: http://www.unrealengine.com/news/epic_games_releases_july_2012_unreal_ development_kit_beta/. A figura 16 mostra o Cubo Metafsico em uma cena no UDK e o mapa UV utilizado para a produo do mapa de iluminao. Ela se constitui na apresentao do corolrio imagtico de um processo metodolgico que mostra a efetiva possibilidade de se produzir recursos de arte com qualidade no padro da indstria internacional de jogos para os artistas tridimensionais e refora a necessidade de conceito e tcnica trabalharem solidariamente em nossas atividades.

Figura 16: O resultado final do processo no UDK, com um mapa de iluminao que valoriza a qualidade artstica do objeto.

7. Concluso
Com o presente artigo buscamos mostrar que seguindo uma metodologia cientfica, orientada por conceitos e tcnicas, possvel trabalharmos na produo de recursos de arte de qualidade para o motor de jogos UDK. O apresentado no espao do artigo se constitui em um resumo parcial de um relatrio de pesquisa no qual trabalhamos detalhadamente os aspectos apresentados e outros. Para os que tiverem interesse no tema pesquisado, indicamos o nosso site de pesquisa, topofilosofia.net, na sua seo Pesquisa, dentro da qual publicamos nosso relatrio e suas fontes na ntegra.

Agradecimentos
A Pesquisa tem financiamento parcial da CAPEs, na modalidade de Bolsa de Mestrado para um dos membros da equipe. Os autores agradecem a leitura da Prof.. Dr . Arlete dos Santos Petry que acompanhou e estimulou ao grupo durante todo processo. Agradecemos ao estmulo dado pelo grupo de pesquisa do CNPq, do Projeto de Pesquisa Dilogos entre Arte e Design: Processo de avaliao e reviso de jogo eletrnico educativo em arte que nos motivou para a inscrio na Trilha de Tutoriais. Dedicamos o presente artigo, in memoriam, ao Prof. Ernest Sarlet, filsofo e pedagogo.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

100

Sumrio

Referncias
ATTALI, JACQuEs. 2003. Blaise Pascal ou o gnio francs. Bauru. EDUSC. BAHIA, ANA BEATRIZ. 2008. Jogando arte na WEB: educao e museus virtuais. Tese de Doutorado apresentada ao Programa de Ps-graduao em Educao da UFSC. Orientador Wladimir Antnio da Costa Garcia. Florianpolis. ______. 2006. Iluminao. Artigo digital no Site do Educador do jogo artstico Manso de Quelcera. Avaliable from: http://www.casthalia.com.br/a_mansao/preste_atencao/ iluminacao.htm [Consult. em aug 2012]. EPIC GAMEs. Community Forum. BSP. Disponvel [on-line] em: http://forums.epicgames. com/threads/751939-Quais-os-modelos-que-o-UDK-importa. [Consult. em Set 2012]. GALuZIN, ALEX. 2012. World of Level Design Tutorials: (1) UDK: Lightmap Basics and 18 Important Principles for Creating and Using Lightmaps; (2) UDK: Lightmap UV Layout Techniques and How to Create a Second UV Channel in Maya (3) UDK: How to Fix Lightmap Light/Shadow Bleeding and Seams; (4) UDK: Lightmap Resolution for Static Meshes and BSP; (4) UDK: Lightmap Common Problems and Solutions. Artigos [online] do Blog do Autor: World of Level Design (EUA). Avaliable from: http://www. worldofleveldesign.com/articles.php. [Consult. em Maio 2012]. GAME DEVELOpERs BRAsIL. Tpico Bsico de Edio 1. Disponvel [on-line] em: gamedevelopersbrasil.net/2011/01/19/120/ . [Consult. em Set 2012]. GOETHE, JOHANN WOLFgANg. 1810. Zur Farbenlehre. Disponvel [on-line] em: http://www. zeno.org/Literatur/M/Goethe,+Johann+Wolfgang/Naturwissenschaftliche+Schriften/ Zur+Farbenlehre, and see also: http://www.seilnacht.tuttlingen.com/Lexikon/goethe1.htm. [Consult. em Set 2012]. BONIN, VINCENT 2004. Interview with Steve Heimbecker, postado no site da Canadian Electroacoustic Community (CEC). Disponvel [on-line] em: http://cec.sonus.ca/ econtact/9_2/heimbecker.html. [Consult. em Set 2012]. FEIJO, BRuNO, CLUA EsTEbAN in SILVA FLVIO S. CORREIA. 2010. Introduo Cincia da Computao com Jogos. Elsevier. Rio de Janeiro. JAMEsON, STEpHEN. 2009. Lightmap UVs Tutorial. Artigo do Blog do Autor [online]. Avaliable from: http://stephenjameson.com/tutorials/lightmap-uvs-tutorial/ [Consult. em Set 2012]. MERLEAu-PONTY, MAuRICE. 1945. Phnomnologie de la perception. Paris. Gallimard. ______. 1964. Le Visible et linvisible, suivi de notes de travail. Paris. Gallimard.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

101

Sumrio

MILLAN, IAN. 2011. Dead Space 2 Lighting Developer Diary. Video depoimentodocumentrio. Machinima.com. Publicado no YouTube. Disponvel [on-line] em: http://youtu. be/GdM3UnW7J3s. [Consult. em Set 2012]. MuRRAY, JANNET. 2003. Hamlet no holodeck: o futuro da narrativa no ciberespao. So Paulo. UNESP. MussARA, FbIO LuIZ LIVRAMENTO BARRETO. 2011. A concepo e criao de caracteres tridimensionais: metodologia da criao e desenvolvimento de personagens tridimensionais para games. Dissertao de Mestrado apresentada ao Programa de Psgraduao em Tecnologias da Inteligncia e Design Digital da PUCSP. Orientador: Lus Carlos Petry. So Paulo. PETRY, Lus CARLOs. 2003. Topofilosofia: o pensamento tridimensional na hipermdia. Tese de Douturado no Programa de Ps-graduao em Comunicao e Semitica da Pontfica Universidade Catlica de So Paulo. Orientador: Srgio Bairon. So Paulo. Disponvel [online] em: http://www.topofilosofia.net/textos/index.html. [Consult. em Set 2012]. PINHEIRO dE SOuZA, CARLOs AugusTO. 2012. Imerso e presena nos jogos FPS: uma aproximao qualitativa. Dissertao de Mestrado apresentada ao Programa de Psgraduao em Tecnologias da Inteligncia e Design Digital da PUCSP. Orientador: Lus Carlos Petry. So Paulo. RAbIN, STEVE. 2012. Introduo ao desenvolvimento de games: criao e produo audiovisual. So Paulo. CENGAGE. SHAKEspEARE, WILLIAM. 1598. Loves labours lost. London: Cuthbert Burby. Disponvel [on-line] em: http://shakespeare.mit.edu/lll/full.html [Consult. em Set 2012]. WIKIpdIdA. THE FREE ENCYCLOpEdIA. 2012. Static mesh. Disponvel [on-line] em: http:// en.wikipedia.org/wiki/Static_mesh [Consultado em Set 2012]. ZORK NMEsIs: The Forbidden Lands. 1996. Zombie LLC. Activision. Jogo para as Plataformas Apple Macintosh , PC : MS-DOS /Windows 95. ZORK, GRANd INQuIsIdOR. 1997. Activision. Jogo para as Plataformas Mac OS, Microsoft Windows.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

102

Sumrio

Point Based Graphics e Aplicaes em Jogos


Luciano Silva1

Abstract
Point based Graphics embraces a set of processes, techniques and algorithms for the acquisition, representation, processing and storage of point clouds, aiming at applications in graphics processing. As multi and manycore processors have increased their storage and processing powers, this area has become very attractive for applications that require high performance graphics, eg, digital games. Within this context, this chapter introduces the basics of Point Based Graphics, highlighting the main applications in modeling, rendering and animation in GPU.

Resumo
Point based Graphics refere-se a um conjunto de processos, tcnicas e algoritmos para aquisio, representao, processamento e armazenamento de nuvens de pontos, visando s aplicaes em processamento grfico. Com o aumento da capacidade de processamento e armazenamento de processadores multi e many-cores, esta rea tornou-se bastante atrativa para aplicaes grficas que requerem alto desempenho como, por exemplo, jogos digitais. Dentro deste contexto, este captulo apresenta as bases de Point Based Graphics, evidenciando as principais aplicaes em modelagem, renderizao e animao em GPU.
1 Laboratrio de Processamento Grfico e Mdias Digitais; Faculdade de Computao e Informtica, Universidade Presbiteriana Mackenzie.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

103

Sumrio

Introduo
A tecnologia de Point Based Graphics, com o aumento do poder de processamento das unidades de processamento grfico (GPU), tem oferecido ao segmento de desenvolvimento de jogos digitais novas possibilidades para aumento de desempenho das aplicaes. Neste contexto, ao invs de se trabalhar com estruturas de dados complexas, que envolvem, por exemplo, vrtices, arestas e faces, utiliza-se somente uma nuvem de pontos para representar o objeto a ser processado. A partir desta nuvem de pontos, com o poder de processamento grfico e genrico das GPUs, procedimentos como modelagem, transformaes, renderizao e animao so efetuados diretamente nesta nuvem. Mesmo procedimentos considerados no-grficos como, por exemplo, simulaes de Fsica ou inferncias em Inteligncia Artificial podem ser efetuadas nas nuvens com o auxlio de linguagens como CUDA ou OpenCL. Assim, dentro deste contexto, este texto tem como objetivo introduzir os conceitos fundamentais de nuvens de pontos para suporte a Point Based Graphics e processamento dentro de GPUs, visando s aplicaes de desenvolvimento de jogos digitais. O texto est organizado da seguinte forma: a Seo 1.2 traz o conceito de nuvens de pontos e algumas formas para sua representao a Seo 1.3 discute o processo de aquisio de nuvens de pontos atravs de scanning 3D a Seo 1.4 apresenta funcionalidades de processamento grfico de nuvens de pontos atravs de shaders a Seo 1.5 apresenta detalhadamente as funcionalidades de processamento genrico de nuvens de pontos em GPU, com as arquiteturas CUDA e OpenCL. Como o processamento de nuvens muitas vezes no requer sada grfica, deu-se uma ateno especial a este tpico. finalmente, a Seo 1.6 apresenta o fechamento do captulo e, em seguida, so apresentadas algumas sugestes de referncias bibliogrficas. O autor deseja que este texto possa disponibilizar um suporte simples e direto para todos aqueles que queiram iniciar trabalhos na rea de Point Based Graphics, especialmente aplicados os aplicados em jogos.

Nuvens de Pontos e Fundamentos de Representao


A estrutura bsica em Point Based Graphics uma nuvem de pontos (point cloud). Essencialmente, uma nuvem de pontos uma coleo de pontos com coordenadas tridimensionais e, normalmente, sem relaes entre os pontos. A Figura 1 mostra dois exemplos de nuvens de pontos, onde se pode ver um cenrio ( esquerda) e dois objetos ( direita):

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

104

Sumrio

Figura 1: Exemplos de nuvens de pontos (cenrio e objetos). Fonte: Jogo Just Cause 2.

A partir de uma nuvem de pontos, pode-se construir uma visualizao bsica, atravs de acumulao de patches, ou se aproximar ou interpolar uma superfcie pelos pontos. A Figura 2 mostra trs nveis usuais de visualizao de uma malha de pontos: a prpria nuvem, uma acumulao de patches e uma superfcie interpolada (j com renderizao):

(a) Nuvem (b) Patches acumulados (c) Superfcie Figura 2: Nveis de visualizao de uma nuvem de pontos. Fonte: (Linsen, 2001)

Uma das grandes vantagens de falta de relaes entre os pontos reside no fato da velocidade de alterao das estruturas de representao das nuvens de pontos, uma vez que, normalmente, no h necessidade de atualizao de arestas, faces ou mesmo objetos. Formalmente, um ponto P em uma nuvem de ponto uma t-upla formada, geralmente, pela sua posio (x,y,z) e alguma informao de cor (r,g,b):

Outras informaes podem incluir, por exemplo, informaes de normais, curvatura, tangentes, dentre outros. A partir do conceito de ponto, define-se uma nuvem de pontos como uma coleo indexada de pontos:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

105

Sumrio

Para se representar eficientemente pontos e nuvens de pontos, existem diversas alternativas interessantes para o segmento de jogos digitais. O framework PCL (Point Cloud Library) (PCL, 2012), por exemplo, um conjunto de classes em C++ para representao tanto de nuvens de pontos 2D quanto 3D. A definio de uma nuvem de pontos em PCL toma, como base, uma estrutura para representar cada ponto e, a partir de um ponto, constri-se a nuvem. Abaixo, tem-se um exemplo de representao de nuvem de ponto em PCL:

A classe PointCloud disponibiliza uma srie de mtodos bsicos para manipulao de pontos isolados ou conjuntos de pontos. Alm desta classe, bastante eficiente para representao de nuvens de pontos, a PCL ainda disponibiliza duas outras formas bsicas para representao de nuvens: quadtrees e octrees, conforme mostrado na Figura 3:

Figura 3: Quadtree ( esquerda) e Octree ( direita).

Normalmente, uma quadtree utilizada para representao de nuvens de pontos bidimensionais, enquanto que octrees so utilizadas para nuvens de pontos tridimensionais.

Aquisio de Nuvens de Pontos


Existem diversas estratgias para aquisio de nuvens de pontos (Gross & Pfister, 2007). No contexto de jogos digitais, uma maneira bastante comum via scanners tridimensionais, como mostrado na Figura 4:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

106

Sumrio

Figura 4: Scanner 3D manual, baseado em Viso Estreo e projeo laser.

A projeo laser permite indicar qual segmento de reta est sendo escaneado. O sistema duplo de cmeras permite utilizar tcnicas de reconstruo 3D, baseadas em Viso Estereoscpica. A coordenada do ponto que est sendo escaneado pode ser obtida atravs de uma interseco de retas definidas pelas duas cmeras e os planos de projeo das imagens, conforme mostra a Figura 5:

Figura 5: Esquema de obteo das coordenadas de um ponto baseado em Viso Estereoscpica.

Este esquema exige uma calibrao de todo o sistema de aquisio como, por exemplo, distncia entre as cmeras ou estimao das distncias focais das duas cmeras. Uma vez calibrado o sistema, a granularidade dos pontos escaneados pode ser controlada tanto no processo de aquio, quanto no processo de ps-processamento. A Figura 6 mostra duas nuvens de pontos, com as respectivas superfcies rescontrudas:

Figura 6: Resultado de um processo de scanning para um modelo de jogo.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

107

Sumrio

Na imagem da esquerda, tem-se uma nuvem de pontos bastante regular, resultado comum de um processo de scanning. Na imagem da direita, os pontos foram processados e, regies que no necessitam de muitos detalhes podem e devem ser simplificadas. Os equipamentos para scanning 3D, mesmo para pequenos objetos, ainda tem um custo elevado. Uma alternativa bastante interessante atualmente o uso do gadget de interao para jogo Kinect. Para reconhecer profundidade dos objetos, o Kinect projeta uma nuvem estruturada de pontos, que pode ser percebida e capturada por cmeras de infravermelho. A Figura 7 apresenta um exemplo de nuvem projetada de pontos pelo Kinect:

Figura 7: Nuvem de pontos projetada pelo Kinect.

O processo de obteno da nuvem de pontos pelo Kinect pode ser feita atravs do Kinect SDK. A seguir, tem-se um exemplo de cdigo que realiza esta tarefa:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

108

Sumrio

A partir deste processo de obteno de imagens e extrao de pontos, pode-se obter nuvens de pontos como mostrado a seguir, onde os pontos foram renderizados como tringulos (Figura 8):

Figura 8: Nuvem de pontos extrada de imagens do Kinect.

Alm dos pontos, o Kinect ainda permite obter animaes baseadas em um esqueleto humano de referncia. Uma vez obtida a nuvem de pontos, as prximas sees abordaro como processlas dentro de uma GPU com propsitos grficos (via shaders) ou com propsitos gerais (via CUDA ou OpenCL).

Processamento Grfico de Nuvens de Pontos com Shaders


Shaders so pequenos programas executados dentro de unidades grficas de processamento (GPU) e so extremamente adaptados para processamento de nuvens de pontos devido a sua natureza. Existem, essencialmente, trs tipos de shader: Vertex Shaders Pixel Shaders Geometry Shaders Os vertex shaders recebem como entrada um vrtice (ponto) e retornam um outro vrtice, resultado de alguma transformao. No contexto de nuvens de pontos para jogos, este tipo de shader muito utilizado para os mecanismos de modelagem (transformaes) e animao. O cdigo abaixo mostra o cdigo de vertex shader utilizado na simulao de lquidos baseados em nuvens de pontos em OSGL (OpenGL Shading Language):

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

109

Sumrio

Outro exemplo bastante importante em animao de nuvens de pontos conhecido comumente como sistemas de partculas, conforme mostra o exemplo do vertex shader abaixo, onde, alm da posio, controla-se tambm parmetros de ordem fsica:

Os pixel shaders recebem como entrada um vrtice (ponto) e retornam uma cor associada ao vrtice. No contexto de nuvens de pontos de jogos, este tipo de shader muito utilizado para os mecanismos de renderizao. O trecho de cdigo a seguir mostra parte do clculo do Modelo de Phong para nuvens de pontos:

Finalmente, existem os geometry shaders, que permitem, dentro do contexto de nuvens de pontos, a gerao de novos pontos. Como so executados depois dos vertex shaders, possuem aplicao imediata nos processos de refinamento de nuvens de pontos.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

110

Sumrio

Processamento Genrico de Nuvens de Pontos com CUDA e OpenCL


Atualmente, existem duas tecnologias (e linguagens) importantes para processamento genrico de nuvens de pontos em GPU: CUDA e OPENCL (Silva e Stringhini, 2012). Linguagem CUDA C A arquitetura CUDA (Compute Unified Device Architecture) (NVIDIA, 2011) unifica a interface de programao para as GPUs da NVIDIA, assim como define um modelo de programao paralela que pode ser usado de forma unificada em dezenas de dispositivos diferentes. A linguagem CUDA C possibilita que se inclua comandos direcionados s GPUs da NVIDIA em programas escritos em linguagem C/C++. Apesar de ser uma interface unificada que possibilita a programao em diferentes placas grficas, CUDA possui caractersticas intrnsecas ao hardware das placas NVIDIA. Assim, antes de apresentar o modelo de programao CUDA, uma breve descrio da arquitetura Fermi ser apresentada a fim de justificar o modelo de programao CUDA e familiarizar o leitor com este tipo de dispositivo que tem sido referenciado como acelerador. Arquitetura FERMI As GPUs so compostas de centenas de ncleos (cores) simples que executam o mesmo cdigo atravs de centenas a milhares de threads concorrentes. Esta abordagem se ope ao modelo tradicional de processadores multicore, onde algumas unidades de ncleos completos e independentes so capazes de processar threads ou processos. Estes ncleos completos, as CPUs, possuem poderosas unidades de controle e de execuo capazes de executar instrues paralelas e fora de ordem, alm de contarem com uma poderosa hierarquia de cache. J as GPUs contam com unidades de controle e de execuo mais simples, onde uma unidade de despacho envia apenas uma instruo para um conjunto de ncleos que a executaro em ordem. O modelo de execuo das GPUs conhecido como SIMT (Single Instruction Multiple Threads), derivado do clssico termo SIMD (Single Instruction Multiple Data). A Figura 9 apresenta as diferenas nas arquiteturas de CPU e GPU.

Figura 9: arquitetura de CPU e de GPU (fonte: NVIDIA, 2011).

A arquitetura Fermi da NVIDIA segue este princpio de dedicar uma maior quantidade de transstores s unidades de execuo, ao invs de dedica-los s unidades de controle e cache. A Figura 10 apresenta uma viso geral da arquitetura Fermi:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

111

Sumrio

Figura 10: viso geral da arquitetura Fermi (fonte: NVIDIA, 2009).

A arquitetura conta com 16 SM (streaming multiprocessors), cada um composto por 32 ncleos de processamento (cores), resultando num total de 512 ncleos. possvel observar uma cache de segundo nvel (L2) compartilhada por todos os SM. A cache de primeiro nvel (L1) compartilhada pelos 32 ncleos de cada SM. A Figura 11, prxima pgina, mostra a hierarquia de cache da Fermi, juntamente com dois outros tipos de memria presentes na arquitetura. A memria compartilhada (shared memory) pode ser usada explicitamente pelo programador como uma memria de rascunho que pode acelerar o processamento de uma aplicao, dependendo do seu padro de acesso aos dados. Esta memria dividida fisicamente com a cache de primeiro nvel com um total de 64KB, cujo tamanho configurvel: 16 KB 48KB para cache e memria compartilhada respectivamente ou ao contrrio. Alm dos dois nveis de cache e da memria compartilhada, a Fermi conta com uma memria global (DRAM) de at 6GB.

Figura 11: hierarquia de memria da FERMI (fonte: NVIDIA, 2009).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

112

Sumrio

A Figura 12 apresenta a arquitetura dos SM. Cada um composto por quatro blocos de execuo controlados por duas unidades escalonamento de warps (grupos de 32 threads).

Figura 12: arquitetura de um SM (Streaming Multiprocessor) (fonte: NVIDIA, 2009).

Alm disso, cada SM conta com uma memria cache L1/memria compartilhada de 64KB, j mencionada, e com 32KB de registradores, compartilhados entre todas as threads que executaro no SM. Programao CUDA O modelo de programao de CUDA C composto de uma parte sequencial executada na CPU (host) e de uma parte paralela executada na GPU (device). O programador desenvolve uma funo especial chamada kernel que ser replicada em at milhares de threads durante a execuo na GPU. As threads realizam as mesmas operaes simultaneamente, porm atuam ao mesmo tempo sobre dados diferentes. Em primeiro lugar, importante observar a organizao das threads em CUDA (figura 5). Elas so organizadas em blocos e, dentro destes blocos, podem estar dispostas em 1, 2 ou at 3 dimenses. Os blocos so organizados em grades de uma ou duas dimenses. Da mesma forma, cada thread tambm ter disponvel a informao de a qual bloco dentro da grade ela pertence. Por exemplo, numa grade 1D, pode-se dizer que a primeira thread entre todas pertencer ao bloco 0 e ter seu ndice dentro do bloco como 0 (bloco 0, thread 0).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

113

Sumrio

A Figura 13 mostra uma representao clssica desta organizao, apresentando uma grade bidimensional (2D), com blocos de threads tambm bidimensionais (2D) (NVIDIA, 2011). Estas dimenses, assim como a quantidade de threads e blocos em cada uma delas, so definidas pelo programador no momento em que ele inicia (lana) o kernel.

Figura 13: Organizao de blocos e threads (fonte: NVIDIA, 2011).

Alm disso, CUDA suporta uma srie de tipos de memria que podem ser usadas pelos programadores para que possam acelerar a velocidade de execuo de um kernel. A Figura 14 mostra de forma esses tipos de memria num dispositivo CUDA. A memria global (global memory) pode ser escrita ou lida a partir do cdigo que executa na CPU, chamado usualmente de host. Estas operaes so realizadas utilizando-se funes da API (Aplication Programming Interface) de CUDA. Internamente, a memria global pode ser acessada por qualquer thread em execuo no dispositivo. Entretanto, a tecnologia usada no desenvolvimento de tal memria no possui taxa de velocidade de acesso que acompanhe a velocidade dos clculos que pode ser obtida pela GPU, tornando-se um gargalo de desempenho. Por conta disso, a organizao de memria conta com outros tipos de memria que podem ser usadas pelo programador para otimizar o desempenho de acesso memria. So elas a memria local (shared memory), compartilhada apenas por threads num mesmo bloco, e os registradores (registers), que no so compartilhados entre as threads e so alocados previamente pelo compilador. Existe ainda uma memria somente de leitura, tambm compartilhada entre todas as threads de um grid, a memria constante (constant memory), que possui um tempo de acesso melhor que o da memria global.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

114

Sumrio

Figura 14: Organizao de memria em CUDA (fonte: NVIDIA, 2011).

Embora os registradores e a memria local possam ser extremamente efetivos na reduo da quantidade de acessos memria global, o programador deve ser cuidadoso para que no exceda a capacidade efetiva destas memrias considerando os limites de hardware da GPU. Cada dispositivo oferece uma quantidade limitada de memria CUDA, que pode limitar a quantidade de threads que pode executar simultaneamente nos multiprocessadores de um dispositivo. Como os registradores e a memria local so compartilhados entre as threads, quanto maior for a quantidade destes recursos que cada thread necessitar, menor ser a quantidade de threads que podero executar num processador. O esquema de escalonamento de threads depende de uma boa quantidade threads em execuo para que se obtenha uma boa utilizao do dispositivo. Todas as threads em um bloco so executadas em conjunto num SM, que por sua vez pode ter mltiplos blocos concorrentes em execuo. Assim, a quantidade de blocos (ocupao) ser limitada pela quantidade de recursos de hardware disponveis no SM (como a quantidade de registradores e memria local, por exemplo). O esquema de escalonamento baseado em warps cada bloco divido em warps de 32 threads cada, ou seja, o nmero de warps de um bloco igual ao nmero de threads no bloco dividido por 32. Visto que o escalonamento realizado em grupo de threads, a organizao em warps serve para que o processador no fique parado quando ocorrer algum bloqueio num grupo de threads este ser desescalonado e um outro grupo (warp) poder ser imediatamente executado. Da a importncia de se ter uma boa quantidade de threads em execuo em cada SM. CUDA para a linguagem C consiste numa srie de extenses de linguagem e de biblioteca de funes. O modelo de programao assume que o sistema composto de um host (CPU) e de um dispositivo (device ou GPU).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

115

Sumrio

A programao consiste em definir o cdigo de uma ou mais funes que executaro no dispositivo (kernel) e de uma ou mais funes que executaro no host (a main(), por exemplo). Quando um kernel invocado, centenas ou at milhares de threads so iniciadas no dispositivo, executando simultaneamente o cdigo descrito no kernel. Os dados utilizados devem estar na memria do dispositivo e CUDA oferece funes para realizar esta transferncia. Exemplo: soma de nuvens de pontos em CUDA O cdigo a seguir apresenta um exemplo que cdigo em CUDA que implementa a soma de vetores no dispositivo. O comando de invocao do kernel define a quantidade de threads e as dimenses do bloco e da grade.

A partir deste cdigo, possvel observar algumas das principais caractersticas da programao CUDA. So elas:

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

116

Sumrio

uso da palavra-chave __global__ que indica que a funo um kernel e que s poder ser invocada a partir do cdigo do host, criando uma grade de threads que executaro no dispositivo (linha 05); uso das variveis pr-definidas blockDim.x, blockIdx.x e threadIdx.x que identificam o bloco e a thread dentro do bloco atravs de suas coordenadas (linha 06); uso da funo cudaMalloc() que aloca memria no dispositivo (linhas 21 a 23); uso da funo cudaMemcpy(), que copia os dados da memria do host para a memria do dispositivo (linhas 27 e 28) e vice-versa (linha 40); invocao do kernel e definio de suas dimenses (linha 36); uso da funo cudaFree(), para liberar a memria do dispositivo (linhas 43 a 45). Linguagem OpenCL OpenCL (Munchi, 2011) possui uma filosofia ligeiramente diferente de CUDA. A ideia que a linguagem e seu sistema de tempo de execuo sirvam como uma camada de abstrao ao hardware heterogneo que extremamente comum nos dias de hoje. Assim, um programa OpenCL tem o objetivo de aproveitar todos os dispositivos presentes na mquina, tais como processadores multicore, GPUs, DSPs (Digital Signal Processors), entre outros. Uma aplicao que executa em um hardware heterogneo deve seguir os seguintes passos: 1. Descobrir os componentes que compem o sistema heterogneo. 2. Detectar as caractersticas do hardware heterogneo tal que a aplicao possa se adaptar a elas. 3. Criar os blocos de instrues (kernels) que iro executar na plataforma heterognea. 4. Iniciar e manipular objetos de memria. 5. Executar os kernels na ordem correta e nos dispositivos adequados presentes no sistema. 6. Coletar os resultados finais. Estes passos podem ser realizados atravs de uma srie de APIs do OpenCL juntamente com um ambiente de programao e execuo dos kernels. Esta seo apresenta um resumo do modelo de abstrao do OpenCL juntamente com um exemplo simples de cdigo. Em primeiro lugar, importante conhecer o modelo de plataforma heterognea do OpenCL. Ele composto por um host e um ou mais dispositivos OpenCL (devices). Cada dispositivo possui uma ou mais unidades de computao (compute units), que por sua vez so compostos por um conjunto de elementos de processamento (processing elements). A Figura 15 apresenta esta organizao.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

117

Sumrio

Figura 15: modelo de plataforma do OpenCL (fonte: Munchi, 2011)

O host conectado a um ou mais dispositivos e responsvel por toda a parte de inicializao e envio dos kernels para a execuo nos dispositivos heterogneos. Os dispositivos normalmente so compostos por unidades de computao que agrupam uma determinada quantidade de elementos de processamento. Em relao a CUDA, as unidades de computao correspondem aos Streaming Multiprocessors da GPU (dispositivo) e os elementos de processamento correspondem aos ncleos (cores). Um dispositivo, portanto, pode ser uma CPU, GPU, DSP ou outro qualquer, dependendo da implementao do OpenCL. O modelo de execuo define que uma aplicao OpenCL composta por um programa host e um conjunto de kernels. O programa host executa no host (normalmente uma CPU) e os kernels executam nos dispositivos disponveis. O programa host, ou simplesmente host, envia o comando de execuo de um kernel para um dispositivo. Isto faz com que vrias instncias da funo que implementa o kernel sejam executadas no dispositivo alvo. Em OpenCL estas instncias so chamadas de workitems (itens de trabalho) e correspondem s threads de CUDA. Assim como em CUDA, cada thread ou work-item identificado por suas coordenadas no espao de ndices (que aqui tambm pode ter at 3 dimenses) e correspondem ao seu global ID. Os work-items so organizados, por sua vez, em work-groups. Estes, oferecem uma maneira de estabelecer granularidades diferentes aos grupos de itens de trabalho, o que normalmente facilita a diviso de trabalho e a sincronizao. Os work-groups correspondem aos blocos de CUDA e podem ser situados num espao de at trs dimenses. Assim, os workitems possuem dois tipos de coordenadas: local (dentro do work-group) e global (dentro do conjunto completo de work-items em execuo). O host deve ainda definir um contexto (context) para a aplicao OpenCL. Um contexto define o ambiente de execuo no qual os kernels so definidos e executam e definido em termos dos seguintes recursos: dispositivos, conjunto de kernels, objetos de programa (cdigos fonte e executvel dos kernels que executam a aplicao) e objetos de memria (dados que sero utilizados pelos kernels durante o processamento). Assim, um contexto todo o conjunto de recursos que um kernel vai utilizar durante sua execuo.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

118

Sumrio

O contexto definido em tempo de execuo pelo host de acordo com os dispositivos disponveis na mquina alvo. Para possibilitar uma escolha dinmica do dispositivo onde os kernels vo executar o OpenCL compila os kernels dinamicamente, gerando os objetos de programa, portanto, em tempo de execuo. A interao entre o host e os dispositivos realizada atravs de uma fila de comandos (command-queue). Os comandos so colocados nesta fila e aguardam seu momento de executar. A fila criada pelo host e conectada a um dispositivo logo aps a criao do contexto. Esta fila suporta trs tipos de comandos: execuo de kernel, transferncia de dados (objetos de memria) e comandos de sincronizao. Os comandos colocados em uma fila executam de forma assncrona com relao ao host. Comandos de sincronizao podem ser utilizados caso uma ordem deva ser estabelecida. Os comandos na fila normalmente executam em ordem (in-order execution), porm algumas implementaes de OpenCL podem oferecer o modo de execuo fora de ordem (out-oforder execution), que prev uma execuo assncrona dos comandos enfileirados. O modelo de memria do OpenCL define dois tipos de objetos de memria: buffers (blocos contguos de memria aos quais possvel mapear estruturas de dados) e imagens. Estas, podem ser manipuladas atravs de funes especficas presentes na API do OpenCL. O modelo de memria define cinco diferentes regies (Figura 16, prxima pgina): Host memory: visvel apenas ao host. Global memory: permite acesso para leitura e escrita a partir de todos os work-items em todos os work-groups. Constant memory: uma memria global que inicializada pelo host e permite acesso somente de leitura aos work-items. Local memory: compartilhada apenas entre os work-items de um mesmo work-group. Private memory: privada a cada work-item.

Figura 16: Regies de memria de OpenCL (fonte: Munchi, 2011)

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

119

Sumrio

A interao entre o host e o modelo de memria pode ocorrer de duas maneiras: cpia explcita ou mapeamento de regies de um objeto de memria. Na cpia explcita, comandos de transferncia entre host e dispositivos so enfileirados na fila de comandos e podem ser executados de forma sncrona ou assncrona. No mtodo de mapeamento, os objetos de memria so mapeados na memria do host, que pode tambm realizar acessos a estes objetos. O comando de mapeamento tambm deve ser enfileirado na fila de comandos. Exemplo: soma de nuvens de pontos em OpenCL Os cdigos a seguir apresentam um exemplo de soma de vetores em OpenCL. Este exemplo baseado em um tutorial oferecido pelo OLCF (Oak Ridge Leadership Computing Facility), um dos maiores centros de processamento de alto desempenho do mundo (OLCF, 2012). O primeiro cdigo apresenta o cdigo do kernel, que pode ficar num arquivo separado (.cl) ou pode ser formatado no prprio cdigo como uma string-C. Este cdigo ser passado como argumento funo OpenCL que o compilar em tempo de execuo.

A partir deste cdigo possvel observar algumas caractersticas de OpenCL: A definio de um kernel feita atravs de uma funo que utiliza o modificador __kernel (linha 01). O modificador __global indica que os parmetros esto na memria global do dispositivo (linhas 01 a 03). A funo get_global_id() retorna o identificador global da thread (work item) na dimenso 0 (linha 06). A verificao do identificador (linha 07) comumente realizada neste tipo de computao, pois por motivos de desempenho possvel que threads a mais venham a ser lanadas. A verificao serve para que somente as threads dentro do problema executem o trabalho. Este tipo de verificao tambm comum em CUDA. Na linha 08 a soma realizada (n threads sero iniciadas e cada uma realizar uma soma).

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

120

Sumrio

O cdigo a seguir apresenta a main() juntamente com funes auxiliares do OpenCL que devem ser executadas pelo host. Para reduzir o tamanho do cdigo os testes de erro retornados pelas funes no foram realizados.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

121

Sumrio

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

122

Sumrio

A seguir, destaca-se as principais caractersticas de OpenCL presentes no cdigo: Na linha 55 definido o localSize que a quantidade de work items em cada work group 64 neste caso. Isto equivale em CUDA a definir a quantidade de threads em cada grupo. A linha 59 define a quantidade total de work items lanados (globalSize). Num primeiro momento pensaramos que este nmero deve ser igual ao tamanho do vetor (n). Porm, globalSize deve ser divisvel por localSize, por isso o arredondamento realizado nesta linha. Entre as linhas 61 e 72 realizado o setup do OpenCL: plataforma, dispositivo, contexto e fila de comandos (command queue). Entre as linhas 75 e 88 o kernel lido e compilado. Entre as linhas 90 e 105 os dados so enviados ao kernel no dispositivo. Na linha 108 o kernel enfileirado e por fim lanado no dispositivo. Na linha 112 o host espera a finalizao do kernel (sincronizao). Na linha 115 o resultado lido da memria do dispositivo.

Comentrios Finais
Conforme evidenciado no texto, um dos grandes motores propulsores da tecnologia atual de Point Based Graphics so GPUs, que disponibilizam, alm de suporte a operaes grficas como modelagem, renderizao e animao, suporte a operaes como Fsica e Inteligncia Artificial. Esta rea em jogos digitais, apesar de recente, tem oferecido diversas oportunidades de pesquisas tanto no desenvolvimento de novas tcnicas e algoritmos para nuvens de pontos, como tambm de aplicao direta em game engines. Espera-se, com o carter introdutrio deste texto, que as bases de nuvens de pontos tenham sido compreendidas, assim como as possibilidades de desenvolvimento tanto para o contexto grfico como para contextos mais genricos.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

123

Sumrio

Referncias
FARBER, R. CUDA Application Design and Development. New York: Morgan Kaufmann, 2011. FARIAS, T.S.M.C., TEIXEIRA, J.M.N.X., LEITE, P.J.S., ALMEIDA, G.F., TEICHRIEB, V., KELNER, J. High Performance Computing: CUDA as a Supporting Technology for Next Generation Augmented Reality Applications. In: RITA, 16(1), 2009, pp. 71-96. GASTER, B., HOWES, L., KAELI, D.R., MISTRY, P. Heterogeneous Computing with OpenCL. New York: Morgan Kaufmann, 2011. GROSS, M., PFISTER, H. Point-Based Graphics. New York: Morgan Kaufmann, 2007. KIRK, D.B., HWU, W.W. Programming Massively Parallel Processors: A Hands-on Approach. New York: Morgan Kaufmann, 2010. LINSEN, L. Point Cloud Representation. Karlsruhe, Alemanha: Universitt Karlsruhe, 2001. MUNSHI, A., GASTER, B., MATTSON, T.G., FUNG, J., GISBURG, D. OpenCL Programming Guide. New York: Addison-Wesley Professional, 2011. NVIDIA Corporation, FERMI Whitepaper, 2009. NVIDIA Corporation, NVIDIA CUDA C Programming Guide - 4.0, 2011. OLCF, Oak Ridge Leadership Computing Facility Tutorial, disponvel em http://www. olcf.ornl.gov/training_articles/opencl-vector-addition/, acessado em abril de 2012. OPENCV, OpenCV GPU, disponvel em http://opencv.willowgarage.com/ wiki/OpenCV_ GPU, acessado em abril de 2012. PCL. (2012). Point Cloud Library. Fonte: Point Cloud: http://pointclouds.org, Acesso em 01/08/2012. SANDERS, J., KANDROT, E. CUDA by Example: An Introduction to General-Purpose GPU Programming. New York: Addison-Wesley, 2010. SCARPINO, M. OpenCL in Action: How to Accelerate Graphics and Computations. New York: Manning Publications, 2011. SILVEIRA, C.L.B., SILVEIRA, L.G.S. Programao Introdutria em OpenCL e Aplicaes em Realidade Virtual e Aumentada. In: Tendncias e Tcnicas em Realidade Virtual e Aumentada (Captulo 3), Anais do SVR2010, pp. 65-101.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

124

Sumrio

STRINGHINI, D., SILVA, L. Programao em CUDA e OpenCL para Realidade Virtual e Aumentada. In: Tendncias e Tcnicas em Realidade Virtual e Aumentada (Captulo 1), Anais do SVR2012, pp. 1-35. SINHA, S.N., FRAHM, J.M., POLLEFEYS, M., GENC, Y. GPU-based Video Feature Tracking and Matching. Relatrio Tcnico TR 06-012, Departamento de Cincia da Computao, Universidade da Carolina do Norte Chapel Hill, 2006. SIZINTESEV, M., KUTHIRUMMAL, S., SAMARASEKERA, S., KUMAR, R., SAWHNEY, H.S., CHAUDHRY, A. GPU Accelerated Real-time Stereo for Augmented Reality. In: Proceedings of the 5th International Symposium 3D Data Processing, Visualization and Transmission (3DPVT), 2010.

Jogos Eletrnicos na Prtica Livro de Tutoriais do SBGames 2012

125

Sumrio

A diagramao deste livro eletrnico foi realizada pela Editora Feevale. O arquivo est em PDF e formato A4 para que seja possvel a impresso de partes do texto. Os botes interativos presentes no arquivo digital no aparecero na impresso caso ela seja feita. E-book de distribuio gratuita.