com.koiusa.stereoview
v2.0.0
Published
Head-tracked off-axis projection and screen visualization for Unity.
Maintainers
Readme
Stereo View
Unity向けの、視点追跡付き非対称投影(off-axis projection)パッケージです。物理スクリーンを仮想空間への「窓」として扱い、観察者の目の位置に合わせてCameraの投影行列を更新します。
ランタイムAPIはKoiusa.StereoView名前空間で提供されます。
要件
- Unity 6000.3以降
- Input System 1.18.0
- AR Foundation 6.3.5
- Universal Render Pipeline 17.3.0
セットアップ
- Cameraへ
PortalViewControllerを追加します。 - スクリーンの物理幅・高さをメートル単位で設定します。
Screen PositionとScreen Rotationで仮想スクリーン面を配置します。Screen Rotation.forwardがシーンの奥方向です。FaceTracker、GyroTracker、または独自のITracker実装を割り当てます。- Cameraの
Near Clip PlaneとFar Clip Planeで描画範囲を設定します。
モデルが1 unit = 1 cmの場合は、World Scaleを100に設定します。トラッカー入力と物理スクリーン寸法はメートル単位です。
独自トラッカー
視点入力はITrackerを実装したMonoBehaviourとして差し替えられます。
using Koiusa.StereoView;
using UnityEngine;
public sealed class CustomTracker : MonoBehaviour, ITracker
{
public bool IsActive => true;
// スクリーン基準。X=右、Y=上、Z=スクリーンから視聴者までの距離。単位はメートル。
public Vector3 EyePositionMeters => new(0f, 0f, 0.4f);
}portalView.Tracker = customTracker;スクリーン自体の位置・回転を追跡する場合はIScreenTrackerを使用します。顔・ジャイロ固有の差し替えにはIFaceTrackerとIGyroTrackerを使用できます。
Cameraと投影行列
PortalViewControllerは毎フレーム、CameraのprojectionMatrixとworldToCameraMatrixを更新します。クリップ距離にはCameraのnearClipPlaneとfarClipPlaneを使用します。コンポーネントを無効化すると両方の行列をリセットします。
行列計算だけが必要な場合はStereoView.CoreのOffAxisProjectionを直接使用できます。
アセンブリ
StereoView.Core: Off-axis投影行列の計算StereoView.Tracking: 顔・ジャイロ追跡StereoView.Runtime: Camera制御とスクリーン可視化StereoView.URP: URPのシャドウ距離連携StereoView.Editor: Editor入力とGizmo表示
IL2CPPビルドではStereoView.URPを確実に含めるため、起動処理からUrpPortalViewRegistration.Register()を呼び出してください。Editorでは自動登録されます。
ライセンス
MIT License。詳細はLICENSE.mdを参照してください。
