オフスクリーンを用いてfpsを改善

 Unityで作成中の自作アプリを、自分のAndroidタブレットで実行してみたところ、10fps程度になっていた。

fpsが低くなっている一番の要因は、おそらく半透明のテクスチャを爆発などの演出で使いまくっている為。

自分のAndroidタブレットの性能では、塗りつぶしがキツイのだろう。

演出を小さくしたり減らすのは最後の手段として、まずはオフスクリーンを用いて解像度を下げる(塗りつぶし面積を減らす)ことでfpsが改善するかどうか調べてみた。

 

以下のような実験用のアプリを作った。

  • シーンを描画するカメラの描画先をレンダーターゲット(オフスクリーン)にした。
  • レンダーターゲットのサイズは、ハードウェアの実際の解像度より小さく設定できるようにした。
  • UIの解像度は下げたくないので、シーンを描画するカメラとは別に、UI用のカメラを用意してそちらに描画させるようにした。
  • レンダーターゲットをテクスチャとして用いるマテリアルとUIImageコンポーネントを用意し、それをUI用のカメラに描画させるようにした。

尚、実験用のアプリには、Unityの標準パッケージのParticleSystemsおよびCharactersを組み込んでいる。
・ParticleSystems…シーン内の炎や砂埃の表現に使用
・Characters……バーチャルジョイスティックや1人称プレイヤーに使用

また、fpsの計測は「Advanced FPS Counter」
https://www.assetstore.unity3d.com/jp/#!/content/14656
を組み込んで使用している。

 

オフスクリーンを使用しない場合、以下のような見た目になる。

f:id:pmot:20160301145206j:plain

 

縮尺1/4(ピクセル数1/16)のオフスクリーンを使用した場合。

f:id:pmot:20160301145401j:plain

 

ついでなので、バイリニア補間およびアンチエイリアスのON/OFFができるようにしてみた。それらをONにした場合。

f:id:pmot:20160301150954j:plain

 

●計測結果

オフスクリーンの縮尺や描画設定を変えてfpsを計測した結果は以下のとおり。

f:id:pmot:20160301203941p:plain

 

オフスクリーンを使用しない状態で、18fps程度。

f:id:pmot:20160301145728j:plain

 

縮尺1/4のオフスクリーンを使用した状態で、58fps程度。

f:id:pmot:20160301145744j:plain

縮尺1/8のオフスクリーンを使用し、バイリニア補間とアンチエイリアスを適用した状態で、58fps程度。

f:id:pmot:20160301145802j:plain

 

●結論

自分のAndroidタブレットだと、

  • オフスクリーンを用いることでfpsを改善できる。
  • 縮尺1/4(ピクセル数1/16)なら60fpsを維持できる。
  • バイリニア補間の適用の有無を変えても、とくにfpsの変化は見られなかった。
  • アンチエイリアスは、それなりに負荷があるようだ。

といえる。

 

●考察

  • 解像度を下げたことによる見た目の劣化は、自分としては、縮尺1/4(ピクセル数1/16)くらいまでは気にならない。
  • アンチエイリアスも併用するなら、縮尺1/8(ピクセル数1/64)でもいけそうだ。


●備考

・実験用のアプリをWeb用に出力したもの 

Unity Web Player | OffScreen

 

・実験用のアプリのUnityプロジェクト一式(「Advanced FPS Counter」は除く)

offscreen20160301.unitypackage - Google ドライブ

 

 

 

TextMeshPro

Unityで作るゲームで、ちょっとした飾りのついた数字や文字を表示したい。

けれど、フォトショップ等を使って、飾りのついた文字の画像を作ったり、修正したりするのは手間がかかる。 

TextMeshProというアセットを使えば、時間をかけずにUnityEditor上で飾り文字を作れそうなので、試してみる。 

https://www.assetstore.unity3d.com/jp/#!/content/17662

  

このアセットを用いてシーン内で文字を表示するには、あらかじめフォントから画像を生成しておく必要があるようだ。

 

フリーのフォントとして、以下のものを使用した。

M+ FONTSのmplus-2p-medium.ttf

https://osdn.jp/projects/mplus-fonts/releases/

 

使う文字を指定する場合は、リストが必要。

以下のサイトのSHIFTJIS_custom_win_bom_utf8.txtを改変して使用させていただく。

http://d.hatena.ne.jp/nakamura001/20120910/1347241168

ゲームであれば、難しい漢字は使わないだろう。画像のサイズを小さくする為に、半角カナ以降の漢字は削除した。

文字コードUTF-8でないとダメ。

 

Unityエディタのメニューから「Window」→「TextMesh Pro-Font Asset Creator」を選択する。ウィンドウの以下の項目を変更した。

 

・Font Source……フォントを指定

・Font Padding……詰め込みたいので5から1に変更(小さい値だと太いアウトラインをつけられなくなるようだ)

