Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda con los estudios.

Iniciado por Wealk, 12 de Marzo de 2012, 09:54:54 PM

« anterior - próximo »

Wealk

Buenas. Actualmente me encuentro realmente desesperado para obtener información referente a los estudios para entrar en el mundo del desarrollo de videojuegos.  Puede que suene extraño, y un tanto caótico, pero la verdad es que no me gustaría encargarme totalmente de todo lo referente al desarrollo del juego (obviamente) pero si que me gustaría entenderlo todo, y aportar cosas. Lo que más me llama del mundo de los videjuegos, es la parte del diseño (trabajo con Maya, Photoshop y también toco algo de After Effects, aunque no tenga nada que ver). Pero también me gustaría saber de programación, es decir, en pocas palabras, me gustaría poder crear un juego de la nada yo solo. No lo haré dado que es imposible, pero me gustaría saber hacerlo. Esto es la introducción. Ahora viene la pregunta del titulo.
¿Que estudiar para meterte en el mundo de los juegos? Yo vivo en España, concretamente en Mallorca, una islita a la derecha en los mapas, al lado de Barcelona. El caso es que aquí no hay absolutamente nada referente a los videojuegos, y la carrera de informática tiene fama de ser penosa. Hay cursos que reparten titulaciones de edexcel, HND, pero la verdad es que por el precio que son resulta patético los estudios que te dan... Y no se que puedo hacer para salir de aquí. El caso es que unicamente dispongo del Bachillerato... ¿Que recomendáis hacer?
Gracias por la ayuda.
Y perdón si esto no es adecuado para este foro, pero realmente necesito ayuda.

Gallo

Si quieres entenderlo todo, yo estudiaria ingenieria. El que lo abarca todo un poco es el programador, es decir, yo como programador la verdad es que no he practicado ni tengo talento para el modelado 3D, ni la creación de concepts o la composición de música, pero el resultado de lo que hace el modelador, el músico y el artista probablemente lo integre un programador, con lo cual debe saber de que se compone un modelo, como se anima, como se relacionan huesos con vertices,  como se reproduce el sonido, como se pasa de un frame a otro para crear la animación etc... Creo que todo buen programador sabe como hacer enteramente un juego, aunque no tenga talento en las otras materias para desarrollarlo al 100%. Esto no significa que los artistas no sepan como funciona el juego por dentro, pero digamos que no lo necesitan tanto ni lo han de tener tan en cuenta como el programador.

El tema de masters para despues de la uni... pues bueno, yo hice uno y cumplió con el objetivo de enseñarme a hacer un videojuego, pero los Masters no están para convertirte en un programador experto de shaders, o en un modelador digno de estar en pixar, esas son cosas que uno hace o aprende por su cuenta, los Masters es un buen sitio para acelerar parte del proceso y poder crear "algo" en un grupo multidisciplinar. Esto benefica a todos, el programador muestra que sabe integrar los distintos elementos para hacerlos interactivos y que sigan cierta lógica. El animador/modelador/artista demuestra sus cualidades mas allá de un simple video pre-renderizado, un game desinger/creativo ya no solo tiene storyboards, guiones y diagramas, si no una obra que refleja todo eso en tiempo real y de forma interactiva.

Y por cierto, las matemátcias (nivel bachillerato) son muy necesarias, tanto si usas Unreal Engine como si usas OpenGL a pelo, están por todas partes XD.

Salut!

NachoDA

Pero si al chaval le gusta el diseño no se va a meter en Ing. Informática, ¿no? Yo me metí ahí porque quería ser programador, pero en caso contrario no creo que sea bueno torturar a un diseñador con matemáticas, física y programación.

Lo mejor del que quiere ser diseñador, creo, es que puede desarrollar sus aptitudes sin necesidad de demasiados estudios ni academias. Me parece una disciplina de autodidactas donde lo que más importa para ser contratado es lo que enseñes que has hecho, no los títulos al respecto que tengas. Respecto a la mejor formación para esto, ni idea xD.
@NachoDA

"Actually DLC nowadays stands for Disc Locked Content" - Usuario descontento

Gallo

