リアルタイムCGを用いたビジュアライゼーションのニーズは、エンタープライズ(非エンタメ)領域にも広がりをみせている。そこで、ゲームエンジンを用いたCGコンテンツ開発を精力的に手がけるCUROのシニアテクニカルアーティスト 田所伸一郎氏に、Unreal Engineによるエンタープライズ向けツール開発事例を紹介してもらった。

TEXT_田所伸一郎(CURO)
EDIT_沼倉有人 / Arihito Numakura(CGWORLD)、山田桃子 / Momoko Yamada

  • 田所伸一郎(CURO)
    株式会社CURO シニアテクニカルアーティスト。モデルやモーションなどアセット制作のリード業務を経てテクニカルアーティストに転身し、以降は各種アートアセットの制作やワークフロー整備、ツールやシェーダの開発、ルックや表現手法の提案などで多数のコンシューマタイトル開発やアプリケーション開発に関わる。現在はCUROの社員として、ゲーム開発やエンタープライズ案件の開発に従事しながら、CEDECへの登壇などによる情報発信も精力的に行う。UE使用歴は5年
    curo.co.jp

ゲーム開発のノウハウをエンタープライズ開発へ

品質管理や自動運転など、機械による自動処理が必要なあらゆる分野において、機械学習のための教師データや検証用画像へのニーズが高まっています。特に人物を対象とした実写での教師データの作成には、演者の雇用や撮影に要する時間など、多数のサンプルを得るには撮影に多大なコストがかかります。そういった問題をCGで解決しようという試みはこれまでもされてきましたが、人物モデルを多数作成し、それぞれに表情やポーズをつけてレンダリングするとなると、実際に演者を撮影するより工数がかかるケースもありました。Unreal Engine 4(以下、UE)などのゲームエンジンを利用した高速かつ高品位なプロシージャル画像生成は、そのようなニーズに合致する技術です。

今回紹介する「Avator Generator」(開発元:イグニス・イメージワークス、販売元:シリコンスタジオ)はまさにそのようなニーズに応えるために開発されたツールです。ゲーム開発においてはさほど珍しくもないアバター生成ですが、用途が教師データ生成である場合、目や鼻の位置を数値で出力するための機能など独自の実装が必要になります。とは言え、基本的なしくみはモーフィングやボーンによる変形、マテリアルによる質感制御など、ゲーム開発で馴染みのある手法を用いることがほとんどです。

また、30FPS(あるいは60FPS)を目標とするゲーム開発ほどには描画を最適化する必要はないものの、大量の教師データを生成するためには1つの画像の生成にそれほど時間はかけられないため、結局はゲーム用アセットと同等のアセット制限(ポリゴン数やテクスチャ解像度など)が必要です。つまり、ゲーム開発でアバターを作成した経験があれば、その技術は機械学習用教師データ生成の開発にも活かすことができます。

アバターだけではなく、例えば「物理シミュレーションを利用した部品のランダム配置」「プロシージャルテクスチャを利用した傷画像生成」など、ゲーム開発で培った多くの技術は、実際に多くの教師データ生成に活用されています。コンシューマゲーム業界には苦しい時代になったという話をよく聞きますが、ゲーム業界で身につけたモデル制作やプロシージャル技術、描画の知識などを品質管理や自動運転などの産業開発で発揮できるようになれば、クリエイターの市場価値が上がり、待遇の向上によるクリエイター人口の増加や教育の充実など期待できることも多く、結果的にあらゆる業界の活性化につながっていくのではと考えています。

<1>基本の3人

Avator Generatorの開発にあたり、まずは画像の3種類の人種を基準としました

▲モンゴロイド【上段左】をベースメッシュとし、コーカソイド【上段右】とネグロイド【下段】をモーフターゲットとして作成しています。テクスチャはカラーとノーマルを人種ごとに作成し、モーフィングと同時にマテリアルで線形補間しています。3種類の人種の特徴を線形補間することにより、マルチレイシャルの人物生成にも対応しています。モーフターゲット作成時のルールとして、「眼球の位置と、顎や首の関節の位置は固定」としています
All images rights reserved © Ignis Imageworks Corp.

<2>表情

表情は、目周辺、鼻周辺、口周辺に対し、それぞれ「微笑み」「怒り」のモーフターゲットを作成しています。モーフィングだけでは十分な見た目にならないため、表情ごと、部位ごとにノーマルマップを作成し、マテリアルでブレンドしています


  • ▲ノーマルマップなし


  • ▲ノーマルマップあり

All images rights reserved © Ignis Imageworks Corp.

<3>加齢の表現

加齢の表現は、モンゴロイドをベースにモーフターゲットとシワ用のノーマルマップを作成し、ブレンドしています。どの人種の場合でも同じモーフターゲットとノーマルマップをブレンドすることで加齢を表現しています。人種ごとに作成した方が精度の高い加齢表現ができると思いますが、Avator Generatorでは最小限のリソースで加齢を表現することで、加齢以外の表現にもバリエーションを出すことを優先しています

All images rights reserved © Ignis Imageworks Corp.

<4>目の特徴付け

目の特徴付けのために3種類のモーフターゲットを作成し、それぞれウェイト値を変えてブレンドすることでより多くのバリエーションに対応しています。モーフターゲットは皮膚だけではなく、まつ毛や涙のメッシュでも作成しています。さらに、まつ毛や涙のモーフターゲットは、目の特徴付け用だけでなく、人種や加齢の表現用にも作成しています。目の特徴付けにはモーフィングだけではなくボーンも使用し、併用しています。ボーン変形による特徴付けは、目の大きさ、高さ、左右の幅などです。瞳の色はマテリアルにより色相や明るさの変更に対応しています


  • ▲形状1


  • ▲形状2


  • ▲形状3


  • ▲形状4

All images rights reserved © Ignis Imageworks Corp.

<5>口の特徴

口の特徴付けも基本的には目や口と同様です。口の開閉のために入れている顎の関節を前後や左右に少しズラすことで、人間味のある口を表現できるようにしています



  • ▲形状1



  • ▲形状2

▲形状3

All images rights reserved © Ignis Imageworks Corp.



<6>眉の特徴

眉毛は3種類のマスクテクスチャと3種類のモーフターゲットの組み合わせで特徴付けを行なっています。眉毛は人物の特徴を強く印象付けるパーツですが、そこにもあまり多くのリソースを使わず、組み合わせでバリエーションを出すようにしています。モーフィングによる形状変化は他のパーツと同様にウェイトを変えてブレンドしているため、テクスチャとの掛け合わせで実際にはかなり多くのバリエーションを生み出せるようになっています



  • ▲テクスチャ1



  • ▲テクスチャ2



  • ▲テクスチャ3



  • ▲形状1



  • ▲形状2



  • ▲形状3

All images rights reserved © Ignis Imageworks Corp.



Avator Generatorの概要

Avator Generatorは人物の生成が基本的な機能です。生成した人物(以降、アバター)は多数のパラメータを備えており、それらのパラメータの変更によりあるゆる見た目のアバターをつくり出すことができます。変更可能なパラメータは、年齢や性別、目鼻口などのパーツの特徴、髪型、肌の色、メガネやマスクの有無など、50種類ほどあります。ユーザーはそれらのパラメータを任意の値に、あるいはランダムな値に変更する人で、ニーズにあった見た目の人物を生成することができます。生成したアバターは、任意のポーズや表情を取らせて、任意の背景アセット内に置いてライティングを施した上で撮影(レンダリング)したり、レンダリングした画像内の目や鼻や口などの特徴点の座標や、視線や首の向きなどを数値化してJSONやCSV、XMLなどの外部ファイルに書き出すことができます。

また、生成したアバターをフリーズしたメッシュデータとしてFBXで書き出すことができるため、MayaなどのDCCツールに読み込んでレンダリングしたり、別のゲームエンジンで利用するといったことも可能です。生成したアバターのパラメータは外部ファイルに書き出しと読み込みができるため、一度つくったアバターは別の機会に再現することができ、それらを複数用意しておくことでプリセットのように扱うこともできます。また、アバター自体のパラメータだけではなく、カメラやライトの設定、SkydomeとCubemapによる環境なども書き出しと読み込みが可能なので、撮影時の環境を再現することができ、それによって例えば同じ条件で別の人物を撮影したいなどのニーズにも応えることができます。

教師データや検証用画像の作成を目的としてAvator Generatorを利用する場合、多数のバリエーションの画像を生成する必要があります。そのため、例えば顔の向きだけランダムに設定して連続撮影することで、同じ人物が顔の向きだけ変えた画像を大量に自動生成することができます。撮影にかかる時間は、PCのスペックにも依りますが例えばNVIDIA GeForce RTX 2080 Tiなどの高性能なビデオカードを搭載したPCであればおよそ30FPS、つまり1秒間に30枚の教師データ作成が可能です。ランダム設定は全てのパラメータに適用できるため、まったく異なる人物の画像が30万枚必要な場合でも、およそ3時間ほどで生成することができます。もし同じことをゲームエンジンを利用せずに同じ品質でやろうとした場合、1枚のレンダリングに1分かかると仮定すれば、その差は1,800倍になります。ゲームエンジンによる教師データ生成にどれほどのメリットがあるかはこの数字を見るだけでも明らかではないでしょうか。

<7>ヒゲとメイク

男性はヒゲ、女性はメイクで顔の特徴にバリエーションを出しています。ヒゲもメイクも基本的なしくみは同じで、複数のマスクをウェイトに変えてブレンドすることでバリエーションを増やしています



  • ▲ヒゲなし



  • ▲口ひげを追加



  • ▲全てのひげを加えた状態



  • ▲ノーメイク



  • ▲アイメイクを追加



  • ▲全てのメイクを加えた状態

All images rights reserved © Ignis Imageworks Corp.



<8>性別

男女それぞれのメッシュ、モーフターゲット、テクスチャを同じ数だけ作成しています。髪型も、まったく互換性のない別の形状を男女それぞれ同じ数だけ作成しています。リソースを同数用意し男女でパラメータを1対1にすることで、男性アバターを作成した後に性別だけを変更すると似た感じの女性ができます



  • ▲男性デフォルト



  • ▲女性デフォルト

▲同じパラメータ設定の男性と女性

All images rights reserved © Ignis Imageworks Corp.



<9>髪型

髪の毛は髪型ごとにそれぞれモデリングしています。毛の表現はGroomではなく、ポリカード式のものです。髪の毛のマテリアルでは、色の変更、UVスケールを使用した毛の長さの調整、頂点座標のオフセットによるウェービングなどができるようになっています。ウェービング時はウェーブが滑らかになるよう、テッセレーションを使用しています。頭皮には髪の毛の下地として産毛テクスチャが描かれています。生え際の最も低い髪型と最も高い髪型に合うようにUVをそれぞれ作成し、マテリアルで2つのUVを線形補間することで全ての髪型に合わせるようにしています



  • ▲黒髪



  • ▲最も短髪



  • ▲最も長髪



  • ▲緩いウェーブ

▲細かいウェーブ



  • ▲低い生え際



  • ▲高い生え際

All images rights reserved © Ignis Imageworks Corp.



<10>ほくろ

▲ほくろはマテリアルで描画しており、最大4つのほくろがランダムな位置と大きさで配置されるようになっています【上段】。【下段】は、そのノードツリーですが、カスタムノードでランダム関数を作成し、それぞれ別のSeedを与えることでランダムなホクロになるようにしています

All images rights reserved © Ignis Imageworks Corp.

次ページ:
利用例:車内環境のシミュレーション

[[SplitPage]]

利用例:車内環境のシミュレーション

Avator Generatorのアバターは車室内空間、例えばドラビングモニタリング(運転中のドライバーの異常をセンサーが感じ取り警告を発することで事故を未然に防ぐ)システムの赤外線カメラによるルックを再現できます。

Avator Generatorには、アバターを生成するエディタ機能と、生成したアバターをActor化する機能があり、車内環境の撮影にはActor化したアバター(以降、BP_Avatar)が使用されています。BP_Avatarには通常のスケルタルメッシュなどのようにAnimationBPによるアニメーション制御ができるため、ドライバーの姿勢をとらせて運転席に座らせたり、同乗者として助手席に座らせたりすることができます。また、BP_Avatarは人物の生成に必要な全てのパラメータをEditableで持っているため、Avator Generatorのエディタ機能で生成したアバタープリセットデータをアバターActorに読み込ませることで、すでにドライバーとして座らせているアバターを別の人物に置き換えることもできます。プリセットで呼び出した人物によっては身長や骨格が変わるためハンドルを上手く握らない状態になりますが、シート位置の調整とAnimationBPによるIK制御を組み合わせることで、小柄な女性や大柄な男性でも自然にハンドルを握らせることができます。

ドライバーの異常を感知する車載センサーの多くは赤外線カメラであるため、通常の光学カメラによるレンダリング以外に、広角の赤外線カメラで撮影した画像を再現する必要があります。赤外線カメラを通して見る世界は一見モノクロにしただけのように見えますが、実際には被写体の素材毎の赤外線反射率によって明るさが決まるため、単純なポストプロセスによる処理では再現できません。そのため、肌や眼球、髪の毛などの赤外線反射率を調べ、マテリアルにパラメータとしてもたせることで対応しています。衣服に関しては生地の色などと同様に素材も多様なため、赤外線反射率を直接設定できるようにしました。

広角に関してはEpic Gamesの公式資料にも記載されている「Paniniプロジェクション」を使用しています。その際、画像がポストプロセスで歪むことになるため、顔の特徴点の正しい座標が取得できなくなってしまいます。そのため、まずはそれぞれの特徴点の3D座標を取得し、Paniniプロジェクションを適用した状態でその座標に点だけを描画します。その後、フレームバッファ上の点が描かれたピクセルを走査することで、広角レンズから見たときのランドマークの画面上の位置を取得しています。



<11>赤外線カメラの表現

