2012/02/23「3DCGツールとUnityによるゲーム開発実践セミナー」レポート その3:セガ開発事例

もうセミナーから1ヶ月ほどたってしまいましたが、なんとか、最後の記事が書けそうです。
第3部は、セガでの事例。

Autodesk Areaのmayaコラムも連載されている、セガの築島様の講演です。
読んで触ってよくわかる!Mayaを使いこなす為のAtoZ


※参考記事。こっちのほうがわかりやすいかも。


■UnityでiPhone向けゲームを作る!

  • iPhone4で3D・・・特徴、最適化の方法
    • maya2012+Unity3.5 → iPhone4
      • iPhone4で25〜45fps出るゲーム
      • iPhone4SiPad2では45〜60fps
    • トーンマップ、ブルームなどのエフェクトも入れる。
  • シーン管理
  • ゲームエンジンとコンテンツ工学

トーンマッピング参考
ブルーム参考


■サンプルゲーム

FPS。maya→iPhone4用に最適化してある。

  • カメラに近い腕、ウクレレ(武器)には法線マップ。
  • ライトはUnityのライトマップ焼きこみ。非常に綺麗。
    • ライトマップは、リアルタイムに切り替えている。ライトプルーブ使用。
  • フォグ、水が流れるなどの表現
  • 地面のモデルをそのままコリジョンとして使用。

ライトマップ参考
ライトプルーブはこのセミナーの第1回記事で触れてます。
武器がウクレレとかどんなゲームだよと思いますが(セガらしい)・・・画面写真ないとよくわかんないですね。

最適化は、Unityのマニュアルに書いてあることが正しい。

  • ただし具体例が少ない。
  • iPhone3Gあたりをベースにしてる風なので、今となってはスペックが低い機種向けの最適化方法かも。


■iPhone4の特徴

  • テクスチャが大きく使える!
  • Unityのライトマップが有効。綺麗!
    • サンプルゲームのシーンだと、1024×1024を5枚使用。
  • むしろ、頂点カラーが使えない。
    • Unityにシェーダが無い。
  • レイヤー化されたテクスチャよりも、大きな1枚のテクスチャが有効。
    • 同様にタイリングよりも、ベタッと貼るのが有効。(サンプルの地面では2048×2048)
    • ライトが焼きこまれたカラーテクスチャ1枚が最高!!
  • UnityのAnisoLevelを上げてもコストが無い。
    • 異方性フィルタリングの値?みたいですが。
  • 頂点法線もいじらないほうがいい。
  • ミップマップの設定項目が無い。
    • 代わりに、前述のAnisoLevelを6くらいに上げてもOK。
    • ライトマップの数値はデフォルトで3とか。

参考:異方性フィルタリング
参考:ミップマップ
全て重要な情報!
AnisoLevelとか、どんな変化が出るのかよくわかってないですが
(たぶんテクスチャのフィルタリングのかかり具合だと思うのだけど)
実際数値入れて試してみないといけませんね。

Retinaディスプレイは、高解像度のためアンチかけなくても綺麗。
RetinaはiPhone4以降採用されているディスプレイ方式。新しいiPadでも)

  • Unityのエディタでくっきりと見えるテクスチャは、むしろサイズが大きいかも。
    • →1段階大きさを下げたほうがいい。


■最適化で注目する点

  • DrawCall数・・・少ないほどいい!
                                  • -

200以上→15fps
100→30fps
50→60fps

                                  • -
    • マテリアルの数を少なく!→Unityのstutsで情報見れる。
    • テクスチャの数も少なく!→流用を増やす。
      • ライトマップを使えば、そんなに気にならない。
    • アトラス(テクスチャをまとめる!)

DrawCall数は描画の回数だと思うのですが、これは減らせば単純に軽くなります。
テクスチャまとめることアトラスって呼ぶのね。まあマップだしね。

  • Batch数
    • Unityで自動的にまとめられたオブジェクトの数
      • 動かないものはStaticにしておくと、まとめられる。
    • 実行時に、ConvinedMeshとして数を確認できる。
      • Batch数が多ければ、よくまとまっている良いデータ。→DrawCallが減る!
      • 逆に多すぎても重くなる。→50以下がよい。数100とかは多すぎる。

Unityのマニュアルにも、「In Summary, Convine!」(とにかくまとめろ!)と書いてあるそうですww

  • サンプルデータでは…
    • 1500〜4000ポリくらいの単位でまとめている?
    • まとめたら早くなった。
      • DrawCallが減る。Batchも減る。
    • ただしデザイナーが管理しやすいように、全部まとめる必要はない。
    • 従来通り、mayaでレイアウトした。
      • Unityでプレハブ化して配置するのは、iPhone向けではないかも?

Unityのプレハブについてはこちら。


