40.5K Views
April 30, 24
スライド概要
現代のゲーム開発で求められる物量とクオリティを克服するカギの一つにプロシージャルによる生成が挙げられます。ゲーム開発におけるプロシージャル生成の歴史は長く、実績も数多くあり、そのアプローチも多岐に渡りますが、近年では各ツールやエンジンに共通してみられる要素も増えてきました。
本講演ではそうした要素を、プロシージャルで(特に背景配置の)タスクに取り組む際の共通の「作法」と考え、その基本的な考え方を解説しています。ごく基本的な内容ですが、YouTubeやネットで見つけられるプロシージャル入門動画や記事をスムーズに理解できる下地を整えることを目標に準備しました。
なお本講演は、Unreal EngineやそのプロシージャルツールであるPCGの利用経験がなくてもご覧いただけます。
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
ゼロから始める プロシージャル入門! Kazuhisa Minato Epic Games Japan, Developer Relations 2023 Private & Confidential
プロシージャル(”手続きの”)とは? ● “一定のアルゴリズムに従って、特定のアセットを自動生成 すること” (「ゲームメーカーズ」用語集より) ● 生成AIが創造性を人工知能にゆだねるのに対し、 プロシージャルでは手続きを人間が定めて、コンピュータ に実行させる ● 「意外な結果が見られて面白い」などはないが、 コントローラブルで工数削減に役立つ
本日の講演のねらい ● 「プロシージャル的なもの」は種類も豊富で、型もない ● 一方、背景配置などの分野では「お作法」的なものが固まりつつある ● サンプルプロジェクトやYouTube動画等、学習リソースはマジ潤沢 ● →デモ ナニイッテルノカ ヨクワカラナイ… ● 何か考え方自体が違うっぽい ● 本日はそうした学習リソースを理解していくための下地となる知識 (すなわち「お作法」)をこれからプロシージャルを学びたい人たち と共有できればと思います
本日の流れ ● プロシージャルの分類とUE5の新ツールの紹介 ● 基本3単語の解説 ○ ポイント ○ ボリューム ○ アトリビュート ● 次のステップ ● まとめ
プロシージャルテクスチャやプロシージャルサウンドを うっちゃりつつ・・・ プロシージャルを(私的に)分類したい ● プロシージャルによる組み立て ● プロシージャルによるモデリング ● プロシージャルによる配置
プロシージャルの(私的)分類 プロシージャルによる組み立て ● あの面倒なモジュラーパーツの組み合わせを自動化 出典: 『Assassin's Creed Syndicate: London Wasn't Built in a Day』(GDC2016)
プロシージャルの(私的)分類 プロシージャルによるモデリング ● パラメータに従い、オブジェクトのジオメトリ自体を生成、加工
プロシージャルの(私的)分類 プロシージャルによるモデリング ● パラメータに従い、オブジェクトのジオメトリ自体を生成、加工 出典: 『Lyra Starter Game』(Epic Games - UEサンプルプロジェクト)
プロシージャルの(私的)分類 プロシージャルによる配置 ● 規則とパラメータに従って、空間にオブジェクトを配置 出典: 『Making Assassin's Creed Unity: Part 2 - Next Generation Technology』(IGN, 2014)
このうち本日扱いますのは プロシージャル配置
*GDC講演などの公開情報からの筆者の推測に基づきます 世間のプロシージャル配置の実現例 独自のプロシージャル機能を Houdiniなどのプロシージャ 『Houdini Engine』を用い ルに強い外部DCCツールを てHoudiniの機能をゲームエ 自前実装 サポートに利用 ディタに統合
そして新たな選択肢… Procedural Content Generation Framework (PCG) UE5内で完結した汎用プロシージャルコンテンツ生成ツール
フォリッジツール(植生ペイント)と違うの? フォリッジは3Dオブジェクト をスプレーで吹きかけるツー ル ヤバッ生やしすぎた!!(汗 その工程で 消去→設定変更→再スプレー のトライ&エラーが必須 移動も面倒くさい…
PCGであれば指定ボリューム内にコンテンツを配置 パラメータ変更だけで再生成ができる PCGボリュームを配置して、グラフを 指定すると、一発で森が形成される例 木を減らす場合は密度パラメータを調 整して再生成するだけ 減らすも増やすも数値調整だけで済む
技術的にも十分成熟!始めるならいま! え?プロシージャル勢の用語が分からない? いやあ~ テングンが… 大丈夫!今日学べます! ほー スキャッター ですなあ
プロシージャル配置の学習を始めるために 本日覚えて帰っていただきたい3単語 ● ポイント ● ボリューム ● アトリビュート
ポイント
プロシージャルの基礎知識/ポイント ゲームのマップで森を作ることを考えてみよう 木をテキトーな場所にたくさん配置す ればよいハズ!? この手続きをコンピュータで処理する のだから...こう? // 20回繰り返す for (int i = 0; i < 20; i++) { // テキトーな位置に Locate(Rand(), Rand()); // 木を植える Populate(Tree); } ● ● ● これでもよい しかし… HoudiniやPCGで主流のアプロー チではない
プロシージャルの基礎知識/ポイント HoudiniやPCGでメジャーなやり方とは…? 1. 地面に点を散布(スキャッター) 2. ノイズ関数で点に濃淡(確率密度)をつける 3. 一定密度以上の点をフィルタリング 4. 残った点にオブジェクトをスポーン 点を種、密度を発芽確率と置き換えると 分かりやすいかもしれない 点が群れをなすことから、 これらの点を点群(ポイントクラウド)と呼ぶ 1 2 3 4
実践…草生える
スプラインに沿って一定間隔に点を置けば 街灯設置ツールなども簡単に作れる
ポイント 結論(雑) ● プロシージャル配置をや る人はだいたい点が好き ● 点が群れをなすので、 点群と言ったりする ポイントクラウド
ボリューム
● 自然界を考えてみる ● 風や鳥が種を運び、大 地に種がスキャッター される…
● それはやがて花となり
● 枯れて ● また次の種を地面にス キャッターする ● これを繰り返す
● 季節はめぐり、時に別 の種類の種がやってく ることもあるだろう
● それは長い年月を経て 力強く成長し
● 近くの種の成長を阻み
● 結果、でかい木の根元 に花が咲かなくなるこ ともあるだろう 咲けぬ! 咲けぬ!
● 自然界なら時間の経過 によって自然に起こり えること ● でも仮想世界では? 発芽せず
● 植生再現のためとはい え、何世代もシミュ レーションを回せない ● 点を撒いた時点で右図 のような最終像を決定 しておくのが望ましい 発芽予定 発芽予定 発芽せず 発芽予定 発芽せず
えっ何を根拠にどうやって…? 「点」情報だけじゃ無理では
そこでボリュームの出番です
ボリューム 点だけでは無理でも 体積付きなら!
● 点だけで考えると、全 部、発芽して育ちそう な感じがする
● しかし、育ち切ったと きのボリューム感は、 それぞれこんな感じ
● そこで、点の位置に、 そのボリューム感を重 ねてみる
● すると、ボリューム同 士が重なっているとこ ろが分かる
● ボリューム情報を根拠 に、花の点群から木の 点群と交差する点を除 去
● これなら全部発芽して オッケー 発芽予定 発芽予定 発芽予定
● 各点にオブジェクトを 配置 ● ハイ!一発でいきまし た~!
ボリュームによる交差除去
草と木だと分かりづらいので岩で… ボリュームによる交差除去
道のスプラインに沿ってボリュームを配置して道を開く ボリュームによる交差除去
ボリューム 結論(雑) ● プロシージャルやる人は だいたいボリュームも好 き
アトリビュート
(本来)点とは ● 大きさがなく位置だけをもつ図形 しかし・・・?
点でやってきたことをふりかえる 濃淡情報でオブジェクト配 置の有無を決定 ボリューム情報でほかの 点群との共存具合を決定 →位置以外にもめっちゃ 情報あるやんけ! そう、 プロシージャル界の 「点」は付随情報をたく さん持てるのである!
属性は自由に追加できる ● 河口からの距離を属性とし て点に加えれば、点群処理 の文脈で処理可能 川上ほど石が大きくゴ ツゴツで 川下にいくほど小さくて 丸い
実践 道のそばに生えている木を切り倒し、 雑草は除草剤で枯らしたようなマップに仕上げたい 木は木の点群の位置に木のオブジェクトを置いているだけ、 草も同様だった …どうすれば切り倒したり、枯らしたりなんてことができる?
実践 木のポイントに道の点群(再近傍)からの距離を Distance属性として与えて… ● 一定距離でフィルタリング を行い… ● 一定距離内の木の点には伐 採済みのメッシュを配置!
実践 草のポイントに道の点群(再近傍)からの距離を Distance属性として与えて… ● 一定距離でフィルタリング を行い… ● 一定距離内の草の点には除 草剤浴びた系メッシュに!
結果 パスを動かすと、森の中で自由に道の位置を変えられるようになった このようなマップ調整は手配置のマップでは(作業負荷的に)不可能
ボリューム 結論(雑) ● プロシージャルやる人は だいたいアトリビュート も好き
以上、本日覚えて帰ってもらいたいこと3つでした ポイント ボリューム アトリビュート
最終形
侮ってはいけない、、 似たようなロジックでアセットを入れ替えれば 超リアルな背景が作れる 出典: 『7 Minute Photoreal Forest! Procedural Content Generation PCG in Unreal Engine』 (YouTube)
次のステップ
プロシージャル配置、何を使って学べばよい? ● おススメは Unreal Engine 5 のPCG (もちろんSideFXさんのHoudiniも選択肢) ● UE5のPCGの利点は無料で始めることができ、UE5内で完結 ● また、ほかのプロシージャル技術も学べる ● 各種「お作法」は他のツールに通じるところがあり、 学んだことが無駄にならない
次の段階に進みましょう ● もう皆さんはPCGでプロシー ジャル配置技術に手をつける 準備ができてます! ● YouTubeのプロシージャル系 ビデオを理解できるはず! ● 『7 Minute Photoreal Forest! Procedural Content Generation PCG in Unreal Engine』→
PCGの学習リソースは? ● Procedural Content Generation in UE5 | GDC2023 ● Adrien LOGUT氏のチュートリアルシリーズ
よりディープな学習に! (要ハイスペックマシン) ● Electric Dreams 環境サンプルプロジェクト (https://www.unrealengine.com/ja/electric-dreams-environment) ● Unreal Engine 5 ElectricDreams環境サンプルにみるプロシー ジャル生成テクニック【CEDEC 2023】 ● Deep Dive into the Electric Dreams Project | Inside Unreal
まとめ
まとめ ● プロシージャル技術は生成AIより制御性が高く、理想的には人間が手作業で 行っていた手順/工程を自動化に貢献できる ● ● →メッシュの組み立て、モデリング、背景配置について実績がある 3つの基本を理解することが大切 ● ポイント:点(空間における位置情報)のこと ● ボリューム:点に大きさをもたせ、生成時に空間を占める面積・容積を前もって主張 ● アトリビュート:点に付随させる任意の追加情報 ● UE5を使えば無料でプロシージャルを動かし、学ぶ環境が整う ● 学習に使うプロジェクトや、学習教材は無料で公開されている ● →「PCG」でYouTubeやGoogleを検索しよう
ご清聴ありがとうございました 謝辞(ライセンス) "Low poly trees" (https://skfb.ly/opJMP) by Aditya Graphical is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/). "Low Poly Pack Oasis - Desert" (https://skfb.ly/6CGr6) by Ergoni is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/). 2023 Private & Confidential