Aller au contenu

Travailler avec les Assets Bundles

URP + VR

Dans le cas d'une utilisation d'un Asset Bundle avec le moteur de rendu URP en VR, des dispositions particulière sont à intégrer. Une section en bas de page indique comment les produire.

Création des Assets bundles

Script de compilation des Assets Bundles

La création des Assets Bundles d'Unity est simple et ne nécessite que quelques actions. Il faut néanmoins produire un script permettant de générer les fichiers qui seront utilisés par la suite. Ce script est toujours le même et peut être trouvé dans la documentation officielle d'Unity :


using UnityEditor;
using System.IO;

public class CreateAssetBundles
{
    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAllAssetBundles()
    {
        string assetBundleDirectory = "Assets/AssetBundles";
        if (!Directory.Exists(assetBundleDirectory))
        {
            Directory.CreateDirectory(assetBundleDirectory);
        }
        BuildPipeline.BuildAssetBundles(assetBundleDirectory, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }
}

!

Le bien placé dans le dossier de projet.

Le script .Cs doit être placé dans le dossier Editor du dossier Assets du projet Unity. Après l'intégration de ce script d'éditeur, la barre de menu est étendue.

!

Le bien placé dans le dossier de projet.

Référencement d'un Asset Bundle et génération

!

Une scène Unity avec un nom d'Asset Bundle (La scène n'a aucun éclairage direct).

Le script intégré ne suffit pas à créer les Assets Bundles. En effet, il faut maintenant déclarer les objets et scènes qui seront intégrés aux fichiers Assets Bundles. Pour cela, nous devons nous placer dans la zone de projet Unity et sélectionner les éléments un par un de manière à leur affecter un nom de conteneur :

!

En bas à droite, la zone de référencement de l'Asset Bundle contenant notre scène (ici : boatsceneexport2.boat).

Lors de la génération via le script de création des Assets Bundles, un dossier spécial nommé AssetBundles est créé dans le répertoire de projet. Ce dossier contient l'ensemble des fichiers Assets Bundles créés.

!

Les fichiers Assets Bundles créés.

Dans notre cas, seul le fichier boatsceneexport2.boat est important, les autres fichiers sont inutiles toutefois, il est important de noter qu'il est possible qu'un Asset Bundle fasse référence à un autre fichier Asset Bundle, il convient donc, par simplicité, de copier tout le contenu du dossier généré dans le dossier de données utilisateur de VRmaze.

Copie vers VRmaze

Il est nécessaire de copier les données vers le dossier de données utilisateur de VRmaze, car le logiciel ne chargera des données que si elles sont présentes dans ce dossier.

Utilisation des assets bundles

Lorsque l'Asset Bundle est copié dans le dossier de données de VRmaze, il devient exploitable. VRmaze met à disposition deux types de loaders d'Asset Bundle. Le premier permet le chargement de prefabs et offre la possibilité de leur affecter une position et une orientation ainsi qu'un comportement spécifique. Le second consiste à charger une scène complète sur laquelle il n'y aura aucun contrôle direct. Cette seconde option est intéressante, car elle permet d'exploiter les textures de lumières par exemple.

!

L'objet 3D "Unity Scene" permet de charger une scène Unity depuis un Asset Bundle (avec un éclairage dynamique géré par VRmaze).

Export de scènes

Lors de l'export d'une scène Unity, il peut être intéressant de supprimer la lumière solaire. VRmaze propose en effet un système d'éclairage permettant l'illuminer une scène complète avec une possibilité de configuration simple. Quelque soit le système d'éclairage choisi, il convient soit de supprimer l'éclairage dynamique de sa scène, soit de supprimer l'éclairage dynamique de VRmaze.

Caméra dans une scène Unity

Lors de l'export de l'Asset Bundle, il convient de supprimer l'ensemble des caméras de la scène. En effet, le rendu étant géré par VRmaze, il ne faut pas de caméra dans la scène sous risque de la voir s'activer en lieu et place des caméras VRmaze.

temps de chargement

Les temps de chargement des Assets Bundles peuvent être longs en fonction de la lourdeur des objets intégrés.

Fichier Manifest

!

Le fichier manifest contient les informations à donner à VRmaze.

Pour chaque fichier Asset Bundle créé, un fichier manifest du même nom est ajouté. Ce fichier manifest contient des informations humainement lisibles permettant de savoir les noms des objets et scènes contenues dans l'Asset Bundle. Ces noms sont utilisés dans VRmaze pour charger les données.

