comme dit par Josh Petrie :
" Pas construit ici syndrome ;"
J'écris aussi mon propre moteur, et je suppose que la raison en sera différente pour chaque développeur, mais en fait, je n'aime généralement pas travailler dans le code des autres peuples. Je suis compulsif en ce sens que si je sens que je peux le construire moi-même, il ne sert à rien de se contenter de rien d'autre .
J'ai testé différents types de moteurs de jeu, API de rendu, etc., notamment Ploobs, UNITY WaveEngine, XNAFinalEngine, Love, Ogre, etc. beaucoup plus encore ... Je voulais commencer à écrire des jeux - j'ai téléchargé beaucoup de choses à la recherche d'un bon et point d'entrée bien documenté ...
Cependant, mon problème était qu'à l'époque je n'avais aucune idée de ce qui se passait sous le moteur. Je voulais un bon contrôle et un cadre que je connaissais comme ma poche. J'ai eu l'idée "HEY! Je pense que la seule façon pour moi de comprendre comment fonctionne cette chose et de la comprendre est d'essayer de construire mon propre moteur entièrement à partir de zéro. La majeure partie de mon histoire de programmation était avec des solutions Web et de traitement. - Ce fut un tout nouveau jeu de balle pour moi.
C'est ce que j'ai fini par faire.
J'ai donc choisi de configurer XNA puisque je connaissais déjà C # et j'ai commencé à réfléchir à comment et par où commencer. J'avais besoin d'une idée.
J'ai décidé que, quoi qu'il arrive, j'entrerais directement en 3D .
Obtenir les bases était cool - le genre de lot sprite, mais au fur et à mesure de mes progrès, j'ai découvert de nouveaux obstacles et barrières - le premier étant la limite de lot . Mon objectif était de créer un jeu capable de restituer au moins 10000 entités dans le tableau de bord à tout moment.
Je me suis lancé dans une nouvelle expérience d'implémentation de l'instanciation par shader (et appris HLSL alors que j'y étais), j'ai abandonné les objets Model et Effect intégrés à XNA pour écrire mes propres remplacements. J'ai eu du mal à comprendre les flux de VBO au début; J'ai cassé des choses - je suis allé en ligne pour poser des questions sur l'instanciation et je l'ai gardé jusqu'à ce que je comprenne enfin ce que faisait le GPU. Cela a payé maintenant, plus de 20 000 entités de test effectuaient des zooms dans ma fenêtre après quelques jours de débogage de mon VBO avec PIX (dxsdk).
J'avais maintenant "quelques" idées sur le fonctionnement des pipelines de rendu, mais je ne l'avais pas encore fait. J'ai fini par créer mes propres états de jeu, caméras, effets de post et objets d'entité, qui se sont éloignés du pipeline de contenu XNA en créant le mien. Les chargeurs (aversion personnelle envers XNB) ont créé une chaîne géométrique complexe, triée en profondeur et en fusion, ainsi que des images-objets instanciées et du texte projetés dans la scène du jeu.
J'ai ajouté, corrigé, modifié et expérimenté sans cesse pendant presque toute une année. En fin de compte, cela s'est bien passé. Je comprenais maintenant ce qui se passait sous le capot, car je l’ai créé, mon bébé.
Maintenant, mon moteur était presque stable et presque fini. Ce n'est pas parfait: le script est honky et l'interface graphique n'était pas géniale du tout. Mais j'ai toujours aimé ça. Des milliers de lignes de code, de ressources et de supports - stockés dans un référentiel privé git de 2 Go, et tous les maux de tête auxquels j'ai dû faire face en essayant de réaliser un type de développement que je n'avais jamais fait auparavant. Chaque obstacle que j'ai surmonté a été une leçon apprise - et un soulagement.
J'ai retiré presque tout ce que je voulais dedans.
Mais à la fin, j'ai décidé qu'il était temps de la rabaisser.
Même si je me suis contenté d'écrire un moteur aussi énorme tout seul, avec les conseils du réseau et d'autres amis de Gamedev, j'ai décidé de tout recommencer - et de le faire mieux - car maintenant, cette fois, je sais surtout Qu'est-ce que je fais.
Ce projet est toujours caché dans mon dépôt GIT.
Mon deuxième passage à l'écriture d'un nouveau moteur (cette fois sur MonoGame) progresse bien. Quand quelque chose se brise, c'est plus facile à réparer. Moins de dégâts. J'espère montrer publiquement mon jeu cette année, car j'ai tendance à être un peu trop attaché à mon code.
En fin de compte, l'écriture de mon propre moteur est la façon dont j'ai appris à le faire, tout en étant capable de dire que je sais et que je comprends exactement ce que fait chaque composant et comment il est censé fonctionner. En fait, je déteste lire le code des autres, en particulier pour les grands projets non documentés. Je veux que tout ce que j'utilise soit construit par moi.
C'est juste moi si. Je doute que j'utilise jamais un moteur préconçu, probablement parce que je pense que c'est plus amusant pour moi d'écrire mes propres frameworks que de rester assis et de gérer le code de quelqu'un d'autre - un contrôle total.