Fabrication de lune procédurale

image

Il n'y a pas si longtemps, nous avons créé un système de création de lune. Notre objectif était de créer des lunes de taille et de composition similaires à celles existant dans notre système solaire. La principale difficulté a été d'obtenir les vastes surfaces de ces lunes et leurs intérieurs, de sorte qu'elles restent intéressantes. De plus, nous avions besoin que les lunes soient rendues avec des détails clairs, quelle que soit leur distance.

Le système suppose que les lunes ont une base sphérique. La création d'un maillage géodésique est appliquée à la sphère de base, ce qui garantit la même zone de toutes les parties de la surface. Le système applique cette structure uniquement comme une grille de calcul pour la génération procédurale; la surface réelle de la lune sera beaucoup plus lisse que la grille de génération.


Sphère géodésique

Pour obtenir de petites lunes dentelées, les formes géométriques de base sont déformées par le bruit 3D basse fréquence.


Sphère d'arpentage déformée par le bruit

À partir de cette fondation, le système utilise une série de coques concentriques. Chaque cellule détermine les caractéristiques volumétriques de la coque concentrique suivante. L'enveloppe extérieure définit les propriétés de surface de la lune.


Coquille concentrique

Chaque revêtement peut être déformé par le bruit 3D basse fréquence propre à ce revêtement. Si vous choisissez cette option de génération, la coque interne peut même être plus grande que la coque externe.


Distorsion de coque

Dans les diagrammes ci-dessus, la distance entre les coques et la quantité de distorsion sont exagérées pour montrer plus clairement le processus de construction. En pratique, les coques seront beaucoup plus proches les unes des autres et l'ampleur de leur distorsion sera proportionnellement plus petite.

Ci-dessous, nous parlerons de la façon de créer le shell le plus externe. Les mêmes principes s'appliquent lors de la création de coques internes, nous ne les examinerons donc pas en détail.

Un système lunaire procédural nécessite un composant en temps réel et un composant hors ligne. Le composant en temps réel s'exécute sur l'ordinateur du lecteur. Le composant hors ligne s'exécute sur les ordinateurs des développeurs de jeux. Le composant de génération hors ligne crée des informations qui peuvent être rapidement complétées par un composant en temps réel.

Chaque sommet d'une coquille sphérique est classé comme appartenant à un biome distinct. Un biome est un ensemble de propriétés de surface, notamment: la hauteur, la distribution des matériaux, le placement des échantillons et la coloration des matériaux.


Exemple de biome

Les informations sur le biome contiennent des propriétés riches en entropie, telles que des cratères, des mers sèches, des fissures de surface causées par des marées gravitationnelles.


Grand cratère enregistré dans les informations sur le biome

La définition du biome contient également des règles pour le placement des objets qui déterminent l'emplacement, la fréquence et la randomisation des petites pièces - pierres, pavés, corniches, etc.


Instances Rock

Chaque biome est créé à partir d'éléments placés par des tuiles (tuiles) afin que le composant en temps réel puisse appliquer les mêmes informations dans différentes parties de la lune, ainsi que sur d'autres lunes. Les informations sur le biome doivent être générées de manière à permettre une distorsion et un réarrangement rapides, réduisant ainsi le nombre de modèles environnementaux répétitifs et prévisibles.

Le système utilise deux types de tuiles biome: transitionnel et isolé.

Les informations transitoires sur les biomes se produisent dans les zones où le biome passe dans le biome voisin. Des informations sur les biomes isolés se produisent dans les zones où le système garantit l'absence de biomes voisins.

Ces deux modes distincts sont nécessaires car certains éléments des biomes, par exemple les cratères, ne peuvent être situés que dans des zones où le biome ne se transfère pas vers un autre biome, car les transitions entre les biomes peuvent affecter le profil de hauteur et l'apparence des éléments en relief.

Voici un exemple simplifié de la lune, qui utilise trois biomes différents: polaire, tropical et équatorial, colorés respectivement en rouge, bleu et vert.


Lune avec trois biomes

Les zones à biome isolé ont une couleur uniforme; dans les zones à biomes de transition, les couleurs se mélangent.

Le système utilise un ensemble de bruit pré-calculé pour introduire la variabilité dans les zones de transition entre les biomes, créant des transitions intéressantes et uniques d'un biome à l'autre.


Bruit procédural appliqué aux transitions entre biomes

Dans les images ci-dessus, la taille de chaque partie du biome est exagérée par rapport à la taille de la lune, afin de montrer plus clairement la technique de création des biomes. Un site de biome distinct couvrira une superficie d'environ 10 sur 10 km. Une lune d'un rayon de 1 500 km aura une superficie de 30 000 000 km 2 . Pour couvrir cette surface, il faudrait près de 300 000 de ces zones.


Résolution de la grille du biome pour la lune avec un rayon de 1 500 km

