Impostazioni consigliate per UnityRecommended settings for Unity

Unity offre un set di opzioni predefinite che in genere corrispondono al caso medio per tutte le piattaforme.Unity provides a set of default options that are generally the average case for all platforms. Unity offre tuttavia alcuni comportamenti specifici per la realtà mista che possono essere alternate tramite le impostazioni del progetto.However, Unity offers some behaviors specific to mixed reality that can be toggled through project settings.

Impostazione dell'ambiente di esecuzionePerformant environment set-up

Impostazioni di bassa qualitàLow-quality settings

È importante modificare le impostazioni di qualità di Unity in modo molto basso , in modo che l'applicazione sia in esecuzione e venga eseguita correttamente nel framerate appropriato, soprattutto per lo sviluppo HoloLens.It's important to modify the Unity Quality settings to Very Low so that your application is runs and performs well at the appropriate framerate, especially for HoloLens development. Per lo sviluppo di auricolari immersivi, a seconda delle specifiche del desktop che sfruttano l'esperienza VR, è comunque possibile ottenere un framerate senza i parametri di qualità più bassi.For development on immersive headsets, depending on the specs of the desktop powering the VR experience, one can still achieve framerate without the lowest quality parameters.

In Unity 2019 LTS + è possibile impostare il livello di qualità del progetto modificando > la qualità delle impostazioni del progetto > e impostando il valore predefinito facendo clic sulla freccia verso il basso per il livello di qualità * * molto basso.In Unity 2019 LTS+, you can set the project's quality level by going to Edit > Project Settings > Quality and setting the Default by clicking on the downward arrow to the **Very Low-quality level.

Impostazioni di illuminazioneLighting settings

Analogamente alle impostazioni della scena di qualità, è importante impostare impostazioni di illuminazione ottimali per l'applicazione di realtà mista.Similar to Quality scene settings, it's important to set optimal Lighting settings for your Mixed Reality application. In Unity, l'impostazione di illuminazione che in genere avrà un maggiore effetto sulle prestazioni sulla scena è l' illuminazione globale in tempo reale.In Unity, the Lighting setting that will usually have the greatest performance impact on your scene is Realtime Global Illumination. È possibile disattivare l'illuminazione globale passando a finestra impostazioni di illuminazione per il > rendering in > > tempo reale illuminazione globale.You can turn off Global Illumination by going to Window > Rendering > Lighting Settings > Realtime Global Illumination.

C'è un'altra impostazione di illuminazione, un' illuminazione globale al forno.There's another lighting setting, Baked Global Illumination. Questa impostazione consente di ottenere risultati accattivanti e visivi per gli auricolari immersivi, ma non è applicabile per lo sviluppo HoloLens.This setting can provide performant and visually striking results on immersive headsets but isn't applicable for HoloLens development. L' illuminazione globale al forno viene calcolata solo per GameObject statici, che non sono disponibili in HoloLens Scenes a causa della natura di un ambiente sconosciuto e mutevole.Baked Global Illumination is only calculated for static GameObjects, which aren't found in HoloLens scenes because of the nature of an unknown and changing environment.

Per altre informazioni, leggere illuminazione globale da Unity .Read Global Illumination from Unity for more information.

Nota

L' illuminazione globale in tempo reale è impostata per ogni scena e pertanto gli sviluppatori devono salvare questa proprietà per ogni scena Unity nel progetto.Realtime Global Illumination is set per-scene and thus developers must save this property for every Unity scene in their project.

Percorso di rendering per istanze Single PassSingle pass instancing rendering path

Nelle applicazioni di realtà mista la scena viene visualizzata due volte, una per ogni occhio all'utente.In Mixed Reality applications, the scene is rendered twice, once for each eye to the user. Rispetto allo sviluppo 3D tradizionale, questo raddoppia effettivamente la quantità di lavoro che deve essere calcolata.Compared to traditional 3D development, this effectively doubles the amount of work that needs to be computed. È importante selezionare il percorso di rendering più efficiente in Unity per salvarlo in tempo CPU e GPU.It's important to select the most efficient rendering path in Unity to save both on CPU and GPU time. Il rendering con istanza Single Pass ottimizza la pipeline di rendering Unity per le app di realtà miste ed è consigliabile abilitare questa impostazione per impostazione predefinita per ogni progetto.Single pass instanced rendering optimizes the Unity rendering pipeline for Mixed Reality apps and it's recommended to enable this setting by default for every project.

