UDN
Search public documentation:

TerrainAlphamapsJP
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

UE3 ホーム > テレイン システム > テレインのアルファマップ : 外部で作成したテクスチャレイヤ用アルファマップの使用について


テレインのアルファマップ: 外部で作成したテクスチャレイヤ用アルファマップの使用について


テレインの概要


基本的には、テレイン (地勢) とは平坦な 3D メッシュオブジェクトで、そのサイズは x*y の頂点数で表されます。実際にレンダリングされるクワッド面の数は「x-1 * y-1」なので、サイズが 256x256 のテレインには、寸法サイズで 257x257 のハイト (高さ) マップが必要です。[Terrain Properties] (テレインのプロパティ) ダイアログでは、テレインのサイズをパッチ数またはクワッド面の数 (NumPatchesX および NumPatchesY) で指定しますが、これは「頂点数 -1」に相当します。

アルファマップの概要


テレイン上で、例えば泥、草、岩、のような複数のテクスチャの階層化をサポートするには、各レイヤに アルファマップ を使用し、テレイン上のどこでテクスチャをブレンドするかを決定します。このアルファマップは、各テクスチャのウェイトを定義することから ウェイトマップ とも呼ばれています。アルファマップは、本質的には画像のアルファチャンネルに似たグレースケールのマスクです。

各テレイン レイヤのアルファマップは、その下にあるテレインのハイトマップまたはメッシュと同じ寸法サイズで、アルファマップの 1 ピクセルは、テレインの 1 つの頂点に相当します。そのため、テクスチャ レイヤ間のブレンドは、テレイン メッシュの頂点間の距離の制約を受けます。つまり、128x128 のテレインは、固定ブレンドで 129x129 ピクセルのアルファマップをサポートします。テレインの DrawScale3D.X/.Y の値により、各ブレンド領域のサイズが決定します。DrawScale3D.X/.Y が 256 の場合、テレイン テクスチャ レイヤーのブレンドサイズは 256 Unreal Units になります。言い換えると、アルファマップの 1 ピクセルはテレイン上のサイズの DrawScale3D.X/.Y に相当します。

TerrainAlphamap.gif

各アルファマップのピクセル値により、テレイン上の同等数の頂点に適用されるテクスチャの不透明ブレンドの割合が決まります。1 対 1 の対応ブレンド値を提供するために、アルファマップの解像度をハイトマップと同じにしなければならないのはこのためです。 エンジンがテレインの三角形をレンダリングするときは、レイヤのアルファマップの各行と各列を順に読み取り、ハイトマップの各頂点ごとに各テクスチャのブレンド値を取得します。 アルファマップ値が 0 (ブラック) の場合、その頂点位置ではテクスチャ ブレンドが発生せず、127 (グレー) の場合は 50% のテクスチャ ブレンド、255 (ホワイト) の場合は 100% のテクスチャ ブレンドになります。

VertexAlphaBlend.gif

テレインメッシュの頂点間で発生するテクスチャ ブレンドは、線形グラデーションであり、急激な変更ではありません。つまり、テクスチャレイヤはその下のテクスチャの頂点から頂点へと滑らかにブレンドしていきます。次図の単純なテレイン三角形のペア (クワッド) のサンプル画像では、左上のテレイン頂点に完全ホワイトのアルファマップ値 (255) が対応しているのに対し、他の 2 つの三角形の頂点には完全ブラックのアルファマップ値 (0) が対応しています。このテクスチャ レイヤはテレイン三角形のサーフェス上の頂点から頂点に向かって滑らかにブレンドします。この例では、下のテクスチャはブルー、上に重ねるテクスチャはイエローなので、ホワイトのアルファマップ値はイエローを 100%、ブラックのアルファマップ値はブルーを 100% カラーレンダリングします。三角形のサーフェスは、常にイエローからブルーへの滑らかなグラデーションを示します。

TriangleVertexBlend.gif

Unreal Engine 3 のテレインシステムでは、ハイトマップとアルファマップのいずれも [[GenericBrowserRefereceJP][汎用ブラウザ] に表示されません。これは、旧バージョンのエンジンと異なる点です。

テレイン レイヤのセットアップ


Unreal Engine 3 のテレインシステムでは、TerrainLayerSetup オブジェクトの Height (高さ) と Slope (傾斜) プロパティを使用することで、最も一般的なテレイン テクスチャの階層化スタイルの基本要件に対応しています。これらは 手続き型レイヤ セットアップ (procedural layer setups) と呼ばれています。

次の TerrainLayerSetup の例では、テレインの階層化を 2 つのレイヤで構成し、下位レイヤ [1] は固体のベースレイヤに設定し、上位レイヤ [0] の傾斜を 0 ~ 45 度に制約しています (MaxSlope.Enabled = True、MaxSlope.Base = 0.5、ここで 0.5 = 45 度 の意味)。これは、草地を伴う平地のテクスチャを模倣しています。

UE3TLSetup.gif

TerrainLayerSetup に複数の項目が存在する場合、それらは下から上に向かって重ねられる点に注意してください。つまり、テクスチャレイヤは下から (項目番号が最上位のものから) 上に向かって (項目番号 [0]) レンダリング処理されます。上図の TerrainLayerSetup の例では、項目 [0] は項目 [1] の上に処理されます。

手続き型の TerrainLayerSetup により、平地 (高さを使用)、断がい (傾斜を使用)、雪をかぶった山頂 (高さを使用) などの階層化スタイルをテレインに簡単に提供することができます。ただし、山の尾根や河川による切断など、より複雑な地質組織の階層化は作成できません。また、地質系統の全域にわたって高さと傾斜が変動する可能性がある川や道の蛇行のテクスチャレイヤも作成できません。このようなより複雑なテクスチャレイヤ タイプについては、UnrealEd で手動でレイヤを描き込むか、外部で作成したアルファマップ ファイルの使用をお勧めします。

注意: テクスチャ レイヤを手描きする場合、または外部作成のアルファマップをレイヤにインポートする場合は、TerrainLayerSetup をシングル レイヤ スタイルにする必要があります。手続き型のマルチレイヤ スタイルは使用できません。

山の尾根 (専門用語では Dendritic (樹枝状、分岐する形) の尾根と Stratigraphic (層序的、柱状) の尾根) は、風化作用によりむき出しになった非浸食性の硬い岩石です。河川による切断は、山間を流れる川などの水流の浸食により生じます。このチュートリアルで使用するテレイン アルファマップのサンプルでは、尾根のテクスチャの地質学上タイプが示されています。

外部アルファマップの作成


外部アルファマップは、サードパーティのテレインハイトマップ制作ソフトウェアを使用するか、または腕のいいアーティストが描画ソフトウェアを使って作成します。

サードパーティのテレインハイトマップ制作用ソフトウェア アプリケーションは、HMES、Leveller、Terragen、World Machine など多数あります。各アプリケーションによって、生成可能なハイトマップ/アルファマップのスタイルと、それらをアルゴリズム的に生成する機能が異なります。ここでは特定のパッケージを推薦していません。テレインの社内開発に何を使用するかは、スタジオのアートリードの判断に委ねられています。

アーティストとしては、アルファマップの手描きソフトウェア アプリケーションとして最も一般的なのはおそらく Adobe PhotoShop で、Corel PhotoPaint、PaintShopPro などの他社のペイントソフトウェアなどがそれに続きます。

アルファマップを手描きする場合はアルファチャンネル マスクの作成と同様で、ブラックを背景に、表示されるテレイン テクスチャ レイヤをホワイトでブラシ描画します。アルゴリズム的に生成されたアルファマップを使用する利点は、通常これらは実際のテレインのハイトマップと一緒に作成できるので、かなりの時間を節約できるほか、アーティストが手動で複製するのが困難な複雑なデザインでも生成できる点にあります。

このチュートリアルでは外部アルファマップの作成方法すべてを網羅していません。作成方法は現在のスタジオのアートパイプラインによって異なるものであり、アート部門またはレベルデザイナーがハイトマップとアルファマップの作成を手動で行うか、サードパーティ ソフトウェアを使用するかによって異なります。このチュートリアル用に作成されたテレインハイトマップとアルファマップのサンプルは、1 つのアプリケーションでアルゴリズム手法で開発されたものです。

外部アルファマップの形式


外部アルファマップ ファイルは、マスクまたはアルファチャンネルに似た 8 ビットのグレースケール画像で、ブラックが 100% 半透明、ホワイトが 100% 不透明、間のグレー段階がさまざまな半透明の程度を表します。UnrealEd でアルファマップをインポートするために必要な実際のファイル形式は、外部ハイトマップのファイル形式と同様の G16 .bmp 形式です。ハイトマップを使用したり、ペイントソフトウェアを使用して 8 ビットのグレースケール ビットマップとして外部アルファマップを作成することもできますが、アルファマップを UnrealEd にインポートする前に G16 形式のファイルに変換する必要があります。つまり、データの 8 ビットを 16 ビット (*256 または <<8) になるように乗算する必要があります。G16 アルファマップの 16 ビット データを UnrealEd にインポートすると、自動的に元の 8 ビットに変換されます。Raw-16 などの 16 ビット形式をサポートするソフトウェアでアルファマップが作成されている場合は、これを G16 に変換するだけで直接使用することができ、データの乗算は必要ありません。

外部アルファマップ ファイルは、常にテレインの寸法サイズの「Terrain.NumPatchesX +1 * Terrain.NumPatchesY +1」でなければなりません。例えば、128x128 のテレインにはサイズが 129x129 のアルファマップ、256x256 のテレインには 257x257 のアルファマップが必要です。不適切なサイズのアルファマップをインポートしようとすると、エラーが発生します。

アルファマップをアルゴリズム的に生成するソフトウェア アプリケーションが 2 のべき乗サイズしかサポートしない場合は、アルファマップ画像を編集し、縁にピクセル行および列を列を追加して正しい解像度に調整する必要があります。UE3 の UnrealEd では、アルファマップは左上に揃えられるので、テレインメッシュの行および列数と同じになるようにアルファマップの右側と下側に 1 行および 1 列を追加することがよくあります。

作成されたアルファマップのファイル形式に応じて、16 ビットに乗算したり、G16 に変換する必要が生じます。G16 への変換をサポートする多数のサードパーティ ツールがあります (G16Ed や HMCS など)。

外部アルファマップを使用したテレインの例


次のハイトマップは、UnrealEd テレインとして使用するためにソフトウェア アプリケーションを組み合わせて作成し、Raw-16 で保存してから G16 に変換しました。

HMCSHeightmap.gif

カスタムの「尾根」部分のアルファマップは、ハイトマップと一緒にアルゴリズム的に作成し、Raw-16 で保存してから、ペイントソフトウェアで編集できるように 16 ビットのグレースケール TIF に変換しました。これは元の Raw-16 アルファマップです。

HMCSAlphamap.gif

TIF-16 アルファマップをペイントソフトウェアで編集しました。複数のパスの輝度とコントラストを組み合わせ、明るさのカーブレベルを上げてから、TIF-16 として保存し、UnrealEd にインポートできるように再度 G16 に変換しました。UE3 用の UnrealEd は、以前の Unreal Enging バージョンよりもコントラストを高くして、通常は Unreal Engine 2 または 2.5 で作成されたアルファマップより強める必要があります。 最終的な TIF-16 はこのようになります。

AlphamapFinal.gif

外部アルファマップを使用したサンプル テレインの作成


以下は、カスタムの外部アルファマップを使ってテレインを新規作成する手順です。

UE3 のテレイン セットアップ、およびアルゴリズム処理されたテレインのインポートに関する追加詳細については、UDN テレイン関連のトピック を参照してください。

1. 新規マップにテレイン アクタを挿入します。Terrain.NumPatchesX と Terrain.NumPatchesY を、「カスタムのハイトマップ (G16 ファイル) のサイズ -1」 に設定し、ハイトマップをインポートします。

2. 太陽光をシミュレートする DirectionalLight を挿入します。Movement.Rotation.Pitch を -45 度に変更します。

3. 下草用の TerrainMaterial を新規作成します。適切なテクスチャを割り当てます。

4. 尾根の岩肌用の TerrainMaterial を新規作成します。適切なテクスチャを割り当てます。

5. 下草のテクスチャ レイヤの TerrainLayerSetup を新規作成します。注意: 必要に応じて (例えば、0 から 30 度の範囲を泥層と草原にするなど)、これをマルチレイヤの手続き型セットアップにすることもできます。

6. 尾根の岩肌のテクスチャ レイヤ用の TerrainLayerSetup を新規作成します。注意: これは、別々のシングルレイヤ セットアップにしなければなりません。マルチレイヤの手続き型セットアップは外部アルファマップのインポートをサポートしていません。

7. 2 つの TerrainLayerSetups をテレイン アクタの Terrain.Layers 配列に追加します。注意: 各レイヤはこのダイアログの配列リストの [0] から上に向かってレンダリングされます。つまり、[0] がベースレイヤで、高位のレイヤはすべてその上にレンダリングされます。

UE3TerrainProperties.gif

8. Terrain Edit (テレイン編集) モードに切り替え、 Terrain Edit ダイアログを表示します。[Import/Export] (インポート/エクスポート) グループで、[Height Map Only] (ハイトマップのみ) と [Into Current] (現在の選択項目) チェックボックスを選択し、選択されているテレインレイヤにインポートされるようにします。[Class] (クラス) ドロップダウン コンボボックスで、インポートする G16 .bmp である G16BMPT3D を選択します。カスタムのアルファマップを取り込む尾根部分の TerrainLayerSetup を選択してから (ダイアログ上では黄色の選択カラーで示されます)、[Import] (インポート) ボタンを選択します。ファイル選択ダイアログで外部 G16 アルファマップ ファイルの保存場所まで移動し、これを開きます。アルファマップ ファイルに不正なファイル形式またはファイル寸法などの問題がなければ、アルファマップがテレイン セットアップにロードされ、選択したレイヤに適用されます。[Recache Terrain Materials] (テレインマテリアルを再キャッシュ) ボタンをクリックし、ビューポートでテレインの表示を更新しなければならない場合があります。注意: この例では、 Base (土台) の TerrainLayerSetup は泥と草のマルチレイヤの手続き型セットアップで、アイコン上に "P" で示され、アルファマップのインポート先である 尾根 部分の TerrainLayerSetup はその下に位置しています。

UE3TerrainEditImport.gif

UnrealEd で [Build All] (すべてビルド) を選択した後、最終的なテレインは次のようになります。岩尾根になっているのがわかります。

UE3TerrainFinal.jpg