JMRSDK Development
v4.38
v4.38
  • Jio Mixed Reality SDK Documentation
    • Changelog 4.38
      • Upgrade Guide 4.38
    • Application Requirements
  • Device Information
    • JioGlass
    • JioDive
  • Supported Smartphones
  • Controller Specifications
    • Physical Controllers
    • External Gamepad
    • Virtual Controller / Virtual Keyboard for JioGlass
  • Getting Started
    • Development Platform
    • Setting Up Jio Mixed Reality Project in Unity
    • URP Support
      • Setting Up Your Project With URP
      • Reverting Back to Built-In Render Pipeline
  • JMRSDK
    • JMRSDK Content
    • JMRMixedReality Prefab
    • System Dock
    • JMRRig
      • Local Rig
      • Setting Homepage (Quit functionality)
      • Recenter Application on Resume
  • Develop
    • Editor Emulator
    • JioGlass Controller Interactions
    • Cameras
    • Tesseract Mixed Reality UI Toolkits
    • Examples
    • Video Tutorials
  • Interaction
    • Gaze Interaction
      • Gaze and Click
      • Gaze and Dwell
    • Interaction
      • Pointer Manager
        • Examples
      • Active Input Source
    • Interfaces
      • IFocusable
      • ISelectHandler
      • ISelectClickHandler
      • IBackHandler
      • IHomeHandler
      • IMenuHandler
      • IFn1Handler
      • IFn2Handler
      • ITouchHandler
      • ISwipeHandler
      • IVoiceHandler
      • IManipulationHandler
    • Controller Input Actions
      • Touchpad - Touch
      • Touchpad - Swipe
      • Source Buttons
      • Manipulation
    • Actions
    • Device State
      • JioDive Device State
      • JioGlass Device State
      • Controller Device State
  • Voice
    • Voice
      • Speech Events
      • Speech Result
      • Speech Error
      • Speech Session End
      • Speech Cancel
    • Listening
  • Tracking
    • Tracking
      • Coordinate System
    • Tracking Framework
      • TrackerManager Actions
        • Get Head Position
        • Get Head Rotation
        • Get Head Transform
      • TrackerManager Methods
        • Get Head Position
        • Get Head Rotation
        • Get Head Transform
    • Recenter
  • Building and Testing
    • Building to Target Device
      • Merging AndroidManifest
      • Performance Optimization
      • App optimization
    • Running your application
      • JioImmerse App For Jio Mixed Reality (JMR) Devices
      • Running the application on Prism (Holoboard)
    • IPD Calibration
  • Publish
    • Branding Guidelines
    • Licensing Journey In Android JioImmerse
    • Signing your App
    • Publishing to Google Play Store
      • Play Store Upload Journey
    • Publishing to JioImmerse Developer Console
    • Publishing to Apple Store
    • Licensing Journey in iOS JioImmerse
    • iOS Deep linking
  • Capturing and Recording
    • Capture Videos and Screenshots
      • Capturing Screenshot/Videos using scrcpy
      • Capturing Screenshot/Videos using Vysor
  • Troubleshooting
    • FAQs - Develop
    • FAQs - Building to device
      • Gradle
      • FAQs - iOS
    • FAQs - Running and Publishing
    • Laser Point Not Visible
Powered by GitBook
On this page
  • Rendering
  • # Even After Importing the SDK, my screen is rendering in mono view!
  • # Dive Barrel Distortion Shader is not working properly
  • # Layer not rendering
  • General
  • # How to check the application's JMRSDK version?
  • # How to implement quit functionality from the application?
  • # There are debug logs/warnings/errors coming from JMRSDK
  • # Application is facing Z-Fighting
  • Input
  • # Input Interaction is not working
  • # How to implement Gaze and Dwell?
  • # How to check which pointing source is being used?
  • # Which controller buttons work with 'Gaze and Dwell' mode?
  • Device
  • # How to get the device on which the application is running?
  • # How to add skybox to AR devices - JioGlass and JioPrism
  • # How to change FOV in devices
  1. Troubleshooting

FAQs - Develop

Frequently asked questions related to development

PreviousCapturing Screenshot/Videos using VysorNextFAQs - Building to device

Rendering

# Even After Importing the SDK, my screen is rendering in mono view!

Solution 1: Custom Build files should be selected

Make sure all of these are checked in the project settings > publishing settings:

  • Custom Main Manifest

  • Custom Main Gradle Template

  • Custom Base Gradle Template

  • Custom Gradle Properties Template

Solution 2: Using the correct canvas

The application can appear to be on a single screen as it covers the entire screen space. Therefore, if you are using overlay canvas, switch it to world space or JMRSDK canvas.