・Atlas Resolution……2048×2048に変更

・Character Set……Characters Font Fileに変更

・Character File……テキストファイルを指定

 

f:id:pmot:20160130133804p:plain

 

「Generate Font Atlas」ボタンを押下する。

処理の完了まで、数十秒かかる

「Save TextMeshPro Font Asset」ボタンを押下する。

元のフォントは削除しても問題ないようだ。

 

使い方

メニューから「GameObject」→「UI」→「TextMeshProText」を選択する。

uGUIのテキストの使い方と似ている。

文字の設定ごとにマテリアルの複製を作る必要がある。

元からあるマテリアルを変更すると、それを使っているテキストの全てに反映されてしまう。

 

以下の画像では、7種類のマテリアルを作成した(通常の文字用、細めの影付の文字用、「成功」用、「失敗」用、「スタート」用、スコア文字用、数値用)

 

f:id:pmot:20160130135439p:plain

 

備考:

アウトラインや影は、uGUIやNGUIより美しく表示される。UVアニメーションができる。拡大してもドットが殆ど目立たない。


手持ちのAndroidタブレットでも動作を確認できた。

7種類の文字を表示できるようにしたことによるapkファイルのサイズの増加は、約2Mb ( 20,860kb→ 23,055kb)

f:id:pmot:20160130142339j:plain

 

 

上野と秋葉原へ行く

自転車を漕いで、上野恩寵公園に行ってみた。桜の開花時期に行くのは初めて。
思っていた以上に人がいっぱい。
ついでに秋葉原に行ってみた。
秋月電子に行きたかったのだが見当たらない。(家に帰って地図で調べたところ、私が通りを1つ間違っていただけだった)
無くなってしまったと判断し、帰宅した。

自分で作ったキャラクターをMMDで動かしてみたい

休日出勤の代休取得で、しばらく休みが続いています。
創造の秋ということで、mikumikudanceで用いられているpmd形式のファイル作成にチャレンジ。
一連の手順の確認のする為、単純なxファイルを作成し、それを元に「pmdエディタ」というツールを用いて試行錯誤中。
とりあえず、ボーンウェイトを設定してダンスさせるところまではできたんだけど、
表情用のモーフの設定方法がよくわからない。
あーなんか、BF3の禁断症状が出てきちゃったし、もはやここまでか?


咲音メイコ.pmd」を参考にした自作モデル、自分で作っておいてなんだけどキモイ……

ドット落ち

数ヶ月前に購入した液晶ディスプレイでドット落ちドット抜け)が起きた。

画面中央のちょっと上よりに、常時、赤く光る点が……
目立ちすぎるw

ドット落ちは、職場にあるディスプレイでは、やたら見かけるし現象なので「仕方ない気にすんな諦めよう」と理解しつつも、布団かぶって泣きたくなる心境。

一応、製品保証書を確認してみる。
「液晶パネルは大変精度の高い技術で制作しておりますが、ごく稀に常時点灯する画素(輝点)や常時消灯する画素(黒点)がありますので予めご了承ください。」
とある。
更に保証書には、交換の条件も記載されていた。
購入日から3年以内に、輝点が3個以上、もしくは黒点が5個以上出現した場合は無料で交換してもらえるとのこと。
うーん、わりと良心的。
でも、現在は輝点が1つだから交換の条件に該当しない。

かつて秋葉原で購入した、小さな液晶ディスプレイ(パチンコ台の液晶?)で画面に黄色い筋が出るようになったことがあったのだが、液晶をネコパンチしていたら直ったことがあった。
ダメ元で、今回もそれをやってみることにした。

パチンコ台の液晶とは違い、液晶画面を直接叩くのは、どう考えてもヤバイ気がするので、ディスプレイのフレームの上部を、ドアを強くノックする程度の力加減で下方向に叩いてみた。

で、5回くらいノックすると直った。正直、こんなので直るとは思っていなかったので驚いた。
また再発するかもしれないけど、とりあえずよかった。

今回、ドット欠けが起きたディスプレイは、nVidia 3D vision対応しているということで購入した外国製品。
私は、これとは別に、三菱電機製のディスプレイを2つ使っているのだけれど、これらはドット欠けとか、その他の機械的な不具合も全然ない。スゴイ良いディスプレイだ。
(たまたま運が良かっただけかもしれないけど)
日本製品と外国製品だと品質が違うかなと思ってしまったりする。

SFマガジン

昼休み、Objective-Cについてわかりやすく書かれた本があれば欲しいなと思い、書店へ行く……が「SFマガジン」を買って戻る。
ついでに「日経ソフトウエア」を購入。
SFマガジン」を読むのは、私が小学生のとき以来だ。私の家に叔父が置いて行った本の中に含まれていた気がする。