3D-Assets importieren und als Vorschau ansehen

Hier erfährst du, wie du 3D-Modelle importieren, in das Sceneform-Format konvertieren und eine Vorschau in Android Studio ansehen kannst.

Neues 3D-Asset importieren

Sceneform unterstützt 3D-Assets in den folgenden Formaten:

  • Logo: OBJ
  • glTF (Animationen werden nicht unterstützt)
  • Gboard, mit oder ohne Animationen.

So importieren Sie ein neues 3D-Asset:

  1. Achten Sie darauf, dass der Ordner app Ihres Projekts den Ordner sampledata enthält.

    Klicken Sie zum Erstellen des Ordners im Fenster Projekt mit der rechten Maustaste auf den Ordner app und wählen Sie Neues &Beispiel; Datenverzeichnis aus.

    Der Ordner sampledata ist Teil Ihres Android Studio-Projekts. Der Inhalt dieses Ordners ist jedoch nicht im APK enthalten.

  2. Kopieren Sie die Quell-Asset-Datei des 3D-Modells (*.obj, *.fbx oder *.gltf) und alle zugehörigen Abhängigkeiten (*.mtl, *.bin, *.png, *.jpg usw.) in den Ordner sampledata.

    Kopieren Sie diese Quelldateien nicht in den Ordner assets oder res Ihres Projekts, da sie sonst unnötig in Ihr APK aufgenommen werden.

  3. Klicken Sie mit der rechten Maustaste auf das Quell-Asset des 3D-Modells und wählen Sie Sceneform-Asset importieren aus, um den Importvorgang zu starten.

    Die Werte werden vom Eintrag sceneform.asset() in den Apps build.gradle verwendet und bestimmen, wo die Dateien *.sfa und *.sfb in Ihrem Projekt generiert werden.

    Wenn Sie ein Modell zum ersten Mal importieren, verwenden Sie die Standardwerte.

    Feld Beschreibung
    Quell-Asset-Pfad Dateiname des zu importierenden OBJ-, Gboard- oder glTF-3D-Modell-Assets.
    Materialpfad default weist Sceneform's an, das integrierte Standardmaterial oder den Pfad zu einer benutzerdefinierten Materialdatei *.mat zu verwenden.
    .sfa-Ausgabepfad Verwenden Sie die Standardeinstellung oder geben Sie im Ordner sampledata einen anderen Pfad an.

    Die .sfa-Datei wird generiert, falls sie fehlt. Er kann geändert werden, um einige Aspekte des Importvorgangs zu steuern.

    Dadurch wird sichergestellt, dass *.sfa nicht unnötig in dein APK aufgenommen wird.

    .sfb-Ausgabepfad Standardmäßig wird der Ordner src/main/assets/ verwendet, der die Nutzung beliebiger Asset-Dateinamen ermöglicht.

    Wenn der Dateiname (ohne Dateierweiterung) eine gültige Ressourcen-ID ist (z.B. R.raw.filename), können Sie stattdessen den Ordner src/main/res/raw/ verwenden.

    Weitere Informationen zur Verwendung der Ordner assets/ und res/ in Ihrer App finden Sie in der Übersicht zu App-Ressourcen unter Android.

    Animationsdateien

    Wenn Sie *.fbx Animationsdateien importieren, klicken Sie auf das Pluszeichen (+) und fügen Sie die restlichen Dateien einzeln hinzu.

  4. Klicken Sie auf Fertig, um den Import zu starten.

So importieren Sie das Asset:

  1. Fügt dem Projekt build.gradle das Sceneform-Gradle-Plug-in hinzu, falls es noch nicht vorhanden ist:

    dependencies {
        …
        classpath 'com.google.ar.sceneform:plugin:1.15.0'
    }
    
  2. Aktualisiert die Datei App build.gradle mit einer Zeile apply plugin und einem Eintrag sceneform.asset() für das neu importierte Asset:

    apply plugin: 'com.google.ar.sceneform.plugin'
    
    sceneform.asset('sampledata/models/andy.obj', // 'Source Asset Path' specified during import.
            'default',                            // 'Material Path' specified during import.
            'sampledata/models/andy.sfa',         // '.sfa Output Path' specified during import.
            'src/main/res/raw/andy')              // '.sfb Output Path' specified during import.
    

    Diese neuen Einträge in der build.gradle der Apps erstellen zwei Gradle-Aufgaben:

    • createAsset-<asset-name> erstellt eine Sceneform-Asset-Definitionsdatei (*.sfa), wenn sie noch nicht vorhanden ist.

      Diese Aufgabe überschreibt keine vorhandene *.sfa-Datei. Das bedeutet, dass Änderungen, die Sie nach dem Import an der SFA-Datei vornehmen, nicht überschrieben werden.

      Die Datei *.sfa ist eine Textdatei, die eine vollständige, für Menschen lesbare Beschreibung der Importeinstellungen des Assets enthält. Sie verweist auf die Modelle und Texturen in Ihrem Quell-Asset und definiert Materialien durch die Angabe von Materialparametern für physikalische Materialien von Szenen.

    • compileAsset-<asset-name> kompiliert die Datei *.sfa in eine binäre Sceneform-Asset-Datei (*.sfb).

      Diese *.sfb-Datei wird in das APK deiner App integriert und zur Laufzeit geladen, um das Rendering zu erstellen.

    Weitere Informationen finden Sie in der Referenz zum Gradle-Plug-in „Sceneform“.

  3. Öffnet die *.sfa in einem Textfenster und die *.sfb in einem Viewer-Fenster.

