Glossaire Gamedev Générateurs de séquence et de nombre

Génération procédurale contribue à améliorer la rejouabilité en utilisant des règles internes pour créer des parties du jeu à la volée: de la conception du plan d'un donjon à la construction d'un système solaire. Ces règles sont souvent basées sur une série de nombres qui sont ensuite interprétés par le programme pour créer le contenu requis..

Il existe de nombreuses façons de générer ces chiffres. dans cet article, nous allons regarder Générateurs de séquence et Générateurs de nombres pseudo-aléatoires, et leurs différences.


Générateur de séquence

La première option - un générateur de séquence - est la plus difficile des deux procédures mentionnées. mais qu'est-ce que c'est?

Un générateur de séquence est un algorithme qui utilise une formule mathématique pour produire une séquence de nombres. Par exemple, nous allons regarder une séquence très simple - celle que je vais expliquer est une dérivation de la séquence bien connue de Fibonacci.

Fondamentalement, la séquence standard de Fibonacci commence toujours par 0 et 1. Ces nombres sont ensuite additionnés pour donner 1 - de sorte que les deuxième et troisième nombres de cette séquence sont 1 et 1. Une fois additionnés, le résultat est 2 et il s’agit du quatrième nombre. dans la séquence. La séquence continue ainsi, en ajoutant toujours les deux nombres précédents dans la séquence pour générer le prochain.


La séquence standard de Fibonacci

Implémentation d'un générateur de séquence simple

Programmer un générateur de séquence peut sembler simple, surtout si l’on se base sur la séquence de Fibonacci, mais les premières impressions sont trompeuses. À titre d'exemple, imaginons que nous essayons de créer un champ d'étoiles à deux dimensions comme celui-ci:


Un simple starfield

En regardant ce champ étoilé, nous pouvons voir que chaque étoile peut être définie par ses coordonnées et sa taille. En prenant la plage de chaque valeur entre 0 et 99, nous pouvons ensuite diviser une séquence de nombres en groupes de trois - en interprétant chaque nombre comme étant la coordonnée x, la coordonnée y ou la taille d'une étoile..


Manipulation d'un exemple de séquence

Si vous le faites pas à pas, programmer un générateur de séquence basé sur la séquence de Fibonacci pour créer une séquence similaire n’est pas une tâche difficile..

Nous commençons avec un nombre (appelé une graine) composé de quatre chiffres - par exemple 1234. La graine est ensuite scindée en une paire de nombres à deux chiffres qui remplacent les 0 et 1 de la séquence de Fibonacci. Ces nombres sont ensuite traités à l'aide d'une formule pour produire un troisième nombre dans le flux..

Lors de la création d'un générateur de séquence, vous souhaiterez probablement que les nombres générés se situent dans une plage spécifique (par exemple, 0-99). Il est donc important de tronquer ce nombre s'il tombe hors de portée. (Pour notre exemple, nous pouvons simplement couper la colonne "centaines".) Bien que cela puisse sembler insignifiant, cela facilite le flux de travail lors de la manipulation ultérieure de cette séquence..

Ce processus étant répété, une chaîne de nombres prête à être manipulée est créée et peut donc être implémentée:

Créer une séquence

Malheureusement, ce n'est qu'après avoir implémenté la séquence en tant que dessin 2D que vous commencez à remarquer des motifs récurrents. La plupart du temps, la résolution de ce type de problèmes vous obligera à passer de longues heures d’essais et d’erreurs à tester différents algorithmes..


Générateur de nombres pseudo-aléatoires

La deuxième approche mentionnée ci-dessus utilise un générateur de nombre pseudo-aléatoire (PRNG). Avant d’expliquer ce qu'est un PRNG, gardez à l’esprit que l’ordinateur est une machine logique - il doit obéir à un certain ensemble de règles. Par conséquent, rien dans un ordinateur n'est vraiment aléatoire.

Un générateur de nombre pseudo-aléatoire est juste un algorithme qui produit un flux de nombres (apparemment) aléatoires. Je dis "apparemment" car un PRNG utilise toujours des formules prédéfinies pour générer les nombres. Cela signifie qu'un PRNG est toujours un générateur de séquence..

La propriété clé d'un PRNG par rapport à d'autres générateurs de séquence est qu'elle équilibre le nombre de fois où différents nombres apparaîtront. Ce processus s'effectue à l'aide d'algorithmes et de formules complexes, ce qui signifie que les chiffres qu'il produit apparaîtront aussi variés que les nombres obtenus lors de lancers de dés répétés ou de numéros de loterie gagnants..


Un exemple de séquence PRNG

Alors qu'un générateur de séquence est généralement spécialement conçu pour un problème, un PRNG est utilisé lorsque la séquence générée est généralement ignorée ou n'a pas besoin d'être conservée..


PRNG vs générateur de séquence

Un PRNG est plus facile à utiliser et à mettre en œuvre qu'un générateur de séquence et a diverses utilisations. Malgré cela, il est parfois plus judicieux de faire un effort supplémentaire en utilisant un générateur de séquence. Pourquoi?

Dans les systèmes complexes, il est important d’utiliser au mieux l’espace. L'utilisation d'un PRNG signifie que, pour enregistrer les détails d'un système solaire, vous devez enregistrer l'intégralité de la longue séquence. D'autre part, si vous utilisez un générateur de séquence, vous pouvez simplement sauvegarder le germe initial et la longueur de la séquence. (Dans ce cas, il est crucial que le générateur de séquence produise la même séquence à partir d'une graine donnée.) On ne peut pas en dire autant des PRNG: en général, un PRNG n'expose pas sa graine, ni ne l'accepte. Cela rend extrêmement difficile la réplication d'une séquence PRNG.

Parfois, bien que rarement, un PRNG pourrait vous donner une séquence apparemment biaisée (de la même manière qu’une pièce de monnaie peut parfois toucher cinq fois de suite). Cela peut ne pas être facile à détecter à première vue, ou quand vous regardez la séquence dans son ensemble. Cependant, lorsque vous regardez l'image produite, vous remarquerez peut-être des groupes d'étoiles ou de planètes. En utilisant un générateur de séquence, ce problème peut être minimisé puisqu'un tel algorithme est adapté au problème à résoudre.

Un autre avantage, similaire au précédent, est contrôle de contenu. Lorsque vous voulez générer procéduralement un champ d'étoiles éloigné, il est naturel que vous souhaitiez que les petites étoiles apparaissent plus souvent que les grandes. En utilisant un PRNG non modifié, ce biais n'est pas possible. Cependant, en utilisant un générateur de séquence, vous pouvez fournir vous-même le biais requis. Encore une fois, tout se résume à la formule ou aux formules que vous décidez d'utiliser et à la façon dont vous interprétez la chaîne résultante..

Bien qu'un PRNG puisse être utile, lors de la création d'un moteur de génération procédurale, il serait probablement préférable de choisir un générateur de séquence plus spécifique. Les avantages qu’elle apporte sont bénéfiques et garantissent que la mise en œuvre a une possibilité accrue de se distinguer des autres..