La résolution de la grille du biome peut conduire à un très grand nombre de sites de biome. Le système ne suivra pas chacun d'eux individuellement, car l'emplacement de chaque site peut être calculé analytiquement. Un biome pour la plupart des sites peut être attribué à partir d'une carte de biome de haut niveau.

Les cartes du biome de haut niveau déterminent les principales caractéristiques des lunes vues de loin. Le système utilise ces cartes pour générer des détails supplémentaires sous des formes plus proches, préservant l'uniformité de la définition de la lune lors de la visualisation à différentes distances.

Les cartes de biome de haut niveau sont des images 2D qui peuvent être placées à la surface de la lune en utilisant le paramétrage 2D. Chaque point de la carte contient un identifiant numérique du biome dominant à l'emplacement correspondant de la surface ou de la coque intérieure.


Carte du biome 2D

L'image ci-dessus montre une carte avec quatre types de biomes différents (bleu, rouge, jaune et blanc). L'image est superposée à la sphère à l'aide d'un paramétrage 2D. Un paramétrage possible est illustré ci-dessous:


Paramétrage 2D pour la carte d'identification du biome

En plus de la carte d'identification du biome, le système permet l'utilisation d'autres cartes, par exemple, contenant des hauteurs et des couleurs de surface.


Ombre de lune longue distance et rendu

Un pixel dans chaque image peut couvrir 4 km 2 , ce qui rend leur création rentable. Ces cartes de hauteur et de couleur peuvent être générées de manière procédurale ou dessinées par des artistes. Dans un projet qui n'utilise qu'une douzaine de lunes et où chaque lune devrait avoir des propriétés naturelles riches et uniques, il est préférable d'utiliser le travail des artistes à ce stade.

L'image ci-dessous montre le processus de génération de la hauteur de surface de la gaine et d'autres propriétés:


Trois échelles utilisées pour construire la lune

La lune sera composée d'au moins une coquille sphérique. S'il y a plusieurs coques, le système extrude les coques internes en fonction de leur rayon maximal et de la fonction de la hauteur de coque, qui est obtenue en effectuant le processus avec différentes échelles décrites ci-dessus.

Pour chaque coquille, le concepteur de la lune crée une carte de haut niveau de la distribution des biomes, la définition des biomes pour les biomes trouvés sur cette carte et la définition des matériaux trouvés dans ce biome.

Le système considère que l'air est un matériau acceptable, il peut donc être utilisé pour créer des cavités dans n'importe quelle coquille.


Coupe transversale du relief de la lune, sur lequel divers obus sont visibles

Une coque séparée peut également être un objet volumétrique, dont la profondeur est définie par une pile de matériaux. Les informations de la pile sont stockées dans un biome.


Une pile de matériaux composée de six matériaux

Étant donné que les matériaux souterrains remontent rarement à la surface, ils peuvent être décrits avec une résolution beaucoup plus faible que les matériaux de surface des biomes, et l'utilisation du bruit procédural local restera invisible pour le joueur.

La fonctionnalité de la pile de matériaux peut être suffisante pour la mise en page, car certains matériaux de la pile peuvent être assez rares. Le concepteur du biome peut personnaliser la prévalence et le motif de tout matériau sur la pile.

La génération procédurale est effectuée par des shaders GPU et des algorithmes CPU voxel.

Le shader calcule la couleur du fragment pour chacune des trois échelles et mélange ces échantillons en fonction de la distance entre la caméra et le fragment.

Toutes les pièces trop petites pour être enregistrées dans la géométrie. mais affectant toujours la complexité perçue des surfaces, elles sont enregistrées dans des cartes normales générées en temps réel sur la base de la détermination procédurale des matériaux, des biomes ou des cartes de définition de la lune de haut niveau. Pour cette raison, un faible nombre de polygones est maintenu dans la scène.

Vous devez en payer le prix, tant que la lune est visible dans la caméra, le biome et les cartes de définition de haut niveau doivent être stockés dans le GPU. Vous pouvez utiliser le chargement sélectif uniquement des textures de mip nécessaires au rendu de l'échelle actuelle de la lune. La quantité totale de mémoire GPU requise est réduite au minimum en raison du chargement et du déchargement en continu du GPU lors du changement de position de l'observateur.

Lorsque, en raison de la proximité de la caméra, les éléments individuels deviennent suffisamment grands, ils commencent à apparaître dans la sortie de la géométrie à l'aide de la génération de voxels en temps réel. La même chose s'applique à toutes les parties de la lune terraformées ou creusées par les joueurs. Si les changements sont suffisamment importants et peuvent être observés depuis l'orbite, le gestionnaire de scènes adaptatif Voxel Farm augmente le niveau de détail (LOD) de toutes les zones, dont le changement est considéré comme important par l'application.

Source: https://habr.com/ru/post/fr468305/


All Articles