Una de las novedades de la WWDC además de las extensiones, Yosemite etc. fue Metal, algo que ha estado en la sombra de la actualidad pese al énfasis que ha hecho Apple de esta tecnología en sus presentaciones. Para comprender bien el impacto que tendrá en nuestros dispositivos iOS, creo conveniente analizar qué es, cómo funciona y qué beneficios tendrá.

¿Qué es Metal?

Apple lo define como una nueva tecnología que permitirá a los desarrolladores crear juegos inmersivos y de calidad gráfica semejante a las consolas de sobremesa en los nuevos iPhone y iPhone 6 Plus.

Pero... ¿no se podían crear ya juegos de gráficos potentes antes de la salida de Metal teniendo en cuenta la gran potencia gráfica de los nuevos iPhone? Pues sí y no... iOS 7 usaba OpenGL ES, que comunicaba entre el juego y el chip gráfico del A7 que realiza los cálculos del juego. OpenGL comunicaba y traducía los comandos gráficos que eran enviados a la GPU para realizar los cálculos.

El problema es que OpenGL era saturado por las órdenes, limitando la capacidad de cálculo de iOS 7 y la GPU del iPhone. Aquí es donde entra Metal en juego, el nombre viene del acercamiento del software al "metal", al hardware, a la comunicación directa entre desarrollador y hardware. Algo que viene relacionado con la apertura del SO a los desarrolladores con las extensiones, pero a un nuevo nivel dejando una vía más directa a los programadores al hardware del iPhone.

Metal será el arma de los grandes estudios a la hora de crear juegos de nueva generaciónMetal está dirigido a los desarrolladores que quieren llevar al límite las GPU de los iPhone ensamblados con A7 y A8. Por supuesto, los juegos y Metal dispondrán con un desempeño mucho mayor con la nueva GPU del A8 que es un 60% más potente que la incluida en el A7 y es, en consecuencia, el mayor cambio a nivel de especificaciones entre el terminal del año pasado y el actual. Sólo faltaba una herramienta con la que sacar todo el jugo de tanta potencia gráfica. Se llama Metal.

¿Por qué una API de bajo nivel?

En resumen, y para que se entienda mejor, Metal es un conjunto de APIs de gráficos a bajo nivel, algo parecido a lo que tenemos con Mantel de AMD y el conocido DirectX 12 de Microsoft. En el caso de Metal, surge del hecho de que pese a que las API de alto nivel ofrecen grandes funciones con un gran nivel de abstracción, el decremento de rendimiento no merece la pena en el caso de los desarrolladores más experimentados y con mayor talento exigen el máximo rendimiento a costa de facilidad de programación. Quieren estar más cerca del "Metal", del hardware.

El gran problema era que la velocidad y capacidad de cálculo de las GPU supera cada año exponencialmente a la de la CPU mientras que sus API y drivers se han quedado estancadas desde hace ya muchos años, creando un problema intolerable, y requiriendo que los desarrolladores interactúen con el hardware directamente.

Una API de bajo nivel aumenta la eficiencia del chip gráficoDejando las API a muy bajo nivel, los desarrolladores podrán decir a la CPU exactamente lo que están haciendo y cómo quieren que lo haga, traspasando grandes bloques ejecutados por la CPU a la GPU. Cosa que era inaccesible para el desarrollador antes. Las CPU son el gran cuello de botella que tienen las GPU en los últimos años, así que Metal debería hacer posible a los desarrolladores crear juegos hasta ahora impensables y con un rendimiento muy superior al que estábamos acostumbrados.

Como siempre, no existen los milagros, y ni los 64bit de los SoC son la noche y el día del rendimiento de los smartphones ni con Metal vas a poder crear el FarCry 3 para el iPhone en tu casa en tres días... Metal no es magia, es sólo la posibilidad de que los estudios que desarrollan juegos puedan trabajar con la GPU y exprimir su máximo rendimiento. Es a fin de cuenta, una oportunidad para que se creen juegos espectaculares.

El ecosistema Apple, la base de Metal

