Импорт и предварительный просмотр 3D-ресурсов

Узнайте, как импортировать 3D-модели, преобразовывать их в формат Sceneform и просматривать их в Android Studio.

Импорт нового 3D-ресурса

Sceneform поддерживает 3D-ресурсы в следующих форматах:

  • ОБЖ
  • glTF (анимация не поддерживается)
  • FBX, с анимацией или без.

Выполните следующие действия, чтобы импортировать новый 3D-ресурс:

  1. Убедитесь, что папка app вашего проекта содержит папку sampledata .

    Чтобы создать папку, щелкните правой кнопкой мыши папку app в окне « Проект» , затем выберите « Создать» > «Каталог образцов данных» .

    Папка sampledata является частью вашего проекта Android Studio, но ее содержимое не будет включено в ваш APK.

  2. Скопируйте исходный файл 3D-модели ( *.obj , *.fbx .fbx или *.gltf ) и все его зависимости ( *.mtl , *.bin , *.png , *.jpg и т. д.) в sampledata папка.

    Не копируйте эти исходные файлы в папку assets или res вашего проекта, так как это приведет к их ненужному включению в APK.

  3. Щелкните правой кнопкой мыши исходный актив 3D-модели и выберите «Импортировать актив сцены» , чтобы начать процесс импорта.

    Значения используются sceneform.asset() в build.gradle приложения и определяют, где в вашем проекте будут созданы файлы *.sfa и *.sfb .

    Если вы импортируете модель впервые, используйте значения по умолчанию.

    Поле Описание
    Путь исходного актива Имя файла актива 3D-модели OBJ, FBX или glTF для импорта.
    Путь материала default указывает Sceneform использовать встроенный материал по умолчанию или путь к файлу пользовательского материала *.mat .
    Выходной путь .sfa Используйте значение по умолчанию или укажите другой путь в папке sampledata .

    Файл .sfa создается, если отсутствует. Его можно изменить , чтобы контролировать некоторые аспекты процесса импорта.

    Это гарантирует, что *.sfa не будет включен в ваш APK без необходимости.

    Выходной путь .sfb По умолчанию используется папка src/main/ assets / , что позволяет использовать произвольные имена файлов ресурсов.

    Если имя файла (без расширения файла) является действительным идентификатором ресурса (например, R.raw.filename ), то вы можете вместо этого использовать папку src/main/ res/raw / , если хотите.

    Дополнительные сведения об использовании папок assets/ и res/ в приложении см. в обзоре ресурсов приложений для Android.

    Файлы анимации

    Если вы импортируете файлы анимации *.fbx , щелкните значок плюса (+) и добавьте остальные файлы по отдельности.

  4. Нажмите Готово , чтобы начать процесс импорта.

Чтобы импортировать ваш актив, плагин делает следующее:

  1. Добавляет плагин gradle Sceneform в build.gradle вашего проекта, если он еще не существует:

    dependencies {
        …
        classpath 'com.google.ar.sceneform:plugin:1.15.0'
    }
    
  2. Обновляет файл build.gradle вашего приложения, чтобы включить строку apply plugin и запись sceneform.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.
    

    Эти новые записи в build.gradle приложения создают две задачи gradle:

    • createAsset-<asset-name> создает файл определения актива Sceneform ( *.sfa ), если он еще не существует.

      Эта задача не перезапишет существующий файл *.sfa , что означает, что любые изменения, внесенные в файл SFA после импорта, не будут перезаписаны.

      Файл *.sfa — это текстовый файл, который содержит полное, удобочитаемое описание настроек импорта актива. Он ссылается на модели и текстуры в вашем исходном активе, а также определяет материалы, предоставляя параметры материала для физически основанных материалов Sceneform.

    • compileAsset-<asset-name> компилирует файл *.sfa в файл двоичного актива Sceneform ( *.sfb ).

      Этот файл *.sfb встраивается в APK вашего приложения и загружается во время выполнения для создания визуализируемого файла .

    Дополнительные сведения см. в справочнике по плагину Sceneform Gradle .

  3. Открывает *.sfa в текстовом окне и *.sfb в окне просмотра .

Обновите ранее импортированный 3D-ресурс

Когда вы обновляете ранее импортированный файл исходного ресурса модели OBJ, FBX или glTF ( *.obj , *.fbx .fbx или *.gltf ), соответствующая sceneform.asset() в build.gradle вашего приложения заставляет плагин автоматически создать обновленный файл *.sfb на основе текущих параметров *.sfa .

Чтобы повторить параметры для уже импортированного актива:

  • Измените текстовый файл *.sfa , используя справочник по формату файла SFA в качестве руководства.
  • Сохраните изменения. Это приводит к повторной компиляции актива и обновлению файла *.sfb .
  • Предварительно просмотрите обновленный ресурс, дважды щелкнув файл *.sfb , чтобы открыть окно средства просмотра ресурсов.

Если вы обновляете ранее импортированный ресурс, содержащий данные анимации, импортируйте каждый из обновленных файлов *.fbx по отдельности, используя знак «плюс» (+) в разделе « Файлы анимации » диалогового окна импорта.

Определения активов Gradle

Процесс импорта добавляет все файлы анимации *.fbx .fbx в конец файла 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'])

Создайте визуализацию

Как только ресурс скомпилирован в формат *.sfb , вы можете создать ModelRenderable и прикрепить его к узлу в сцене следующим образом:

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

Использование нестандартных материалов

Материалы Sceneform по умолчанию позволяют разработчикам легко получать великолепные результаты. Вы также можете использовать пользовательские материалы , чтобы глубоко настроить внешний вид ваших активов.

Чтобы назначить пользовательский материал для вашего актива:

  1. Создайте файл определения пользовательского материала ( *.mat ), используя [Справочник по пользовательскому материалу](/sceneform/develop/custom-material в качестве руководства.

  2. Примените пользовательский материал к активу:

    При импорте нового актива :

    Чтобы обновить ранее импортированный актив :

    • Если содержимое *.sfa не было настроено, удалите существующие *.sfa и *.sfb и запись sceneform.asset sceneform.asset() в build.gradle приложения , а затем повторно импортируйте ресурс. Это гарантирует, что регенерированные атрибуты *.sfa и параметры материала будут соответствовать параметрам, поддерживаемым вашим пользовательским материалом.

    • Чтобы сохранить любые сделанные вами настройки *.sfa , откройте файл *.sfa и измените source атрибут на путь к вашему пользовательскому файлу материала *.mat , затем вручную настройте атрибуты *.sfa и параметры материала, чтобы они соответствовали вашим пользовательским настройкам. материал.