En esta página, se explican los conceptos clave mediante la exploración del código en la app de muestra Hello Sceneform. Nota:
En esta muestra, se usa Sceneform y ARCore.
Para usar Sceneform sin ARCore, sigue los pasos que se indican a continuación mientras ignoras los requisitos de permisos de CAMERA y dependencia de ARCore. Usa
SceneView
en el diseño de tu app como se describe en Cómo crear la escena.Esta app de ejemplo está escrita como app Requiere RA.
Para obtener más información sobre las apps AR Optional y AR Required, consulta Cómo habilitar ARCore.
Para comenzar a utilizar Sceneform en tu proyecto, debes hacer lo siguiente:
- Cómo importar el complemento Sceneform
- Configura los archivos
build.gradle
de tu proyecto - Actualiza tu
AndroidManifest.xml
- Realiza verificaciones del entorno de ejecución y crea una vista de escena
- Cómo crear elementos renderizables
- Compila la escena
Importa el complemento de Sceneform a tu proyecto
Una vez instalado, el complemento Sceneform te permite importar, ver y compilar elementos 3D en el SDK de Sceneform para apps de RA en Android Studio. Requiere Android Studio 3.1 y versiones posteriores.
Para instalar el complemento, ejecuta lo siguiente:
En Android Studio, abre la configuración de Plugins:
Windows: Archivo > Configuración > Complementos > Explorar repositorios
macOS: Android Studio > Preferences > Plugins
Haz clic en Explorar repositorios y, luego, instala las Herramientas de Google Sceneform (Beta).
Configura los archivos build.gradle
de tu proyecto
Asegúrate de que tu proyecto
build.gradle
incluya el repositorio Maven de Google:allprojects { repositories { google() …
Actualiza el archivo
build.gradle
de tu app para agregar las dependencias más recientes de UX de ARCore y Sceneform y asegúrate de que la configuración de tu proyecto sea compatible con ambas bibliotecas.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' }
Actualiza tu AndroidManifest.xml
Modifica tu AndroidManifest.xml
para indicar que tu app usa (opcional de RA) o requiere (acceso obligatorio) acceso a ARCore y 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>
Cómo realizar verificaciones de tiempo de ejecución y crear una vista de escena
La forma más fácil de comenzar a usar Sceneform y crear una vista de escena es mediante un ArFragment
, que controla automáticamente la administración de sesiones de ARCore después de realizar las verificaciones de entorno de ejecución de ARCore necesarias:
Comprueba si hay una versión compatible de los Servicios de Google Play para RA instalada y le solicita al usuario que la instale o actualice según sea necesario
Verifica si la app tiene acceso a la cámara y solicita permiso al usuario si aún no se otorgó.
Si tu app necesita solicitar permisos adicionales o si quieres personalizar cómo y cuándo se crea la sesión de RA, puedes hacer lo siguiente:
Crea una subclase de
ArFragment
para solicitar permisos adicionales.Usa o extiende
ArSceneView
directamente. Tu app debe realizar la verificación de la versión de ARCore y llamar asetupSession()
para crear la sesión de ARCore de forma manual, como se demuestra en la muestra del sistema solar.
Una vez que se aprueban las verificaciones, ArFragment
crea lo siguiente:
Un
ArSceneView
, al que se puede acceder a través degetArSceneView()
, y que:Procesa las imágenes de la cámara desde la sesión hasta su superficie.
Renderiza una animación de UX con Sceneform integrada que muestra a los usuarios cómo deben mover su teléfono para activar la experiencia de RA.
Elementos destacados detectados
Planes
con el valor predeterminadoPlaneRenderer
Un ARCore
Session
, al que se puede acceder a través degetSession()
Para usar ArFragment
en tu app, agrégala al diseño de tu actividad, como se muestra en activity_ux.xml
en la muestra 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" />
Cómo crear elementos renderizados
Un objeto Renderable
es un modelo en 3D que se puede colocar en cualquier lugar de la escena y que consiste en mallas, materiales y texturas.
Los elementos que se pueden renderizar pueden crearse a partir de los siguientes elementos:
Los
ViewRenderable
estándar de Android se procesan como tarjetas 2D planas en la escena 3D y mantienen la capacidad de interactuar con ellos mediante el tacto.Los archivos de elementos 3D (OBJ, FBX, glTF) se pueden importar, convertir y obtener una vista previa mediante el complemento de Android Studio. Para obtener más información, consulta Importar y obtener vistas previas de elementos 3D.
Las formas y los materiales básicos se pueden combinar de manera programática para crear objetos más complicados en el entorno de ejecución.
La app de muestra crea un archivo que se puede renderizar a partir de un archivo 3D andy.obj
. Cuando se importa este elemento, el complemento de Sceneform actualiza el build.gradle
de la app para aplicar el complemento y agregar una entrada sceneform.asset()
al modelo importado:
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.
El recurso res/raw/andy
se usa para crear un 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;
});
}
Crea la escena
El ARSceneView
tiene un Scene
adjunto.
La escena es una estructura de datos en forma de árbol que contiene objetos Node
que son los objetos virtuales que se renderizarán.
Aquí, el renderizado de andy se adjunta directamente al nodo raíz Scene:
Node node = new Node();
node.setParent(arFragment.getArSceneView().getScene());
node.setRenderable(andyRenderable);
Cada nodo contiene toda la información que Sceneform necesita procesar (incluida su posición, orientación y objeto que se puede renderizar), así como interactuar con él (incluida la forma de colisión y los objetos de escucha de eventos).
Los nodos se pueden agregar a otros nodos para formar una relación de superior y secundario. Cuando un nodo es un elemento secundario de otro nodo, se mueve, rota y escala con su superior, como cuando se mueven los brazos. Un nodo puede tener varios elementos secundarios, pero solo un superior, lo que forma una estructura en forma de árbol. Esta estructura se conoce como el gráfico de escenas.
Cada fotograma renderiza el gráfico de escena desde el punto de vista de la cámara (guiado por el seguimiento de movimiento de ARCore). Tu app puede interactuar con la escena detectando eventos táctiles y gestuales, realizando pruebas de posicionamiento en nodos y colocando anclajes. Para obtener más información, consulta Cómo interactuar con la escena.