Solution 3: Incorrectly imported SDK

This issue usually occurs when the files are not properly imported into the project. If you are facing this issue, follow the below-mentioned Steps: 1. Delete the folder inside the Assets >> Plugins >> Android 2. Re-import the JMRSDK plugins folder.

Solution 4: Nomenclature of GameObjects

  1. Make sure that your gameobjects are not named as "Head" or "Left" or "Right" other than the ones present in JMRMixedReality prefab by default.

  2. Make sure that only "Head" Camera is tagged as "MainCamera".

# Dive Barrel Distortion Shader is not working properly

If using properly, follow the URP guide to set it up properly

# Layer not rendering

Go to the head, left, and right cameras and enable/disable the required layer in the culling mask of the cameras.

Do check the culling mask at runtime -

On Head camera - Left and Right layer gets disabled On Left camera - Head and Right layer gets disabled On Right camera - Head and left layer gets disabled

Default behavior: Layer number 13 is used internally for the screen casting. So layer 13 does not render anything in left and right cameras. This might change depending on your project settings.

Layer "Left" and Layer "Right" does not render on respective cameras so you can use these layers if you want to render some object only on some particular camera.

General

# How to check the application's JMRSDK version?

In unity editor, Goto JMRSDK > Core > Plugins > Android > Readme > tmrServicesSDK-release-JMRSDK Version

# How to implement quit functionality from the application?

With JMRSDK 4.27.10, implementing quit functionality is only possible through JMR Toolkit and with the Home page setup.

# There are debug logs/warnings/errors coming from JMRSDK

These are the debug logs/warnings/errors to be ignored in the current JMRSDK

  1. Cannot destroy GameObject that is part of a prefab instance.

  1. NullReferenceException: Object reference not set to an instance of an object JMRSDK.JMRCameraManager.OnEnable ()

# Application is facing Z-Fighting

When two or more primitives have very similar distances to the camera. This would cause them to have near-similar or identical values in the z-buffer, which keeps track of depth.

To fix that, physically move the objects further apart

Input

# Input Interaction is not working

  1. Make sure that you have added the global listener to the gameobject if you want it to register input when the pointer is not focusing on the gameobject

  2. To enable the Controller Input Actions APIs, you must add JMRInteraction Script to a GameObject in your scene.

# How to implement Gaze and Dwell?

Refer to this:

# How to check which pointing source is being used?

You can get the pointing source from JMRPointerManager. Refer to this:

# Which controller buttons work with 'Gaze and Dwell' mode?

Although the controller can remain connected when 'gaze and dwell' is enabled, only the home button works to switch the application to the MR Launcher screen.

None of the other buttons or actions are registered when 'Gaze and Dwell' is enabled.

Device

# How to get the device on which the application is running?

JMRRigManager.Instance.getDeviceID();
Editor = int_max,
JioHoloboard = 1,
JioGlass = 2,
JioCardboard = 3

Use this code to change the controller in application instructions

Editor = Unity editor
JioHoloboard = JioPrism - Physical Controller
JioGlass = JioGlass Lite - Virtual Controller
JioCardboard = JioDive - Physical Controller

# How to add skybox to AR devices - JioGlass and JioPrism

The same method can be used to change the far clipping distance of cameras as well.

# How to change FOV in devices

FOV is changed automatically according to the selected device.

However, if you want to update the FOV, you can do so after a few frames from the start of the JMRMixedReality prefab instance.

private void Awake()
{
    head = JMRRigManager.Instance.transform.Find("JMRRenderer/Head")?.GetComponent<Camera>();
    left = JMRRigManager.Instance.transform.Find("JMRRenderer/Head/Left")?.GetComponent<Camera>();
    right = JMRRigManager.Instance.transform.Find("JMRRenderer/Head/Right")?.GetComponent<Camera>();
}

private void OnEnable()
{
    StartCoroutine(ChangeFOV());
}

IEnumerator ChangeFOV()
{
    for (int i = 0; i < 2; i++) yield return null;
    head.fov = left.fov = right.fov = targetFOV;
}

In apk, Check the AndroidManifest.xml of your application build using android studio or any for meta data - com.jiotesseract.DeviceServiceSDKVersion corresponding to which SDK version is present.

Use keybinding for triggering input in the unity editor.

Refer to in AR devices

Use this code for to change FOV only for that device.

Setting Up Your Project With URP
3rd party analyzer
Setting Homepage (Quit functionality)
this
Gaze and Dwell
Gaze and Dwell
specific device type
Skybox
This is the expected Barrel Distortion Shader for JioDive
Unity - NOT in Play Mode