Relatório do Trabalho Final INF01009 Computação Gráfica UFRGS Ewerton Felipe Miglioranza 141969
INTRODUÇÃO Durante a realização da cadeira de computação gráfica, foi apresentado como projeto final um jogo chamado Lost Sea. Este jogo foi baseado no gênero de Sid Meier's Pirates, onde o jogador controla um navio pirata com o objetivo de afundar seus oponentes através de tiros de canhões. Imagem do jogo Sid Meier s Pirates 1 Embora Sid Meier s Pirates possua também uma história que se desenvolve ao longo do jogo, o Lost Sea foca apenas o combate marítimo. 1 Imagem retirada de www.gamespot.com.
FERRAMENTAS Para a produção do jogo, foram utilizadas as seguintes ferramentas: Ogre3D: A Ogre3D é uma engine gráfica de código aberto em C++. Ela oferece suporte ao rendering, tanto em OpenGL como em DirectX, bem como suporte a shaders e ao uso de modelos em forma de malha de triângulos (www.ogre3d.org). Visual Studio: O Visual Studio foi a IDE utilizada para programar o jogo em C++. Portanto, o jogo é voltado para a plataforma Windows. FMOD: A FMOD é uma biblioteca de som gratuita. Foi utilizada no jogo por oferecer suporte a sons 3D de uma maneira rápida e fácil de adaptar ao jogo (www.fmod.org). Blender: O Blender é uma ferramenta de modelagem 3D. Com ela foi possível, a partir de um modelo inicial retirado da internet, construir a malha dos barcos, bem como aplicar suas texturas e iluminação local (www.blender.org).
O JOGO O resultado final do jogo é apresentado nas próximas figuras. Detalhes sobre a implementação são descritas a seguir.
REALISMO Diversos detalhes foram implementados para aumentar o realismo do jogo. Sistemas de Partículas Os rastros dos navios foram implementados através de três sistemas de partículas, conforme mostrado nas figuras a seguir. Os rastros laterais são partículas pontuais, enquanto que o rastro principal é um billboard que está sempre apontando para cima. Com o tempo, o canal alpha das partículas diminui, tornando-as transparentes.
O rastro dos tiros de canhão e dos pedaços do navio que saltam quando ele é atingido foram feitos de forma semelhante.
Outro rastro implementado através de sistemas de partículas é o rastro do fogo, quando o navio está com menos de 30% de vida. Neste caso, um é aplicado um color fader em um billboard para que ele se torne escuro enquanto sobe, simulando o fogo e a fumaça. Por fim, há também o efeito de splash quando um tiro de canhão cai na água. Para esse efeito, é criado um billboard apontando para cima que aumenta de tamanho, simulando a expansão da água.
Física A física de Lost Sea foi toda implementada sem o auxílio de engines físicas. Como mencionado anteriormente, a Ogre3D é apenas uma engine gráfica, não oferecendo suporte para simulações físicas mais avançadas. Navegação A primeira parte implementada, foi a física da navegação dos navios. Curiosamente, um navio a vela pode navegar mais rápido que o próprio vento, ou seja, em determinados ângulos o navio pode andar mais rápido do que se estivesse totalmente a favor do vento. A figura a seguir ilustra as posições possíveis.
Na posição broad reach o navio está cerca de 45 o em relação à direção do vento. Isso faz com que a vela funcione como uma asa de avião, criando uma força de sustentação que ajuda a impulsionar o navio. Em Lost Sea porém, para fins de jogabilidade, a influência do vento não chega a parar o navio. Assim, há sempre uma velocidade constante que é adicionada à velocidade proporcionada pelo vento. Para calcular essa velocidade adicional, primeiro é calculado o ângulo entre o vetor de direção da frente do navio com o vetor de direção do vento através do dot product. V 1 V 2 = V 1 V 2 cos θ θ = cos -1 (V 1 V 2 / V 1 V 2 )
Em seguida, esse ângulo é utilizado para estimar uma porcentagem da velocidade do vento que auxilia na velocidade do navio de acordo com o seguinte esquema. Assim, para um ângulo de 180 (contra o vento), 0% da velocidade do vento influencia a velocidade constante do navio. Para um ângulo de 90, esse valor é de 35%. Para ângulos entre 180 e 90 a porcentagem é interpolada entre 0% e 35%. Esse esquema segue para os outros ângulos, com detalhe para o ângulo de 45, onde 100% da velocidade do vento é adicionada à velocidade do navio. Colisão As colisões em Lost Sea seguem um modelo simplificado, baseado em bounding boxes.
Essa abordagem é simples de implementar e menos custosa para um jogo em tempo real. Dado que não é necessário saber exatamente em que ponto ocorreu a colisão, este modelo é bastante satisfatório para o contexto do jogo. Para testar uma colisão entre um tiro de canhão e um navio, por exemplo, basta testar se a posição do tiro está dentro dos limites da bounding box do navio. Oceano O oceano em Lost Sea é divido em duas camadas. A primeira (superficial), é um plano semi-transparente que simula a água em si. Na segunda camada é aplicado um shader que utiliza bump mapping e geometric waves para simular as ondas e a variação da cor do oceano de acordo com o ângulo de visão. Na imagem a seguir é mostrado uma visão entre os dois planos.
Inteligência Artificial Outro requisito básico de um jogo é a implementação de uma inteligência artificial para interagir com o jogador. Em Lost Sea é aplicada uma inteligência artificial simples, porém funcional. A idéia básica consiste em procurar, a cada segundo, o oponente mais próximo. Para achá-lo, é utilizado a magnitude do vetor que liga um navio aos outros. Depois, é calculado o ângulo entre o navio e o seu alvo, assim é possível saber para qual lado o navio deve girar para encarar seu oponente. Outros Fatores Este relatório se restringiu em explicar as principais técnicas empregadas no jogo que mais se relacionam com a área de computação gráfica apresentadas no curso. Contudo, a título de conhecimento, em Lost Sea foram empregados alguns fatores como sons 3D, modelagens e texturas que contribuiram para o resultado final.
CONCLUSÕES A implementação desse jogo me fez perceber o quanto os conceitos de álgebra linear e computação gráfica são úteis para resolver problemas que em um primeiro momento podem parecer complicados. Fiquei satisfeito com o resultado obtido no jogo, pois consegui aplicar diversos conhecimentos adquiridos ao longo do semestre, bem como entender o porque eles funcionam. Também acabei descobrindo o quanto a computação gráfica pode ser motivante, principalmente quando os resultados começam a aparecer mais facilmente.