Lumberyard
Guía del usuario (Version 1.20)

Directrices de ajuste del rendimiento de Lumberyard para dispositivos móviles

Consulte las siguientes directrices para generar recursos artísticos para juegos de dispositivos móviles con Lumberyard y para saber cómo ajustar el rendimiento de Lumberyard para los dispositivos móviles.

Directrices sobre recursos artísticos

En esta sección se proporcionan directrices sobre geometría, iluminación, mapeado de sombras en cascada y materiales.

Directrices sobre geometría

Siga estas directrices para crear la geometría de su juego para dispositivos móviles:

  • Utilice menos objetos individuales para reducir significativamente las llamadas de dibujo. Recomendamos que haya 750 o menos llamadas de dibujo en los dispositivos móviles.

  • Utilice instancias en los casos que proceda. Para ello, cree un sector en Lumberyard Editor y, a continuación, cree instancias de varias instancias de ese sector en el nivel.

  • Añada compatibilidad con el nivel de detalle de la geometría (NdD). Cada NdD debe tener una reducción de un 50 % de la geometría.

    • Agrupe el modelo NdD de alta resolución en _lod0_objectname.

    • Agrupe el siguiente modelo de NdD en _lod1_objectname_group.

    • Llame al modelo proxy de sombra shadowproxy.

    • Exporte el modelo de proxy de sombra con el material de proxy de sombra.

    • Agrupe el modelo de proxy de sombra en el último grupo de NdD.

      ejemplo

      A continuación, se muestra una configuración de NdD en Maya.

      
                                        Ejemplo de configuración del nivel de detalle (NdD) en Maya.
    • Haga lo siguiente para ajustar el NdD:

      1. En Lumberyard Editor, seleccione una entidad en su nivel que tenga un componente Mesh.

      2. En el Entity Inspector, en el componente Mesh, en Options (Opciones), ajuste el control deslizante de LOD distance ratio (Proporción de distancia de NdD). El control deslizante ajusta la distancia a la que aparece el nivel de detalle (NdD).

      3. Ajuste cada activo para ver solo los activos de alta resolución cuando sea necesario.

  • Restrinja su recuento de polígonos, tal y como se indica a continuación, para cada vista de la cámara en el juego:

    • Para los dispositivos de poco rendimiento, utilice 300k o menos.

    • Para dispositivos de alto nivel, utilice 700k o menos, si la CPU es el cuello de botella.

    nota

    Para determinar el recuento de polígonos, establezca r_DisplayInfo en 1 en la consola de Lumberyard Editor. Los datos de depuración de la parte superior derecha de la pantalla mostrarán el número de polígonos de cada fotograma de la escena.

  • En el panel Console (Consola), en Lumberyard Editor, establezca la variable de consola r_stats en 1 para imprimir el número de llamadas de dibujo y polígonos que representa la cámara actual.

Directrices de iluminación

Siga estas directrices para añadir iluminación a su juego para dispositivos móviles:

  • Es importante estudiar con atención la cantidad de luces de la escena que proyectan sombras.

  • Haga lo siguiente para ajustar las luces:

    1. En Lumberyard Editor, seleccione una entidad en su nivel que tenga un componente Mesh.

    2. En el Entity Inspector, en el componente Mesh, en Options (Opciones), ajuste el valor de View distance multiplier (Ver multiplicador de distancia). Especifique un valor inferior para realizar un fundido de salida de la luz y detener el dibujo antes. Esta configuración es importante para el rendimiento.

  • Añada luces de zona y proyector solo si es necesario. El pase de luz es costoso.

  • Reduzca el área de luz si es posible. Sea austero.

  • Evite que las áreas de luz se superpongan.

  • Evite que las áreas de la sonda de entorno se superpongan.

  • Evite cubrir grandes áreas con sondas de entorno, ya que podrían aparecer artefactos en el borde de las áreas de gran tamaño. Por ejemplo, el tamaño 1 000 x 1 000 es demasiado grande para una sonda de entorno. Recomendamos dividir un área de ese tamaño en cuatro áreas más pequeñas.

  • Simule la luz reflejada con luces que no proyecten sombras. La iluminación global no se puede utilizar en dispositivos móviles.

    ejemplo

    La siguiente escena utiliza luces que no proyectan sombras para simular el reflejo de la iluminación global (GI).

    
                                Escena de ejemplo en la que se utilizan luces que no proyectan sombras para simular el reflejo de la iluminación global (GI).

Directrices del mapeado de sombras en cascada

