Astral Shipwright

Un jeu de construction de vaisseau sur PC

a marqué ce sujet comme résolu.

Hello !

Après Helium Rain que vous avez peut-être suivi, je remets le couvert avec un nouveau projet indépendant, Astral Shipwright. Cette fois, il s’agit de construire et améliorer votre propre vaisseau en faisant commerce de ressources.

Si les mécaniques de jeu au-delà de la construction n’en sont encore qu’aux balbutiements, j’ai déjà quelques petites idées - notamment détecter, analyser et miner des astéroïdes ; ou encore transporter de la contrebande. Les détails se préciseront au fur et à mesure !

La technique

Quelques détails techniques:

  • développé depuis un an, Astral Shipwright sortira en septembre prochain sur Steam (et peut-être d’autres plate-formes) en Early Access ;
  • le jeu est développé avec Unreal Engine 5 ;
  • comme d’habitude, Blender est aux manettes pour la production 3D ;
  • le projet est bien entendu sous licence libre ;
  • et c’est cette-fois ci un projet en solo !

Plus particulièrement, le projet est comme pour Helium Rain l’occasion de tester toutes les technologies modernes. Je mets déjà à profit Lumen, la technologie de réflexions en temps réel d’Unreal Engine 5, pour obtenir les effets miroir impensables il y a quelques années. Nanite, la technologie qui permet des densités de géométrie incroyable, sera certainement employée sur les éléments de décor. Des outils quasiment classiques maintenant comme le ray-tracing et DLSS sont également de sortie.

Communauté

Le marché du jeu vidéo étant ce qu’il est, il y a cette fois bien plus de contenu en anglais autour du jeu. Notamment un serveur Discord, une première entrée dans le devblog du jeu pour apprendre à fabriquer des planètes dans un jeu vidéo, et une petite vidéo d’aperçu dans laquelle je présente, avec un accent infernal, les premiers éléments du jeu. L’objectif ici, c’est donc de discuter du jeu en français pour ceux que ça intéresse !

Process graphique

L’objectif ici n’est pas de passer à nouveau 5 ans sur un projet, et tout le process de création a donc été optimisé pour. Plus question ici de produire plusieurs textures manuellement pour chaque objet, les textures sont automatisées et reposent à la fois sur une génération procédurale dans Blender, ainsi que sur des matériaux intelligents dans Unreal.

Texture procédurale dans Blender
Texture procédurale dans Blender
Résultat dans Unreal
Résultat dans Unreal

Si vous voulez tout savoir sur le projet, n’hésitez pas !

J’ai compris jusqu’ici que c’est une sorte d’Helium Rain 2, avec comme principale différence de gameplay le fait qu’on puisse faire des vaisseaux sur mesure, personnalisés (et non juste quelques upgrades sur des modèles pré-construits).

+2 -0

Pardon mais, je ne saisis pas la différence avec Helium Rain ?

ache

La différence est en fait assez fondamentale, c’est qu’on construit ses propres vaisseaux de façon modulaire. Chaque vaisseau est construit à partir d’une série de compartiments, qui accueillent chacun un ou des modules (les composants principaux) et des équipements (des composants secondaires). Au lieu de gérer une flotte de vaisseaux, il s’agit donc ici de fabriquer et optimiser un unique véhicule !

Salut !

Je suis allé lire le devblog, sur la création des planètes. Y a quelques points qui m’ont interpellé :

  • Est-ce qu’il n’y avait pas une projection plus adaptée que Mercator ? En vrai, l’idéal serait d’avoir une texture sphérique, mais j’imagine que ce serait une purge à faire techniquement.
  • En te basant du coup sur Mercator, tu n’as détaillé que la bande autour de l’équateur, et plus ou moins abandonné les pôles. Du coup, ça veut dire qu’on ne pourra pas orbiter autour des pôles ?

