Es/Resolviendo problemas de rendimiento

From FlightGear wiki
Revision as of 21:31, 21 November 2019 by Johan G (talk | contribs) (+-link: Interactive traffic → AI Traffic)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Resolviendo problemas de rendimiento te ayudará si:

  • piensas que FlightGear podría correr más suave en tu ordenador
  • tu hardware no es exactamente de última generación
  • ya estás enredando con la configuración pero no consigues mejorar los FPS
  • estás intentando averiguar quién es responsable de los artefactos gráficos que estás viendo.

Siguiendo progresivamente todas las pistas de esta página, de hecho, lentamente llegarás a un perfil mínimo de arranque en el cual muchas de las máquinas adecuadamente configuradas no deberían tener problemas.


Rendimiento en FlightGear

¿A qué puedo apuntar?

Como verás depende de muchas cosas. Es más fácil decirte a lo que deberías apuntar: al menos 20 FPS (frames per second, imágenes por segundo). Por debajo de este valor las cosas se vuelven muy entrecortado y especialmente volar VFR será más difícil. Un valor mucho más decente es 30 FPS, también para afrontar mejor posibles trompicones.

No tiene sentido sobrepasar la frecuencia de refresco de tu monitor. Ésta es típicamente 60 FPS pero algunos monitores soportan velocidades tan altas como 120 FPS.

¿Cómo veo mi tasa de refresco (framerate)?

Durante la simulación, abre el menú Debug > View Options y activa Show frame rate. Verás el número en la esquina inferior derecha de la pantalla.

¿Cómo uso esta página?

A continuación encontrarás una lista de factores de rendimiento. Cada uno de ellos afecta al rendimiento, pero no es lo mismo para cada uno. Así, para encontrar lo que puedes dejar para un menores trompicones, un FPS más regular, qué está matando la tasa de refresco o cuál podría ser la causa de ciertos artefactos, tendrás que comprobar cada uno de ellos.

Más importante es que tendrás que comprobarlos individualmente. De otra forma nunca estarás seguro de si uno de los factores es más determinante que otros. También haz tus experimentos en un entorno fijo, como arrancar siempre con el mismo avión en la misma pista.

El orden de la lista tiene una razón de ser, así que intenta seguirlo, a no ser que sepas lo que están haciendo (por ejemplo, todo funcionaba hasta que enredaste con unas opciones particulares y se rompió). Sabemos que es aburrido pero es la única forma de intentar resolver estos temas.

Perfil mínimo de arranque como una alternativa más rápida

Si sientes que estás enredando con ficheros de configuración, opciones de línea de comandos y así, puedes facilitar el proceso y hacerlo más riguroso usando el perfil mínimo de arranque que se usa para resolver fallos catastróficos del programa. La idea es siempre la misma: cambiar una opción cada vez (también puedes hacerlo dentro del simulador) y afinarlas para ajustarlas a tus necesidades.

Factores de rendimiento

Configuración hardware

  • Tarjetas de video problemáticas: hay una lista de tarjetas de video problemáticas. Comprueba que la tuya no esté entre ellas.
  • Tarjetas de video integradas: problablemente éstas estén en la lista anterior pero a veces puedes jugar con ellas, reduciendo la "vistosidad". Dos de estas tarjetas son Intel HD graphics 3000 y 4000. Con tarjetas de video integradas también es a menudo posible especificar la cantidas de memoria del sistema que será compartida y usada como video RAM (VRAM).
  • Pantalla de video: realmente no afecta al rendimiento. El problema sin embargo es que con una pantalla grande puedes querer usar una resolución mayor, pero esto afectará al rendimiento (y también a la profundidad de color).

Configuración del sistema operativo y driver

  • Programas de fondo: comprueba que tu sistema operativo no está repleto de programas innecesarios que están corriendo en la sombra. Ten el menor número de programas corriendo que sea posible.
  • Parámetros para maximizar el rendimiento energético: si estás usando un ordenador portátil seguramente tu sistema entra por defecto en modo ahorro de energía, incluso con el portátil enchufado. Ajusta estos parámetros a máxima energía mientras corre FlightGear.
  • Desactivar Optimus/Hybrid Graphics: muchos portátiles que corren Windows 7 tienen la tecnología llamada Optimus Technology (NVidia) o Hybrid Graphics (ATI). Su intención es incrementar la vida de la batería desconectando automáticamente la poderosa tarjeta gráfica cuando no es necesaria. Sin embargo, FlightGear la necesita todo el tiempo, ¡incluso si Optimus dice que no! Esta falta de comunicación da como resultado bajos framerates (porque tu ordenador correrá FlightGear con el débil procesador de la placa base) y a menudo FlightGear saldrá con el siguiente error:
Unknown exception in the main loop. Aborting... 
Possible cause: Not enough space
Si tienes una tarjeta NVidia comprueba si realmente lo usa:
  1. Ve al panel de control de NVidia, probablemente ubicado en el Panel de Control de Windows.
  2. Abre la pestaña de configuración 3D. Ahora hay dos opciones que puedes tomar:
    • En la pestaña "Gneral settings" pon "Prefered graphics processor" a NVidia. La tarjeta NVidia se usará ahora para todo el software. Esto puede disminuir la vida de la batería significativamente.
    • En la pestaña "Program settings" localiza fgfs.exe (por ejemplo C:/Program Files/FlightGear/bin/win32/fgfs.exe) y asigna la tarjeta NVidia a él. Desde ahora se usará la tarjeta NVidia para FlightGear.
  • Usuarios Linux: muchas distribuciones Linux más nuevas vienen con 3D mejorado, entornos de escritorio compuestos (KDE4, Compiz, Fusion...) Son conocidos por consumir recursos CPU y GPU, incluso ralentizando FlightGear unos 10 FPS. Escogiendo otro gestor de ventanas en la página de login, como XFCE, resulta en un mayor rendimiento de FlightGear. Ajustando "Compositing" a "off" en KDE4 también puede ayudar.

Configuración de drivers gráficos

  • Drivers de tarjetas gráficas: asegúrate de que están instalados los drivers del fabricante de la tarjeta gráfica. Puedes descargar e instalar drivers específicos de tu tarjeta desde la web del fabricante. Ver Configuración de drivers gráficos.
  • Ajustes de drivers gráficos: deasctiva Anti-Aliasing y Anisotropic Filtering o al menos establécelos a su valor más bajo. Reduciendo el ajuste para Mip-Mapping a su valor más bajo también puede ayudar.

Configuración FlightGear

Desde FlightGear Launcher (algunas opciones también aparecen durante la simulación, así que mejor comprobarlas ahí también):

  • Rembrandt: si activas el renderizador Rembrandt, bueno, ya sabes que es experimental. En primer lugar, intenta cambiar los ajustes de sombras y considera desactivarlos. Si no es suficiente desactiva Rembrandt totalmente. Para comprobar si está activado: última pestaña, Advanced > Rendering > uncheck Rembrandt.
  • Nubes 3D: uno de los peores infractores en términos de impacto en el rendimiento. Desactívalas (dentro del simulador también)
  • Resolución de pantalla: la cantidad de pixels que tiene que dibujar la tarjeta gráfica afecta al rendimiento, por lo que reducir la resolución puede a menudo ayudar.
  • Shading: establecer a "flat"
  • Niebla: establecer a "nicest" o "disabled"
  • Log level: Check that the log level is set to "alert" in Advanced > Debugging > Log level. Logging can cost some FPS.
  • Visibilidad: prueba reduciendo la visibilidad, especialmente con escenario muy detallados (corresponde con ajustes escuetos dentro del simulador, View > LOD settings)
  • Todo lo demás: ambas Advanced > features y Advanced > rendering tienen unos pocos ajustes que puedes probar
  • Texture compression: si estás experimentando trompicones al girar a la izquierda/derecha o al cargar nuevas baldosas es posible que la compresión de texturas no esté funcionando correctamente. Desactívala añadiendo la propiedad /sim/rendering/texture-compression=off en FGrun: Advanced > Properties. Esto se puede probar en tarjetas nVidia, ATI y chips integrados Intel con MesaGL, que sufren de bugs con la compresión de texturas y FlightGear.
  • Multithreading: ATENCIÓN! Si sabes lo que estás haciendo, en Preferences.xml activa <multithreading-mode>. Si tu framerate es menor con este ajuste activado y ambos, tú y tu ordenador sobrevivís, desactívalo de nuevo.

