【レポート】「GREE Tech Talk #07」に行ってきました。

  • |
【レポート】「GREE Tech Talk #07」に行ってきました。
   

3月25日に行われた「GREE Tech Talk #07」に行ってきました。
今回はそのレポートをブログに書いていきたいと思います。
GREE Tech Talk #07

Live2Dの描画の裏側の話 – 阿曽 直貴(Live2D)

Live2D


  • Live2D for Unity
  • ネイテイブプラグイン 高速化
  • スクリプトから高速にメッシュを描画する

Live2D

イラストをそのまま動かす技術。
スマホアプリ以外にも、映像制作・アートなど色々な用途で利用をされている。
2015-3-28-fdsfssaf

3Dとの違い

  • 描画は早いが、メモリ消費量が多め
  • 頂点の形状変化が常にある
  • 半透明の合成が必要
  • メッシュを利用してのリアルタイムマッピング
  • テクスチャ(元画像)のクオリティが必要
2015-3-28-fdsssa

ネイテイブプラグインによる高速化

Unity3.5時代の話。
ネイテイブプラグインを使えば、過去の遺産を使うことができる。
デバックがしづらい。
情報がないなかで作ったが、高速で動くようになったが、メンテナンスが大変でUnityの進化についていけなかった。

スクリプトから高速にメッシュを描画する

Graphics.DrawMeshが使えそう。 -> 非推奨
Graphics.DrawMesh – Scripting API:

なので、Graphics.DrawMeshNowを使うことに。
Graphics.DrawMeshNow – Scripting API:

これをOnPostRender()で呼ぶ。
public Mesh mesh;
    public Material mat;
    public void OnPostRender() {
        // set first shader pass of the material
        mat.SetPass(0);
        // draw mesh at the origin
        Graphics.DrawMeshNow(mesh, Vector3.zero, Quaternion.identity); }


Live2Dのモデルを表示することができたが、ドローコールが多かった。(パーツが多いため)。
2015-3-28-fdsfssaf

スクリプトから動かす場合は、自分で画像をまとめないといけない。複数のメッシュをまとめることができす。
そこでMesh.CombineMeshesを利用。
Mesh.CombineMeshes – Scripting API:


パフォーマンスのためにTips

テクスチャアトラス(Unityのため)に対応をする予定。
ガベージコレクションの最適化
メッシュの頂点配列をキャッシュしておくことで、メモリーの消費を抑える。
Array.Reverseが遅い。
プロファイラーに頼らない
2015-3-28-fdsas


Live2Dの今後

360度対応のモノを開発中みたいです。
2015-3-28-fdsas

開発スピードとパフォーマンスの両立 – 稲森 亮介(Gree)

現在、Unityでカジュアルゲームを作成している。
2名体制。
2015-3-26-kfkkoko.JPG

FrameRate(フレームレート)
基本60FPSで、最低でも30FPSを出したい。
2015-3-26-kkkoko.JPG

パフォーマンスの基本

Object.Instantiate()を減らす。
newをできるだけ使わずにガベージコレクションを減らす。
2015-3-26-kfkkofko.JPG


雲で躓く

基本半透明。
最初はoverdrawが多すぎて処理が重たかった。パーティクルシステムで実装していた。

パーティクルのスプライトを大きくして、ドローコール減らす。
遠い部分に関してはスプライトを利用する。

地表が一緒に映っている場合はさらに工夫が必要。
雲のスプライトにグラデーションをかけて揺らした。
2015-3-26-kfkfkoko.JPG.JPG

Lightning

AssetStoreを活用。
Fogを使って夜っぽい感じを表現。
ライトマップテクスチャの解像度を下げる。1024px -> 512px -> 256px。
敵キャラクターは頂点ライディングのみ。
Light Probesは使わない。

Script

cachedTransform > Transform > GetComponent(Transform)
GetComponent(Transform) > Find > Raycase
FindObjectsOfType()は重い。


ドローコール – 大前 広樹(Unity)

パフォーマンスとは「CPU」「GPU」の使用量を改善すること。

ドローコールとは

描画処理のCPU側の処理。
OpenGLだとglDrawElementが該当。

Unity5での最適化

SetPathCallに気を配る。
2014-3-28-fdsfa

GPU

XcodeのInstrumentsGPU Profilerを使って調べる。
原因として、TilerよりRendererの方が多い。
2014-3-28-fdsfafff

GPU Profiler


2015-3-28-dasasadas

結論

2014-3-28-fdsa

おまけ

2015-3-28-ddasasadas


最後に

Unity以外にも使える知識や考え方を勉強出来ました。
CPUやGPUに関しては、余りわかっていない部分だったので、一体どういったことをしているのかなどがよくわかりました。
とは言え、わからないことが多かったので、今回のセミナーの内容を復習して、実践して利用できるようにしたいです。


エンジニアのためのUnity実践リファレンス ~ ゲーム開発にすぐに役立つスクリプト入門エンジニアのためのUnity実践リファレンス ~ ゲーム開発にすぐに役立つスクリプト入門
赤坂 玲音

技術評論社 2015-04-10
売り上げランキング : 118735

Amazonで詳しく見る

Related Posts Plugin for WordPress, Blogger...