Per abilitare questa funzionalità nel tuo progetto UnityTo enable this feature in your Unity Project

  1. Apri Player XR Settings (Impostazioni XR riproduttore). A tale scopo, vai a Edit (Modifica) > Project Settings (Impostazioni progetto) > Player (Riproduttore) > XR Settings (Impostazioni XR)Open Player XR Settings (go to Edit > Project Settings > Player > XR Settings)
  2. Scegli Single Pass Instanced (Con istanze a singolo passaggio) dal menu a discesa Stereo Rendering Method (Metodo di rendering stereo). Deve essere selezionata la casella di controllo Virtual Reality Supported (Realtà virtuale supportata)Select Single Pass Instanced from the Stereo Rendering Method drop-down menu (Virtual Reality Supported checkbox must be checked)

Per informazioni dettagliate su questo approccio di rendering, vedere gli articoli seguenti di Unity.Read the following articles from Unity for more details with this rendering approach.

Nota

Un problema comune relativo al rendering con istanze a singolo passaggio si verifica se gli sviluppatori dispongono già di shader personalizzati non scritti per la creazione di istanze.One common issue with Single Pass Instanced Rendering occurs if developers already have existing custom shaders not written for instancing. Dopo l'abilitazione di questa funzionalità, gli sviluppatori possono notare che per alcuni GameObject viene eseguito il rendering in un solo occhio.After enabling this feature, developers may notice some GameObjects only render in one eye. Ciò è dovuto al fatto che gli shader personalizzati associati non hanno le proprietà appropriate per la creazione di istanze.This is because the associated custom shaders do not have the appropriate properties for instancing.

Per informazioni su come risolvere questo problema, vedi l'articolo di Unity Single Pass Stereo Rendering for HoloLens (Rendering stereo a singolo passaggio per HoloLens)See Single Pass Stereo Rendering for HoloLens from Unity for how to address this problem

Abilita condivisione buffer di profonditàEnable depth buffer sharing

Per ottenere una migliore stabilità dell'ologramma dalla percezione dell'utente, è consigliabile abilitare la proprietà depth buffer sharing in Unity.To achieve better hologram stability from the perception of the user, it's recommended to enable the Depth Buffer Sharing property in Unity. Se si attiva questa impostazione, Unity condividerà la mappa di profondità prodotta dall'applicazione con la piattaforma di realtà mista di Windows.By turning this on, Unity will share the depth map produced by your application with the Windows Mixed Reality platform. La piattaforma può quindi ottimizzare la stabilità degli ologrammi in modo specifico per la scena per qualsiasi frame sottoposto a rendering dall'applicazione.The platform can then better optimize hologram stability specifically for your scene for any given frame being rendered by your application.

Per abilitare questa funzionalità nel tuo progetto UnityTo enable this feature in your Unity Project

  1. Apri Player XR Settings (Impostazioni XR riproduttore). A tale scopo, vai a Edit (Modifica) > Project Settings (Impostazioni progetto) > Player (Riproduttore) > XR Settings (Impostazioni XR)Open Player XR Settings (go to Edit > Project Settings > Player > XR Settings)
  2. Selezionare la casella di controllo Abilita condivisione buffer di profondità in Virtual Reality SDK > espansione di realtà mista Windows (casella di controllo Virtual Reality supported )Select the checkbox for Enable Depth Buffer Sharing under Virtual Reality SDKs > Windows Mixed Reality expansion (Virtual Reality Supported checkbox must be checked)

Si consiglia inoltre di selezionare la profondità a 16 bit nell'impostazione del formato Depth in questo pannello, specialmente per lo sviluppo HoloLens.Further, it's recommended to select 16-bit depth under the Depth Format setting in this panel, especially for HoloLens Development. La selezione di 16 bit rispetto a 24 bit ridurrà in modo significativo i requisiti di larghezza di banda, in quanto sarà necessario spostare o elaborare i dati.Selecting 16-bit compared to 24-bit will significantly reduce the bandwidth requirements as less data will need to be moved/processed.

