La photogrammétrie dans Unity HDRP

De l'import FBX au rendu de nuage de points brut

Pourquoi Unity pour les assets scannés ?

Unity en mode HDRP s'est imposé comme une plateforme de choix pour intégrer des assets de photogrammétrie. Le retour temps réel sur l'éclairage et la composition permet une itération créative bien plus rapide que les pipelines de rendu offline traditionnels. La qualité de rendu de HDRP - PBR, ray tracing, post-processing cinématique - s'approche suffisamment du photoréalisme pour être utilisée dans un contexte de production VFX, notamment pour la production virtuelle sur mur LED.

Importer des assets scannés

Formats supportés : FBX (la référence de production, supportant hiérarchies et LOD), OBJ (simple et universel avec ses textures MTL associées), Alembic (pour les caches d'animation et de simulation depuis Houdini), et USD (le format de Pixar, de plus en plus adopté dans les pipelines de production).

Quelques réglages d'import méritent une attention particulière pour les assets de photogrammétrie : le Scale Factor doit être ajusté pour correspondre à l'échelle réelle de l'objet en mètres, et Generate Colliders crée automatiquement des colliders à partir de la géométrie importée.

Correspondance des cartes PBR entre la sortie photogrammétrique et le workflow de Unity HDRP :

Carte photogrammétrieCanal Unity HDRP
AlbedoBase Map
Normal (OpenGL)Normal Map (conversion du canal Y)
Roughness (inversée)Smoothness
MetallicMetallic
AOAmbient Occlusion

Configuration des LOD dans Unity

Le composant LOD Group gère les transitions entre niveaux de détail selon la taille apparente à l'écran de l'objet : LOD 0 est actif à partir de 100% de la hauteur d'écran (premier plan, très proche), LOD 1 de 50-100% (distance moyenne), LOD 2 de 25-50% (distance élevée), et en dessous de 5% l'objet est entièrement culled.

Workflow d'import complet :

  1. Export depuis Houdini - générer un fichier FBX multi-LOD avec les textures associées.
  2. Import dans Unity - glisser-déposer dans le panneau Project, vérifier les réglages d'import.
  3. Matériaux - créer des matériaux HDRP/Lit et assigner les textures PBR.
  4. LOD Group - configurer le composant et les distances de transition.
  5. Scène - placement dans la scène, configuration de l'éclairage et ajustements de composition.

Configuration du matériau HDRP/Lit

Le shader HDRP/Lit est le principal shader de surface pour les assets opaques dans Unity HDRP. Propriétés de base : Surface Type réglé sur Opaque dans la grande majorité des cas pour les assets scannés ; Base Map la texture Albedo de photogrammétrie encodant la couleur diffuse ; Metallic à 0 pour les matériaux organiques (pierre, bois, béton), 1 pour les matériaux métalliques ; Smoothness inversement proportionnel à la carte Roughness bakée (1 − roughness).

Cartes de détail : une Normal Map encodant le détail micro-géométrique non représenté dans la topologie du maillage ; un Detail Normal - une seconde normal map tuilée à haute fréquence ajoutant de la granularité de surface ; l'Ambient Occlusion issue de l'information de cavité et d'ombre de contact bakée ; et une Height Map optionnelle pour une profondeur de surface simulée par parallax.

Optimisation des textures

Le choix du format de compression détermine l'équilibre entre qualité visuelle et empreinte mémoire au runtime :

Type de carteFormatRaison
Albedo (RGB)BC7 (DXT5)Bonne qualité de couleur
NormalBC5 (ATI2)Préserve la précision du canal XY
Masques (AO, Roughness, Metallic)BC4Canal unique

La génération automatique de mipmaps (Generate Mip Maps activé) est essentielle pour éviter le moiré sur les surfaces distantes ; le filtre Kaiser donne la meilleure qualité de mipmap pour les textures de photogrammétrie. Pour les scènes avec de nombreux objets scannés, l'atlasing - regrouper les textures de plusieurs objets dans une seule texture - réduit significativement les draw calls et améliore la performance ; les Trim Sheets construisent un atlas de texture réutilisable que plusieurs assets peuvent partager.

Matériaux spécialisés

Terrain et Landscape - les scans topographiques peuvent être intégrés au système Terrain de Unity en important une Heightmap. Les Splat Maps mélangent plusieurs couches de matériau (roche, terre, végétation, asphalte) sur le terrain selon la pente, l'altitude, ou des masques peints à la main.

Végétation - le shader HDRP/Nature est spécifiquement conçu pour les assets de végétation scannés, supportant la translucence (la lumière traversant les limbes des feuilles), le subsurface scattering pour les tiges et bourgeons, et une animation de vent intégrée.

Delighting et éclairage

L'un des défis majeurs de la photogrammétrie est que l'éclairage naturel de la scène se retrouve baké directement dans la texture pendant la capture. Unity fournit le De-Lighting Tool, un utilitaire officiel conçu pour extraire cette lumière bakée afin que les assets puissent réagir physiquement à l'éclairage dynamique de votre scène.

Éclairer une scène avec des assets de photogrammétrie nécessite une approche soigneusement calibrée pour préserver le photoréalisme de surface : Baked GI (des lightmaps précalculées pour les objets statiques donnent la meilleure qualité pour l'architecture et les environnements en monde ouvert), Reflection Probes (captures d'environnement locales, essentielles pour les surfaces réfléchissantes - métal, verre, eau), et Light Probes (échantillons de GI pour les objets dynamiques, gardant les personnages et props en mouvement cohérents avec l'éclairage).

Qualité contre performance est le dilemme permanent avec les assets scannés dans Unity. Les textures 4K+ devraient systématiquement utiliser le streaming de texture virtuelle de HDRP pour éviter les pics de mémoire. Les LOD ne sont pas négociables pour maintenir la performance dans des environnements denses.

Rendre les nuages de points directement

Trois méthodes principales existent pour importer et rendre un nuage de points photogrammétrique directement dans Unity.

Méthode 1 - le package open source PCX

La solution gratuite la plus largement utilisée. Le package PCX de Keijiro Takahashi permet un import direct avec des shaders optimisés (Unlit ou Lit). Format requis : .ply (format Stanford) - un nuage .las, .laz ou .e57 brut doit d'abord être nettoyé et converti via CloudCompare ou Houdini. Workflow : ajouter le dépôt GitHub PCX via le Package Manager de Unity ; glisser un fichier .ply dans Assets génère automatiquement un conteneur PointCloudData prêt à placer dans la scène.

Méthode 2 - rendu avancé via VFX Graph

Pour exploiter pleinement le GPU, gérer des dizaines de millions de points sans perte de performance, ou appliquer une manipulation artistique, le Visual Effect Graph est idéal. VFX Graph ne lit pas directement les fichiers de photogrammétrie - les données (XYZ et couleurs) doivent d'abord être converties en Point Cache ou en textures RGBA Float. L'avantage : chaque point est traité comme une particule gérée par un Compute Shader, permettant de changer dynamiquement la taille d'affichage ou d'appliquer des forces mathématiques. Houdini est un excellent candidat pour préparer et baker ce type de données texturées avant l'export.

Méthode 3 - Unity Industry Toolkit (anciennement Pixyz)

Pour des jeux de données massifs, à échelle industrielle, avec une licence Unity Industry : les formats supportés incluent les formats de scan bruts comme .e57, .rcp, .pts et .ptx. L'outil gère nativement la décimation et la génération automatique de LOD à l'import - importer plus de 100 millions de points nécessite un minimum de 32Go de RAM système.

De Houdini à VFX Graph via Point Cache

L'approche la plus performante repose sur les Point Caches (.pcache), convertissant les données de points en textures optimisées GPU.

  1. Préparation dans Houdini - installer le plugin Houdini officiel de Unity (dépôt GitHub Unity-Technologies/VFXToolbox) et son HDA. Importer le scan brut et nettoyer les attributs jusqu'à ne garder que Position (P) et Color (Cd). Convertir les axes : Houdini est main droite (Y vers le haut, Z vers l'avant), Unity est main gauche - inverser l'axe Z (@P.z = -@P.z;) via un Attribute Wrangle.
  2. Exporter le Point Cache - connecter le nuage nettoyé au nœud VFX Point Cache Exporter (le HDA de Unity), en mappant l'attribut P de Houdini vers position et Cd vers color pour Unity, puis cliquer sur Save to Disk pour générer le fichier .pcache.
  3. Configurer Unity VFX Graph - glisser le fichier .pcache dans vos Assets Unity. Dans le bloc Initialize Particle, ajouter les blocs Set Position from Map et Set Color from Map, en y connectant votre asset .pcache. Dans le bloc Output, choisir Output Particle Quad pour visualiser le nuage.

Physique et collision pour les scans importés

Pour qu'un scan 3D s'intègre au moteur physique de Unity, assigner manuellement un Mesh Collider et un composant Rigidbody. Le Mesh Collider génère une géométrie de collision fidèle à la forme du scan, tandis que le Rigidbody expose l'objet aux forces physiques de la scène.