Lectura: Los desarrolladores y las consolas.
Publicado: Mar Ene 01, 2013 12:37 pm
Este texto es una traducción y recopilación de la siguiente fuente: Link, donde los desarrolladores de juegos comentan sobre trabajar en cada consola, un aspecto poco conocido que no suele ser revelado normalmente. Cada consola tiene sus mañas tanto de software como de hardware.
Playstation 1: Todo es simple y al grano. Con unos pocos años de dedicación, una persona podría comprender todo el PS1 hasta el nivel de bit. Comparada a lo que se podía hacer en los PC de la época, la PS1 era asombrosa. Pero en cada paso del camino uno decía "En serio?, debo hacerlo de esa manera? Joder. Ok...Dame un par de semanas." Efectivamente no tenia un debugger, ejecutabas tu build y veías que pasaba.
N64: Todo mas o menos funcionaba. En la mayor parte, era rápida y flexible, pero tu nunca sentías que la utilizabas bien. Pero eso estaba bien debido a que tus esfuerzos a medias usualmente lucían mejor que la mayoría de los juegos del PS1. Cada megabyte en el cartucho costaba mucho dinero. La N64 tenia un debugger, pero este a veces tenia bugs completamente aleatorios.
Dreamcast: El CPU era extraño (Hitachi SH-4). El GPU era extraño (un predecesor del PowerVR usado en los modernos iPhones). Habia un montón de características que no sabias como usar. Alguna vez Microsoft estuvo por mencionar en configurarla como una caja estilo-PC con DirectX, pero eso no se dio. De todas formas no hubiese funcionado, aunque parecía que iba a ser cool. Pero hombre, el PS2 va a ser mucho mejor!
PS2: Te entregan una pila de 10 pulgadas de grosor de manuales escritos por ingenieros de hardware japoneses. La primera vez que lees, nada tiene sentido del todo. La segunda vez que lees, el 3er libro tiene un poquito mas de sentido debido a lo que leíste en el 8vo libro. La maquina tiene 10 procesadores diferentes (IOP, SPU1&2, MDEC, R5900, VU0&1, GIF, VIF, GS) y seis diferentes espacios de memoria (IOP, SPU, CPU, GS, VU0&1) que todos funcionan de formas completamente diferentes. Hay muchas cosas asombrosas que puedes hacer, pero todo requiere volteretas a través de hojillas invisibles de segfault. Lograr que el primer triangulo aparezca en pantalla le tomo a algunos equipos mas de un mes debido a que involucra routear comandos a través de R5900>VIF>VU1>GIF>GS sin feedback sobre lo que estabas haciendo mal hasta que tengas cada paso hecho de manera correcta. Si estabas dispuesto a retorcer tu juego para que se ajustara a la maquina, podías obtener resultados asombrosos. Habia un debugger para el CPU principal (R5900). Trabajaba bien, para el resto de los procesadores solo tenias que escribir codigo sin bugs.
GameCube: No trabaje mucho con el GC. Parecía muy flexible, Como si pudieras hacer cualquier cosa, pero nada iba a ser terriblemente bueno o malo. El GPU no era muy rápido, sus características fueron trágicamente poco utilizadas comparadas con la Xbox. El CPU tenia RAM de latencia increíblemente baja. Cualquier estructura de datos desordenada o complicada que pudieras imaginar estaría bien (en teoria). Simplemente lo creabas, pero mas de la mitad de la RAM estaba dividida detrás de una barrera de latencia asombrosamente alta. Así que debías organizar manualmente tu data en activa vs bulto. Tenia una SIMD a medio camino que podía hacer 2 floats a la vez en lugar de 1 o 4.
Wii: Wtf RAM. En serio, era difícil crear assets que no sobrepasaran el presupuesto de memoria, gaste un montón de noches haciendo blockfiles que no engordaran para cada nivel pero que tuvieran lo que los diseñadores querían. Los Artistas y Diseñadores te odian cuando ves su trabajo y les pides que compriman todo hasta un milímetro de su vida.
Otra opinión del Wii: Tiene una versión adornada de OpenGL. Corre el hardware gráfico a 4x del Gamecube. Nada especial para ser franco.
Otra opinión del Wii: Pero no importaba que tan bueno fuera tu renderizado...todo se ponía borroso dos veces antes de llegar al televisor, y muchos detalles se perdían. (Scaling de la salida Wii desde el Framebuffer y luego scaling de TV a resolucion HD). No es una plataforma agradable para trabajar, Pipeline gráfica fácilmente crasheable mientras todos los demás se divierten con shaders!.
Otra opinión del Wii: Mi trabajo con el Wii fue una pesadilla, que RAM tan pero, tan pero, tan pequeña para una consola.
PSP: Tampoco hice mucho aca. Se la jugaba como una PS2 rebajada, pero por dentro parecía mas bien una PS1 abultada. Intentaron agregarle algunas partes para hacerla menos dolorosa al trabajarla, pero estas partes se sentían torpes comparadas con el diseño original. El tener el rasterizador del PS2 a full velocidad significaba que no debías preocuparte sobre pixeles en blending.
DS: Extraña. El DS es como dos consolas en una debido a que parcialmente es un GBA, y el GBA es efectivamente un SNES. Así que habían convenciones viejas que ya no se ven mas, como uso hardcore de paletas. Y no VRAM, siempre se nos agotaba la VRAM.
Otra opinión del DS: "Y entonces para que es la otra pantalla?" No hay mucha diversión...el hardware 3d mas loco de una consola (parece mas bien un motor de sprites mejorado que verdadero hardware 3d). Siempre deseaba que estuviésemos haciendo un buen juego 2d en ves de un juego 3d feo.
3DS: "Es tan potente! Oh espera, olvídalo. Que disfrutes intentando sacarle buenos gráficos mientras mantienes soporte del efecto 3d".
Xbox: Huele como a PC. Habían unos trucos que podias aplicar para exprimir la maquina. Pero en la mayor parte era una suficiente bendición el tener una especificación consistente de PC para desarrollar. El debugger funcionaba! realmente funcionaba! PIX fue entregado a mano por ángeles.
Xbox360: Aparte de las cosas Big-Endian, realmente huele a PC, hasta que profundizas. El GPU es genial --excepto que la EDRAM limitada significa que tienes que dibujar dos veces la escena para cumplir con el requerimiento de anti-aliasing? WTF! santa madre hay un montón de registros SIMD! 4 floats x 128 registros x 6 bancos de registros = 12K de registros! te dan DirectX9 y todo funciona recién sacado de caja. Pero si excavas mas, encontraras mejores formas de hacer las cosas. excavas mas y mas. Eventualmente tu código no se ve nada como PC-DX9 y trabaja mucho mejor que antes! el debugger es genial! PIX! PIX! te beso!
Otra opinión del X360: Preciosa, tan agradable, DX9++, tiene el framework familiar del DX9 con capacidades nuevas geniales. El hardware scaler de 720p a 1080p es realmente bueno, oh y PIX, use Windows PIX por un tiempo y era genial, pero el Xbox PIX? mi dios. Es fenomenal.
PS3: Una caja de 95 libras se muestra en tu escritorio con una impresión de las instrucciones de 24 pasos para encenderla por primera vez. Todos lo intentan, la mayoría de la gente no lo logra. Eventualmente un sujeto llega y configura las maquinas de todos. Solo hay un CPU. Pareciera que puede hacer de todo, pero no puede. Los SPU parece que deberían ser geniales pero no para cualquier cosa que tu o que los demás estén haciendo. El debugger del CPU trabaja bien, no hay debugger para los SPU. Al principio no había nada como PIX, eventualmente algunos desarrolladores 1er party de Sony se hartaron y crearon su debugger estilo PIX para el GPU. El GPU es muy decepcionante...la mayoría de la gente se enfoca en trabajar con el CPU, pero no puede con la carga. Unos pocos excavan en los SPU y santo dios, son rápidos! Desafortunadamente ellos se dan cuenta que los SPU tienen que ser dedicados casi a tiempo completo para compensar las debilidades del GPU.
Android: Lento. Muy lento para lo mayoría de lo que quieras crear. Tienes que escribir un montón de código para manejar diferentes resoluciones. No tiene mucho soporte SDK mas alla de lo básico, pero soportaba todo lo que nuestro equipo quería sacar aquella vez.
Otra opinión de Android: El asunto con Android (de mi experiencia) es que el 90% de los dispositivos alla afuera apestan. Programar para lo ultimo te dará el rendimiento que buscas, pero no para el publico.
PC: Mucha mas abstracción, así que mayormente lidias con APIs del sistema operativo. Y tienes SSE para cosas SIMD.
Otra opinión del PC: No hay mucha comparación, el codigo entre consola y pc es casi idéntico, con un juego como Prototype ellos agarran el código, lo reconstruyen para pc, toman las mismas texturas y modelos que se usaron en Xbox y listo. No hay mas optimización que eso, o es "rearma todo y lanzalo" o "entonces no lo lances". Tienes un equipo que toma el motor gráfico, lo hace funcionar en DX9/10/11 dependiendo de cuanto esfuerzo le apliquen, lo prueban en ciertos sistemas con ciertos drivers y lo lanzan. Tienes problemas con lentitud de fps, bugs serios y mal soporte porque todo eso suele estar relacionado a algo especifico y ridículo con las computadoras de la gente. Problemas que son muy difíciles de rastrear y que pueden tomar semanas para estabilizar. Especialmente para un estudio que no hace muchos lanzamientos en Windows. Cualquier cosa por encima y mas alla de eso depende de cuanto dinero quiere gastar la casa productora en el port de PC, y de cuanto tiempo tienen para hacerlo comparado con Xbox360/PS3, y aun así gastar mas dinero no puede y no podrá resolver todos esos problemas.
Playstation 1: Todo es simple y al grano. Con unos pocos años de dedicación, una persona podría comprender todo el PS1 hasta el nivel de bit. Comparada a lo que se podía hacer en los PC de la época, la PS1 era asombrosa. Pero en cada paso del camino uno decía "En serio?, debo hacerlo de esa manera? Joder. Ok...Dame un par de semanas." Efectivamente no tenia un debugger, ejecutabas tu build y veías que pasaba.
N64: Todo mas o menos funcionaba. En la mayor parte, era rápida y flexible, pero tu nunca sentías que la utilizabas bien. Pero eso estaba bien debido a que tus esfuerzos a medias usualmente lucían mejor que la mayoría de los juegos del PS1. Cada megabyte en el cartucho costaba mucho dinero. La N64 tenia un debugger, pero este a veces tenia bugs completamente aleatorios.
Dreamcast: El CPU era extraño (Hitachi SH-4). El GPU era extraño (un predecesor del PowerVR usado en los modernos iPhones). Habia un montón de características que no sabias como usar. Alguna vez Microsoft estuvo por mencionar en configurarla como una caja estilo-PC con DirectX, pero eso no se dio. De todas formas no hubiese funcionado, aunque parecía que iba a ser cool. Pero hombre, el PS2 va a ser mucho mejor!
PS2: Te entregan una pila de 10 pulgadas de grosor de manuales escritos por ingenieros de hardware japoneses. La primera vez que lees, nada tiene sentido del todo. La segunda vez que lees, el 3er libro tiene un poquito mas de sentido debido a lo que leíste en el 8vo libro. La maquina tiene 10 procesadores diferentes (IOP, SPU1&2, MDEC, R5900, VU0&1, GIF, VIF, GS) y seis diferentes espacios de memoria (IOP, SPU, CPU, GS, VU0&1) que todos funcionan de formas completamente diferentes. Hay muchas cosas asombrosas que puedes hacer, pero todo requiere volteretas a través de hojillas invisibles de segfault. Lograr que el primer triangulo aparezca en pantalla le tomo a algunos equipos mas de un mes debido a que involucra routear comandos a través de R5900>VIF>VU1>GIF>GS sin feedback sobre lo que estabas haciendo mal hasta que tengas cada paso hecho de manera correcta. Si estabas dispuesto a retorcer tu juego para que se ajustara a la maquina, podías obtener resultados asombrosos. Habia un debugger para el CPU principal (R5900). Trabajaba bien, para el resto de los procesadores solo tenias que escribir codigo sin bugs.
GameCube: No trabaje mucho con el GC. Parecía muy flexible, Como si pudieras hacer cualquier cosa, pero nada iba a ser terriblemente bueno o malo. El GPU no era muy rápido, sus características fueron trágicamente poco utilizadas comparadas con la Xbox. El CPU tenia RAM de latencia increíblemente baja. Cualquier estructura de datos desordenada o complicada que pudieras imaginar estaría bien (en teoria). Simplemente lo creabas, pero mas de la mitad de la RAM estaba dividida detrás de una barrera de latencia asombrosamente alta. Así que debías organizar manualmente tu data en activa vs bulto. Tenia una SIMD a medio camino que podía hacer 2 floats a la vez en lugar de 1 o 4.
Wii: Wtf RAM. En serio, era difícil crear assets que no sobrepasaran el presupuesto de memoria, gaste un montón de noches haciendo blockfiles que no engordaran para cada nivel pero que tuvieran lo que los diseñadores querían. Los Artistas y Diseñadores te odian cuando ves su trabajo y les pides que compriman todo hasta un milímetro de su vida.
Otra opinión del Wii: Tiene una versión adornada de OpenGL. Corre el hardware gráfico a 4x del Gamecube. Nada especial para ser franco.
Otra opinión del Wii: Pero no importaba que tan bueno fuera tu renderizado...todo se ponía borroso dos veces antes de llegar al televisor, y muchos detalles se perdían. (Scaling de la salida Wii desde el Framebuffer y luego scaling de TV a resolucion HD). No es una plataforma agradable para trabajar, Pipeline gráfica fácilmente crasheable mientras todos los demás se divierten con shaders!.
Otra opinión del Wii: Mi trabajo con el Wii fue una pesadilla, que RAM tan pero, tan pero, tan pequeña para una consola.
PSP: Tampoco hice mucho aca. Se la jugaba como una PS2 rebajada, pero por dentro parecía mas bien una PS1 abultada. Intentaron agregarle algunas partes para hacerla menos dolorosa al trabajarla, pero estas partes se sentían torpes comparadas con el diseño original. El tener el rasterizador del PS2 a full velocidad significaba que no debías preocuparte sobre pixeles en blending.
DS: Extraña. El DS es como dos consolas en una debido a que parcialmente es un GBA, y el GBA es efectivamente un SNES. Así que habían convenciones viejas que ya no se ven mas, como uso hardcore de paletas. Y no VRAM, siempre se nos agotaba la VRAM.
Otra opinión del DS: "Y entonces para que es la otra pantalla?" No hay mucha diversión...el hardware 3d mas loco de una consola (parece mas bien un motor de sprites mejorado que verdadero hardware 3d). Siempre deseaba que estuviésemos haciendo un buen juego 2d en ves de un juego 3d feo.
3DS: "Es tan potente! Oh espera, olvídalo. Que disfrutes intentando sacarle buenos gráficos mientras mantienes soporte del efecto 3d".
Xbox: Huele como a PC. Habían unos trucos que podias aplicar para exprimir la maquina. Pero en la mayor parte era una suficiente bendición el tener una especificación consistente de PC para desarrollar. El debugger funcionaba! realmente funcionaba! PIX fue entregado a mano por ángeles.
Xbox360: Aparte de las cosas Big-Endian, realmente huele a PC, hasta que profundizas. El GPU es genial --excepto que la EDRAM limitada significa que tienes que dibujar dos veces la escena para cumplir con el requerimiento de anti-aliasing? WTF! santa madre hay un montón de registros SIMD! 4 floats x 128 registros x 6 bancos de registros = 12K de registros! te dan DirectX9 y todo funciona recién sacado de caja. Pero si excavas mas, encontraras mejores formas de hacer las cosas. excavas mas y mas. Eventualmente tu código no se ve nada como PC-DX9 y trabaja mucho mejor que antes! el debugger es genial! PIX! PIX! te beso!
Otra opinión del X360: Preciosa, tan agradable, DX9++, tiene el framework familiar del DX9 con capacidades nuevas geniales. El hardware scaler de 720p a 1080p es realmente bueno, oh y PIX, use Windows PIX por un tiempo y era genial, pero el Xbox PIX? mi dios. Es fenomenal.
PS3: Una caja de 95 libras se muestra en tu escritorio con una impresión de las instrucciones de 24 pasos para encenderla por primera vez. Todos lo intentan, la mayoría de la gente no lo logra. Eventualmente un sujeto llega y configura las maquinas de todos. Solo hay un CPU. Pareciera que puede hacer de todo, pero no puede. Los SPU parece que deberían ser geniales pero no para cualquier cosa que tu o que los demás estén haciendo. El debugger del CPU trabaja bien, no hay debugger para los SPU. Al principio no había nada como PIX, eventualmente algunos desarrolladores 1er party de Sony se hartaron y crearon su debugger estilo PIX para el GPU. El GPU es muy decepcionante...la mayoría de la gente se enfoca en trabajar con el CPU, pero no puede con la carga. Unos pocos excavan en los SPU y santo dios, son rápidos! Desafortunadamente ellos se dan cuenta que los SPU tienen que ser dedicados casi a tiempo completo para compensar las debilidades del GPU.
Android: Lento. Muy lento para lo mayoría de lo que quieras crear. Tienes que escribir un montón de código para manejar diferentes resoluciones. No tiene mucho soporte SDK mas alla de lo básico, pero soportaba todo lo que nuestro equipo quería sacar aquella vez.
Otra opinión de Android: El asunto con Android (de mi experiencia) es que el 90% de los dispositivos alla afuera apestan. Programar para lo ultimo te dará el rendimiento que buscas, pero no para el publico.
PC: Mucha mas abstracción, así que mayormente lidias con APIs del sistema operativo. Y tienes SSE para cosas SIMD.
Otra opinión del PC: No hay mucha comparación, el codigo entre consola y pc es casi idéntico, con un juego como Prototype ellos agarran el código, lo reconstruyen para pc, toman las mismas texturas y modelos que se usaron en Xbox y listo. No hay mas optimización que eso, o es "rearma todo y lanzalo" o "entonces no lo lances". Tienes un equipo que toma el motor gráfico, lo hace funcionar en DX9/10/11 dependiendo de cuanto esfuerzo le apliquen, lo prueban en ciertos sistemas con ciertos drivers y lo lanzan. Tienes problemas con lentitud de fps, bugs serios y mal soporte porque todo eso suele estar relacionado a algo especifico y ridículo con las computadoras de la gente. Problemas que son muy difíciles de rastrear y que pueden tomar semanas para estabilizar. Especialmente para un estudio que no hace muchos lanzamientos en Windows. Cualquier cosa por encima y mas alla de eso depende de cuanto dinero quiere gastar la casa productora en el port de PC, y de cuanto tiempo tienen para hacerlo comparado con Xbox360/PS3, y aun así gastar mas dinero no puede y no podrá resolver todos esos problemas.