Optimized Rendering Techniques for Mobile VR

25
Optimized Rendering Techniques for Mobile VR Roberto Lopez Mendez DevGAMM 2016 – Moscow Senior Software Engineer, ARM 13/05/2016

Transcript of Optimized Rendering Techniques for Mobile VR

Page 1: Optimized Rendering Techniques  for Mobile VR

Title 44pt Title Case

Affiliations 24pt sentence case

20pt sentence case

Optimized Rendering Techniques for Mobile VR

Roberto Lopez Mendez

DevGAMM 2016 – Moscow

Senior Software Engineer, ARM

13/05/2016

Page 2: Optimized Rendering Techniques  for Mobile VR

© ARM2016 2

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Agenda

Ice Cave Demo

Improving VR quality & performance

The concept of local cubemap

Dynamic soft shadows and reflections based on local cubemaps

Stereo reflections in VR

Page 3: Optimized Rendering Techniques  for Mobile VR

© ARM2016 3

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Demo Ice Cave

Page 4: Optimized Rendering Techniques  for Mobile VR

© ARM 2016 4

Text 54pt Sentence Case

Quality and Performance for VR

Optimized Rendering Techniques Based On Local Cubemaps

Page 5: Optimized Rendering Techniques  for Mobile VR

© ARM2016 5

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

The Concept of Local Cubemaps

V

cubemap

C

Local environment

If we use the view vector V

defined in WCS to fetch the texel

from the cubemap we will get

the smiley face instead of the

star.

V

cubemap

C

Local environment

We need to use a new vector V’ = CP

to fetch the correct texel . We need to

find the intersection point P of the view

vector V with the boundaries of the

local environment.

V

cubemap

C

Local environment

We introduce a proxy geometry to

simplify the problem of finding the

intersection point P. The simplest

proxy geometry is the bounding box.

Local Cubemap = Cubemap + Cubemap Position + Scene Bounding Box + Local Correction

V V’ P

Bounding Box

V’ P

Page 6: Optimized Rendering Techniques  for Mobile VR

© ARM 2016 6

Text 54pt Sentence Case Dynamic Soft Shadows Based on Local Cubemaps

Page 7: Optimized Rendering Techniques  for Mobile VR

© ARM2016 7

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Dynamic Soft Shadows Based on Local Cubemaps

Generation stage

X

Y

Z

Front

-Z

Left –X

Back

+Z

Right

+X

Top

+Y

Bottom

-Y

Camera background alpha colour = 0

Opaque geometry is rendered with alpha = 1

Semi-transparent geometry is rendered with

alpha different from 1

Fully transparent geometry is rendered with

alpha 0

Render the

transparency of the

scene in the alpha

channel

We have a map of the

zones where light rays

can potentially come

from and reach the

geometry.

No light information is

processed at this stage.

Page 8: Optimized Rendering Techniques  for Mobile VR

© ARM2016 8

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Runtime stage Create a vertex to light source L vector in the vertex shader.

Pass this vector to the fragment shader to obtain the vector

from the pixel to the light position piL.

Find the intersection of the vector piL with the bounding box.

Build the vector CP from the cubemap position C to the

intersection point P.

Use the new vector CP to fetch the texture from the cubemap.

float texShadow = texCUBE(_CubeShadows, CP).a;

L

pi

C P

pk

Q

Bounding Box

lit pixel

shadowed

pixel

cubemap

Source code in the ARM Guide for Unity Developers at MaliDeveloper.arm.com

Dynamic Soft Shadows Based on Local Cubemaps

Page 9: Optimized Rendering Techniques  for Mobile VR

© ARM2016 9

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

float texShadow = texCUBE(_CubeShadows, CP).a;

