9.おまけ HairBladeはカスタムシェイプの形状データ以外のすべての情報をポリゴンタグとVMAPに保持しているため、LScriptやプラグイン等から自由に参照、編集することが可能です。 実際にVMAPがどのように設定されているかは、HairBladeの頂点を選択して情報パネルを表示するとよくわかるでしょう。 以下にHairBladeで使用しているポリゴンタグ、VMAPのIDと値を説明します。 |
a.ポリゴンタグ
ID : HBCP 設定文字列 : "00", "01", "10", "11" のいずれか モデラーカーブの開始、終了コントロールポイントと同様の意味を持ちます。 設定文字列は2バイトの0と1の組み合わせで、1バイト目が開始コントロールポイントの有無(0:無, 1:有)、 2バイト目が終了コントロールポイントの有無となります。 ID : HBUV 設定文字列 : マップ名(最大250バイト) BladeFreezeなどでUVを生成するときのマップ名となります。 |
b.VMAP
ID : BLDC 要素数 : 6 設定値
ID : BLDG 要素数 : 4 設定値
ID : BLDA 要素数 : 4 設定値
ID : BLDM 要素数 : 10 設定値
BLDMについては、先頭ポイントを含むすべてのポイントに設定する必要があります。 また、VMAPの名称はすべて"HairBlade.Params"を使用してください。 これらのIDを実際に使用する場合は以下のようなヘッダファイルに定義します。 /* * hairblade.h */ #ifndef HAIRBLADE_H #define HAIRBLADE_H // ポリゴンタグ --------------------------------------------------------------- // HairBladeポリゴンタイプ #define PTYP_BLADE LWID_('H','B','L','D') // コントロールポイントタグ #define PTAG_BLADE_CP LWID_('H','B','C','P') // UVマップ名タグ #define PTAG_BLADE_UV LWID_('H','B','U','V') // VMAP関連 -------------------------------------------------------------------- // HairBlade内部パラメータVMAP名 #define VMAP_BLADE "HairBlade.Params" // 開始点用コントロール定義 #define MTYP_BLADE_CTRL LWID_('B','L','D','C') // 開始点用シェイプ定義 #define MTYP_BLADE_GEOM LWID_('B','L','D','G') // 開始点用グローバル変形定義 #define MTYP_BLADE_GLB_MOD LWID_('B','L','D','A') // ポイント用変形定義 #define MTYP_BLADE_MOD LWID_('B','L','D','M') // 各VMAPのサイズ #define VSIZE_BLADE_CTRL 6 #define VSIZE_BLADE_GEOM 4 #define VSIZE_BLADE_GLB_MOD 4 #define VSIZE_BLADE_MOD 10 // 最大VMAPサイズ #define VSIZE_MAX 10 #endif 実際に使用して選択したHairBladeのバンク角をリセットするMeshDataEditプラグインは以下のようになります。 (アクティベーション関数やチェック処理は省略、polyScanコールバックの一部分です。) XCALL_(static EDError) polscan(MeshEditOp *edit, const EDPolygonInfo *pi ) { float vmapVal[VSIZE_MAX]; int i; // 先頭ポイントからグローバル変形情報取得 if(edit->pointVSet(edit->state, NULL , MTYP_BLADE_GLB_MOD, VMAP_BLADE)) { if(edit->pointVGet(edit->state, pi->points[0], vmapVal)) { // バンク角、ツイスト角を0.0にセットしてVMAPに書き戻す vmapVal[2] = vmapVal[3] = 0.0; edit->pntVMap(edit->state, pi->points[0], MTYP_BLADE_GLB_MOD, VMAP_BLADE, VSIZE_BLADE_GLB_MOD, vmapVal); } } // 各ポイントの変形情報のリセット for(i = 0; i < pi->numPnts; i++) { if(edit->pointVSet(edit->state, NULL , MTYP_BLADE_MOD, VMAP_BLADE)) { if(edit->pointVGet(edit->state, pi->points[i], vmapVal)) { vmapVal[4] = 0.0; edit->pntVMap(edit->state, pi->points[i], MTYP_BLADE_MOD, VMAP_BLADE, VSIZE_BLADE_MOD, vmapVal); } } } } もし、まったく新規にHairBladeを作成したい場合、つまりはCurveToBladeの代替機能を作成したい場合は、ポリゴンタイプIDとして"HBLD"を指定してください。 このIDを使用し、適切にVMAPを設定すれば後は通常のポリゴン作成となんら変わらず、MeshDataEdit等で各頂点にVMAPを設定した後、 polID = edit->addPoly(edit->state, PTYP_BLADE, pi->pol, NULL, pi->numPnts, pi->points); とすれば作成することができます。 |