Archive

Posts Tagged ‘Programação’

Vagas abertas na Jynx Playware

jynx playwareNo início da semana, o GameReporter anunciou a abertura de uma vaga para estágio em Game Design na Jynx Playware, empresa de jogos localizada no Porto Digital em Recife. O anúncio está aberto até o dia 20/11 e os requisitos incluem disponibilidade de quatro horas diárias, inglês intermediário e alguma experiência com game design.

A boa notícia é que a empresa abriu uma nova vaga também para o cargo de programador. Neste caso, há opções para estágio (seis horas diárias) ou profissional (oito horas). Os requisitos são: ser formado ou estar cursando um curso de Ciência da Computação (ou outro curso relacionad0), inglês avançado, conhecimento de flash e jogos 3D, trabalhar bem em equipe e ser pró-ativo. Os interessados têm até o dia 25/11 para enviar seus currículos.

Quem resolver tentar a sorte deve ficar atento aos prazos (dia 20/11 para Game Designer e 25/11 para Programador) e enviar seus currículos para o endereço jobs@jynx.com.br com o assunto “Seleção GD” ou “Seleção Programação”, de acordo com sua escolha.

Mais informações (e possivelmente novos anúncios futuramente) no Twitpic da empresa.

Via: GameReporter.

Diego Barboza Indústria, Notícias , ,

Instalando e executando a jMonkeyEngine no Eclipse (Java)

jme_engine

De uns tempos pra cá andei repensando algumas coisas sobre a área e está acontecendo, aos poucos, a minha saída da área de desenvolvimento de jogos. OK, você não precisa se preocupar com o futuro do blog, já que eu ainda estou aqui e vou continuar, mas de forma mais comedida. Como andei repensando algumas coisas, eu decidi sair da aula de desenho por uns tempos e decidi fazer o que deveria ter feito a muito tempo: baixar uma engine free e poderosa para Java e tentar voltar a estudar, pra criar algum tech-demo xing-ling e ir evoluindo com o tempo!

Mas peraí…Java? Usa C++ que é o que o mercado está pedindo! A frase anterior pode ser a opinião da maioria dos leitores, mas como eu sou preguiçoso, demoraria mais tempo pra estudar a linguagem e depois estudar uma engine. Então eu decidi eliminar a primeira etapa e ir direto pra segunda, mesmo sabendo que podem existir engines mais poderosas do mercado. E tem outra: nem esta engine eu vou conseguir usar com todos os recursos, já que eu tenho uma placa Geforce4 MX, e a mesma não tem Pixel Shader e muitos recursos atuais. Então vou com que eu tenho disponível mesmo, já que meu objetivo é apenas mostrar que posso ser um bom programador de jogos. E quero logo sair da área de sistemas comerciais em Visual Basic e com isso eu preciso me mexer!

Read more…

Rodrigo Flausino Java, Programação, Tutoriais , ,

Tutorial: Pixel Shader no XNA

O pipeline programável permite substituir etapas do pipeline gráfico (uma série de passos feitas por uma API gráfica para renderizar objetos gráficos) por um código personalizado. Pode-se alterar tanto o código de processamento de vértices (vertex shader) quanto de pixels (pixel shader).

Este código é executado na GPU e possibilita, por exemplo, alterar o modelo de iluminação de uma malha tridimensional. Assim, é possível obter materiais distintos e fazer com que uma roupa tenha uma aparência diferente da pele do personagem, algo que não era possível no pipeline fixo.

Uma grande vantagem da utilização de shaders é que sua execução é feita diretamente em GPU. Além das placas gráficas terem diversas operações comuns à computação gráfica (como soma de vetores e matrizes) implementadas diretamente em hardware, as GPUs mais recentes possuem diversos processadores paralelos que permitem processar vários vértices ou fragmentos ao mesmo tempo, tornando o processo ainda mais rápido.

Em um programa tridimensional, geralmente se usa uma combinação de um vertex shader e um pixel shader. Primeiramente os vértices da malha dos objetos 3D são processados pelo vertex shader e cada pixel que compõe a superfície destes objetos é processado pelo pixel shader. Neste tutorial eu vou focar somente no pixel shader, portanto o processamento será feito sobre imagens bidimensionais. Este tipo de shader é útil tanto em jogos 2D quanto para aplicar efeitos de pós-processamento em jogos 3D, onde primeiro o jogo é renderizado para uma textura e depois o processamento é feito sobre esta textura para só então o resultado final ser mostrado na tela.

