- Ao executar jogos em tela cheia no MacBook, a maioria deles renderiza de forma borrada por causa do problema do notch da tela
- O mecanismo de seleção de resolução do sistema não considera a área do notch, causando a escolha incorreta da área de saída
- Selecionar uma resolução 16:10 é uma solução temporária, mas a causa raiz está no design das APIs da Apple e na falta de orientação
- O problema pode ser reproduzido em jogos conhecidos (Shadow of the Tomb Raider, No Man’s Sky etc.); alguns jogos mais recentes (Cyberpunk 2077) lidam com isso corretamente
- A Apple precisa melhorar as orientações e o suporte aos desenvolvedores com atualizações no HIG e nas APIs
Problema: por que jogos em tela cheia no Mac ficam com renderização borrada
- Esse problema foi enviado à Apple em setembro de 2023 como o issue FB13375033
- Ao rodar jogos em tela cheia em telas de MacBook, a maioria dos jogos não considera corretamente a área do notch, o que causa erros de renderização
- Muitos jogos recebem do sistema a lista de resoluções suportadas e escolhem a primeira delas (a resolução de toda a área da tela), mas na prática a área em tela cheia disponível no AppKit fica limitada à região abaixo do notch
- Quando o jogo renderiza na resolução total da tela, a área real disponível para desenhar é menor, então o frame é comprimido verticalmente, o que leva ao efeito de borrado
A estrutura das áreas da tela no Mac
- Uma tela de Mac com notch tem três áreas principais
- Limites totais da tela (incluindo notch e menu)
- Safe area (abaixo do notch)
- Área de tela cheia disponível no AppKit (abaixo da barra de menu)
- A lista de resoluções retornada pela função
CGDisplayCopyAllDisplayModes mistura a resolução total da tela com a resolução abaixo da barra de menu (geralmente na proporção 16:10)
- A maioria dos jogos usa o primeiro item da lista (a área total da tela), gerando saída incorreta
- Exemplo: Shadow of the Tomb Raider inicia por padrão na resolução total da tela (3456x2234), mas a área real disponível para desenho é 3456x2160 (uma diferença de 74 pixels que comprime a imagem e deixa a renderização borrada)
Solução: escolha correta da resolução e alternativa temporária
- Usuários: ao executar jogos em tela cheia em uma tela de Mac com notch, é importante selecionar manualmente uma resolução 16:10 (o jogo não ajusta isso automaticamente)
- Desenvolvedores: é preciso filtrar a lista de resoluções de forma um pouco mais refinada usando a propriedade
safeAreaInsets de NSScreen
- Foi fornecido um algoritmo em código para filtrar apenas resoluções compatíveis com a safe area (com o efeito colateral de filtrar em excesso algumas resoluções, como 4:3)
- No fim, o problema precisa ser resolvido pela Apple
Jogos afetados: principais casos e situação atual
- Shadow of the Tomb Raider, Control Ultimate Edition, No Man’s Sky, Riven, Stray e a maioria dos outros apresentam compressão e renderização borrada por causa do padrão incorreto de resolução
- Control: define a resolução por conta própria, mas ela não corresponde à resolução real do Mac
- No Man’s Sky: oferece proporções incorretas e resoluções tanto da safe area quanto da área fora dela
- Riven, Stray: aplicam por padrão renderização em resolução comprimida
- Cyberpunk 2077 escolhe uma resolução correta na proporção 16:10 (o método interno de filtragem não foi divulgado)
- World of Warcraft: por usar uma API legada que permite desenhar até o notch, a resolução total funciona normalmente
O que a Apple poderia fazer: necessidade de resposta da Apple
- É preciso adicionar ao documento HIG (Human Interface Guidelines) orientações e tratamento de resolução para telas com notch
- É necessário atualizar
CGDisplayMode no AppKit/Cocoa para facilitar o filtro de resoluções
- É preciso projetar uma nova API voltada à otimização de jogos (resolvendo lista de resoluções e boilerplate)
- Para os desenvolvedores, pode-se considerar recomendar o cálculo da própria lista de resoluções em vez de consultar resoluções diretamente, ou o uso de “render scale”
- Se essas melhorias forem adotadas, a Apple também deveria atualizar em conjunto a documentação oficial e os códigos de exemplo
Ainda não há comentários.