Home

Awesome

monocular-depth-unity

Real-time Depth from Monocular Image using the MiDaS v2 neural network with Unity's Barracuda inference framework.

This project includes the correct .onnx model that works well with Barracuda. You can always re-download the model from its official source if you encounter the infamous InvalidProtocolBufferException error.

See discussions that led to the choice of this specific model here (Unity) and here (Intel ISL). (June 2021)

Requirements

PlatformVersion
Unity2021.2 or higher
com.unity.barracuda3.0.0
com.unity.collections2.1.0-pre.11
com.unity.mathematics1.2.6
com.unity.burst1.8.3

Installation

Unity Package Manager

Latest Version (Recommended)

Add this line to your manifest.json:

"ulc-nn-depth":"https://github.com/GeorgeAdamon/monocular-depth-unity.git?path=/MonocularDepthBarracuda/Packages/DepthFromImage#main",

Legacy 1.0.0 Release

Add this line to your manifest.json:

"ulc-nn-depth":"https://github.com/GeorgeAdamon/monocular-depth-unity.git?path=/MonocularDepthBarracuda/Packages/DepthFromImage#v1.0.0",

Usage

Step 0

Find the DEPTH_FROM_IMAGE prefab

Step 1

Use the Texture you like in the Input Texture slot. Works with RenderTextures and Texture2D objects. Video is supported through RenderTextures.

Step 2

Parameterize the visual output in the Depth Mesher object. Use Shader method for best performance, or Mesh to get an actual tangible mesh. If Color Texture is left blank, the mesh will be colorized with the depth data by default.

Performance

Sustained 60 fps on GTX 970 & i7 5930K (2015 rig) when using the shader-based displacement. Sustained 160 fps on RTX 3080Ti & i7 5930K when using the shader-based displacement.

Issues

The mesh-based displacement doesn't fully utilize the AsyncGPUReadback command. A command queue needs to be implemented, to process pending commands.