No passado, os shaders eram programados em assembly, mas depois surgiram linguagens parecidas com o C, como o HLSL (usado no DirectX e XNA, GLSL (usado no OpenGL) e o CG. Os exemplos mostrados aqui foram desenvolvidos em HLSL, mas a sintaxe destas linguagens é bem parecida e traduzir de uma para outra não é muito complicado.

Utilizar um pixel shader no XNA é um processo bem simples. Na verdade, quando usamos a classe SpriteBatch já estamos usando um shader (o XNA não aceita o pipeline fixo por motivo de compatibilidade com o Xbox 360), mas esta classe nos permite abstrair seu uso. Aqui nós continuaremos usando o SpriteBatch, aplicando o shader sobre ele.

Para começar, podemos criar um novo shader no Visual Studio. Isto é efeito com um clique direito no sub-projeto Content e selecionando Add -> New Item -> Effect File. O modelo fornecido pelo XNA oferece um pixel e um vertex shader prontos. Caso alguém tenha a curiosidade de aplicá-lo a um objeto, ele irá projetar o modelo e alterar sua cor para vermelho.

Veremos dois exemplos aqui. O primeiro deles irá inverter as cores da textura e o outro irá convertê-la para escala de cinza. Em ambos os casos não usaremos o vertex shader. Para não confundir, vamos apagar o código padrão do XNA e começar nosso shader do zero.

O primeiro passo é criar uma estrutura de entrada para o pixel shader. Esta estrutura é passada automaticamente pelo vertex shader e os valores devem possuir uma semântica para que o programa saiba interpretá-los corretamente. A semântica pode ser uma coordenada de textura, cor, posição, etc. Aqui vamos precisar somente da cor e da coordenada de textura. A cor é aquele valor passado no SpriteBatch (geralmente branco) e a coordenada de textura é a coordenada a imagem referente a cada pixel desenhado na tela.

struct PixelShaderInput
{
    float4 Color : COLOR;
    float2 TextureCoord : TEXCOORD0;
};

Também é necessário declarar uma textura e um sampler (amostrador) de textura usado pelo SpriteBatch para acessar a imagem. A textura é declarada como extern porque ela vai ser declarada de fato no SpriteBatch. O TextureSampler permite acessar os texels da textura em questão.

uniform extern texture InputTexture;	

sampler TextureSampler = sampler_state
{
	Texture = < InputTexture > ;
};

Feito isso, criamos nossa função de pixel. Basta escrever uma função que receba a estrutura criada acima como parâmetro. Esta função deve retornar um float4, que é um vetor de quatro posições usado para representar uma cor RGBA. Isto porque, na verdade, depois desta etapa o pixel nada mais é que uma cor. Repare a semântica da função (COLOR0) indicando que o retorno é uma cor.

float4 PixelShaderFunction(PixelShaderInput input) : COLOR0
{
    // TODO: add your pixel shader code here.
}

Agora podemos fazer um cálculo que será executado pelo pixel shader. No primeiro exemplo, valor simplesmente inverter a cor do pixel. Para isso, primeiro acessamos o pixel usando a função text2D (usando o amostrador da textura e a coordenada de textura, sendo que a coordenada é gerada automaticamente pelo pixel shader) e depois multiplicamos pela cor passada pelo SpriteBatch. Enfim, fazemos 1 – a cor para obter seu valor invertido (internamente será gerado um float4 com o resultado de 1 – r, 1 – g, 1 – b e 1 – a) e retornamos o resultado (que é a cor final do pixel).

float4 PixelShaderFunction(PixelShaderInput input) : COLOR0
{
    // TODO: add your pixel shader code here.
    input.Color = tex2D(TextureSampler, input.TextureCoord) * input.Color;
    input.Color = 1 - input.Color;
    return input.Color;
}

Em um arquivo de efeito como este é possível ter diversas funções diferentes, da mesma forma que um programa em C normal. E assim como um programa em C é preciso indicar qual o ponto de partida do programa (o equivalente à função main). Um shader também pode ser dividido em diversas técnicas e passos, mas não vamos entrar em detalhes sobre isto agora. A linha abaixo indica que nossa função será usada como o pixel shader para o passo um da técnica um.

technique Technique1
{
    pass Pass1
    {
        // TODO: set renderstates here.
        PixelShader = compile ps_1_1 PixelShaderFunction();
    }
}

Perceba que deve-se especificar a versão do pixel shader usado. Versões mais altas possuem mais recursos, tanto em variedade de funções quanto em limites do que se pode fazer, mas só rodarão em placas que suportem o mínimo exigido.

Pronto, com este shader bastante simples já é possível inverter a cor de uma textura. Agora precisamos aplicar o shader no XNA. Não vou explicar aqui com carregar e desenhar as imagens, qualquer dúvida vocês podem ver os artigos anteriores ou perguntar nos comentários. Carregar um efeito é praticamente igual a carregar uma textura, primeiro uma variável do tipo Effect é declarada e depois o efeito é carregado no método LoadContent.

Effect efeitoInverso;

protected override void LoadContent()
{
     spriteBatch = new SpriteBatch(GraphicsDevice);
     textura = Content.Load < Texture2D > ("homer");
     efeitoInverso = Content.Load < Effect > ("EfeitoInverso");
}

Na hora de desenhar, também não há complicação. Primeiro é preciso iniciar o efeito e depois iniciar o passo desejado (caso haja mais de um passo). Feito isso as texturas são desenhadas normalmente usando SpriteBatch.Draw e deve-se finalizar o processo fechando o passo e o efeito.

spriteBatch.Begin(SpriteBlendMode.None, SpriteSortMode.Immediate,
    SaveStateMode.None);
efeitoInverso.Begin();
efeitoInverso.CurrentTechnique.Passes[0].Begin();
spriteBatch.Draw(textura, new Vector2(50, 50), Color.White);
efeitoInverso.CurrentTechnique.Passes[0].End();
efeitoInverso.End();
spriteBatch.End();

O shader da escala de cinza vai mudar muito pouco. Na hora de calcular a cor do pixel, ao invés de fazer 1 – a cor, vamos multiplicar cada componente por um peso (relacionado à sensibilidade do olho humano aos canais RGB). As componentes de um vetor podem ser acessados tanto pelo formato .xyzw quanto .rgba, como eu usei abaixo.

input.Color = input.Color.r * 0.3 + input.Color.g * 0.59 + input.Color.b * 0.11;

Segue uma imagem do resultado final:

tutorial_pixelshader

E é isto. Neste tutorial aprendemos a criar um pixel shader bem simples e aplicá-lo a uma textura no XNA. A idéia aqui foi fazer apenas uma introdução ao tema, visto que muito mais coisas podem ser feitas utilizando este recurso. Existem outras formas de se implementar estes exemplos, eu fiz da forma que me sinto mais confortável.

O projeto com os dois shaders e o código-fonte pode ser baixado aqui.

Um bom próximo passo para quem se interessou pelo assunto é pesquisar sobre como passar parâmetros da aplicação para o shader.

Diego Barboza Artigos, Tutoriais, XNA , , ,

1º SpeedFlash Contest (+parceria com o CrociDB)

Ontem o usuário do Twitter (e moderador do fórum da Unidev) CrociDB tentou convocar os programadores para um Contest de Flash para criar um game simples neste feriadão. Então me ofereci pra divulgar aqui a iniciativa (e tentar voltara  postar com mais regularidade aqui) e com isso tentar ver se a gente consegue, de tempos em tempos, criar iniciativas assim pra formentar as discussões e o conhecimento da comunidade. Sem mais demora, segue as regras que ele propôs:

Criar um jogo em flash com ActionScript3 (se possível deixar o código fonte livre, para incentivar e ajudar o pessoal iniciante) com qualquer tema. Postar o jogo no Kongregate (www.kongregate.com) com uma descrição que possa identificar o contest e postar um comentário com o link do jogo no post até segunda de manhã (4/05/2009). Aí eu verifico as entradas válidas. Então deixamos eles uma semana no kongregate, depois na outra semana é só ver os que tiverem o rating mais alto.

Seria interessante também, definir uma tag no twitter, como #1sfcontestmaio, ou algo assim, para que os participantes postem coisas de como vai o projeto em tempo real.

Vale lembrar no tópico, que para quem não sabe, o Kongregate dá uma porcentagem dos Ads na página do game, ou seja, dá até pro indivíduo lucrar uma graninha.

Acho que vou ter de reinstalar o Flash e tentar aprender alguma coisa pra participar também dos próximos. Mas de qualquer jeito a gente vai tentar fazer outras iniciativas assim e se alguém quiser também sugerir outros Contests, entrem em contato com a gente. Só lembrando: o Contest é puramente de diversão e sem prêmios pros vencedores. Mas acredito que ter mais um game de portfólio pode ser útil pro programador no futuro, além da divulgação do mesmo aqui no GamedevBR, até o momento o blog mais lido de desenvolvimento de jogos do Brasil!

UPDATE 05/05: Dois programadores conseguiram entregar seus games, o CrociDB e o Andrei Regiani. Segue links

CrociDB – Music Shooter (Alpha)

Andrei Regiani – Hunting Pigs (Alpha).

Boa sorte aos dois!

Rodrigo Flausino Contests, Flash, Programação , ,

Slides de God of War 3 da Game Developers Conference 2009!

É bem provável que a maioria dos leitores iria querer estar na Game Developers Conference assistindo as palestras, mesmo sabendo que existe a possibilidade de que alguns possam não trabalhar com consoles de ponta, se mantendo em games indie ou mexendo com o XNA. Mesmo assim, conhecimento a mais é sempre bom, e com essa idéia em mente eu estou republicando neste post slides da palestra ministrada por Jim Tilander e Vassily Filipov, dois dos desenvolvedores de God of War 3!

Segue:

As informação são bem técnicas e explicam muita coisa legal do Playstation 3. Pelo que já andei vendo sobre o jogo, God of War promete sugar o console da Sony de um nível que poucas produtoras conseguiriam. Afinal, são os desenvolvedores da própria Sony, que devem ter o supor dos criadores do PS3.

[Via Fórum do UOL Jogos]

Rodrigo Flausino Indústria, Programação , , ,

Criando um jogo da memória em Java – Parte 01

Apesar de ter dito no meu blog pessoal que eu estava interessado em C# e Flash (ainda estou), vira e mexe surge na minha mente que eu tenho de criar um jogo da memória em Java. Talvez pela linguagem ser melhor do que o Visual Basic e para treinar um pouco eu decidi tentar. Obviamente eu ainda não comecei, mas optei por ir postando o andamento da construção desse jogo aqui no GamedevBR, com artigos técnicos. Além disso, como vocês tem mais experiência do que eu, vocês podem até me ajudar com dicas que outros leitores podem aproveitar também!

Tá, e se você ainda não começou, pra quê este texto então? Simples: pra começar a citar os pré-requisitos para criar um game desse tipo. Um erro clássico de quem pensa em programar algo é que ninguém planeja e já sai criando. Sei que para um game de memória não é necessário ter um planejamento elaborado, mas para quem pensa em seguir na área de gamedev, ter pelo menos um rascunho é essencial pro desenvolvimento não se perder no meio do caminho.

Read more…

Rodrigo Flausino Java, Tutoriais , , ,

Edição 34 da Mundo Java tem matéria sobre Java e a indústria de games

É complicado indicar uma revista inteira aqui só por causa de uma matéria, mas pode ser que alguém se interesse. Deve estar circulando nas bancas a nova edição da revista Mundo Java e o César Taurion, da IBM, vai comentar sobre o Java na indústria de games. Veja um banner com a capa (para saber o conteúdo, clique na imagem):

mundojava_banner_ed34

Para aplicações não-gamedev e para quem sempre tem interesse em ficar atualizado com programação Java, vale a pena adquirir a revista que é muito boa.

Sobre a matéria (que ainda não li e nem comprei a edição ainda. Faz tempo que to por fora das notícias de Java) deve comentar sobre a linguagem dentro do universo gamedev, onde o J2ME (ou JavaME) reina absoluto para aplicações gráficas para celulares. Mas é aquele negócio: mesmo o Java sendo relevante em ambiente mobile, em desktops e consoles é mais complicado já que, nos PCs as engines baseadas em C++ são melhores. E nos consoles os desenvolvedores estão a mercê das ferramentas proprietárias e/ou ferramentas também baseadas em C++. É um beco sem saída: ou é C++ ou é C++! Em celulares a situação muda de figura, felizmente!

Rodrigo Flausino Diversos, Programação , , , ,

C++, C#, Java ou Flash? O dilema de um futuro programador de jogos

Existem n linguagens de programação no mundo. Todas elas tem potencial para criar um jogo, mas a qualidade do mesmo vai depender do foco da linguagem. Num dá pra criar um game complexo num Clipper, mas eu poderia simular um jogo da velha. E hoje existem linguagens que são ideais para quem pensa em desenvolver games.

Sou formado em Sistemas de Informação e já trabalho com programação há cerca de 4 anos, sendo que já mexi com Delphi, Java e agora mexo com Visual Basic. Ultimamente ando tentando estudar Game Design e Desenho Artístico, mas to chegando a conclusão de que eu tenho de me focar em algo que eu já tenho mais facilidade e algo que é mais rápido. Então a palavra programação volta a rondar a minha cabeça e vi que pode ser mais fácil entrar na indústria se eu souber uma das linguagens “populares”.

Só que dentre essas linguagens, há 4 alternativas interessantes que estão em ascensão atualmente: C++, C#, Java e Flash (esta última uma plataforma. A linguagem é a Action Script). A escolha delas também depende do foco do profissional: é mais difícil criar um game num Applet Java e publicar na Web. O Flash pode ser ideal nestes casos. Em empresas médias e grandes, a demanda está sendo no C++. Pra celulares, o Java. Tem também o C# correndo por fora, já que pode ser que no futuro existam oportunidades pra criar games para a Xbox Live Arcade. Aí complica. 4 linguagens com potencial. E não dá pra estudar todas ao mesmo tempo.

Read more…

Rodrigo Flausino Artigos, Programação ,

Sony quis que a dificuldade de programação do PS3 fosse difícil

Segundo o Eurogamer, Kai Hiraz, presidente da Sony Computer Entertainment, disse que a dificuldade de se programar no console Playstation 3 foi propositada. Segue trecho:

“É difícil de programar, e muitas pessoas vêem pontos negativos nisso, mas por outro lado quer dizer que o hardware tem muito mais a oferecer,” explicou Hirai, apontando, como exemplo dessa estratégia, os gráficos conseguidos em God of War, que foi lançado na PS2 quase 5 anos depois da consola ter sido lançada.

Hirai acrescentou que,”Nós não fornecemos ao produtores a consola fácil de programar que eles querem, porque uma consola fácil de programar quer dizer que qualquer pessoa vai ser capaz de tirar partido de grande parte daquilo que o hardware é capaz de fazer, então aí a questão será o que é que vais fazer nos restantes 9 anos e meio?”

Admito que eu não tenho experiência com programação de games, mas acho que definir se algo é difícil de fazer ou não é uma questão de treinamento. Ninguém nasce sabendo e com isso é necessário a equipe passar por um treinamento para aprender a manusear as ferramentas de desenvolvimento. Demora um pouco pras equipes conseguirem extrair mais capacidades do videogame. No começo, uma equipe faz coisas mais simples, sem tentar abusar do hardware, até ela conseguir ganhar mais conhecimentos e experiências e conseguir, futuramente, tentar abordagens mais poderosas e mais eficazes.

Vocês concordam com essa abordagem da empresa? Ou não?

Rodrigo Flausino Diversos, Indústria, Programação , , ,

Mantenha o conhecimento adquirido com o tempo!

Ontem, depois de quase 1 mês, voltei a ter aulas de desenho artístico. Nesse meio tempo deu pra perceber que tive um downgrade de coordenação motora, o que me fez voltar às origens e fazer objetos simples. Porquê? Simples: eu não treinei durante as férias. Como fiz outras coisas, então eu acabei esquecendo algumas coisas e a minha mão ficou destreinada. E isso pode acontecer com qualquer área do conhecimento, desde programação até mesmo o uso de softwares como o Photoshop.

Nosso cérebro é programado pra esquecer. Se a gente não esquecer, acabaríamos ficando malucos com o tanto de informação que entra na mente todos os dias. Pode não parecer, mas a todo momento estamos aprendendo. Ler um livro, jogar, passear, tudo vai pro cérebro e dependendo do que agente faz ele registra e grava. Depois de algum tempo, se não trabalharmos a mente e sempre relembrar aquele conhecimento adquirido, a gente esquece, dando lugar a coisas novas aprendidas recentemente.

Read more…

Rodrigo Flausino Artigos , ,