Я хочу создать несколько изображений глубины и преобразовать значения в реальные расстояния в метрах.
Итак, чтобы добраться до изображений глубины, я использую этот пример:
https://answers.unity.com/questions/877170/render-scene-depth-to-a-texture.html
однако это не очень хорошо работает для меня, так как я не получаю много разных значений.
На данный момент преобразование выполняется следующим образом:
double step = (_zFar - _zNear) / 255.0;
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++)
{
//compute real depth value in meters from the normalized z-buffer [0..1] values
//z-buffer values are non-linear so have to apply transformation to linearize the distance in world-space coordinates
float z = 2.0f * _zNear * _zFar /
(_zFar + _zNear - (2.0f * tex2d.GetPixel(h,w).a - 1.0f) * (_zFar - _zNear));
z = (float) (z / step);
Debug.Log(tex2d.GetPixel(h, w).a + " -> " + z);
Color c = new Color(z, z, z, z);
tex2d.SetPixel(h, w, c);
}
}
Для zFear & zNear я принимаю значения nearClipPlane и farClipPlane.
На одном рисунке вы видите вывод значений в журнале, а на другом - пример сохраненного изображения.