UDN
Search public documentation:

DesignWorkflowJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

Epic Games 社のデザイン ワークフロー

ドキュメントの概要: Epic Games 社内デザイン ワークフローの詳細。

ドキュメントの変更ログ: 作成完了。 _経時的に更新。

コンセプトから完成まで

このドキュメントでは、Epic Games 社内のレベル作成ワークフローに関する洞察を紹介します。

アートコンセプトからの出発

環境に対するコンセプトがアートディレクターおよびプロジェクトのリードデザイナーにより承認されると、Level Designers (レベルデザイナー、LD) およびゲーム環境アーティストの手に渡されます。

コンセプトの分析

LD は、例えばマップ内で建物がどこに位置するかなどの簡易構造と、レベルのプロトタイプ化に使用できる概略図形の特定から開始します。

主要な構造の特定

各アーティストはリードアーティストとの共同作業により、ゲームの特定の領域の象徴となる主要なセット仕掛け (ヒーローピース) を確定します。通常これらはプロジェクトの後半までそのまま放置されます。その理由は、メッシュ作業の大半が、ワールドの 90% を占めるモジュラーセットであるためです。

モジュラー メッシュセットの生成

LD は環境アーティストとの共同作業により、アーティストにより作成されるモジュラー ピースのセットを定義します。これには、トリムピース、ドア、窓、壁、コーナーと、それらの変形のメッシュが含まれます。

ゲームプレイのコンセプト

「コンセプト」に関しては、アートコンセプトとゲームプレイコンセプトの大きな相違点、および各コンセプトが果たす重要な役割を重く見ています。ゲームプレイ コンセプトの確立には、その初期段階で LD とプログラマーのやり取りにかなりの時間が費やされます。アートコンセプトの確立には LD とアーティストが相互に関与し、通常はゲームプレイのプロトタイプが完了するまで開始されません。

デザイナー/プログラマーの協調作業

LD はプログラマーとの共同作業により、Unreal Kismet (キスメット) と、エンジンの既存動作を組み合わせて、ゲームプレイのアイデアのプロトタイプを作成します。これは通常 Proof of Concept (POC、概念実証) レベルで行われ、レベルには開発対象のシステムを正確にテストするために必要なジオメトリとアセットしか含まれていません。プロジェクト過程において LD は現在存在しない動作を見極め、与えられた時間とゲーム プロジェクトのニーズに基づいて、それらに優先順位を割り当てます。

Kismet でのゲームプレイのプロトタイプ化

この動作は Kismet で追加するか、またはゲームコードにより提供します。多くの場合は LD が Kismet で必要な動作を作成し、プログラマーがそれを評価したり、必要に応じて効率化を行えるようにしています。

メッシュ作成

当社のアーティストは多彩なツールを駆使してキャラクターや環境の作成にあたります。

ハイポリゴン メッシュに使用するツール

初期のメッシュ作成は 3D Studio Max で行いますが、モデリングとディテールに関する大半の作業は Z-Brush に送られます。

ローポリゴン メッシュ

ローポリゴン メッシュのモデリングはほぼ 3D Studio Max だけで行われます。中解像度のメッシュを作成し、それを Z-Brush に移動してディテールを加えたり、メッシュをリファインしてローポリゴンメッシュを作成します。

UV マップのアンラップ

ローポリゴン メッシュが完成した後で、メッシュの UV マップを作成します。この作業は主に、3D Studio Max の UVMap と UnwrapUVW? モディファイヤを使って行われます。3D Studio Max 8 には 3D Studio Max 7 よりさらに高度な機能が搭載されています。

メッシュからの法線マップの作成

アーティストは、いくつかの異なる方法を使ってメッシュから法線マップを作成できます。SHTools を使ってハイポリゴンとローポリゴン メッシュを一緒に処理するのも 1 つの方法です。この方法では、至近距離にありながら相互に接着していない物 (例えば、指、肩パッド、口を構成する歯や舌などの部分) のトレーシングエラーを回避するために、メッシュが分解されることがよくあります。また、3D Studio Max 8 と Maya はどちらもメッシュ処理機能を備えているため、アーティストはそれらの方法を使用するという運にも恵まれています。

