UE4でVRアプリを開発する記録
UE4でのVRアプリ開発の記録を垂れ流していく。
始める前の知識レベル
- UE4はモバイルアプリ開発でブループリントとC++、ビルドまわりは触ったことがある
- 3DCGアセットやレンダリングまわりの知識はほぼない
- VRアプリ開発は未経験
ゴール
- Oculus & SteamVR向けにアプリをビルドできるようになる
- 最終的にはゲームを一本リリースしたい(希望)
まずはチュートリアル
UE4は日本語の教材がちゃんと用意されていて助かる。まずは以下の教材で勉強していく!
↑VR全般に使えるテンプレートプロジェクトの作り方。まず最初に見るのが良さそう。
↑Oculus向けの開発方法や最適化について。2つ目の教材にして知識を強化するのに良さそう。
UE4のVR用サンプルレベルをVR Previewするところまでできた。デバイスはAir Linkで繋いだOculus Quest2。
トラブルシューティング
UE4のVR Previewがグレーアウトして押せない
VRデバイスをPCに接続してからUE4のエディターを起動する必要がある。なので、この状態になっているときはエディターを終了して、VRデバイスをPCに接続したあとに再度エディターを起動すれば押せるようになる。
Oculus Quest 2のAir Link
ケーブルなしでPCとVRデバイスを接続できる。現時点(2021/09/25)ではまだベータだけど、問題なく使えてUE4のVR Previewもできた。前から有料アプリとしてあるVirtual Desktopと仕組みは同じ。公式で無料なのが強い。
詳細な方法は下記参照。
VRプロジェクト用レンダー設定。
DefaultEngine.ini
[/Script/Engine.RendererSettings]
r.ForwardShading=True
r.MobileHDR=True
r.MobileNumDynamicPointLights=4
r.MobileDynamicPointLightsUseStaticBranch=True
r.AllowOcclusionQueries=True
r.MinScreenRadiusForLights=0.030000
r.MinScreenRadiusForDepthPrepass=0.030000
r.PrecomputedVisibilityWarning=False
r.TextureStreaming=True
Compat.UseDXT5NormalMaps=False
r.AllowStaticLighting=True
r.NormalMapsForStaticLighting=False
r.GenerateMeshDistanceFields=False
r.GenerateLandscapeGIData=True
r.TessellationAdaptivePixelsPerTriangle=48.000000
r.SeparateTranslucency=False
r.TranslucentSortPolicy=0
TranslucentSortAxis=(X=0.000000,Y=-1.000000,Z=0.000000)
r.CustomDepth=3
r.DefaultFeature.Bloom=True
r.DefaultFeature.AmbientOcclusion=False
r.DefaultFeature.AmbientOcclusionStaticFraction=False
r.DefaultFeature.AutoExposure=False
r.DefaultFeature.MotionBlur=False
r.DefaultFeature.LensFlare=False
r.DefaultFeature.AntiAliasing=3
r.EarlyZPass=1
r.EarlyZPassMovable=True
r.DBuffer=False
r.ClearSceneMethod=1
r.BasePassOutputsVelocity=False
r.WireframeCullThreshold=5.000000
UIScaleRule=ShortestSide
UIScaleCurve=(EditorCurveData=
(PreInfinityExtrap=RCCE_Constant,PostInfinityExtrap=RCCE_Constant,Keys=),ExternalCurve=None)
vr.InstancedStereo=True
r.DefaultFeature.AutoExposure.Method=1
r.ReflectionCaptureResolution=256
r.GBufferFormat=1
r.SupportStationarySkylight=True
r.SupportLowQualityLightmaps=False
r.SupportPointLightWholeSceneShadows=False
r.SupportAtmosphericFog=False
r.VertexFoggingForOpaque=True
r.AllowGlobalClipPlane=True
r.CapsuleShadows=2
HMDプラットフォームの優先順位設定。
数値が大きいHMDPluginが優先される。
DefaultEngine.ini
[HMDPluginPriority]
SteamVR=50
OculusHMD=60
OpenXR=20
こっちのコース全部見終わった。VR用プロジェクトを作る初歩の初歩向けだった。空プロジェクトから始まってバージョン管理の方法も内容に含まれてて初学者に優しいし、実用的。
ただし、説明読むと3部構成の予定だったようで、これ以降で具体的なゲームの作り方を実際にゲームを作って説明してくれる予定だった様子(このコースの最後に予告までしている)なのに、1年以上経った今でも続きが出ていないっぽい。残念。
こっちも見たけど、同様に複数コースのうちの最初のひとつめで続きがないパターンだった。あと同じVR向けでも最初の作り方が全然違うので、まずはひとつの動画を参考にして作り始めたほうが混乱は少なそう。
結局ラーニング動画見るより、実際のプロジェクトのコードを参考にしながら自分の作りたいものを試していく方法が効率が一番いい。「Unreal Engine で VR を活用する」をざっと見てVRの基本構造を学んだあとにテンプレートプロジェクトを見るとまずどこを見ればいいかの見当がつきやすかった。
コントローラーで掴んで中心を軸に回転するコンポーネントを作った。リファレンス探しに手間取ったけど、VRでドアを開閉するリファレンスの応用で実装できた。
コントローラーの掴んだ位置と動かした位置のベクトルのなす角を求めて、それをActorのRotationにセットする。
ただ、ベクトルのなす角は180度までしか求められない(右回りか左回りかがわからない)ので、掴んだ位置からマイナス方向に移動した場合は求めた角の符号をマイナスにしてあげる必要がある。
実装してみて、掴んだ位置や現在のActorの向きによってXYZどれを軸に回転させるかが動的に変化するので全方向に回転可能な実装はなかなか骨が折れそうだった。
久しぶりに再開。まずはリハビリでUE4のVRプロジェクトを始めるときにやる設定を復習してまとめて記事にした。
これからのことを考えると、モーションコントローラーを手にしたい。
UE4.26までのVRテンプレートにはMannequin Handが付いてきていたようだけど、UE4.27のVRテンプレートには手の動きに関してはサンプルがなく、Mannequin Handもない。
そこで、UE4.26のプロジェクトを作ってVRテンプレートをインポートしてみた。そこに、手があった。ただ、手は手でモデルをすげ替えればいいだけでなくて、使えるようになるにはアニメーションの実装など学ぶべきことがいくつかありそう。
UE4.27からMannequin Handがなくなったのは、そのへんを複雑にしないためかもしれないなぁなどと思った。しかし、サルベージが面倒なのでUE4.27単体でもMannequin Handをインポートできる方法があると嬉しいなぁ。
VRゲーム開発は一旦お休みして、VRじゃないゲーム開発を進める。
ただ、そのゲームのVR対応するのも面白そうなのでここで得た知識は別のところでしっかり活用されるはず。