Per ottimizzare la stabilità dell'ologramma, la piattaforma per la realtà mista di Windows si basa sul buffer di profondità, che corrisponde a tutti gli ologrammi sottoposti a rendering sullo schermo.In order for the Windows Mixed Reality platform to optimize hologram stability, it relies on the depth buffer to be accurate and match any rendered holograms on screen. Pertanto, con la condivisione del buffer di profondità in, è importante quando si esegue il rendering del colore, per eseguire anche il rendering della profondità.Thus, with depth buffer sharing on, it is important when rendering color, to also render depth. In Unity, la maggior parte dei materiali opachi o TransparentCutout eseguirà il rendering per impostazione predefinita, ma gli oggetti trasparenti e di testo non eseguiranno il rendering della profondità sebbene questo sia dipendente dallo shader e così via.In Unity, most Opaque or TransparentCutout materials will render depth by default but transparent and text objects will not render depth although this is shader-dependent, etc.

Se si usa il Toolkit di realtà misto standard shader, per eseguire il rendering della profondità per gli oggetti trasparenti:If using the Mixed Reality Toolkit Standard shader, to render depth for transparent objects:

  1. Selezionare il materiale trasparente che usa lo shader standard MRTK e aprire la finestra Editor di controlloSelect the transparent material that is using the MRTK Standard shader and open the Inspector editor window
  2. Selezionare il pulsante Correggi ora nell'avviso di condivisione del buffer di profondità.Select the Fix Now button within the depth buffer sharing warning. Questa operazione può essere eseguita anche manualmente impostando la modalità di rendering su personalizzata; Impostare quindi mode su Transparent e infine impostare Depth Write su onThis can also be performed manually by setting the Rendering Mode to Custom; then set Mode to Transparent and finally set Depth Write to On

Importante

Gli sviluppatori devono prestare attenzione alla lotta Z quando cambiano questi valori insieme alle impostazioni del piano vicino/lontano della fotocamera.Developers should beware of Z-fighting when changing these values along with the camera's near/far plane settings. Il combattimento Z si verifica quando due GameObject tentano di eseguire il rendering nello stesso pixel e a causa delle limitazioni della fedeltà del buffer di profondità (ovveroZ-Fighting occurs when two gameobjects try to render to the same pixel and due to limitations in fidelity of the depth buffer (i.e z depth), Unity non è in grado di distinguere l'oggetto che è davanti all'altro.z depth), Unity cannot discern which object is in front of the other. Gli sviluppatori noteranno uno sfarfallio tra due oggetti del gioco mentre combattono per lo stesso valore di profondità z.Developers will note a flickering between two game objects as they fight for the same z-depth value. Questo problema può essere risolto passando a un formato di profondità a 24 bit, perché sarà disponibile un intervallo più ampio di valori per ogni oggetto da calcolare per la profondità z dalla fotocamera.This can be solved by switching to 24-bit depth format as there will be a larger range of values for each object to calculate upon for their z-depth from the camera.

Tuttavia, è consigliabile, in particolare per lo sviluppo di HoloLens, modificare invece i piani vicini e lontani della fotocamera in un intervallo più piccolo e mantenere il formato di profondità a 16 bit.However, it is recommended, particularly for HoloLens development, to modify the camera's near and far planes to a smaller range instead and retain the 16-bit depth format. La profondità z è mappata in modo non lineare all'intervallo di valori lungo i piani della fotocamera vicini e lontani.The z-depth is non-linearly mapped to the range of values along the near and far camera planes. Questo può essere modificato selezionando la fotocamera principale nella scena e sotto controllo, modificare i valori del piano di ritaglio vicino & lontano per ridurne l'intervallo (ad esempioThis can be modified by selecting the Main Camera in your scene and under Inspector, change the Near & Far Clipping Plane values to reduce their range (i.e da 1.000 a 100 milioni o altro valore x e così via)from 1000m to 100m or other x value, etc.)

Importante

Unity non crea un buffer di stencil quando si usa il formato di profondità a 16 bit.Unity does not create a stencil buffer when using 16-bit depth format. Di conseguenza, alcuni effetti dell'interfaccia utente di Unity e altri effetti necessari per gli stencil non funzioneranno a meno che non sia selezionata l'opzione formato di profondità a 24 bit che creerà un buffer di stencil a 8 bit.Thus, some Unity UI effects and other stencil-required effects will not work unless 24-bit depth format is selected which will create an 8-bit stencil buffer.

