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

    • PortalCam P1

      • Panoramica del prodotto
      • Operazioni di base
      • Uso della LCC Scan App
      • Manutenzione e cura
      • FAQ
  • Serie Lixel K

    • Lixel K1

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Flusso di scansione
      • Ottenere una nuvola di punti con coordinate assolute
      • Fusione delle mappe
      • Consigli di pianificazione dei percorsi per scene tipiche
      • Precauzioni
      • FAQ
    • Lixel K2

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione
      • Flusso di scansione
      • Acquisire una nuvola di punti con coordinate assolute
      • Fusione mappe
      • Consigli di pianificazione dei percorsi per scene tipiche
      • Precauzioni
      • FAQ
  • Serie Lixel L

    • Lixel L2 Pro

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Flusso di scansione
      • Ottenere una nuvola di punti con coordinate assolute
      • Punto di misura
      • Appendice
      • FAQ
    • Lixel L3

      • Panoramica del prodotto
      • Operazioni di base
      • Attivazione e connessione del dispositivo
      • Acquisizione dei dati
      • Acquisizione di coordinate assolute
      • Appendice
  • Accessori

    • Stick Light

      • Guida all'installazione
      • Operazioni di base
      • Domande frequenti
  • Lixel Studio

    • Versione e copyright
    • Installazione e attivazione
    • Interfaccia del software
    • Operazioni sui file
    • Elaborazione del progetto
    • Strumenti
    • Disegno 2D
    • Applicazioni di settore
    • Impostazioni
    • Connessione del dispositivo
    • Domande Frequenti
  • Lixel CyberColor

    • LCC Studio

      • Introduzione
      • Versione e aggiornamenti
      • Download e installazione
      • Panoramica dell'interfaccia e navigazione
      • Operazioni preliminari alla ricostruzione
      • Prima della ricostruzione
      • Ricostruzione del modello
      • Ricostruzione modello singolo
      • Fusione delle mappe
      • Fusione aria-terra
      • Ricostruzione aerea
      • I miei modelli
      • Altre funzioni
      • Impostazioni e account
      • Convertitore
      • Ricostruzione video
      • Domande Frequenti / FAQ
    • LCC Scene Editor

      • Versione e aggiornamenti
      • Account e accesso
      • Panoramica del prodotto e home page
      • Interfaccia dell'editor
      • Modalità di navigazione
      • File
      • Impostazioni
      • Modifica
      • Finestra
      • Barra degli strumenti globale
      • Asset e proprietà
      • Barra degli strumenti sinistra
      • Punti di vista
      • Portale
      • Skybox
      • Annotazioni
      • Misurazione
      • Flythrough
      • Rapporto scena
      • 3D Layout
      • Mini-mappa
      • Modalità Anteprima (Viewer)
      • Aiuto
      • Domande frequenti (FAQ)
      • Punto di spawn
    • LCC Model Editor

      • Versione e aggiornamenti
      • Guida utente
      • Panoramica e interfaccia
      • Operazioni sui file
      • Selettori
      • Modifica dei modelli
      • Misurazione
      • Correzione colore
      • Gestione degli asset
      • Impostazioni e Aiuto
      • Domande frequenti
    • Capture Guide

      • Panoramica
      • Panoramica dei dispositivi di acquisizione
      • Principi generali di acquisizione
      • Acquisizione di scene interne
      • Acquisizione di scene esterne
      • Acquisizione su larga scala (map fusion)
      • Acquisizione per aerial-ground map fusion
      • Acquisizione di oggetti
      • Acquisizione di persone
      • Acquisizione per ricostruzione da video
      • HD Enhancement
      • Control points (Lixel P1)
      • FAQ e risoluzione dei problemi
    • Buone Pratiche

      • Unione di più modelli 3DGS di grandi dimensioni
    • Cronologia versioni
  • Plugin e SDK

    • Unreal

      • Introduzione
      • Avvio rapido - Windows
      • Avvio rapido - Linux
      • Avvio rapido - Quest3
      • Edizioni e licenze
      • Rendering
      • Rasterizzazione Tiled (sperimentale)
      • Impostazioni visive
      • Normali e illuminazione
      • Modifica della scena
      • Parametri di prestazione
      • Guida alle prestazioni
      • Integrazione con plugin di terze parti e del motore
      • Proxy Mesh
      • Animazione di caricamento
      • Collisioni
      • Supporto del Navigation System
      • Supporto di Single Layer Water
      • Localizzazione
      • FAQ
      • Risoluzione dei problemi
      • Log e diagnostica
      • Contattaci
      • Buone pratiche

        • Rilluminare il 3DGS con una mesh di LixelStudio
      • Riferimento API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enum
        • Struct
      • Registro delle modifiche

        • 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

      • Introduzione all'Unity SDK
      • Caratteristiche tecniche
      • Requisiti dell'ambiente di sviluppo
      • Guida rapida per PC
      • Guida all'ottimizzazione delle impostazioni di progetto
      • Guida allo sviluppo per Pico 4 Ultra
      • Guida allo streaming PC per Pico 4 Ultra
      • Guida allo sviluppo per Quest 3
      • Guida allo streaming PC per Quest 3
      • Guida allo sviluppo OpenXR
      • Guida allo streaming Business per Pico 4 Ultra
      • Glossario
      • FAQ
      • Contattaci
      • Guida allo sviluppo delle funzionalità

        • Guida allo sviluppo del rendering misto multi-scena
        • Guida allo sviluppo della ricezione delle ombre
        • Guida allo sviluppo dell'illuminazione in tempo reale
        • Guida allo sviluppo del rendering multi-camera
        • Guida allo sviluppo del rendering di immagini ad alta risoluzione
        • Guida allo sviluppo della compatibilità dei formati dati LCC e LCC2
        • Guida allo sviluppo dell'effetto di caricamento
        • Guida allo sviluppo del cambio di modalità di rendering Mip
        • Guida allo sviluppo dello snap a bordi e angoli
        • Guida allo sviluppo della decal proiettata
        • Guida allo sviluppo della decal proiettata video
        • Guida allo sviluppo dell'evidenziazione
        • Guida allo sviluppo del ritaglio in tempo reale
        • Guida allo sviluppo della regolazione del tono
        • Guida allo sviluppo dell'ottenimento dei dati Mesh della scena
        • Guida allo sviluppo della modalità Editor
        • Guida alla configurazione dei parametri di prestazioni di rendering
        • Guida allo sviluppo del co-impacchettamento di applicazione e dati
        • Guida allo sviluppo del sistema di collisione
        • Guida ai problemi di autorizzazione nello sviluppo su macOS
        • Guida allo sviluppo di compilazione e packaging per dispositivi iOS
      • Riferimento API

        • LCCManager
        • Renderer
        • Tipi di dati
      • Registro delle modifiche

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

      • Introduzione
      • Guida all'ottimizzazione delle prestazioni di rendering
      • Configurazione grafica
      • Domande frequenti
      • Riferimento API

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • Registro delle modifiche

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0

