"Ne pas optimiser au début" ne signifie pas "choisir le pire moyen de faire les choses". Vous devez toujours prendre en compte les conséquences sur les performances (à moins que vous ne fassiez que du prototypage). Le but n'est pas de paralyser d'autres éléments plus importants à ce stade du développement - tels que la flexibilité, la fiabilité, etc. Choisissez des optimisations simples et sûres - choisissez les éléments que vous souhaitez limiter et ceux que vous gardez libres; garder une trace des coûts. Devez-vous utiliser le typage fort? La plupart des jeux ont fonctionné correctement. combien cela vous coûterait-il de supprimer cela si vous trouviez des utilisations intéressantes de la flexibilité pour gamemplay?
Il est beaucoup plus difficile de modifier le code optimisé, en particulier le code "intelligent". C’est toujours un choix qui améliore certaines choses et aggrave d’autres (par exemple, vous pouvez échanger du temps CPU pour utiliser de la mémoire). Lorsque vous faites ce choix, vous devez être conscient de toutes les implications - elles peuvent être désastreuses, mais elles peuvent aussi être utiles.
Par exemple, les commandants Keen, Wolfenstein et Doom ont été construits sur un moteur de rendu optimisé. Chacun avait son "truc" qui permettait au jeu d’exister (des optimisations supplémentaires ont également été développées au fil du temps, mais ce n’est pas important ici). C'est bien . Il est normal d’optimiser fortement le cœur même du jeu, la pensée qui rend le jeu possible; surtout si vous explorez de nouveaux territoires où cette fonctionnalité optimisée vous permet de prendre en compte des conceptions de jeu peu explorées. Les limitations introduites par l'optimisation peuvent également vous donner un jeu intéressant (par exemple, les limites du nombre d'unités dans les jeux RTS ont peut-être été créées pour améliorer les performances, mais elles ont également un effet de gameplay).
Mais notez que dans chacun de ces exemples, le jeu ne pourrait exister sans l'optimisation. Ils n'ont pas commencé avec un moteur «entièrement optimisé» - ils ont commencé par la simple nécessité et ont progressé. Ils développaient de nouvelles technologies et les utilisaient pour créer des jeux amusants. Et les astuces moteur étaient limitées à une partie du code aussi petite que possible - les optimisations plus lourdes n’étaient introduites que lorsque le gameplay était essentiellement terminé ou qu’il permettait à une nouvelle fonctionnalité intéressante de se faire jour.
Maintenant, considérons un jeu que vous voudrez peut-être faire. Y at-il vraiment un miracle technologique qui fait ou défait ce jeu? Peut-être envisagez-vous un jeu en monde ouvert sur un monde infini. Est-ce vraiment la pièce centrale du jeu? Le jeu ne fonctionnerait-il tout simplement pas sans cela? Vous pensez peut-être à un jeu où le terrain est déformable sans limite, avec une géologie réaliste, etc. pouvez-vous le faire fonctionner avec une portée plus petite? Cela fonctionnerait-il en 2D au lieu de 3D? Obtenez quelque chose d'amusant dès que possible - même si les optimisations peuvent vous obliger à retravailler une énorme partie de votre code existant, cela peut en valoir la peine; et vous pourriez même vous rendre compte que rendre les choses plus grandes ne rend pas le jeu meilleur.
Comme exemple de jeu récent avec de nombreuses optimisations, je citerai Factorio. Les courroies sont un élément essentiel du jeu. Elles sont plusieurs milliers et transportent de nombreux morceaux de matériaux individuels tout autour de votre usine. Le jeu a-t-il commencé avec un moteur à courroie fortement optimisé? Non! En fait, la conception de la ceinture originale était presque impossible à optimiser - elle a en quelque sorte simulé physiquement les éléments de la ceinture, ce qui a créé des choses intéressantes que vous pouvez faire (c'est ainsi que vous obtenez un gameplay "émergent" - un gameplay qui surprend concepteur), mais cela signifiait que vous deviez simuler chaque élément de la ceinture. Avec des milliers de courroies, vous obtenez des dizaines de milliers d’éléments simulés physiquement. Même en les supprimant et en les laissant faire le travail, vous réduisez le temps de calcul associé de 95 à 99%. même sans considérer des choses comme la localité de la mémoire. Mais ce n’est utile que de le faire lorsque vous atteignez réellement ces limites.
Presque tout ce qui avait un rapport avec les courroies devait être refait pour permettre leur optimisation. Et les courroies devaient être optimisées, car il fallait beaucoup de courroies pour une grande usine, et les grandes usines sont l'une des attractions du jeu. Après tout, si vous ne pouvez pas avoir de grandes usines, pourquoi avoir un monde infini? C'est drôle, vous devriez demander - les premières versions ne le faisaient pas :) Le jeu a été retravaillé et remodelé de nombreuses fois pour arriver là où il est maintenant - y compris un remake à 100%, quand ils se sont rendus compte que Java n'était pas la solution idéale. jeu comme celui-ci et basculé en C ++. Et cela a bien fonctionné pour Factorio (bien que ce fût une bonne chose, il n’était pas optimisé dès le départ - en particulier s’il s’agissait d’un projet de loisir, qui aurait tout simplement échoué sinon par manque d’intérêt).
Mais la chose est, il y ade nombreuses choses que vous pouvez faire avec une usine à portée limitée - et de nombreux jeux l'ont montré. Les limites peuvent être encore plus stimulantes pour le plaisir que les libertés; Spacechem serait-il plus amusant si les "maps" étaient infinies? Si vous aviez commencé avec des "ceintures" fortement optimisées, vous seriez pratiquement obligé de suivre cette voie; et vous ne pouvez pas explorer d'autres directions de conception (comme voir ce que vous pouvez faire d'intéressant avec des bandes transporteuses simulées par la physique). Vous limitez votre potentiel de conception. Cela ne semble peut-être pas comme cela parce que vous ne voyez pas beaucoup de jeux inachevés, mais le plus difficile est de vous amuser correctement - pour chaque jeu amusant que vous voyez, il y en a probablement des centaines qui ne pouvaient tout simplement pas y arriver et ont été mis au rebut (ou pire, libéré sous forme de désordres horribles). Si l'optimisation vous aide à le faire, allez-y. Si ce n'est pas ... c'est probablement prématuré. Si vous pensez que certains mécanismes de jeu fonctionnent très bien, mais que des optimisations sont nécessaires pour vraiment briller, continuez. Si vous n'avez pas de mécanique intéressante,ne les optimise pas . Trouvez l’amus d’abord - vous constaterez que la plupart des optimisations n’aident pas, et sont souvent désastreuses.
Enfin, vous avez un grand jeu amusant. Est-il judicieux d'optimiser maintenant ? Ha! Ce n'est toujours pas aussi clair que vous pourriez le penser. Y a-t-il quelque chose d' amusantvous pouvez faire à la place? N'oubliez pas que votre temps est encore limité. Tout demande un effort et vous souhaitez concentrer vos efforts là où cela compte le plus. Oui, même si vous créez un "jeu gratuit" ou un jeu "open source". Regardez comment le jeu est joué; remarquez où la performance devient un goulot d'étranglement. Est-ce que l’optimisation de ces lieux rend plus amusant (comme la construction d’usines toujours plus grandes, toujours plus enchevêtrées)? Est-ce que cela vous permet d'attirer plus de joueurs (par exemple avec des ordinateurs plus faibles ou sur différentes plates-formes)? Vous devez toujours prioriser - recherchez l'effort pour obtenir un ratio. Vous trouverez probablement beaucoup de fruits faciles à jouer rien qu'en jouant à votre jeu et en regardant les autres jouer. Mais notez la partie importante - pour y arriver, vous avez besoin d'un jeu . Concentre-toi sur ça.
Cerise sur le gâteau, considérez que l'optimisation ne se termine jamais. Ce n'est pas une tâche avec une petite coche que vous terminez et passez à d'autres tâches. Il y a toujours "une optimisation de plus" que vous pouvez faire, et une grande partie de tout développement consiste à comprendre les priorités. Vous ne faites pas l'optimisation pour des raisons d'optimisation - vous le faites pour atteindre un objectif particulier (par exemple, "200 unités à la fois sur l'écran sur un Pentium à 333 MHz" est un excellent objectif). Ne perdez pas de vue l'objectif terminal simplement parce que vous vous concentrez trop sur les objectifs intermédiaires qui pourraient même ne plus être une condition préalable à l'objectif terminal.