Version: 2018.4
Metal
Compute shaders

OpenGL Core

OpenGL Core is a back-end capable of supporting the latest OpenGL features on Windows, MacOS X and Linux. This scales from OpenGL 3.2 to OpenGL 4.5, depending on the OpenGL driver support.

Enabling OpenGL Core

To set OpenGL Core as your default Graphics API in the Editor or Standalone Player, go to the Player settings (menu: Edit > Project Settings, then select the Player category), and navigate to Other Settings. Disable the Auto Graphics API for Windows property, and choose OpenGLCore from the list. For more details, see [Graphics API support](Graphics APIs).

OpenGL requirements

OpenGL Core has the following minimum requirements:

  • Mac OS X 10.8 (OpenGL 3.2), MacOSX 10.9 (OpenGL 3.2 to 4.1)

  • Windows with NVIDIA since 2006 (GeForce 8), AMD since 2006 (Radeon HD 2000), Intel since 2012 (HD 4000 / IvyBridge) (OpenGL 3.2 to OpenGL 4.5)

  • Linux (OpenGL 3.2 to OpenGL 4.5)

macOS OpenGL driver limitations

The macOS OpenGL backend for the Editor and Standalone supports OpenGL 3.x and 4.x features such as tessellation and geometry shaders.

Sin embargo, como Apple restringe la versión de OpenGL en un escritorio OS X a 4.1 como mucho, este no soporta todas las características de DirectX 11 (como lo son Unordered Access Views o Compute Shaders).

Por lo tanto un nuevo nivel objetivo shader es introducido: #pragma target gl4.1. Este nivel objetivo requiere al menos OpenGL 4.1 o un nivel shader Directx 11.0 de 5 en desktop, o OpenGL ES 3.1 + Android Extension Pack en móviles.

Características de OpenGL Core

El nuevo back-end de OpenGL introduce muchas nuevas características (previamente en su mayoría que eran de DX11/GLES3 solamente):

  • Compute shaders (al igual que ComputeBuffers y “random write” render textures)
  • Shaders de Tessellation (teselación) y Geometría
  • Dibujo indirecto (Graphics.DrawProcedural y Graphics.DrawProceduralIndirect)
  • Modos de blend (mezcla) avanzados

Cambios al shader

Cuando utilice los objetivos #pragma existentes, estos se asignan a los siguientes niveles de GL:

  • #pragma target 4.0 // OpenGL ES 3.1, desktop OpenGL 3.x, DX Shader Model 4.0
  • #pragma target gl4.1 // Desktop OpenGL 4.1, SM 4.0 + tessellation to match MacOSX 10.9 capabilities
  • #pragma target 5.0 // OpenGL ES 3.1 + Android Extension Pack, desktop OpenGL >= 4.2, DX Shader Model 5.0

Para incluir y excluir plataformas shader de utilizar shaders específicos, los siguientes targets (objetivos) #pragma only_renderers / exclude_renderers se pueden utilizar:

  • #pragma only_renderers glcore: Solamente compile para el GL de escritorio. Como el objetivo ES 3, este también se escala hasta contener todas las versiones GL, dónde los shaders básicos soportarán GL 2.x mientras que los shaders que requieran de características SM5.0 requieren OpenGL 4.2+.

Argumentos de linea de comando de perfil de OpenGL Core

Es posible empezar el editor o el player con OpenGL utilizando los argumentos de linea de comando:

  • -force-opengl: Para utilizar el back-end de OpenGL legacy
  • -force-glcore: Para utilizar el nuevo back-end de OpenGL. Con este argumento, Unity detectará todas las nuevas características que la plataforma soporta ejecutar con la mejor versión de OpenGL posible y todas las extensiones OpenGL disponibles.
  • -force-glcoreXY: XY puede ser 32, 33, 40, 41, 42, 43, 44 o 45; cada número representando una versión específica de OpenGL. Si la plataforma no soporta una versión específica de OpenGL, Unity entonces utilizará una versión soportada
  • -force-clamped: Solicita que Unity no utilice extensiones OpenGL que garanticen que varias plataformas ejecutarán la misma ruta de código. Esto es un acercamiento para probar si un problema es específico a la plataforma (un bug del driver por ejemplo).

Argumentos de linea de comando en escritorio Native OpenGL ES

La API de gráficos OpenGL ES está disponible en maquinas Windows con GPUs Intel o NVIDIA con drivers que soporten OpenGL ES.

  • -force-gles: Para utilizar el nuevo back-end de OpenGL en modo OpenGL ES. Con este argumento, Unity detectará todas las características que la plataforma soporta ejecutar con la mejor versión OpenGL ES posible y todas las extensiones OpenGL ES disponibles.
  • -force-glesXY: XY puede ser 20, 30, 31, 0 31aep; cada número representando una versión específica de OpenGL ES. Si la plataforma no soporta una versión específica de OpenGL ES, Unity entonces utilizará una versión soportada. Si la plataforma no soporta OpenGL ES, Unity entonces utilizará otra API de gráficos.
  • -force-clamped: Solicita que Unity no utilice extensiones OpenGL que garanticen que varias plataformas ejecutarán la misma ruta de código. Esto es un acercamiento para probar si un problema es específico a la plataforma (un bug del driver por ejemplo).

Metal
Compute shaders