Compilazione per IL2CPPBuilding for IL2CPP

Unity ha deprecato il supporto per il back-end di scripting .NET e pertanto consiglia agli sviluppatori di usare IL2CPP per le compilazioni UWP di Visual Studio.Unity has deprecated support for the .NET scripting backend and thus recommends that developers utilize IL2CPP for their UWP visual studio builds. Anche se questo offre diversi vantaggi, la creazione della soluzione di Visual Studio da Unity per IL2CPP può essere più lenta rispetto al vecchio metodo .NET.Although this brings various advantages, building your visual studio solution from Unity for IL2CPP can be slower than the old .NET method. Pertanto, è consigliabile seguire le procedure consigliate per la compilazione di IL2CPP per risparmiare sul tempo di iterazione dello sviluppo.Thus, it is highly recommended to follow best practices for building IL2CPP to save on development iteration time.

  1. Utilizzare la compilazione incrementale compilando il progetto nella stessa directory ogni volta, riutilizzando i file predefinitiLeverage incremental building by building your project to the same directory every time, reusing the pre-built files there
  2. Disabilitare le analisi del software anti-malware per il progetto & cartelle di compilazioneDisable anti-malware software scans for your project & build folders
    • Aprire Virus & Threat Protection nell'app impostazioni di Windows 10Open Virus & threat protection under your Windows 10 settings app
    • Selezionare Gestisci impostazioni in virus & impostazioni di protezione dalle minacceSelect Manage Settings under Virus & threat protection settings
    • Selezionare Aggiungi o Rimuovi esclusioni nella sezione esclusioniSelect Add or remove exclusions under the Exclusions section
    • Selezionare Aggiungi un'esclusione e selezionare la cartella contenente il codice del progetto Unity e gli output di compilazioneSelect Add an exclusion and select the folder containing your Unity project code and build outputs
  3. Usare un'unità SSD per la compilazioneUse an SSD for building

Per altre informazioni, vedere ottimizzazione dei tempi di compilazione per IL2CPP .Read Optimizing Build Times for IL2CPP for more info.

Nota

Inoltre, potrebbe essere utile configurare un server di cache, soprattutto per i progetti Unity con una grande quantità di asset (esclusi i file di script) o con asset/scene in continua evoluzione.Furthermore, it may be beneficial to setup a Cache Server, especially for Unity projects with a large amount of assets (excluding script files) or constantly changing scenes/assets. All'apertura di un progetto, Unity archivia gli asset validi in un formato della cache interna nel computer di sviluppo.When opening a project, Unity stores qualifying assets into an internal cache format on the developer machine. Gli elementi devono essere reimportati e quindi rielaborati in caso di modifica.Items must be re-imported and thus re-processed when modified. Questo processo può essere eseguito una volta, salvato in un server di cache e quindi condiviso con altri sviluppatori in modo da risparmiare tempo, evitando a ciascuno sviluppatore di elaborare la reimportazione di nuove modifiche in locale.This process can be done once and saved in a Cache Server and consequently shared with other developers to save time, instead of every developer processing the re-import of new changes locally.

Proprietà di pubblicazionePublishing properties

Schermata iniziale olograficaHolographic splash screen

HoloLens dispone di una CPU e GPU di classe mobile, il che significa che le app potrebbero richiedere un po' più tempo per il caricamento.HoloLens has a mobile-class CPU and GPU, which means apps may take a bit longer to load. Durante il caricamento dell'app, gli utenti vedranno solo il nero, quindi possono chiedersi cosa sta accadendo.While the app is loading, users will just see black, and so they may wonder what's going on. Per rassicurarli durante il caricamento, è possibile aggiungere una schermata iniziale olografica.To reassure them during loading, you can add a holographic splash screen.

