Todos los cambios en Metal: Performance HUD, asistencia de shaders, más

Imagen destacada del artículo

Este año y el año pasado, en la WWDC, Apple presentó varias mejoras nuevas para Metal, con Metal 3 ejecutándose en Apple Silicon Mac y en dispositivos iOS y tvOS.

Metal 3 representa mejoras significativas en el motor y los marcos de trabajo de Metal para escribir juegos en 3D para las plataformas de Apple.

Cubriremos estas mejoras a continuación.

Metal tiene su propio lenguaje de sombreado basado en C ++ 14, Metal Shading Language, que se detalla completamente en la Especificación de lenguaje de sombreado de metal (MSL).

En la WWDC ’23, Apple presentó la versión 1.3 de la especificación de lenguaje de sombreado de metal. La especificación MSL cubre todos los aspectos de la escritura de código de sombreado para Metal en C++.

La nueva especificación MSL se puede descargar en formato PDF desde el sitio web para desarrolladores de Apple.

Metal 3 ahora incluye un pequeño Heads-Up Display opcional visible en la esquina superior derecha de las escenas renderizadas mientras se ejecuta el juego:

La pantalla de visualización frontal de rendimiento de Metal.

El HUD de rendimiento puede mostrar varias piezas de información útil para inspeccionar el rendimiento de su juego en tiempo real:

Mostrar y registrar estadísticas clave de rendimiento CPU y resolución Frecuencia de actualización del dispositivo Escalado Representación directa o compuesta FPS costo promedio de GPU por cuadro Más
Algunas estadísticas de visualización de avisos de Metal.

Algunas estadísticas de visualización de avisos de Metal.

En la WWDC ’23, Apple también presentó la herramienta Metal Shader Converter. Los sombreadores son pequeños programas que administran la luz, el color y los materiales en objetos 3D en una escena.

Metal Shader Converter lo ayuda a convertir sombreadores escritos en otros lenguajes y marcos o desde otras plataformas a Metal 3, es decir, desde el formato DirectX 12 DXIL de Microsoft Windows.

Metal Shader Converter proporciona dos modelos de enlace para elegir: Diseño automático y Diseño explícito. Estos modelos ayudan a convertir sombreadores de otras plataformas.

Las tablas MTLBuffer se utilizan en la herramienta Metal Shader Converter.

Renderizado sin enlaces, búferes de argumentos y trazado de rayos

Nuevo en Metal 3, el renderizado sin límites le permite usar el trazado de rayos para mejorar el rendimiento y la calidad en escenas renderizadas en 3D.

Un aspecto de la representación sin límites, los búferes de argumentos, le permite combinar recursos en búferes que aceleran la representación.

En lugar de vincular cada recurso de visualización, los recursos de búfer de argumento se vinculan entre sí en la memoria en un búfer. En el modelo sin enlaces, los búferes de argumentos agregan y vinculan los recursos, lo que permite el acceso directo desde las canalizaciones de representación.

Las mallas 3D se vinculan entre sí en la memoria en lugar de usarse una por una en las canalizaciones de representación. Esto acelera el acceso a todos los objetos que necesitan los sombreadores de trazado de rayos para renderizar superficies de alta resolución más rápido y con más detalle.

Representación sin encuadernación.

Representación sin encuadernación.

Las mallas, los materiales y las texturas se pueden vincular en la memoria.

Cuatro nuevas mejoras en Metal 3 ayudan al renderizado sin bordes:

Búferes de argumentos – vincular los recursos para el acceso directo como se describe anteriormente.

Arreglos ilimitados – permite la definición de múltiples estructuras de malla en una matriz a la vez. Los sombreadores pueden acceder a arreglos de cualquier tamaño sin restricciones.

Ahora se puede acceder a los objetos de estructura de malla en matrices ilimitadas directamente desde el código y los subprocesos de C/C++, aunque debe tener cuidado al acceder a ellos debido a problemas de sincronización de subprocesos.

Puede usar el indicador del precompilador __METAL_VERSION__ para compilar condicionalmente las declaraciones de C, C++ y Mesh en Metal 3 para usar matrices ilimitadas, si están disponibles en la plataforma de destino.

Puede usar el objeto MTLDevice en tiempo de ejecución para ver si algún dispositivo determinado es compatible con las nuevas funciones. Para utilizar las nuevas funcionalidades debes tener un dispositivo con las siguientes especificaciones:

