Pourquoi cette génération de contenu procédural alors que cette autre ne l'est pas?

18

Je lis le livre en ligne sur la génération de contenu procédural et au chapitre 1, page 2, il y a un exemple de ce qu'est PCG et un autre de ce que PCG n'est pas et je ne peux pas les distinguer.

C'est PCG selon eux:

middleware de moteur de jeu qui remplit rapidement un monde de jeu de végétation

Ce n'est PAS PCG selon eux:

un moteur de jeu capable d'intégrer une végétation générée automatiquement

Également à la page 1, ils ont dit explicitement qu'ils ne considéraient pas un moteur de jeu PCG

Un terme clé ici est «contenu». Dans notre définition, le contenu est la majeure partie de ce qui est contenu dans un jeu: niveaux, cartes, règles du jeu, textures, histoires, objets, quêtes, musique, armes, véhicules, personnages, etc. Le moteur du jeu lui-même n'est pas considéré comme du contenu dans notre définition.

Je suppose que l'exemple PCG est un code dans un jeu (ou ce pourrait être un code qui s'adapte à n'importe quel jeu) qui reconnaît la carte du jeu et la remplit de végétation en fonction. Et l'exemple non PCG pour moi serait comme une option disponible dans le moteur de jeu où le développeur peut ajouter la végétation hors ligne via l'interface utilisateur.

Le dernier est une supposition très très sauvage de ma part, je suis presque sûr que je me trompe car à première vue, ils sonnent tous les deux comme PCG. S'il vous plaît, aidez-moi à les différencier.

Adocad
la source
9
Comparez deux hommes: A entre dans une pièce, la regarde, construit des meubles en fonction de la pièce et place les meubles dans la pièce. B fait de même, mais il se rend chez IKEA (les personnes qui ont construit les meubles) pour faire installer des meubles dans la pièce. Diriez-vous que A et B créent des meubles? C'est la différence qu'ils essaient de souligner. À moins que vous ne créiez les meubles à partir de zéro, vous ne créez pas réellement de meubles, vous utilisez simplement les meubles existants de nouvelles façons.
Flater

Réponses:

27

Par analogie

Un circuit ne génère pas d'électricité. Une ampoule ne produit pas d'électricité. Une batterie ne génère pas d'énergie. Aucune des choses qui utilisent ou stockent l'énergie produite , ne sont des générateurs d'énergie.

Un générateur à essence est un générateur de puissance . Une configuration de panneau solaire est un générateur électrique . On peut s'attendre à ce qu'ils génèrent spontanément lorsqu'ils sont lancés. D'autres choses peuvent utiliser l' énergie qu'elles génèrent: les réfrigérateurs et les téléviseurs et les PC, les radiateurs et les ampoules.

De même, tout code ou programme qui génère réellement du contenu lui-même au moment de l'exécution est PCG. Les autres ne sont que des utilisateurs de ce contenu généré de manière procédurale (PGC). Maintenant,

Génération de contenu procédural

n'est pas la même chose que

Contenu généré de manière procédurale

PGC est l'artefact résultant d'un processus (programme) qui s'engage dans PCG.

PCG est développé (programmé) à un point où il peut produire de manière autonome du contenu selon certaines spécifications, mais dans (généralement) d'innombrables variations; PGC est ainsi généré comme une seule variation des espaces de contenu possibles autrement illimités dans cette spécification algorithmique plus large. Les PGC sont finis et statiques une fois générés. Les PCG traitent de l' infini (ou assez près).

Adressage des détails

La «génération de contenu procédural» fait référence au code / aux applications qui génèrent du contenu.

Tout jeu peut être considéré comme un jeu PCG si, à l'exécution, il génère dynamiquement du nouveau contenu via une partie de son jeu d'instructions.

Si vous (ou votre moteur) utilisez un autre code de programme qui génère du contenu, puis incluez ce contenu dans votre jeu au moment de la compilation / construction , alors votre jeu (et son code) n'est PAS PCG. Par conséquent:

un moteur de jeu capable d'intégrer une végétation générée automatiquement

... n'est pas PCG, car ce moteur lui-même ne produit pas de nouveau contenu au moment de l'exécution, il utilise simplement du contenu généré d'ailleurs, qui a été manuellement inclus par des artistes, concepteurs ou développeurs.

reconnaît la carte du jeu

PCG n'a rien à voir avec la reconnaissance. Il s'agit de faire le travail actif de création de contenu. En général, les applications PCG produisent leur propre format de données qu'elles peuvent déjà comprendre et utiliser. Ils ne lisent généralement pas dans des sources externes, bien que lorsqu'ils le font, il s'agit simplement d'une vieille logique de programme ... pas de PCG en tant que tel. PCG est une question de génération . D'où PCG et non PCR :)