A ver, a mi también me llamaban al atención los gráficos 3D, pero quería aprender programación, el ah dicho lo mismo. Yo hice grado superior de desarrollo de aplicaciones informáticas, quizá con eso sea suficiente para tener la base.

Sr_Rodilla

Yo actualmente estoy estudiando primero de ingeniería multimedia en la universidad de Alicante.

El titulo tiene mucha programación, y mucha base común en informática, pero también tiene diseño gráfico, modelaje en 3D, narrativa, sonido e imagen y un poco de producción.  Ademas de que tiene asignaturas muy practicas donde el objetivo de estas, es producir y desarrollar un pequeño producto multimedia, y en los últimos cursos hay varias asignaturas de videojuegos.

Si quieres más información de la carrera:

http://cv1.cpd.ua.es/webcvnet/planestudio/planestudiond.aspx?plan=C205


Por cierto, el grado en ingeniería multimedia esta también en otras universidades (unas publicas, y otras privadas donde vale una pasta), y si quieres ver de todo, yo te la recomiendo.

Wealk

Pues ese grado esta realmente bien. Pero en Mallorca no existe aun... Me he apuntado a realizar el grado de ingeniería informática y ya veremos que sale. Gracias por la ayuda.
Cuando acabe este grado, posiblemente me mude a la península y me saque otro relacionado. Espero que me convaliden algunos créditos.

Sr_Rodilla

Bueno, si no quieres salir de la isla ya lo tienes más limitado, en ese caso si que sería buena idea hacer informática.

Suerte con los estudios.

Wealk

#7
Mientras me voy preparando para poder asistir a la universidad me gustaría ir adelantando temario referente a la especialización en videojuegos.
El caso es que he estado buscando información sobre el desarrollo en si. Sea el modo que sea. Y principalmente me encuentro con dos problemas. El primero de todos es el lenguaje de programación. Al ser autodidacta, solo me he enterado de lo que he ido buscando por mi mismo, pero la verdad es que aunque me manejo en el mundo de diseño y modelaje, en el mundo de programación estoy realmente pez y no me entero de nada... Según he visto, el lenguaje C++ es el mas usado (esto lo entiendo xD) pero después hablan de librerías y ahí ya me pierdo totalmente. No se si es una tontería lo que diré, y puede que dañe algunos ojos... pero según he visto las librerías mas usadas son Dirext y Allegro... El segundo problema no es realmente un problema, si no una duda... ¿Como se crea un engine? No digo que sea brutal como el UDK o el Esenthel o similares... Pero me interesaría conocer el método de creación.

Así que resumiendo el párrafo, me gustaría que alguien respondiera a un par de preguntas totalmente básicas del mundo de la programación:
- ¿Que es una librería en programación?
- ¿Como se hace un engine?
- ¿Explicación rápida de lo que "hacen" los códigos de programación?

Seguramente las respuestas pueden llevar un par de páginas... No lo se... Pero me gustaría aprender lo más básico sobre cada pregunta.
Gracias por las respuestas.

----------------------------------------

Edito: Acabo de ver el primer post donde me aclara un par de dudas de las que he planteado arriba, pero en la parte donde se refiere a motor, que quiere decir... ¿A como cargar los gráficos?.
Igualmente agradezco toda nueva información que me pueda ayudar a entender de que realmente la programación de un juego.

Gallo

#8
- ¿Que es una librería en programación?
Un lib, es simplemente código de programación ya empaquetado y listo para utilizarse. Hay libs que te dan el código fuente y las compilas tu mismo, otras ya vienen compiladas y las puedes linkar de forma estática (dentro de tu ejecutable, que es lo que también harias normalmente si tubieras el código) o de forma dinamica (la lib estaria compilada fuera de tu ejecutable, esto son las famosas .DLL). Como ejemplo te pongo la lib de Lua, lua es un lenguaje de scripting, pero si quieres poder utilizarlo en tu juego escrito en C++, neceistas una lib que viene con una serie d fuciones en C para compilar y ejecutar archivos .lua, si en ese caso tu juego se convierte también en compilador y entorno de ejecución de otro lenguaje gracias a la lib de Lua.

