Impostazioni consigliate per Unity
Unity offre un set di opzioni predefinite che in genere rappresentano il caso medio per tutte le piattaforme. Unity offre tuttavia alcuni comportamenti specifici della realtà mista che possono essere attivati o disattivati tramite le impostazioni del progetto.
Configurazione dell'ambiente con prestazioni elevate
Impostazioni di bassa qualità
È importante modificare le impostazioni di Unity Quality su Very Low in modo che l'applicazione venga eseguita e funzioni correttamente al framerate appropriato, in particolare per lo sviluppo holoLens. Per lo sviluppo di visori vr immersivi, a seconda delle specifiche del desktop che alimentano l'esperienza VR, è comunque possibile ottenere la frequenza dei fotogrammi senza i parametri di qualità più bassi.
In Unity 2019 LTS+, è possibile impostare il livello di qualità del progetto passando a Modifica> qualitàimpostazioni> progettoe impostando Il valore predefinito facendo clic sulla freccia verso il basso sul livello **Qualità molto bassa.
Impostazioni di illuminazione
Analogamente alle impostazioni della scena Quality, è importante impostare impostazioni di illuminazione ottimali per l'applicazione Realtà mista. In Unity, l'impostazione Illuminazione che in genere avrà il massimo impatto sulle prestazioni sulla scena è Illuminazione globale in tempo reale. È possibile disattivare l'illuminazione globale passando a Impostazioni>illuminazionedi rendering> della finestra >Illuminazione globale in tempo reale.
C'è un'altra impostazione di illuminazione, Illuminazione globale al forno. Questa impostazione può fornire risultati performanti e visivamente sorprendenti sulle cuffie immersive, ma non è applicabile per lo sviluppo di HoloLens. L'illuminazione globale al forno viene calcolata solo per gameobject statici, che non si trovano nelle scene di HoloLens a causa della natura di un ambiente sconosciuto e mutevole.
Per altre informazioni, vedere Illuminazione globale da Unity .
Nota
L'illuminazione globale in tempo reale è impostata per scena e quindi gli sviluppatori devono salvare questa proprietà per ogni scena unity nel progetto.
Percorso di rendering con istanze a passaggio singolo
Nelle applicazioni Realtà mista il rendering della scena viene eseguito due volte: una per ogni occhio. Rispetto allo sviluppo 3D tradizionale, ciò raddoppia di fatto la quantità di lavoro che deve essere calcolata. È importante selezionare il percorso di rendering più efficiente in Unity per risparmiare tempo sia sulla CPU che sulla GPU. Il rendering con istanza a passaggio singolo ottimizza la pipeline di rendering di Unity per le app di realtà mista; è consigliabile abilitare questa impostazione per impostazione predefinita per ogni progetto.
Per abilitare questa funzionalità nel progetto Unity
- Aprire Impostazioni OpenXR (passare a Modifica>impostazioni> progettoXR Plugin Management>OpenXR).
- Selezionare Single Pass Instanced dal menu a discesa Modalità rendering .
Per altri dettagli su questo approccio di rendering, vedere gli articoli seguenti di Unity.
- Come ottimizzare le prestazioni di realtà aumentata e realtà virtuale con rendering stereo avanzato
- Creazione di istanze a passaggio singolo
Nota
Un problema comune con il rendering con istanza a passaggio singolo si verifica se gli sviluppatori hanno già shader personalizzati esistenti non scritti per la creazione di istanze. Dopo aver abilitato questa funzionalità, gli sviluppatori possono notare alcuni GameObject di cui viene eseguito il rendering solo con un occhio. Ciò è dovuto al fatto che gli shader personalizzati associati non hanno le proprietà appropriate per l'istanza.
Abilitare la condivisione del buffer di profondità
Per ottenere una migliore stabilità dell'ologramma dalla percezione dell'utente, è consigliabile abilitare la proprietà Condivisione buffer di profondità in Unity. Attivando questa funzionalità, Unity condividerà la mappa di profondità prodotta dall'applicazione con la piattaforma Windows Mixed Reality. La piattaforma può quindi ottimizzare meglio la stabilità degli ologrammi in modo specifico per la scena per qualsiasi fotogramma sottoposto a rendering dall'applicazione.
Per abilitare questa funzionalità nel progetto Unity
- Aprire Impostazioni OpenXR (passare a Modifica>impostazioni> progettoXR Plugin Management>OpenXR).
- Selezionare Profondità 16 Bit dal menu a discesa Modalità invio profondità .
L'impostazione del buffer di profondità a 16 bit è particolarmente consigliata per lo sviluppo holoLens. La selezione di 16 bit rispetto a 24 bit ridurrà significativamente i requisiti di larghezza di banda, in quanto sarà necessario spostare/elaborare meno dati. Detto questo, l'ottimizzazione viene fornita con determinati costi. Assicurarsi di comprendere le implicazioni indicate nelle caselle Importanti riportate di seguito.
Affinché la piattaforma Windows Mixed Reality ottimizzi la stabilità degli ologrammi, si basa sul buffer di profondità per essere accurato e corrispondere agli ologrammi sottoposti a rendering sullo schermo. Pertanto, con la condivisione del buffer di profondità attivata, è importante quando si esegue il rendering del colore anche per il rendering della profondità. In Unity, la maggior parte dei materiali opachi o TransparentCutout eseguirà il rendering della profondità per impostazione predefinita, ma gli oggetti trasparenti e di testo non eseguono il rendering della profondità, anche se questo dipende dagli shader e da altri fattori.
Se si usa lo shader Standard Realtà mista Toolkit, per eseguire il rendering della profondità per gli oggetti trasparenti:
- Selezionare il materiale trasparente che usa lo shader Standard MRTK e aprire la finestra Editor controllo
- Selezionare il pulsante Correggi ora all'interno dell'avviso di condivisione del buffer di profondità. Questa operazione può essere eseguita manualmente anche impostando la modalità di renderingsu Personalizzata; quindi impostare Mode (Modalità) su Transparent (Trasparente) e infine Depth Write (Scrittura profondità) su On
Importante
Gli sviluppatori devono prestare attenzione al combattimento Z quando cambiano questi valori insieme alle impostazioni del piano vicino/lontano della fotocamera. Z-Fighting si verifica quando due oggetti gioco tentano di eseguire il rendering nello stesso pixel e a causa di limitazioni nella fedeltà del buffer di profondità (ad esempio la profondità z), Unity non riesce a distinguere quale oggetto si trova davanti all'altro. Gli sviluppatori noteranno uno sfarfallio tra due oggetti di gioco mentre combattono per lo stesso valore di profondità z. Questo problema può essere risolto passando al formato di profondità a 24 bit in quanto ci sarà un intervallo più ampio di valori per ogni oggetto da calcolare per la profondità z dalla fotocamera.
Tuttavia, è consigliabile, in particolare per lo sviluppo di HoloLens, modificare i piani vicini e lontani della fotocamera a un intervallo più piccolo e mantenere il formato di profondità a 16 bit. La profondità z viene mappata in modo non lineare all'intervallo di valori lungo i piani della fotocamera vicini e lontani. Questa operazione può essere modificata selezionando la fotocamera principale nella scena e in Inspector (Controllo), modificare i valori Near & Far Clipping Plane (Piano di ritaglio lontano ) per ridurre l'intervallo (ad esempio da 1000m a 100m o altro valore x e così via)
Importante
Unity non crea un buffer stencil quando si usa il formato di profondità a 16 bit. Di conseguenza, alcuni effetti dell'interfaccia utente di Unity e altri effetti obbligatori per gli stencil non funzioneranno a meno che non sia selezionato il formato di profondità a 24 bit che creerà un buffer di stencil a 8 bit.
Edificio per IL2CPP
Unity ha deprecato il supporto per il back-end di scripting .NET e pertanto consiglia agli sviluppatori di usare IL2CPP per le build di Visual Studio UWP. Anche se questo offre diversi vantaggi, la creazione della soluzione di Visual Studio da Unity per IL2CPP può essere più lenta rispetto al metodo .NET precedente. È quindi consigliabile seguire le procedure consigliate per la compilazione di IL2CPP per risparmiare tempo di iterazione dello sviluppo.
- Sfruttare la compilazione incrementale compilando il progetto nella stessa directory ogni volta, riutilizzando i file predefiniti.
- Disabilitare le analisi software antimalware per il progetto & cartelle di compilazione
- Aprire Protezione dalle minacce & virus nell'app delle impostazioni di Windows 10
- Selezionare Gestisci impostazioni in Impostazioni di protezione da virus & minacce
- Selezionare Aggiungi o rimuovi esclusioni nella sezione Esclusioni
- Selezionare Aggiungi un'esclusione e selezionare la cartella contenente il codice del progetto Unity e gli output di compilazione
- Usare un SSD per la compilazione
Per altre informazioni, vedere Ottimizzazione dei tempi di compilazione per IL2CPP .
Nota
Inoltre, può essere utile configurare un server di cache, in particolare per i progetti Unity con una grande quantità di asset (esclusi i file di script) o scene/asset in continua evoluzione. Quando si apre un progetto, Unity archivia gli asset idonei in un formato di cache interno nel computer per sviluppatori. Gli elementi devono essere reimportati e quindi rielaborati quando vengono modificati. Questo processo può essere eseguito una volta e salvato in un server di cache e di conseguenza condiviso con altri sviluppatori per risparmiare tempo, invece di ogni sviluppatore che elabora la reimportazione di nuove modifiche in locale.
Proprietà di pubblicazione
Schermata iniziale olografica
HoloLens ha una CPU e una GPU di classe mobile, il che significa che il caricamento delle app potrebbe richiedere un po' più tempo. Durante il caricamento dell'app, gli utenti vedranno solo il nero e quindi potrebbero chiedersi cosa sta succedendo. Per rassicurarli durante il caricamento, è possibile aggiungere una schermata iniziale olografica.
Per attivare o disattivare la schermata iniziale olografica:
- Passare alla pagina Modifica>impostazioni> progettoPlayer
- Selezionare la scheda Windows Store e aprire la sezione Immagine iniziale
- Applica l'immagine sotto la proprietà Windows Holographic > Holographic Splash Image .
- L'attivazione o disattivazione dell'opzione Mostra schermata iniziale di Unity abiliterà o disabiliterà la schermata iniziale con marchio Unity. Se non si dispone di una licenza unity Pro, verrà sempre visualizzata la schermata iniziale con marchio Unity.
- Se viene applicata un'immagine iniziale olografica , verrà sempre visualizzata se la casella di controllo Mostra schermata iniziale di Unity è abilitata o disabilitata. La specifica di un'immagine iniziale olografica personalizzata è disponibile solo per gli sviluppatori con licenza Unity Pro.
Mostra schermata iniziale di Unity | Immagine iniziale olografica | Comportamento |
---|---|---|
Attivato | Nessuno | Mostra la schermata iniziale predefinita di Unity per 5 secondi o fino al caricamento dell'app, a seconda di quale sia più lunga. |
Attivato | Personalizzato | Mostra la schermata iniziale personalizzata per 5 secondi o fino al caricamento dell'app, a seconda di quale sia più lunga. |
Disattivato | Nessuno | Mostra il nero trasparente (niente) fino al caricamento dell'app. |
Disattivato | Personalizzato | Mostra la schermata iniziale personalizzata per 5 secondi o fino al caricamento dell'app, a seconda di quale sia più lunga. |
Per altre informazioni, vedere la documentazione della schermata iniziale di Unity .
Perdita di rilevamento
Un visore VR di realtà mista dipende dalla visualizzazione dell'ambiente circostante per costruire sistemi di coordinate bloccati nel mondo, che consentono agli ologrammi di rimanere in posizione. Quando l'auricolare non è in grado di individuarsi nel mondo, si dice che l'auricolare abbia perso il tracciamento. In questi casi, le funzionalità dipendenti dai sistemi di coordinate bloccate nel mondo, ad esempio le fasi spaziali, gli ancoraggi spaziali e il mapping spaziale, non funzionano.
Se si verifica una perdita di rilevamento, il comportamento predefinito di Unity consiste nell'interrompere il rendering degli ologrammi, sospendere il ciclo di gioco e visualizzare una notifica di rilevamento persa che segue comodamente lo sguardo degli utenti. Le notifiche personalizzate possono anche essere fornite sotto forma di un'immagine di perdita di rilevamento. Per le app che dipendono dal rilevamento per l'intera esperienza, è sufficiente consentire a Unity di gestirlo completamente fino a quando il rilevamento non viene recuperato. Gli sviluppatori possono fornire un'immagine personalizzata da visualizzare durante la perdita di rilevamento.
Per personalizzare l'immagine di rilevamento persa:
- Passare alla pagina Modifica>impostazioni> progettoPlayer
- Selezionare la scheda Windows Store e aprire la sezione Immagine iniziale
- Applicare l'immagine sotto la proprietà Immagine di perdita di rilevamento olografico > di Windows .
Rifiuto esplicito della sospensione automatica
Alcune app potrebbero non richiedere il rilevamento (ad esempio app solo per l'orientamento , ad esempio visualizzatori video a 360 gradi) o potrebbero dover continuare a elaborare senza interruzioni durante la perdita del rilevamento. È possibile rifiutare esplicitamente la perdita predefinita del comportamento di rilevamento, ma si è responsabili di nascondere/disabilitare qualsiasi oggetto, che non viene eseguito correttamente in uno scenario di perdita di rilevamento. Nella maggior parte dei casi, l'unico contenuto di cui è consigliabile eseguire il rendering in questo caso è il contenuto bloccato dal corpo, centrato intorno alla fotocamera principale.
Per rifiutare esplicitamente il comportamento di sospensione automatica:
- Passare alla pagina Modifica>impostazioni> progettoPlayer
- Selezionare la scheda Windows Store e aprire la sezione Immagine iniziale
- Modificare la casella di controllo Windows Holographic > On Tracking Loss Pause e Show Image (Mostra immagine ).
Tenere traccia degli eventi di perdita
Per definire il comportamento personalizzato quando il rilevamento viene perso, gestire gli eventi di perdita di rilevamento globale.
Funzionalità
Affinché un'app possa sfruttare determinate funzionalità, deve dichiarare le funzionalità appropriate nel manifesto. Le dichiarazioni manifesto possono essere effettuate in Unity in modo che vengano incluse in ogni esportazione di progetto futura.
Le funzionalità possono essere abilitate per un'applicazione Realtà mista:
- Passare alla pagina Modifica>impostazioni> progettoPlayer
- Selezionare la scheda Windows Store, aprire la sezione Impostazioni di pubblicazione e cercare l'elenco Funzionalità
Le funzionalità applicabili per abilitare le API di uso comune per le app holographic sono:
Funzionalità | API che richiedono funzionalità |
---|---|
SpatialPerception | SurfaceObserver |
WebCam | PhotoCapture e VideoCapture |
PicturesLibrary/VideosLibrary | PhotoCapture o VideoCapture, rispettivamente (quando si archivia il contenuto acquisito) |
Microfono | VideoCapture (durante l'acquisizione dell'audio), DictationRecognizer, GrammarRecognizer e KeywordRecognizer |
InternetClient | DictationRecognizer (e per usare Unity Profiler) |