Начало работы со сценой

На этой странице объясняются ключевые концепции путем изучения кода примера приложения Hello Sceneform . Примечание:

  • В этом примере используются Sceneform и ARCore.

    Чтобы использовать Sceneform без ARCore, выполните следующие шаги, игнорируя требования к зависимостям ARCore и разрешению CAMERA. Используйте SceneView в макете вашего приложения, как описано в разделе Создание сцены .

  • Этот образец приложения написан как приложение, требующее дополненной реальности.

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

Чтобы начать использовать Sceneform в своем проекте, вам необходимо:

  1. Импорт плагина Sceneform
  2. Настройте файлы build.gradle вашего проекта
  3. Обновите свой AndroidManifest.xml
  4. Выполните проверки во время выполнения и создайте представление сцены
  5. Создать визуализацию
  6. Создайте сцену

Импортируйте плагин Sceneform в свой проект

После установки подключаемый модуль Sceneform позволяет импортировать, просматривать и создавать 3D-ресурсы в SDK Sceneform для приложений дополненной реальности в Android Studio. Для этого требуется Android Studio версии 3.1 и выше.

Чтобы установить плагин:

  1. В Android Studio откройте настройки плагинов :

    • Windows: Файл > Настройки > Плагины > Обзор репозиториев

    • macOS: Android Studio > Настройки > Плагины

  2. Щелкните Обзор репозиториев и установите Google Sceneform Tools (бета-версия) .

Настройте файлы build.gradle вашего проекта

  1. Убедитесь, что build.gradle вашего проекта включает репозиторий Google Maven:

    allprojects {
        repositories {
            google()
            …
    
  2. Обновите build.gradle вашего приложения, чтобы добавить последние зависимости ARCore и Sceneform UX, и убедитесь, что настройки вашего проекта совместимы с обеими библиотеками.

    android {
        …
        defaultConfig {
            // Sceneform requires minSdkVersion >= 24.
            minSdkVersion 24
            …
        }
        // Sceneform libraries use language constructs from Java 8.
        // Add these compile options if targeting minSdkVersion < 26.
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
    }
    
    dependencies {
        …
        // Provides ARCore Session and related resources.
        implementation 'com.google.ar:core:1.15.0'
    
        // Provides ArFragment, and other UX resources.
        implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0'
    
        // Alternatively, use ArSceneView without the UX dependency.
        implementation 'com.google.ar.sceneform:core:1.15.0'
    }
    

Обновите свой AndroidManifest.xml

Измените файл AndroidManifest.xml , чтобы указать, что ваше приложение использует ( необязательный AR ) или требует (требуется AR ) доступ к ARCore и CAMERA:

<!-- Both "AR Optional" and "AR Required" apps require CAMERA permission. -->
<uses-permission android:name="android.permission.CAMERA" />

<!-- Sceneform requires OpenGL ES 3.0 or later. -->
<uses-feature android:glEsVersion="0x00030000" android:required="true" />

<!-- Indicates that app requires ARCore ("AR Required"). Ensures the app is
     visible only in the Google Play Store on devices that support ARCore.
     For "AR Optional" apps remove this line. -->
<uses-feature android:name="android.hardware.camera.ar" />

<application>
    …
    <!-- Indicates that app requires ARCore ("AR Required"). Causes the Google
         Play Store to download and install Google Play Services for AR along
         with the app. For an "AR Optional" app, specify "optional" instead of
         "required".
    -->
    <meta-data android:name="com.google.ar.core" android:value="required" />
</application>

Выполните проверки во время выполнения и создайте представление сцены

Самый простой способ начать использовать Sceneform и создать представление сцены — это использовать ArFragment , который автоматически обрабатывает управление сеансом ARCore после выполнения необходимых проверок во время выполнения ARCore:

  1. Проверяет, установлена ​​ли совместимая версия Google Play Services для AR , предлагая пользователю установить или обновить ее по мере необходимости.

  2. Проверяет, есть ли у приложения доступ к камере, и запрашивает у пользователя разрешение, если оно еще не было предоставлено

Если вашему приложению необходимо запрашивать дополнительные разрешения или вы хотите настроить способ и время создания сеанса дополненной реальности, вы можете вместо этого:

  • Создайте подкласс ArFragment для запроса дополнительных разрешений.

  • Используйте или ArSceneView напрямую. Ваше приложение должно выполнить проверку версии ARCore и вызвать setupSession() для создания сеанса ARCore вручную, как показано в примере Solar System .

После прохождения проверки ArFragment создает:

  1. ArSceneView , доступный через getArSceneView() , который:

    • Отрисовывает изображения камеры из сеанса на своей поверхности

    • Визуализирует встроенную анимацию UX Sceneform, которая показывает пользователям, как они должны перемещать свой телефон, чтобы активировать возможности дополненной реальности.

    • Выделяет обнаруженные Planes с помощью PlaneRenderer по умолчанию.

  2. Session ARCore, доступная через getSession()

Чтобы использовать ArFragment в своем приложении, добавьте его в макет действия, как показано в файле activity_ux.xml в образце Hello Sceneform :

<fragment android:name="com.google.ar.sceneform.ux.ArFragment"
    android:id="@+id/ux_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

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

Renderable — это 3D-модель, которая может быть размещена в любом месте сцены и состоит из мешей, материалов и текстур.

Renderables могут быть созданы из:

Пример приложения создает визуализацию из файла 3D andy.obj . Когда этот актив импортируется, плагин Sceneform обновляет build.gradle приложения, чтобы применить плагин и добавить запись 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.

Ресурс res/raw/andy используется для создания ModelRenderable :

private ModelRenderable andyRenderable;

@Override
protected void onCreate(Bundle savedInstanceState) {
    …

    ModelRenderable.builder()
        .setSource(this, R.raw.andy)
        .build()
        .thenAccept(renderable -> andyRenderable = renderable)
        .exceptionally(
            throwable -> {
            Log.e(TAG, "Unable to load Renderable.", throwable);
            return null;
        });
}

Создайте сцену

К ARSceneView прикреплена Scene . Сцена представляет собой древовидную структуру данных, содержащую Node , которые являются виртуальными объектами для визуализации.

Здесь рендеринг andy прикреплен непосредственно к корневому узлу сцены:

Node node = new Node();
node.setParent(arFragment.getArSceneView().getScene());
node.setRenderable(andyRenderable);

Каждый узел содержит всю информацию, необходимую Sceneform для его рендеринга (включая его положение, ориентацию и визуализируемый объект), а также для взаимодействия с ним (включая его форму столкновения и прослушиватели событий).

Узлы могут быть добавлены к другим узлам, образуя отношения родитель-потомок. Когда узел является дочерним по отношению к другому узлу, он перемещается, вращается и масштабируется вместе со своим родителем — подобно тому, как двигаются ваши руки при движении вашего тела. У узла может быть несколько потомков, но только один родитель, таким образом образуя древовидную структуру. Эта структура известна как граф сцены .

В каждом кадре Sceneform отображает график сцены с точки зрения камеры (управляемый отслеживанием движения ARCore). Ваше приложение может взаимодействовать со сценой, прослушивая события прикосновений и жестов, выполняя тесты нажатия узлов и размещая привязки. Дополнительные сведения см. в разделе Создание сцены и взаимодействие со сценой .