Archive

Posts Tagged ‘XNA’

Novidades para o XNA e o Unity na GDC

XNA e Unity são duas ferramentas que eu uso e recomendo bastante.  Enquanto a primeira é uma ótima ferramenta para quem quer desenvolver um jogo do zero, lidando com todo o processo de desenvolvimento e controlando tudo via código, a segunda oferece um fantástico ambiente integrado importantissímo em projetos maiores.

E essa semana na GDC foram feitos grandes anúncios para ambas as ferramentas. Com novas plataformas surgindo, os jogos para dispositivos móveis têm tudo para ganhar destaque este ano e o Unity e o XNA fazem suas apostas neste caminho. Vamos esperar para ver no que dá.

XNA 4.0

Shawn Hargreaves já vinha liberando as novidades aos poucos em seu blog, mas agora é oficial. A nova versão do XNA Game Studio trará suporte ao Visual Studio 2010, uma série de melhorias na API (como a separação das bibliotecas em várias DLLs) e algumas novas funcionalidades (como a possibilidade de se usar um microfone como dispositivo de entrada).

A grande novidade, no entanto, é o suporte à nova plataforma Windows Phone 7 Series. Com a utilização da LIVE será possível usar avatares 2D, gamertags e conquistas nos jogos feitos para está série. Mas estes recursos só estarão disponíveis para parceiros, numa nova tentativa de atingir os estúdios (lembrando que já houve planos para uma versão profissional do XNA Game Studio no passado).

Pra fechar, esta nova versão não estará disponível para o Zune e todos são encorajados a migrar para a plataforma Windows Phone 7. Assim, pode ser o começo do fim dos jogos em XNA para o player da Microsoft.

Unity 3.0

UnityO Unity é na opinião de muita gente a plataforma do momento. Combinando uma ferramenta muito poderosa, um ambiente bonito e fácil de usar, um grande suporte multiplataforma, e um preço pra lá de acessível, não é dificil concordar.

O anúncio dessa nova versão da ferramenta teve como principal adição o suporte ao Android, PS3 e iPad, que se juntam à já grande lista que continha Windows, Mac, iPhone, Web, Wii e Xbox 360.

Também foram anunciados melhorias nas capacidades de renderização e física. Ainda foram adicionadas algumas ferramentas como a Beast (ferramenta de lightmapping utilizada no Killzone 2 e Mirror’s Edge) e o Umbra (que trata culling em jogos como Dragon Age: Origins e Guild Wars 2).

A versão básica continua grátis para uso pessoal e comercial, e a Pro mantém o preço de $1500. Há ainda um desconto especial para quem fizer pre-order. O preço das versões para console não foi divulgado.

Via: Gamasutra e Develop.

Diego Barboza Engines, Eventos, Indie Games, Indústria, Notícias, Unity, XNA , , , ,

Global Game Jam 2010 – Impressões

Eu deveria ter postado isso na segunda-feira passada, mas depois da semana insana que passei (com problemas longe dos blogs e da internet) ficou difícil fazer esse post. Por isso peço desculpas iniciais pela demora e vamos direto ao assunto. Bom, como todos aqui já sabem, rolou nos dias 29 a 31 de janeiro o Global Game Jam, competição mundial de desenvolvimento de jogos onde os participantes deveriam fazer um jogo em até 48 Horas, em diversas cidades do mundo. Um desafio insano, já que sabemos que criar um jogo não é tão fácil assim. Outro desafio é criar algo dentro do tema, o que é muito difícil dependendo do tema em questão. Bom, quando fiquei sabendo que o evento rolaria aqui eu me animei, já que aqui até pouco tempo atrás a cidade de Varginha era incipiente no quesito “desenvolvimento de games”. Não havia grupos de discussão, não havia uma comunidade onde poderíamos trocar ideias. Só ano passado que descobri que tem um grupo interno de alunos/professores no Cefet onde eles criam games casuais e tentam participar de eventos.

Na época que fiquei sabendo do Global game Jam eu pensei em estudar o XNA, mas como eu não tive muita paciência pra isso (leia-se: preguiça mesmo) então eu deixei de lado. Aí alguns dias antes do evento a etapa do Rio de Janeiro foi cancelada, mas não a de Varginha. No último domingo o Hélio Lemes, professor da minha faculdade, me mandou uma mensagem pelo Twitter comentando que ele não poderia ser “avaliador” dos jogos desenvolvidos e me indicou para o Alex, o professor do Cefet que estava coordenando a edição Varginha do Game Jam. E só vi esse aviso às 16h00 de domingo. Liguei lá na escola e topei a parada, indo rapidamente pra lá. Acredito que ter alguns avaliadores era mais para entrega dos prêmios pela participação, e quando cheguei na escola eu me surpreendi: quem fizesse o melhor game ganharia um Playstation 2!