Durante la simulación:

  • Shaders: si probaste con todos estos ajustes hasta ahora es muy probable que sea la causa de tus problemas de FPS, y posiblemente de cualquier artefacto. Para comprobarlo, durante la simulación ve a View > Rendering options, comprueba la posición de la barra deslizante Shader. Si esto parece ser el problema puedes seleccionar Custom e intentar ver cuál en qué posición es el causante de tus problemas. Puede ser una combinación particular de ellos también.
  • Random features: intenta desactivando, uno a uno, edificios aleatorios, objetos aleatorios, árboles aleatorios. Si no parece que ninguno de ellos sea el causante de tus problemas podrías intentar afinar el ajuste de su densidad, o solo dejarlos desactivados. Requieren recargar el escenario.
  • Todo lo demás: intentar desactivando, uno a uno, cada una de las otras características de renderizado. Algunas necesitarán un reinicio.
  • Limitador de framerate: asegúrate de que no está seleccionado, o que no está forzando a un FPS demasiado bajo.

Opciones de simulación de FlightGear

  • Hora del día: cambiando el vuelo de nocturno a diurno no solo es más fácil para el pilotaje, sino también más fácil para el requerimiento gráfico. Comprueba la "Hora del día" y selecciona un ajuste diurno. Esto no es cierto, sin embargo, si tienes las sombras activadas: éstas consumen mucho y solo están presentes durante el día.
  • Ubicación: KSFO es un aeropuerto maravilloso pero también conocido por un alto volumen de tráfico, el cual puede ralentizar el rendimiento. Intenta con otro aeropuerto si encuentras problemas de rendimiento.
  • Vuelo rural: mientras que el framerate puede inicialmente ser tan lento como 5 fps durante el despegue, puede saltar a 5x o más después de volar a zonas menos pobladas.
  • Clima: vuela en cielos claros. Las nubes siempre incurren en un impacto más o menos pronunciado en el rendimiento
  • Elección de avión: algunos aviones tienen un menor requerimiento de recursos, especialmente el UFO. El 777 en cambio es conocido por se muy pesado.
  • Paneles 2D: aunque las cabinas 3D se ven muy tentadoras los simples paneles 2D son mucho más sencillos para el framerate.
  • Tráfico AI: el tráfico AI es tráfico controlado por el ordenador, el cual incluye tráfico sobre la [Howto: Multiplayer|red multijugador]]. Desactivando esta función no eres capaz de ver a otros aviones. Muchos trompicones, o pausas, son causadas por la necesidad de cargar los modelos para esos aviones cuando aparecen. Puede ir desde una sorpresa menor a un fallo completo. Desactivar solo los aviones generados por el ordenador (dejando el tráfico MP visible) se puede hacer añadiendo la propiedad /sim/traffic-manager/enabled=0 a FGRun, a través de Advanced > Properties.

Nada función ¿Y ahora qué?

Es improbable, así que esto tiene que ser más que un simple asunto de rendimiento. Necesitarás solicitar el apoyo de alguien y proporcionarle algunos datos de diagnóstico. Ver Resolviendo artefactos gráficos para obtener información sobre cómo hacerlo.

Para los geeks que hay por ahí

FPS y frame spacing

Los frames por segundo es una media por definición y por ello no es un indicador óptimo de rendimiento, porque podrías tener medio segundo con 100 FPS y el otro medio con 0 FPS. Tendrías un respetable 50 FPS pero un trompicón inaceptable de 0.5 segundos. Uno mucho mejor es seguir la huella del frame spacing máximo (es decir, el retraso/tiempo necesario para crear nuevos frames), que da una medida en milisegundos del peor rendimiento durante un intervalo fijo.

Herramientas para evaluar el rendimiento

El impacto en el rendimiento puede ser evaluado usando:

Algunos detalles más sobre el funcionamiento interno

FPS throttling

Versiones antiguas de FG (antes de 1.9) se volvían entrecortadas si el frame rate estaba muy alto (bien por encima de la tasa de refresco del monitor) pero las versiones más nuevas parecen tener menos problemas con esto. Sin embargo, dependiendo de la configuración de tu sistemas puedes necesitar empujar el frame rate para prevenir trompicones altos frame rates, pero no es muy probable con la versión actual de FlightGear. Aún así muchos usuarios no tienen suficiente potencia GPU para preocuparse por que los frame rates vayan demasiado alto con las versiones actuales de FlightGear y esos (afortunados) ususarios pueden, hasta cierto punto, empujar los frame rates incrementando/maximizando los ajustes estéticos.