Merci en tout cas pour l’article. Comme ceux que tu as écrits ici, je trouve que ça permet d’avoir un aperçu très accessible de ce que c’est que la conception non-naïve des jeux-vidéos :)

Edit : par ailleurs, il me semble que tu étais également professionnel du jeu vidéo. Mais tu n’as jamais mis en avant les projets sur lesquels tu avais travaillé, perso ça m’intéresserait, sauf si tu ne souhaites pas en parler ^^

+1 -0

Alors déjà je dois me corriger moi-même, parce que ce n’est même pas du Mercator mais une projection plate carrée (équirectangulaire) - ça ne change pas grand chose mais soyons corrects… Illustration ci-dessous. Mercator espace différemment les latitudes pour conserver les azimuts, ici c’est une simple projection UV.

Projection équirectangulaire
Projection équirectangulaire

Ensuite, effectivement, on peut imaginer des projections bien plus efficaces, par exemple une sorte de Mercator inversée dans laquelle on mettrait tout l’espace au niveau de l’équateur et quasi rien aux pôles. Le truc, c’est que fondamentalement, on n’échappe pas à un problème simple : peindre une sphère en 2D introduit inévitablement des distorsions. Il n’y a pas de bonne méthode, il y a une gradation de "vraiment nul" à "plutôt bof".

Mais surtout, dans notre cas, où les poles sont effectivement invisibles à dessein comme tu l’as deviné - pour garder une carte orbitale en 2D - la question de la projection devient hautement secondaire puisqu’on n’utilise en réalité quasiment que cette bande centrale, dans laquelle la distorsion est quasi nulle. Une projection équirectangulaire devient même très utile puisque la logique dans le shader devient aussi plus simple.

C’est volontaire, ou c’est uniquement à cause des limitations techniques, du coup ?

Moté

Ce qui est volontaire c’est de peindre sur un espace 2D continu et rectangulaire - pas question d’utiliser une projection Robinson ou une des nombreuses projection en origami avec des découpes pour laquelle il serait quasi impossible de masquer les découpes. Partant de là, une fois la projection contrainte par ça, le reste est expliqué dans l’article, il s’agit simplement de n’allouer des pixels que là où c’est utile.

Aujourd’hui, c’est la technologie Nanite d’Unreal Engine 5 qui est mise à l’épreuve pour la première fois avec un morceau de station à 1.4 millions de triangles. Cette technologie permet de virtualiser les objets 3D - c’est-à-dire que le mesh 3D est découpé en morceaux qui peuvent chacun se charger à une précision variable, depuis la version d’origine jusqu’à une version complètement transformée avec deux ou trois triangles. Objectif : un triangle derrière chaque pixel à l’écran…

Un mesh Nanite
Un mesh Nanite

Il aura fallu quelques essais, mais la technologie est assez bluffante !

Hello @Stranger ! (je te vois souvent sur Unreal Slackers, même si j’y suis plus discret)

Content de te voir de retour avec un nouveau projet qui te donne en plus l’opportunité de jouer avec Lumen et Nanite.

Edit : par ailleurs, il me semble que tu étais également professionnel du jeu vidéo. Mais tu n’as jamais mis en avant les projets sur lesquels tu avais travaillé, perso ça m’intéresserait, sauf si tu ne souhaites pas en parler ^^

Pourquoi pas, mais pas forcément sur ce sujet ici. Autant le garder pour le projet en lui-même. :)

+3 -0

Sij’aibien comoris, sur ton image, il diminue dynamiquement le nombre de polygones à l’intérieur même du modèle ?

Moté

En résumé, Nanite part d’un mesh très détaillé (environ 2 millions de triangles pour chacune des 8–9 pièces visibles sur l’image précédente), le découpe en clusters, de petits morceaux qui sont eux rendus individuellement à une qualité variable suivant leur taille à l’écran. Les radiateurs rougeâtres de l’image sont découpés principalement autour des tuyaux, par exemple.

