Skip to content

ValkA/sceneview-android

 
 

Repository files navigation

SceneView for Android

SceneView Logo

3D and AR for Android using Jetpack Compose and Layout View, powered by Google Filament and ARCore

Sceneview ARSceneview Filament ARCore

Discord Open Collective

Table of Contents

Overview

SceneView enables developers to easily incorporate 3D and AR capabilities into Android applications using Google's Filament rendering engine and ARCore. The library offers two main components:

  1. Sceneview: 3D rendering capabilities using Filament
  2. ARSceneview: Augmented Reality capabilities using Filament and ARCore

3D Scene with Filament

Installation

Add the dependency to your app's build.gradle:

dependencies { // Sceneview for 3D capabilities implementation("io.github.sceneview:sceneview:2.3.1") }

Basic Usage

Here's a basic example of creating a 3D scene in Jetpack Compose:

// Filament 3D Engine val engine = rememberEngine() // Asset loaders val modelLoader = rememberModelLoader(engine) val materialLoader = rememberMaterialLoader(engine) val environmentLoader = rememberEnvironmentLoader(engine) Scene( modifier = Modifier.fillMaxSize(), engine = engine, // Core rendering components view = rememberView(engine), renderer = rememberRenderer(engine), scene = rememberScene(engine), // Asset loaders modelLoader = modelLoader, materialLoader = materialLoader, environmentLoader = environmentLoader, // Collision System collisionSystem = rememberCollisionSystem(view) // Add a direct light source (required for shadows) mainLightNode = rememberMainLightNode(engine) { intensity = 100_000.0f }, // Set up environment lighting and skybox from an HDR file environment = rememberEnvironment(environmentLoader) { environmentLoader.createHDREnvironment( assetFileLocation = "environments/sky_2k.hdr" )!! }, // Configure camera position cameraNode = rememberCameraNode(engine) { position = Position(z = 4.0f) }, // Enable user interaction with the camera cameraManipulator = rememberCameraManipulator(), // Add 3D models and objects to the scene childNodes = rememberNodes { // Add a glTF model add( ModelNode( // Create a single instance model from assets file modelInstance = modelLoader.createModelInstance( assetFileLocation = "models/damaged_helmet.glb" ), // Make the model fit into a 1 unit cube scaleToUnits = 1.0f ) ) // Add a 3D cylinder with custom material add( CylinderNode( engine = engine, radius = 0.2f, height = 2.0f, // Simple colored material with physics properties materialInstance = materialLoader.createColorInstance( color = Color.Blue, metallic = 0.5f, roughness = 0.2f, reflectance = 0.4f ) ).apply { // Define the node position and rotation  transform( position = Position(y = 1.0f), rotation = Rotation(x = 90.0f) ) }) }, // Handle user interactions onGestureListener = rememberOnGestureListener( onDoubleTapEvent = { event, tappedNode -> tappedNode?.let { it.scale *= 2.0f } } ), // Handle tap event on the scene onTouchEvent = { event: MotionEvent, hitResult: HitResult? -> hitResult?.let { println("World tapped : ${it.worldPosition}") } false }, // Frame update callback onFrame = { frameTimeNanos -> // Handle per-frame updates here } )

Sample Projects

AR Scene with ARCore

Installation

Add the dependency to your app's build.gradle:

dependencies { // ARSceneview for augmented reality capabilities implementation 'io.github.sceneview:arsceneview:2.3.1' }

Basic Usage

Here's a basic example of creating an AR scene:

ARScene( // Configure AR session features sessionFeatures = setOf(), sessionCameraConfig = null, // Configure AR session settings sessionConfiguration = { session, config -> // Enable depth if supported on the device config.depthMode = when (session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)) { true -> Config.DepthMode.AUTOMATIC else -> Config.DepthMode.DISABLED } config.instantPlacementMode = Config.InstantPlacementMode.LOCAL_Y_UP config.lightEstimationMode = Config.LightEstimationMode.ENVIRONMENTAL_HDR }, // Enable plane detection visualization planeRenderer = true, // Configure camera stream cameraStream = rememberARCameraStream(materialLoader), // Session lifecycle callbacks onSessionCreated = { session -> // Handle session creation }, onSessionResumed = { session -> // Handle session resume }, onSessionPaused = { session -> // Handle session pause }, // Frame update callback onSessionUpdated = { session, updatedFrame -> // Process AR frame updates }, // Error handling onSessionFailed = { exception -> // Handle ARCore session errors }, // Track camera tracking state changes onTrackingFailureChanged = { trackingFailureReason -> // Handle tracking failures } )

Sample Projects

Resources

Documentation

Community

Related Projects

Support the Project

Ways to Contribute

⚠️ Geospatial API Note: Be sure to follow the official Google Geospatial Developer guide to enable Geospatial API in your application.

About

3D and AR for Android using Jetpack Compose and Layout View, powered by Google Filament and ARCore

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Kotlin 62.4%
  • Java 37.6%