はじめに

Unreal Engine 4 (UE4) Advent Calendar 2014の24日目の記事です。 
本記事の手順通りにやれば、拙作『ねこのるんば』とほぼ同じ物が出来る講座です。

追記中…
何故ねこのるんば?

あのマンションのサンプル(Architecture(しょっちゅう名前が変わる))がパッと見の見栄えの良さの割にはfpsが稼ぎ易く、汎用性も高そうでバランスがいいからです。適度な広さなのもいいですね。
名作、UE4RollerCoasterでも使われています。
作業的にも動く台を作ってFPSテンプレート辺りを乗せるだけでOKです。
簡単そうですね。

下準備 Architecture サンプル

ArchitectureのサンプルをDLしてprojectを作成しましょう。
って言っているそばから名前が変わっていますね。
「Learn」の「Realstick Rendering」をDLしましょう。
2014-12-23 20_26_25-Unreal Engine Launcher

保管庫(Vault)にDLし終わったら、Create project します。
2014-12-23 20_29_07-Unreal Engine Launcher

何故かたまに失敗して、Create projectボタンを押してもうんともすんとも言わないことがありますが、そのときはめげずにもう1回作ってみましょう。プログレッシバーが出て作り出したら成功です。
2014-12-23 20_38_58-Unreal Engine Launcher

HDD容量がカツカツで辛いひとは、保管庫上のファイルを削除しても構いません

ここから改造していきますが、元のレベルを残しておきたい方は、別レベル名で保存して、
2014-12-23 20_49_09-名前を付けてレベルを保存する

project settingsで
2014-12-23 20_49_41-

エディタ立ち上げ時のレベルにもそれを指定しておきましょう。
2014-12-23 20_50_19-プロジェクト設定

あと、ついでに後々の作業を便利にするために、コンソール画面を出すキーを好きなキーに変更しておきます。
tabキーに設定する派でしたが、「tabはよく使うよ!」某氏に言われたので、今回は「/」に辺りにしておきます。
2014-12-24 23_21_48-NekoNoRoomba - アンリアル・エディタ

他のキーと被らなくて、そこそこ押しやすいキーにしておきましょう。

小動物のスケール感 FPS_Character→My_Character

取り敢えず何も改造せずに起動。
椅子に近付いてスケール感を確認。
ちょっと小動物としては、視点が高い気がしますね…。
顔の位置に座面がくるくらいにはしたいところ…
2014-12-24 15_14_49-NekoNoRoomba - アンリアル・エディタ

(スタンドアローンで起動して、Alt+Enterで既にOculus Riftで楽しめます)
→カメラの位置を下げよう…ん?FPS_Characterってカメラオブジェクトが無いぞ?
→カプセルの高さを思い切り低くする→いまいち下がりきらない
→FPSテンプレートで作ったprojectからMy_Characterという名前のほぼ同じBPがあるので、
2014-12-24 15_12_23-FPS_TEST_4_5 - アンリアル・エディタ
それを「移行」で持って来ましょう。[UE4] 他プロジェクトからアセットを移動させる方法
2014-12-24 15_12_50-アセットのリポート

カメラオブジェクトがこっちにはあるので位置を適度に下げましょう。
2014-12-24 15_19_44-NekoNoRoomba - アンリアル・エディタ
カプセルの大きさもでか過ぎて、そのままだと家具の間を通れないので、いい感じに大きさに調整しましょう

ブルーマンが邪魔ならレンダリングをオフにします。
2014-12-24 15_17_49-NekoNoRoomba - アンリアル・エディタ

ウィンドウ→ワールド設定でワールド設定タブを開き、FPS_Character→My_Characterにdefault Pawn Classを入れ替えます。
2014-12-24 15_19_27-NekoNoRoomba - アンリアル・エディタ


●何かスケール感がイマイチ
→周りのオブジェをデカくする?(トラブル多発するのでオススメできない)
→ワールド設定→VRのWorld to Meter を弄る(画像1番下)
2014-12-25 00_01_41-NekoNoRoomba - アンリアル・エディタ
小さくすれば小人感アップ、大きくすれば巨人感アップ?
→これってヘッドトラッキングの量?が数字を大きくするほど大きくなるみたい

●余談:ジャンプとショットが動かないんだけど?
ねこのるんばを作る上ではジャンプもショットも必要ありませんが、
FPSテンプレートでは出来ていたことが出来ないのでは気持ち悪いですよね。
MyCharacterのブループリントをみてみるとなにやら警告が…
2014-12-24 15_27_59-NekoNoRoomba - アンリアル・エディタ

移行元のFPSテンプレートのプロジェクトを開いて、Action Mappingを見比べてみてください
2014-12-24 15_29_19-FPS_TEST_4_5 - アンリアル・エディタ
これと同じ「Jump」と「Fire」という名前のActionをAction Mapping横の+ボタンを押して、同様なキーをねこのるんば側のプロジェクトにも割り当てましょう。
2014-12-24 15_31_14-NekoNoRoomba - アンリアル・エディタ
これでねこのるんばのプロジェクト側でも移行元FPSテンプレートのプロジェクトと同様にジャンプとショットが撃てるようになります。別に今回は要りませんが。
(個人的には動作テストで歩き回ったり登るのに便利なのでジャンプはよく入れます)

取り敢えず起動、fpsは?

