VRで望遠鏡を作ろう! -UE4編-

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

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

06bc43de-s.png
First Personのテンプレートを利用してプロジェクトを作成します。

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

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

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

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

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

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

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

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

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

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

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

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

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

491b24c9-s.png
この部分はErrorとなっているノード2つを削除しましょう。

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

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

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

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

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

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

fmystB

このブログについて

KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。

おすすめ

合わせて読みたい

このブログについて

KLabのゲーム開発・運用で培われた技術や挑戦とそのノウハウを発信します。