[製品] Anim To Sprite (A2S) について
Anim To Sprite という UnrealEngine5 用のコードプラグインの機能紹介です。
アップデートを繰り返してちょっと機能が多彩になってしまったのでプチまとめの意味も兼ねて。
主な機能
概要
ざっくり言うとモデル+アニメーションを元にして動くスプライトを作るためのものです。
初期に作られたデモなので少し絵が貧弱・・・しかし概要としてはこういうものです。
表現について
最終的なレンダリング結果ではなく中間パラメータを個別のテクスチャ―として出力することで、ライティングの影響を受ける立体的なスプライトの表示を可能としています。
下の画像が分かりやすいかと思います。
いわゆる HD-2D 的な表現においてはドット絵のテイストを生かすためか概ね「平たい板にライティングを施した」見た目のキャラクターが用いられることが多いですが、それとは趣を異にします。
マテリアルによってはToon調の表現にもなります。
次は中間くらいの例です(敵を含めたキャラクターがこのプラグインによるものです)。
こちらは普通にライティングを適用する(Lit)マテリアルですが、立体感を抑えアウトラインを追加しています。
ソケットの取り扱い
SkeletalMesh に設定されたソケットの位置を保存できます。
エフェクトやメッシュ、別のスプライト等をアタッチするときに使えます。
Paper2D サポート
オプションにより Paper2D アセットの出力をサポートしています。
Normal等の追加テクスチャ / ワールド上のサイズ / ピボット / ソケット / (フリップブックの)フレームレート など、可能な範囲でカバーしています。
A2S そのものは Windows のみをターゲットとしていますが(他でもビルドすれば動く気がしますが手元で確認できないので)、Paper2D は全プラットフォームがサポートされているという点でもこちらを用いるメリットがあります。
アクションゲームのように複雑なアニメーション制御を要する場合には PaperZD(名前が少し紛らわしいですが "Z"D です)というプラグインが便利です。
AnimSequence のようにイベントキーを仕込んだり AnimBP 的なこともできたりします。
この高性能なやつが何故か無料。Epic の計らいでしょうか。
こちらだけでも覚えておくことをおすすめします。
ちょっとコソコソ話
ここまでは機能の直接的な説明ですが、使い方に感関して少し補足をします。
最適化(インポスター)
遠くのキャラクターを少ないポリゴンで表示する(LOD)機能は当たり前に使用されますが、それで事足りない際にはスプライト化する場合があります(インポスターとか呼ばれます)。
Specular, Roughness, Metallic マップを再現したスプライトを用いることで、元の外見をある程度保ちながら処理負荷を減らすことができます。
なお、解像度を3倍にするとこんな感じ
ライティングの影響も概ね元のモデルと似た感じになることが見て取れるかと思います。
ただ、スプライトはスプライトなので滑らかに回転させたりできるわけではないし、この解像度ではテクスチャ使用量が問題になります。
最適化のために用いる場合は低解像度にて、カメラから遠いときにのみ差し替えるような仕組みが必要になります。
ドット絵生成について
「3Dモデルとアニメーションをわざわざ作成してそこからドット絵を作るの?」という疑問はもっともです。
これに対する回答のうちクリーンなものとして、
・ドット絵にする際にディテールが省かれるため、モデルやアニメーションは簡素なものでも問題になりにくい
・3Dならではのパラメトリックな調整の恩恵を受けられる
ということがあります。
効率的にアセットを作成できる可能性があるということですね。
以下の記事では "Dead Cells" で使用されたモデルの一部を見ることができる他、ワークフロー自体についても幾分かの説明がされています。
ドット絵を使うゲームであっても一旦3Dアセットを作成するのは選択肢の一つかと思います。
しかしもう少し分かりやすい話もあって、
「そこにマーケットプレイスがあるじゃろ?」
解像度の制約があるという性質上、ディテールの少ないローポリモデルと相性が良いと言えるでしょう。
しかもそれらは高精細なものに対して比較的安価な傾向があります。
運用のことを考えると最終手段に近いですが、テクスチャーをエクスポートしレタッチすることもできます。
細かい部分については省きましたが、Anim To Sprite はこういう感じのものです。
いらないって人も PaperZD のことだけは覚えておくことをお勧めします。
あれは良いものだ。