Lumberyard utiliza variables de consola para especificar cómo generar mapeados de sombras en cascada y para mejorar el rendimiento del pase de sombras. También puede establecer estas variables para que afecten al motor de forma global o por nivel. Edite el archivo level.cfg para establecer las variables para un nivel específico. Para obtener más información, consulte Uso de la ventana de la consola.

  • e_ShadowsCascadesDebug: habilita la vista de depuración para el mapeado de sombras en cascada. Cada cascada del mundo se representa con un color diferente para proporcionar información visual de la zona que cubre el mapeado de sombras en cascada.

ejemplo

El siguiente mapeado de sombras global (GSM) tiene establecida la variable de consola e_ShadowsCascadesDebug en 1.


                        Ejemplo de un mapeado de sombras global (GSM) con la variable de consola e_ShadowsCascadesDebug establecida en 1.

Utilice las siguientes variables de consola para especificar el tamaño y la forma de generar cascadas de sombras:

  • e_GsmLodsNum: especifica el número de cascadas de sombras que se van a utilizar. El valor predeterminado es 5.

  • e_GsmRange: especifica el tamaño de la primera cascada de sombras en unidades cuadradas del mundo. El valor predeterminado es 3, que abarca tres unidades cuadradas en el mundo. En el ejemplo anterior, la primera cascada de sombras se va a dibujar en rojo.

  • e_GsmRangeStep: especifica el multiplicador que se va a utilizar para calcular el tamaño de la próxima cascada de sombras. El valor predeterminado es 3.

    Por ejemplo, si establece e_GsmRange en 3, la primera cascada de sombras abarca tres unidades cuadradas en el mundo. Para calcular el tamaño de la siguiente cascada de sombras, Lumberyard multiplica la primera cascada de sombras por el valor de e_GsmRangeStep. Si el valor de e_GsmRangeStep es el valor predeterminado de 3, la siguiente cascada de sombras cubriría nueve unidades cuadradas en el mundo. La siguiente cascada de sombras cubriría 27 unidades cuadradas en el mundo y así sucesivamente.

Cuando establezca variables de consola, intente encontrar un equilibrio entre la reducción del tamaño y el número de mapeados de sombras en cascada y el mantenimiento de la calidad visual del juego. Puede establecer e_shadows en 0 para desactivar las sombras, lo que puede ser necesario para dispositivos de bajo rendimiento.

Las siguientes imágenes demuestran cómo las variables de consola del mapeado de sombras global (GSM) afectan al tamaño y la distancia de cobertura de la cascada de sombras.

Imágenes de ejemplo del impacto del GSM en el tamaño y distancia de cobertura de la cascada de sombras
Establezca la variable de consola e_GsmRange en 1 para reducir el tamaño de la cascada de sombras. Establezca la variable de consola e_GsmRangeStep en 1.5 para reducir el área que cubre cada cascada consecutiva. Establezca la variable de consola e_GsmNodLods en 3 para reducir el número de cascadas de sombras que utiliza Lumberyard.

                                        Establezca la variable de consola e_GsmRange en 1 para reducir el tamaño de la cascada de sombras.

                                        Establezca la variable de consola e_GsmRangeStep en 1.5 para reducir el área que cubre cada cascada consecutiva.

                                        Establezca la variable de consola e_GsmNodLods en 3 para reducir el número de cascadas de sombras que utiliza Lumberyard.

Directrices sobre materiales

Siga estas directrices para crear los materiales de su juego para dispositivos móviles:

  • Utilice menos objetos individuales y materiales para reducir significativamente las llamadas de dibujo.

  • Utilice atlas de texturas para reducir el número de materiales o materiales secundarios que son necesarios, reducir las llamadas de dibujo y aumentar el rendimiento.

  • Reduzca el tamaño de textura a 1024 x 1024 o menos.

Directrices sobre ingeniería

Lumberyard proporciona cuatro niveles de archivos de configuración para poder habilitar y deshabilitar características y funcionalidades en función de las características de rendimiento de los dispositivos móviles. Encontrará los siguientes archivos en el directorio lumberyard_version/dev/Engine/Config/spec:

  • ios_low.cfg

  • ios_medium.cfg

  • ios_high.cfg

  • ios_veryhigh.cfg

  • android_low.cfg

  • android_medium.cfg

  • android_high.cfg

  • android_veryhigh.cfg

Cada archivo incluye un conjunto de variables de consola en el que puede habilitar o deshabilitar características del motor.

También puede editar los archivos de configuración en la ventana Graphics Settings (Configuración gráfica) en Lumberyard Editor.

Para editar los archivos de configuración en Lumberyard Editor

  1. En Lumberyard Editor, seleccione Edit (Editar), Editor Settings (Configuración del editor) y Graphics Settings (Configuración de los gráficos).

  2. En la ventana Graphics Settings (Configuración gráfica), haga lo siguiente:

    1. En Platform (Plataforma), seleccione su dispositivo, como iOS.

    2. En el archivo de configuración preferido, ajuste los valores de las distintas variables de consola. Por ejemplo, si selecciona iOS, aparecen las variables de consola y los valores de cada archivo de configuración (ios_low.cfgios_medium.cfg, ios_high.cfg y ios_veryhigh.cfg).

    Al editar las variables de consola para el archivo de configuración, el representador muestra en pantalla el aspecto que tendría un nivel en un dispositivo móvil.

    
                        Ejemplo de la ventana Graphics Settings (Configuración gráfica) en Lumberyard Editor.