法線マップと 2 次的なバンプマップ (布地の柄など) との組み合わせは非常によく行われます。SHTools はこの組み合わせ機能をサポートしています。さらに、リベット (鋲) やボルト、かすり傷やくぼみなどの細かいディテールも、アーティストが作成したプリ処理済み法線マップのライブラリから、法線マップに合成されることがよくあります。非常に細かいディテールのうち、ポリゴンでモデル化されるものは少ないため、この方法を使用すればモデリング プロセスのスピードを上げることができます。

マテリアル作成

ディフューズとスペキュラーの作成

UV マップの作成と、法線マップの処理が済んだら、アーティストはオブジェクトまたはキャラクターのテクスチャマップの作業を開始します。これは UV マップからのレイアウトを使用して行います。ほとんどの場合、スペキュラー マップはフルカラー テクスチャで、オブジェクトまたはキャラクターの異なる部分をそれぞれ異なるマテリアル (肉、銅、鋼鉄など) から作成したように見せることができます。

Unreal エディタでのマテリアル作成

オブジェクトまたはキャラクターの主なテクスチャがほぼ完成段階に達したところで、テクスチャをエンジンにインポートし、オブジェクトのマテリアルを作成します。インポート時に DeferCompression? フラグを使用すると時間を大幅に節約できます。これは、パッケージの保存時まで DXT1 または DXT5 へのテクスチャ圧縮を遅らせるためです。最終テクスチャの実験中や調整中には、この設定によりより速くインポートすることができます。マテリアルが新規作成され、そこに新しいテクスチャをテクスチャ サンプルとして取り込み、適切なシェーダー ノード (ディフューズ、スペキュラー、法線) に関連付けます。

レベルのプロトタイプ化

コンセプトから BSP ラフ (構図) の作成

レベルデザイナー (LD) は、ゲーム環境のコンセプトアートを使い、レベルの環境テストやゲームプレイのプロトタイプ化のために必要な基本図形やレイアウトを決定します。この段階では、レベル内のいずれのジオメトリにもマテリアルが適用されていないか、またはほとんど適用されておらず、ライトの数も少ない状態です。構築物はほぼすべてが BSP プリミティブで、後から静的メッシュまたはテレインによってこれらを構成パイプライン内で置換します。最終レベルに含まれる BSP プリミティブの数は非常に少なく、最後まで残るのは、主に床や天井、シンプルな壁などに使用されるものです。

BSP ラフのパス設定

初期のパス設定は非常に単純で、すべてのプレーヤーや AI キャラクターが環境内を移動できることを確認するために主に使用します。初期のパスを設定した後で、プレイテストを開始します。

BSP ラフのプレイテスト

この時点で、BSP レベルのプレイテスト準備完了です。当初は LD とリード LD だけテストを開始し、そこからデザインチームの他のメンバーにも参加してもらい、完了までのさまざまなステートでレベルをテストします。マルチプレーヤー マップのレベルを予定している場合、テストラボでゲームプレイ セッションのスケジュールを作成し、プレイセッション後にコメントを提供します。

ゲームプレイの土台作り

これは、特定のゲームプレイ要素がこのレベルにふさわしいかどうかを決定し、スクリプティングを組み込んでからは、難易度や遭遇物やピックアップ アイテムの配置を調整する作業です。LD はこの時点でレベルを調べて、弾薬ピックアップなどのゲームプレイ オブジェクトを配置し、パス配置をさらに微調整してレベル用の基本的なスクリプト作成を開始します。

スクリプティング

Kismet を使用する前に

Epic 社では、Unreal Kismet を使用してレベルやシネマティクスに関するゲーム内の動きをほぼすべて処理しています。LD は、すべてのスクリプトを適切に配備し、スクリプト要素に関する問題を報告する義務があります。この時点で、LD はレベルまたはゲーム固有のタスクを実行するために Kismet アクションのカスタマイズも要求します。

Matinee (マチネ) を使用した経時的イベントのスクリプト作成