float4 newVec = float4`(CP, factor * length(piP))

float texShadow = texCUBElod(_CubeShadows, newVec ).a;

Why soft?

Dynamic Soft Shadows Based on Local Cubemaps

L

pi

C P

pk

Q

Bounding Box

lit pixel

shadowed

pixel

cubemap

Source code in the ARM Guide for Unity Developers at MaliDeveloper.arm.com

The further from the object

the softer the shadows.

Page 10: Optimized Rendering Techniques  for Mobile VR

© ARM2016 10

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Dynamic Soft Shadows Based on Local Cubemaps

Page 11: Optimized Rendering Techniques  for Mobile VR

© ARM2016 11

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Handling Shadows from Different Types of Geometries

High Quality Shadows from

Static Environment

Use Local Cubemap technique Use Shadow Mapping technique

All Shadows

Combine both types of shadows

Shadows from Dynamic Objects

Page 12: Optimized Rendering Techniques  for Mobile VR

© ARM2016 12

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Combined Shadows in Ice Cave VR

Shadows from dynamic Geometry using shadow mapping

Shadows from static

Geometry using local cubemps

Page 13: Optimized Rendering Techniques  for Mobile VR

© ARM 2016 13

Text 54pt Sentence Case Reflections Based on

Local Cubemaps

Page 14: Optimized Rendering Techniques  for Mobile VR

© ARM2016 14

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Local Correction to Reflection Vector

float3 R = reflect(D, N);

float4 col = texCUBE(Cubemap, R);

Find intersection point P

Find vector R’ = CP

float4 col = texCUBE(Cubemap, R’);

Source code in the ARM Guide for Unity Developers at MaliDeveloper.arm.com

D

N

R

R’

P

C

Reflective surface

cubemap

Bounding Box

Page 15: Optimized Rendering Techniques  for Mobile VR

© ARM2016 15

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Combined Reflections in Ice Cave VR

Reflections from Static

Geometry

Use Local Cubemap technique Use Mirrored Camera technique

All Reflections

Combine all types of reflections

Planar Reflections from Dynamic

Geometry

Use standard infinite cubemap

Reflections from Distant

Environments

Page 16: Optimized Rendering Techniques  for Mobile VR

© ARM2016 16

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Combined Reflections in Ice Cave VR

Reflections from static

geometry using local

cubemap

Reflections from the sky

using infinite cubemap

Reflections from dynamic

geometry using a mirrored

camera

Page 17: Optimized Rendering Techniques  for Mobile VR

© ARM 2016 17

Text 54pt Sentence Case Stereo Reflections in Unity

Page 18: Optimized Rendering Techniques  for Mobile VR

© ARM2016 18

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Why Stereo Reflections?

Using the same texture for right/left eyes reflections in VR looks plain and

breaks the sensation of full immersion.

Page 19: Optimized Rendering Techniques  for Mobile VR

© ARM2016 19

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Implementing Stereo Reflections in Unity

Add two new cameras targeting left/right eye

respectively and disable them as you will render

them manually.

Create a target texture the cameras will render to

Attach the script to each camera, the SetUpCamera

function places the camera in the right position for

rendering reflections for each eye.

void OnPreRender()

{

SetUpCamera ();

// Invert winding

GL.invertCulling = true;

}

void OnPostRender()

{

// Restore winding

GL.invertCulling = false;

}

Page 20: Optimized Rendering Techniques  for Mobile VR

© ARM2016 20

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Implementing Stereo Reflections in Unity

Attach the script to the main camera

public class RenderStereoReflections : MonoBehaviour

{

public GameObject reflectiveObj;

public GameObject leftReflCamera;

public GameObject rightReflCamera;

int eyeIndex = 0;

void OnPreRender(){

if (eyeIndex == 0){

// Render Left camera

leftReflCamera.GetComponent<Camera>().Render();

reflectiveObj.GetComponent<Renderer>().material.SetTexture("_DynReflTex", leftReflCamera.GetComponent<Camera>().targetTexture );

}

else{

// Render right camera

rightReflCamera.GetComponent<Camera>().Render();

reflectiveObj.GetComponent<Renderer>().material.SetTexture("_DynReflTex", rightReflCamera.GetComponent<Camera>().targetTexture );

}

eyeIndex = 1 - eyeIndex;

}

}

Optimize further by adding a condition about reflective object’s visibility

Page 21: Optimized Rendering Techniques  for Mobile VR

© ARM2016 21

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Check Left/Right Reflection Synchronization

Page 22: Optimized Rendering Techniques  for Mobile VR

© ARM2016 22

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Stereo Reflections in Ice Cave VR

Page 23: Optimized Rendering Techniques  for Mobile VR

© ARM2016 23

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Wrap Up

The use of techniques based on local

cubemap allows rendering high

quality and efficient shadows and

reflections from static geometry.

These methods can be combined

with other runtime rendering

techniques to render reflections

from dynamic objects.

Stereo reflections in VR improve

user experience

Check out The ARM Guide for Unity

Developers for very efficient

rendering techniques to make the

most out of Unity when developing

mobile VR games

https://community.arm.com/groups/arm-mali-

graphics/blog/2016/03/10/combined-reflections-

stereo-reflections-in-vr

ARM Guide for Unity Developers at MaliDeveloper.arm.com

Page 24: Optimized Rendering Techniques  for Mobile VR

The trademarks featured in this presentation are registered and/or unregistered trademarks of ARM Limited (or its

subsidiaries) in the EU and/or elsewhere. All rights reserved. All other marks featured may be trademarks of their

respective owners.

Copyright © 2016 ARM Limited

Thank you!

Page 25: Optimized Rendering Techniques  for Mobile VR

© ARM2016 25

Title 40pt Title Case

Bullets 24pt sentence case

Sub-bullets 20pt sentence case

Find out more about techniques based on local cubemaps at: • https://community.arm.com/groups/arm-mali-graphics/blog/2016/03/10/combined-reflections-stereo-

reflections-in-vr

• http://malideveloper.arm.com/documentation/developer-guides/arm-guide-unity-enhancing-mobile-games/

• http://community.arm.com/groups/arm-mali-graphics/blog/2015/04/13/dynamic-soft-shadows-based-on-local-

cubemap

• http://community.arm.com/groups/arm-mali-graphics/blog/2014/08/07/reflections-based-on-local-cubemaps

• http://community.arm.com/groups/arm-mali-graphics/blog/2015/04/13/refraction-based-on-local-cubemaps

• http://community.arm.com/groups/arm-mali-graphics/blog/2015/05/21/the-power-of-local-cubemaps-at-unite-

apac-and-the-taoyuan-effect

To Find Out More….