- ¿Como se hace un engine?
Con mucho trabajo duro, un engine es un conglomerado de funcionalidades que a grandes rasgos hacen lo siguiente:

- inicializa los elementos del juego
- recoge el input del jugador
- ejecuta la lógica de los elementos del juego
- renderiza los gráficos del juego y los muestra por pantalla

Esto es a grandes rasgos lo que haría un engine, inicializar incluye desde crear la ventana, cargar texturas y modelos, sonidos, etc..., recoger el input seria las teclas que el jugador ha pulsado o el estado de las palancas y botones de un mando de consola por ejemplo. La lógica es aquello que cambia el estado de los objetos en base a eventos que pueden haber requerido o no la interacción del jugador, por ejemplo, cuando el jugador pulsa "W" para avanzar, cambias el estado del elemento que representa al personaje principal, cambiando su posición en el mundo o su velocidad, en cambio, cuando un objeto está cayendo del cielo, cada frame cambia su estado, pues está mas cerca del suelo, pero no ha habido interacción del jugador. Finalmente una vez calculado el estado de todos los objetos, estos son renderizados, dentro del calculo de la lógica los engines suelen decidir también que objetos salen por la pantalla, y son los que se agregan a la "lista" de los que han de ser pintados, asi que esta lista/arbol o lo que sea, es recorrido y va enviando a pintar todos los objetos que sean visibles.  Estos tres ultimos pasos, despues de la inicialización es lo que solemos ejecutar a 60fps.

- ¿Explicación rápida de lo que "hacen" los códigos de programación?
Pues básicamente mover y pintar todo lo que hay en el juego, lo único que no es programación en un juego son los assets, es decir, modelos 3d, sonidos, texturas, mapas, etc... la programación hace que cobren vida.

Wealk

Gracias por la respuesta.
Los dos ultimos puntos los he entendido a la perfección.
Digamos que apartir de la programación tu puedes cargar las animaciones de los modelos de manera correcta cuando toca no?
Es decir, tu hacer una animación de Walk Cycle y la guardas. Despues mediante el codigo juntas dicha animación con la tecla W y asi con las otras... No se si lo entendí bien...

El problema esta en que no puedo descifrar nada del primer parrafo donde explicas el uso de las librerias... Es decir, lo he releido como 20 veces, pero la verdad es que no llego a entender su significado... He conseguido rescatar algunas cosas pero la mayoría ha caido en saco roto... Lo siento, pero es que no entiendo apenas nada...
Gracias por la paciencia.

Gallo

Digamos que una lib, es como un trozo de programa o de juego, que está empaquetado aparte, son funcionalidades sueltas, hay una lib para controlar cosas del sonido, para agregar scripting, etc.. Una lib te suele proporcionar una serie de funciones ya implementadas que tu simplemente utilizas, sin preocuparte por lo que hace por dentro esa función, o clase o lo que sea.

Por ejemplo, hay una lib de SQLite para poder crear bases de datos sQLite y hacer llamadas para consultar o insertar datos, esto ya está hecho, lo ha hecho un tercerto, tu te limitas a incluir esta lib en tu proyecto y hacer llamadas a sus funciones, esas funciones por dentro son las que abren el archivo de base de datos y lo exploran o insertan datos, pero tu de eso no te preocupas, eso lo hace la lib por ti. Una lib de código abierto es como si te pasaran los archivos de código fuente para que los compilaras tu o los agregues a tu proyecto y formen parte de tu ejecutable, una lib estática es similar a lo primero, solo que la implementación ya está compilada, tu solo tienes los .h, pero los .cpp son un solo archivo compilado que va dentro de tu proyecto, una lib dinamica es similar pero el archivo compilado va fuera en forma de libreria dinámica, en windows suelen tener la extensión .dll.

Quizá no sepas lo que significa compilar, compilar es básicamente pasar de código fuente a binario, es decir, a un archivo que estará en un lenguaje interpretado por el entorno de ejecución o el propio procesador y que por lo general un humano no sabe interpretar, solo vemos simbolos. No se que otra información puedes necesitar jeje, pero pregunta, quizá te falten algunos coneptos básicos.

