Mise à jour du terrain 2018.3 : Premier pas

Nous avons maintenant une équipe dédiée au terrain, et nos premiers efforts seront bientôt accessibles au public ! Unity 2018.3 sera livré avec une mise à jour du système de terrain. Cette mise à jour permet d'améliorer les outils et les performances en tirant un meilleur parti du GPU. Il ajoute également la prise en charge des pipelines de rendu HD et LW, tout en étant rétrocompatible avec le pipeline de rendu intégré et le système Unity Terrain existant.
Téléchargez dès maintenant la version bêta d'Unity 2018.3 pour bénéficier d'un accès anticipé aux mises à jour ! Veuillez noter que l'interface utilisateur et l'API sont encore susceptibles d'être modifiées, car la version bêta est encore en cours de développement.
En ce qui concerne les performances, nous avons ajouté un chemin de rendu équilibré par le GPU pour le terrain. Dans la plupart des cas, l'instanciation permet de réduire considérablement le nombre d'appels de tirage au sort. Plusieurs de nos tests ont révélé une réduction de plus de 50 % des coûts de CPU (bien que, bien entendu, les chiffres réels dépendent de votre plateforme et de votre cas d'utilisation). Vous pouvez choisir ce nouveau chemin de rendu en activant l'option "Dessin instancié" dans les paramètres du terrain :

Lorsque cette option est activée, Unity transforme toutes les données de terrain lourdes, comme les cartes de hauteur et les cartes d'éclaboussures, en textures sur le GPU. Au lieu de construire un maillage personnalisé pour chaque parcelle de terrain sur le processeur, nous pouvons utiliser l'instanciation GPU pour répliquer un seul maillage et échantillonner la texture de la carte d'altitude pour produire la géométrie correcte. Cela réduit la charge de travail de l'unité centrale du terrain de plusieurs ordres de grandeur, car quelques appels de dessin instanciés remplacent potentiellement des milliers de dessins de maillages personnalisés.
L'effet secondaire est qu'il améliore également nos temps de chargement ! Non seulement nous pouvons éviter de construire tous ces maillages personnalisés, mais nous pouvons également utiliser le GPU pour construire le basemap (texture LOD pré-mélangée) ; le GPU est beaucoup plus rapide pour ce genre de choses. Cela signifie également que si vous avez votre propre shader de terrain personnalisé, vous pouvez désormais remplacer le shader "build basemap" et générer des textures LOD basemap correspondantes.
L'instanciation améliore également l'apparence des normales du terrain ; nous découplons les normales du maillage du terrain de la géométrie en les stockant dans une texture de carte de normales générée à partir de la carte de hauteur et échantillonnée dans le nuanceur de pixels. Cela signifie que les normales sont indépendantes du niveau de LOD du maillage. Par conséquent, vous pouvez augmenter le "taux d'erreur des pixels" pour réduire le coût des vertex, avec moins d'artefacts.

Nous avons également développé des shaders de terrain pour les pipelines de rendu HD et LW, disponibles dans les versions 4.0.0 ou ultérieures, avec la prise en charge du rendu instancié et des normales par pixel. Le nuanceur HD a été amélioré pour prendre en charge de nouvelles fonctionnalités telles que les modes de fusion de la hauteur et de la densité, la mise à l'échelle des normales, la métallisation et le lissage de la surface contrôlés par la texture. Le nuanceur de terrain HD est limité à une seule passe, mais il permet de mélanger jusqu'à 8 couches de terrain en une seule passe.
Du côté de l'éditeur, nous avons exposé une API de script pour créer vos propres outils de terrain personnalisés, ainsi qu'une suite de fonctions utilitaires que vous pouvez utiliser pour mettre en œuvre facilement des opérations de sculpture et de peinture transparentes entre les tuiles sur le GPU. La nouvelle interface TerrainAPI comprend TerrainPaintTool<T0>, une classe de base pour les outils de terrain, et TerrainPaintUtility, qui contient des fonctions utilitaires pour la modification des données de terrain.
En appliquant ces changements, nous avons converti tous les outils de terrain existants en opérations GPU. En plus de rendre ces outils beaucoup plus rapides, cela nous a permis d'obtenir des pinceaux de plus grande taille, des aperçus de pinceaux améliorés et la possibilité de peindre sur les bordures des tuiles de terrain avec un assemblage automatique des coutures.

Nous avons également commencé à expérimenter des fonctions de brossage telles que la rotation et la randomisation des brosses, ainsi que des outils de peinture plus avancés, tels que l'estampillage de heightmaps et de maillages, les brosses de clonage, etc. Ces outils de peinture ne sont pas encore disponibles dans la version 2018.3, mais nous les mettons à disposition via notre projet GitHub Terrain Tools.

Nous avons facilité l'utilisation de plusieurs tuiles de terrain. Outre la peinture transparente entre les terrains, vous pouvez désormais gérer automatiquement les connexions entre les terrains voisins. Auparavant, il fallait écrire un script pour connecter manuellement les voisins.
Activez la fonction "Connexion automatique" dans les paramètres du terrain, et le terrain se connectera automatiquement à ses voisins ayant le même ID de groupement.
Lorsque vous agrandissez votre terrain existant, vous pouvez utiliser notre nouvel outil "Créer un terrain voisin" pour ajouter rapidement des tuiles de terrain correspondantes le long des bordures vides.

Nous travaillons également à rendre les changements de taille et de résolution moins destructifs. Dans la version 2018.3, les cartes de hauteur et d'éclatement seront rééchantillonnées lorsque vous modifiez leur résolution, au lieu d'effacer les données et de perdre tout votre travail comme c'était le cas auparavant. Nous nous efforçons d'améliorer toutes les opérations de redimensionnement dans un avenir proche.
Afin de simplifier les flux de travail, nous avons également créé deux nouveaux types d'actifs liés au terrain : l'actif TerrainLayer et l'actif Brush.

TerrainLayer nous permet de définir les matériaux du terrain indépendamment de l'objet terrain, de sorte que nous pouvons facilement suivre le même matériau sur plusieurs terrains. Cela permet de peindre et de modifier les matériaux de manière transparente. Nous étendons également l'actif TerrainLayer pour prendre en charge les textures "mask map", qui peuvent être utilisées à des fins d'ombrage arbitraires, et une interface de script pour fournir une interface graphique personnalisée dépendante des shaders pour l'actif TerrainLayer.

Le pinceau représente les formes de pinceau GPU utilisées par les outils de peinture et de sculpture. Ils sont désormais définis par une texture et une courbe de falloff radiale. Il est ainsi beaucoup plus facile de créer et de modifier les formes des pinceaux (ce qui nécessitait auparavant de déposer des fichiers images élaborés de manière artisanale dans un dossier spécialement nommé).
Nous avons également ajouté à Unity la prise en charge du format de texture R16 (un format 16 bits à canal unique). Cela nous permet d'éviter la quantification sur 8 bits de nos formes de brosse, qui peut provoquer des effets de "terrassement" indésirables si elle est utilisée comme tampon d'image de hauteur.

Notre équipe de terrain n'en est qu'à ses débuts et le développement se poursuit. N'hésitez pas à nous faire part de vos commentaires dans le forum World Building!
