XGRIDSDocumentation
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel CyberColor

    • LCC Studio

      • Prise en main
      • Version et mises à jour
      • Téléchargement et installation
      • Aperçu de l’interface et navigation
      • Avant la reconstruction
      • Reconstruction du modèle
      • Reconstruction d’un modèle unique
      • Fusion cartographique
      • Fusion aérienne-terrestre
      • Reconstruction aérienne
      • Mes modèles
      • Autres fonctionnalités
      • Paramètres et compte
      • Convertisseur
      • Reconstruction vidéo
      • Questions fréquentes
    • LCC Scene Editor

      • Version et mises à jour
      • Compte et connexion
      • Présentation du produit et accueil
      • Interface de l’éditeur
      • Modes de navigation de scène
      • Fichier
      • Paramètres
      • Opérations d’édition
      • Fenêtre
      • Barre d’outils globale
      • Ressources et propriétés
      • Barre d’outils gauche
      • Points de vue
      • Portail
      • Skybox
      • Annotations
      • Mesure
      • Parcours
      • Rapport de scène
      • 3D Layout
      • Mini-carte
      • Mode Prévisualisation, Viewer
      • Aide
      • FAQ
      • Point d’apparition
    • LCC Model Editor

      • Version et mises à jour
      • Guide de l’utilisateur
      • Aperçu et interface
      • Opérations sur les fichiers
      • Sélecteurs
      • Modification des modèles
      • Mesure
      • Réglage des couleurs
      • Gestion des ressources
      • Paramètres et aide
      • Questions fréquentes
    • Bonnes Pratiques

      • Fusion de plusieurs modèles 3DGS de grande taille
  • Plugin & SDK

    • Unreal

      • Introduction
      • Démarrage rapide - Windows
      • Démarrage rapide - Linux
      • Démarrage rapide - Quest3
      • Éditions et licences
      • Rendu
      • Rastérisation Tiled (expérimental)
      • Réglages visuels
      • Normales et éclairage
      • Édition de scène
      • Paramètres de performance
      • Guide d'optimisation des performances
      • Intégration avec les plugins tiers et moteur
      • Maillage proxy
      • Animation de chargement
      • Collision
      • Prise en charge du système de navigation
      • Prise en charge de l'eau à couche unique
      • Localisation
      • Questions fréquentes
      • Dépannage
      • Journaux et diagnostics
      • Nous contacter
      • Bonnes pratiques

        • Rééclairer un 3DGS avec un maillage LixelStudio
      • Référence API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actors SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Journal des modifications

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Introduction au SDK Unity
      • Fonctionnalités techniques
      • Exigences de l'environnement de développement
      • Guide de démarrage rapide PC
      • Guide d'optimisation des paramètres de projet
      • Guide de développement Pico 4 Ultra
      • Guide de streaming PC du Pico 4 Ultra
      • Guide de développement Quest 3
      • Guide de streaming PC du Quest 3
      • Guide de développement OpenXR
      • Guide Business Streaming du Pico 4 Ultra
      • Glossaire
      • FAQ
      • Nous contacter
      • Guide de développement des fonctionnalités

        • Guide de développement du rendu mixte multi-scènes
        • Guide de développement de la réception des ombres
        • Guide de développement de l'éclairage en temps réel
        • Guide de développement du rendu multi-caméras
        • Guide de développement du rendu d'images haute résolution
        • Guide de développement de la compatibilité des formats de données LCC et LCC2
        • Guide de développement de l'effet de chargement
        • Guide de développement du basculement du mode de rendu Mip
        • Guide de développement de l'accrochage aux arêtes et aux coins
        • Guide de développement du décalque projeté
        • Guide de développement du décalque projeté vidéo
        • Guide de développement du surlignage
        • Guide de développement de la découpe en temps réel
        • Guide de développement du réglage des couleurs
        • Guide de développement de l'obtention des données Mesh de la scène
        • Guide de développement du mode éditeur
        • Guide de configuration des paramètres de performance de rendu
        • Guide de développement du co-packageage de l'application et des données
        • Guide de développement du système de collision
        • Guide des problèmes d'autorisation de développement macOS
        • Guide de développement de la compilation et du packageage sur appareil iOS
      • Référence de l'API

        • LCCManager
        • Renderer
        • Types de données
      • Journal des modifications

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14

Guide de développement OpenXR