Perspectives historiques

Ce que nous considérons comme du «contenu» dans ce contexte couvre généralement les choses que, dans le passé, les humains ont produire par eux-mêmes. Par exemple, dans les années 70 et 80, à peu près tous les jeux (à l'exception de quelques-uns très spéciaux) devaient avoir leur art, son scénario, sa musique, son nom de personnage et de planète, etc., produit par un être humain . C'était l' opposé polaire de PCG.

PCG a commencé quand les programmeurs jeu réalisé qu'au lieu de l'embrouillamini des artistes d' embauche, musiciens, écrivains , etc. - et encore intégrer leur travail avec le code, ou pire encore, faire tout ce travail eux - mêmes , ainsi que le codage - ils pourraient au lieu d'écrire des programmes pour générer tout ça pour eux. Ces efforts ont été parmi les premières fonctions, modules et programmes véritablement PCG. Un exemple parfait est le XCom / UFO original , où le code du jeu génère un niveau complètement unique pour vous avant le combat. Plus tôt encore (1979) était Temple d'Apshai .

Elite était un cas différent: une partie de son contenu a été générée lorsque le jeu était en cours de développement; non seulement ce code a été écrit par les mêmes auteurs, mais aussi que le contenu pré-généré était généralement utilisé au moment de l'exécution elite.exe(c.-à-d. lorsque vous le joueur exécutiez le jeu) par d' autres générateurs qui faisaient partie du code du jeu , créant le monde que vous joué.

Un exemple plus récent est Minecraft (et d'autres jeux qui s'en inspirent) où le monde génère littéralement autour de vous lorsque vous vous dirigez vers l'horizon, grâce en grande partie à la puissance de calcul moderne. Comparez cela à Rogue ou Moria joué sur un PC-XT dans les années 1980, pour lequel vous devrez peut-être vous attendre à ce que le niveau soit généré! (en fonction des paramètres de jeu choisis).

Tous les PCG ne sont pas historiquement enracinés dans l'industrie des jeux. Par exemple, il y a ceux qui écrivent des générateurs de fiction. Par exemple, Ken Perlin dans le domaine des graphiques et de la géométrie informatique a créé l'algorithme Perlin Noise, pour lequel il a par la suite reçu un prix académique. Par exemple, le musicien Brian Eno s'est depuis longtemps engagé dans la génération procédurale de partitions musicales. Et comme autre exemple, les jeux de société non numériques comme HeroQuest / Warhammer Quest ont depuis longtemps inventé une dynamique procédurale pour créer un plateau de jeu différent sur chaque jeu.

Ingénieur
la source
6
Une exception technique très mineure - il y avait un projet / jeu de recherche de preuve de concept dans lequel le jeu lui-même était généré de manière procédurale. Autrement dit, les objectifs, les règles et, dans une certaine mesure, la représentation ont tous été générés dynamiquement au moment de l'exécution. Cela brouille quelque peu la frontière entre le contenu et le moteur, mais le test décisif de "génère-t-il" est toujours valable. Excellente distillation.
Pikalek
3
@Pikalek Je suis entièrement d'accord avec cette ligne de pensée. Nous pouvons aller aussi loin que Lisp - qu'il n'y a finalement pas de distinction entre les instructions et les données. Je ne voulais pas trop compliquer les choses dans la réponse. Merci d'avoir commenté.
Ingénieur
2
@Adocad: Je pense que vous avez manqué un détail mineur dans la réponse: "Si vous (ou votre moteur) utilisez un autre code de programme qui génère du contenu , puis incluez ce contenu dans votre jeu au moment de la compilation / construction, votre jeu ( et son code) N'EST PAS PCG " Si vous aviez inclus le programme dans votre jeu, au lieu du contenu généré par le programme, et que votre jeu déclencherait le programme quand il le fallait (localement, sur l'ordinateur d'un joueur), alors ce serait en effet PCG hors ligne. Mais ce n'est pas le cas lorsque vous incluez simplement un résultat d'une génération PCG (qui est maintenant statique).
Flater
2
@AC: Je pense que la distinction est plus claire lors de son étiquetage en tant que contenu généré de manière procédurale ou génération de contenu procédural .
Flater
4
@Flater Merci, c'est une meilleure façon de le dire - le contenu généré de manière procédurale peut être généré hors ligne et / ou à l'exécution, mais la génération de contenu procédural est explicitement à l'exécution. (Notez qu'un outil qui génère du contenu qui sera ensuite compilé en est fait PCG, mais après que le contenu a été pré-généré et compilé, le jeu qui utilise ce contenu est pas fait PCG)
AC