GTX870Mマシーン(ノート)、SDK0.42、UE4.51でテスト。
スタンドアローンで起動したら、さきほど設定したコンソール画面用のキーを押してみましょう。
2014-12-23 21_05_30-NekoNoRoomba (64-ビット、 PCD3D_SM5)

「stat fps」というコマンドを入力してEnterを押せばfpsが表示されます。
スタンドアローンで120fpsくらい(Oculus Rift含む外部ディスプレイが繋がっているとき)
Alt+EnterでDK2に転送すると40fpsくらい
大雑把な目安としてスタンドアローンで200fps近く出ていれば、DK2に転送しても75fps出ます。

※少しでも負荷を減らすため、エディタは最小化しましょう

その前にちょっと不便なので、レベルブループリントに色々書く

立ち上げる度にコンソール画面を出してstat fpsとか面倒臭いので、レベルブループリントに色々書いてしまiしょう。
Alt+F4による終了も若干面倒ですね。Escキーで終了出来るようにしましょう。
2014-12-24 23_44_03-NekoNoRoomba - アンリアル・エディタ


魔法のコマンド
hmd sp 100についてはUE4+OculusRift DK2で75fps安定させるまでにしたこと

リセットについては【超レアケース】UE4のOpenLevelによるリセットがpackage化すると固まる問題の発生条件を特定

速度を稼ごう

ん?なんかVR向けに既に何か書いてあるんですけど?

2014-12-23 23_24_49-NekoNoRoomba - アンリアル・エディタ


どうやら、HMDが繋がっていると専用のPostEffectVolume(VRsetup)をonにしてくれる模様。
やったね!速度調整しなくていいじゃん!
って全然速度出てないんだけど… 
スタンドアローン120~130、DK2で64fpsくらい(私の環境で)

速度周りのリンクOculus向けのコンテンツをUE4で制作するためのノウハウ共有♪(Oculus向けの最適化とか品質向上とか)

レベルの保存を忘れずに! (リセット問題!)
なんでもいいけど、さっきからHMDに転送すると右の壁一面を見た状態でスタートするのが気になる…
プレイヤースタートの向きを変えても変わらない…

●Lightを全部staicに
スタンドアローン150~155くらい、DK2で75fpsに
→なんか暗い、しかも額縁のスポットLightの影がなんか汚い
→Lightを1個追加
ライトの配置が終わったら、ビルドしましょう。


●それでも速度が出ないならPostEffect周りを切ってみよう
2014-12-23 23_58_22-NekoNoRoomba - アンリアル・エディタ

2014-12-23 23_58_43-NekoNoRoomba - アンリアル・エディタ

スタンドアローン160fpsくらいに


ねこ乗るん場 モデリング

モデリングできるひとはモデリングソフトで頑張りましょう。
ボクはブラシでがんばろう 。
BSP→シリンダーを組み合わせて作成。
スタティックメッシュにする→マテリアルを割り当てる→3つ選んでBP化。

ねこ乗るん場 ブループリント

色々と解説すべきなんですが、力尽きたので、取り敢えずSSを。
あとで、解説を追記するかもしれません。

BP_Roomba

大雑把な解説:
『Setup』:開始時に現在のルンバの向きを保存(レベル配置時に角度を変えるとその向きに向かいます)
『Move』:保存された向きに向かって真っ直ぐMoveSpeedで進みます(RotateSpeedで回転しながら)
『Reflection』:で、ぶつかったときの向きの反射をしています(ブロック崩しの動画を参考に)

今のところ起動すると即動き出してしまいます。このままでは不便です。
任意のボタンを押したらブーリアンのメンバ変数Startedをtrueにして動き出すようにしていきましょう…(書いている途中)
※また、回転し続けながら進むというのは、実際のルンバの挙動とは違います(コーヒーカップアトラクションっぽい)。余力があれば、反射すべき角度に振り向くときだけ回転するようにしたいですね。

あれ?ねこ乗るん場だけ回転するんだけど?

DK2被らずにビューポートとかでプレイテストしているときは、全く気付かなかったのですが、DK2に転送すると何故かねこ乗るん場だけが回転して困ります。

この対策は以前のエントリの中程を参照願います


パッケージ化時の画面最大化

package化するとAlt+Enterが利きません(shippingの場合)
レベルブループリントに最大化の処理も書き足しましょう
コンソールコマンドで「r.SetRes 1920x1080f」と書いておけば、自動で最大化します
2014-12-25 00_32_22-NekoNoRoomba - アンリアル・エディタ


完成! あれ? パンツは?

ニコニコ立体さんのインポートに関しては、それだけで1エントリになりそうなので、今回は割愛します。
もっと詳しい方の説明を読んだ方が手っ取り早そうです(丸投げ)
UE4とOculus Rift DK2を使ってニコニ立体ちゃんと戯れるデモを作ってみた その1

ボーンのソケットを使ったプロップの接続と、物理演算を使用したニコニコ立体さんの髪の揺らし方

注意点として、マテリアルをUE4上で設定し直すときは、以下のような失敗をしないようご注意ください。
『ビューポートでプレイしていたときは問題なかったのに、DK2で見ると何故かダークゾーン!』

ねこのるんば 愉しい!
rabbit_carrot

次回はhousakusleepingさんの「ニコニコ立体さんの髪とスカートを揺らすまで その2」です。自分もニコニコ立体さんをねこのるんばで使っているので、非常に勉強になりそうです!