【UE4】GearVRで20fpsから60fpsを目指してやったこと
発売日にGearVRが届きました!
はこでかい pic.twitter.com/38Xh5uB2Hc
— てんちょー@GGJ-UE4 (@shop_0761) December 18, 2015
やばい…楽しい…ナニコレお手軽… と初日から楽しんでました。
で、どうせなら何か作ろう そう思って色々考えてはプロトタイプを作ってはいましたがいろいろトラブってたので一旦投げました。
そこで何ならぷちコンで作ったやつを試しに60fps目指して改良しよう!と思いついたのでやったお話です。
注)以下は個人的な意見なのであってるかどうかは分かりません。参考程度にしてください。
ゲームはこちら。マグマのところのステージを対象にやってみました。
また途中結果がtwitterにしかないので細かいところはご愛嬌ください。
結果
寝る前に思いついた方法を足すと割と安定して60付近になった pic.twitter.com/YyYnI27kiF
— てんちょー@GGJ-UE4 (@shop_0761) December 20, 2015
使っているもの
- Infinity BladeのAsset
- 中野シスターズ ver1.2
です。
何もしてない状態
とりあえず1つのステージだけ最適化中だけど最初20fpsだったのが30まできた
— てんちょー@GGJ-UE4 (@shop_0761) December 19, 2015
でした。
やったこと
まずは背景用にもりもり突っ込んだメッシュをゴリゴリ消しました。
Before
After
そりゃ軽くなるよ!!こんだけ消したんだもの!!
それからこのあたりを参考にゴリゴリ削ります。
定番のLightをstaticにしたり、色々staticにしました。Collisionなんかもstaticになるんですね(知らなかった
幸か不幸かPostprocessには手が回ってなかったのでVolume自体なかった…
またFogは残してあります。なんか雰囲気ほしかった。(もちろんstaticで
staticMeshのシャドウも消してます。 LightMapはもう思い切って削りまくりました。
けど、エディタの詳細から設定できるシャドウの方は一部有効にしてます。(でないと真っ黒になった
それとこちらのMaterialの設定はMobileでは有用そうです。
[編集中]24時間でUnreal Engine4で #GearVR コンテンツを作る方法#vrfes2015spring | Develog.VR
ここのMobile設定のことです。ついでにスペキュラ使ってるマテリアルあったので切りました。(なぜ使っていた…
そしてこの件
GearVRはASTCにした方がいいみたいのを見かけたのでそれでパッケージ化してる
— てんちょー@GGJ-UE4 (@shop_0761) December 19, 2015
一応こちらに載ってはいるのですがUE4公式ドキュメントではETC2になってます。(どっちがいいかは分かりません
今回はなんとなくASTCでやってます。
これの存在も頭にいれつついきます。(いつも勝手にお世話になってます
ProfileGPU中のSlateUIという謎項目(5~10ms食ってる)に悩まされているそこのあなた、fps表示を一度切ってみましょう。または、他のプロファイル用の表示を切ってみましょう。ほらね、簡単でしょ
(←さっき気づいた馬鹿) #UE4Study
— おかず@Rift CV1 3月発送勢 (@pafuhana1213) February 1, 2015
このくらいやった時に問題になったのがこれ
半透明なものがないはずなのにこれがめっちゃ食ってるのなんでだ pic.twitter.com/GL2Pu5zCGo
— てんちょー@GGJ-UE4 (@shop_0761) December 19, 2015
このprofileGPUって項目名でそのまま調べてもいまいち出てこないんですよね…
なのでそのままの意味で解釈するしかないと 思い至ったわけです。
半透明なフィルタのVolume… これBlockingVolumeでは!? と思って削ったら
とりあえずここまで減った pic.twitter.com/lFxGh3kzo2
— てんちょー@GGJ-UE4 (@shop_0761) December 19, 2015
この時のBlockingVolume
この棒状Volumeでもちゃんと機能します。そしてコスト削減できる! やったね!!(ジャンプさせたりするなら2本にするとか
とにかく必要ない部分もVolumeとして存在するので棒状にしてみました。
ついでにPainCousingVolumeも使ってたのですが、消し去ってkillZに乗り換えました。(この時点でBlockingVolumeの出番はなくなった
減った減ったー…と思ってもまだ残存勢力がいる模様。もうさすがに無いだろ…と思ってた矢先に
これCollisionも計算されてるかも!?
と思い、すでについていたstaticMeshのCollisionや、不要なCollisionもバリバリ消しました。 今となっては確かに計算しなきゃならないからコストかかるじゃん…ってなりました はい。
そして、Triggerとして使用していたCollisionも1cm四方の立方体に圧縮しました。
でこれ
とりあえず安定はしないけどこれくらい出るようになった pic.twitter.com/Wvg0YdpSvn
— てんちょー@GGJ-UE4 (@shop_0761) December 19, 2015
あと一歩って感じですよね。
ChalacterのCollisionも削ればひょっとして…と思いやってみた。
足元だけにしました。
他にもこんなロボットと戦う場面があります。手のところにつけてたCollisionをダメージ判定に使ってたのですが、 AnimBPのイベントディスパッチャーで発火された時にもうダメージを与えるようにしました。(確認はしてない
すると安定気味になりましたとさ。
寝る前に思いついた方法を足すと割と安定して60付近になった pic.twitter.com/YyYnI27kiF
— てんちょー@GGJ-UE4 (@shop_0761) December 20, 2015
まとめ
意外な盲点としてこのVolume周りがあるのではと思った。他の方の記事をみるとあまりこの項目が出てないのでなんでだろ…と思ってましたが、 なんとか60付近になってよかったです。
なによりInfinity BladeのAssetの出来の良さのおかげで素材そのものをゴリゴリいじらなくてもいけたのが大きいです。
ただ、まだHMDでのカメラ周りのBPとか設定がよく分かってないので思うように動かせてませんw
とりあえずこの後は歩き回れるようにしようと思います。
追記
いろいろ変更したりビルドした後に保存しないと反映されないと思うので、こまめに「すべてを保存」をしてました。
今回あまりコマンドを使ってません。 これだけ
こういう方法もあるよくらいに思ってください。(コマンドを知らなかっただけ GPUビジュアライザーで見た時にどの項目に対してどのコマンドを使ったらいいかは こりんさん(@k0rin) のサイトが参考になると思います。