eye_rig

eye_rig

English | 日本語

eye_rig

概要

このサンプルは、base -> rod -> eye の3段構成を使うEyeRigについて、Orbit、First Person、Followの役割と、アプリケーションが作る親子階層の違いを同じシーンで確認するものです。

青いcamera vehicleとオレンジ色のtarget vehicleは、カーブ、上り下り、bankを含む同じtrackを位相をずらして走ります。OrbitとFirst Personではcamera vehicleを基準としたカメラ配置を確認し、Followではcamera vehicleに取り付けたカメラが、別に動くtarget vehicleへ視線だけを滑らかに向け続けることを確認します。

このサンプルで確認した仕様は webg/EyeRig.js へ取り込まれています。サンプルはコアの EyeRig を直接使い、Follow、回転した親の下でのOrbit座標変換、First Personの独立lookYaw入力をまとめて確認します。

実行方法

使用しているwebg機能

確認ポイント

Orbitでは、camera rigをcamera vehicleの子にした場合、vehicleの移動、pitch、rollがbaseへ継承されます。Hで独立camera anchorへ付け替えると、vehicleと同じ位置を移動しながら回転は継承しません。この違いがEyeRigのmodeではなく、アプリケーションが作る階層構造によることを確認します。

First Personでは、baseをcamera vehicleの後方、上方、右側へ置きます。camera bodyの前方はlocal -Z、camera vehicleの前方はlocal +Zなので、bodyYaw: 180によって両方の前方軸を一致させています。WはbodyYawで回転したbodyのlocal -ZDはlocal +Xへ進み、反対方向をS / Aで確認できます。ドラッグの水平差分はbodyYawではなくeyeのlookYawへ反映され、lookYawは移動方向を変えないため、vehicleの進行方向を維持したまま周囲を見られます。Q / Eではbaseを親座標系内で上下へ移動できます。

Followでは、baseはcamera vehicleの子として固定され、target vehicleの位置へ移動しません。rodはアプリケーションが決める比較的安定した基準角度を保持し、eyeはtarget vehicleを見るための動的なローカル姿勢だけを担当します。Help panelの follow dot が1に近いほど、eyeのworld前方がtarget方向へ一致しています。

Ubase / rod / world の上方向基準を切り替えると、camera vehicleがbankしたときのロール基準が変化します。追跡方向と上方向がほぼ平行な場合は、直前のright軸を対象方向へ直交投影し、直前姿勢のロール連続性を維持します。

Followの姿勢補間にはフレームレート非依存のresponse係数と最大角速度を使用します。target位置そのものを遅らせず、実際のtarget位置から求めた目標姿勢へクォータニオンで徐々に近づきます。

操作方法

実装ファイル