Per abilitare o disabilitare la schermata iniziale olografica:To toggle the holographic splash screen:

  1. Vai alla pagina modifica > Impostazioni progetto > lettoreGo to Edit > Project Settings > Player page
  2. Selezionare la scheda Windows Store e aprire la sezione immagine iniziale .Select the Windows Store tab and open the Splash Image section
  3. Applicare l'immagine sotto la proprietà olografica > olografica di Windows .Apply your image under the Windows Holographic > Holographic Splash Image property.
    • Impostando l'opzione Mostra schermata iniziale di Unity sarà abilitata o disabilitata la schermata iniziale di Unity personalizzata.Toggling the Show Unity Splash Screen option will enable or disable the Unity branded splash screen. Se non si ha una licenza Pro Unity, viene sempre visualizzata la schermata iniziale di Unity branded.If you don't have a Unity Pro license, the Unity branded splash screen will always be displayed.
    • Se viene applicata un' immagine iniziale olografica , questa verrà sempre visualizzata se la casella di controllo Mostra schermata iniziale Unity è abilitata o disabilitata.If a Holographic Splash Image is applied, it will always be displayed whether the Show Unity Splash Screen checkbox is enabled or disabled. Specificare un'immagine Splash olografica personalizzata è disponibile solo per gli sviluppatori che dispongono di una licenza Pro Unity.Specifying a custom holographic splash image is only available to developers with a Unity Pro license.
Mostra schermata iniziale UnityShow Unity Splash Screen Immagine Splash olograficaHolographic Splash Image ComportamentoBehavior
OnOn NessunoNone Mostra la schermata iniziale di Unity predefinita per 5 secondi o fino a quando non viene caricata l'app, a seconda del valore più lungoShow default Unity splash screen for 5 seconds or until the app is loaded, whichever is longer.
OnOn PersonalizzatoCustom Mostra la schermata iniziale personalizzata per 5 secondi o fino al caricamento dell'app, a seconda di quale sia il più lungo.Show Custom splash screen for 5 seconds or until the app is loaded, whichever is longer.
OffOff NessunoNone Mostra il nero trasparente (Nothing) finché l'app non viene caricata.Show transparent black (nothing) until app is loaded.
OffOff PersonalizzatoCustom Mostra la schermata iniziale personalizzata per 5 secondi o fino al caricamento dell'app, a seconda di quale sia il più lungo.Show Custom splash screen for 5 seconds or until the app is loaded, whichever is longer.

Per altre informazioni, vedere la documentazione della schermata iniziale di Unity .Read Unity's Splash Screen documentation for more info.

Perdita del tracciamentoTracking loss

Una cuffia a realtà mista dipende dall'ambiente in cui si trova l'ambiente per costruire sistemi di coordinate con blocco globale, che consentono di mantenere la posizione degli ologrammi.A Mixed reality headset depends on seeing the environment around it to construct world-locked coordinate systems, which allow holograms to remain in position. Quando l'auricolare non riesce a trovarsi nel mondo, si dice che l'auricolare ha perso il rilevamento.When the headset is unable to locate itself in the world, the headset is said to have lost tracking. In questi casi, le funzionalità che dipendono da sistemi di coordinate con blocco globale, ad esempio fasi spaziali, ancoraggi spaziali e mapping spaziale, non funzionano.In these cases, functionality dependent on world-locked coordinate systems, such as spatial stages, spatial anchors and spatial mapping, don't work.

Se si verifica una perdita di rilevamento, il comportamento predefinito di Unity prevede l'arresto del rendering degli ologrammi, la sospensione del ciclo di giocoe la visualizzazione di una notifica di rilevamento perso che segue comodamente lo sguardo degli utenti.If a loss of tracking occurs, Unity's default behavior is to stop rendering holograms, pause the game loop, and display a tracking lost notification that comfortably follows the users gaze. Le notifiche personalizzate possono essere fornite anche sotto forma di immagine di perdita del rilevamento.Custom notifications can also be provided in the form of a tracking loss image. Per le app che dipendono dal rilevamento per l'intera esperienza, è sufficiente consentire a Unity di gestire completamente questa operazione fino a quando il rilevamento non viene recuperato.For apps that depend upon tracking for their whole experience, it's sufficient to let Unity handle this entirely until tracking is regained. Gli sviluppatori possono fornire un'immagine personalizzata da visualizzare durante la perdita del rilevamento.Developers can supply a custom image to be shown during tracking loss.