Uso de los archivos android_models.xml y ios_models.xml

Lumberyard utiliza dos archivos .xml para determinar qué dispositivos móviles utilizan archivos de configuración con una configuración baja, media, alta o muy alta. Encontrará los archivos android_models.xml y ios_models.xml en el directorio /lumberyard_version/dev/Engine/Config/gpu.

ejemplo Archivo android_models.xml

La línea Samsung Galaxy S5 indica que Lumberyard admite el uso de expresiones regulares cuando se especifica el número de modelo del dispositivo. Si un modelo de dispositivo aparece más de una vez, la última instancia se lee y se utiliza con el archivo de configuración correspondiente.

<DeviceList> <Config file="android_low.cfg"> <Device model="KFTHWI"/> <!-- Amazon Kindle Fire HDX --> <Device model="Nexus 7"/> <!-- Nexus 7 --> <Device model="Nexus 5"/> <!-- Nexus 5 --> <Device model="SM-N910H"/> <!-- Samsung Galaxy Note 4 (Asia-Pacific)--> <Device model=“SM-G900\w{1,2}“/> <!-- Samsung Galaxy S5 --> </Config> <Config file="android_medium.cfg"> <Device model="SM-T217S"/> <!-- Samsung Galaxy Tab 3 --> <Device model="SM-N920C"/> <!-- Samsung Note 5 --> </Config> <Config file="android_high.cfg"> <Device model="Nexus 6"/> <!-- Motorola Nexus 6 --> <Device model="Pixel"/> <!-- Google Pixel --> </Config> <Config file="android_veryhigh.cfg"> </Config> </DeviceList>

Memoria GPU (GMEM)

La memoria GPU (GMEM) es una clase de optimizaciones que utiliza memoria local en la GPU para reducir la transferencia de grandes texturas entre la CPU y la GPU. La GMEM puede funcionar en los siguientes modos, en función de lo que admita el dispositivo móvil:

  • Modo de 256 bits: el motor puede almacenar tres destinos de representación GBuffer y la profundidad o la plantilla en la memoria de píxeles de la GPU local, mientras realiza el pase Z preliminar, genera el GBuffer, aplaza las calcomanías y aplaza los pases de lluvia y nieve. Este modo también almacena las texturas de acumulación de luz difusa y especular en la memoria de píxeles de la GPU local durante los pases de sombreado diferido del representador.

  • Modo de 128 bits: este modo almacena las texturas de acumulación de luz difusa y especular en la memoria de píxeles de la GPU local durante los pases de sombreado diferido del representador. En comparación con el modo de 256 bits, el modo de 128 bits proporciona un aumento del rendimiento menor. Sin embargo, con el modo de 128 bits, puede habilitar determinadas características de representación que no están disponibles si utiliza el modo de 256 bits.

  • Disabled (Deshabilitado): este modo significa que GMEM no se admite o se ha deshabilitado en los archivos de configuración.

El representador utiliza dos extensiones de OpenGL para determinar qué modo de GMEM es compatible con dispositivos Android:

  • Framebuffer Fetch (Obtención de framebuffer) (modo de 256 bits)

  • Pixel Local Storage (Almacenamiento local de píxeles) (modo de 128 bits)

En los dispositivos iOS que admite Lumberyard, se admiten el modo de 256 bits y el modo de 128 bits.

Configuración del modo GMEM

Para habilitar o deshabilitar GMEM con la variable de consola r_EnableGMEMPath.

  • 0= Deshabilita GMEM en el representador.

  • 1= Permite que el representador utilice GMEM en el modo de 256 bits. Si el dispositivo móvil no admite el modo de 256 bits, el representador utilizará el modo de 128 bits. Si el dispositivo móvil no admite el modo de 128 bits, el representador deshabilitará GMEM.

  • 2= Permite que el representador utilice GMEM en el modo de 128 bits.

Solo puede habilitar o deshabilitar GMEM durante el inicio del motor. Debe añadir la variable de consola r_EnableGMEMPath a uno de los siguientes archivos:

  • android_low.cfg

  • android_medium.cfg

  • android_high.cfg

  • android_veryhigh.cfg

  • ios_low.cfg

  • ios_medium.cfg

  • ios_high.cfg

  • ios_veryhigh.cfg

  • system_android_es3.cfg

  • system_ios_ios.cfg

