Unity Asia Bootcamp Tour Tokyo レポート その1: 高速でカッコいいグラフィックスの作り方

http://unity3d.co.jp/asiabootcamp/

今週木、金曜日に都内で開催された「Unity Asia Bootcamp Tour Tokyo」のレポート記事です。
本記事から5回に分けて書く予定。実は仕事もあり前々日までは行くつもりなかったのですが、改めて当日のセッション内容見たり、知人の勧めなどもあり直前にチケット買っちゃいました。(チケット購入者には、後ほど講演の様子をビデオで確認できる権がついてくるので、それも決め手になりました。)

講演内容は難しいものが多かったですが、今後のUnity開発の助けになればと思います。

まずは初日、木曜日最初のセッション。Unityで高品質のグラフィックをモバイルでどのように実現したか。リッチなモバイルゲームを作るための手法についてのセッションです。

                                                  • -

10:00〜11:00
【キーノート】SHADOWGUN: making fast and shiny graphics / 高速でカッコいいグラフィックスの作り方 (同時通訳)

豊田 信夫 様(ユニティ・テクノロジーズ・ジャパン合同会社)
Petr Smilek 様(MADFINGER GAMES←開発元。チェコの会社みたいです。

  • -

■会社紹介

「MADFINGER GAMES」の代表作

  • SAMURAI、SAMURAI2

  • HACK AND SLASH?←このゲーム動画見当たんなかった。
  • SHADOWGUN→開発期間長め。


shadougunでは、楽しいシューティング体験を目指す。

(補足)SHADOWGUNはTPSで、最近、Unityのプロジェクトとして公開されてました。
→Unity:ShadowGunのサンプルレベル

  • 今は17名のチーム。2ライン
  • グラフィックに強みのある会社で、SFXを多用している。
  • エフェクトのレンダリングにはGPUパワーがいる→最適化が必要。
  • 大型プラットフォームと同等の見た目を「ごまかし」で実現する。
  • -

■WHY Unity?

  • 多くのプラットフォームをサポートしている。
    • MADFINGER GAMESの開発ラインは今はiOSAndroid向けだが、これからは他のプラットフォームも考えている。
  • エディタが軽量、柔軟。
  • 不必要なことはしなくていい。ゲームデザインに集中できる。
  • 全てのエンジンの機能をスクリプトで修正、拡張できる。
  • シンプルなアセットインポート。
    • max、mayaはいらない。←あったほうがいいけどね。
  • HotRoadもサポート?←これが全く意味がわかりませんでした。何のこと?
  • 素早い反復作業が可能。
  • アクティブコミュニティの存在。フォーラムが活発。
  • ミドルウェアプラグインの購入が容易。
  • -

■対象ハード

  • iOS(4、4S、iPad2などハイスペックターゲット)、Android
  • 各種解像度への対応、低スペックへの適応も考えた。
  • -

iPad2でのGPUの最適化

  • モバイルデバイスでのPCと同じグラフィックの実現
  • シェーダ、特にフラグメントシェーダがパフォーマンス的に重要。
    • 変数の精度が関わっている。柔らかい?ほど、処理速度が速い。←柔らかいってどういうこと?
  • レンダリング順序も重要だが、ほぼUnityにまかせた。
    • skybo(空)のレンダリング順序は普通一番最後だが…FPSの場合、手と銃を先に描画するなど試行錯誤しながら順序を決めた。
  • -

■ライティング

  • 静的ジオメトリにはライトマップ使用。
    • ライトマップの画像は圧縮していない。アーティファクトが出るため。
    • サイズも小さく。1024x1024
    • 動的オブジェクトには使えない。ダイナミックジオメトリには、ライトプローブを使用。
  • スペキュラライティングとライトマップの組合せ。
  • ライトマップに追加データを格納した。スペキュラ、ノーマルなど
    • 高負荷なのでハイエンドモバイルでなくては難しい。
    • Directionalライトのセットを選択し、キューブマップとしてベイク?←意味わからんけど、ライトマップにスペキュラが追加されたシーンは非常に綺麗でした。
    • スペキュラにライトマップを乗算して、明るくなり過ぎないように調整した。
  • 光沢マップも使用しているが…デフューズのアルファ値に格納すると、
    • メモリを食う!
    • PVRTC圧縮にアルファが入ることで、RGBも劣化してしまう。
    • 光沢マップはテクスチャから省いて、ランタイムで計算した。ディフューズのRGB値から光沢マップを計算して求める。
  • -

■キャラクターシャドウ

  • モバイルではシャドウマップは難しい。
    • 丸影(Unityのbrob shadow)を置く。
    • 骨盤と左右の足元あたりに球体を置いて、簡易モデルでの影生成を行う。
    • バーテックスシェーダーで、AO(アンビエント・オクルージョン)を計算する。
    • 上記手法により生成される影を、テッセレーションされたメッシュ(キャラの足元)に投射する。
  • -

■ボリュームエフェクト

  • 光の散乱現象=ライトシャフト(ゴッドレイ)、フォグ、グロウなど
    • ほとんどのモバイルでは高負荷
    • できるだけフラグメントシェーダはシンプルにする。
    • サンプルテクスチャをしない?←ちょっと意味がわからなかった。
  • 描画ピクセル数を制限する
    • サーフェースが画面に近づいて透明度が高まると、自動的にEFポリゴンが縮小されるような処理を入れる。
  • スクリーン上のゆがみ、ひずみ。
    • 普通ピクセルシェーダで行う処理を、バーテックスシェーダに処理をさせることで低不可になる。
    • どんなデバイスでも稼働する。
    • GPU、CPUどちらでも処理可能。
  • 作例1)CPUベース:水滴のシミュレーション。画面につく水滴
  • 作例2)GPUベース:画面のディストーション。ダメージによるゆがみ
                                            • -

…講演内容は以上になります。

ちょいちょい意味の分からない言葉はあったのですが、内容はなんとなく把握。
その後質疑応答とかも無かったので、どうせならもっとゆっくり話して欲しかったなあと思いました。

やはりリッチなグラフィック実現のためにはHD機同様にスペキュラ、光沢などの処理が必須となるわけで、その実装方法として計算で求める方法(アルファにマップを格納すると圧縮で汚くなってしまうので)をとったり、通常、ピクセルシェーダがポストプロセスで行うようなエフェクト処理を、画面サイズのメッシュを頂点処理して歪みとして見せたり、いかにいい意味で「ごまかす」かを実例交えて説明して頂きました。


次に参加した講演は、「Unity for Artists: An Introduction to the Tools / アーティストのためのUnity講座」です!