Read more…

Rodrigo Flausino Eventos, Programação, XNA ,

4º edição do XNA Challenge Brasil

Pelo quarto ano seguido a Microsoft lança o XNA Challenge Brasil, uma espécie de aquecimento para a Imagine Cup. Assim, repetindo os anos anteriores, o tema será o mesmo da edição corrente da Imagine Cup, neste caso: “Imagine um mundo onde a tecnologia ajuda a resolver os problemas que mais nos desafiam hoje“.

A premiação para o primeiro colocado será uma viagem para a sede da Microsoft em Seatle nos EUA para um dos membros da equipe e um Xbox 360 para os demais. Cada membro da equipe que ficar em segundo lugar recebe um kit com mouse SideWinder e um Lifechat VX 3000, e os terceiros colocados levam Lifechat VX 3000 e um jogo para PC.

Vale lembrar que além dos prêmios, XNA Challenge tem tido uma grande visibilidade nos últimos anos, então esta é uma boa maneira de se fazer notar no mercado. Além do mais, este também é um bom termômetro para quem pretende submeter o jogo para a Imagine Cup.

Via: SharpGames.

Diego Barboza Contests, Indie Games, Notícias, XNA , ,

Material do curso Desenvolvimento de Jogos 2D com C# e XNA

Nos últimos meses eu participei de um curso de extensão à distância oferecido gratuitamente pelo CEDERJ sobre Desenvolvimento de Jogos 2D com C# e XNA. O CEDERJ oferece diversos cursos de extensão e aperfeiçoamento para professores, profissionais da área e graduados, e no caso deste curso específico a idéia era ensinar desenvolvimento de jogos voltado para o seu uso no ensino.

As aulas foram criadas pelo instrutor André Luiz Brazil e são ministradas por um tutor virtual, através de uma animação interativa em Flash. Todo o material das aulas também está disponível para consulta no formato .PDF. E este material pode ser reproduzido livremente, por isso achei que seria interessante compartilhar este conteúdo com os leitores do blog.

xna_cederj

Desde já, aviso que o curso tem seus altos e baixos. Trata-se de um bom material para iniciantes (especialmente nos primeiros capítulos, onde são apresentados conceitos mais amplos sobre o desenvolvimento de jogos), mas pessoas mais experientes com XNA podem achar algumas escolhas do autor estranhas, como o não uso do Content Pipeline para o carregamento de texturas.

Ainda assim, é um material interessante. Durante o curso um jogo de naves é criado e são abordados todos os principais aspectos da criação de um jogo: leitura da entrada do usuário, criação de classes para representar os objetos, tratamento de colisões e etc. Segue o conteúdo das aulas e um arquivo extra com pequenos tutoriais de apoio:

As inscrições para as novas turmas de 2010 vão ser abertas no começo do ano e até o momento não há confirmação sobre o curso de XNA, mas é bem provável que ele continue. Quem tiver interesse (e cumprir os requisitos do edital), deve ficar de olho nesta página para ver se surgem novidades.

Diego Barboza Cursos, Diversos, XNA , ,

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 , , ,

Brasil conquista primeiro lugar no Imagine Cup 2009!

E mais uma vez o Brasil conseguiu um feito extraordinário, que mostra que a área indie está melhorando muito. Segundo o SharpGames, a equipe Levv IT, composta por brasileiros, ganhou o Imagine Cup, competição internacional de games promovido pela Microsoft. A competição, pra quem não sabem era criar um game usando o XNA, plataforma gratuita e uma das que mais crescem na cena indie mundial. Veja mais informações:

Brasil é Bi-Campeão na categoria de Games da Imagine Cup 2009

No link acima tem o jogo pra download e algumas informações sobre a competição do ano que vem, que mudará de nome pra Game Design e poderão ter games desenvolvidos tanto no XNA quanto no Silverlight, plataforma gráfica web da Microsoft. Só não gostei muito do nome, já que o game design é outra área que envolve mais o planejamento de um jogo.

Rodrigo Flausino Programação, XNA ,

Lançado XNA Game Studio 3.1