Guida allo sviluppo OpenXR

OpenXR è uno standard di interfaccia XR (VR/AR/MR) aperto e libero da royalty definito e mantenuto dal Khronos Group. Il suo obiettivo principale è consentire agli sviluppatori di "scrivere una volta, eseguire ovunque", risolvendo il problema della frammentazione dovuto al fatto che dispositivi diversi hanno ciascuno il proprio set di API. L'LCC Unity SDK ora supporta lo standard OpenXR, quindi può eseguire il rendering dei dati 3DGS su dispositivi compatibili con OpenXR senza un SDK fornito da un produttore di dispositivi VR specifico.

Requisiti di versione

Di seguito sono indicate le versioni di software e plugin utilizzate in questa guida. Si consiglia di sviluppare con le stesse versioni; altre versioni non testate potrebbero presentare problemi di compatibilità:

Software / PluginVersione
Unityv6000.0.69f1
LCC Unity SDKv2.3.0 e successive

Nota:

  1. OpenXR è uno standard, e vari produttori di dispositivi VR possono supportare tutte le sue funzionalità o solo una parte, quindi è necessario verificare lo stato di supporto del dispositivo specifico prima di usarlo.
  2. Lo standard OpenXR definisce specifiche tecniche comuni, ma le funzionalità specifiche del dispositivo richiedono comunque il supporto dell'SDK del produttore o dell'OpenXR Extension del produttore, come ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection) e altre tecnologie che migliorano la fluidità tra i fotogrammi.
  3. Questa guida mostra principalmente lo sviluppo OpenXR su dispositivi VR reali; l'LCC Unity SDK non supporta lo sviluppo di applicazioni desktop OpenXR (ad eccezione del PCVR).

