「UnityでiPhone向け3Dゲームを作る」レポート

本日「3DCGツールとUnityによるゲーム開発実践セミナー」に参加してきました。
そこで講演されたセガさんのUnityを使ったiPhoneアプリのグラフィックの最適化の話が、大変濃かったのでレポートします。

2012 / 02 / 24 07:40 追記
Game Watchさんにレポートが上がりました。写真が豊富でわかりやすいです!
http://game.watch.impress.co.jp/docs/news/20120223_514183.html

講師

  • 株式会社SEGA
    • チーフデザイナー
    • 築島智之

概要

  • セガさんで走っている、Unityを使ったiPhoneアプリのプロジェクトから出てきた、グラフィック最適化のノウハウの総括

レジュメ

  • iPhone4で3Dを快適に動かす方法
    • iPhone4の特徴
    • 最適化の方法
  • シーンの管理方法
  • ゲームエンジンとコンテンツ工学

環境

  • Maya 2012
  • Unity3.5
  • iPhone4(4Sではない)
    • 4で30fpsを保てれば、4S・iPad2では60fps出るくらいの感覚

はじめに

  • Unityのマニュアルに書いてある事は正しい
    • ただし具体例がちょっと少ない
    • マニュアル自体、iPhone3をベースに書かれているので少し古い

iPhone4の特徴

大きなサイズのテクスチャが使える!沢山?
  • ライトマップが普通に使える
  • むしろ頂点カラーに焼くのが駄目
    • 頂点カラーのシェーダ自体が無い
    • しかも作っても遅かった
  • レイヤーテクスチャよりも1枚のテクスチャ
    • ライティングが焼かれた1枚のテクスチャはモアベター
    • 小さいテクスチャサイズを3枚用意してタイリングする手法は遅くなる
    • タイリングした結果を、2048x2048くらいの1枚のテクスチャにレンダリングして貼った方が圧倒的に軽い
  • テクスチャ設定のAniso Level(異方性フィルタ)を上げても、ほとんどコストがかからない
    • そもそもMipmapの設定が無いのでAniso Levelで調整
    • ライトマップを焼くと、デフォルトで「3」が入る。
    • 「6」くらいにしてもほとんど描画コストが変わらない
Retinaディスプレイ
  • アンチエイリアシングしなくても綺麗
    • ほとんどドットがわからない
  • Unity上でちょっとボケたテクスチャでも、iPhone4上では綺麗に見えるレベル
    • 逆に言うと、Unity上で綺麗に見えているテクスチャは豪華すぎる可能性もある

最適化

  • 注意すべきはDraw Call数
    • マテリアル数を少なくする
    • テクスチャ数を少なくする
    • アトラス
      • テクスチャをまとめる
  • どのくらい重い?
    • Draw Call : 200以上
    • Draw Call : 100以上
    • Draw Call : 50あたり
  • Batch数
    • Unityが自動でオブジェクトをまとめた数
      • オブジェクトにある「Static」にチェックボックスをONにしておくと、Unity側でまとめてくれる
      • マニュアルでは「チェックボックスを入れないでください」と書いているが、「アニメーションの再生がされません」という意味で、ニュアンスが違う
    • 多ければよくまとまって、Draw Callが減るが、多すぎると処理が重くなる
  • メッシュの確認方法
    • Unity上でオブジェクトメッシュを選択すると、オブジェクト毎の形状がサムネイル(右下)で見れる
    • ゲームを再生した状態で同じ項目を見ると「Combined Mesh」となり、実際にまとめられたオブジェクトが確認できる
  • 「In Summary Combine, Combine, Combine…」
    • マニュアルの中で太字で書かれている一文
    • ハイエンド向けのTipsとして書かれているが、まとめればまとめるだけiPhone4上でも速くなる
      • Draw Callが減る
  • ただし、アーティストが管理しにくくなってしまうと問題
    • 従来通りMayaでレイアウトする方が良いかも
  • 頂点数
    • マニュアル通り、50000頂点くらいが望ましい
    • "Tris(ポリゴン)"ではなく、"Verts(頂点数)"が重要
    • Hard Edgeを使うと、ポリゴンが分けられ、頂点数が増えてしまう
    • Normal Mapを利用するモデルならば法線の情報が焼かれているので、全てソフトエッジにした方が良い
  • またライトマップを焼き付けた後のポリゴンメッシュは”Normal”のパラメータを"None"にして法線を破棄すると、少しパフォーマンスが上がる
