4.3K Views
September 26, 19
スライド概要
2019/9/25-6に開催されたUnite Tokyo 2019の講演スライドです。
大下 岳志(ユニティ・テクノロジーズ・ジャパン合同会社)
こんな人におすすめ
・オープンワールドゲームを設計したいプランナー
・広域な背景を作成したいアーティスト
・従来よりも高い3D表現を目指す方
受講者が得られる知見
・Unityでオープンワールドゲームを作るためのワークフロー
・ワールドビルディング機能と他ツールとの連携
・LWRPによるバランスの取れた絵作りの手法
Unityのイベント資料はこちらから:
https://www.slideshare.net/UnityTechnologiesJapan/clipboards
リアルタイム3Dコンテンツを制作・運用するための世界的にリードするプラットフォームである「Unity」の日本国内における販売、サポート、コミュニティ活動、研究開発、教育支援を行っています。ゲーム開発者からアーティスト、建築家、自動車デザイナー、映画製作者など、さまざまなクリエイターがUnityを使い想像力を発揮しています。
Unityとプロシージャルで作る オープンワールド背景 大下岳志 ユニティ・テクノロジーズ・ジャパン 2
目次 サンプル紹介 ワークフロー解説 具体例:樹木の配置 具体例:地形デザイン まとめ 3
サンプル紹介
5
Open World Demo ・1000m×1000m×500m ・Terrain機能による地形作成 ・約42000個の配置オブジェクト ・フィールド制作 2人月 iOS版、 PC版 プレイアブルデモ展示中 6
Open World Demo Unity 2019.1 ・LightWeight Render Pipeline ・Post Processing Stack V2 ・Shader Graph ・H-LOD ・DOTS 7
ワークフロー解説
ワークフロー解説 Unity Terrain ・画像ベースの地形生成機能 Heightmap …地形の高さ情報 Splatmap …質感の分布 Treemap …樹木の分布 Detailmap …草など小物の分布 ・ただしデータは独自形式 ・ランタイムで3D化。LODが強力 広範囲の地形生成に向いている機能 9
ワークフロー解説 Unity TerrainTools ・Terrain編集の不足を拡充する機能セット 2019.1~ Package Managerからインストール ・Terrainエディターへの編集機能追加 ・Terrain Tool Box …プロジェクト全体の Terrainユーティリティー 10 「新機能のTerrain Toolsパッケージで 作業を高速化させよう」 https://blogs.unity3d.com/jp/2019/05/28/ speed-up-your-work-with-the-newterrain-tools-package/
ワークフロー解説 Unity TerrainTools 今回着目した機能 ・Replace Splatmaps ・Export Splatmaps ・Export Heightmaps TreemapとDetailmapは現状入出力できない 11
ワークフロー解説 12
ワークフロー解説 FBX FBX Asset Asset Procedural Bitmap CSV Height Splat Detail* Placement Bitmap Bitmap Height Height Splat 13
ワークフロー解説 Unity 地形生成 FBX FBX Asset Asset Bitmap CSV Height Splat Detail Placement Bitmap Bitmap Height Height Splat 14
ワークフロー解説 Unity 地形生成 ・Terrain/Terrain Toolsで作成 ・全体を4分割(解像度確保のため) ・Roadmap… →オリジナル要素。Paint Texture機能を 使ってごく大まかな道の情報を描画 ・Export Heightmaps、Export Splatmapsで HeightmapとRoadmapを出力 詳細な作成手順は後半に紹介 15
ワークフロー解説 Substance Designer FBX FBX Asset Asset Bitmap CSV Height Splat Detail Placement Bitmap Bitmap Height Road Height Splat 16
ワークフロー解説 Substance Designer 17
ワークフロー解説 Substance Designer Heightmapと Roadmapの スロット ・HeightmapとSplatmapの インポート ・4枚のHeightmapを1枚に 18
ワークフロー解説 Substance Designer 傾斜が大きい 箇所を抽出 基準より高い場所を 抽出 Roadmapを加工し、 自然な街道を生成 19
ワークフロー解説 Substance Designer 草原の発生する Densityを生成 樹木の発生する Densityを生成 茂みの発生する Densityを生成 20
ワークフロー解説 Substance Designer Splatmapを 生成 R G B A 21
ワークフロー解説 Substance Designer R G Detailmapを 生成 B A 22
ワークフロー解説 Substance Designer Heightmapを 生成 23
ワークフロー解説 Substance Designer Unity Houdini Input Heightmap × 4 (L16) Heightmap (L16) Detailmap (RGB8) SplatmapRGB (RGB8) SplatmapA (L8) Heightmap × 4 (L16) Roadmap (L8) Splatmap × 4 (RGBA8) 24
ワークフロー解説 Houdini FBX FBX Asset Asset Bitmap CSV Height Splat Detail Placement Bitmap Bitmap Height Road Height Splat 25
ワークフロー解説 Houdini 26
ワークフロー解説 Texture解像度に 合わせたGridを生成 Houdini 各画像を インポート 各画像の情報を Gridに付加 Heightmapから Terrain形状を復元 27
ワークフロー解説 Houdini Densityが 低い箇所を 削除 面積を測定 ポイント散布 配置物の割り振り 28 崖配置 樹配置 草配置 茂み配置
ワークフロー解説 Houdini 全ポイント統合 Attributeを整理 29
ワークフロー解説 Houdini プレビュー生成 30
ワークフロー解説 Maya FBX FBX Asset Asset Bitmap CSV Height Splat Detail Placement Bitmap Bitmap Height Road Height Splat 31
ワークフロー解説 Maya スキャンデータの加工 Unity Asset Store ・Book Of The Dead: Environment ・Buried Memories Volume 1: Yggdrasil - Icon Pack ・The Blacksmith: Environments 32
ワークフロー解説 Maya スキャンデータの加工 ・Houdini仮モデルに合わせた 形状調整 ・Soft Selectionで頂点移動 Meshの継ぎはぎ 33
ワークフロー解説 FBX FBX Asset Unity インポートAsset / 修正作業 Bitmap Height Splat Detail CSV Placement Bitmap Height Splat Bitmap Height Road 34
ワークフロー解説 Unity インポート / 修正作業 エディター拡張 CSVファイルをインポートし、 1行毎にTransform情報と Prefab名を取得。これに基づ いてPrefab Instanceを生成 ×行数分 MayaをMELやPythonで拡張するのに近い 35
ワークフロー解説 Unity インポート / 修正作業 エディター拡張 CSVファイルをインポートし、 1行毎にTransform情報と Prefab名を取得。これに基づ いてPrefab Instanceを生成 ×行数分 MayaをMELやPythonで拡張するのに近い 36
ワークフロー解説 Unity インポート / 修正作業 37
ワークフロー解説 補足とまとめ アセット配置のプロシージャル化 ・地形の形状変更、新規追加、 拡張などに柔軟な対応ができる ・アセットの修正、変更も即時反映 (別アセットで別Verなども) ・配置に不満があれば、配置フローのみ 修正で対応できる 地形・アセット・配置を非同期的、 非破壊的に編集する事ができる 38
具体例:樹木の配置 FBX FBX Asset Asset Bitmap CSV Height Splat Detail Placement Bitmap Bitmap Height Height Splat 39
具体例:樹木の配置 実現したい事 ・地形の上にランダムに1種の木を配置 する事は比較的簡単 それだけでは単調かつ不自然 40
具体例:樹木の配置 実現したい事 ・崖、街道、高地には配置しない 41
具体例:樹木の配置 実現したい事 ・崖、街道、高地には配置しない ・粗密のリズムがある配置 42
具体例:樹木の配置 実現したい事 ・崖、街道、高地には配置しない ・粗密のリズムがある配置 ・標高による種別の変化 43
具体例:樹木の配置 実現したい事 ・崖、街道、高地には配置しない ・粗密のリズムがある配置 ・標高による種別の変化 ・簡易な森林の再現 ・密生の外周の樹木は背が低い ・中心部の樹木は背が高い ・中心部の低い箇所には葉が少ない ・低い層は草や茂みで覆われている 44
具体例:樹木の配置 アセット 配置するオブジェクトを選定 ・Book Of The Dead: Environment からデータを流用 簡易な森の再現 ・大きさ5段階 標高による種別の変化 ・種別は高地用/低地用の2種類 45
具体例:樹木の配置 Substance Designer 樹木のDensityを生成 ・斜面の分布を作成 ・高地分布を作成 ・街道分布を太くしたものを作成 ・ノイズを作成 46
具体例:樹木の配置 Substance Designer 樹木のDensityを生成 崖、街道、高地には配置しない ・斜面の分布を作成 ・高地分布を作成 ・街道分布を太くしたものを作成 粗密のリズムがある配置 ・ノイズを作成 4枚を全て加算 ・レベル補正で階調を調整 47
具体例:樹木の配置 Substance Designer 茂みのDensityに影響を加える 簡易な森の再現 ・樹木のDensityをレベル補正 ・茂みのDensityに加算 Density同士を相互に影響させる 48
具体例:樹木の配置 Houdini Densityから配置情報を生成 ・Densityの低い箇所を削除 ・ポイントを散布 ・ポイントにDensityをコピー 簡易な森の再現 ・Densityをベースにサイズを決定 標高による種別の変化 ・ポイントの高さでPrefab名を分岐 49
具体例:樹木の配置 結果 ・崖、街道、高地には配置しない 50
具体例:樹木の配置 結果 ・崖、街道、高地には配置しない ・粗密のリズムがある配置 51
具体例:樹木の配置 結果 ・崖、街道、高地には配置しない ・粗密のリズムがある配置 ・標高による種別の変化 52
具体例:樹木の配置 結果 ・崖、街道、高地には配置しない ・粗密のリズムがある配置 ・標高による種別の変化 ・簡易な森林の再現 ・密生の外周の樹木は背が低い ・中心部の樹木は背が高い ・中心部の低い箇所には葉が少ない ・低い層は草や茂みで覆われている 53
具体例:樹木の配置 補足とまとめ プロシージャルの実践 ・植生学的な正確さはあまりない ・絵画的、イラスト的なアプローチ アーティストの感性を自動化によって スケールさせる事に、アーティストが プロシージャルを扱う価値がある 54
具体例:地形デザイン FBX FBX Asset Asset Bitmap CSV Height Splat Detail Placement Bitmap Bitmap Height Height Splat 55
具体例:地形デザイン 実現したい事 ビジュアルだけではない、 プレイフィールドとしての地形 オープンワールドRPG風 ・アイレベル(サードパーソン視点) ・移動速度(徒歩での移動) →フィールドの広さ →ディティール、衝突判定の解像度 56
具体例:地形デザイン フィールド全景 ・プレイフィールドの周囲に環境背景 →全景は島型 または 盆地型 (組み合わせて海岸も) ・フィールド端の見え方による影響 →島型 …全景や広さが把握しやすい →盆地型…全景や広さが曖昧になる 今回フィールドは盆地型を採用 57
具体例:地形デザイン フィールド内部 ・階層の違いを用いた迷路構造 →迷路の壁=階層の違い →スロープで異なった階層を繋ぐ ・プレイアブルな環境での制作 →広大な地形はイメージが難しい 58
具体例:地形デザイン Unity 地形生成 ・Raise or Lower Terrain →島型or盆地型の形状を作成 ・Sculpt/Terrace →フィールド部分を階層化 59
具体例:地形デザイン Unity 地形生成 ・Raise or Lower Terrain →おおまかな形状を作成 ・Sculpt/Terrace →フィールド部分を階層化 ・Set Height →階層構造の微調整 60
具体例:地形デザイン Unity 地形生成 ・Raise or Lower Terrain →おおまかな形状を作成 ・Sculpt/Terrace →フィールド部分を階層化 ・Set Height →階層構造の微調整 ・Sculpt/Bridge →階層同士をスロープで接続 61
具体例:地形デザイン Unity 地形生成 ・演出的な起伏の追加 →ノイズをHeightmapに乗算 →周波数の違うノイズを組み合わせる →階層毎にノイズのランダムシードを変更 ・形状の修正/追加 →崖面を滑らかな形状に →崖面にディティールを追加 プロシージャルで加工、手作業で仕上げ 62
具体例:地形デザイン 補足とまとめ プレイフィールドとしての地形デザイン 自動化が難しい プランナー担当? ・島型 or 盆地型、階層構造 ・プレイアブルな環境での作成 アーティスト担当? 自動化の可能性大 ・演出的な形状の付加 ・ディティールアップ、仕上げ 63
まとめ
まとめ ・Unityで大量のオブジェクトが扱える ・大規模化するプロジェクトには プロシージャルを取り入れる事をおすすめ ・個人開発のオープンワールドRPGも 充分にあり得る Unity+プロシージャル 大規模開発だって民主化!? 65
Thank you.