Flusso di lavoro di sviluppo

Passaggio 1: Creare un progetto URP

Seleziona il tipo Universal 3D (pipeline di rendering URP) nel modello di progetto, come mostrato di seguito:

Crea un progetto Universal 3D

Crea un progetto Universal 3D

Passaggio 2: Cambiare la piattaforma

Dopo aver creato il progetto, seleziona File → Build Profiles dal menu di Unity per aprire la finestra di build e passa la piattaforma ad Android, come mostrato di seguito:

Passa la piattaforma ad Android in Build Profiles

Passa la piattaforma ad Android in Build Profiles

Passaggio 3: Importare Unity OpenXR

Apri la finestra UPM tramite il menu di Unity Finestra → Gestione pacchetti, seleziona Unity Registry nell'elenco a sinistra, inserisci OpenXR nella casella di ricerca, seleziona OpenXR Plugin dai risultati della ricerca e installalo, come mostrato di seguito:

Installa l'OpenXR Plugin da Unity Registry

Installa l'OpenXR Plugin da Unity Registry

Passaggio 4: Importare XR Interaction Toolkit

Seleziona Unity Registry nell'elenco a sinistra, inserisci XR nella casella di ricerca, seleziona XR Interaction Toolkit dai risultati della ricerca e installalo, come mostrato di seguito:

Installa XR Interaction Toolkit da Unity Registry

Installa XR Interaction Toolkit da Unity Registry

Passaggio 5: Importare l'LCC Unity SDK

Apri la finestra UPM tramite il menu di Unity Finestra → Gestione pacchetti, fai clic su + a sinistra, seleziona Installa pacchetto da disco dal menu a discesa, individua l'LCC Unity SDK e seleziona il file package.json da importare, come mostrato di seguito:

Importa l'LCC Unity SDK tramite Installa pacchetto da disco

Importa l'LCC Unity SDK tramite Installa pacchetto da disco

Passaggio 6: Configurare l'ambiente Unity

Configurare XR Plug-in Management (piattaforma Android)

Seleziona File → Project Settings dalla barra dei menu di Unity, seleziona XR Plug-in Management a sinistra, spunta OpenXR nella scheda della piattaforma Android e spunta Initialize XR on Startup, come mostrato di seguito:

Spunta OpenXR e Initialize XR on Startup sulla piattaforma Android

Spunta OpenXR e Initialize XR on Startup sulla piattaforma Android

Configurare XR Plug-in Management (piattaforma Desktop)

Poiché l'LCC Unity SDK non supporta lo sviluppo OpenXR desktop, non spuntare OpenXR né Initialize XR on Startup sulla piattaforma Desktop, come mostrato di seguito:

Non spuntare OpenXR o Initialize XR on Startup sulla piattaforma Desktop

Non spuntare OpenXR o Initialize XR on Startup sulla piattaforma Desktop

Nota: Per il PCVR desktop, consulta Streaming PCVR.

Configurare la modalità di rendering e la configurazione dell'interazione OpenXR