OpenXR est un standard d'interface XR (VR/AR/MR) ouvert et libre de redevance, défini et maintenu par le groupe Khronos. Son objectif principal est de permettre aux développeurs d'« écrire une fois, exécuter partout », résolvant ainsi le problème de fragmentation où chaque appareil possède son propre ensemble d'API. Le LCC Unity SDK prend désormais en charge le standard OpenXR, ce qui lui permet de rendre des données 3DGS sur des appareils compatibles OpenXR sans SDK fourni par un fabricant d'appareil VR spécifique.

Exigences de version

Les versions de logiciels et de plugins utilisées dans ce guide sont les suivantes. Il est recommandé de développer avec les mêmes versions ; d'autres versions non testées peuvent présenter des problèmes de compatibilité :

Logiciel / PluginVersion
Unityv6000.0.69f1
LCC Unity SDKv2.3.0 et versions ultérieures

Remarque :

  1. OpenXR est un standard, et les différents fabricants d'appareils VR peuvent prendre en charge toutes ses fonctionnalités ou seulement une partie d'entre elles ; vous devez donc vérifier l'état de prise en charge de l'appareil spécifique avant de l'utiliser.
  2. Le standard OpenXR définit des spécifications techniques communes, mais les fonctionnalités spécifiques à un appareil nécessitent toujours le SDK du fabricant ou une extension OpenXR du fabricant, telles que ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection) et d'autres technologies qui améliorent la fluidité entre les images.
  3. Ce guide démontre principalement le développement OpenXR sur de vrais appareils VR ; le LCC Unity SDK ne prend pas en charge le développement d'applications de bureau OpenXR (à l'exception du PCVR).

Flux de travail de développement

Étape 1 : Créer un projet URP

Sélectionnez le type Universal 3D (pipeline de rendu URP) dans le modèle de projet, comme illustré ci-dessous :

Créer un projet Universal 3D

Créer un projet Universal 3D

Étape 2 : Basculer de plateforme

Une fois le projet créé, sélectionnez Fichier → Build Profiles dans le menu Unity pour ouvrir la fenêtre de compilation, et basculez la plateforme vers Android, comme illustré ci-dessous :

Basculer la plateforme vers Android dans Build Profiles

Basculer la plateforme vers Android dans Build Profiles

Étape 3 : Importer Unity OpenXR

Ouvrez la fenêtre UPM via le menu Unity Fenêtre → Package Manager, sélectionnez Unity Registry dans la liste de gauche, saisissez OpenXR dans la zone de recherche, sélectionnez OpenXR Plugin dans les résultats et installez-le, comme illustré ci-dessous :

Installer l'OpenXR Plugin depuis Unity Registry

Installer l'OpenXR Plugin depuis Unity Registry

Étape 4 : Importer XR Interaction Toolkit

Sélectionnez Unity Registry dans la liste de gauche, saisissez XR dans la zone de recherche, sélectionnez XR Interaction Toolkit dans les résultats et installez-le, comme illustré ci-dessous :

Installer XR Interaction Toolkit depuis Unity Registry

Installer XR Interaction Toolkit depuis Unity Registry

Étape 5 : Importer le LCC Unity SDK

Ouvrez la fenêtre UPM via le menu Unity Fenêtre → Package Manager, cliquez sur + à gauche, sélectionnez Install package from disk dans le menu déroulant, localisez le LCC Unity SDK, puis sélectionnez le fichier package.json pour l'importer, comme illustré ci-dessous :

Importer le LCC Unity SDK via Install package from disk

Importer le LCC Unity SDK via Install package from disk

Étape 6 : Configurer l'environnement Unity

Configurer XR Plug-in Management (plateforme Android)

Sélectionnez Fichier → Paramètres du projet dans la barre de menus Unity, sélectionnez XR Plug-in Management à gauche, cochez OpenXR sous l'onglet de la plateforme Android, et cochez Initialize XR on Startup, comme illustré ci-dessous :

Cocher OpenXR et Initialize XR on Startup sur la plateforme Android

Cocher OpenXR et Initialize XR on Startup sur la plateforme Android

Configurer XR Plug-in Management (plateforme Desktop)

Étant donné que le LCC Unity SDK ne prend pas en charge le développement OpenXR de bureau, ne cochez pas OpenXR ni Initialize XR on Startup sous la plateforme Desktop, comme illustré ci-dessous :

Ne pas cocher OpenXR ni Initialize XR on Startup sur la plateforme Desktop

Ne pas cocher OpenXR ni Initialize XR on Startup sur la plateforme Desktop

Remarque : pour le PCVR de bureau, reportez-vous à Streaming PCVR.