当社のゲーム制作において、Matinee は2 つの主要タスクを実行するのに使用されています。最初のタスクは経時的なゲームイベントのスクリプト化で、これには、ドアが開くなどの簡単なものから、一連の爆発が時間を追って発生し、それに応じてオブジェクトのマテリアルが変化したり、他の複数の Kismet イベントが発生するという複雑なものまであります。Gears で使用されたマチネの大半は、ドアなどの簡単なアクションです。

レベルへのエフェクトの追加

LD は、煙や火炎のような周辺のパーティクル エフェクトの初期的な配置のほとんどを行うほか、降りかかる砂塵など、後から Kismet を使用して起動するエフェクトの配置も行います。これらの大半は Kismet で制御され、不要になったときにはパフォーマンス上の理由からオフにできるようにしています。

メッシュ作成レベル

プレースホルダー

デザイナーは、レベルのプロトタイプ段階でプレースホルダーを頻繁に使用します。アーティストから提供された、最終メッシュのサイズや形に近いオブジェクトをよく使用します。このオブジェクトには最終メッシュと同じ名前を付けて、パッケージ内の同じ場所に置きます。これにより、アーティストが最終メッシュやマテリアルをインポートすると、プレースフォルダーが使用されていた場所に自動的にプロパゲートされます。

既存メッシュの再利用

Unreal Engine 3 では、レベル内に配置したメッシュを不均一にスケーリングすることができます。当社では、レベル組み立てにこの機能を広範に利用し、多様な方法でメッシュを使用して、テクスチャとメッシュデータの両方においてメモリのオーバーヘッドを軽減しています。例えば、ドアフレームを使ってビルのウィンドウフレームを組み立てたり、遠くの山並みに瓦礫 (がれき) の山を使用しています。

メッシュ使用の最適化

メッシュとメモリのオーバーヘッドに対する簡単な最適化方法の 1 つとして、 汎用ブラウザ の Primitive Stats (プリミティブ統計) で使用頻度の高いメッシュを特定し、それらを既に使用中のメッシュに置き換えることができます。例えば、他の柱とほとんど違わず、ゲーム環境内であまり使用されていない柱を置換することができます。これだけではメモリまたはオブジェクト単位のパフォーマンス上の変化はほとんどありませんが、他のメッシュの消去と組み合わせることで節約につながります。

ライティングとレベル

静的ライト

静的ライトは、キャラクター、物理オブジェクト、移動オブジェクトなどの動的シーン要素から独立してシーンを照らすのに使用します。環境照明として多量に使用し、L キーを押しながらサーフェスをクリックして追加します。これらのライトから生成されるシャドウは静的シャドウで、ライトマップまたはメッシュの頂点ライティングにベイクされます。これがライトのデフォルト スタイルです。

動的ライト

動的オブジェクトに影響を与える 2 種類のライトがあります。1 つは動的ライトで、これを設定するには、ライトを右クリックして "Set what this light affects" (このライトの影響を受ける対象を設定) の下のリストから `affecting only dynamic objects' (動的オブジェクトのみ) を選択します。これらの動的ライトは動的ライティング チャンネルが設定されたオブジェクトにのみ影響を与えます。デフォルトでは、このようなオブジェクトにはキャラクター、ムーバー (ドアなどの補間アクタ)、物理オブジェクトが含まれます。これらのライトは、デフォルトではシーンにコスト高の動的シャドウを投影するため、控えめに使用することをお勧めします。各動的ライトがオブジェクトに影響を与えるたびに、そのオブジェクト用に別のレンダーパスが費やされるためです。ライトの影響を受けるオブジェクトを `affecting both dynamic and static objects' (動的および静的オブジェクトの両方) に設定すると、ワールド内のすべてがライトの影響を受けます。当社のシーンではこれがメインの投影ライトで、最もコスト高なので使用の際には特に慎重に行ってください。デフォルトでは、このように設定する唯一のライトは Directional (方向) ライトタイプで、当社ではこれで太陽光をシミュレートしています。

Skylights

