てんちょーの技術日誌

自分がつまづいたこととかメモ

【UE4】GearVRで20fpsから60fpsを目指してやったこと

発売日にGearVRが届きました!

やばい…楽しい…ナニコレお手軽… と初日から楽しんでました。

で、どうせなら何か作ろう そう思って色々考えてはプロトタイプを作ってはいましたがいろいろトラブってたので一旦投げました。

そこで何ならぷちコンで作ったやつを試しに60fps目指して改良しよう!と思いついたのでやったお話です。

注)以下は個人的な意見なのであってるかどうかは分かりません。参考程度にしてください。

ゲームはこちら。マグマのところのステージを対象にやってみました。

shop-0761.hatenablog.com

また途中結果がtwitterにしかないので細かいところはご愛嬌ください。

結果

使っているもの

  • Infinity BladeのAsset
  • 中野シスターズ ver1.2

です。

何もしてない状態

でした。

やったこと

まずは背景用にもりもり突っ込んだメッシュをゴリゴリ消しました。

Before

f:id:shop_0761:20151220130242p:plain

After

f:id:shop_0761:20151220130328p:plain

そりゃ軽くなるよ!!こんだけ消したんだもの!!

それからこのあたりを参考にゴリゴリ削ります。

pafuhana1213.hatenablog.com

qiita.com

docs.unrealengine.com

定番のLightをstaticにしたり、色々staticにしました。Collisionなんかもstaticになるんですね(知らなかった

幸か不幸かPostprocessには手が回ってなかったのでVolume自体なかった…

またFogは残してあります。なんか雰囲気ほしかった。(もちろんstaticで

f:id:shop_0761:20151220133225p:plain

staticMeshのシャドウも消してます。 LightMapはもう思い切って削りまくりました。

けど、エディタの詳細から設定できるシャドウの方は一部有効にしてます。(でないと真っ黒になった

それとこちらのMaterialの設定はMobileでは有用そうです。

[編集中]24時間でUnreal Engine4で #GearVR コンテンツを作る方法#vrfes2015spring | Develog.VR

ここのMobile設定のことです。ついでにスペキュラ使ってるマテリアルあったので切りました。(なぜ使っていた…

f:id:shop_0761:20151220131631p:plain

そしてこの件

一応こちらに載ってはいるのですがUE4公式ドキュメントではETC2になってます。(どっちがいいかは分かりません

developer.oculus.com

今回はなんとなくASTCでやってます。

これの存在も頭にいれつついきます。(いつも勝手にお世話になってます

このくらいやった時に問題になったのがこれ

このprofileGPUって項目名でそのまま調べてもいまいち出てこないんですよね…

なのでそのままの意味で解釈するしかないと 思い至ったわけです。

半透明なフィルタのVolume… これBlockingVolumeでは!? と思って削ったら

この時のBlockingVolume

f:id:shop_0761:20151220134736p:plain

f:id:shop_0761:20151220134800p:plain

この棒状Volumeでもちゃんと機能します。そしてコスト削減できる! やったね!!(ジャンプさせたりするなら2本にするとか

とにかく必要ない部分もVolumeとして存在するので棒状にしてみました。

ついでにPainCousingVolumeも使ってたのですが、消し去ってkillZに乗り換えました。(この時点でBlockingVolumeの出番はなくなった

減った減ったー…と思ってもまだ残存勢力がいる模様。もうさすがに無いだろ…と思ってた矢先に

これCollisionも計算されてるかも!?

と思い、すでについていたstaticMeshのCollisionや、不要なCollisionもバリバリ消しました。 今となっては確かに計算しなきゃならないからコストかかるじゃん…ってなりました はい。

そして、Triggerとして使用していたCollisionも1cm四方の立方体に圧縮しました。

でこれ

あと一歩って感じですよね。

ChalacterのCollisionも削ればひょっとして…と思いやってみた。

f:id:shop_0761:20151220140139p:plain

足元だけにしました。

他にもこんなロボットと戦う場面があります。手のところにつけてたCollisionをダメージ判定に使ってたのですが、 AnimBPのイベントディスパッチャーで発火された時にもうダメージを与えるようにしました。(確認はしてない

f:id:shop_0761:20151220141525p:plain

すると安定気味になりましたとさ。

まとめ

意外な盲点としてこのVolume周りがあるのではと思った。他の方の記事をみるとあまりこの項目が出てないのでなんでだろ…と思ってましたが、 なんとか60付近になってよかったです。

なによりInfinity BladeのAssetの出来の良さのおかげで素材そのものをゴリゴリいじらなくてもいけたのが大きいです。

ただ、まだHMDでのカメラ周りのBPとか設定がよく分かってないので思うように動かせてませんw

とりあえずこの後は歩き回れるようにしようと思います。

追記

いろいろ変更したりビルドした後に保存しないと反映されないと思うので、こまめに「すべてを保存」をしてました。

今回あまりコマンドを使ってません。 これだけ

f:id:shop_0761:20160122221256p:plain

こういう方法もあるよくらいに思ってください。(コマンドを知らなかっただけ    GPUビジュアライザーで見た時にどの項目に対してどのコマンドを使ったらいいかは こりんさん(@k0rin) のサイトが参考になると思います。

framesynthesis.jp