Configurer le mode de rendu OpenXR et la configuration d'interaction

Sélectionnez l'élément OpenXR sous XR Plug-in Management, et définissez le Render Mode de la plateforme Android sur Single Pass Instanced ou Multi-View. Étant donné qu'OpenXR nécessite de définir des Interaction Profiles, sélectionnez généralement Oculus Touch Controller Profile ou un profil aux caractéristiques de performance similaires, comme illustré ci-dessous :

Définir le Render Mode OpenXR et les Interaction Profiles

Définir le Render Mode OpenXR et les Interaction Profiles

Project Validation

Sélectionnez l'élément Project Validation sous XR Plug-in Management, et cliquez sur Fix All pour compléter les paramètres nécessaires (vous pouvez aussi le laisser non traité pour l'instant et le créer manuellement plus tard), comme illustré ci-dessous :

Cliquer sur Fix All dans Project Validation

Cliquer sur Fix All dans Project Validation

Configurer Player (plateforme Desktop)

Sélectionnez Player à gauche de Paramètres du projet, basculez vers la plateforme Desktop, déployez la section Other Settings, décochez Auto Graphics API, définissez Graphics APIs sur Direct3D12, Vulkan, Direct3D11, et supprimez les autres API graphiques ; définissez Color Space sur Gamma, comme illustré ci-dessous :

Définir les API graphiques et l'espace colorimétrique Gamma sur la plateforme Desktop

Définir les API graphiques et l'espace colorimétrique Gamma sur la plateforme Desktop

Remarque : certains appareils VR ne prennent pas en charge l'espace colorimétrique Gamma ; dans ce cas, vous ne pouvez choisir que l'espace colorimétrique Linear, et les scènes LCC rendues dans l'espace colorimétrique Linear paraîtront légèrement délavées.

Configurer Player (plateforme Android)

Sélectionnez Player à gauche de Paramètres du projet, basculez vers la plateforme Android, déployez la section Other Settings, décochez Auto Graphics API, définissez Graphics APIs sur Vulkan, et supprimez les autres API graphiques ; définissez Color Space sur Gamma, comme illustré ci-dessous :

Définir l'API graphique sur Vulkan et l'espace colorimétrique Gamma sur la plateforme Android

Définir l'API graphique sur Vulkan et l'espace colorimétrique Gamma sur la plateforme Android

Définir le backend de script et la saisie de la plateforme Android

Faites défiler l'onglet Other Settings de la plateforme Android vers le bas, et définissez Minimum API Level = Android 12L (API Level 32) ou supérieur, Scripting Backend = IL2CPP, Target Architectures = ARM64, Active Input Handling = Input System Package (New) ou Both, comme illustré ci-dessous :

Définir Minimum API Level, Scripting Backend, Target Architectures et Active Input Handling

Définir Minimum API Level, Scripting Backend, Target Architectures et Active Input Handling

Vérifier Graphismes et Qualité

Sélectionnez Graphismes à gauche de Paramètres du projet, et vérifiez le Render Asset correspondant au Default Render Pipeline utilisé par la plateforme Mobile, Mobile_RPAsset dans cet exemple, comme illustré ci-dessous :

Vérifier le Render Asset du Default Render Pipeline sur la plateforme Mobile

Vérifier le Render Asset du Default Render Pipeline sur la plateforme Mobile

Sélectionnez Qualité à gauche de Paramètres du projet, vérifiez le Render Asset correspondant au Default Render Pipeline utilisé par la plateforme Mobile (Mobile_RPAsset dans cet exemple), définissez Resolution Scaling Fixed DPI Factor = 0.7, VSync Count = Don't Sync, comme illustré ci-dessous :

Définir le DPI Factor et VSync dans Qualité

Définir le DPI Factor et VSync dans Qualité

Configurer le Render Asset

Trouvez le Render Asset correspondant au Default Render Pipeline utilisé par la plateforme Mobile (Mobile_RPAsset dans cet exemple), sélectionnez l'Asset, et dans la fenêtre de propriétés (Inspecteur) : décochez Depth Texture, Opaque Texture, HDR ; définissez Anti Aliasing (MSAA) = Disabled, Render Scale = 0.7, Upscaling Filter = Automatic, comme illustré ci-dessous :

Désactiver Depth/Opaque Texture, HDR, MSAA et définir le Render Scale dans le Render Asset

Désactiver Depth/Opaque Texture, HDR, MSAA et définir Render Scale = 0.7 dans le Render Asset

