- #1 publicado el 15/04/2012 @ 18:44
Editado por Theck el 18/04/2012 @ 08:26
Rendimiento. Donde está ahora y a donde vamos

Cuando llegas a los Estados Unidos de América, llegas con casi nada. Tu historial de crédito, identidad, y documentos no se transfieren desde tu país origen. Incluso con dinero y el idioma, Es desalentador darse cuenta de que incluso algo tan básico como la búsqueda de un lugar para vivir está lleno de obstáculos insalvables.
Por suerte, cuando lo hice llegué a la acogedora hospitalidad de un colega muy generoso. A medida que iba avanzando en la re-adquisición de los mecanismos básicos para participar en la vida moderna, las cuentas bancarias, teléfonos, DNI, mi colega me permitió compartir su casa, y más importante, su viaje hacia el trabajo.
¿Te estarás preguntando qué demonios tiene esto que ver con el rendimiento del NS2?, bien, vamos ha hacer un poco de matemáicas. Hay 2 entradas principales en la función que nos interesa:
A. Un excitable, impresionable fan que está ligerament obsesionado con cada detalle del desarrollo del NS2
B. Un experimentado, inteligente programador que está ligeramente obsesionado con cada detalle del rendimiento del NS2.
La función, por fortuna, es muy simple. A y B, gracias a las circunstancias que brevemente introduje en el principio de este artículo, pasamos mucho tiempo juntos. Se tarda unos 40 minutos para ir de casa en la entrada B de la oficina de Unknown Worlds, y en este tiempo de entrada A se puede hacer un montón de preguntas acerca de cómo funciona el NS2.
Por lo que derivemos la función como sigue::
(A + B)*Tiempo = Artículo autorizado del rendimiento del NS2
Esta función es una que estoy particularmente orgullose. Si hay un tema que saca de quicio a fans, escécpticos, fanboys, críticos, jugadores y odiadores es el rendimiento del Natural Selection 2 Beta.
Imaginemos un ejemplo de Johnny. Johny acaba de terminar algún Mega Juego Temporalmente Actual 5. Este juego va como la seda en su PC. Dejó la configuración gráfica por defecto, y obtuvo 60 frames por segundo en el combate más salvaje.
Ahora Johnny escucha sobre un nuevo juego. Uno que combina dos de sus amores: Destruir basura con un arma grande, y mover esclavos alrededor del campo de batalla como peones. Johnny entra en Natural Selection 2 Beta, y se pega una ostia. Sólo obtiene 30 fotogramas por segundo.
Después de decir que el juego es injugable, comienza a bucear por las opciones gráficas. Después de retocar cada una de las opciones al mínimo valor posible, vuelve a la carga, y obtiene: 30 fotogramas por segundo en combate.
Esto puede que sea una exageración cómica, pero la experiencia de Johnny es cercana a la que mucha gente ha visto y hecho cuando ha jugado al NS2 Beta.
¿Porqué sucede, y qué podemos hacer sobre esto, y que puedo esperar cuando salga la versión final del NS2? Estas son las preguntas que responderemos a continuación.
Natural Selection 1 fue un mod para Half-Life. 'Flayra' Charlie Cleveland pasó dos años en las cloacas del motor del juego Goldsource, combirtiendo el FPS en un genero a medias First Person Shooter / juego de estrategia en tiempo real.
En términos más simples, Flayra cogió las entrañas de Half Life, y repuso por completo nuevos paneles de carrocería, suspensión, pintura y tapizado interior en la parte superior de la misma. Los motores hacen cosas como que las luces brillen, evitan que las personas se caigan a través del suelo, y averiguar donde la gente debería estar en juegos en red multijugador. El juego, en este caso NS1, se sienta en la parte superior del motor, en este caso Goldsource, utilizando sus capacidades para crear el mundo que jugamos a través de la lógica del juego y del arte.
Cuando Flayra decidió hacer NS2, quería permanecer fiel a las raíces de los juegos de modding. Quería hacer posible que un modder futuro utilizara las entrañas de la Selección Natural 2 para crear un juego impresionante, como lo había hecho con el Half Life.
De hecho, NS2 ha hecho que el modding sea casi ridículamente fácil. Tan fácil, que incluso la gente con absoluta ausencia de toda la experiencia de codificación puede cambiar el juego para lograr sus objetivos. Por ejemplo, cuando yo quería crear vuelos a través del mapa en los primeros días de NS2HD, necesitaba un modo espectador rápido. Como el modo espectador existente era lento, tardaba una eternidad para volar en torno a un mapa completo, abrí Spectator.lua en mi directorio NS2 y simplemente cambie un sólo valor de "velocidad". Voila, yo había producido un mod. Mi primera obra de "codificación" de mi vida.
El elemento clave de la historia anterior es Lua. Lua es un lenguaje "alto nivel" de programación. Imagínese un espectro. En un extremo del espectro se encuentra unos y ceros, o código "binario". Este es el lenguaje que habla su PC. Cada cálculo que se hace se hace en binario. En el otro extremo de la escala es la lengua hablada Inglés / Francés / Alemán / o el que sea. Esto es lo que utilizamos para comunicarnos con otros seres humanos, y podemosentender más fácilmente. Los lenguajes de programación actúan como intermediarios entre binario y nuestras lenguas habladas, para que podamos decirles a los ordenadores lo que queremos que hagan.
Un lenguaje de "alto nivel" de programación se encuentra más hacia el borde del Inglés / Francés / Alemán del espectro, mientras que el lenguaje de "bajo nivel" de programación se encuentra más hacia el final del espectro binario.
Lua se encuentra muy lejos, hacia el final del lenguaje hablado del espectro. Es muy fácil de entender, y es por eso que yo tan fácilmente tube la posibilidad de crear mi mod de modo espectador. Natural Selection 2 está completamente escrito en Lua, por lo que la gente lo puede modificar muy, muy facilmente. Se puede modificar con un simple editor de texto como el Bloc de notas, y no necesita ser "compilado" antes de que pueda ser ejecutado. (Más o menos, para compilar un programa significa que se preparan para ser ejecutado, y esto lleva más tiempo).
De hecho, es perfectamente correcto llamar a Natural Selection 2 un mod del motor Spak. Spark es el motor de desarrollo propio salído del cerebro de McGuire 'm4x0r' Max. Spark está escrito en C++, un lenguaje de bajo nivel. NS2 se encuentra en la parte superior de Spark, escrito completamente en Lua de fácil acceso. Es posible merdoead el juego sin tener que hacer frente a C++ del motor.
Hasta el momento, esto suena realmente genial. ¿Por qué no todos los juegos funcionan en lenguajes como Lua, en la parte superior de motores desarrollados en lenguajes de bajo nivel? Volvamos a todo el espectro. El más de un idioma es a finales binario, más rápido se ejecuta en el equipo. Cuanto más es hacia el final del lenguaje hablado, más lento se ejecuta en su ordenador. Esto no quiere decir que Lua sea absolutamente lento, sólo que es relativamente lento en comparación con un lenguaje de bajo nivel, tales como C++. Es relativamente lento porque requiere más esfuerzo para mover todo el camino desde el final del lenguaje hablado del espectro hasta el otro extremo binario del espectro, donde la computadora pueda entender y ejecutar el código del juego.
En resumen, Lua se queda algo de velocidad de ejecución dando a cambio facilidad de acceso, y por lo tanto la facilidad de modding. No sólo la facilidad de modding, sino además facilidad de escritura.
Natural Selection 2 tiene unas lógicas de juego muy muy complejas. Las redes de energía, sistemas de recursos, los árboles de alta tecnología, los lados asimétricos, varias criaturas, las estructuras y capacidades. Un lenguaje accesible, como Lua significa que un equipo como Unknown Worlds relativamente pequeño puede crear la lógica del juego relativamente compleja en un corto espacio de tiempo.
Lua, entonces, trae ventajas y desventajas a la mesa
En este momento, Lua ocupa alrededor del 50% de los ciclos de CPU que pasa a través de NS2 para producir cada fotograma. Esto es, por sí solo, casi en su totalidad responsable de las tasas de refresco limitada que las personas experimentan cuando se juega en la versión beta de NS2. Renderizar en Spark es en realidad muy rápido. Esta es la razón por la que bajar las opciones gráficas, o jugar en una GPU más potente, produce beneficios insignificantes de rendimiento.
Hay dos facetas que están trabajando Unknown Worlds para mejorar el rendimiento. Optimización del código Lua, y haciendo que la ejecución de código Lua sea más rápida.
El primero se lleva a cabo constantemente, a través de ajustes a la forma en que el juego piensa. Por ejemplo, el código original Lua del Hydra llamaba para que el Hydra buscara objetivos varias veces por segundo, independientemente de si había marines cerca o no. Esto provocaba inmensos retrasos en las primeras versiones NS2 (¿alguien dijo 149?) Porque los Hydras constantemente exploraban objetivos.
Hoy en día, Hydras buscan marines próximos sólo ocasionalmente. Sólo cuando un marine se próxima la Hydra comienza a trazar líneas de fuego al objetivo. Esta optimización ha mejorado el rendimiento drásticamente desde los malos viejos tiempos.
De hecho, el código lua del NS2 está plagado de ejemplos de este tipo de optimización. La excelente noticia es que hay un montón de lugares donde este tipo de optimización puede todavía ocurrir. En el caso de la Hydra, tenía sentido atacar el problema de rendimiento antes de que NS2 estuviera completo. El pequeño cabroncete estaba rastrando al juego (lagging), y era poco probable que su mecánica de juego fuera a cambiar de manera significativa antes de la versión final.
Otras piezas de Lua, como el código Onos o del Shade, también pueden incluir oportunidades para la optimización. Por el momento, no tiene sentido para ellos buscan porque ambos pueden cambiar mucho antes de la version final. Cualquier optimización de hecho en el Shade actual se perdería si Charlie decide convertirlo en, no sé, en una cabeza nuclear.
Así que mientra las características del juego se convierte en final, y los cambios masivos de equilibrio cada vez menos frecuentes, se puede esperar más estilos de mejoras de rendimiento como el Hydra.
La otra parte está haciendo que la ejecución del código Lua sea más rápida. Aquí es donde la inmensa potencia intelectual de Max entra en juego. Es el código LUA que hace Natural Selection 2 el cual debe interactura con el código C++ del motor Spark. El proceso de interacción usa el procesador (CPU) de forma intensiva y puede ralentizar el juego.
Lua no fue escrito para juegos sólo en la mente, y algunos mecanismos del lenguaje no necesariamente se prestan para una interacción rápida entre Spark y NS2. ¿Solución? Volver a reescribir las entrañas de Lua para hacerlo correr más rápido.
Eso es donde Max está gastando mucho de su tiempo en este momento. De hecho, un programador que no debe ser nombrado cree que la nueva 'Máquina Virtual Lua' podría reducir el uso de la CPU en Lua NS2 en un 50%. Esto daría una mejora del rendimiento del 25% como mínimo, y seguramente más. Añade a esto las optimizaciones del código de Lua al estilo del 'Hydra' y los números para las mejoras comienzan a parecer muy, muy atractivas.
Sabemos que el framerate es inaceptable. Sabemos que el rendimiento del servidor es inaceptable. Sabemos que las personas con sistemas potentes se esperan 60 fps + en este nivel gráfico. En el lanzamiento, podreis esperar ver eso y más fps. Si no duplicamos la tasa de fotogramas, y duplicado el rendimiento del servidor, no vamos a ser felices.
Este juego no ha estado en producción desde hace cuatro años para ser entregado con este nivel de rendimiento. Hay cosas grandes en las siguientes entregas, no todo saldrá a la vez. Mantened la fe, seguir hablando con nosotros. Ha sido un viaje salvaje y ya podemos ver la línea de meta. Esperamos que nos ayuden a cruzarla!
Extraido del blog NS2HD

