UnityのODSの検証

2018/12/11 Update.

The English page is unity_odsTest_en.html.

UnityのODS(Google’s Omni-directional Stereo)でのパノラマVR画像の表示検証用です。
参考 : https://blogs.unity3d.com/jp/2018/01/26/stereo-360-image-and-video-capture/

以下のようなシーンサイズになっています。

このシーンで、カメラ位置を変えたときの立体視の見え方を検証します。
下記のサムネイルをクリックすると、WebVRの画面が表示されます。
Rendering Unity 2018.2.18f1
Resolution 4096 x 4096 pixel
Panorama equirectangular
Top and Bottom
IPD 64mm
Camera Clipping Planes Near : 0.03
Far : 1000

レンダリングのスクリプト

CameraRendering.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
				
[RequireComponent(typeof(Camera))]
public class CameraRendering : MonoBehaviour {
	public RenderTexture cubemap_left;
	public RenderTexture cubemap_right;
	public RenderTexture equirect;
				
	public float stereoSeparation = 0.064f;		// IPD.
				
	private bool m_firstF = true;
				
	// Use this for initialization
	void Start () {
		Camera camera = this.GetComponent<Camera>();
		camera.stereoSeparation = stereoSeparation; // Eye separation (IPD) of 64mm.
	}
					
	// Update is called once per frame
	void Update () {
		if (cubemap_left == null || cubemap_right == null) return;
				
		// RenderTexture (cube) Rendering.
		Camera camera = this.GetComponent<Camera>();
		camera.RenderToCubemap(cubemap_left, 63, Camera.MonoOrStereoscopicEye.Left); 
		camera.RenderToCubemap(cubemap_right, 63, Camera.MonoOrStereoscopicEye.Right); 
				
		// left and right cubemap to Equirecangular.
		if (equirect == null) return;
		cubemap_left.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Left);
		cubemap_right.ConvertToEquirect(equirect, Camera.MonoOrStereoscopicEye.Right);		
				
		if (m_firstF) {
			m_firstF = false;
			savePng();		// save png file.
		}
	}
				
	void savePng () {
		if (equirect == null) return;
		Texture2D tex = new Texture2D(equirect.width, equirect.height, TextureFormat.RGB24, false);
		RenderTexture.active = equirect;
		tex.ReadPixels(new Rect(0, 0, equirect.width, equirect.height), 0, 0);
		tex.Apply();

		byte[] bytes = tex.EncodeToPNG();
		Object.Destroy(tex);
				 
		File.WriteAllBytes(Application.dataPath + "/../Unity_SavedScreen.png", bytes);
	}	
}
	

カメラの高さを変えてレンダリング

2018/12/11 Update.
Camera Y 0.25 m


Camera Y 0.5 m


Camera Y 0.75 m


Camera Y 0.95 m


高さを変えても、部屋のサイズは実際よりも大きく見え、球の接地感も弱い。

カメラのZ位置を変えてレンダリング

2018/12/11 Update.
カメラを引いていった場合の検証。
Camera Y 0.5 m
Camera Position Z -0.2


Camera Y 0.5 m
Camera Position Z -0.4


Camera Y 0.5 m
Camera Position Z -0.6


カメラが被写体から遠ざかるとゆがみは緩和されるが、球の接地感は変わらず。