レイヤー化した地表面の表現 日本語訳

原題 : Layered Terrain Surface Representation
原文 : http://community.bistudio.com/wiki/Layered_Terrain_Surface_Representation
翻訳時期 : 2008 Aug


はじめに

全世界を覆った1組(サテライトマップとレイヤーマップ)のテクスチャによって、全世界への地形のサーフェイスを表現します。
その両方のテクスチャはPNG形式を使用し、Visitorにインポートするとそれらのテクスチャを区画に分割するようになっています。その変換の際に、Layer MapをLayer Maskに変換します。
各区画は、地形をストリーミングできるよう、隣り合わせになる部分をオーバーラップさせます。Satellite Mapは遠方の地形を表示するための基本色情報を提供します。

注意:このインポート作業は、巨大なデータを処理するためとても時間がかかります。20km x 20kmの解像度のマップをインポートする場合、2GHzのPCで約10時間かかりました。マップの小さい部分だけを編集するなら増えた分を変換します。この繰り返しは速いのですが、それでもまだ約1時間程度掛かかるかもしれません。(結果をチェックするためにBuldozerが起動するのにおよそ15分かかります)。 最初に小さなマップのサーフェイスになるように調整し、結果に満足してから、大きい方の作業に入ってください。

Layer Legend -レイヤーの凡例-

Legend(凡例)は、画像に対し、RGB情報をレイヤーに変換することを定義したコンフィグ情報が紐づきます。つまりサーフェイスのタイプを色で表現したコンフィグを定義します。複数のタイプのサーフェイスを馴染ませるようにブレンドして生成された複数の色を使って、ひとつのサーフェイスタイプを表現することが出来ます。画像の最初の行だけを読みこんで、残りは無視して、注釈に使用できます。

legendファイルの読み込みにはいくつかの制限があります。画像の中で無色は2つまで存在することが出来ます。このサンプルのlegendファイルは、Photoshopを使って、両端を白と黒にし、その上で虹色にグラデーションをかけて作成しました。

Layer Legend -レイヤーの凡例-

この凡例のために基本的なサーフェイスについて記述するコンフィグは、これと似てしまうかもしれません(下のコンフィグ文は、レイヤーのコンフィグの抜粋です):

class Legend
{
picture="layertest\src\mapLegend.png";
class Colors
{
/// 色の名称は、サーフェイスレイヤーの名称に一致させます
snow[]={{255,255,255}};
wetSand[]={{0,0,0}};
grass[]={{0,255,131},{255,255,0}};
sand[]={{207,115,0}};
rock[]={{0,255,255},{121,255,0}};
mud[]={{0,255,0}};
}
};

Layer Map -レイヤーマップ-

レイヤーマップは、RGB画像として編集します。マップ画像の各ピクセルは、次のとおり解釈されます:

  • Legend(凡例)から最適な色のマッチングが探し出します
  • 左右に近接する基本サーフェイスを基にして、調和するようにブレンドされたサーフェイスが使用されます
レイヤーマップ
サテライトマップ

レイヤーマップのConfigへの記述方法について、以下に示します。これはLegendの定義に使われ、基本サーフェイスのサーフェイスマテリアル(質感)を定義するものです。サーフェイスマテリアルは、テクスチャが同一のものを参照する場合を除き、ひとつのレイヤーマップが必要とする全てのパラメータとして使用されるものです。テクスチャはSRGBの色変換を使うべきではなく、_lco形式のテクスチャタイプを使うべきです。

class Layers
{
class Grass
{
texture="layertest\data\grass_lco.paa";
material="layertest\data\grass.rvmat";
};
class Sand
{
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1)";
material="layertest\data\sand.rvmat";
};
class Rock
{
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1)";
material="layertest\data\rock.rvmat";
};
class Mud
{
texture = "#(argb,8,8,3)color(0.5,0.5,0.5,1)";
material="layertest\data\mud.rvmat";
};
};
class Legend
{
// 上を参照
};

レイヤーマップとサテライトマップの編集

テクスチャフォルダは、VisitorのLayerTest\Dataにあるものとして定義します。全てのソースファイルは、特に指定がなければLayerTest\Sourceにあるものとします。

準備:

  • legend(凡例)画像ファイルの作成
  • legendの使用とサーフェイスを定義したConfigファイル(layers.cfg)の作成
  • 「Tool」「Project Preferences」にて、サテライトマップのセグメント(区画)サイズを決定します。テクスチャ同士を繋ぐため、セグメントは少しだけ重なります。綺麗に重ねるためのサイズは約16テクセルです。サテライトマップのセグメントサイズは、基本ランドスケイプ(景観)グリッドの倍が与えられます。

例: 島のマップサイズを10,240 x 10,240とし、グリッド間隔を40m(256 x 256グリッド)とした場合、サテライトテクスチャの解像度は7,680 x 7,680はとなり(ひとつのランドスケイプグリッドは、テクセル全体を覆うこうを必要としますが、サテライトテクスチャのサイズはマップサイズの倍を必要とします)512 x 512テクセルのセグメントサイズにしようとするなら、16テクセルの重なりを欲しいので、1つのセグメントのテクセルサイズが覆うのは496 x 496テクセルになります。
この場合、ひとつのテクセルサイズは、10,240m÷7,680(1.3333m)となり、496テクセルに661.33mが割り当てられます。
40mグリッドなら、周辺に16が与えられるので661.33÷40 = 16.5になります。
もしもテクスチャのグリッドが地形グリッドと異なるならば、周辺を覆うのに十分ではありません。地形グリッドの倍のテクスチャグリッドが接合部を作るのに必要となります。
地形グリッドは10、テクスチャグリッドは40としたサテライトセグメント(区画)が4の倍数分必要となります。

編集サイクル:(編集は通常はBuldozerと一緒にPhotoshopで行わないと動きません)

  • Photoshopでのサテライトマップの編集(ファイル名:Satellite-map_lco.png)注意:テクスチャのタイプは_lco又はdraftlcoである必要があります
  • Photoshopでのレイヤーマップの編集(ファイル名:Layer-map_lco.png)注意:テクスチャのタイプは_lco又はdraftlcoである必要があります
  • 「Tool」-「Import Satellite + Mask」を開き、ファイル閲覧画面から Satellite-map_lco.png、Layers.cfg、Layer-map_lco.pngを選択します
  • Buldozerを起動し、結果を確認してください

テクスチャ

各地形タイプは、カラーマップ(CO)のテクスチャとノーマルマップ(NO*)によって距離が表現されます。SaraLiteでは、それぞれ1,024 x 1,024ピクセルで4mをカバーしています。レイヤーマスクのそれぞれのピクセルは、約2mをカバーしています。

地形タイプは、MCOテクスチャにも関連付けられます。これは詳細な中間距離を提供するサテライトマップの倍の大きさのグレースケールのテクスチャです。
SaraLiteでは、それぞれ1,024 x 1,024のMCOテクスチャが1つの地形テクスチャのグリッドセルサイズである40mをカバーしています。ひとつのテクスチャグリッドとしてエンジンが地形テクスチャを読み込みます。
各セグメントは、12×12のテクスチャグリッドと32ピクセルの重なりを足して作られています。

ゲームエンジンに関する注意

この情報は、ArmAのゲームエンジンよりもむしろツールの使い方に関するレイヤーマップについて述べるものです。
レイヤーマップの各セグメントをゲームエンジンが使用するため、”Layer Legend”が言及する上記の事項に関連付けられないそれら自身のパレットを使用します。
コンフィグで定義された各地形タイプをベースとした配色を、各地形タイプのセグメントは使用します。なお使用される配色は次のとおりです: 黒(000000)、赤(FF0000)、緑(00FF00)、青(0000FF)。

この地形タイプを定義する方法では、各セグメントは最大で4つの異なる地形タイプとして限定します。全ての4つの地形タイプはレイヤーマップのピクセル(Sahraniでは2m x 2m)の中で一緒にブレンドすることができますが、たまにしかブレンドは使われません。
地面のクラッター(岩、草など)は面積の多い地形タイプをベースに配置して描画するからです。

各セグメント用のいくつかのRVMATコンフィグがあり、ピクセルシェーダーIDによって各々が定義されます。ひとつのセグメントが要求するRVMATと一緒に各テクスチャグリッドを地形のコンビネーションがタイプ分けします。


免責事項 : 個人的に訳した文書ですので、もし翻訳された文章により何らかの損害、不利益が発生したとしても、一切の責任は負いませんのでその点をご留意の上お読みください。また原文に記載されている権利に基づき、利用にあたっては非商用利用にのみに限定されていますのでご注意ください。