0.10 - Système électrique et amélioration des performances

Après de nombreux mois depuis la dernière version, j'ai pu sortir une des versions les plus importante du jeu, celle qui apporte le système de distribution gérant ici les débuts d'un système électrique.

En effet à partir de maintenant, pour piloter votre vaisseau vous aurez besoin d'électricité, et pour en produire il vous faudra des panneaux solaires bien orientés vers le soleil (désormais visible dans l'espace, tiens-toi bien Star Citizen !), une batterie est également disponible pour gérer l'intermittence de la production au fur et à mesure de votre promenade spatiale.

Pour jongler entre la gestion des blocs, des entités et de leurs connexions, vous avez maintenant plusieurs outils à disposition et pouvez changer grâce à un menu radial accessible via la touche Tab (merci à Pytom pour sa contribution).

Vous apercevrez aussi dans le ciel une nouvelle planète un peu particulière, la légende raconte que la raison de son existence est la réponse à la question "Est-ce que je peux le faire ?" mais pas à la question "Est-ce que je dois le faire ?"

Pour protéger vos vaisseaux du vide, plus question d'utiliser des champs de force librement posables (la légende raconte qu'ils feront néanmoins leur retour un jour), à la place on vous propose des portes métalliques étanches, que vous pouvez ouvrir et fermer à volonté.
Améliorations moteur (technique)
Outre beaucoup de petits correctifs qui affectaient le rendu du jeu sur certaines cartes graphiques, le moteur du jeu a subi une grosse amélioration de la façon dont les entités étaient rendues, pour gagner en performance :
Exposition des render queues
Pour la version précédente, toutes les entités rendues (y compris l'UI) faisaient partie de la même file de rendu, et le filtrage 2D/3D se faisait uniquement à l'aide d'un masque de rendu présent à la fois sur les entités et les caméras.
Aujourd'hui, le rendu 2D, le rendu 3D opaque et le rendu 3D transparent appartiennent à des render queues explicitement séparées, ce qui permet de devoir reprocess partiellement le rendu. Par exemple l'affichage des FPS, qui évolue toutes les secondes, ne déclenche plus le reprocess du rendu 3D, et donc le ré-enregistrement des commandes de rendus.
GPU Culling
En plus de ça, les render queues étaient régulièrement régénérées (lorsqu'une nouvelle entité entrait ou sortait du champ de vision), ce qui avait un gros coût CPU car cela provoquait le ré-enregistrement des commandes de rendus, et actuellement cela signifie un draw call par chunk (plusieurs milliers).
Pour éviter de devoir réenregistrer ces commandes et accélérer drastiquement le culling (l'action de tester si un objet est dans le champ de vision de la caméra avant de le rendre), Nazara fait maintenant du culling GPU, en calculant la visibilité des objets (frustum culling) à l'aide de compute shaders et de rendu indirect.
Tous les objets de la render queue sont enregistrés en avance à l'aide de commandes de rendu indirecte, permettant à la carte graphique d'activer ou de désactiver elle-même les objets à rendre, tout en profitant de sa grande force de parallélisation.
En résumé
Le jeu est nettement plus performant en terme d'affichage, avec des FPS multipliés par un facteur x3/x4 (50 FPS => 220 FPS sur ma RTX 2080 Ti).
De futures optimisations à venir vont se construire sur cette base, à savoir l'occlusion culling et l'intégration de LOD pour les planètes, permettant de réduire drastiquement le nombre de chunks / triangles à rendre par image. Je vais également faire en sorte de rendre tous les objets identiques avec un même draw call (GPU Instancing) et à terme rendre tous les chunks d'une même planète avec un seul draw call, mais cela demande encore un peu de travail.
Changelog
Principales nouveautés
- Ajout d'outils et d'entités logistiques, avec un système électrique (l'ordinateur du vaisseau nécessite maintenant de l'électricité !).
- Amélioration drastique des performances du moteur par implémentation du GPU culling et du rendu indirect.
- Ajout d'une planète en forme de tore (parce que pourquoi pas).
- Le soleil est maintenant visible depuis l'espace en tant qu'effet graphique (mais pas encore en tant qu'objet physique atteignable).
- Le bloc champ de force a été enlevé du jeu et remplacé par les portes métalliques.
Autres changements
- Activation des collisions continues au niveau du moteur physique pour les joueurs, pour éviter de passer à travers les planètes à haute vitesse.
- Ajout d'une configuration pour limiter les FPS:
Graphics.FPSLimit. - Ajout d'une configuration pour contrôler la résolution des ombres:
Graphics.SunShadowMapSize. - À cause d'un bug lié à la gestion de l'atmosphère, l'atmosphère des planètes ne décroit plus lors du spawn d'un vaisseau.
- Beaucoup de petits correctifs.