Skylights は、ワールドを覆う半球からのディフューズ光をシミュレートするのに使用します。これによりワールドにアンビエントライティングのレベルを提供します。使用コストはほとんどかかりません。

バウンス (跳ね返り) ライティング

Shift-L を押しながら左クリックすると、クリックした位置のピクセルの色を設定に取り込み、強度と半径が低めに設定されたライトが追加され、バウンスライトをシミュレートします。これは、より現実味を帯びたライティング結果を提供するために使用します。

変調シャドウ

デフォルトでは、シーン内で正確なシャドウを生成するために、すべての投影ライトが閉塞状態にあるかどうかを評価します。変調シャドウの使用が設定されたライトでは、代わりにシャドウ投影物のシルエットが投げ出すテクスチャを使ってシーンを変調します。深度バッファ シャドウ手法を使用する場合ほど厳密には正確ではありませんが、非常に高性能なワールドのシャドウ生成手法で、シャドウの色や強度をコントロールすることもできます。

ストリーミング

現在執筆中。

レベルからストリーミング セクションへの分割

現在執筆中。

ボリュームの使用したストリーム

現在執筆中。

メモリ統計

現在執筆中。

パフォーマンスの最適化

ライティングの最適化

Unreal Engine 3 で単体で最もコストがかかるのはライトなので、その使用はくれぐれも慎重に行ってください。ライトの最適化ツールがいくつかあり、それらのほとんどは UDN で詳細に解説されています。LevelOptimization には、ライトの最適化に関して設けられたトピックがいくつか含まれています。

メモリの最適化

UnrealEd?汎用ブラウザ には プリミティブ統計 用のタブがあり、ここに現在のレベルで使用中のすべてのメッシュのメモリ使用量が表示されます。ここで、置換可能な他のメッシュと同様または同一のメッシュがあるかどうかを調べて、メモリコストを節約します。

以下は、ゲーム中に現在のシーンを分析するコマンドの一覧です。

Stat memory - 各アセットタイプと、それらのメモリ使用量のリストを表示します。

Stat d3dscene - Direct3D 用のメモリ量統計を表示します。レンダリングされる三角形の数のほか、フレームの各種部位 (ライトを含む) をレンダリングするのに要するミリ秒単位の時間を表示します。

付録

付録 1: エンジンにアセットをインポートする

コンテンツ作成を担当するアーティストは、ほとんどの場合それらのアセットをエンジンにインポートする役目も担います。すべての静的メッシュは、3D Max の Ascii Scene Export (ASE) 形式で取り込みます。コンテンツ パッケージにインポートし、後から見つけやすいような命名規則を使用します。 テクスチャは .TGA または .BMP 形式でインポートします。Targa 形式は 24 または 32 ビットのテクスチャをサポートしますが、当社は 24 ビット テクスチャの .BMP ファイルのみ (アルファなし) をサポートしています。 また、Perforce リポジトリの 'artsource' デポにすべてのソースアセットを格納しています。

付録 2: アセットにマテリアルを割り当てる

.ase のインポート中には、オブジェクトに適用されたマテリアルが、現在エディタにロードされているマテリアルの名前と一致するかどうかを確認し、一致が見つかった場合はそのマテリアルを自動的に割り当てます。

3D Studio Max では、マテリアルに名前を付けるだけでこの設定が完了します。

オブジェクトのすべてのインスタンスのマテリアルを割り当て直したい場合は (例えばドアのマテリアルを変更する場合など)、汎用ブラウザで静的メッシュをダブルクリックし、LODInfo (LOD 情報) フィールド、[0]、マテリアルリストの順に開きます。マテリアルの変更は簡単で、変更するマテリアル項目を選択し、汎用ブラウザで新しいマテリアルを見つけて選択し、マテリアル リストにあるグリーンの矢印をクリックします。

配置されたメッシュ上のマテリアルを変更しても、そのメッシュの他のコピーには反映されません。逆にこれを利用して、メモリに追加のメッシュをロードせずにバリエーションを作成することができます。