Per personalizzare l'immagine del rilevamento perso:To customize the tracking lost image:

  1. Vai alla pagina modifica > Impostazioni progetto > lettoreGo to Edit > Project Settings > Player page
  2. Selezionare nella scheda Windows Store e aprire la sezione immagine iniziale .Select on the Windows Store tab and open the Splash Image section
  3. Applicare l'immagine sotto la proprietà dell' immagine della perdita di rilevamento > olografici di Windows .Apply your image under the Windows Holographic > Tracking Loss Image property.

Rifiutare esplicitamente la sospensione automaticaOpt-out of automatic pause

È possibile che alcune app non richiedano il rilevamento, ad esempio le app solo per l'orientamento, ad esempio i visualizzatori video di 360 gradi, oppure che sia necessario continuare l'elaborazione senza interruzioni durante la perdita del rilevamento.Some apps may not require tracking (e.g. orientation-only apps such as 360-degree video viewers) or may need to continue processing uninterrupted while tracking is lost. È possibile rifiutare esplicitamente la perdita predefinita del comportamento di rilevamento, ma si è responsabili di nascondere o disabilitare gli oggetti, che non vengono visualizzati correttamente in uno scenario di perdita del rilevamento.You can opt out of the default loss of tracking behavior but you're responsible for hiding/disabling any objects, which wouldn't render properly in a tracking-loss scenario. Nella maggior parte dei casi, l'unico contenuto che si consiglia di eseguire il rendering in questo caso è il contenuto con blocco del corpo, centrato attorno alla fotocamera principale.In most cases, the only content that is recommended to be render in that case is body-locked content, centered around the main camera.

Per rifiutare esplicitamente il comportamento di sospensione automatica:To opt out of automatic pause behavior:

  1. Vai alla pagina modifica > Impostazioni progetto > lettoreGo to the Edit > Project Settings > Player page
  2. Selezionare la scheda Windows Store e aprire la sezione immagine iniziale .Select the Windows Store tab and open the Splash Image section
  3. Modificare la casella di controllo > Windows olografico nella casella di controllo Sospendi perdita e Mostra immagine .Modify the Windows Holographic > On Tracking Loss Pause and Show Image checkbox.

Eventi di perdita di rilevamentoTracking loss events

Per definire un comportamento personalizzato quando il rilevamento viene perso, gestire gli eventi di perdita del rilevamentoglobale.To define custom behavior when tracking is lost, handle the global tracking loss events.

FunzionalitàCapabilities

Per fare in modo che un'app sfrutti i vantaggi di determinate funzionalità, deve dichiarare le funzionalità appropriate nel manifesto.For an app to take advantage of certain functionality, it must declare the appropriate capabilities in its manifest. Le dichiarazioni di manifesto possono essere apportate in Unity, in modo che siano incluse in ogni esportazione futura del progetto.The manifest declarations can be made in Unity so they're included in every future project export.

È possibile abilitare le funzionalità per un'applicazione di realtà mista:Capabilities can be enabled for a Mixed Reality application by:

  1. Vai alla pagina modifica > Impostazioni progetto > lettoreGo to Edit > Project Settings > Player page
  2. Selezionare la scheda Windows Store , aprire la sezione impostazioni di pubblicazione e cercare l'elenco delle funzionalitàSelect the Windows Store tab, open the Publishing Settings section, and look for the Capabilities list

Le funzionalità applicabili per l'abilitazione delle API di uso comune per le app olografiche sono:The applicable capabilities for enabling the commonly used APIs for Holographic apps are:

FunzionalitàCapability API che richiedono funzionalitàAPIs requiring capability
SpatialPerceptionSpatialPerception SurfaceObserverSurfaceObserver
WebCamWebCam Acquisizione e VideoCapturePhotoCapture and VideoCapture
PicturesLibrary/VideosLibraryPicturesLibrary / VideosLibrary Fotocapture o VideoCapture, rispettivamente (quando si archivia il contenuto acquisito)PhotoCapture or VideoCapture, respectively (when storing the captured content)
MicrofonoMicrophone VideoCapture (durante l'acquisizione dell'audio), DictationRecognizer, GrammarRecognizer e KeywordRecognizerVideoCapture (when capturing audio), DictationRecognizer, GrammarRecognizer, and KeywordRecognizer
InternetClientInternetClient DictationRecognizer (e per usare Unity Profiler)DictationRecognizer (and to use the Unity Profiler)

Vedere ancheSee also