Developer : ft-lab (Yutaka Yoshisaka).
05/13/2019 - 03/01/2022.
このスクリプトはUnity Editorでの実行になります。
Runtimeでのスクリプトの使用については「
スクリプトからAPIを使用 (Runtime)」をご参照ください。
"Panorama180 Render" ver.1.0.2から、スクリプトを使用することでパノラマ静止画像を出力できるようになりました。
"Demo/Scripts/MultipleCapture.cs"がサンプルスクリプトになります。
"Demo/Scenes/Editor/APITest.unity"がサンプルシーンになります。
MultipleCapture.cs
一定の間隔でカメラを移動させ、パノラマ180-3Dの静止画像とDepth画像を出力します。
"Panorama180Render"スクリプトは、MainCameraのコンポーネントにあらかじめ割り当てておく必要があります。
この例ではMain Cameraのコンポーネントとして、"MultipleCapture"を割り当てています。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Panorama180Render {
[RequireComponent(typeof(Camera))]
public class MultipleCapture : MonoBehaviour
{
// Camera start position.
[SerializeField] Vector3 startPosition = new Vector3(0, 0, 0);
// Camera end position.
[SerializeField] Vector3 endPosition = new Vector3(1, 0, 0);
// capture count.
[SerializeField, TooltipAttribute("Capture count"), Range(1, 100)] int captureCount = 4;
// Save filename.
[SerializeField, TooltipAttribute("Save file name")] string fileName = "capture";
// Camera near distance.
[SerializeField] float nearDistance = 0.1f;
// Camera far distance.
[SerializeField] float farDistance = 100.0f;
// Synchronize gaze direction (ver.1.1.0 -).
[SerializeField] bool synchronizeGazeDirection = false;
// Camera position.
private Vector3 m_baseCameraPos;
void Start()
{
m_baseCameraPos = this.transform.position;
// Coroutine that outputs still images.
StartCoroutine(m_OutputStillImages());
}
void Update()
{
}
/**
* Output still images.
*/
IEnumerator m_OutputStillImages () {
Panorama180Render panorama180Render = this.GetComponent<Panorama180Render>();
Vector3 cameraPos = this.transform.position;
Vector3 pD = (endPosition - startPosition) / (float)Mathf.Max(1, (captureCount - 1));
// Camera near,far distance.
panorama180Render.SetCameraNearFarDistance(nearDistance, farDistance);
// Set the depth linear type to linear.
panorama180Render.SetDepthLinearType(Panorama180Render.OutputDepthLinearType.Linear);
// Depth type is one quarter resolution.
panorama180Render.SetDepthTextureType(Panorama180Render.OutputDepthTextureType.DepthOneQuarter);
// Synchronize gaze direction (ver.1.1.0).
panorama180Render.SetSynchronizeGazeDirection(synchronizeGazeDirection);
for (int loop = 0; loop < captureCount; ++loop) {
// Change camera position.
Vector3 newPos = startPosition + (pD * loop);
yield return StartCoroutine(panorama180Render.SetCameraPosition(newPos));
// Set output file name.
panorama180Render.SetOutputImageFileName(fileName + "_" + (loop).ToString());
// Save image.
panorama180Render.OutputStillImage(); // RGB image.
panorama180Render.OutputStillImage(true); // Depth image(exr).
}
this.transform.position = m_baseCameraPos;
}
}
}
このスクリプトは、startPositionからendPositionの座標位置をcaptureCount分割し、
それぞれの位置でのパノラマ180-3D画像/Depth画像をファイル出力します。
制御はコルーチンで行います。
Start関数内で"StartCoroutine(m_OutputStillImages());"を指定することで、第一引数の関数がコルーチンとして呼び出されます。
"Panorama180Render panorama180Render = this.GetComponent<Panorama180Render>();"はPanorama180Renderクラスを取得します。
このクラスのnamespaceは"Panorama180Render"になります。
"panorama180Render.SetCameraNearFarDistance(nearDistance, farDistance)"関数は、カメラの近クリップ面までの距離と遠クリップ面までの距離を指定します。
"panorama180Render.SetDepthLinearType(Panorama180Render.OutputDepthLinearType.Linear)"関数は、Depthテクスチャ出力時の補間を線形にします。
"panorama180Render.SetDepthTextureType(Panorama180Render.OutputDepthTextureType.DepthOneQuarter)"関数は、Depthテクスチャはパノラマ画像の1/4のサイズにします。
"panorama180Render.SetSynchronizeGazeDirection(synchronizeGazeDirection);"関数は、trueを指定するとパノラマ画像出力時にカメラのY軸回転に加えてXZ回転も反映します。
"panorama180Render.SetCameraPosition(newPos)" 関数は、カメラ位置を変更します。
これはコルーチンで呼び出すようにします。
なお、カメラの回転などを変更する場合はこの関数の前に指定してから、panorama180Render.SetCameraPositionを呼び出すようにしてください。
この関数は、画面の更新が完了するまで待ちます。
"panorama180Render.SetOutputImageFileName" 関数は、出力する画像ファイル名を変更します。
"panorama180Render.OutputStillImage()" 関数は、静止画像を出力します。
"panorama180Render.OutputStillImage(true)" 関数は、静止画像(Depth)を出力します。
"Panorama180Render.Panorama180Render"では、以下の関数が用意されています。
int GetVersion ();
"Panorama180Render"のバージョンを取得します。
16進数の"0x1020"の場合は、ver.1.0.2になります。
void SetOutputImageFileName (string fileName);
string GetOutputImageFileName ();
静止画像の出力ファイル名を取得します。
void SetOutputImageFileFormat (int fileFormat);
静止画を出力する際のファイルフォーマットを指定します。
引数名 | 内容 |
fileFormat | 0:jpg, 1:png |
void SetOutputImageJpegQuality (int jpegQuality);
静止画を出力する際のJPEG品質を指定します。
引数名 | 内容 |
jpegQuality | 0:Superb, 1:Good, 2:Normal, 3:Average, 4:Bad |
bool IsOutputBusy ();
静止画出力が準備中、またはまだ出力できない場合はtrueを返します。
void SetRenderTextureSize (int texSize);
キューブマップとしての1つの面でのテクスチャサイズを指定します。
引数名 | 内容 |
texSize | 512, 1024, 2048, 4096, 8192 |
int GetRenderTextureSize ();
キューブマップとしての1つの面でのテクスチャサイズを取得します。
512, 1024, 2048, 4096, 8192のいずれかになります。
void SetOutputAlignType (AlignType type);
出力時のパノラマ2つの配置の種類を指定します。
引数名 | 内容 |
type |
配置の種類。
AlignType.TopAndBottom ... 上下に配置
AlignType.SideBySide ... 左右に配置
|
AlignType GetOutputAlignType ();
出力時のパノラマ2つの配置の種類を取得します。
AlignType.TopAndBottomで上下に配置、AlignType.SideBySideで左右に配置になります。
void SetOutputTextureSizeType (OutputTextureSizeType sType);
パノラマ180-3D時、出力テクスチャサイズの種類を指定します。
引数名 | 内容 |
sType |
出力テクスチャサイズの種類。
OutputTextureSizeType._512 ... 512*2 x 512、または、512 x 512*2
OutputTextureSizeType._1024 ... 1024*2 x 1024、または、1024 x 1024*2
OutputTextureSizeType._2048 ... 2048*2 x 2048、または、2048 x 2048*2
OutputTextureSizeType._4096 ... 4096*2 x 4096、または、4096 x 4096*2
OutputTextureSizeType._4K ... 3840 x 2160 (Side by sideのみ)
OutputTextureSizeType._5_7K ... 5760 x 2880 (Side by sideのみ)
OutputTextureSizeType._8K ... 7680 x 4320 (Side by sideのみ)
OutputTextureSizeType._16K ... 15360 x 8640 (Side by sideのみ)
OutputTextureSizeType._16384 ... 16384 x 8192 (Side by sideのみ)
|
OutputTextureSizeType GetOutputTextureSizeType ();
パノラマ180-3D時、出力テクスチャサイズの種類を取得します。
これは最終的に出力される2眼のパノラマを配置したときのテクスチャのサイズになります。
OutputTextureSizeType._512, OutputTextureSizeType._1024, OutputTextureSizeType._2048, OutputTextureSizeType._4096,
OutputTextureSizeType._4K, OutputTextureSizeType._5_7K, OutputTextureSizeType._8K, OutputTextureSizeType._16K, OutputTextureSizeType._16384, のいずれかが返されます。
void SetPostProcessing (bool enableF);
Post ProcessingのOn/Offを指定します。
引数名 | 内容 |
enableF | trueでOn、falseでOff |
bool GetPostProcessing ();
Post ProcessingのOn/Offを取得します。
void SetDepthTextureType (OutputDepthTextureType type);
Depthを出力するときの種類を指定します。
引数名 | 内容 |
type |
Depthを出力するときの種類
OutputDepthTextureType.None ... 出力しない
OutputDepthTextureType.DepthDefault ... パノラマ画像と同じサイズ
OutputDepthTextureType.DepthOneHalf ... 1/2のサイズ
OutputDepthTextureType.DepthOneQuarter ... 1/4のサイズ
|
OutputDepthTextureType GetDepthTextureType ();
Depthを出力するときの種類を取得します。
OutputDepthTextureType.Noneは、Depthを出力しません。
OutputDepthTextureType.DepthDefaultは、パノラマ画像と同じサイズで出力します。
OutputDepthTextureType.DepthOneHalfは、パノラマ画像の1/2のサイズで出力します。
OutputDepthTextureType.DepthOneQuarterは、パノラマ画像の1/4のサイズで出力します。
void SetDepthLinearType (OutputDepthLinearType type);
Depth出力時の補間の種類を指定します。
引数名 | 内容 |
type |
Depthを出力するときの補間の種類
OutputDepthLinearType.Linear ... 線形
OutputDepthLinearType.NonLinear ... 非線形
|
OutputDepthLinearType GetDepthLinearType ();
Depth出力時の補間の種類を取得します。
OutputDepthLinearType.Linearは、線形になります。
OutputDepthLinearType.NonLinearは、非線形になります。
void SetCameraNearFarDistance (float nearP, float farP);
カメラのnear/far面の距離を指定します。
引数名 | 内容 |
nearP | 近クリップ面までの距離 |
farP | 遠クリップ面までの距離 |
IEnumerator SetCameraPosition (Vector3 cameraPos);
カメラ位置を変更します。
同期を取るためにコルーチンから呼ぶ必要があります。
この関数は、パノラマ画像を生成する際のカメラの描画の同期を待ちます。
カメラの回転などを別途指定する場合は、先にカメラ情報を変更してからこの関数を呼ぶようにしてください。
bool OutputStillImage (bool depthF = false);
静止画像をファイル出力します。
引数名 | 内容 |
depthF | trueの場合はDepth出力、falseの場合はRGB出力 |
静止画像の出力に成功した場合はtrueが返されます。
Depth出力時は、ファイル拡張子はexrになります。
void SetSynchronizeGazeDirection (bool b);
ver.1.1.0で追加された関数です。
パノラマ画像生成時に、Y軸回転に加えてXZ軸回転も反映するかを指定します。
引数名 | 内容 |
b | trueの場合はカメラのXYZ回転を反映 falseの場合はカメラのY回転のみを反映 |
bool IsSynchronizeGazeDirection ();
ver.1.1.0で追加された関数です。
パノラマ画像生成時に、trueの場合はカメラのXYZ回転を反映します。
falseの場合はカメラのY回転のみを反映します。
void SetIPD (float t);
2つの眼の間の距離(IPD : 瞳孔間距離)を指定します。
float GetIPD ();
2つの眼の間の距離(IPD : 瞳孔間距離)を取得します。
void SetSimulateVR180Camera (bool b);
パノラマ180-3D時に、VR180カメラのようなパノラマ処理を行うかどうか指定します。
引数名 | 内容 |
b |
trueの場合は、VR180カメラのようなパノラマ処理を行います。
falseの場合は、左右を向いた場合の視差も極力補間します。
|
bool IsSimulateVR180Camera ();
パノラマ180-3D時に、VR180カメラのようなパノラマ処理を行う場合はtrueを返します。
falseの場合は左右を向いた場合の視差も極力補間します。
string GetOutputImageFullPathName (bool depthF = false);
ver.2.0.0で追加された関数です。
静止画を出力するファイル名のフルパスを取得します。
引数名 | 内容 |
depthF | trueの場合はDepth出力、falseの場合はRGB出力 |
void SetGameViewMode (GameViewMode vMode);
ver.2.0.0で追加された関数です。
"Game View Mode"の指定を行います。
引数名 | 内容 |
vMode |
GameViewMode.Default ... 標準表示
GameViewMode.PanoramaView ... パノラマ表示
|
GameViewMode GetGameViewMode ();
ver.2.0.0で追加された関数です。
"Game View Mode"の指定を取得します。
GameViewMode.Default/GameViewMode.PanoramaViewのいずれかが返されます。
void SetPanoramaMode (PanoramaMode pMode);
ver.2.0.0で追加された関数です。
"Panorama Mode"の指定(パノラマ180-3D、パノラマ360-3D)を行います。
引数名 | 内容 |
vMode |
PanoramaMode.Panorama180 ... パノラマ180-3D
PanoramaMode.Panorama360 ... パノラマ360-3D
|
PanoramaMode GetPanoramaMode ();
ver.2.0.0で追加された関数です。
"Panorama Mode"の指定(パノラマ180-3D、パノラマ360-3D)を取得します。
PanoramaMode.Panorama180/PanoramaMode.Panorama360のいずれかが返されます。
void SetOutputTextureSizeType360 (OutputTextureSizeType360 sType);
ver.2.0.0で追加された関数です。
パノラマ360-3D時、出力テクスチャサイズの種類を指定します。
引数名 | 内容 |
sType |
出力テクスチャサイズの種類。
OutputTextureSizeType360._512 ... 512 x 512
OutputTextureSizeType360._1024 ... 1024 x 1024
OutputTextureSizeType360._2048 ... 2048 x 2048
OutputTextureSizeType360._3072 ... 3072 x 3072
OutputTextureSizeType360._4096 ... 4096 x 4096
OutputTextureSizeType360._4K ... 3840 x 3840
OutputTextureSizeType360._5_7K ... 5760 × 5760
OutputTextureSizeType360._8K ... 7680 x 7680
OutputTextureSizeType360._16K ... 15360 x 15360
OutputTextureSizeType360._16384 ... 16384 x 16384
|
OutputTextureSizeType360 GetOutputTextureSizeType360 ();
ver.2.0.0で追加された関数です。
パノラマ360-3D時、出力テクスチャサイズの種類を取得します。
これは最終的に出力される2眼のパノラマを配置したときのテクスチャのサイズになります。
OutputTextureSizeType360._512, OutputTextureSizeType360._1024, OutputTextureSizeType360._2048,
OutputTextureSizeType360._3072, OutputTextureSizeType360._4096, OutputTextureSizeType360._4K,
OutputTextureSizeType360._5_7K, OutputTextureSizeType360._8K, OutputTextureSizeType360._16K,
OutputTextureSizeType360._16384
のいずれかが返されます。
void SetEyesType (EyesType eType);
ver.2.0.1で追加された関数です。
単眼かステレオか指定します。
引数名 | 内容 |
eType |
単眼/ステレオの種類。
EyesType.Stereo ... ステレオ (デフォルト)
EyesType.Mono ... 単眼
|
EyesType GetEyesType ();
ver.2.0.1で追加された関数です。
単眼かステレオか取得します。
EyesType.Stereo, EyesType.Mono のいずれかが返されます。