変更したいメッシュが配置されているインスタンスを選択します。例えば、並んで配置されている 2 つのドアのうち、片方のドアのマテリアルを変更する必要があるとします。片方のドアを選択し、F4 を押して StaticMeshActor? (静的メッシュアクタ) プロパティ ウィンドウを開きます。[StaticMeshActor] 項目、[StaticMeshComponent] の順に開きます。[Rendering] (レンダリング) までスクロールして、[Materials] (マテリアル) 項目をクリックします。値はおそらく空なので、+ アイコンをクリックします。そのメッシュに適用する最初のマテリアルに対応する項目を追加します。ドアに 2 つのマテリアルが適用されていて (例えば、ベースドアに 1 つ、ウィンドウに 1 つなど)、「2 番目」のマテリアルだけ変更したい場合は、Materials 配列に追加されている 2 つの項目のうち、最初の項目をそのままにします。

次に、上記と同じ手順でメッシュに適用されているマテリアルを変更します。汎用ブラウザで新規マテリアルを見つけて選択し、次に Property (プロパティ) ウィンドウで該当するマテリアル項目を選択し、グリーンの矢印をクリックして挿入します。これで、同じメッシュを使用していいる 2 つのドアの 1 つに、他方と異なるマテリアルが適用されます。

付録 3: 物理資産

単純な衝突 (simplified collision) を含む静的メッシュのインポートに関する詳細は、衝突チュートリアル ページを参照してください。 単純衝突を含む静的メッシュを、Rigid Body (剛体、物理オブジェクト)としてワールドに追加できます。

PhAT? (物理資産ツール) を使用して作成された物理設定を含む骨格メッシュについては、PhysicsAssetTool ページを参照してください。これらはワールド内に Physics Assets として配置することができ、作用に反応して物理的に動作します。

付録 4: Physical Materials (物理的なマテリアル)

物理マテリアルとは、2 つのオブジェクトが衝突したときの、PhysX システムによる動作判定方法です。Physical Materials の説明とその仕組みの詳細については、PhysicalMaterialSystem (物理的マテリアル システム) を参照してください。

付録 5: コンソールプレイ用のクッキング。

現在執筆中。

付録 6: ソース管理機能の統合

当社では、 汎用ブラウザ にソースコントロール システム (SCC) を統合しています。これにより、エディタからコンテンツ パッケージ (レベルではありません) のチェックインおよびチェックアウトを可能にしています。ここで大切なのは、最新バージョンでないパッケージはチェックアウトできないという点です。このような場面に遭遇した場合は、チェックアウトを行う前にエディタを閉じて、パッケージを最新バージョンに同期する必要があります。

レベルのチェックインとチェックアウトはエディタの外で行います。

Epic では、内部ソースコントロール システムとして Perforce を使用しています。

付録 7: コンテンツ管理

ゲームコンテンツの管理についても、Epic は Perforce を使用しています。通常、アーティストはソースパッケージをチェックアウトし、パッケージに新しいコンテンツを追加して保存します。すべてのアーティストはほぼ毎日アクセスと更新を行い、常に最新コンテンツを手元に確保しています。パッケージがチェックアウトされているときに、そのチェックインを要求することができます。

当社では通常パッケージサイズの上限を約 150 MB として、特定の環境で上限を超えた場合は新たに規成します。

例えば、次のような環境パッケージ構造を設定しています。

COG_City:

  • COG_City_Doors
  • COG_City_Doors02
  • COG_City_Doors03
  • COG_City_Floors
  • COG_City_Floors02
  • COG_City_Floors03

命名規約およびパッケージ管理については、 アセットパイプライン ページをご覧ください。

付録 8: ビルド

現在のところ、日次ビルド スクリプトは最新バージョンのコンテンツとコードを取得し、エンジンとすべてのゲームプロジェクトをコンパイルしてこれに一意のラベルを付け、すべてのコンテンツとコンパイルしたバイナリをチェックインしてから、プロジェクト チーム宛に新規バージョンが利用可能になったことを通知するメールを作成します。アーティストやデザイナー全員のシステムにはバッチファイルがあり、これを使用して最新の完全ビルドと同期をとることができます。これにより、作業中のビルドのバージョンで混乱が起きることはありません。