Escolhendo entre Reach e HiDef no XNA 4.0

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

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: