3D キャラクターモデリング

オルタナティブガールズ

  • どの角度、距離で見ても「かわいい」を目指して開発
  • ゲーム中は 30fps、VR は 60fps を目標に設定
  • ターゲット端末で検証 → モデル1体当たり 1万8千ポリゴン、同時表示数2体 (最大3体) に決定
  • キャラクター描画1体当たり:アウトラインの描画を含めて3万5千ポリゴン、ドローコール30強
  • バトル中は8体表示 → Unity アセットの Cruncher で1万3千ポリゴンまで削減した LOD モデルを作成
  • 最大負荷:20万ポリゴン、ドローコール350程度
  • モバイルでは描画対象の解像度を下げると FPS は上がるため、GPU の描画面積 (フィルレート) がボトルネックになる傾向あり
  • 透過テクスチャを原則禁止 (GPU によっては負荷が非常に高く、またメモリ使用量が大きい)
  • Android 向けの OpenGLES 2.0 では透過圧縮テクスチャ (ETC2) が使用できない
  • テクスチャ解像度は実際にレンダリングしてパーツ毎に綺麗に見える限界サイズを決定
  • 離れていてもはっきり見えるように Mipmap はオフで描画
  • 眉などの透過テクスチャは PVRTC などの圧縮テクスチャより4分の1サイズの非圧縮の方が引き延ばされたときに色再現度が高い
  • 顔に用いるテクスチャは一切妥協しない
  • 圧縮テクスチャは高速でメモリ使用量も抑えられるが、圧縮ノイズで余計な色が混ざるため使用箇所に注意が必要
  • 顔に近いほど面積の大きなテクスチャを使用:基本テクスチャ (1024×1024 圧縮x4)、衣装透過 (64×64)、表情系パーツ (256×256)、瞳ハイライト (256×256圧縮)
  • 表情モーションはボーン制御と BlendShape を比較して検証:GPU 負荷は差がなく、CPU 負荷はボーン制御の方が高かったため、BlendShape による表情モーフを採用
  • 表情モーフ用オプションパーツを100種類ほど用意して多様なアニメ風表情を実現
  • キャラクター音声にランタイムで FFT を掛けて41種類の口パクモーションから最も適切なものを選択し、BlendTree によりアニメーションを切り替え
  • キャラクターの可愛さのためにアンチエイリアシングは必須:解像度x0.875、MSAAx4 を採用
  • 柔らかさを出すためにライティングと質感が重要
  • 表情をよく見せるために眉は最前面に描画
  • 顔がカメラを向いた時に明るさ補正をして表情を映えさせる
  • MatCap により低負荷で様々な質感をそれっぽく表現 (TextureImporter で CubeMap に変換)
  • 目周辺のレンダリング順:肌 → 白目 → 瞳・ハイライト → 眉・睫毛 (2パス) → 前髪 (2パス) → ステンシルをリセット
  • キャラクター自体を透過する場合はディザーパターンによるクリップ処理を使用
  • シェーダーの実装に if 文を使わずマクロで処理の切り替えを実現 (multi_compile):24個のシェーダーのみを生成し、EnableKeyword、DisableKeyword で切り替え (マテリアル設定時にエディター内で自動的に切り替え処理)
  • ブラーは一部の Android 端末で非常に高負荷なため多用に注意
  • 独自実装のポストエフェクト
    • ディフュージョン風フィルター:コントラストを上げてブラー結果と合成し、光があふれるような柔らかい見た目に
    • カラーコレクション:tex2D 1回のみで計算
    • なんちゃってDOF:ステンシルを用いて背景領域のみブラーを合成 (バストアップシーンで効果的)
  • OnRenderImage はモバイルでメモリ使用量に注意が必要 (メソッドを定義するだけで RenderTexture の複製が作られて、無駄な Blit + メモリ使用量2倍に) → CommandBuffer で解決 (ポストエフェクトを ComanndBuffer で実装してカメラに追加)
  • 揺れ物のコライダーはめり込み、精度不足、暴れを回避するために独自実装 → 球とカプセルのみで高速な当たり判定 (Physics によるコライダーはモーションと非同期に判定される?)
  • 同階層のボーン間にカプセルのコライダーを設置する機能 → 足のはみ出しを回避
  • 背景は基本的に動かない静的にレンダリングされるオブジェクトのみ:制限を4万ポリゴンまでに設定
  • 10万ポリゴンでも特に負荷にはならないがロード時間に影響が出るため中間を取って上限を控えめに設定
  • ライトマップはモデラ―で作成し、2k の RGB 圧縮テクスチャ1枚のみ
  • ライトマップのデコードは DecodeLightmapDoubleLDR の呼び出しのみで負荷は極小
  • 背景用エフェクトは環境マップとフォグを使用
  • 離れても程よく色が掛かるようにフォグは独自に実装
  • VR 向けに背景でビルボードを使用せずにメッシュで作りこむ

参考:

3D 美少女キャラクターをどこから見てもかわいく魅せる方法とは | CyberAgent

オルタナティブガールズ 50cm の距離感で 3D 美少女を最高にかわいく魅せる方法 | SlideShare

参考:

キャラの命!顔と髪編 – Maya 2016 で気軽にはじめるキャラクター制作 | AREA JAPAN

まぶた

参考:

瞼を完全な二重にしてみたかも | kamo夫のShadeな日々かも

表情モーフ

参考:

モーフィングで表情をつける | Metasequoia 使い方講座 (howto.clip-studio.com)

エルフ

参考:

凄腕キャラクターアーティストによる美女キャラ制作 エルフのメイキング | 3dtotal

Tips

参考:

技術的なツイートまとめ (@TAISA_3D) | Twitter

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です