サイバーエージェントが今年5月にUnityの軽量デカールシステム「AirSticker」オープンソースソフトウェアとして公開した。今回は開発者のUnityエンジニア・清原隆行氏にインタビューすることができたので、開発の経緯とともにデカールシステム「AirSticker」の特長を紹介していきたい。

記事の目次

    開発は業務の隙間時間に。Unity実装のURPデカールのデメリットを補う「AirSticker」

    サイバーエージェントが開発した軽量デカールシステム「AirSticker」は、オープンソースとして開発されたUnity用のデカールシステムで、GitHubを通じて誰でも利用することができる。デカールシステムとは、Unity内に配置されたオブジェクトに対して任意の位置にテクスチャを貼り付ける機能で、FPSゲームであれば銃の弾痕を壁に付けたり、レースゲームであればタイヤ痕をコースに表示するような場合によく使用される。

    「AirSticker」

    github.com/CyberAgentGameEntertainment/AirSticker

    デカールシステムはUnityの標準機能として搭載されているが、AirStickerはメッシュ貼り付けによるデカール表現方法を採用しているため処理負荷が低く、幅広い利用が期待される。

    今回はこのAirStickerを開発したサイバーエージェントのUnityエンジニア・清原隆行氏に話を聞いた。

    清原隆行氏/Unityエンジニア
    株式会社サイバーエージェント
    www.cyberagent.co.jp

    AirStickerの開発は、ゲームアバターを作成するときに使用するボディペインティングのようなキャラクターメイクシステムを開発したいという社内からの要望があり、そこからスタートしたという。

    「デカールの技術は昔からよく使用されているものなので、アルゴリズムも完成されていて解説資料も多くあります。ただ、日本国内ではあまり情報がないようでした」と清原氏。

    「デカールシステムはUnityにも搭載されています。ただ、Unityのデカールシステムは投影型デカールという手法が採られていて、高い柔軟性をもつ優れたデカールシステムなのですが、少し処理が重く、広いユーザーをターゲットにしたゲームだとユーザーの端末のスペックが低い場合もあるため、我々が必要とするデカールシステムとしては少し不向きな部分もありました。また、キャラクターがアニメーションすると投影型ではデカールの位置がズレてしまったりと、利用が難しい場面もあります」

    「一方で、今回開発したAirStickerはデカールを投影するのではなく、テクスチャを貼り込みたい位置に低スパイクな処理でメッシュを生成して、そこにテクスチャをベイクすることで、キャラクターが動いてもデカールが追従するようになっています」と清原氏。

    開発は昨年11月からスタートし、業務の隙間時間を利用して続けてきたという。開発スタッフは清原氏ひとりで、コードレビューアーとして数名が協力してくれたという。「かなりの数のコードフィードバックを受けながらの開発だったので、実感としてはひとりではなく数人で開発を進めてきた感じです」と清原氏は言う。

    © Unity Technologies Japan/UC

    AirStickerはオープンソースソフトウェア(OSS)として、公開されている。ゲーム開発会社が自社で開発したツールをOSSとして公開するというのは、あまりないように思うが、OSSとして開発するに至った経緯はどのようなものだったのだろうか。

    「最初は検証のためのツール開発として考えていていました。しかし調査したところ、同じようなデカールシステムがフリーで公開されているものもありましたが、最新のUnityに対応していなかったり、処理が効率化されていないものが多かったので、だったら自分たちのツールを公開しようと。弊社のSGEコア技術本部(以下、コアテク)では、OSSなどで業界に貢献するというコンセプトもあり、多くの人に技術をオープンにしてフィードバックを得ることが推奨されています。公開することで、弊社の技術ブランディングを獲得するという側面もあります。なので、技術発信をしているスタッフも多く、OSSとして配布することに異論を唱える人はいなかったですね」と清原氏は言う。

    それでは、以下にAirStickerの特長を紹介していきたい。

    <1>デカールがスキンアニメーションに追従可能

    AirStickerの特長として、まずあげられるのが、デカールのアニメーション追従だ。UnityにURP(Univesal Render Pipeline)で実装されている投影型のスクリーンスペースデカールでは、キャラクターが移動するとデカールの位置がずれてしまうが、AirStickerでは、デカールの貼り付け位置にオブジェクトに追従するシンプルなメッシュを生成して、テクスチャをベイクするため、キャラクターが動いてもデカールの位置がずれないで描画される。

    そのためアニメーションが必要なキャラクターでも、衣装のデカールやメイクの変化をデカールの位置を固定した状態で描画が可能になっている。また、スクリーンスペースデカールでは、オブジェクトの変形にデカールの形状を追従させることは難しいが、AirStickerではデカール用に生成したメッシュもオブジェクトの頂点ウェイトが同じように設定できるため、オブジェクトの変形に合わせたデカールの変形が可能になっている。

    URPデカールとAirSticker、それぞれの例。AirStickerはデカールがキャラクターの衣装に追従していることがわかる

    <2>URPデカールとAirStickerの使い分け

    URPでUnityに実装されているデカールシステムとAirStickerは、それぞれに利点があるため、状況に応じて使い分けるのが良いのでは、と清原氏は言う。

    例えば、デカールの位置自体が動くような場合は、AirStickerだとデカール用のメッシュをフレームごとに再生成しないといけないため、処理に時間がかかってしまう。そのためデカールが動いているときはURPデカールを使用し、デカールの位置が固定されたらAirStickerに切り替えるというのが効率の良い使い方だという。

    また、Terrainを使って作成した地形にデカールを貼るような場合も、URPデカールを使った方が処理効率は良いとのこと。Terrainはテッセレーションの機能を使用してGPUでポリゴンを生成している。AirStickerはすでに生成されているメッシュを利用して、デカール用のメッシュを分割するという手法を採っているので、GPUで連続的にメッシュが生成されてしまうと、AirStickerでのメッシュ生成が難しくなってしまうためだ。

    <3>デカールメッシュのワンスキン

    AirStickerはデカールの位置ごとにメッシュを生成していくが、最終的に必要最低限のメッシュにまとめられる。そのため、描画処理の呼び出しが最小限ですむので、ドローコールの回数が減って効率良く、高速にデカールを描画することができる。

    ワンスキンメッシュ生成の様子

    <4>既存のシェーダを利用可能

    AirStickerはデカール用のメッシュを生成してベイクする手法を採っているため、デカールを描画するための専用シェーダを作成する必要がなく、ビルトインシェーダや過去につくられたカスタムシェーダをそのまま流用することができる。そのためアニメ調のシェーダに対応したり、影をデカールで描画するといったことが簡単にできる。

    • URPのLitシェーダ
    • セルアニメ風シェーダ

    AirSticker開発を通して感じたOSS化の意義とこれから

    清原氏によれば、公開後の反応も良く、特にデカールがアニメーションに追従できるという点は非常に評価されているという。

    「AirStickerの開発を通して、OSSの活動は非常に有意義なものだと思いました。現状のAirStickerはまだメッシュの生成が遅いので、もう少しGPUを活用したメッシュ生成を強化して高速化していきたいと思っています。また、エフェクトの再生もデモレベルでは用意しているのですが、汎用的に使用できるかというとそこまでではないので、もう少し改良できればと思っています。今後についてはOSSとして開発するようなツールは決まっていませんが、コアテクで進めている、スタイライズ表現の基盤となるようなプラットフォームを開発しながら、そこから部分的にOSSを公開していければ良いなと思っています」と清原氏。

    AirStickerは、これまでURPのデカールシステムとは異なるメッシュ生成型のデカールシステムなので、多くのゲーム開発者にとって非常にありがたいシステムのではないだろうか。清原氏が言うように、コンシューマーゲーム開発のみならず、インディゲームやVR Chatのキャラクター制作にも応用できるだろう。

    AirStickerはMITライセンスで公開されているためクレジット表記さえすれば、誰でも使用することができる。ぜひ多くのクリエイターに使ってほしい。

    TEXT_大河原浩一 / Hirokazu Okawara
    EDIT_海老原朱里 / Akari Ebihara(CGWORLD)、山田桃子 / Momoko Yamada