Como afecta FPS a la simulación

Ten en mente que los objetos como los nasal listeners, animaciones y otras partes del simulador corren a la frecuencia de frames de video (lazo principal) y si tu frame rate es muy bajo estos objetos pueden no funcionar tan bien como deberían. Como ejemplo, si tu avión es uno armado con ametralladoras, puedes ver que las ametralladoras cambien la tasa de fuego si tu frame rate es demasiado bajo. Esto será definitivamente el caso del P-51D JSBSim si tus frame rates están por debajo de 30 fps. A medida que más objetos se vayan desacoplando del lazo principal esto tendrá menos relevancia en futuras versiones de FlightGear.

Adicionalmente, cuanto más disminuya el framerate, más sufrirán otras características del simulador. La arquitectura actual de FlightGear es tal que unos tiempos largos de renderizado (bajos framerates) pueden evitar que otras partes del simulador de vuelo, como el piloto automático, tenga suficiente tiempo de CPU para responder correctamente en el contexto de la simulación

Más sobre factores

El framerate de FlightGear está influído por varios factores, incluyendo:

  • Complejidad del escenario (terreno, nubes, árboles, partículas, objetos 3D aleatorios, multijugador/tráfico AI, fingers animados)
  • Complejidad de la cabina (2D vs. 3D)
  • Opciones ambientales (p.e. visibilidad, precipitación)
  • Intervalo de actualización del FDM
  • Escenarios AI
  • Velocidad del avión (paginación de escenarios)
  • Opciones de renderizado
  • Nivel de depuración

Nota de los desarrolladores

Rendimiento y el OpenGL Shading Language (GLSL)

Si trabajar con este artículo no resuelve el problema probablemente estés haciendo frente a un asunto de hardware/driver, lo cual significa que puedes necesitar corregir tus drivers (versión o ajustes).

Sin embargo si, en algún punto el error dejar de ocurrir, eso sugeriría que FG está usando algunos "caminos de código" que no están soportados por tu driver actual. Tenemos un número en aumento de GLSL shaders, mientras que mucho del código FG existente fue realmente solo escrito con un pipeline de renderizado fijo en mente, y de hecho, mucho de él incluso antecede al cambio a OSG, como por ejemplo el GUI (PLIB/PUI).

En resumen, nuestra forma de usar OSG no está particularmente optimizada y estamos haciendo muchas cosas que se sabe que son ineficientes, como tener muchos cambios de estado GL y usar código GL heredado en conjunción con código más moderno. Todos éstos también afectan a la compatibilidad, porque GLSL, a diferencia del código de shader DirectX, no es bytecode, sino compilado sobre la marcha por tu driver. En otras palabras, cada marca GPU tendrá típicamente su propia implementación de compilador GLSL y éstos son conocidos por ser frágiles bajo ciertas circunstancias. Nosotros no tenemos los recursos para comprobar cada shader en todas las principales plataformas de hardware, así que realmente recae en la calidad del feedback del usuario final, por ejemplo usando herramientas como gDebugger o la correspondientes equivalente de ATI/AMD y NVidia.

El cambio a OpenSceneGraph (OSG)

Algunas personas han estado sugiriendo a nuestros desarrolladores de core/shaders cambia a AMD/ATI o incluso a hardware Intel para deshacerse de ciertos problemas. Pero no es tan simple como eso, para ser honesto: FlightGear es una base de código bastante vieja y tampoco es particularmente moderna. Estos días muchas partes están básicamente sin mantenimiento y no han sido tocadas en años, además de contener mucho código heredado.

OSG es mucho más potente de lo que puedas pensar, pero no puede resolver mágicamente todos los problemas que introduce FlightGear. Tenemos una tonelada de características que básicamente vienen de los días pre-OSG, es decir, cuando estábamos usando puramente PLIB y SDL. OSG por sí misma es generalmente sólida como una roca y raramente se encuentran problemas en ella. Para verlo por ti mismo, simplemente corre fgviewer o cualquier de los ejemplos OSG (osgviewer).

Como recientemente se apuntó en otra parte, esos ejemplos OSG incluso soportan tarjetas Intel GMA, a menudo incluso shader hasta algún grado. Pero nunca hemos formalizado realmente la manera en la que el código OpenGL/OSG está escrito/desarrollado para FlightGear, incluyendo efectos y shaders.