何が処理を重くするのか?
  • リアルタイムライティング
    • 描画面積が小さければ問題ない
  • 多くのテクスチャを参照している
    • 3枚以上は重い
    • レイヤーテクスチャより、むしろ大きい1枚テクスチャ
    • カラー・スペキュラなどを分けて使うとパフォーマンスが下がる
      • Unityの標準のテクスチャでは、カラーのα成分にスペキュラが入っている
    • 極力枚数を減らす
  • フォグは重くなる?
    • 使っても問題ない
    • iPhone3時代の話?iPhone4では問題にならない
    • それよりも、無いと絵作りが破綻する
      • またフォグを利用しつつ、距離でカリングをする事も重要
  • フィルレートが低い
    • フィルレートが高かったハードには出会った事ないが・・・。
    • 半透明は相変わらず危険!
    • 面積がそれほど大きくなければ、エフェクトは結構出る
    • パンチスルー(cut out シェーダー)が重い
    • アルファテスト苦手
処理を速くするための対処
  • まずはカリング
    • 表示しないのが一番
    • カメラの視錐体でカリング
    • 3.5から入ったLODも使える
    • 距離に応じてカリングする処理をスクリプトで実装
    • ゲームデザインでの工夫
      • 一直線で遠方まで見渡せる地形を極力避ける
      • 壁を設け、視線を遮る
  • スキニングオブジェクトを少なく
    • ジョイント数も少なく
    • ただし、動く親子構造のメッシュより、スキニングのメッシュが良い事もある
    • 例:クレーンなどの機械的なオブジェクトで、土台・アーム1・アーム2・爪本体・爪(右)・爪(左)などを分けてアニメーションさせると、Draw Callが「6」かかる
    • Draw Call 100以下を目指す時に「6」取られるのは危険。10個配置すると「60
    • そういう場合はスキニングして1メッシュ化する方が高速。Draw Callが「1
  • 1Skin Cluster, 1マテリアルが理想
    • コンバイン、コンバイン、コンバイン
  • ライトマップは低ポリゴンに都合が良い
    • 地形(Terrain)に家などをブッ刺しても、ライトマップは良い感じに焼けてくれる
      • 頂点カラーに焼く場合は、頂点の流れを考慮しないと行けなかったが
    • 大きなテクスチャが使える事と相性が良い
  • Unity標準のスカイボックスに問題がある
    • テクスチャの圧縮が汚い
    • 立方体でレンダリングするのでDraw Call が「」かかる
    • 従来ながらの半球(全球)が効率が良い
      • Far Clip問題
      • 半球用のカメラを用意し、半球を写しておけば、Far Clipで消え無いようにできる
  • 出来るだけまとめる
    • 配置されている同一オブジェクトは出来る限りまとめる
      • 同じテクスチャ・マテリアルを使っているもの
    • 半透明を使っているオブジェクトは、ソートで問題が出る場合がある
      • ソートはオブジェクトのセンターから行われる
      • プレイヤーが見ない方向に留意しセンター位置を編集
      • 360度見る可能性があればまとめないのも手
iPhone4を大まかにまとめる
  • iPhone4以降のモデルなら、ひとまず3Dモデルを表示してしまう
  • 最適化は常識的な範囲で行えば十分!
    • テクスチャを大きくできる点を活かす

ドンドン出してみれば良いのだ

シーンの管理

エディター・エンジンとは何なのか?

  • 効率アップには絶対に重要な事
    • 繰り返し試せる
    • 作業中と最終結果の見た目が同じであればあるほど良い
    • 似た作業は同じ様に出来る
  • これらの事はコンテンツ工学で決まっている
コンテンツ工学の現状


  • 日本の開発には、コンテンツ工学の部分が抜けている
    • なんとなくツールを使ってそれなりのデータを作成は出来るが、効率的ではない

コンテンツ工学

    • 職人技を一般化。誰でも出来るように
      • 勘に頼る部分を数値化
      • 実際にどういうテクノロジーなのか、どういう手順なのか調べる
      • 客観的な分析
      • 学びやすいように体系的な情報にする
    • これらを工学面でまとめ、コンテンツに応用したもの
  • ゲームに置けるアーティストやプログラマの行っている作業をどうしたら効率が良くなるかを考えて、考えて、考えたものがゲームエンジン

おすすめ書籍

  • 映像コンテンツの作り方:コンテンツ工学の基礎

映像コンテンツの作り方―コンテンツ工学の基礎

映像コンテンツの作り方―コンテンツ工学の基礎

餅は餅屋で

  • Unityには様々なミドルウェアが内包されている
  • 専門部分は専門家に任せて、日本人には日本人の得意分野で戦えば、まだまだいけるはず

以上。