VRプロジェクトのUE4バージョンを上げた時にハマったこと、他

この記事は[Unreal Engine 4 (UE4) Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ue4) 11日目の記事です。

別にやりたいことがあったんですが、準備が間に合わなかったので、同じことにハマる人がごくごく少数でもいるかもと思い記録します。

----

# Configuration Files

VRのプロジェクトといえば、パフォーマンスが大事です。FPSのために泣く泣く絵の質を落として、普通のプロジェクトの絵作りスクショに嫉妬する日々を送ります。

約1年半ほど前のプロジェクトで、VRプロジェクト制作時になるべく絵を落とさずに、パフォーマンスを出すために、名作「[Robo Recall](https://www.epicgames.com/roborecall/)」の[Mod Kit](http://api.unrealengine.com/JPN/Modding/RoboRecall/QuickStart/InstallModKit/)でのRendering設定を参考にプロジェクトを作っていました。

## Robo Recall Mod Kit - Rendering Config

Robo Recall Mod Kit の Unreal Engine バージョンは4.16、DefaultEngine.ini のサイズは驚きの139KB(VRテンプレートから作った新規プロジェクトは5KB)。この中のRendering周りの設定は以下の項目です。

```
[/Script/Engine.RendererSettings]
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.ForwardShading=True
r.SupportStationarySkylight=False
r.SupportLowQualityLightmaps=False
r.SupportPointLightWholeSceneShadows=False
r.SupportAtmosphericFog=False
r.VertexFoggingForOpaque=True
r.AllowGlobalClipPlane=True
r.CapsuleShadows=2
```

それぞれの項目についての説明は Console Commandから `help` と入力することでみることができる、html　のから検索するのが便利です。

この設定を基本として、設定をさらに加えて使用していました。当時4.18まで上げていた、このプロジェクトを 4.20、4.21に上げた時に起こった問題について共有します。


## At 4.20

4.20更新時には、エディタを開いただけでは問題なく使えるのですが、画面にマテリアルを表示しようとすると落ちる。という問題が発生しました。

再現条件は以下の二つが揃った時に起きます。

```
r.ForwardShading=True 
r.SupportStationarySkylight=False 
```

r.SupportStationarySkylight を True に変更するか削除すると、正常に使えます。こちらの問題は4.21にて修正済みです。


## At 4.21

4.21では下記の設定が有効な時に、PointLightを追加やLevel場で動かすとエディタが落ちます。

```
r.SupportPointLightWholeSceneShadows=False
```

回避方法は消すか設定値を True にする。Issueにトラッキング済みです。
https://issues.unrealengine.com/issue/UE-62132

## その他

以上はRendering周りの設定でハマったところです。他には 3DWidget 周りでいくつか踏みました。

* UE4.20でEditableTextにキーボードから入力が出来ない (Packaging またはStandalone時、[answerhub](https://answers.unrealengine.com/questions/812884/3d-widget-input-not-working-in-ue-4201.html))
* UE4.21でEditableTextにキーボード入力出来るようになったけど、日本語が入力できない(同上)
* UE4.20から、ButtonのClickが押せない(Pressedを使うことで回避できる、[answerhub](https://answers.unrealengine.com/questions/813093/420-3d-widgets-non-clickable-in-standalone-game.html))

## ~~いいわけ~~ おまけ

![Myon.gif](https://qiita-image-store.s3.amazonaws.com/0/2798/632f99af-a979-c60e-41a5-c66e968864ef.gif)

以前に購入したUE4マーケットプレイスの「[VR Integrator Radial and Dockable Menus](https://www.unrealengine.com/marketplace/vr-integrator-radial-and-dockable-menus)」というアセットに、Smooth Laser Pointer が含まれていました。

このみょんみょん感が気に入ったので、解析して解説したいと思っていました。移植はできたのですが、簡易化や理屈部分の説明がしきれずタイムオーバーになりました。

UE4マーケットプレイスはクリエイターの取り分88%ですし、興味を持った方は応援の意味も込めて覗いてみてください。

[Epic Games Store](https://www.epicgames.com/store/ja/)もデベロッパー88%ですし、UE4もこれからが楽しみですね!いつかVRゲーを Epic Games Store に公開したいです。あと、Oculus Quest向けのEpic新作待ってます！