- Al ejecutar juegos en pantalla completa en una MacBook, la mayoría se renderiza de forma borrosa debido al problema de la muesca de la pantalla
- El mecanismo de selección de resolución del sistema no toma en cuenta el área de la muesca, lo que provoca una selección incorrecta del área de salida
- Elegir una resolución 16:10 es una solución temporal, pero la causa de fondo es el diseño de las API de Apple y la falta de orientación
- El problema se reproduce en juegos representativos (Shadow of the Tomb Raider, No Man’s Sky, etc.); algunos juegos recientes (Cyberpunk 2077) lo manejan correctamente
- Apple necesita mejorar la guía para desarrolladores y el soporte con actualizaciones de las HIG y las API
Problema: por qué el renderizado se ve borroso en juegos a pantalla completa en Mac
- Este problema fue reportado a Apple desde septiembre de 2023 como el issue FB13375033
- Cuando un juego se ejecuta en pantalla completa en una pantalla de MacBook, la mayoría no considera correctamente la muesca (
notch) y se produce un error de renderizado
- Muchos juegos reciben la lista de resoluciones compatibles del sistema y eligen la primera (la resolución de toda la pantalla), pero en realidad el área de pantalla completa utilizable en AppKit está limitada a la zona debajo de la muesca
- Si el juego renderiza con la resolución completa de la pantalla, el área real donde puede dibujar es más pequeña, por lo que el frame se comprime verticalmente y termina viéndose borroso
Estructura de áreas en una pantalla de Mac
- Las pantallas de Mac con muesca tienen tres áreas principales
- El límite completo de la pantalla (incluyendo la muesca y el menú)
- El
safe area (debajo de la muesca)
- El área de pantalla completa utilizable por AppKit (debajo de la barra de menú)
- La lista de resoluciones que devuelve la función
CGDisplayCopyAllDisplayModes mezcla la resolución completa de la pantalla con la resolución debajo de la barra de menú (normalmente con proporción 16:10)
- La mayoría de los juegos usa el primer elemento de la lista (el área de pantalla completa), lo que produce una salida incorrecta
- Ejemplo: Shadow of the Tomb Raider inicia por defecto con la resolución completa de pantalla (3456x2234), pero el área real donde puede dibujar es 3456x2160 (esa diferencia de 74 píxeles comprime la imagen y hace que el renderizado se vea borroso)
Solución: elegir la resolución correcta y mitigaciones temporales
- Usuarios: al ejecutar juegos en pantalla completa en una pantalla de Mac con muesca, es importante seleccionar manualmente una resolución 16:10 (el juego no la ajusta automáticamente)
- Desarrolladores: es necesario filtrar la lista de resoluciones de forma más precisa usando la propiedad
safeAreaInsets de NSScreen
- Se propone en código un algoritmo para filtrar solo las resoluciones que coinciden con el
safe area (aunque tiene el efecto secundario de filtrar en exceso algunas resoluciones, como 4:3)
- Aun así, en esencia se necesita una mejora del lado de Apple
Juegos afectados: casos representativos y estado del manejo
- Shadow of the Tomb Raider, Control Ultimate Edition, No Man’s Sky, Riven, Stray y muchos otros muestran compresión y renderizado borroso debido a una resolución predeterminada incorrecta
- Control: asigna una resolución arbitraria por su cuenta, pero no coincide con la resolución real del Mac
- No Man’s Sky: ofrece tanto proporciones incorrectas como resoluciones de
safe area y de área no segura
- Riven, Stray: aplican por defecto renderizado con resolución comprimida
- Cyberpunk 2077 sí elige una resolución correcta con proporción 16:10 (no se ha revelado su método interno de filtrado)
- World of Warcraft: al usar una API heredada puede dibujar hasta la zona de la muesca, por lo que aplicar la resolución completa funciona correctamente
Qué podría hacer Apple: necesidad de respuesta por parte de Apple
- Hace falta agregar en la documentación HIG (Human Interface Guidelines) manejo de resoluciones y orientación para pantallas con muesca
- Se necesita una actualización de
CGDisplayMode en AppKit/Cocoa para facilitar el filtrado de resoluciones
- Hace falta diseñar una nueva API enfocada en la optimización de juegos (resolviendo la lista de resoluciones y el código repetitivo)
- Para los desarrolladores, podría recomendarse calcular su propia lista de resoluciones en vez de consultarla, o usar un enfoque de “render scale”
- Si se aplican estas mejoras, Apple también debería actualizar su documentación oficial y el código de ejemplo
Aún no hay comentarios.