¿Cuáles son las matemáticas, la física, la IA y los conceptos generales específicos que un programador debe conocer para desarrollar un motor de juego? [cerrado]

9

Al ser un programador de aplicaciones centradas en web y DB, tengo conocimiento en estructuras de datos como listas, árboles, gráficos, etc. Honestamente, uso muy poco de estos algoritmos de estructura de datos en mi codificación, excepto para ordenar cosas en matrices simples, ya que Trabajó casi por completo con marcos orientados al cliente donde se incorporaron todas las funciones principales. Sé C, PHP, Java, HTML, PL / SQL y MySQL. Actualmente estoy aprendiendo Python.

Quiero comenzar con el desarrollo del juego. He visto otras preguntas sobre sugerencias, consejos y enfoques para el desarrollo de juegos para principiantes. Entiendo estos puntos, y estoy claro con las respuestas. Unos días después de publicar, leí el artículo Escribir juegos, no motores , y me di cuenta de que debía implementar un juego antes de crear un motor de juego. Aún así, tengo preguntas.

Mi objetivo es

  • Mejorar mis habilidades de programación de nivel básico, incluido el uso de algoritmos de estructura de datos, conceptos matemáticos y físicos.
  • Implemente un buen motor de juego, para disfrutar de la codificación de nivel central.
  • Para abrirme camino en el campo de la investigación de IA.

¿Cuáles son las matemáticas, la física, la IA y los conceptos generales específicos que un programador debe conocer para desarrollar un motor de juego?

droidsites
fuente

Respuestas:

11

Estructuras de datos: sin duda es una pregunta válida. Sin embargo, si bien algunas estructuras de datos son útiles para cualquier tipo de juego (como las que ya ha mencionado, listas, árboles ...), hay otras que son muy específicas. Por ejemplo, Octrees puede ser muy útil en la programación 3D, pero en un entorno 2D puro probablemente no los necesitará.

Algoritmos : se aplica la misma regla general. Ejemplo, en un entorno 2D puro, la detección de colisión funciona de manera muy diferente que en 3D.

Áreas matemáticas importantes: EL zona más importante para un Dev motor que se han familiarizado con es lineal Álgebra y Álgebra Temas más avanzados (Quaternions). Muy simple en realidad, si te sientes cómodo con el Álgebra Lineal (y quiero decir más allá de la simple multiplicación de Matrix), tienes un buen comienzo.

El siguiente es Geometry, que de todos modos se conecta bien con el Álgebra Lineal en Engine Dev, y de todos modos probablemente no necesite una mención.

Además, nunca está de más tener una comprensión sólida del cálculo básico. Esto resulta útil cuando se trata con el motor de física o con temas de sombreado más avanzados.

Otros temas de interés deben ser: combinatoria, estadística

Física: no es obligatorio, SI tienes la intención de hacer juegos simples. No duele, pero te irá bien con la física de la escuela secundaria en este caso.

Si está pensando en escribir un motor de física o implementar una arquitectura existente, entonces sí, es obligatorio. Pero no temas, hay muchos libros de física escritos específicamente para desarrolladores de juegos. Solo tenga en cuenta, lea estos ANTES de comenzar a codificar un juego con física. Si su juego debe tener física, estos motores se vincularán profundamente con su arquitectura central.

AI: Para ser completamente honesto, si la IA es su principal interés, no me molestaría en escribir un Engine completo. La IA es mucho más divertida cuando tienes una arquitectura existente para jugar. Escribir un motor será un dolor y pasará bastante tiempo hasta que puedas implementar algoritmos de IA divertidos.

¿Qué tipo de juego deseas desarrollar? Quizás pueda elaborar más sobre estos puntos con esta información.

