Uma das novas features do XNA 4.0 é que agora devemos escolher entre dois profiles de configuração: Reach ou HiDef. Estas pré-configurações foram criadas para facilitar a distribuição de games criados em XNA. Visto que as configurações dos computadores onde o jogo será executado são diferentes umas das outras, os profiles ajudam a selecionar um mínimo de capacidades do hardware que viabilizam a sua utilização.
Por padrão, games criados para Windows e XBox360 utilizam a configuração HiDef, enquanto games criados para Windows Phone 7 utilizam Reach. Projetos criados para Windows Phone 7 NÃO podem ser alterados para a configuração HiDef, devido a limitações do hardware dos dispositivos que executam o Windows Phone 7. Isso não quer dizer que você não possa criar jogos em 3D, ou que os jogos criados em Reach são piores graficamente que jogos criados em HiDef. Entretanto, você pode (e, na minha opinião, deve) alterar a configuração de jogos criados para Windows e XBox360 para Reach.
Reach como o próprio nome já diz, visa “alcançar” a grande maioria dos dispositivos atuais. Se a sua placa de vídeo for antiga, você provavelmente deve usar Reach.
HiDef significa High Definition, ou seja, alta definição. Este profile é para placas de vídeo mais novas.
Se você estiver criando jogos simples, em 2D principalmente, e não utilizar nada muito complexo, provavelmente o seu jogo funciona em Reach. Defini-lo como HiDef apenas inviabilizaria muitos computadores de rodares o jogo, portanto sempre que criar um projeto jogo (Game ou Game library, de Windows ou XBox360) mude o profile para Reach. Se, durante o desenvolvimento, você receber uma exceção indicando que a funcionalidade X não funciona em Reach, ai sim você deve alterar o seu projeto para HiDef, obviamente somente em projetos Windows e XBox360.
Para não deixar a explicação muito superficial, segue uma tabela que indica as limitações de cada profile:
|
Reach |
HiDef |
Plataformas |
Windows Phone 7, Xbox 360 e qualquer computador Windows com uma placa de vídeo com suporte ao DirectX 9 e no mínimo shader model 2.0. |
Xbox 360 e qualquer computador Windows com uma placa de vídeo com suporte ao DirectX 10 (ou equivalente, veja abaixo) |
Shader Model |
2.0 (mas o Windows Phone não suporta shaders customizados) |
3.0+ (o Xbox 360 suporta extensões de shader customizadas como vfetch, que não estão disponíveis para Windows) |
Tamanho máximo de texturas |
2048 |
4096 |
Tamanho máximo de cubmap |
512 |
4096 |
Tamanho máximo de texturas de volume |
Não suporta |
256 |
Suporte a texturas com tamanhos não potência de 2 |
Limitado. Não se pode usar modo de endereçamento wrap, nem mipmaps, nem compressão DXT quando não é potência de 2 |
Sim |
Suporte a cubemaps com tamanhos não potência de 2 |
Não |
Sim |
Suporte a texturas de volume com tamanhos não potência de 2 |
Texturas de volume não são suportadas |
Sim |
Número máximo de primitivas desenhadas por chamada da função Draw |
65535 |
1048575 |
Formato do Index Buffer |
16 bits |
16 e 32 bits |
Formato do elemento de Vertex |
Color, Byte4, Single, Vector2, Vector3, Vector4, Short2, Short4, NormalizedShort2 e NormalizedShort4 |
Todos os formatos do Reach mais HalfVector2 e HalfVector4 |
Formato de texturas |
Color, Bgr565, Bgra5551, Bgra4444, NormalizedByte2, NormalizedByte4, Dxt1, Dxt3 e Dxt5 |
Todos os formatos do Reach mais Alpha8, Rg32, Rgba64, Rgba1010102, Single, Vector2, Vector4, HalfSingle, HalfVector2 e HalfVector4. Formatos de textura com ponto flutuante não suportam filtragem |
Formato de texturas de Vertex |
Texturas de vértice não são suportadas |
Single, Vector2, Vector4, HalfSingle, HalfVector2 e HalfVector4 |
Formatos de Render Targets |
Variavel (veja abaixo) |
Variavel (veja abaixo) |
Render Targets multiplos |
Não suporta |
Até 4. Todas devem ter a mesma profundidade de bits. Suporta alpha blending e escrita independente de mascaras por render target |
Queries de occlusion |
Não suporta |
Sim |
Blend com alpha separado (Separate alpha blend) |
Não suporta |
Sim |
Blend.SourceAlphaSaturation |
Apenas para SourceBlend, não para DestinationBlend |
Sim |
Número máximo de vertex streams |
16 |
16 |
Tamanho máximo do stream stride |
255 |
255 |
Lembrem-se que o XNA é desenvolvido em cima do DirectX 9 então, quando digo que para se utilizar HiDef a sua placa de vídeo deve ter suporte ao DirectX 10, não é nem pelo suporte em si mas o profile HiDef, necessita de uma GPU com praticamente as mesmas funcionalidade de um XBox360: MRT, formatos de surfaces com ponto flutuante, vertex tecture fetch, etc, mas no DX9 estas funcionalidades são opcionais. Em teoria, é possível que uma placa de vídeo com suporte somente ao DX9 consiga funcionar para HiDef, mas na prática isso não ocorre, então em vez de falar que HiDef precisa de todas estas funcionalidades na placa de vídeo, é mais fácil dizer que ele necessita de uma placa com DX10.
Você provavelmente vai notar que o suporte aos formatos de RenderTarget ainda podem variar. Agora existe um novo mecanismo de fallback, ou seja, o framework tentará prover o formato pedido, mas, se ele não for suportado, ele escolhe o mais próximo suportado, procurando pelo formato com a profundidade de bits, número de canais, etc, mais similar. Na grande maioria das vezes isso não gera problema algum.
Estes formatos de vertex element, presentes no Game Studio 3.1, não são mais suportados no Game Studio 4.0 por nenhum profile: Rg32, Rgba32, Rgba64, UInt101010 e Normalized101010.
Estes formatos de texturas, presentes no Game Studio 3.1, não são mais suportados no Game Studio 4.0 por nenhum profile: Dxt2, Dxt4, Bgr555, Bgr444, Bgra2338, Bgr233, Bgr24, Bgr32, Bgra1010102, Rgba32, Rgb32, NormalizedShort2, NormalizedShort4, Luminance8, Luminance16, LuminanceAlpha8, LuminanceAlpha16, Palette8, PaletteAlpha16, NormalizedLuminance16, NormalizedLuminance32, NormalizedAlpha1010102, NormalizedByte2Computed, VideoYuYv, Video UyVy, VideoGrGb, VideoRgBg e Multi2Bgra32.
Agora o Game Studio 4.0 mudou definitivamente a ordenação dos bytes dos formatos de cores de BGRA para RGBA. Se você já encontrou com problemas ao fazer isso, saberá facilmente converter o seu código para o XNA 4.0, apenas mudando a ordem dos bytes.
Uma das coisas mais importantes é notar que agora o XNA 4.0 não suporta mais placas de vídeo com suporte apenas ao Shader Model 1.1! Apenas Shader Model 2.0 para Reach e 3.0+ para HiDef!
Em desenvolvimento para Windows, na maioria dos casos, você só tem que saber que se utilizar HiDef como padrão, você estará limitando o número de usuários capazes de executar o seu jogo, portanto use Reach e, se for indispensável, mude para HiDef.
Espero que tenha ajudado. Agradeço muito ao Shawn Hargreaves, especialista do time de desenvolvimento do XNA pelos posts em seu blog que nos informou de todas essas alterações.
Referências:
http://blogs.msdn.com/b/shawnhar/archive/2010/03/12/reach-vs-hidef.aspx
http://blogs.msdn.com/b/shawnhar/archive/2010/07/19/selecting-reach-vs-hidef.aspx
Abraços a todos e até o próximo post,
Alexandre Z. Chohfi
Filed under: Windows Phone 7 Series, XBox360, XNA | Leave a comment »