Partage de technologie

[The Road to Game Engine] Ascending to the Gods (7) - x86 Assembly Learning : Si vous faites des choses difficiles, vous gagnerez quelque chose.

2024-07-12

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

20 mai - 4 juin : surmontez le moteur physique 2D.
4 juin - 13 juin : Surmontez les « Bases des mathématiques 3D ».
13 juin - 20 juin : Surmontez le "Tutoriel graphique 3D".
21 juin - 22 juin : surmontez le "Tutoriel du jeu Raycasting".
23 juin - 1er juillet : dépassez les « compétences de maîtrise en programmation de jeux Windows ».
2 juillet - 6 juillet : Surmontez « Développement de jeux de compilation Atari 2600 ».
7 juillet - 11 juillet : vaincre le "langage d'assemblage x86/x64".

Objectif suivant : "Compétences de maîtrise en programmation de jeux 3D"

Cette fois, c'est une autre bataille sur une planète « extraterrestre ». J'ai fait 60 kilomètres à vélo hier. Ce n'étaient pas des 60 kilomètres ordinaires. Les 20 derniers kilomètres étaient entièrement des routes de montagne. J'étais épuisé à mon retour. Mon état mental n'est pas très bon aujourd'hui, je peux dire que j'ai juste serré les dents et terminé le tutoriel.

Cependant, j’ai découvert que j’aimais aussi ce sentiment. Pas aussi inconnu que la compilation Atari 2600.

L'apprentissage de l'assemblage est vraiment comme ce genre de jeu de haut niveau, où vous ne pouvez vraiment pas faire d'erreurs. J'ai pris plus de notes que je ne m'en souvenais en un semestre. Même s'il ne s'agit que de quelques phrases, j'ai écrit des notes de manière dense. Cela aurait été bien si j'avais pu travailler si dur quand j'étais à l'université.

J'ai appris deux tutoriels cette fois, l'un est X86-32 bits. L’un est x86-64 bits. Les deux ont leurs propres forces et faiblesses. Par exemple, le premier tutoriel n’a appris comment appeler des fonctions qu’à la fin. Les bases du 64 bits sont bien expliquées, mais les applications avancées ne sont pas du tout couvertes.

Après avoir étudié ce cours, j'ai réalisé la plus grande réalisation. Avant, je pensais que l'assemblage était une chose relativement « de bas niveau » et relativement « arriérée ». Après tout, les langages d'aujourd'hui sont étiquetés comme « de haut niveau ». langues".

Cela me donne l'impression que si le langage de programmation que j'utilise est constitué de fusils et de canons, alors le langage assembleur est une arme froide. Peu importe ce que vous en pensez, cela vous donne une impression plutôt « arriérée ». J'ai eu la même impression lorsque j'apprenais l'assemblage de l'Atari 2600.

Cependant, après avoir appris l'assemblage x86, cette impression a complètement changé. L’ensemble est simplement une arme « nouvelle génération ». Ce n’est pas une arme blanche, mais une « haute technologie », une épée laser.

C'est juste "difficile à utiliser", pas "faible". Au contraire, il est ridiculement fort.

J'entendais les gens parler de l'apprentissage de l'assembleur, et plus d'une fois j'ai vu que les compilateurs d'aujourd'hui sont très avancés. Même si vous apprenez l'assembleur, le code que vous écrivez ne sera pas aussi efficace qu'avant. Je sais maintenant que ce truc n'est que du pur pet. De MMX à AVX, vous ne pouvez pas écrire ce type de capacité de traitement parallèle, quelle que soit la façon dont vous écrivez le code, et aucun compilateur ne peut le faire. Vous devez utiliser l'assembleur pour utiliser cette fonction puissante.

Et mon application est un moteur de jeu, c'est là que le traitement par lots des graphiques est le plus nécessaire.

Lorsque j'ai appris l'assemblage auparavant, je viens de voir dans mon livre que l'assemblage est encore nécessaire dans certains endroits où les performances sont importantes. C’est un sentiment d’auteur si simple. En fait, je ne m'attendais pas à ce que le langage assembleur soit aussi puissant.

Cela bénéficie en fait de ma pensée actuelle selon laquelle « moins c'est plus ». Parce que je pensais à créer des jeux, j'ai toujours pensé au multiplateforme, à la création de PC et à la création de téléphones mobiles. Maintenant que je crée mon propre moteur, les exigences ne peuvent plus être si élevées et je ne veux pas y penser. sur le multiplateforme, je me concentre donc sur la qualité de la plate-forme PC. C'est pourquoi j'ai eu l'idée d'apprendre l'assemblage. Si je pense toujours au multiplateforme, je n’ai peut-être pas cette idée.

Il y a une phrase dans une conférence donnée par le professeur Jin Yinan qui m'a profondément impressionné :

Si vous faites des choses difficiles, vous gagnerez quelque chose.

C’est presque devenu l’un de mes credo. Cette fois, la puissance de cette phrase se confirme à nouveau.

L’apprentissage de l’assemblage m’a apporté plus d’avantages que je ne l’imaginais. J'ai hâte de modifier une partie de mon code précédent. Par exemple, j'avais un code de fusion Alpha, car DirectDraw de DirectX ne prend pas en charge le canal Alpha. J'ai donc écrit mon propre mélange alpha pour prendre en charge les objets translucides. Cette chose est extrêmement lente. À l'origine, elle faisait 800 images, mais elle pouvait être réduite à 200 images en un instant. Mais seul l’avion du protagoniste utilise cet algorithme. Si vous utilisez l'assemblage, je pense que cela peut être beaucoup plus élevé. Bien sûr, il ne s’agit que d’une tentative d’amélioration. En fait, l’essentiel dépend du matériel. Avec seulement Blt, ma fréquence d'images peut atteindre plus de 4000. Ceci ne peut être réalisé par aucune méthode de conversion.

Cependant, il reste encore des domaines qui peuvent être améliorés. Par exemple, ma fonctionnalité SpritePack. Cette chose ne peut pas être contrôlée par le matériel, tout est réalisé par mon algorithme. Cette compilation d’améliorations de l’efficacité peut apporter une valeur considérable.

En fait, je voulais à l'origine réapprendre Python + machine learning. Je ne sais pas ce qui se passe pendant cette période et je veux tout savoir. Je pense que l’IA sera une pièce très importante du puzzle dans le développement de mon jeu. J’utilise désormais l’IA pour créer des images et des peintures originales, et c’est très simple à utiliser. J'aimerais en savoir plus sur cet aspect de la connaissance.

Mais je n’ai pas lu pendant cette période, j’ai juste étudié les tutoriels, donc je ne pouvais pas rester assis tout le temps. Si j'apprenais avec un livre, je pouvais m'allonger en lisant, j'ai donc choisi d'apprendre les « Compétences de maîtrise en programmation de jeux 3D ». Cela soulage la pression sur ma taille.

Après cette période, voyez si vous pouvez apprendre Python.

allez!