This is the documentation for Enlighten.

6.1.2. メッシュ オブジェクト


メッシュ オブジェクトを構築するには、IPrecompInputMesh 型のオブジェクトを作成します。メンバー関数を使用して、頂点とフェースを追加します。

予期しない動作を防ぐため、常に使用していないオプションのフィールドを 0 に初期化してください。

頂点

Enlighten では、ワールド内のメッシュの頂点はメッシュの原点との相対的な位置として指定されると想定しています。頂点の位置をワールド空間に変換する必要はありません。

それぞれの PrecompInputVertex には、以下の 4 つの属性があります。

  • Position: ローカルの位置。
  • Normal: 頂点法線。
  • Chart UV: チャートを形成するときに使用する入力 UV 座標。
  • オプション:Albedo UV: メッシュをレンダリングするときに使用するマテリアル UV 座標。

コードを簡素化するには、各頂点の座標値がレンダリングされたメッシュと同じものを使用します。パイプラインで後から頂点を並べ替える必要がないよう、レンダリングされたメッシュの各頂点に同じ順番で頂点を 1 つずつ追加します。

フェース

それぞれの PrecompInputFace は、頂点配列の 3 つのインデックスと、マテリアル ID を含みます。

Enlighten では、頂点法線を使用して自動的に各三角のフロント フェースの向きを判断します。確実にフロント フェースとバック フェースが正しく扱われるよう、想定されるワインディング順でインデックスを指定します。ワールドで右手座標系が使用されている場合は、反時計回りのワインディング順を使い、そうでない場合は時計回りのワインディング順を使います。ワインディング順を変更するには、三角のいずれか 2 つのインデックスを入れ替えます。

PrecompInputFacem_AlbedoId は任意のフィールドであり、すべての三角で 0 にできます。

メッシュ ファイル

Geo::SaveInterface 関数を使用してオブジェクトをディスクに保存します。.pim 拡張子のファイル名を使用します。

メッシュ LOD を使用する場合は、それぞれの詳細レベルのメッシュ データを別々の .pim ファイルに保存します。

マテリアル

メッシュの特定のラジオシティ プロパティは、マテリアルを使用して制御できます。デフォルトで、すべてのメッシュはバックフェースが無効で不透明として取り扱われます。

すぐに使用する場合、シーンの記述でマテリアル情報を省略することができます。

マテリアル情報を入力するには、.mats ファイル を作成し、id が 0 の material 要素を作成します。

単一のマテリアル
<?xml version="1.0" encoding="utf-8"?>
<materials version="1">
    <material id="0"/>
</materials>

メッシュのすべてのフェースが同じプロパティを持つ場合、上の例のように m_AlbedoId と material id 属性の両方で 0 を使用します。

メッシュが複数の部分で構成されており、それぞれに異なるプロパティを割り当てられる場合、フェースをなるべく少ないグループにグループ化し、各グループに連続するインデックスを付与します (0、1、2、…)。

PrecompInputFacem_AlbedoId フィールドをグループのインデックスに設定します。各グループに material 要素を追加し、グループ インデックスに id 属性を設定します。

ファイルは、メッシュ オブジェクト同名で、拡張子が .mats のファイルとして同じフォルダーに保存します。

マテリアル属性

サーフェスとラジオシティのインタラクションに影響を与える各マテリアル属性を任意に指定できます。

backfaceBehaviourType 属性はサーフェスの後面の扱いを制御します。

  • invalid — このサーフェスの後面を「見る」ことができるサーフェスでライティングが無効になります。これがデフォルトです。
  • black — このサーフェスの後面は黒色であるかのように、入射光をすべて吸収します。
  • doublesided — このサーフェスの前面と後面はどちらも入射光の半分を透過し、残りを反射します。
  • transparent — 入射光はすべてこのサーフェスの後面を透過します。

shadowfaceBehaviourType 属性は、サーフェスと直接シャドウのインタラクションを制御します。

  • front — フロント フェースが直接シャドウを投影します。
  • back — バック フェースが直接シャドウを投影します。
  • both — フロント フェースとバック フェースの両方が直接シャドウを投影します。

 シャドウとフェースの作用タイプは、太陽のような指向性光源のプリコンピュートされたシャドウに影響を与えます。

Indirect transparency/reflectivity: マテリアルによって透過、反射する間接光の割合です。物理的にもっともらしい結果を得るためには、両方の値が [0, 1] の範囲に収まり、合計が 1 となるようにします。

Is Emissive:可能な限り、実行時に光を発するマテリアルでは true に設定します。これにより、特に小さなエミッシブ サーフェスでバウンスライトとローカル反射の両方の精度を高めることができます。また、エミッシブ サーフェスの境界におけるローカル反射プローブの不要な平滑化も防ぎます。

.mats 形式で定義されるその他の material 要素は、シーンが GeoRadiosityまたは GeoViewerにロードされたときにメッシュがどのようにレンダリングされるかを制御します。

通常の Enlighten の実行では、これらの要素を追加する必要はありません。