Trouvez le Renderer correspondant à ce Render Asset, Mobile_Renderer (Universal Renderer Data) dans cet exemple, et définissez ses propriétés pertinentes dans la fenêtre de propriétés (Inspecteur), comme illustré ci-dessous :

Configurer les propriétés de Mobile_Renderer (Universal Renderer Data)

Configurer les propriétés de Mobile_Renderer (Universal Renderer Data)

Étape 7 : Créer la scène

Créez une toute nouvelle scène dans Unity, supprimez la Caméra principale et la Lumière directionnelle, faites un clic droit dans une zone vide de la fenêtre de hiérarchie (Hiérarchie), et sélectionnez XR → XR Origin (VR) dans le menu contextuel pour créer les objets XR nécessaires.

Étape 8 : Configurer la scène

Sélectionnez le GameObject XR Origin (VR) dans la fenêtre de hiérarchie (Hiérarchie), et dans le composant XR Origin de la fenêtre de propriétés (Inspecteur), définissez Tracking Origin Mode sur Floor ; les autres propriétés pertinentes sont comme illustré ci-dessous :

Définir le Tracking Origin Mode de XR Origin sur Floor

Définir le Tracking Origin Mode de XR Origin sur Floor

Sélectionnez le GameObject Caméra principale sous XR Origin (VR) dans la fenêtre de hiérarchie (Hiérarchie), et définissez les propriétés du composant Camera dans la fenêtre de propriétés (Inspecteur) : Clipping Planes Near = 0.3, Far = 5000 ; Anti-aliasing = No Anti-aliasing ; Opaque Texture = Off, Depth Texture = Off ; Background Type = Solid Color, Background = noir ; HDR = Off, MSAA = Off ; les autres propriétés sont comme illustré ci-dessous :

Définir les propriétés du composant Camera de la Caméra principale sous XR Origin (VR)

Définir les propriétés du composant Camera de la Caméra principale sous XR Origin (VR)

Étape 9 : Écrire le code pour charger la scène

Faites un clic droit Créer vide dans la fenêtre de hiérarchie (Hiérarchie) pour créer un objet vide, nommez-le LCCManager, normalisez son Transform, et attachez le script LCCManager via Ajouter un composant, comme illustré ci-dessous :

Créer un objet vide LCCManager et attacher le script LCCManager

Créer un objet vide LCCManager et attacher le script LCCManager

Faites un clic droit Créer vide dans la fenêtre de hiérarchie (Hiérarchie) pour créer un autre objet vide, nommez-le LCCRenderer, et définissez son Transform Rotation.x = -90, Scale.x = -1, comme illustré ci-dessous :

Créer un objet vide LCCRenderer et définir le Transform pour l'alignement du système de coordonnées

Créer un objet vide LCCRenderer, et définir Rotation.x = -90 et Scale.x = -1 pour aligner les systèmes de coordonnées

Rotation.x = -90 et Scale.x = -1 constituent la transformation d'alignement du système de coordonnées des données LCC (axe Z vers le haut, droitier) vers le système de coordonnées Unity (axe Y vers le haut, gaucher) ; voir « Système de coordonnées des données LCC » dans Introduction au SDK Unity.

À ce stade, la structure des GameObjects dans la fenêtre de hiérarchie (Hiérarchie) est comme illustré ci-dessous :

La structure de la fenêtre Hiérarchie

La structure de la fenêtre Hiérarchie

Écrivez un script C# nommé LCCRenderer.cs avec le code suivant :

using LCCCore;
using UnityEngine;
using UnityEngine.XR;

public class LCCRenderer : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;

    private LCCCore.Renderer m_renderer;

    void Start()
    {
#if UNITY_EDITOR
        m_manager.SetPlatformType(PlatformType.PC);
        m_renderer = m_manager.GetRender(this.gameObject.transform);
        m_renderer.Load(m_FilePath, onProgress, onLoaded);
#else
        m_manager.SetPlatformType(PlatformType.OpenXR);
        m_renderer = m_manager.GetRender(this.gameObject.transform);
        m_renderer.Load($"{Application.persistentDataPath}/LccData/meta.lcc2", onProgress, onLoaded);
#endif
    }

    private void onProgress(float v)
    {
        Debug.Log("progression :" + v);
    }

    private void onLoaded()
    {
        m_manager.SetStartLod(2);
        m_renderer.SetEnvironment(false);
        Debug.Log("Données chargées");
    }
}