nota

Para evitar artefactos visuales y problemas de rendimiento, no cambie el valor de la variable de consola r_EnableGMEMPath en tiempo de ejecución.

Características de representación y GMEM

GMEM ofrece la flexibilidad de configurar las características de representación y modos para adaptarse a la calidad visual y el rendimiento de una amplia variedad de dispositivos móviles. Los dispositivos móviles más potentes podrían utilizar el modo de 128 bits de GMEM y seguir ajustándose a los requisitos de rendimiento necesarios. Puede utilizar los archivos de configuración para su dispositivo móvil, así como los archivos android_models.xml o ios_models.xml, para establecer sus requisitos.

Si habilita el modo de 256 bits de GMEM, no puede utilizar las siguientes características:

  • Motion blur (Difuminado de movimiento)

  • Temporal antialiasing (Suavizado temporal)

  • Screen space reflections (Reflejos de espacio de pantalla)

  • Screen space directional occlusion (Oclusión direccional de espacio de pantalla)

  • Fur (Pelaje)

  • Deferred subsurface scattering (Dispersión de subsuperficie diferida)

  • Volumetric fog

  • Deferred rain or snow occlusion (Oclusión de lluvia o nieve diferida)

Si habilita el modo de 128 bits de GMEM, no puede utilizar las siguientes características:

  • Fur (Pelaje)

  • Deferred subsurface scattering (Dispersión de subsuperficie diferida)

  • Volumetric fog

  • Deferred rain or snow occlusion (Oclusión de lluvia o nieve diferida)

Si desea utilizar una característica de representación que admite el modo de 128 bits de GMEM, pero no el de 256 bits, el representador establece automáticamente el modo en 128. Esto ocurre incluso si el modo se establece en 256 en los archivos de configuración.

Para utilizar todas las características de representación disponibles, deshabilite GMEM.

Tamaño de aplicación y memoria

Dado que los dispositivos móviles tienen una cantidad limitada de memoria, debe adoptar las medidas necesarias para reducir el tamaño de la aplicación y la cantidad de memoria que requiere. Siga estas instrucciones:

  • Incluya únicamente los recursos que utiliza el juego.

    • Habilite solamente las gemas que son necesarias para el juego. De esta forma, no se empaquetará código y activos innecesarios en su aplicación.

  • Incluya únicamente los activos que utiliza el juego.

    • Compruebe el directorio Cache del proyecto de juego para ver qué activos incluirá el proceso de compilación en el paquete de la aplicación.

    • En Windows, use WinDirStat para identificar los activos que utilizan más recursos y determinar si se deben incluir esos activos en el paquete de la aplicación o se deben alojar en línea como una descarga independiente.

    • Elimine los recursos de solo editor, que Asset Processor añade al directorio Cache. De este modo, se reducirá el tamaño del paquete de la aplicación final.

    • Elimine los activos del directorio del motor. Estos activos pueden aumentar significativamente el tamaño del paquete de la aplicación final, aunque el juego no los utilice. El archivo defaulttextures.xml contiene una lista de texturas que podrían no utilizar determinados proyectos de juegos. Encontrará este archivo en el directorio /lumberyard_version/dev/Engine/EngineAssets.

  • Evite utilizar asignaciones estáticas. De este modo, se reducirá el tamaño del código ejecutable y podrá administrar la memoria de una forma más segura en tiempo de ejecución.

  • Proporcione descargas de activos específicos de cada región. Si la aplicación utiliza contenido localizado y desea implementarla en varias regiones, considere la posibilidad de dividir la aplicación y alojar los datos para cada región en Amazon S3. Luego, puede utilizar el sistema de contenido dinámico para descargar los activos específicos de cada región.

Android

Si desea reducir el tamaño de una aplicación de gran tamaño, puede utilizar las herramientas que se incluyen con Android NDK para examinar su ejecutable. Por ejemplo, puede utilizar objdump o nm. La herramienta nm puede desensamblar los archivos binarios y mostrar el tamaño de cada segmento de código. Esta herramienta también puede mostrar símbolos y detectar si el código se ha vinculado de forma inesperada al archivo binario.

Rendimiento y características de representación de partículas

Las partículas utilizan volúmenes de luz y sol para determinar la forma en que deben iluminarse en la escena. Dado que los volúmenes de luz son costosos en los dispositivos móviles, no le recomendamos utilizar esta característica en dispositivos de rendimiento medio o bajo. Para especificar la forma en que se iluminan las partículas, puede utilizar la variable de consola e_LightVolumes con los siguientes valores:

  • 0 = A las partículas no les afectan las luces de volumen ligero o del sol.

  • 1 = A las partículas les afectan las luces de volumen ligero y del sol.

  • 2 = A las partículas solo les afecta la luz del sol.