Seleziona la voce OpenXR in XR Plug-in Management e imposta la Render Mode della piattaforma Android su Single Pass Instanced o Multi-View. Poiché OpenXR richiede l'impostazione degli Interaction Profiles, di solito seleziona Oculus Touch Controller Profile o un profilo con caratteristiche prestazionali del dispositivo simili, come mostrato di seguito:

Imposta la Render Mode e gli Interaction Profiles OpenXR

Imposta la Render Mode e gli Interaction Profiles OpenXR

Project Validation

Seleziona la voce Project Validation in XR Plug-in Management e fai clic su Fix All per completare le impostazioni necessarie (puoi anche lasciarle non gestite per ora e crearle manualmente in seguito), come mostrato di seguito:

Fai clic su Fix All in Project Validation

Fai clic su Fix All in Project Validation

Configurare Player (piattaforma Desktop)

Seleziona Player a sinistra di Project Settings, passa alla piattaforma Desktop, espandi la sezione Other Settings, deseleziona Auto Graphics API, imposta Graphics APIs su Direct3D12, Vulkan, Direct3D11 e rimuovi le altre API grafiche; imposta Color Space su Gamma, come mostrato di seguito:

Imposta le API grafiche e lo spazio colore Gamma sulla piattaforma Desktop

Imposta le API grafiche e lo spazio colore Gamma sulla piattaforma Desktop

Nota: Alcuni dispositivi VR non supportano lo spazio colore Gamma; in tal caso puoi scegliere solo lo spazio colore Linear, e le scene LCC renderizzate nello spazio colore Linear appariranno leggermente slavate.

Configurare Player (piattaforma Android)

Seleziona Player a sinistra di Project Settings, passa alla piattaforma Android, espandi la sezione Other Settings, deseleziona Auto Graphics API, imposta Graphics APIs su Vulkan e rimuovi le altre API grafiche; imposta Color Space su Gamma, come mostrato di seguito:

Imposta l'API grafica su Vulkan e lo spazio colore Gamma sulla piattaforma Android

Imposta l'API grafica su Vulkan e lo spazio colore Gamma sulla piattaforma Android

Impostare lo scripting backend e l'input della piattaforma Android

Scorri verso il basso nella scheda Other Settings della piattaforma Android e imposta Minimum API Level = Android 12L (API Level 32) o superiore, Scripting Backend = IL2CPP, Target Architectures = ARM64, Active Input Handling = Input System Package (New) o Both, come mostrato di seguito:

Imposta Minimum API Level, Scripting Backend, Target Architectures e Active Input Handling

Imposta Minimum API Level, Scripting Backend, Target Architectures e Active Input Handling

Controllare Graphics e Quality

Seleziona Graphics a sinistra di Project Settings e controlla il Render Asset corrispondente alla Default Render Pipeline usata dalla piattaforma Mobile, Mobile_RPAsset in questo esempio, come mostrato di seguito:

Controlla il Render Asset della Default Render Pipeline sulla piattaforma Mobile

Controlla il Render Asset della Default Render Pipeline sulla piattaforma Mobile

Seleziona Quality a sinistra di Project Settings, controlla il Render Asset corrispondente alla Default Render Pipeline usata dalla piattaforma Mobile (Mobile_RPAsset in questo esempio), imposta Resolution Scaling Fixed DPI Factor = 0.7, VSync Count = Don't Sync, come mostrato di seguito:

Imposta DPI Factor e VSync in Quality

Imposta DPI Factor e VSync in Quality

Configurare il Render Asset

Trova il Render Asset corrispondente alla Default Render Pipeline usata dalla piattaforma Mobile (Mobile_RPAsset in questo esempio), seleziona l'Asset e, nella finestra delle proprietà (Inspector): deseleziona Depth Texture, Opaque Texture, HDR; imposta Anti Aliasing (MSAA) = Disabled, Render Scale = 0.7, Upscaling Filter = Automatic, come mostrato di seguito:

