WorldViz User Forum

WorldViz User Forum (
-   Vizard (
-   -   Extracting high precision depth map from scene (

josephredfern 09-03-2019 04:15 AM

Extracting high precision depth map from scene

I'm new to using Vizard, and attempting to extract high-precision depth data from a scene.

At the moment, to do this, I am using:


depth = viz.addRenderTexture(format=viz.TEX_DEPTH_32)
float_buff = depth.saveToBuffer('', dataType=viz.GL_FLOAT)
size = depth.getSize()
w = size[0]
h = size[1]
d_float = np.fromstring(float_buff, np.float32, w*h)'depth.npy', d_float.reshape((w, h)))

This allows me to save the values of the depth render texture to a numpy array... but I have a few questions:
  • What units is this depth texture in? For the piazza scene, all/most values seem to be around 0.9. Is there a way of converting this to meters?
  • The dimension of the resulting texture is always 512x512. How is this controlled?
  • Is this the correct way to extract the depth? Is there a way of using to store an uncompressed numpy array (rather than png/jpg etc?)

Any guidance would be appreciated.


Jeff 09-05-2019 04:24 PM

The depth buffer on GPUs is non-linear, in order to provide greater precision to nearby objects.

You can convert a raw depth buffer value to linear and world units using the following code:


z =
znear = viz.MainWindow.getNearClip()
zfar = viz.MainWindow.getFarClip()

# Compute normalized linear depth value (0-1 range)
linear = (2 * znear) / (zfar + znear - z * (zfar - znear))

# Compute world depth value (distance from view plane)
world = (2.0 * znear * zfar) / (zfar + znear - (2.0 * z - 1.0) * (zfar - znear))

josephredfern 10-28-2019 04:53 AM

Hi Jeff,

I forgot to reply to this at the time -- but thank you for your answer, it solved the issue for me.

All times are GMT -7. The time now is 12:45 PM.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2021, vBulletin Solutions, Inc.
Copyright 2002-2018 WorldViz LLC