iOS: chip A13 Bionic o más reciente.

macOS: una Mac de 2016 o superior.

La sección «Búferes» de la documentación para desarrolladores de Metal de Apple tiene una nueva sección sobre búferes de argumentos.

Estructuras de aceleración asignadas por MTLHeap

Los montones son espacios de memoria preasignados en los que se cargan recursos y estructuras antes de la representación. Ser residente en montón significa que los recursos están precargados y listos para usar instantáneamente cuando sea necesario durante el renderizado.

Las estructuras de aceleración de trazado de rayos se pueden asignar directamente desde objetos MTLHeap junto con búferes y texturas. Esto permite la agregación con otros tipos de recursos. El uso de estructuras de aceleración MTLHeap ahorra tiempo de CPU en subprocesos.

Mejoras en la validación de sombreadores

Por lo general, los recursos deben residir en el montón antes de la representación para garantizar el rendimiento de la representación y una visualización precisa. Si no se asignan los recursos en montón por adelantado, se pueden producir fallas en el rendimiento e incluso una visualización incorrecta de los objetos durante el dibujo.

Para ayudar a garantizar que los recursos residan en el montón, Metal 3 proporciona una nueva función para detectar la residencia faltante durante la ejecución del búfer de comandos compartidos. Para garantizar la residencia del montón, useResource: ahora se envía a cada elemento de una escena antes de que los objetos de la escena se envíen al codificador de trazado de rayos.

Esta forma de garantizar que los recursos estén residentes antes de que se ejecuten los sombreadores de trazado de rayos se denomina validación de sombreadores en Metal 3.

Estas cuatro características hacen que sea más fácil ir sin ataduras en Metal 3.

Además, asegúrese de consultar las sesiones de WWDC ’23 «Su guía para el trazado de rayos de Metal» y «Vaya sin límites con Metal 3».

El nuevo visor de dependencias de Metal Debugger muestra las dependencias entre los recursos de la carga de trabajo de procesamiento.

Para mostrar el Visor de dependencias, abra Metal Debugger y haga clic en la fila Dependencias en el navegador de la izquierda:

Apertura del depurador de dependencias de metal.

Apertura del depurador de dependencias de metal.

Aparecerá un gráfico de dependencia que muestra las dependencias en cada comando de renderizado. Al hacer clic en cualquier elemento en un gráfico de dependencia, se muestran los detalles de ese elemento en la nueva barra lateral a la derecha del Visor de dependencia.

Hay dos tipos de dependencias que se muestran en el Visor de dependencias de Metal Debugger: flujo de datos y sincronización. Las líneas continuas en el Visor de dependencias muestran el flujo de datos y las líneas de puntos muestran las dependencias que muestran la sincronización entre pases.

Gráfico del depurador de dependencias de metal.

Gráfico del depurador de dependencias de metal.

Depurador de sombreadores

También hay un Shader Debugger integrado en Xcode 14 y versiones posteriores que le permite realizar una depuración a nivel de píxel de su código de sombreado. Puede seleccionar cualquier píxel renderizado que se muestre en cualquier escena, hacer clic en el botón Shader Debugger en la esquina inferior derecha de la ventana del depurador y saltará al lugar exacto en su código de sombreado utilizado para dibujar el objeto.

Mejoras varias

El equipo de Metal ahora tiene cuatro recomendaciones adicionales para optimizar las canalizaciones de renderizado de Metal:

Mover copias antes de renderizar. Comandos de grupo del mismo tipo. Evite codificadores vacíos. Optimice usando MTLLoadAction y MTLStoreAction

La última recomendación, MTLLoadAction y MTLStoreAction, se utilizan en archivos adjuntos, acciones que se ejecutarán antes de un pase de renderizado.

Estas recomendaciones también se cubren con más detalle en la sesión de la WWDC ’23 «Vuélvete sin límites con Metal 3». Consulta la aplicación Apple Developer para acceder a todos los videos de la sesión de la WWDC ’23 Metal.

También asegúrese de consultar la mejora de MetalFX, que cubrimos en otro artículo la semana pasada.

Estas mejoras en Metal 3 significan que Metal es mejor que nunca como plataforma para sus juegos y aplicaciones 3D en dispositivos Apple.

Deja un comentario