■頂点数

  • ポリゴン数よりも、頂点数が重要
  • 50000頂点くらいで(これはマップ単体の話だと思う。)
  • 法線も少なく。ソフトエッジが有効。
  • UV頂点もなるべくくっつける。
  • ライトマップを焼き付けた後は、法線を捨てればよい。
    • Normalize〜のチェックを「None」にする。

このへんは、僕が今別件でやってる携帯機のスペックとほぼ同等ですね。ポリゴン数よりも頂点数。
UVも法線も切れ目があるとそこで頂点が増えてしまうので、それを避けるデータ作りが必要。


■何が重いのか?

  • リアルタイムライティング
    • ライトマップを焼き付けたほうがいい。
    • 描画面積が小さければ、リアルタイムでも有効。画面近くに来ないように。
  • (おそらく同一マテリアルに)3枚以上のテクスチャを貼ると重い。
    • カラー、法線、スペキュラーのセットですでに重い。
      • スペキュラはカラーマップのアルファ値に入れるとかで解決できる。
  • フォグは?
    • そうでもないが、カリングは必要。
  • 半透明は(相変わらず)危険!
    • フィルレートが低い。
    • 面積や重ね合わせを小さくすると、結構行ける。大きくなければ。
  • パンチスルー(CutOut)は重い!

カリングについて。最近は、遮蔽を自動的に検出するOcclusion Cullingなんて手法もありますが、基本は手動設定です。
→フィルレート参考記事:ピクセルフィルレート


■早くする方法!!

  • まずはカリング!!
    • マップは壁とかで遮って、遠くを見えなくする工夫を。
  • スキニングオブジェクトを少なく。
    • ジョイント数も少なく。
    • 親子関係よりは、スキニングの方が良い。
    • (mayaでいうと)1skinCluster、1マテリアルがベスト!
  • ライトマップを使えば、ローポリゴンでも綺麗にAO(アンビエント・オクルージョン)が入る。
    • ライトマップならライトたくさんおける。
    • マップは50000頂点くらいで作成している。
    • コリジョン抜けはしないので、地面のポリとかは思い切って減らしてもOK。
    • UnityのSkyBoxは綺麗なので使いたいのだけど、モバイルだと問題がありそう。
      • Tex圧縮が汚い。←これがSkyBoxにかかるのか、いまいちあやふや。
      • DrawCall6使う(立方体)←これも、いまいちよくわかんないです。
    • 従来通りの球をつかう方法で。
      • ファークリップが問題になる。
      • カメラを複数用意して、キャラ用、メイン、スカイ用、とクリップの値を分ける。
  • ソートの問題
    • 木とか、半透明のものは、描画順がおかしくない程度にまとめる。
    • 確か半透明オブジェクトは、Static入れてもまとまらない。

アンビエント・オクルージョン参考
→ファークリップは遠くのオブジェクトを描画しない。逆に手前のオブジェクトを消すのはニアクリップです。

スキニングの件も、携帯機でよく直面する問題です。
スキン数やマテリアル数はパフォーマンスに直結するので、なるべく少なく。
なんならメカものも関節構造ではなく、スキンで処理しちゃいます。


■まとめ

  • iPhone4なら、3Dはそのまま結構出る。
  • ただし、ちょっとしたことで重くなる
  • 最適化は、常識的な範囲内でOK!
    • テクスチャを大きく出来る利点がある!!
  • どんどん作って、出してみればいい。


■シーン管理

  • あまりバラけさせないほうが良い
    • 関連するものどうしを近くに置くとか。
    • 関連性がわかりづらくならないように。
  • モデルのそばに、関連するMaterials、Texturesフォルダを置く。
                    • -

例)
Models
 -Stages
  -s01
   -fbx
   -Materials
   -Textures

                    • -


■エディター・エンジンとは?

  • 効率アップに重要なこと
    • 繰り返し試せる
    • 作業中と結果が同じ
    • 似た作業が同じように出来る
  • 重要なのは、コンテンツ工学・・・日本では、これが抜けている!!
    • 職人技を一般化する。
    • 感ではなく、数値化する。客観的に分析。
    • 学びやすい、体系的な情報に。
  • おすすめ書籍

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

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

  • 海外との差が叫ばれて久しいが…
    • 技術的な部分はUnityなどのエンジンで吸収できる。
    • 日本の開発者が得意なことをやる!感覚的なもの、手触り!

…と、講演の内容は以上です。

築島様は語り口調も面白く、なおかつ技術的にも有用な情報が聞けて、実のある講演だったなと。携帯機にはどれも似たような苦労があるんだな…と思ったり。

最後に紹介されている書籍はぜひ読んでみたい。多分、公演直後のAmazonでは品薄になってたと思いますww

                                          • -

これで、全3部のセミナーレポートは終了。今後読み返して、修正。加筆することはあるかもしれませんが。また、実際にUnityで自分で試して得た情報も、随時アップしようかと思います。

ではでは。