Virtual Reality in Android

27
Mario Bodemann Android and Java Evangelist @mariobodemann @contentful Virtual Reality in Android

Transcript of Virtual Reality in Android

Page 1: Virtual Reality in Android

Mario BodemannAndroid and Java Evangelist@mariobodemann@contentful

Virtual Reality in Android

Page 2: Virtual Reality in Android

API driven CMS, emphasis on content creation and delivery.

Page 3: Virtual Reality in Android

Virtual Reality in AndroidUsing Cardboard

Page 4: Virtual Reality in Android

What is Cardboard?

● Easy to produce● Available from

different companies and in different shapes

● can have a button/lever/hole for interaction

● only needs a smart phone (Android/ios) and an App

Page 5: Virtual Reality in Android

How does it work?

● Use 3D data and movement to draw two images: left and right eye

● Distort images for lenses

● Combine image to scene in brain

Page 6: Virtual Reality in Android

Programming Cardboard

Page 7: Virtual Reality in Android

How do I program Cardboard?

https://developers.google.com/cardboard/android/

● SDKs available for ● Java

○ OpenGL○ Pure Android

● Unity Plugin○ Unity Engine (C# /JS)○ Platform independent○ No reliable linux development available

Page 8: Virtual Reality in Android

● Demo app○ Find a box and

press the button○ On github

● Library○ jar distributed

with demo repository

○ no maven repository

How To: Android Demo

https://github.com/googlesamples/cardboard-java

Page 9: Virtual Reality in Android

Setup of the demo

Activity

Model Repository

OpenGL

Interaction

● All code in one Activity○ OpenGL code ○ Model creation

● Hard to expand on

Page 10: Virtual Reality in Android

Expanding on the demo

Page 11: Virtual Reality in Android

● App using above code as base

● Expanding it to new use cases

● Having fun exploring

Contentful Cardboard Idea

https://github.com/contentful-labs/contentful-cardboardhttps://play.google.com/apps/testing/com.contentful.cardboard

Page 12: Virtual Reality in Android

MVPR

Presenter

Model Repository

OpenGL

Interaction

Interactor

Activity (View)

VR Renderer

● Split Activity into several parts

● Improve modularity● Improve testability● Improve readability● Improve line number

count ;)

Page 13: Virtual Reality in Android

Interactor

● Repository abstraction

● Uses registered Listener to inform Presenter

● Live time of the Presenter

public interface Interactor { interface Listener { void onModelReceived(ProtoModel model); void onError(Throwable throwable); }

void setListener(Listener listener); void requestModels();}

Page 14: Virtual Reality in Android

Presenter

● Coordinates Interactor and View

● Enriches data from Interactor

● Tells View to update its models

public class Presenter implements Interactor.Listener {

// … setup

private int received = 0;

@Override public void onModelReceived(ProtoModel model) { model.position[0] += received * 4.0f; received++; view.addProtoModel(model); }

Page 15: Virtual Reality in Android

View

● Connects Renderer and Presenter

● Takes models and enqueues them in the renderer

● Startup point for Android app

● Deals with interaction

public class MainActivity extends CardboardActivity implements CardboardView.StereoRenderer, View {

@Override public void onCreate(…) {

renderer = new CardboardRenderer( getApplicationContext()); presenter = new Presenter( new ContentfulInteractor(this)); presenter.bind(this); }

@Override public void onCardboardTrigger() { vibrator.vibrate(25); userInteracted(); }

Page 16: Virtual Reality in Android

View (cont.)

● Listens to Cardboard Library callbacks

● For setup of a frame● And rendering every

eye, redirecting it to the renderer

@Overridepublic void onSurfaceCreated(…) { renderer.surfaceCreated();}

@Overridepublic void onNewFrame( HeadTransform headTransform) { renderer.prepare();}

@Overridepublic void onDrawEye(Eye eye) { float[] perspective = eye.getPerspective(Z_NEAR, Z_FAR); float[] eyeView = eye.getEyeView(); renderer.render(perspective, eyeView);}

Page 17: Virtual Reality in Android

Renderer public class CardboardRenderer implements Renderer { @Override public void surfaceCreated() { addFloorAndCeiling(); }

@Override public void prepare() { addPendingModels(); glEnable(GL_DEPTH_TEST); glEnable(GL_BLEND); // … More gl* calls }

● Abstracts from OpenGL rendering

● Generates OpenGL GPU Models

● Listens to View

Page 18: Virtual Reality in Android

@Overridepublic void render(float[] perspective, float[] eyeView) { multiplyMM(view, 0, eyeView, 0, camera, 0);

for (final Model model : backgroundModels) { renderModel(perspective, model); }

for (final Model model : foregroundModels) { renderModel(perspective, model); }}

Renderer (cont.)

● Render all models added

● Starting with background objects, since foreground objects contain transparency

Page 19: Virtual Reality in Android

Advantage of new system

Page 20: Virtual Reality in Android

Sample Challenge: How to change a texture?

● Change file● Rerun tooling● Re releasing new version in store● Convince user to update

● Need technical person● Potentially through several iterations

Page 21: Virtual Reality in Android

Purposal:Using A CMS

● Change a asset online

● Restart app to resync data (done at startup?)

● User only needs network

● Can be done by non technical person

Page 22: Virtual Reality in Android

Using A CMS

● Everything except for the grid comes from CMS

● Changing it with drag and drop

● Changing VR content from outside

Page 23: Virtual Reality in Android

Future

Page 24: Virtual Reality in Android

● Unit tests?● Provide different Renderer VR/classic/engine code?● CMS for Shader?● A/B testing of in assets?● Your ideas?

Future

Page 25: Virtual Reality in Android

Recap

Page 26: Virtual Reality in Android

Recap

● Cardboard is relatively easy to program and use● Expanding from Google Demo is the key to success● Using a CMS for VR

Page 27: Virtual Reality in Android

Questions and Answers