Compartir tecnología

[El camino hacia el motor del juego] Ascending to the Gods (7) - Aprendizaje en ensamblaje x86: si haces cosas difíciles, ganarás algo.

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

20 de mayo - 4 de junio: Supera el motor de física 2D.
4 de junio - 13 de junio: Superar "Conceptos básicos de Matemáticas 3D".
13 de junio - 20 de junio: Superar "Tutorial de gráficos 3D".
21 de junio - 22 de junio: Supera el "Tutorial del juego Raycasting".
23 de junio - 1 de julio: Supere las "Habilidades maestras en programación de juegos de Windows".
2 de julio - 6 de julio: Supera "Desarrollo de juegos compilatorios Atari 2600".
7 de julio - 11 de julio: Supere el "lenguaje ensamblador x86/x64".

Próximo objetivo: "Habilidades maestras en programación de juegos 3D"

Esta vez es otra batalla en un planeta "alienígena". Ayer hice 60 kilómetros en bicicleta. Estos no fueron 60 kilómetros normales. Los últimos 20 kilómetros fueron todos caminos de montaña. Cuando regresé estaba exhausto. Mi estado mental no es muy bueno hoy. Puedo decir que simplemente apreté los dientes y terminé el tutorial.

Sin embargo, descubrí que también me gusta este sentimiento. No tan desconocido como la compilación Atari 2600.

Aprender a ensamblar es realmente como ese tipo de juego superior, en el que realmente no puedes cometer ningún error. Tomé más notas de las que podía recordar en un semestre. Aunque son solo unas pocas frases, he escrito notas densamente. Hubiera sido bueno si hubiera podido trabajar tan duro cuando estaba en la universidad.

Esta vez aprendí dos tutoriales, uno es X86-32 bits. Uno es x86-64 bits. Ambos tienen sus propias fortalezas y debilidades. Por ejemplo, el primer tutorial no enseñó cómo llamar funciones hasta el final. Los conceptos básicos de 64 bits están bien explicados, pero las aplicaciones avanzadas no se tratan en absoluto.

Después de estudiar este curso, me di cuenta de que solía pensar que el ensamblaje es algo relativamente "de bajo nivel" y relativamente "atrasado". Después de todo, los lenguajes actuales están etiquetados como "de alto nivel". idiomas".

Esto me da la impresión de que si el lenguaje de programación que uso son pistolas y cañones, entonces el lenguaje ensamblador es un arma blanca. No importa cómo lo pienses, te da una impresión bastante "atrasada". Tuve la misma impresión cuando estaba aprendiendo a ensamblar el Atari 2600.

Sin embargo, después de aprender a ensamblar x86, esta impresión cambió por completo. El conjunto es simplemente un arma de "próxima generación". No es un arma blanca, sino una "alta tecnología", una espada láser.

Es simplemente "difícil de usar", no "débil". Al contrario, es ridículamente fuerte.

Solía ​​​​escuchar a la gente hablar sobre aprender ensamblador y más de una vez vi que los compiladores actuales son muy avanzados. Incluso si aprendes ensamblador, el código que escribas no será tan eficiente como antes. Ahora sé que esto es puro pedo. De MMX a AVX, no puede escribir este tipo de capacidad de procesamiento paralelo sin importar cómo escriba el código, y ningún compilador puede hacerlo. Debe usar ensamblador para usar esta poderosa función.

Y mi aplicación es un motor de juego, que es donde más se necesita el procesamiento por lotes de gráficos.

Cuando aprendí sobre ensamblaje antes, de hecho vi en mi libro que todavía es necesario el ensamblaje en algunos lugares donde el rendimiento es importante. Es el sentimiento de un autor tan simple. De hecho, no esperaba que el lenguaje ensamblador fuera tan poderoso.

En realidad, esto se beneficia de mi pensamiento actual de "menos es más". Como solía pensar en hacer juegos, siempre pensé en multiplataforma, hacer PC y teléfonos móviles. Ahora que hago mi propio motor, los requisitos no pueden ser tan altos y no quiero pensar. sobre multiplataforma, así que me concentro en hacer que la plataforma de PC sea buena. Por eso se me ocurrió la idea de aprender a ensamblar. Si siempre pienso en multiplataforma, es posible que no tenga esta idea.

Hubo una frase en una conferencia dada por el profesor Jin Yinan que me impresionó profundamente:

Si haces cosas difíciles, ganarás algo.

Esto casi se ha convertido en uno de los credos de mi vida. Esta vez, se vuelve a confirmar el poder de esta sentencia.

Aprender montaje me ha dado más beneficios de los que imaginaba. No puedo esperar para modificar parte de mi código anterior. Por ejemplo, solía tener un código de combinación Alpha porque DirectDraw de DirectX no es compatible con el canal Alpha. Entonces escribí mi propia combinación alfa para soportar objetos translúcidos. Esto es extremadamente lento. Originalmente tenía 800 fotogramas, pero se puede reducir a 200 fotogramas en un instante. Pero sólo el avión del protagonista utiliza este algoritmo. Si usa ensamblaje, creo que puede ser mucho mayor. Por supuesto, esto es sólo un intento de mejorarlo. De hecho, lo principal depende del hardware. Sólo con Blt, mi velocidad de fotogramas puede llegar a más de 4000. Esto no se puede lograr mediante ningún método de conversión.

Sin embargo, todavía hay áreas que se pueden mejorar. Por ejemplo, mi funcionalidad SpritePack. Esto no puede ser controlado por hardware, todo se realiza mediante mi algoritmo. Esta recopilación de mejoras de eficiencia puede proporcionar un valor tremendo.

De hecho, originalmente quería aprender Python + aprendizaje automático nuevamente. No sé qué está pasando durante este tiempo y quiero saberlo todo. Siento que la IA será una pieza muy importante del rompecabezas en el desarrollo de mi juego. Ahora uso IA para crear imágenes y pinturas originales, y es muy fácil de usar. Me gustaría aprender más sobre este aspecto del conocimiento.

Pero no leí durante este período, solo estudié los tutoriales, así que no podía soportar estar sentado todo el tiempo. Si estaba aprendiendo con un libro, podía recostarme mientras leía, así que elegí aprender "Habilidades maestras de programación de juegos 3D". Esto alivia la presión en mi cintura.

Después de este período de tiempo, vea si puede aprender Python.

¡vamos!