Wealk

#11
Vale. Ahora si lo acabé de entender.
La parte de código y de programación básica ya esta comprendida.
Ahora viene otro kid de la cuestión...
He seguido realizando mis tareas de investigación y me he encontrado con cosas como. Open GL vs DirectX. Motores gráficos como el Ogre3D y similares. Y ya me he vuelto a perder de camino...
Yo trabajo con Maya, y se supone que programaré con C++. Hasta aquí todo bien... ahora viene la mezcla... Mmm... Creo que no se ni formular la pregunta, así que lo haré por separado... Estoy harto de leer opiniones totalmente contradictorias en foros sin sacar nada claro. Se que es un engorro, y que realmente puede parecer pesado. Pero de nuevo acudo para solicitar ayuda...
¿Que es Open GL? ¿Para que sirve? ¿Lo mismo para Direct X y diferencias?
¿Como podré cargar mis modelos realizados con Maya dentro del juego? ¿Y sus texturas?
Y ahora la parte del motor gráfico ¿Solo son un mecanismo de ayuda para acortar el tiempo o son realmente necesarios los motores gráficos?

Creo que con las respuestas podré seguir un par de horas más tranquilamente...
Siento de nuevo las molestias y gracias por la información.
Att: Un pobre desamparado...

Gallo

#12
OpenGL y DirectX:
Mira, verdad que para utilizar la impresora has de instalar los drivers? pues digamos que OpenGL y DirectX son lo mismo para la gráfica, cuando una aplicación utiliza tu targeta gráfica, lo hace mediante OpenGL o DirectX, pero, por que hay dos? y lo que instalas con el CD del fabricante de la targeta gráfica?

Bien la cosa va a sir, Microsoft es el que hace las especificaciones para las versiones de DirectX, es decir, Microsoft dice: " si quieres que tu targeta gráfica sea compatible con DirectX 11.0 tiene que poder hacer esto, y esto , y esto otro", y el fabricante de la tarjeta (Nvidia, Ati...) lo implementa en su hardware para que los usuarios puedan disfrutar de las capacidades de esa versión de DirectX.

OpenGL es exactamente lo mismo, solo que no es Microsoft quien "dicta" esta especificación, si no el Khronos Group, un grupo formado por muchas empresas como la Nvidia, Ati, Sony, HP, etc... Así que podriamos decir que realmente es una especificación abierta, los fabricantes pueden añadir extensiones propias, y las decisiones sobre que se incluye o no se toman entre un buen puñado de empresas no solo una. Microsoft pertenecia hace tiempo al Kronos group pero se salió cuando compró el DirectX para "privatizar" el controlador.

El driver del fabricante se resume en algunas herramientas propias para modificar parametros de la targeta gráfica, y en cuanto a comunicación/programación proporciona una interfaz para acceder a las funciones de la targeta gráfica, las funciones están ahi, en la targeta, tu obtienes su dirección en memoria para llamarlas, quizá sea algo de muy bajo nivel para alguien no iniciado a la programación.

Cargando modelos y texturas:
Esto es lo que se hace con OpenGL y DirectX, pero que un motor gráfico te lo hace transparente, te pondré el ejemplo sin poner funciones concretas, con OpenGL o DirectX el código seria mas o menos así:

//para cargar
ArrayPixelesRGB* textura;
ArrayVectores3D* modelo;
int referenciaTextura;
int referenciaModelo;

cargarArchivoTextura("textura.tga",textura); //funcion propia para cargar textura
cargarArchivoModelo("modelo.obj",&modelo); //funcion propia para cargar modelos

//a partir de aquí seria de la API de OpenGL o DirectX
crearEspacioParaTextura(&referenciaTextura,textura.size);
cargarEspacio(referenciaTextura);
guardarTextura(textura.array);

crearEspacioParaModelo(&referenciaModelo,modelo.size);
cargarEspacio(referenciaModelo);
guardarModelo(modelo.array);

//a la hora de pintar
usarTextura(referenciaTextura);
usarModelo(referenciaModelo);
setearTransformacion(modelo.transformacion);
pintar();

