Upload
udasan
View
1.439
Download
0
Embed Size (px)
DESCRIPTION
Oculus Rift 勉強会 (http://ocuben.doorkeeper.jp/events/13322) で発表したものです。
Citation preview
DK2 ポジトラでモデルを動かし
た か っ た …Oculus Rift 勉強会 #01
ウダサン
ウダサン @udasan_koubou Unity 楽しい! Oculus Rift 楽しい!
自己紹介
素人が VR ソフトを展示しながら考えた、没入体験中の説明のしかたについて◦http://udasankoubou.blogspot.jp/2014/07
/oculusriftvr.html 見えない状態でのコンテンツ内外の説明
とか Oculus Rift 自体を入力に使ってる例と
か スピーカーを使うならオーディオリスナ
を固定とか
自己紹介 # ステ ( ルスでも何でもない ) マ
プレイヤーモデルを動かしたい話 DK1 の回転をアニメーションに反映する
◦1D ブレンディングなど DK2 のポジトラをアニメーションに反映
する◦2D ブレンディングなど
概要
体を表示 ( 首から下のみ )◦TitansOfSpace など
体を表示しない◦RiftCoaster など
手のみ◦LeapMotion 系
( 人型でないケース、主観視点でないケース )◦神様視点など
プレイヤーの体の表示について
現実の姿勢と完全一致しない◦想像での補完に頼ったほうがいい場合も
顔は自分で見えない◦一部を除き首から下で十分
多少難しい、手間がかかる◦頭の位置、回転を合わせないとモデルの内部
が見える
プレイヤー表示は少数派?
自分がより能動的に関わっている感が出る
自分がどういう状態にあるかわかりやすい◦立っているか座っているか、服装など
当たり判定をつけたい場合にも 既存のモデルをそのまま使える
◦( 首から下と比べて )
プレイヤー表示のメリット
モデルの頭の位置とカメラを合わせる◦通常はモデルの身長に合わせることに◦( リアル身長に合わせてカスタマイズできると
いいかも ) カメラの回転に合わせてモデルの頭を回
転◦モデル内部が見えてしまわないように◦ただし真下は NG
プレイヤー表示する場合 (DK1)
真下を向いても体内が見えないように◦人間は首から下を動かさずに真下を向けない
真下を向いたら体が前に出るのが自然 首なしモデルの場合も頭だけ移動は不自
然 胴体をアニメーションで動かそう!
プレイヤー表示する場合 (DK1) +
複数のモーションをブレンドする機能◦歩きと走りの中間◦直進と旋回の中間
今回は直立と前傾の中間を使います
ブレンドツリー (Unity)
「見習い空賊と天空の少女」の例◦すり抜けながらかっさらうやつ http://
udasankoubou.blogspot.jp/2014/05/oculusrift.html
1D ブレンディング デモ #1
直立と前傾のブレンディング
1D ブレンディング デモ #2
さらにぶら下がり姿勢までのブレンディング
1D ブレンディング デモ #3
固定ポーズのモーションを数個作るだけでできます
カメラの位置は OnPreRender で頭の位置に移動させてます
Y 軸まわりはモデル自体を回転させています
1D ブレンディング デモ #4
ポジショナルトラッキング!◦嬉しい!けどモデル頭部からカメラが飛び出
す! カメラの位置に合わせてモデルの頭を動
かす まずは 2D ブレンディングで
プレイヤー表示する場合 (DK2)
MMD で前後左右のモーション作成◦頭を水平に移動できるように◦短め、単一ポーズのモーション作成◦センターだけで◦ミラーできるので Right はなくてもよいです◦値の単位は不明? (1 が 10cm ~くらい? ) あとでスクリプトで合わせます
2D ブレンディング 作業デモ #1
2D ブレンディング 作業デモ #2
MMD4Mecanim◦Rig > Humanoid (2D ブレンディング自体は Generic でも
可 ) Avatar 作成
◦Animation > Motion > Root Motion Node を joint_Master ( モデルによる ) に変更 ( 重要! ) センターの移動に必要です
2D ブレンディング 作業デモ #3
モデルの fbx をシーンに配置◦Apply Root Motion はオフ ( 重要! ) Root は移動させていないつもりでしたが
◦MMD4MecanimModel の IK はナシで スクリプトで IK を使うなら必要そう IK つきモーションを使うだけならオフ必須
2D ブレンディング 作業デモ #4
Animator Controller 作成◦Create State > From New Blend◦Blend Type > 2D Simple Directional◦パラメータ作成 (Float で PosX, PosZ)◦Motion > + > Add Motion Field
とりあえず動いた!
2D ブレンディング 作業デモ #5
2D ブレンディング 作業デモ #6
もう少し広く動けるように MMD で大きく移動したモーション作成
◦足 IK も使ってバランスをとる BlendType > 2D Freeform Directional
◦同じ方向に複数のモーションがある場合はこれ
これ以上外に行く場合はフェードアウトやルートの移動なども合わせてするとよさそう
2D ブレンディング 作業デモ #7
2D ブレンディング 作業デモ #8
2D ブレンディング 作業デモ #9
斜め移動時を自然に◦斜め移動 ( ブレンド ) の移動量が足りない
MMD でモーション作成◦斜め 4 方向のモーション作成
ブレンドツリー◦そろそろ一部の補間モーションがあやしくな
る◦頭の位置のほうが大事なので目をつむる
平行移動については正しくできそうに!
2D ブレンディング 作業デモ #10
2D ブレンディング 作業デモ #11
OVRCameraController◦モデルが Center 時の目の位置の少し前に配
置◦Use Player Eye Hight オフ◦Neck Positon は 0
Right Camera の子を作成 (Tracker)◦IPD/2 移動して目の中心に◦Tracker の移動をアニメーションパラメータ
に適用するスクリプトを付ける◦( 今回のデモでは首の回転はやっていません )
DK2 で動かしてみる #1
public class TrackerDemo0 : MonoBehaviour{
public Animator animator;public float scaleFactor = 1.0f;
OVRCameraController ovrCameraController_;
public void Start(){
ovrCameraController_ = Component.FindObjectOfType<OVRCameraController> ();}
public void Update(){
if (!animator || !ovrCameraController_) { return; }
Vector3 offset = ovrCameraController_.transform.InverseTransformPoint (this.transform.position);offset *= scaleFactor;
animator.SetFloat ("PosX", offset.x);animator.SetFloat ("PosY", offset.y);animator.SetFloat ("PosZ", offset.z);
}}
DK2 で動かしてみる #2
DK2 で動かしてみる #3
題、おぼえていますか◦動かしたかった ( 希望 )
2D でも x-y や z-y ならできるけど… 3D ブレンディング…?
◦残念ながらありません IK… ?
◦頭 IK はありません Final IK とか…?
◦正解あったらぜひ教えてほしいです!!
縦方向に動か…す?
MMD でおもむろにしゃがみモーション作成
うしろにいた Ethen 氏と Robot Kyle 氏に 1D ブレンディングのツリー作成
Tracker の Y 軸移動でしゃがむように ナターシャ女史をかつぐ
作業デモ () #1
完成
2D ブレンディング自体はコンテンツによっては使えるかも◦座ってのプレイが前提なら、上下移動は
フェードアウトで対応するなど◦ポジトラに限らず覚えておくと便利です
弁解
MikuMikuDance (樋口優 氏 )◦ http://www.geocities.jp/higuchuu4/
MMD4Mecanim (Nora 氏 )◦ http://stereoarts.jp/
Natasha Ver GA1.0 (CPUX4 氏 )◦ http://www.nicovideo.jp/watch/sm19770095
謝辞
ご静聴ありがとうございました
おしまい