Le résultat est donc impeccable de près ou de loin (détail élevé, peu d’aliasing), et les performances sont excellentes (0.6ms pour la géométrie Nanite dans cette scène sur une RTX 3070, ce n’est pas rien mais c’est loin d’être dans le top 5 des éléments de rendu les plus coûteux). On a au final environ un triangle par pixel comme la vue suivante le montre.

Ces clusters, ça correspond à des mini-meshs ? Ça veut dire que ça doit pas mal impacté l’occupation en RAM, non ? J’imagine qu’on ne peut pas appliquer Nanite à tous les éléments d’une scène, voir que l’option doit être désactivable ou configurable selon les performances de la machine du joueur ?

+1 -0

Ces clusters, ça correspond à des mini-meshs ? Ça veut dire que ça doit pas mal impacté l’occupation en RAM, non ? J’imagine qu’on ne peut pas appliquer Nanite à tous les éléments d’une scène, voir que l’option doit être désactivable ou configurable selon les performances de la machine du joueur ?

Moté

Le coût en mémoire est en fait très gérable : chaque objet fait dans les 30MB, c’est le poids de deux textures 4K environ. Pouvoir se passer d’une normal map dédiée pour cet objet rembourse déjà la moitié du coût, et l’existence des autres textures, toujours nécessaires, rend l’augmentation totale pour un objet complet assez anecdotique (peut-être 10%?).

Mieux encore, la technique se prête extrêmement bien à deux autres nouveautés d’Unreal 5 (Lumen et les ombres virtuelles), au point où même un objet low poly classique est rendu plus rapidement via Nanite. On peut donc absolument appliquer Nanite partout, dans la mesure où les objets le permettent - pas de transparence ou déformation - et ce n’est pas optionnel puisque les éléments 3D n’ont pas de version low poly traditionnelle.

Le résultat est donc impeccable de près ou de loin (détail élevé, peu d’aliasing), et les performances sont excellentes (0.6ms pour la géométrie Nanite dans cette scène sur une RTX 3070, ce n’est pas rien mais c’est loin d’être dans le top 5 des éléments de rendu les plus coûteux). On a au final environ un triangle par pixel comme la vue suivante le montre.

Stranger

Est-il prévu de tester sur des machines bien plus modestes ? Juste pour savoir jusqu’où on peut aller (ou voir de façon plus flagrante le gain de perfs).

+1 -0

Est-il prévu de tester sur des machines bien plus modestes ? Juste pour savoir jusqu’où on peut aller (ou voir de façon plus flagrante le gain de perfs).

Breizh

Oui, il y aura des essais, même si pour l’instant la config minimale n’est pas franchement définie. En théorie, le jeu devrait être relativement facile à faire tourner pour son époque, même si je recherche plutôt la qualité et la productivité dans le développement que l’optimisation extrême.

A noter que le jeu supporte déjà l'upscaling d’UE5 qui est relativement bluffant en qualité en rendant le jeu à une résolution bien inférieure, ainsi que DLSS qui est un peu mieux mais exige une RTX 20X0 ; ainsi évidemment que tous les réglages usuels de qualité.

Hello !

Au menu de ce mois de janvier, c’est exclusivement du code qui a été produit… Pas moins de 92 commits dans l’historique, avec énormément de travail de fond sur les fondamentaux:

  • des améliorations de la navigation orbitale, qui se fait de manière automatisée ;
  • un menu "contrôle" dans lequel on donne les commandes du vaisseau ;
  • l’ajout de vaisseaux IA ;
  • un mécanisme (pour le développement) de création de vaisseau IA via l’éditeur de vaisseau du jeu ;
  • la simulation orbitale d’astéroïdes, que l’on peut approcher sans interaction ;
  • de nombreuses améliorations des menus.
Menu de commerce
Menu de commerce

Aucun contenu ce mois-ci, donc, mais de bons fondamentaux !

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte