5 points par GN⁺ 2024-07-29 | 1 commentaires | Partager sur WhatsApp
  • Aperçu du projet

    • Je travaille depuis plusieurs années sur des scènes 3D et des niveaux exécutés dans le navigateur
    • Au départ, cela a commencé comme des démos séparées, puis a progressivement évolué vers des projets interconnectés proches de jeux
    • Certaines fonctionnalités sont mises en œuvre à l’aide de techniques procédurales et génératives
  • Shaders + textures

    • La plupart des textures sont conçues pour être sans jointure, afin qu’aucun motif répétitif n’apparaisse même sur de grandes surfaces
    • Des shaders personnalisés ont été créés dans Three.JS pour fournir des fonctionnalités supplémentaires
  • Triplanar Mapping

    • Permet d’appliquer des textures à un mesh sans UV map, ce qui est utile pour les terrains générés procéduralement
    • Peut être mis en œuvre simplement et appliqué à différents meshes
    • La fonction pow() est utilisée pour ajuster les pondérations, améliorer la qualité et optimiser les performances
  • Hex Tiling

    • Algorithme qui masque la répétition des textures sans jointure
    • Porté en bibliothèque autonome, facile à intégrer dans des projets Three.JS
    • Nécessite une UV map et entraîne un surcoût important en performances
  • Depth Pre-Pass

    • La scène est rendue deux fois pour enregistrer la profondeur des pixels et améliorer les performances
    • Peut améliorer les performances de plus de 30 % dans les scènes avec beaucoup d’overdraw
  • Synthèse de textures PBR pilotée par l’IA

    • Des textures générées par IA sont utilisées pour améliorer la qualité de la scène
    • DeepBump et Materialize sont utilisés pour générer des maps PBR
  • Brouillard/nuages volumétriques

    • Développement de shaders qui ajoutent des nuages ou du brouillard à la scène
    • Utilisation d’un lookup de bruit LoD pour ajouter diverses fonctionnalités
  • Meshes + géométrie

    • Étude de techniques pour générer et déformer des meshes à l’exécution
    • Principalement pour générer procéduralement des éléments décoratifs ou d’arrière-plan
  • Terrain LoD

    • Le terrain est généré à l’aide de fonctions de bruit, avec une résolution ajustée dynamiquement selon la distance à la caméra
  • Pipeline de traitement et de manipulation procédurale des meshes

    • Construction d’un pipeline pour subdiviser et déformer procéduralement des meshes low poly
    • Le traitement des normales demande beaucoup d’efforts
  • Travaux futurs

    • Prévoit d’utiliser la Constructive Solid Geometry (CSG) pour fusionner ou découper des meshes
    • Envisage un portage en Rust afin de mieux comprendre ces techniques

Le résumé de GN⁺

  • Cet article présente diverses techniques et divers outils utiles au développement procédural de jeux
  • Des techniques de texturing comme le Triplanar Mapping et le Hex Tiling permettent d’améliorer à la fois les performances et la qualité
  • La génération de textures par IA et les shaders de brouillard/nuages volumétriques renforcent le réalisme de la scène
  • Des travaux futurs comme la Constructive Solid Geometry offrent un fort potentiel pour la transformation de meshes
  • Parmi les projets aux fonctionnalités similaires, on peut citer ProBuilder de Unity et Houdini

1 commentaires

 
GN⁺ 2024-07-29
Commentaire Hacker News
  • J’ai déjà essayé la génération procédurale par le passé

    • En particulier, j’ai tenté de créer de beaux arbres
    • J’ai eu l’impression qu’il manquait une bonne méthode pour raccorder facilement la géométrie
    • Créer deux cylindres est facile, mais les relier est très difficile
    • En théorie, le CSG pourrait combler ce manque, mais c’est compliqué car il faut modéliser en formes 3D
    • J’ai essayé d’écrire une routine pour relier deux boucles, mais cela ne fonctionnait pas bien
    • Plus tard, j’aimerais créer un jeu dans lequel un système modulaire de génération procédurale fonctionne de lui-même
  • Une bonne génération de terrain n’est pas simple

    • C’est difficile aussi bien à l’échelle du monde qu’à hauteur d’homme
    • Les approches simples génèrent des height maps bosselées qui ressemblent peu à la réalité
    • Dwarf Fortress part d’un simple midpoint displacement puis y ajoute beaucoup de travail personnalisé
  • C’est un excellent article sur les techniques procédurales sur le web

  • J’ai eu des expériences mitigées avec l’utilisation d’un depth pre-pass

    • Les quelques fois où j’ai essayé, je n’ai pas constaté de gain de performance notable sur des GPU desktop milieu à haut de gamme
    • Je ne sais pas exactement pourquoi, mais cela peut venir du fait que l’early-Z rejection économisait déjà des invocations du pixel shader
    • En général, je rends les meshes opaques de l’avant vers l’arrière
    • Pour être honnête, mes expérimentations se situaient dans le contexte d’applications CAD/CAM plutôt que de jeux
    • Les scènes contenaient très peu de textures et une géométrie à très grand nombre de polygones, contrairement à un environnement de jeu classique
  • En tant qu’artiste 3D, j’ai trouvé cet article très intéressant

    • Les bons articles sur ce sujet sont très rares
    • Je vais probablement essayer Three.js