Un programador de juegos es un ingeniero de software , programador o informático que desarrolla principalmente bases de código para videojuegos o software relacionado , como herramientas de desarrollo de juegos . La programación de juegos tiene muchas disciplinas especializadas, todas las cuales se incluyen bajo el término general de "programador de juegos". [1] [2] Un programador de juegos no debe confundirse con un diseñador de juegos , que trabaja en el diseño de juegos . [3]
En los primeros días de los videojuegos (desde principios de los años 1970 hasta mediados de los 1980), un programador de juegos también asumía el trabajo de diseñador y artista . En general, esto se debía a que las capacidades de las primeras computadoras eran tan limitadas que no era necesario contar con personal especializado para cada función. Los conceptos de los juegos eran generalmente livianos y los juegos solo estaban destinados a jugarse durante unos minutos a la vez, pero lo más importante es que el contenido artístico y las variaciones en el juego estaban limitados por la potencia limitada de las computadoras.
Más tarde, a medida que el hardware de arcade especializado y los sistemas domésticos se volvieron más poderosos, los desarrolladores de juegos pudieron desarrollar historias más profundas e incluir características tales como gráficos de alta resolución y a todo color, física , inteligencia artificial avanzada y sonido digital . La tecnología ha avanzado hasta tal punto que los juegos contemporáneos suelen contar con gráficos 3D y vídeos en movimiento completo utilizando recursos desarrollados por artistas gráficos profesionales . Hoy en día, el término despectivo " arte del programador " ha llegado a implicar el tipo de colores brillantes y diseños en bloques que eran típicos de los primeros videojuegos.
El deseo de añadir más profundidad y ventajas a los juegos requirió una división del trabajo . Inicialmente, la producción artística quedó relegada a los artistas de tiempo completo . La siguiente programación de juegos se convirtió en una disciplina separada del diseño de juegos . Ahora, sólo algunos juegos, como el juego de rompecabezas Bejeweled , son lo suficientemente simples como para requerir solo un programador a tiempo completo. A pesar de esta división, sin embargo, la mayoría de los desarrolladores de juegos (artistas, programadores e incluso productores ) tienen algo que decir en el diseño final de los juegos contemporáneos.
Un videojuego contemporáneo puede incluir física avanzada, inteligencia artificial, gráficos 3D, sonido digitalizado, una partitura musical original, estrategia compleja y puede utilizar varios dispositivos de entrada (como ratones , teclados , gamepads y joysticks ) y puede jugarse contra otras personas a través de Internet o a través de una LAN . Cada aspecto del juego puede consumir todo el tiempo de un programador y, en muchos casos, de varios programadores. Algunos programadores pueden especializarse en un área de la programación de juegos , pero muchos están familiarizados con varios aspectos. La cantidad de programadores necesarios para cada función depende en cierta medida de las habilidades de los programadores, pero en su mayoría viene dictada por el tipo de juego que se está desarrollando.
Los programadores de motores de juegos crean el motor base del juego, incluidas las disciplinas de física y gráficos simuladas. [4] Cada vez más, los videojuegos utilizan motores de juegos existentes , ya sean comerciales, de código abierto o gratuitos . A menudo están personalizados para un juego en particular y estos programadores se encargan de estas modificaciones.
El programador de física de un juego se dedica a desarrollar la física que empleará un juego. [5] Normalmente, un juego sólo simulará algunos aspectos de la física del mundo real. Por ejemplo, un juego espacial puede necesitar una gravedad simulada , pero no tendría necesidad de simular la viscosidad del agua .
Dado que los ciclos de procesamiento siempre son un bien escaso, los programadores de física pueden emplear "atajos" que son computacionalmente económicos, pero que se ven y actúan "lo suficientemente bien" para el juego en cuestión. En otros casos, se emplean físicas poco realistas para permitir una jugabilidad más sencilla o para lograr un efecto dramático. A veces, se especifica un subconjunto específico de situaciones y el resultado físico de dichas situaciones se almacena en un registro de algún tipo y nunca se calcula en tiempo de ejecución.
Algunos programadores de física pueden incluso profundizar en las difíciles tareas de la cinemática inversa y otros movimientos atribuidos a los personajes del juego, pero cada vez más estos movimientos se asignan a través de bibliotecas de captura de movimiento para no sobrecargar la CPU con cálculos complejos.
Históricamente, este título solía pertenecer a un programador que desarrollaba algoritmos de blitter especializados y optimizaciones inteligentes para gráficos 2D . Hoy en día, sin embargo, se aplica casi exclusivamente a programadores que se especializan en desarrollar y modificar renderizadores gráficos 3D complejos. Sin embargo, recientemente algunas habilidades de gráficos 2D han vuelto a ser útiles para desarrollar juegos para la nueva generación de teléfonos móviles y consolas de juegos portátiles .
Un programador de gráficos 3D debe tener un conocimiento firme de conceptos matemáticos avanzados, como matemáticas vectoriales y matriciales , cuaterniones y álgebra lineal .
Los programadores cualificados que se especializan en esta área del desarrollo de juegos pueden exigir salarios elevados y suelen ser un bien escaso. [ cita requerida ] Sus habilidades se pueden utilizar para videojuegos en cualquier plataforma .
Un programador de IA desarrolla la lógica del tiempo para simular inteligencia en enemigos y oponentes. [6] Recientemente ha evolucionado hasta convertirse en una disciplina especializada, ya que estas tareas solían ser implementadas por programadores especializados en otras áreas. Un programador de IA puede programar sistemas de búsqueda de caminos , estrategia y tácticas enemigas. Este es uno de los aspectos más desafiantes de la programación de juegos y su sofisticación se está desarrollando rápidamente. Los juegos contemporáneos dedican aproximadamente entre el 10 y el 20 por ciento de su personal de programación a la IA. [7]
Algunos juegos, como los de estrategia como Civilization III o los videojuegos de rol como The Elder Scrolls IV: Oblivion , utilizan la IA en gran medida, mientras que otros, como los juegos de rompecabezas , la utilizan con moderación o no la utilizan en absoluto. Muchos desarrolladores de juegos han creado lenguajes completos que pueden usarse para programar su propia IA para juegos mediante scripts . Estos lenguajes suelen ser menos técnicos que el lenguaje utilizado para implementar el juego y, a menudo, los diseñadores del juego o de niveles los utilizarán para implementar el mundo del juego. Muchos estudios también ponen a disposición de los jugadores los scripts de sus juegos y, a menudo, los desarrolladores de mods externos los utilizan ampliamente .
La tecnología de IA utilizada en la programación de juegos no debe confundirse con la programación e investigación académica de IA . Aunque ambas áreas se toman prestado entre sí, generalmente se consideran disciplinas distintas, aunque existen excepciones. Por ejemplo, el juego de 2001 de Lionhead Studios Black & White presenta un enfoque de IA único para una criatura controlada por el usuario que utiliza el aprendizaje para modelar comportamientos durante el juego. [8] En los últimos años, se han dirigido más esfuerzos a intervenir en campos prometedores de la investigación de la IA y la programación de la IA de los juegos. [9] [10] [11] [12]
No siempre ha sido una disciplina separada, la programación sonora ha sido un pilar de la programación de juegos desde los días del Pong . La mayoría de los juegos utilizan audio y muchos tienen una partitura musical completa. Los juegos de audio de computadora evitan por completo los gráficos y utilizan el sonido como su principal mecanismo de retroalimentación. [13]
Muchos juegos utilizan técnicas avanzadas como el sonido posicional 3D , lo que hace que la programación de audio sea una cuestión no trivial. Con estos juegos, uno o dos programadores pueden dedicar todo su tiempo a construir y perfeccionar el motor de sonido del juego, y los programadores de sonido pueden estar capacitados o tener experiencia formal en procesamiento de señales digitales .
Las herramientas de secuencias de comandos suelen ser creadas o mantenidas por programadores de sonido para que las utilicen los diseñadores de sonido . Estas herramientas permiten a los diseñadores asociar sonidos con personajes, acciones, objetos y eventos, al mismo tiempo que asignan música o sonidos atmosféricos para entornos de juego (niveles o áreas) y establecen variables ambientales como la reverberación.
Aunque todos los programadores contribuyen al contenido y la experiencia que proporciona un juego, un programador de juegos se centra más en la estrategia de un juego, la implementación de la mecánica y la lógica del juego y la "sensación" de un juego. Por lo general, esta no es una disciplina separada, ya que lo que hace este programador suele diferir de un juego a otro e inevitablemente estará involucrado en áreas más especializadas del desarrollo del juego, como los gráficos o el sonido.
Este programador puede implementar tablas de estrategia, modificar el código de entrada o ajustar otros factores que alteran el juego. Sin embargo, muchos de estos aspectos pueden ser modificados por programadores que se especializan en estas áreas (por ejemplo, los programadores de IA pueden implementar tablas de estrategias).
En los primeros videojuegos, los programadores de juegos escribían código para crear todo el contenido del juego; si se suponía que el jugador debía disparar a un enemigo en particular y se suponía que apareciera una tecla roja junto con algo de texto en la pantalla, entonces esta funcionalidad era todo escrito como parte del programa principal en C o lenguaje ensamblador por un programador de juegos.
Hoy en día, es más frecuente que el motor central del juego esté separado de la programación del juego. Esto tiene varias ventajas de desarrollo. El motor del juego se ocupa de la representación de gráficos, el sonido, la física, etc., mientras que el lenguaje de programación se ocupa de aspectos como eventos cinematográficos, comportamiento del enemigo y objetivos del juego. Los proyectos de juegos grandes pueden tener un equipo de programadores para implementar este tipo de contenido de juego.
Los guionistas suelen ser también diseñadores de juegos. A menudo es más fácil encontrar un diseñador de juegos calificado al que se le pueda enseñar un lenguaje de script en lugar de encontrar un diseñador de juegos calificado que domine C++ .
Este programador se especializa en programar interfaces de usuario (UI) para juegos. [14] Aunque algunos juegos tienen interfaces de usuario personalizadas, es más probable que este programador desarrolle una biblioteca que pueda usarse en múltiples proyectos. La mayoría de las IU parecen 2D, aunque las IU contemporáneas suelen utilizar la misma tecnología 3D que el resto del juego, por lo que algunos conocimientos de matemáticas y sistemas 3D son útiles para esta función. Los sistemas de interfaz de usuario avanzados pueden permitir secuencias de comandos y efectos especiales, como transparencia, animación o efectos de partículas para los controles.
La programación de entradas, aunque normalmente no es un puesto de trabajo, ni siquiera un puesto de tiempo completo en un proyecto de juego en particular, sigue siendo una tarea importante. Este programador escribe el código especificando cómo afectan al juego los dispositivos de entrada como el teclado , el ratón o el joystick. Estas rutinas generalmente se desarrollan temprano en la producción y se modifican continuamente durante el desarrollo. Normalmente, un programador no necesita dedicar todo su tiempo al desarrollo de estos sistemas. Un juego controlado por movimiento en tiempo real que utiliza dispositivos como el mando de Wii o Kinect puede necesitar un sistema de entrada muy complejo y de baja latencia, mientras que los requisitos de HID de un juego de estrategia por turnos controlado por un ratón como Heroes of Might and Magic son significativamente más sencillo de implementar.
Este programador escribe código que permite a los jugadores competir o cooperar, conectados a través de una LAN o Internet (o en casos más raros, conectados directamente a través de un módem ). [15] Los programadores que implementan estas características del juego pueden dedicar todo su tiempo a esta función, que a menudo se considera una de las más desafiantes desde el punto de vista técnico. La latencia de la red , la compresión de paquetes y las conexiones caídas o interrumpidas son sólo algunas de las preocupaciones que se deben considerar. Aunque las funciones multijugador pueden consumir todo el cronograma de producción y requieren que los otros sistemas del motor se diseñen teniendo en cuenta la creación de redes, los sistemas de redes a menudo se posponen hasta los últimos meses de desarrollo, lo que agrega dificultades adicionales a esta función. A algunos títulos se les han recortado las funciones en línea (a menudo consideradas de menor prioridad que la jugabilidad principal) a meses de su lanzamiento debido a preocupaciones como la falta de gestión, previsión del diseño o escalabilidad. Virtua Fighter 5 para PS3 es un ejemplo notable de esta tendencia. [dieciséis]
El programador de herramientas [17] puede ayudar en el desarrollo de un juego escribiendo herramientas personalizadas para él. Las herramientas de desarrollo de juegos suelen contener funciones como compilación de guiones, importación o conversión de recursos artísticos y edición de niveles. Si bien algunas herramientas utilizadas pueden ser productos COTS , como un IDE o un editor de gráficos, los programadores de herramientas crean herramientas con funciones específicas adaptadas a un juego específico que no están disponibles en productos comerciales. Por ejemplo, un desarrollador de juegos de aventuras podría necesitar un editor para ramificar los diálogos de la historia , y un desarrollador de juegos deportivos podría usar un editor propietario para administrar las estadísticas de los jugadores y del equipo. Estas herramientas normalmente no están disponibles para los consumidores que compran el juego.
Portar un juego de una plataforma a otra siempre ha sido una actividad importante para los desarrolladores de juegos. Algunos programadores se especializan en esta actividad, convirtiendo código de un sistema operativo para que funcione en otro. En ocasiones, el programador es el responsable de hacer que la aplicación funcione no solo para un sistema operativo, sino en una variedad de dispositivos, como por ejemplo teléfonos móviles . Sin embargo, a menudo, la "portación" puede implicar reescribir el juego completo desde cero, ya que los lenguajes , herramientas o hardware propietarios hacen que la conversión del código fuente sea un esfuerzo infructuoso.
Este programador debe estar familiarizado con los sistemas operativos y lenguajes originales y de destino (por ejemplo, convertir un juego escrito originalmente en C++ a Java ), convertir recursos, como ilustraciones y sonidos, o reescribir código para teléfonos con poca memoria. Es posible que este programador también tenga que evitar implementaciones de lenguajes con errores, algunas con poca documentación, refactorizar el código , supervisar múltiples ramas de código, reescribir el código a escala para una amplia variedad de tamaños de pantalla e implementar pautas especiales para el operador. Es posible que también tengan que corregir errores que no se descubrieron en la versión original de un juego.
Es más probable que el programador de tecnología se encuentre en estudios de desarrollo más grandes con departamentos específicos dedicados exclusivamente a I+D . A diferencia de otros miembros del equipo de programación, el programador de tecnología generalmente no está vinculado a un proyecto o tipo de desarrollo específico durante un período de tiempo prolongado y, por lo general, informará directamente a un CTO o jefe de departamento en lugar de a un productor de juegos. Como lo indica el título del trabajo, este puesto es extremadamente exigente desde una perspectiva técnica y requiere un conocimiento profundo del hardware de la plataforma de destino. Las tareas cubren una amplia gama de temas, incluida la implementación práctica de algoritmos descritos en artículos de investigación, optimización de ensamblajes de muy bajo nivel y la capacidad de resolver problemas desafiantes relacionados con los requisitos de memoria y problemas de almacenamiento en caché durante las últimas etapas de un proyecto. Existe una considerable cantidad de cruces entre este puesto y algunos de los demás, en particular el de programador gráfico.
En equipos más pequeños, uno o más programadores a menudo serán descritos como "generalistas" que asumirán otras funciones según sea necesario. Los generalistas a menudo se dedican a la tarea de rastrear errores y determinar qué experiencia en subsistemas se requiere para solucionarlos.
El programador principal es, en última instancia, el responsable de toda la programación del juego. Su trabajo es asegurarse de que los distintos submódulos del juego se implementen correctamente y realizar un seguimiento del desarrollo desde el punto de vista de la programación. Una persona en este rol generalmente pasa de otros aspectos de la programación de juegos a este rol después de varios años de experiencia. A pesar del título, esta persona suele tener menos tiempo para escribir código que otros programadores del proyecto, ya que deben asistir a reuniones e interactuar con el cliente u otros líderes del juego. Sin embargo, todavía se espera que el programador principal programe al menos parte del tiempo y también se espera que tenga conocimientos de la mayoría de las áreas técnicas del juego. A menudo existen puntos en común considerables en el papel de director técnico y programador principal, de modo que los puestos suelen estar cubiertos por una sola persona.
Los programadores de juegos pueden especializarse en una plataforma u otra, como Wii U o Windows . Entonces, además de especializarse en una disciplina de programación de juegos, un programador también puede especializarse en el desarrollo en una determinada plataforma. Por lo tanto, el título de un programador de juegos podría ser "Programador de gráficos 3D de PlayStation 3". Algunas disciplinas, como la IA, son transferibles a varias plataformas y no necesitan adaptarse a un sistema u otro. Además, los principios generales de desarrollo de juegos, como los conceptos de programación de gráficos 3D, la ingeniería de sonido y el diseño de la interfaz de usuario, son transferibles entre plataformas.
En particular, hay muchos programadores de juegos sin educación formal en el tema, que comenzaron como aficionados y programaron mucho por su cuenta, por diversión, y finalmente tuvieron éxito gracias a su aptitud y experiencia local. Sin embargo, la mayoría de las ofertas de trabajo para programadores de juegos especifican una licenciatura (en matemáticas, física, informática "o experiencia equivalente").
Cada vez más, las universidades están empezando a ofrecer cursos y títulos en programación de juegos. Cualquiera de estos títulos tiene una superposición considerable con los títulos en ciencias de la computación e ingeniería de software . [ cita necesaria ]
Los salarios de los programadores de juegos varían de una empresa a otra y de un país a otro. Sin embargo, en general, la remuneración por la programación de juegos es aproximadamente la misma para trabajos comparables en el sector empresarial. Esto a pesar de que la programación de juegos es una de las más difíciles de cualquier tipo y generalmente requiere más horas que la programación convencional.
Los resultados de una encuesta realizada en 2010 en los Estados Unidos indican que el salario promedio de un programador de juegos es de 95.300 dólares anuales. Los programadores menos experimentados, con menos de 3 años de experiencia, ganan un salario anual promedio de más de 72.000 dólares. Los programadores más experimentados, con más de 6 años de experiencia, ganan un salario anual promedio de más de 124.000 dólares. [18]
Generalmente, los programadores principales son los mejor remunerados, aunque algunos programadores de gráficos 3D pueden desafiar o superar sus salarios. Según la misma encuesta anterior, los programadores líderes ganan en promedio $127,900 al año. [19]
Aunque las ventas de videojuegos rivalizan con otras formas de entretenimiento como las películas , la industria de los videojuegos es extremadamente volátil. Los programadores de juegos no están a salvo de esta inestabilidad, ya que sus empleadores experimentan dificultades financieras.
Los desarrolladores externos, el tipo más común de desarrolladores de videojuegos , dependen de una afluencia constante de fondos del editor del videojuego . Si no se cumple un hito o una fecha límite (o por una serie de otras razones, como la cancelación del juego), los fondos pueden quedarse cortos y el desarrollador puede verse obligado a despedir empleados o declararse en quiebra y cerrar el negocio. Los programadores de juegos que trabajan para grandes editores están de alguna manera aislados de estas circunstancias, pero incluso los grandes editores de juegos pueden quebrar (como cuando Hasbro Interactive fue vendido a Infogrames y varios proyectos fueron cancelados; o cuando The 3DO Company quebró en 2003 y cesó todas las operaciones). Los currículums de algunos programadores de juegos consisten en breves períodos que no duran más de un año, mientras se ven obligados a saltar de un estudio condenado a otro. [20] Por eso algunos prefieren consultar y, por lo tanto, están algo protegidos de los efectos del destino de cada estudio.
La mayoría de los juegos de computadora y videojuegos comerciales están escritos principalmente en C++ , C y algunos lenguajes ensambladores . Muchos juegos, especialmente aquellos con mecánicas de juego interactivas complejas, exigen al hardware al límite. Como tal, se requiere un código altamente optimizado para que estos juegos se ejecuten a una velocidad de fotogramas aceptable. Debido a esto, el código compilado generalmente se usa para componentes críticos para el rendimiento, como la representación visual y los cálculos físicos. Casi todos los juegos de PC también utilizan DirectX , las API OpenGL o alguna biblioteca contenedora para interactuar con dispositivos de hardware.
También se utilizan varios lenguajes de script , como Ruby , Lua y Python , para la generación de contenidos como juegos y especialmente IA. Los scripts generalmente se analizan en el momento de la carga (cuando el juego o nivel se carga en la memoria principal) y luego se ejecutan en el tiempo de ejecución (a través de ramas lógicas u otros mecanismos similares). Generalmente no son ejecutados por un intérprete , lo que resultaría en una ejecución mucho más lenta. Los scripts tienden a usarse de forma selectiva, a menudo para IA y lógica de juego de alto nivel. Algunos juegos están diseñados con una gran dependencia de los scripts y algunos scripts se compilan en formato binario antes de la ejecución del juego. En la fase de optimización del desarrollo, algunas funciones del script suelen reescribirse en un lenguaje compilado.
Java se utiliza para muchos juegos basados en navegadores web porque es multiplataforma , generalmente no requiere instalación por parte del usuario y presenta menos riesgos de seguridad , en comparación con un programa ejecutable descargado. Java también es un lenguaje popular para juegos basados en teléfonos móviles . Adobe Flash , que utiliza el lenguaje ActionScript , y JavaScript son herramientas de desarrollo populares para juegos basados en navegador.
A medida que los juegos han crecido en tamaño y complejidad, el middleware se está volviendo cada vez más popular dentro de la industria. El middleware proporciona una funcionalidad de nivel mayor y superior y conjuntos de funciones más amplias que las API estándar de nivel inferior , como DirectX y OpenGL , como la animación esquelética . Además de proporcionar tecnologías más complejas, algunos middleware también hacen intentos razonables de ser independientes de la plataforma , lo que facilita mucho las conversiones comunes de, por ejemplo, Microsoft Windows a PS4 . Esencialmente, el middleware tiene como objetivo eliminar la mayor cantidad posible de redundancia en el ciclo de desarrollo (por ejemplo, escribir nuevos sistemas de animación para cada juego que produce un estudio), permitiendo a los programadores centrarse en contenido nuevo.
Otras herramientas también son esenciales para los desarrolladores de juegos: los paquetes 2D y 3D (por ejemplo Blender , GIMP , Photoshop , Maya o 3D Studio Max ) permiten a los programadores ver y modificar recursos generados por artistas u otro personal de producción. Los sistemas de control de código fuente mantienen el código fuente seguro y optimizan la fusión. Los IDE con depuradores (como Visual Studio ) hacen que escribir código y rastrear errores sea una experiencia menos dolorosa.