Zuvor importiertes 3D-Asset aktualisieren

Wenn Sie eine zuvor importierte OBJ-, Gboard- oder glTF-Modellquelle-Asset-Datei (*.obj, *.fbx oder *.gltf) aktualisieren, generiert der entsprechende sceneform.asset()-Eintrag in Ihrer App build.gradle automatisch eine aktualisierte *.sfb-Datei basierend auf den aktuellen *.sfa-Parametern.

So optimieren Sie die Parameter für ein bereits importiertes Asset:

  • Ändern Sie die Textdatei *.sfa anhand der Referenz zum SFA-Dateiformat.
  • Speichern Sie die Änderungen. Dadurch wird das Asset neu kompiliert und die Datei *.sfb aktualisiert.
  • Sehen Sie sich eine Vorschau des aktualisierten Assets an. Klicken Sie dazu doppelt auf die Datei *.sfb, um das Asset-Fenster Viewer zu öffnen.

Wenn Sie ein zuvor importiertes Asset aktualisieren, das Animationsdaten enthält, importieren Sie jede der aktualisierten *.fbx-Dateien einzeln mithilfe des Pluszeichens im Abschnitt Animationsdateien des Importdialogfelds.

Gradle-Asset-Definitionen

Beim Import werden alle *.fbx-Animationsdateien am Ende der Datei build.gradle hinzugefügt.

sceneform.asset('sampledata/models/andy_dance.fbx',
'default',
'sampledata/models/andy_dance.sfa',
'src/main/res/raw/andy_dance',
['sampledata/models/andy_wave_r.fbx',
'sampledata/models/andy_wave_l.fbx'])

Renderable erstellen

Sobald das Asset im *.sfb-Format kompiliert wurde, können Sie ein ModelRenderable erstellen und es so an einen Knoten in der Szene anhängen:

ModelRenderable.builder()
    // To load as an asset from the 'assets' folder ('src/main/assets/andy.sfb'):
    .setSource(this, Uri.parse("andy.sfb"))

    // Instead, load as a resource from the 'res/raw' folder ('src/main/res/raw/andy.sfb'):
    //.setSource(this, R.raw.andy)

    .build()
    .thenAccept(renderable -> andyRenderable = renderable)
    .exceptionally(
        throwable -> {
          Log.e(TAG, "Unable to load Renderable.", throwable);
          return null;
    });

Benutzerdefinierte Materialien verwenden

Dank der Standardmaterialien von Sceneform können Entwickler ganz einfach tolle Ergebnisse erzielen. Sie können auch benutzerdefiniertes Material verwenden, um das Aussehen Ihrer Assets umfassend anzupassen.

So weisen Sie Ihrem Asset ein benutzerdefiniertes Material zu:

  1. Erstellen Sie eine Datei mit der benutzerdefinierten Materialdefinition (*.mat) und verwenden Sie dabei die [Referenz zu benutzerdefiniertem Material](/sceneform/develop/custom-material).

  2. Wende das benutzerdefinierte Material auf das Asset an:

    Beim Importieren eines neuen Assets:

    • Geben Sie die benutzerdefinierte *.mat-Datei während des Importvorgangs an.

    So aktualisieren Sie ein zuvor importiertes Asset:

    • Wenn der *.sfa-Inhalt nicht angepasst wurde, löschen Sie die vorhandenen *.sfa- und *.sfb-Dateien und den Eintrag sceneform.asset() in den Apps build.gradle und importieren Sie das Asset dann noch einmal. Dadurch wird sichergestellt, dass die neu generierten *.sfa-Attribute und Materialparameter mit den von deinem benutzerdefinierten Material unterstützten übereinstimmen.

    • Wenn Sie die von Ihnen vorgenommenen *.sfa-Anpassungen beibehalten möchten, öffnen Sie die Datei *.sfa und ändern Sie das Attribut source in den Pfad zu Ihrer benutzerdefinierten *.mat-Datei. Passen Sie dann die *.sfa-Attribute und -Parameter manuell an das benutzerdefinierte Material an.