赤外線カメラによる撮影を再現するため、ポストプロセスによる処理だけではなく、各マテリアル側にも対応を入れています。図はポストプロセスマテリアルで彩度を下げただけの画像と、肌や眼球のマテリアルによる対応を有効にして赤外線カメラを再現した画像の比較です。赤外線カメラによる撮影では素材の赤外線反射率で明るさが決まるため、肌の色のちがいが差として現れづらく、褐色の肌でも明るく映ります。皮膚の下にあるヒゲが透過するため濃く映ったり、水分を含んだ眼球が少し暗く映るなどの特徴があります



  • ▲通常のレンダリングイメージ



  • ▲彩度を下げただけ

▲マテリアル側の設定も追加した状態。赤外線カメラの特徴がより詳細に再現されている

▲車内を撮影している赤外線カメラの映像をシミュレートした画像を生成した実例です。人物の見た目や表情、身長、姿勢、運転手以外の人物のON/OFF、太陽の位置や明るさなどがGUIから動的に変更可能です。また、カメラの画角を変更したり、任意の位置に移動することも可能になっています

All images rights reserved © Ignis Imageworks Corp.



<12>様々なビジュアライゼーションへの対応

例えば車内のアセットは、赤外線カメラだけではなく通常のカメラでの撮影にも対応できるよう、マテリアルなどもそれなりにしっかり作成しています。ドローン移動によりカメラの配置が自由にできるようになっていますが、コリジョンがないとあちこち突き抜けて位置を見失ってしまうため、特にダッシュボード周辺にはシンプルなコリジョンを置いています。ただし、ハンドルに細かい凹凸にまでコリジョンがあるとカメラの移動を阻害するため、最低限のコリジョンにすることでストレスなく移動できるようにしています



  • ▲車内のアセット



  • ▲コリジョンを表示した状態

All images rights reserved © Ignis Imageworks Corp.



生成したアバターは通常のキャラクターと同様にレベルに配置してアニメーションさせることができます。実例としてこの図ではドライバーの身長を変更しても運転姿勢を維持するため、AnimationBPで左右の腕にIKを設定し、ハンドルにペアレントしたNullの座標をIKのエフェクターロケーションに渡しています。中間の身長のモデルで運転姿勢モーションを作成し、それより大きい身長のときにはシートを後ろに下げ、小さいときは前に出すことで、常に自然な運転姿勢をとるようにしています

▲アバターをレベルに配置

▲平均的な身長



  • ▲低身長



  • ▲高身長

All images rights reserved © Ignis Imageworks Corp.



Avator Generatorの今後について

Avator Generatorを利用した教師データの生成のほかにも、例えば横断歩道を渡る人物の生成のような群衆を前提としたケースでも活用できると考えています。また、活用の範囲を増やすため、例えば子供から大人までリニアに生成できたり、痩せ型や肥満体型などにも対応していきたいと考えています。ビデオ会議が多く利用される昨今においては、自分の顔の変わりにアバターを映しておきたい、みたいな需要もあるかもしれません。

あらゆる需要に対応できる拡張性や汎用性もAvator Generatorの特徴なので、また別の機会に面白い活用事例が紹介できれば良いなと思っています。

もともとは少ないモーフターゲットでできるだけ多くの人物を生成する事を目指していたAvator Generatorですが、モーフターゲット自体をAvator Generatorで生成できるようになれば無限に人物を生み出せるんじゃないか?

みたいな妄想も、今後の機能拡張次第では現実になるかもしれません(笑)

<13>FBX形式による書き出し

エディットしたアバターは特徴や表情を維持したままFBX形式で出力できます。図は出力したFBXデータをWindows 10の3Dビューアで描画したものです



  • ▲エディットしたアバター



  • ▲3Dビューアで描画したもの

All images rights reserved © Ignis Imageworks Corp.



<14>特徴点の取得

機械学習用の教師データとして使用するためには、人物の目や口などのランドマーク座標(特徴点)を出力する必要があります。特徴点はあらかじめメッシュの特定の頂点のインデックスを決めておくことで、表情などが変わっても正しい位置を見つけられるようになっています。広角撮影時は特徴点の画面座標がポストプロセスによる処理で変わってしまうため、特徴点となる頂点を点として同時に描画し、その点をピクセル走査で抽出することで正しい座標を取得しています



  • ▲目の特徴点



  • ▲口の特徴点

▲ここまでで紹介したパラメータ以外にも、例えば輪郭や耳の形状、ホクロの位置、眼鏡の種類とON/OFFなどで様々な人物を生成可能です

All images rights reserved © Ignis Imageworks Corp.

info.

  • 月刊CGWORLD + digital video vol.269(2021年1月号)
    第1特集:Unreal Engine ここが好き!
    第2特集:映画『STAND BY ME ドラえもん 2』
    定価:1,540円(税込)
    判型:A4ワイド
    総ページ数:112
    発売日:2020年1月10日