Aquí viene lo más interesante a mi juicio, ya que Apple se sitúa en una posición privilegiada en este campo. Mientras que las otras API de bajo nivel que hemos visto hasta el momento como Mantle y DirectX 12 están establecidas e implementadas por fabricantes de hardware que tienen que lidiar con las CPU, GPU y sistemas operativos de otros fabricantes, Apple sólo tiene que lidiar con el hardware que él mismo crea o que ensambla en sus terminales estando muy cerca del ecosistema idílico vertical en el que puede gobernar todo de arriba a abajo.

Apple está en una situación envidiable en control de hardwareApple diseña sus propias CPU, configura sus SoC y escribe su propio sistema operativo. La única pieza que no controla totalmente es la GPU, e incluso en ese apartado sólo se han usado chips PowerVR en los últimos años sin intención de cambio alguno. Así que a todos los efectos, Apple tiene un ecosistema cerrado y totalmente vertical que pueden controlar de arriba a abajo y que les permite crear cosas como Metal de una forma rápida y fiable.

Ser "cerrado" tiene sus inconvenientes, pero también grandes ventajas si se usa para menesteres como éste. Metal es el ejemplo perfecto de lo que conlleva un ecosistema cerrado y vertical.

Metal Computing

Como apunte final sobre lo que esconde Metal, aunque haya escrito sólo sobre el rendimiento gráfico, es muy interesante como Apple ha convertido Metal en su API de cálculo de GPU así como de gráficos. A pesar de ser una de las promotoras de OpenCL, Apple nunca lo implementó, ni tan si quiera otra de las muchas API disponibles para computación en chips gráficos en iOS hasta ahora. Como resultado, las GPU de los dispositivos móvil de Apple estaban bastante limitados dentro y fuera del desarrollo de juegos.

La naturaleza de bajo nivel de Metal significa que será bastante adecuado, al menos muy superior a lo que estaban acostumbrados los desarrolladores, para la computación de GPU, así como la ausencia de una capa de abstracción hace que manejar tareas y tipos de dato sea más eficiente. Así todo tenemos que ver cómo se adapta Metal a los requisitos de los desarrolladores y si puede competir contra la funcionalidad de OpenCL o OpenGL 4 y superior.

¿En qué dispositivos estará disponible?

Metal podrá ofrecer una experiencia más fluida y gráficos más avanzados a todos los usuarios de un iPhone 5S, iPad Air o iPad mini 2 y modelos superiores.

Ha sido diseñado para sacar el mayor partido posible al A7, así que aunque no dispongas del último SoC de Apple (el A8) tendrás una mejora grande en el rendimiento de los juegos que utilizan esta API frente a los que usen capas de abstracción de más alto nivel. Pese a que el iPhone 5C, iPhone 5 y iPhone 4S puedan ser actualizados a iOS 8 no obtendrás ninguna mejora en rendimiento con Metal ya que esta API no estará disponible para las GPU antiguas.

¿De qué es capaz Metal?

Ya sabemos la teoría, pasemos a ver ejemplos y números reales de rendimiento. Metal ofrece un draw call rate (lo que se usa para renderizar objetos en un juego 3D) 10 veces mayor, generando una experiencia de juego mucho más rápida y fluida y con la posibilidad de que se generen entornos de juego mucho más detallados sin sacrificar el rendimiento del juego.

También hay mejoras en los tiempos de carga, ya que Metal tiene soporte a shaders precompilados. Algo muy importante para que un juego sea lo más real posible y el detalle de los escenarios y entornos del juego aumenten. El mejor ejemplo es el de Epic Zen Garden desarrollado por Epic Zen Garden con el motor gráfico Unreal Engine 4 o el ya disponible Asphalt 8

Como podéis comprobar los resultados son espectaculares y todo esto acaba de comenzar, ya que Metal no hace magia, solo ofrece la posibilidad de que los desarrolladores saquen partido a la capacidad tan grande de las GPU actuales, algo que hasta iOS 8 era imposible. Junto al incremento de pantalla y Metal creo que viviremos una nueva época dorada en el gaming en iOS, aunque personalmente no sea de jugar en el móvil.