はじめに

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

追記中…2015年1月1日、ルンバのスタティックメッシュ化、ブループリント化等、大幅に加筆
2015年1月7日 続きへのリンクを追加、微修正

ゆーじさんが拙記事をみて実際に再現されています!
Unity使いのOculusコンテンツ開発者がUnrealEngine4に再々入門してみる その1 #UE4Study
2015/01/01 YUUJII
 

ボクの記事を読んでも細かい手順がよくわかんねーよ!って方は、是非ゆーじさんのサイトをご覧になってください。非常に懇切丁寧に書かれています。
何故ねこのるんば?

あのマンションのサンプル(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-アセットのリポート
OKを押し…

2014-12-24 15_13_59-フォルダーの参照
移行先projectのContentフォルダを指定してOK

カメラオブジェクトがこっちにはあるので位置を適度に下げましょう。
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にしてくれる模様。
やったね!速度調整しなくていいじゃん!
って全然速度出てないんだけど… (hmd sp 100を書いたのでかなり改善しましたが)
スタンドアローン120~130、DK2で64fpsくらい(私の環境で)

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

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

●Lightを全部staicに
スタンドアローン150~155くらい、DK2で75fpsに
→なんか暗い、しかも額縁のスポットLightの影がなんか汚い
→Spot Lightを1個追加(明るすぎなのでintensityを500くらいに)
2014-12-24 00_41_20-NekoNoRoomba - アンリアル・エディタ

ライトの配置が終わったら、ビルドしましょう。


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

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

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


ねこ乗るん場 モデリング

モデリングできるひとはモデリングソフトで頑張りましょう。
ボクはブラシでがんばります 。
2014-12-24 15_41_21-NekoNoRoomba - アンリアル・エディタ
BSP→円柱を選んでビューポートにドロップ

2014-12-24 15_41_51-NekoNoRoomba - アンリアル・エディタ
ちょっとデカ過ぎなんですが…

2014-12-24 15_44_55-NekoNoRoomba - アンリアル・エディタ
いい感じになるように数字を弄ります。
大きさの単位は1で1センチくらいと解釈しておきましょう

2014-12-24 15_46_12-NekoNoRoomba - アンリアル・エディタ
altを押しながら移動すると複製(※click前に押してclick終了してからaltを放してください)

2015-01-02 11_02_54-NekoNoRoomba - アンリアル・エディタ
スナップがONの状態だとキリのいい移動ができますが

2015-01-02 11_02_59-NekoNoRoomba - アンリアル・エディタ

ドラッグによる移動量が多過ぎる場合は調整しましょう

2014-12-24 15_46_21-NekoNoRoomba - アンリアル・エディタ
XYを結んだ線(↑図参照)をドラッグして、ひとまわり縮小した円盤に

roomba_brush
回転させたときに向きが識別し易いように小さな丸い(電源ボタン?)部品も作成

2015-01-01 22_19_26-NekoNoRoomba - アンリアル・エディタ
各々のブラシを判り易い名前に変更
Brushname

2015-01-01 22_19_55-NekoNoRoomba - アンリアル・エディタ
ひとつずつ選び、スタティックメッシュを作成
createmesh

2015-01-01 22_21_35-Greenshot
スタティックメッシュ化したパーツは白っぽくなるけど、気にしない
他のパーツも同様にスタティックメッシュ化

2015-01-01 22_22_32-Greenshot
3つともスタティックメッシュ化した状態
マテリアルが未適用の状態です

2015-01-01 22_25_04-Greenshot
スタティックメッシュをダブルクリックで開いて、ひとつずつ適当なマテリアルを割り当てましょう
2015-01-01 22_26_42-Greenshot

スタティックメッシュの開き方ですが、
2015-01-01 22_27_12-Greenshot
右クリック→「コンテンツブラウザで検索」を使うとラクです

2015-01-01 22_27_25-Greenshot
コンテンツブラウザ上でハイライトされます。これをダブルクリックで開きます

2015-01-01 22_28_00-Greenshot
3つとも適当にマテリアルを割り当て
2015-01-01 22_29_48-Greenshot
3つのスタティックメッシュにマテリアルを割り当てました
この3つを選択した状態で…

creat_bp
ブループリント化します。何処にどんな名前でもいいんですが、
BluePrintsディレクトリ直下でBP_Roombaとでもしましょう

2015-01-01 23_05_17-Greenshot
ブループリント化できました。
これでコンテンツブラウザからドロップで幾らでも複製できます。
Unity3Dでいうところの、Prefabに近い感じです。

※以上のブループリント作成方法は、BPを新規作成(アクター)してそれに上記3つのstaticメッシュを追加でも構いません
※staticメッシュとskeltalメッシュを間違えないよう注意

このままだと乗れないのでコリジョンを設定しましょう

●コリジョンの設定
ベースとなるstaticメッシュ(黒い方)を選び、大雑把なコリジョンを付けます。
コンテンツブラウザ上で選び、ダブルクリックで開きます。

先ず、コリジョンの表示をonにします
coli

コリジョンメニューから適当なコリジョンを選んで生成します
2015-01-01 16_11_50-Greenshot

コリジョンが生成されました。実用上はこの程度で十分でしょう。
もっと細かいコリジョンが必要な場合は他のコリジョンも色々試してみてください。
2015-01-01 16_14_07-NekoNoRoomba - アンリアル・エディタ


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

色々と解説すべきなんですが、力尽きたので、取り敢えずSSを。
あとで、解説を追記するかもしれません。
BP_Roombaをコンテンツブラウザ上で選んでダブルクリックし、グラフタブを選ぶとノードの編集ができます。
いわゆるコーディングに相当する部分になります。

※ボク自身は、このノードをニョロニョロ伸ばしてコーディングする画面のみを指して「ブループリント」だと誤解していたのですが、Unity3Dでいうところの、Prefabのような構造もひっくるめてブループリントなのだそうです。
Unity3Dの「.cs」に相当するスクリプト部分だけが存在して、それをブループリントと呼ぶんだと勘違い…


VP_graph

bp_var

「+変数」ボタンを押して、任意名のメンバ変数を追加
float型のMoveSpeed、RotateSpeed
Vector型のDirection
Bool型のStartedを追加しました(デフォルト値をTrueにしてください)。
右の目のアイコンを開かせるとパブリックメンバになり、エディタ上で弄れるようになります。
この辺はUnity3Dをお使いの方なら直感的にわかるかと思われます。

なお、メンバ変数のデフォルト値の設定は、いったんブループリント編集画面上でコンパイルボタンを押せば設定できるようになります。

(ノードの記入方法は後日…)
メンバ変数は画面内にドロップすると書けます

BP_Roomba

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

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

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

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」です。自分もニコニコ立体さんをねこのるんばで使っているので、非常に勉強になりそうです!

続きを書きました!→UE4でOculus入門「この通りにやれば、ほぼねこのるんばが完成する筈」その2 復数のルンバがボタン押すと同時に動き出す #UE4Study