Importowanie zasobów 3D i wyświetlanie ich podglądu

Dowiedz się, jak importować modele 3D, konwertować je do formatu Sceneform oraz wyświetlać ich podgląd w Android Studio.

Importowanie nowego zasobu 3D

Sceneform obsługuje zasoby 3D w tych formatach:

  • Obj
  • glTF (nieobsługiwane animacje)
  • VPAID z animacjami lub bez nich.

Aby zaimportować nowy zasób 3D:

  1. Sprawdź, czy folder app projektu zawiera folder sampledata.

    Aby utworzyć folder, kliknij prawym przyciskiem myszy folder app w oknie Projekt, a następnie wybierz Nowy > przykładowy katalog danych.

    Folder sampledata jest częścią projektu Android Studio, ale jego zawartość nie zostanie uwzględniona w pliku APK.

  2. Skopiuj do zasobu sampledata plik zasobu modelu modelu 3D (*.obj, *.fbx lub *.gltf) i wszystkie jego zależności (*.mtl, *.bin, *.png, *.jpg itd.).

    Nie kopiuj tych plików źródłowych do folderu assets ani res projektu, ponieważ spowoduje to niepotrzebne dodanie ich do pliku APK.

  3. Kliknij prawym przyciskiem myszy zasób źródłowy modelu 3D i wybierz Importuj zasób sceny, aby rozpocząć proces importowania.

    Wartości są używane przez pozycję sceneform.asset() w aplikacjachbuild.gradle i określają, gdzie zostaną wygenerowane pliki *.sfa i *.sfb w projekcie.

    Jeśli importujesz model po raz pierwszy, użyj wartości domyślnych.

    Pole Opis
    Źródłowa ścieżka do zasobu Nazwa pliku zasobu 3D OBJ, Anthos lub glTF do zaimportowania.
    Ścieżka materiałowa default informuje Sceneform o wbudowanych materiałach domyślnych lub ścieżce do pliku niestandardowego *.mat.
    Ścieżka wyjściowa.sfa Użyj ścieżki domyślnej lub podaj inną ścieżkę w folderze sampledata.

    W przypadku braku pliku .sfa zostanie wygenerowany. Można nim zmodyfikować, aby kontrolować niektóre aspekty procesu importowania.

    Dzięki temu komponent *.sfa nie zostanie niepotrzebnie uwzględniony w pliku APK.

    Ścieżka wyjściowa.sfb Domyślnie używany jest folder src/main/assets/, który umożliwia używanie dowolnych nazw plików zasobów.

    Jeśli nazwa pliku (bez rozszerzenia) jest prawidłowym identyfikatorem zasobu (np. R.raw.filename), zamiast tego możesz użyć folderu src/main/res/raw/.

    Więcej informacji o korzystaniu z folderów assets/ i res/ w aplikacji znajdziesz w artykule Omówienie zasobów aplikacji na Androidzie.

    Pliki animacji

    Jeśli importujesz pliki animacji *.fbx, kliknij znak plusa (+) i dodaj pozostałe pliki pojedynczo.

  4. Kliknij Zakończ, aby rozpocząć proces importowania.

Aby zaimportować zasób, wtyczka wykonuje te czynności:

  1. Dodaje wtyczkę Grace Sceneform do projektu build.gradle, jeśli jeszcze nie istnieje:

    dependencies {
        …
        classpath 'com.google.ar.sceneform:plugin:1.15.0'
    }
    
  2. Zaktualizuj plik app's build.gradle, aby zawierał wiersz apply plugin i wpis sceneform.asset() dla nowo zaimportowanego zasobu:

    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.
    

    Te nowe wpisy w aplikacji's build.gradle tworzą 2 zadania Gradle:

    • createAsset-<asset-name> tworzy plik definicji zasobu Scene(*.sfa), jeśli jeszcze nie istnieje.

      To zadanie nie zastąpi istniejącego pliku *.sfa, co oznacza, że wszelkie zmiany wprowadzone w pliku SFA po jego zastąpieniu nie zostaną zastąpione.

      Plik *.sfa to plik tekstowy zawierający pełny, czytelny dla człowieka opis ustawień importu zasobu. Odwołuje się on do modeli i tekstur w zasobie źródłowym, a także określa materiały, dostarczając parametry materiałowe do sceny fizycznej.

    • compileAsset-<asset-name> kompiluje plik *.sfa do pliku binarnego Sceneform (*.sfb).

      Ten plik *.sfb jest wbudowany w plik APK i uruchamiany w czasie działania, by utworzyć renderowaną wersję.

    Więcej informacji znajdziesz w przewodniku po wtyczce Gradle platformy Sceneform.

  3. Otwiera *.sfa w oknie tekstowym, a *.sfb w oknie Viewer.

Aktualizowanie wcześniej zaimportowanego zasobu 3D

Gdy zaktualizujesz wcześniej zaimportowany plik źródłowy modelu OBJ, eCPC lub glTF (*.obj, *.fbx lub *.gltf), odpowiedni wpis sceneform.asset() w aplikacji build.gradle spowoduje automatyczne wygenerowanie zaktualizowanego pliku *.sfb na podstawie bieżących parametrów *.sfa.

Aby iterować parametry już zaimportowanego zasobu:

  • Zmodyfikuj plik tekstowy *.sfa, kierując się wskaźnikiem formatu pliku SFA.
  • Zapisz zmiany. Spowoduje to ponowne skompilowanie zasobu i zaktualizowanie pliku *.sfb.
  • Wyświetl podgląd zaktualizowanego zasobu, klikając dwukrotnie plik *.sfb, aby otworzyć okno Przeglądający.

Jeśli aktualizujesz wcześniej zaimportowany zasób, który zawiera dane animacji, zaimportuj każdy ze zaktualizowanych plików *.fbx pojedynczo za pomocą znaku plusa (+) w sekcji Pliki animacji w oknie dialogowym importowania.

Definicje zasobów Gradle

Podczas importu dodawane są wszystkie pliki animacji *.fbx na końcu pliku build.gradle.

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'])

Utwórz mechanizm renderowania

Po skompilowaniu zasobu w formacie *.sfb możesz utworzyć ModelRenderable i załączyć go do węzła w scenie w następujący sposób:

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;
    });

Używanie materiałów niestandardowych

Materiały domyślne – sceneforma – ułatwiają programistom uzyskanie atrakcyjnych wyników. Możesz też użyć materiałów niestandardowych, aby dostosować wygląd zasobów.

Aby przypisać materiały niestandardowe do zasobu:

  1. Utwórz plik z niestandardową definicją materiału (*.mat), kierując się [materiałem niestandardowym](/sceneform/develop/custom-material).

  2. Zastosuj do zasobu materiały niestandardowe:

    Podczas importowania nowego zasobu:

    • Określ plik niestandardowy materiału *.mat podczas importowania.

    Aby zaktualizować wcześniej zaimportowany zasób:

    • Jeśli treść *.sfa nie została dostosowana, usuń obecne pliki *.sfa i *.sfb oraz wpis sceneform.asset() w aplikacji build.gradle, a następnie ponownie zaimportuj zasób. Dzięki temu wygenerowane atrybuty *.sfa i parametry materiału będą zgodne z parametrami obsługiwanymi przez materiały niestandardowe.

    • Aby zachować wszystkie wprowadzone dostosowania *.sfa, otwórz plik *.sfa i zmień atrybut source na ścieżkę do pliku niestandardowego *.mat, a następnie ręcznie dostosuj atrybuty *.sfa i parametry materiału do swojego materiału niestandardowego.