Disattiva Depth/Opaque Texture, HDR, MSAA e imposta la Render Scale nel Render Asset

Disattiva Depth/Opaque Texture, HDR, MSAA e imposta Render Scale = 0.7 nel Render Asset

Trova il Renderer corrispondente a questo Render Asset, Mobile_Renderer (Universal Renderer Data) in questo esempio, e impostane le relative proprietà nella finestra delle proprietà (Inspector), come mostrato di seguito:

Configura le proprietà di Mobile_Renderer (Universal Renderer Data)

Configura le proprietà di Mobile_Renderer (Universal Renderer Data)

Passaggio 7: Creare la scena

Crea una scena completamente nuova in Unity, elimina Camera principale e Luce direzionale, fai clic con il pulsante destro in un'area vuota della finestra Gerarchia e seleziona XR → XR Origin (VR) dal menu a comparsa per creare gli oggetti XR necessari.

Passaggio 8: Configurare la scena

Seleziona il GameObject XR Origin (VR) nella finestra Gerarchia e, nel componente XR Origin della finestra delle proprietà (Inspector), imposta Tracking Origin Mode su Floor; le altre proprietà rilevanti sono come mostrato di seguito:

Imposta Tracking Origin Mode di XR Origin su Floor

Imposta Tracking Origin Mode di XR Origin su Floor

Seleziona il GameObject Camera principale sotto XR Origin (VR) nella finestra Gerarchia e imposta le proprietà del componente Camera nella finestra delle proprietà (Inspector): Clipping Planes Near = 0.3, Far = 5000; Anti-aliasing = No Anti-aliasing; Opaque Texture = Off, Depth Texture = Off; Background Type = Solid Color, Background = nero; HDR = Off, MSAA = Off; le altre proprietà sono come mostrato di seguito:

Imposta le proprietà del componente Camera della Camera principale sotto XR Origin (VR)

Imposta le proprietà del componente Camera della Camera principale sotto XR Origin (VR)

Passaggio 9: Scrivere il codice per caricare la scena

Fai clic con il pulsante destro su Crea vuoto nella finestra Gerarchia per creare un oggetto vuoto, denominalo LCCManager, normalizza il suo Transform e collega lo script LCCManager tramite Aggiungi componente, come mostrato di seguito:

Crea un oggetto vuoto LCCManager e collega lo script LCCManager

Crea un oggetto vuoto LCCManager e collega lo script LCCManager

Fai clic con il pulsante destro su Crea vuoto nella finestra Gerarchia per creare un altro oggetto vuoto, denominalo LCCRenderer e imposta il suo Transform con Rotation.x = -90, Scale.x = -1, come mostrato di seguito:

Crea un oggetto vuoto LCCRenderer e imposta il Transform per l'allineamento del sistema di coordinate

Crea un oggetto vuoto LCCRenderer e imposta Rotation.x = -90 e Scale.x = -1 per allineare i sistemi di coordinate

Rotation.x = -90 e Scale.x = -1 sono la trasformazione di allineamento dal sistema di coordinate dei dati LCC (Z in alto, destrorso) al sistema di coordinate di Unity (Y in alto, sinistrorso); vedi "Sistema di coordinate dei dati LCC" in Introduzione all'Unity SDK.

A questo punto, la struttura dei GameObject nella finestra Gerarchia è come mostrato di seguito:

La struttura della finestra Gerarchia

La struttura della finestra Gerarchia

Scrivi uno script C# denominato LCCRenderer.cs con il seguente codice:

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("avanzamento:" + v);
    }

    private void onLoaded()
    {
        m_manager.SetStartLod(2);
        m_renderer.SetEnvironment(false);
        Debug.Log("Dati caricati");
    }
}

Collega lo script al GameObject LCCRenderer nella finestra Gerarchia, quindi trascina il GameObject LCCManager sulla proprietà Manager dello script nella finestra delle proprietà (Inspector) e infine inserisci il percorso del file LCC.

