Panorama180 Render : スクリプトからAPIを使用 (Editor)

Developer : ft-lab (Yutaka Yoshisaka).
05/13/2019 - 03/01/2022.

戻る

スクリプトからAPIを使用 (Editor)

このスクリプトは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);

静止画像の出力ファイル名を指定します。
引数名内容
fileName出力ファイル名

string GetOutputImageFileName ();

静止画像の出力ファイル名を取得します。

void SetOutputImageFileFormat (int fileFormat);

静止画を出力する際のファイルフォーマットを指定します。
引数名内容
fileFormat0:jpg, 1:png

void SetOutputImageJpegQuality (int jpegQuality);

静止画を出力する際のJPEG品質を指定します。
引数名内容
jpegQuality0:Superb, 1:Good, 2:Normal, 3:Average, 4:Bad

bool IsOutputBusy ();

静止画出力が準備中、またはまだ出力できない場合はtrueを返します。

void SetRenderTextureSize (int texSize);

キューブマップとしての1つの面でのテクスチャサイズを指定します。
引数名内容
texSize512, 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を指定します。
引数名内容
enableFtrueで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);

カメラ位置を変更します。
同期を取るためにコルーチンから呼ぶ必要があります。
引数名内容
cameraPosカメラの位置
この関数は、パノラマ画像を生成する際のカメラの描画の同期を待ちます。
カメラの回転などを別途指定する場合は、先にカメラ情報を変更してからこの関数を呼ぶようにしてください。

bool OutputStillImage (bool depthF = false);

静止画像をファイル出力します。
引数名内容
depthFtrueの場合はDepth出力、falseの場合はRGB出力
静止画像の出力に成功した場合はtrueが返されます。
Depth出力時は、ファイル拡張子はexrになります。

void SetSynchronizeGazeDirection (bool b);

ver.1.1.0で追加された関数です。
パノラマ画像生成時に、Y軸回転に加えてXZ軸回転も反映するかを指定します。
引数名内容
btrueの場合はカメラのXYZ回転を反映
falseの場合はカメラのY回転のみを反映

bool IsSynchronizeGazeDirection ();

ver.1.1.0で追加された関数です。
パノラマ画像生成時に、trueの場合はカメラのXYZ回転を反映します。
falseの場合はカメラのY回転のみを反映します。

void SetIPD (float t);

2つの眼の間の距離(IPD : 瞳孔間距離)を指定します。
引数名内容
t IPD(単位 : m)

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で追加された関数です。
静止画を出力するファイル名のフルパスを取得します。
引数名内容
depthFtrueの場合は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 のいずれかが返されます。

戻る