Attachez le script au GameObject LCCRenderer dans la fenêtre de hiérarchie (Hiérarchie), puis faites glisser le GameObject LCCManager sur la propriété Manager du script dans la fenêtre de propriétés (Inspecteur), et enfin renseignez le chemin du fichier LCC.

Pour faciliter le débogage dans l'éditeur Unity et la compilation directe vers un appareil Android, le code utilise des macros de compilation pour distinguer l'environnement d'exécution : dans l'éditeur Unity, utilisez directement l'adresse spécifiée par m_FilePath ; sur un appareil Android, utilisez la source de données sur appareil. La façon de placer les données sur appareil est la suivante :

  1. Exécutez l'application compilée sur l'appareil VR une fois.
  2. Une fois l'application installée, entrez dans son répertoire de données (généralement Stockage de l'appareil → Android → data → app BundleID → Files ; reportez-vous au chemin d'installation de l'application Android pour le répertoire spécifique), et créez un dossier LccData sous le sous-répertoire Files.
  3. Copiez toutes les sources de données LCC dans le dossier LccData.

Remarque : en pratique, il est recommandé de placer la source de données de l'application sur un serveur plutôt que de la packager directement dans l'application.

Pratiques d'optimisation

Suivre les étapes ci-dessus permet aux données LCC de s'afficher normalement sur l'appareil VR, mais il existe deux problèmes principaux :

Affichage de fenêtre d'application 2D

Les applications développées selon le standard OpenXR sans SDK de fabricant d'appareil ne sont pas nécessairement reconnues comme applications 3D sur les appareils VR ; généralement, le système de l'appareil VR les traite comme des applications 2D, et une fenêtre d'application 2D est donc affichée. Il existe deux approches pour résoudre ce problème :

  • Introduire un SDK de fabricant d'appareil ou une extension OpenXR de fabricant ; le logiciel du fabricant gérera alors les problèmes associés.
  • Personnaliser AndroidManifest.xml.

Les étapes spécifiques pour personnaliser le Manifest sont : sélectionnez Player à gauche de Paramètres du projet, basculez vers la plateforme Android, déployez la section Publishing Settings, cochez Custom Main Manifest, ce qui générera un fichier Manifest personnalisé, comme illustré ci-dessous :

Cocher Custom Main Manifest pour générer un fichier Manifest personnalisé

Cocher Custom Main Manifest pour générer un fichier Manifest personnalisé

Trouvez le fichier AndroidManifest.xml et ajoutez le marqueur VR afin que l'appareil VR le reconnaisse comme une application immersive 3D, et l'application lancée sera affichée comme un espace 3D. Exemple :

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <application>

        <!--Utilisé lorsque Application Entry est défini sur GameActivity, sinon supprimez ce bloc d'activité-->
        <activity android:name="com.unity3d.player.UnityPlayerGameActivity"
                  android:theme="@style/BaseUnityGameActivityTheme"
                  android:resizeableActivity="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
                <category android:name="org.khronos.openxr.intent.category.IMMERSIVE_HMD" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
            <meta-data android:name="android.app.lib_name" android:value="game" />
        </activity>
    </application>
</manifest>

Saccades lorsque la fréquence d'images de rendu est inférieure à 90 FPS

Le standard OpenXR lui-même ne définit pas l'interpolation d'images, le lissage ni le contenu associé ; lorsque la fréquence d'images ne peut pas atteindre 90 FPS, il y aura une sensation de saccade perceptible lors de la rotation de la tête ou des déplacements. Pour offrir une meilleure expérience, en particulier pour améliorer la fluidité sous des performances matérielles limitées, les fabricants d'appareils fournissent généralement des techniques telles que le tweening, l'interpolation d'images et le lissage, comme ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection), etc.

Si l'appareil prend en charge OpenXR, les fabricants fournissent généralement une extension OpenXR ou un SDK qui prend directement en charge OpenXR ; dans ce cas, il est préférable d'introduire le SDK du fabricant pour une expérience plus fluide.

Référence associée

  • Pour les paramètres de projet et l'optimisation des performances, voir les chapitres Guide d'optimisation des paramètres de projet et Guide des paramètres de performance de rendu.
  • La capacité de rendu à l'écran de l'appareil VR pour le 3DGS est d'environ 700 000 primitives gaussiennes ; lors du rendu de grandes scènes, il est recommandé de définir StartLOD sur 2 et de désactiver l'affichage des données d'environnement ; les grandes scènes seront plus fluides avec le streaming PC.