Per facilitare il debug nell'Editor di Unity e la creazione diretta del pacchetto per un dispositivo Android, il codice usa macro di compilazione per distinguere l'ambiente di runtime: nell'Editor di Unity usa direttamente l'indirizzo specificato da m_FilePath; su un dispositivo Android usa l'origine dati sul dispositivo. Il modo per collocare i dati sul dispositivo è:

  1. Esegui l'app compilata sul dispositivo VR una volta.
  2. Dopo l'installazione dell'app, accedi alla sua directory dati (generalmente memoria del dispositivo → Android → data → BundleID dell'app → Files; consulta il percorso di installazione delle app Android per la directory specifica) e crea una cartella LccData nella sottodirectory Files.
  3. Copia tutte le origini dati LCC nella cartella LccData.

Nota: In pratica, si consiglia di collocare l'origine dati dell'app su un server invece di pacchettizzarla direttamente nell'app.

Pratiche di ottimizzazione

Seguendo i passaggi precedenti i dati LCC vengono renderizzati normalmente sul dispositivo VR, ma ci sono due problemi principali:

Visualizzazione della finestra app 2D

Le app sviluppate secondo lo standard OpenXR senza un SDK del produttore del dispositivo non sono necessariamente riconosciute come app 3D sui dispositivi VR; in genere il sistema del dispositivo VR le tratta come app 2D, quindi viene visualizzata una finestra app 2D. Ci sono due approcci per risolvere questo problema:

  • Introdurre un SDK del produttore del dispositivo o un'estensione OpenXR del produttore; il software del produttore del dispositivo gestirà quindi i problemi correlati.
  • Personalizzare AndroidManifest.xml.

I passaggi specifici per personalizzare il Manifest sono: seleziona Player a sinistra di Project Settings, passa alla piattaforma Android, espandi la sezione Publishing Settings, spunta Custom Main Manifest, che genererà un file Manifest personalizzato, come mostrato di seguito:

Spunta Custom Main Manifest per generare un file Manifest personalizzato

Spunta Custom Main Manifest per generare un file Manifest personalizzato

Trova il file AndroidManifest.xml e aggiungi il marcatore VR affinché il dispositivo VR lo riconosca come app 3D immersiva, e l'app avviata verrà visualizzata come spazio 3D. Esempio:

<?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>

        <!--Usato quando Application Entry è impostato su GameActivity, altrimenti rimuovi questo blocco activity-->
        <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>

Scatti quando il frame rate di rendering è inferiore a 90FPS

Lo standard OpenXR stesso non definisce l'interpolazione dei fotogrammi, lo smoothing o contenuti correlati; quando il frame rate non riesce a raggiungere 90FPS, si avvertirà un notevole senso di scatti durante la rotazione della testa o il movimento. Per offrire un'esperienza migliore, soprattutto per migliorare la fluidità con prestazioni hardware limitate, i produttori di dispositivi di solito forniscono tecniche come tweening, interpolazione dei fotogrammi e smoothing, come ATW (Asynchronous Time Warp), PTW (Late Stage Reprojection), ecc.

Se il dispositivo supporta OpenXR, i produttori di solito forniscono un'OpenXR Extension o un SDK che supporta direttamente OpenXR; in questo caso è meglio introdurre l'SDK del produttore del dispositivo per un'esperienza più fluida.

Riferimenti correlati

  • Per le impostazioni di progetto e l'ottimizzazione delle prestazioni, consulta i capitoli Guida all'ottimizzazione delle impostazioni di progetto e Guida ai parametri di prestazione del rendering.
  • La capacità di rendering su schermo del dispositivo VR per la 3DGS è di circa 700.000 primitive gaussiane; quando si renderizzano scene grandi, si consiglia di impostare StartLOD su 2 e di disabilitare la visualizzazione dei dati ambiente; le scene grandi saranno più fluide con lo streaming PC.