Michael Kissner
fuente
Gracias por tu elaborada respuesta. Como respuesta a tu pregunta ... bueno, en este momento no tengo ninguna idea en mi cerebro, pero quiero desarrollar un motor de juego en 3D. Pero piense mejor para comenzar con un juego 2D y conocer el entorno. Antes de todo esto, debería jugar algunos juegos para conocer el aspecto de los juegos (ya que nunca jugué videojuegos :-)). Para que me sea fácil entender la terminología de los libros y otras cosas. Encontré lo siguiente muy útil,
droidsites
lo siento, perdí el enlace en mi comentario anterior: gamedev.stackexchange.com/questions/8502/…
droidsites
En el pasado, hubiera recomendado que comenzaras primero con los juegos 2D si querías desarrollar juegos 3D. Sin embargo, con el levantamiento de arquitecturas como XNA, creo que es más divertido sumergirse directamente en 3D. ¿Ya has visto C # / XNA? No debería ser un problema dada su experiencia en programación
Michael Kissner
No, no lo había comprobado. Sí ... no es problema ir por C #. Pero estoy muy interesado en Python :-)
droidsites
Si estás interesado en Python y estás más interesado en crear un juego en lugar de crear la tecnología para crear un juego, puedes echar un vistazo a Panda3D o al motor de juegos de Blender.
Sean Middleditch
1

Si bien puede ser válido preguntar qué estructuras de datos se usan más en el desarrollo del juego, es mucho más válido preguntar qué estructuras de datos se usan para problemas específicos. Puedo afirmar fácilmente que las tablas hash son muy comunes en los juegos, pero eso no le diría nada útil en términos de cuándo y dónde usar (¡y no usar!) Una tabla hash en su propio código. :)

En términos de matemáticas, debe tener una comprensión muy sólida del álgebra lineal (vectores, matrices, resolución de sistemas lineales, etc.), una comprensión muy fuerte de la trigonometría y al menos una comprensión básica del cálculo (derivadas simples e integración) . Cualquier curso introductorio de álgebra lineal de nivel universitario debería ubicarte en el camino correcto, si no te enseñará todo lo que necesitas saber para comenzar a trabajar con los principios comunes de gráficos en 3D. También enlace un libro debajo del cual puede encontrar bastante útil.

Para la física, te espera un aventón. La física se puede dividir en dos categorías diferentes: detección de colisión y respuesta de colisión. Debe saber absolutamente la matemática detrás de la detección de colisión, ya que esa matemática es más o menos idéntica a lo que necesita para hacer gráficos (especialmente para construir los árboles y mapas que necesita para la oclusión), y va a usar esas cosas para un mucha de tu lógica de juego también.

La respuesta de colisión puede variar de niveles "simples" a niveles de complejidad ridículos, e incluso las cosas simples pueden ser no intuitivas al principio. Recomiendo encarecidamente que deje esas cosas en una biblioteca existente como Bullet, Havok, PhysX, etc. (o Box2D si está trabajando en juegos 2D) hasta que se sienta cómodo con sus matemáticas y algoritmos existentes conocimiento y decidir que desea aprender cómo funcionan los motores de física. Entonces te recomendaría que construyas un motor de física 2D muy simple como primer intento. Los motores de física 3D son bestias increíblemente complejas y son (posiblemente) la parte más complicada y difícil de la programación de juegos, por lo que los motores de física son la tecnología de terceros con licencia más utilizada en los juegos. Simplemente no ves muchos juegos que no son t usando Havok o PhysX en el mundo profesional, a pesar de la cantidad de juegos que tienen motores gráficos y código de motor interno desde cero. Incluso las empresas que no hacen nada más que construir motores de juegos suelen licenciar un motor de física, por ejemplo, Unreal solo usa PhysX en lugar de incluir su propio motor de física.

Recomendaría los siguientes libros para comenzar. El primero es un libro de nivel introductorio sobre las matemáticas básicas que necesita saber como programador de juegos en 3D:

http://www.amazon.com/Mathematics-Programming-Computer-Graphics-Third/dp/1435458869

El segundo es un libro detectado para algoritmos de detección de colisión (¡no respuesta de colisión!) Que ayudará tanto con su codificación gráfica como con su codificación física:

http://www.amazon.com/Real-Time-Collision-Detection-Interactive-Technology/dp/1558607323

Sean Middleditch
fuente