Y esto es bastante resumido, ni siquiera se haria así actualmente habria shaders de por medio, etc... es mucho código, y para OpenGL y DirectX las funciones se llamarian diferentes y la forma de enviar la información también seria diferente. Por eso se crean o usan motores, con un motor, el código a escribir seria:

//cargar
Modelo modelo3D = new Modelo("modelo.obj");
Textura textura = new Textura("textura.tga");
modelo3D.setTextura(textura);


//pintar
modelo3D.pintar();

He exagerado un poco pero vamos, entiendes la idea no?

Motor gráfico siempre habrá, o lo haces tu, o usas uno externo, por defecto parte de tu código estará dedicado a pintar cosas por pantalla, eso por definición es un motor gráfico. Ogre3D es un motor gráfico bastante currado, las ventajas que te da es que acorta muchismo la cantidad de código que vas a tener que escribir para hacer lo mismo y ademas al llevar tanto tiempo y estar muy testeado está lleno de optimizaciones y tiene previstos muchos errores que podrias cometer si implementaras tu propio motor.  Ogre3D por dentro usa OpenGL (windows, mac, linux, etc..) y DirectX (solo windows), no usa los dos a la vez, eso no se puede, lo que haces con Ogre3D es decidir cual de los dos quieres usar, pero la ventaja es que para ti será transparente, tu llamaras a las mismas funciones para guardar tus modelos y texturas en memoria y las mismas para pintarlos, al menos la intención de Ogre3D es que sea totalmente transparente, no siempre será así.


Con un Game Engine ni si quiera hay código para pintar, solo código de lógica del juego, todo lo demas se suele hacer "data driven" es decir, tu tienes la lista de modelos, sus texturas, su posicion y tamaño etc,, en un archivo de texto, el Game engine lo lee, los carga y los pinta con esa información, que tu puedes alterar con código, pero solo has de hacer eso, cambiar su estado, no hace falta que escribas codigo para cargarlos o para pintarlos, solo cambiar su posición, cambiar la textura, etc...

Wealk

Es decir, que un motor gráfico es únicamente una secuencia de código referente a la parte gráfica del juego ¿no?
Te quita trabajo a la hora de realizar las lineas de código referente al personaje, objeto o textura...
Al menos he entendido esto... Otra cosa a la hora de aplicar una librería gráfica por llamarlo de alguna manera, me es más recomendable usar OpenGL por lo que has dicho, dado que tiene mas soporte de empresas y por lo tanto mas fiabilidad o...
Es un tanto lioso... Supongo que cuando me ponga a aprender C++ se aclararán las cosas.
Se que mucha gente dice que por internet lo puedes encontrar todo, pero la verdad es que a mi me gustan los libros en si. Me compré libros para el diseño y el modelado en 3D, y ahora estoy esperando un libro completo de programación en C++ para empezar con ello...
Dicho esto... ¿Me aconsejas comprarme un libro de OpenGL? Quiero decir... ¿Me servirá?

Gallo

No, no creo que te sirva aprender algo de tan bajo nivel, tu no te programas los drivers de la impresora para usarla no? Aprende OpenGL solo si tienes mucho interés en aprender tecnología o crear un motor gráfico, pero programar videojuegos es algo muy diferente. Si quieres hacer juegos aprende a utilizar un motor como por ejemplo Unity, la programación en esos motores está totalmente orientada a la lógica del juego, aprenderás los conceptos importantes y no un montón de tecnología que por si sola no sirve para crear nada divertido.

Así de entrada parece mejor OpenGL, pero ese es un punto de vista indie, en el fondo la industria tiene que utilizar ambas, ya que XBox 360 solo acepta DirectX 10.0, y Mac OS, Linux, ps3, wii, psp, ps vita, nintendo ds, iphone y android solo OpenGL  en distintas versiones. Windows es el único sistema donde funcionan ambas ( que gracioso no? ), pero para PC se suele utilizar DirectX. Pero ya te digo, ni caso de esto, opta por un motor como Unity, para aprender va mejor.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.