Anastasia Opara様の CEDEC 2018 講演レポート 【後編】


前編ではPicaPicaのアートディレクションについて、プロシージャルを用いてどのように行っていくのか、ということについての内容でした。後編ではいよいよ、PicaPicaに実際に用いられたプロシージャルなアルゴリズムについての紹介となります。

最初に、PicaPicaのレベルデザインについての紹介がありました。
まず、アセットの配置におけるコリジョン問題の解決です。これにはアセットひとつひとつに対して正円の外径線を作成しました。そして、各々の外形線が重なり合わないように、また、配置する床の範囲からはみ出ないように配置するアルゴリズムを実装しました。

次にアセットや床、コンベアの終点など、工場の形状や物体の大まかな配置を決定するアルゴリズムについて紹介してくださいました。

まず、Anastasia様は自身の脳内の思考を具体化することを最初に考えつきました。自身で良いと思う配置を脳内でいくつか考え、それを紙に起こし、それらの共通点を探し出すということを行いました。その結果、Anastasia様はどこか適当な場所に物体を置くと、紙の中心に対して釣り合うような形で点対照な位置に物体を配置する傾向にある、ということがわかりました。

そこでAnastasia様はこれを数式化して自動生成することを考えました。今回はこのルールがニュートンの万有引力の法則に類似している点から、この式を改変することによって自動生成のアルゴリズムを作成されました。

今回は基準となる点から、ランダムに追加したオブジェクトの位置と「重み」に関するベクトルを算出しています。本来視覚に影響する「重み」は、オブジェクトの大きさや質量、形、色、物体の密度など様々な要素があり、それらを組み合わせて「重み」として考慮する必要がありますが、今回は単純化するためにオブジェクトの大きさのみを「重み」として設定しています。そして、基準点に配置されたオブジェクトに対して反対方向に存在するポイント群から、「重み」の釣り合いをとるうえで最適なポイントの位置、そして「重み」を算出します。これはポイント群中の各ポイントにオブジェクトを配置して、前述で算出した手法でベクトルを算出し、配置可能な全種類のオブジェクト各個に対して試行して、合成ベクトルの大きさが一番小さいものを探索します。そしてそれをポイント群の全てのポイントでひとつずつ実行し、合成ベクトルの大きさが最小になったポイントとオブジェクトの組み合わせを採用するという方法です。

次に実際に床を配置するアルゴリズムについて紹介します。最初にエリア全体の中心1/3空間の任意の場所にメインハブを設置します。すると、メインハブの外側に床を設置するスポーンエリアが設定されます。ここから先ほど紹介した万有引力のアルゴリズムを用いて、床に四角形のタイルの配置を行っていきます。

重複した床のタイルには重なり検知アルゴリズムを用いて重なった部分を削除しています。そしてこの処理を数回繰り返し、最終的に小さいサイズのタイルを周りのタイルと結合し、床の生成は完了です。

次にベルトコンベアの生成について紹介されました。ベルトコンベアはメインハブから工場外壁の複数のポイントにつながるパスとなります。最初はすべてのパスを同時にメインハブに接続するアルゴリズムを実装しましたが、見た目が綺麗にならなかったことから、いくつかのポイントとの接続を先にメインラインとして定め、そのあとにメインラインとそれ以外のポイントを接続するという2段方式にして解決されました。

以上によって工場の設置物の配置が完了しました。最後にアセットの配置を行います。アセットを配置できる領域を決める手法は2つのアプローチを採用しており、ひとつはパイルで囲われた特定区間内に配置するものであり、もうひとつは工場全体に散布して配置するものです。

パイルで囲われた区間の生成については工場のグリッドを照会して決定します。

メインハブ、壁、コンベアで囲われた何もない区間をグリッド照会によって算出、縮小しBSP法に似た手法を用いて余分な個所を切り取り、長方形の区間を作成します。

BSP法(Binary Space Patitionting):
物体衝突判定やレイトレーシングなどにも広く応用される手法であり、ある特定の境界(ポイントや線分など)をルートとして、境界のある両側に表裏の空間を定義するもの。それをもとに2分木を構成し、空間の中に境界がなくなるまで再帰的にこの処理を行う。今回の場合はこれを元に空間そのものの大きさを比較する。

散布する方法については工場全体のオブジェクトについて、構成質量のヒートマップを作成します(ここでは青色のマップで視覚化されています)。それによってアセットが配置される可能性の高い場所を構成します。ここでは青色成分が濃い部分の方がアセットの配置される可能性が高いことを示しています。

この両方の手法によってアセットを配置できる領域を決定したら、先ほどの万有引力の公式で領域内においてアセットを配置する位置を決定し、最後に先ほど紹介したコリジョン判定を行い配置を行います。

 以上が今回紹介されたPicaPicaプロジェクトにおけるプロシージャルの実験についてのパートでした。発表内容としてはこの後、プロジェクトメンバーの紹介を行い、結びの挨拶となりました。

 Deep Learningを用いたエージェントについては今回の発表では触れられなかったものの、難易度「激辛」と表現されているように、非常に高度かつ知的好奇心が擽られるような、興味深い内容となりました。

ご講演は、受講者からもたくさんの質問が寄せられ、大盛況でした。