① VRで望遠鏡を作ろう! -モデリング編-
② VRで望遠鏡を作ろう! -テクスチャ編-
③ VRで望遠鏡を作ろう! -SubstancePainterのテクスチャをBlenderで読み込む-

前回までの記事で望遠鏡のモデルとテクスチャを作り終えたので、UE4にインポートしてVRデバイスで動くようにしていきます。
UE4のバージョンは4.24.3を使用します。

cap01
First Personのテンプレートを利用してプロジェクトを作成します。

cap02
Game/直下にTelescopeフォルダを作り、 -モデリング編-で作成したFBXをインポートします。

cap03
メッシュとそれに関連付けられた2つのマテリアルがインポートされました。 3つともサムネイルが白くなっていますが、マテリアルの設定をすれば色が付きます。

cap04
次にテクスチャ3つもインポートします。

cap05
テクスチャの色空間の設定をします。
Telescope_M_Telescope_OcclusionRoughnessMetallic.pngを開いてsRGBのチェックを外してください。
ベースカラーはデフォルトのままチェックが入った状態でOKですし、ノーマルマップは自動で処理されチェックが外れますが、AO/Roughness/Metalicのテクスチャだけは手動で外す必要があります。

cap06
M_Telescopeを開いてテクスチャをドラッグ&ドロップし、上図のようにノードをつなぎます。
物理ベースのマテリアルなので前回の記事で見てきたBlenderのマテリアルノードと似ていますね。

cap07
M_Lens(接眼レンズマテリアル)には対物レンズ方向へリアルタイムに見えている映像を映したいと思います。
Content Browser上で右クリックしてRender Targetを選択します。

cap08
Lens_RTという名前で保存しましょう。
このオブジェクトはリアルタイムに撮影される映像をレンダリングできるもので、マテリアル上ではテクスチャと同じように扱う事ができます。

cap09
解像度はデフォルトの256では荒い画像になってしまうので2048に上げておきます。

cap10
M_Lensを開いてLens_RTをドラッグ&ドロップし、Emissive Colorにつなぎます。
Shading ModeはUnlitに変えておきます。
これで接眼レンズにはリアルタイムに撮影された映像が映るようになりました。
まだ何も撮影されていないので真っ黒ですが、後程撮影する側の仕組みも作ります。

cap11
さて、望遠鏡オブジェクト自体の設定は終わったので、今度はそれをVRデバイスでコントロールできるようにします。
Content BrowserでContent/FirstPersonBP/Blueprintsに移動し、FirstPersonCharacterを開きます。
これがゲームをプレイ中にコントロールするキャラクターオブジェクトとなります。

cap12
デフォルトで腕と銃のオブジェクトが設置されていますが、これらは今回使いません。黄色で選択されたオブジェクトを削除して保存しましょう。

cap13
上でオブジェクトを削除したことによって、ブループリント上にエラーが発生します。
これらのエラーは全て削除したオブジェクトが見つからずに発生しているものなので、エラー個所のブループリントノードを削除するだけで解決できます。(虫眼鏡のマークをクリックすると直接該当箇所のノードに飛ぶ事が出来ます。)

cap14
Spawn projectileの枠で囲われたノードはデフォルトで設置されていた銃から弾を発射するもので今回は使わないので丸ごと削除します。

cap15
この部分はErrorとなっているノード2つを削除しましょう。

cap16
Construction Scriptに移り、エラーの出ているAttachToComponentノードを削除します。
以上でエラーはすべて解決できます。

cap17
望遠鏡オブジェクトを手に持たせる作業に移ります。
R_MotionControllerは右手のVRコントローラに関連付けられています。
ここにTelescopeを配置します。
こうすることでVRデバイスで実行したときに右手に望遠鏡を持った状態になります。

cap18
次に接眼レンズ(先ほどのLens_RT)に映像を映す仕組みを作ります。
Add Componentで、Telescopeの下にSceneCaptureComponent2Dを配置します。
Texture TargetにはLens_RTを指定して、これにリアルタイムの映像がレンダリングされるようにします。
Lens_RTはM_Lensマテリアル上でノードに接続されているので対物レンズに結果が映し出されることになります。

cap19
SceneCaptureComponent2Dを少しずらし、対物レンズよりも前にピボットが出るようにします。

cap20
以上で今回の作業は終わりです。実行するとVRのコントローラで望遠鏡を持てることと接眼レンズにリアルタイムの映像が映ることが確認できます。

SceneCaptureComponent2DにはFOV(視野角)の設定項目があり、こちらの値を下げるほど狭い部分にフォーカスできるので望遠鏡としての倍率が高まります。
よって、FirstPersonCamera(VRディスプレイに直接表示するためのカメラ)よりもFOVを下げれば遠くのものが大きく映り望遠鏡としての役割を果たせるわけですが、ここは○○倍という風にしっかりと数値で倍率を指定できるようにしたいと思います。
次回その仕組みを作っていきましょう。

fmystB