Acaba de sair a versão 3.1 do XNA Game Studio, e está nova versão traz muitas novidades. Vamos às principais:

  • Suporte a Avatares: agora é possível usar os Avatares 3D do Xbox 360 nos jogos.
  • Xbox LIVE Party: outro recurso já disponível na LIVE agora acessível ao XNA. Permite que os jogadores se comuniquem pela LIVE sem que seja necessário estarem jogando o mesmo jogo.
  • Suporte a vídeos: um recurso muito solicitado pela comunidade finalmente foi atendido. Agora é possível não só executar vídeos no XNA, mas também ter um grande controle sobre eles, podendo pausar e reiniciar a qualquer momento, obter dados sobre o vídeo (como duração e taxa de quadros por segundo) e manipular trilhas de audio. A maioria destes recursos não estavam disponíveis em versões externas de tocadores de vídeo para o XNA.
  • Melhorias na API: várias classes da API foram modificadas, melhoradas e adicionadas. Classes de Audio e do Content Pipeline sofreram algumas melhorias também.
  • Mudandça de nome: O Xbox LIVE Community Games mudou de nome para Xbox LIVE Indie Games. Segundo a Microsoft, o novo nome representa melhor o espírito independente dos desenvolvedores. A mudança faz parte de uma estratégia (que terá outras etapas) para tentar popularizar os jogos feitos com o XNA.

Estas são algumas das mudanças introduzidas nesta nova versão do XNA. A lista completa está disponível aqui.

xna

O download do XNA Game Studio 3.1 (73.2 MB) já está disponível aqui.

Via: XNA Creators Club.

Diego Barboza Indústria, Notícias, XNA

Anunciado XNA Game Studio 3.1

Notícia rápida. Foi anunciado hoje na GDC que nesta primavera no hemisfério norte será lançado o XNA Game Studio 3.1, versão que contará com new partner additions (seria conteúdo de terceiros incorporado ao Game Studio?) e também com adições relativas à XBox Live.

A grande novidade é a possibilidade dos Community Games usar os Avatares da Live. É, parece que essa onda de Avatar, Mii e afins veio mesmo pra ficar.

Fonte: XNA Team Blog.

Diego Barboza Eventos, Notícias, XNA ,

Tocando músicas e efeitos sonoros no XNA 3.0

Uma das grandes adições do XNA 3.0 foi a possibilidade de se tocar músicas e outros efeitos sonoros sem a necessidade de utilizar o XACT (a ferramenta de autoria de som que acompanha o Game Studio).

Assim, agora é possível tratar os efeitos sonoros da mesma forma que uma textura ou um modelo 3D, simplesmente carregando o arquivo através de Content.Load. Este novo sistema é interessante porque permite fazer várias coisas com as músicas, inclusive tocar arquivos da biblioteca do usuário. Os formatos suportados são mp3 e wma (para músicas) e wave (para efeitos sonoros).

Neste pequeno tutorial eu vou mostrar como carregar e tocar músicas e efeitos sonoros nos jogos.

Read more…

Diego Barboza Artigos, Programação, Tutoriais, XNA ,

Resultado do concurso de minigames em XNA

Para participar do concurso promovido pela Revista Oficial do XBox 360 e o Sharpgames (com apoio da Microsoft Brasil e da ABRAGAMES), os competidores tinham até o meio de janeiro para enviar um minigame com cem linhas de código ou menos. É claro que o grande desafio aqui era tirar leite de pedra e fazer algo jogável e divertido com um código tão limitado.

Ontem foi divulgada a lista com os três primeiros colocados, listados abaixo, e aos poucos os jogos estão sendo disponibilizados para download neste endereço.

Classificação final:
1º Lugar – Mikura, de Rafael Valle Barradas e Luciano José Firmino Jr.
2º Lugar – Paraquedismo, de Diego Cordeiro Barboza (sim, sou eu)
3º Lugar – Steam Pong, de Aldeir Arcanjo, Fábio Bombonato e Patryck Pabllo

A premiação para os três melhores jogos é a seguinte:
1º Lugar - Visual Studio 2008, Xbox Gamepad Wireless, livro “Beggining XNA 2.0 Game Programming – from Novice to Professional”, assinatura da revista XBox 360
2º Lugar - Jogo Xbox e Webcam, livro “Beggining XNA 2.0 Game Programming – from Novice to Professional”
3º Lugar - Jogo para o Xbox

Ainda não testei os outros jogos, mas desde já deixo meus parabéns à galera que conseguiu vencer este desafio e fazer um joguinho legal. O vídeo a seguir foi feito pelo Jose Antonio Farias e mostra os jogos participantes em funcionamento. Vale conferir.

Diego Barboza Contests, Notícias, XNA , ,