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:
Sprawdź, czy folder
app
projektu zawiera foldersampledata
.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.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
anires
projektu, ponieważ spowoduje to niepotrzebne dodanie ich do pliku APK.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ć folderusrc/main/res/raw/
.Więcej informacji o korzystaniu z folderów
assets/
ires/
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.Kliknij Zakończ, aby rozpocząć proces importowania.
Aby zaimportować zasób, wtyczka wykonuje te czynności:
Dodaje wtyczkę Grace Sceneform do projektu
build.gradle
, jeśli jeszcze nie istnieje:dependencies { … classpath 'com.google.ar.sceneform:plugin:1.15.0' }
Zaktualizuj plik app's
build.gradle
, aby zawierał wierszapply plugin
i wpissceneform.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.
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:
Utwórz plik z niestandardową definicją materiału (
*.mat
), kierując się [materiałem niestandardowym](/sceneform/develop/custom-material).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 wpissceneform.asset()
w aplikacjibuild.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ń atrybutsource
na ścieżkę do pliku niestandardowego*.mat
, a następnie ręcznie dostosuj atrybuty*.sfa
i parametry materiału do swojego materiału niestandardowego.
- Określ plik niestandardowy materiału