Nom des ressources dans VRmaze

VRmaze attend le nom de la ressource à charger dans le fichier Asset Bundle. Seul le nom est nécessaire, pas le chemin. Ainsi, pour la ressource inscrite ainsi : Assets/Scenes/BoatSceneExport.unity, il faudra juste indiquer BoatSceneExport dans l'objet Unity Scene de VRmaze.

URP + Assets Bundle + VR !

Moteur de rendu URP

Cette considération n'est à prendre en compte que lors de l'utilisation du moteur de rendu URP (par défaut à partir VRmaze 2023).

Asset bundle en VR avec URP !

Une considération spéciale est à prendre en compte lorsqu'on souhaite utiliser un Asset Bundle pour la VR avec le moteur de rendu URP.

Les Assets Bundles sont un peu particuliers dans la mesure où ils regroupent les shaders compilés dans le bundle. Ainsi, lorsque vous téléchargez un asset bundle, les matériaux du bundle utiliseront les shaders spécifiés dans le bundle plutôt que ceux inclus de VRmaze.

C'est normalement le comportement idéal, mais le fait de construire un Asset Bundle dans un projet externe qui a des paramètres de projet différents peut mener à de gros soucis d'affichage.

Puisque c'est le cas avec VRmaze, (vous construisez des Assets Bundles sans le projet VRmaze), vous pouvez rencontrer des problèmes lorsque les shaders du bundle ne supportent pas toutes les fonctionnalités requises par VRmaze.

Par exemple, si vous créez des assets bundles dans un projet qui n'a pas de module XR installé, le processus de construction supprimera toutes les instances de shaders XR dans votre bundle. Il en résultera que les shaders qui ne supportent pas le rendu instancié utilisé par VRmaze et ne seront visible que sur un des deux yeux !

Pour permettre une visualisation correcte d'un Asset Bundle chargé en VR, il convient de s'assurer que le projet construisant l'Asset Bundle suit ces recommandations :

  • Extraire tous les matériaux
  • Activer le module XR
  • Activer le loader OpenVR
  • Forcer l'intégration de tous les shaders

Extraction des matériaux

Il est probable que l'Asset Bundle est issue d'une modélisation externe (sous Blender, 3DS Max ou tout autre). Lorsque le fichier (Obj, FBX etc.) est importé dans le projet Unity, il convient d'extraire les matériaux et les textures ; cela permet de modifier ou ajuster les paramètres de chaque objet indépendamment.

Pour ce faire, il faut sélectionner le fichier de modélisation directement dans l'onglet projet de Unity, et cliquer sur le bouton d'extraction de matériaux.

!

Les propriétés d'import d'un fichier OBJ dans Unity, avec le bouton d'extraction de matériaux.

pour en savoir plus : Page Unity

Activer le module XR

Pour permettre un affichage correct en VR, il convient d'indiquer que les shaders doivent intégrer les fonctionnalités VR. Pour ce faire, la première chose à faire est d'activer le module XR dans le projet Unity.

Il est nécessaire d'aller dans les propriétés du projet (Edit/ProjectSettings) et se rendre tout en bas de la liste des options du projet de manière à activer le module XR.

!

Le module XR activé (avec OpenVR installé...)

Installer le loader OpenVR

Par défaut, le loader OpenVR n'est pas disponible dans Unity. VRmaze repose sur ce loader pour permettre l'affichage en VR. Pour pouvoir l'activer, il convient tout d'abord d'installer le plugin SteamVR. Son installation est possible en téléchargeant le package (gratuit) depuis le magasin Unity ici

Une fois téléchargé, il devient disponible dans le package manager. Il faut tout d'abord le télécharger (via le bouton en bas à droite de la fenêtre) puis l'importer (avec le même bouton, toujours en bas à droite de la fenêtre).

!

Le plugin SteamVR accessible dans le package manager

Lorsque l'importation du plugin SteamVR est terminée, le projet Unity disposera de nouveaux dossiers de projet :

!

Le dossier SteamVR dans le projet Unity

Ne pas omettre les shaders variants

Pour terminer l'intégration des données relative à la lecture VR avec URP, il convient d’indiquer à Unity de ne pas omettre de variantes de shaders. Pour ce faire, il suffit de garder toutes les variantes en se rendant dans les paramètres graphiques du projet (Edit/Project settings/Graphics).

Il suffit d'indiquer "Keep All" dans le paramètre "Instancing Variant" :

!

La configuration des shaders variants.