//---------------------------------------------------------------------------
//  nnMaterialAttribute.mel
//
//  Copyright (C) 2002 - 2008 Creative Center Graphics Section
//  All Rights Reserved.
//
//  Module  : nnMaterialAttribute
//  File    : nnMaterialAttribute.mel
//  Create  : 2002/08/07
//  Modify  : 2003/06/17
//          : 2003/10/21 : XBOX対応
//          : 2003/11/13 : Double Side Polygon Attribute対応
//          : 2003/12/27 : Maya6.0対応
//          : 2004/03/30 : α比較、Ｚ比較関連変更
//          : 2004/05/13 : XBox版Texture StageにSPECULAR追加
//          : 2004/05/27 : Diable Fogging追加
//          :            : GC版Texture StageにSPECULAR MAP追加
//          :            : GC,Xbox版Texture StageにSPECULAR2,ADD,SUBTRACT追加
//          : 2004/06/18 : Light Stage追加
//          : 2004/06/29 : Xbox ２面ライティングオプション対応
//          : 2004/08/11 : PS2 αテスト失敗時の処理にAUTO追加
//          : 2004/09/13 : Xbox Texture StageにAUTO追加
//          :            : Xbox Texture Filter関連属性の追加
//          : 2004/11/29 : Lindberg版ファーストリリース
//          : 2005/03/16 : 多機種対応
//          : 2005/06/06 : PSP版2枚張り対応
//          : 2005/06/10 : 第2頂点カラー対応
//          : 2008/07/28 : DirectX G2.0版対応
//  Version : 1.18.23
//  Note    : nnMaterialAttribute
//
//---------------------------------------------------------------------------

// NN Material Attributeバージョン情報
global string $nnMaterialAttributeVersion = "1.18.23";

// NN PS2 プラグインロード情報取得
global proc int nnPS2GetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for PlayStation2             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for PlayStation2             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for PlayStation2            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNPS2"`                                   ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for PlayStation2          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNPS2"`                                 ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for PlayStation2          "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN GC プラグインロード情報取得
global proc int nnGCGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for GAMECUBE                 "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for GAMECUBE                 "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for GAMECUBE                "` ||
				 `pluginInfo -query -loaded "MAYA85toNNGC"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for GAMECUBE              "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNGC"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for GAMECUBE              "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN Xbox プラグインロード情報取得
global proc int nnXBGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for DirectX G1.1             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for DirectX G1.1             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for DirectX G1.1            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNXB"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for DirectX G1.1          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNXB"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for DirectX G1.1          "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN Lindberghプラグインロード情報取得
global proc int nnLBGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for Lindbergh                "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for Lindbergh                "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for Lindbergh               "` ||
				 `pluginInfo -query -loaded "MAYA85toNNLB"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for Lindbergh             "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNLB"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for Lindbergh             "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN PSPプラグインロード情報取得
global proc int nnPSPGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for PSP                      "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for PSP                      "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for PSP                     "` ||
				 `pluginInfo -query -loaded "MAYA85toNNPSP"`                                   ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for PSP                   "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNPSP"`                                 ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for PSP                   "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}

// NN DENSO Telematics 06Modelプラグインロード情報取得
/********
global proc int nnDT06GetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA4 NN Exporter for DENSO Telematics 06Model "` ||
				 `pluginInfo -query -loaded "MAYA45 NN Exporter for DENSO Telematics 06Model"` ||
				 `pluginInfo -query -loaded "MAYA5 NN Exporter for DENSO Telematics 06Model "` ||
				 `pluginInfo -query -loaded "MAYA6 NN Exporter for DENSO Telematics 06Model "` ||
				 `pluginInfo -query -loaded "MAYA65 NN Exporter for DENSO Telematics 06Model"` ||
				 `pluginInfo -query -loaded "MAYA7 NN Exporter for DENSO Telematics 06Model "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for DENSO Telematics 06Model "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for DENSO Telematics 06Model"` ||
				 `pluginInfo -query -loaded "MAYA85toNNDT06"`                                  ||
				 `pluginInfo -query -loaded "MAYA4 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA45 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA5 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA6 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA65 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` );
	return $info;
}
********/

// NN XENONプラグインロード情報取得
global proc int nnXENONGetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for XBOX360                  "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for XBOX360                  "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for XBOX360                 "` ||
				 `pluginInfo -query -loaded "MAYA85toNNXB360"`                                 ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for XBOX360               "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNXB360"`                               ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for XBOX360               "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}

// NN DirectX G2.0プラグインロード情報取得
global proc int nnDXG2GetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for DirectX G2.0             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for DirectX G2.0             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for DirectX G2.0            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNDXG2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for DirectX G2.0          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNDXG2"`                                ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for DirectX G2.0          "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}
// NN PS3プラグインロード情報取得
global proc int nnPS3GetPluginInfoMayaNNExporter()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for PlayStation3             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for PlayStation3             "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for PlayStation3            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNPS3"`                                   ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for PlayStation3          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNPS3"`                                 ||
				 `pluginInfo -query -loaded "MAYA2009 NN Exporter for PlayStation3          "` ||

				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   ||
				 `pluginInfo -query -loaded "MAYA2009 HND Exporter                          "` ||

				 `pluginInfo -query -loaded "MAYA85toHND2"`                                    ||
				 `pluginInfo -query -loaded "MAYA2008 HND2 Exporter                         "` ||
				 `pluginInfo -query -loaded "MAYA2008toHND2"`                                  ||
				 `pluginInfo -query -loaded "MAYA2009 HND2 Exporter                         "` );
	return $info;
}

// 第2頂点カラー対応
/******
global proc int nnNextVersion()
{
	int $info = (`pluginInfo -query -loaded "MAYA7 NN Exporter for DirectX G1.1             "` ||
				 `pluginInfo -query -loaded "MAYA7 NN Exporter for Lindbergh                "` ||
				 `pluginInfo -query -loaded "MAYA7 NN Exporter for XBOX360                  "` ||
				 `pluginInfo -query -loaded "MAYA7 NN Exporter for PlayStation3             "` ||
				 `pluginInfo -query -loaded "MAYA7 HND Exporter                             "` ||

				 `pluginInfo -query -loaded "MAYA8 NN Exporter for DirectX G1.1             "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for Lindbergh                "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for XBOX360                  "` ||
				 `pluginInfo -query -loaded "MAYA8 NN Exporter for PlayStation3             "` ||
				 `pluginInfo -query -loaded "MAYA8 HND Exporter                             "` ||

//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for DirectX G1.1            "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for Lindbergh               "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for XBOX360                 "` ||
//				 `pluginInfo -query -loaded "MAYA85 NN Exporter for PlayStation3            "` ||
//				 `pluginInfo -query -loaded "MAYA85 HND Exporter                            "` ||
				 `pluginInfo -query -loaded "MAYA85toNNXB"`                                    ||
				 `pluginInfo -query -loaded "MAYA85toNNLB"`                                    ||
				 `pluginInfo -query -loaded "MAYA85toNNXB360"`                                 ||
				 `pluginInfo -query -loaded "MAYA85toNNPS3"`                                   ||
				 `pluginInfo -query -loaded "MAYA85toHND"`                                     ||

				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for DirectX G1.1          "` ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for Lindbergh             "` ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for XBOX360               "` ||
				 `pluginInfo -query -loaded "MAYA2008 NN Exporter for PlayStation3          "` ||
				 `pluginInfo -query -loaded "MAYA2008 HND Exporter                          "` ||
				 `pluginInfo -query -loaded "MAYA2008toNNXB"`                                  ||
				 `pluginInfo -query -loaded "MAYA2008toNNLB"`                                  ||
				 `pluginInfo -query -loaded "MAYA2008toNNXB360"`                               ||
				 `pluginInfo -query -loaded "MAYA2008toNNPS3"`                                 ||
				 `pluginInfo -query -loaded "MAYA2008toHND"`                                   );
	return $info;
}
******/

//----------------------------------------------------------------------------
//			nnMaterialAttributeVersion
//----------------------------------------------------------------------------
global proc nnMaterialAttributeVersionNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		global string $nnMaterialAttributeVersion;
		addAttr
			-dataType		"string"
			-longName		$attr
			-hidden			true
			$nodeName;
		// バージョン情報をセット
		setAttr $attrName -type "string" $nnMaterialAttributeVersion;
//		setAttr $attrName -lock true;
	}
	// hiddenフラグがTRUEでなければ一度アトリビュートを削除する
	else if( `addAttr -query -hidden $attrName` == false ) {
		deleteAttr $attrName;
		nnMaterialAttributeVersionNew( $attrName );
	}
}

global proc nnMaterialAttributeVersionReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnMaterialAttributeVersionNew( $attrName );
	}
	// hiddenフラグがTRUEでなければ一度アトリビュートを削除する
	else if( `addAttr -query -hidden $attrName` == false ) {
		deleteAttr $attrName;
		nnMaterialAttributeVersionNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnMaterialAttributeMainFrameLayout
//----------------------------------------------------------------------------
global proc nnMaterialAttributeMainFrameLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			frameLayout
				-collapsable	true
				-collapse		false
				-label 			"NN Material Attributes"
				-borderVisible 	true
				-borderStyle	"etchedIn"
				-marginWidth	5
				-marginHeight	5
				$grpName;
		setUITemplate -popTemplate;
	}
	// GUIの表示設定を変更
	int $nnps2   = nnPS2GetPluginInfoMayaNNExporter();
	int $nngc    = nnGCGetPluginInfoMayaNNExporter();
	int $nnxb    = nnXBGetPluginInfoMayaNNExporter();
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnpsp   = nnPSPGetPluginInfoMayaNNExporter();
//	int $nndt06  = nnDT06GetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();
//	frameLayout -edit -visible ( $nnps2 + $nngc + $nnxb + $nnlb + $nnpsp + $nndt06 + $nnxenon + $nnps3 ) $grpName;
	frameLayout -edit -visible ( $nnps2 + $nngc + $nnxb + $nnlb + $nnpsp + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}

global proc nnMaterialAttributeMainFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		nnMaterialAttributeMainFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nnps2   = nnPS2GetPluginInfoMayaNNExporter();
	int $nngc    = nnGCGetPluginInfoMayaNNExporter();
	int $nnxb    = nnXBGetPluginInfoMayaNNExporter();
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnpsp   = nnPSPGetPluginInfoMayaNNExporter();
//	int $nndt06  = nnDT06GetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();
//	frameLayout -edit -visible ( $nnps2 + $nngc + $nnxb + $nnlb+ $nnpsp + $nndt06 + $nnxenon + $nnps3 ) $grpName;
	frameLayout -edit -visible ( $nnps2 + $nngc + $nnxb + $nnlb+ $nnpsp  + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}

//----------------------------------------------------------------------------
//			nnMaterialAttributeMainColumnLayout
//----------------------------------------------------------------------------
global proc nnMaterialAttributeMainColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnMaterialAttributeMainFrameLayout" + $nodeType );
				columnLayout
					-adjustableColumn true
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnMaterialAttributeMainColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		nnMaterialAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//
//		Common Material Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnMaterialAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnMaterialAttributeFrameLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list );
	// アトリビュート名を取得
	string $attr 		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnMaterialAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		false
					-label 			"Common Material Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnMaterialAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`frameLayout -exists $grpName` ) {
		nnMaterialAttributeFrameLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnMaterialAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnMaterialAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnMaterialAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnMaterialAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;
	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		nnMaterialAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnDoubleSidePolygon
//----------------------------------------------------------------------------
global proc nnDoubleSidePolygonNew( string $attrName )
{
	int $nnxb  = nnXBGetPluginInfoMayaNNExporter();

	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		3
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}

	// Xbox以外で2 SIDE LIGHTINNGを選択時は、DUPLICATEに設定
	if( !$nnxb ) {
		if( `getAttr $attrName` == 3 ) {
			setAttr $attrName 2;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Double Side Polygon" $grpName;
					menuItem -label "NONE"				-data 0;
					menuItem -label "DOUBLE SIDE"		-data 1;
					menuItem -label "DUPLICATE"			-data 2;
					menuItem -label "2 SIDE LIGHTINNG"	-data 3 nn2SideLightingMenuItem;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}

	menuItem -edit -enable $nnxb nn2SideLightingMenuItem;

	connectControl -index 2 $grpName $attrName;
}

global proc nnDoubleSidePolygonReplace( string $attrName )
{
	int $nnxb  = nnXBGetPluginInfoMayaNNExporter();

	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnDoubleSidePolygonNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnDoubleSidePolygonNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// Xbox以外で2 SIDE LIGHTINNGを選択時は、DUPLICATEに設定
	if( !$nnxb ) {
		if( `getAttr $attrName` == 3 ) {
			setAttr $attrName 2;
		}
	}

	menuItem -edit -enable $nnxb nn2SideLightingMenuItem;
}

//----------------------------------------------------------------------------
//			nnIgnoreLight
//----------------------------------------------------------------------------
global proc nnIgnoreLightNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Ignore Light"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnIgnoreLightReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnIgnoreLightNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnIgnoreLightNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnDisableFogging
//----------------------------------------------------------------------------
global proc nnDisableFoggingNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Disable Fogging"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnDisableFoggingReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnIgnoreLightNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnDisableFoggingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnAlphaFlag
//----------------------------------------------------------------------------
global proc nnAlphaFlagNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		3
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Mode" $grpName;
					menuItem -label "AUTO"			-data 0;
					menuItem -label "OPAQUE"		-data 1;
					menuItem -label "TRANSPARENT"	-data 2;
					menuItem -label "PUNCH THROUGH"	-data 3;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnAlphaFlagReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnAlphaFlagNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnAlphaFlagNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnSpecularType
//----------------------------------------------------------------------------
global proc nnSpecularTypeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		2
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;

				optionMenuGrp -label "Specular Type" $grpName;
					menuItem -label "AUTO"	-data 0;
					menuItem -label "ON"	-data 1;
					menuItem -label "OFF"	-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	connectControl -index 2 $grpName $attrName;
}

global proc nnSpecularTypeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnSpecularTypeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnSpecularTypeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnSortKey
//----------------------------------------------------------------------------
global proc nnSortKeyNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	long
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 100;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intFieldGrp -exists $grpName`) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;

				separator -style "in";

				intFieldGrp
					-label	"Sort Key"
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnSortKeyReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intFieldGrp -exists $grpName`) {
		nnSortKeyNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnSortKeyNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnCallBack
//----------------------------------------------------------------------------
global proc nnCallBackNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName	= $list[0];
	// ノードタイプを取得
	string $nodeType	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Call Back"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnCallBackReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnCallBackNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnCallBackNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnUserData
//----------------------------------------------------------------------------
global string $nnBeforeUserData;

proc nnUserDataReplaceVer0_75_00( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if( `getAttr -type $attrName` == "long" ) {
		int $userdata = `getAttr $attrName`;
		// Version0.50.00のアトリビュートを削除
		deleteAttr $attrName;
		// 新規にアトリビュート作成
		addAttr
			-dataType		"string"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName -type "string" $userdata;
	}
}

global proc nnUserDataNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-dataType		"string"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName -type "string" "0x00000000";
	}
	// Version0.50.00互換用
	else {
		nnUserDataReplaceVer0_75_00( $attrName );
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 200
					-columnAlign3		right center right
					("nnUserDataRowLayout"+$nodeType);
					text
						-label "User Data";
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckUserData " + $attrName )
						-receiveFocusCommand ( "nnSaveUserData " + $attrName )
						$grpName;
					text
						-label "HEX ( 0x======== ) / DEC ( ======== )";
				setParent ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnUserDataReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnUserDataNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnUserDataNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		// Version0.50.00互換用
		nnUserDataReplaceVer0_75_00( $attrName );
		connectControl -index 2 $grpName $attrName;
	}
}

global proc nnCheckUserData( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// 現在のUserDataの値を取得
	string $userdata	= `textField -query -text $grpName`;

	int $startindex;
	string $matchdata;
	// HEX
	if( substring( $userdata, 1, 1 ) == "0" && substring( $userdata, 2, 2 ) == "x" ) {
		$startindex = 3;
		$matchdata = "0123456789abcdefABCDEF";
	}
	// DEC
	else {
		$startindex = 1;
		$matchdata = "0123456789";
	}

	int $i;
	global string $nnBeforeUserData;
	// 入力されたUserDataをチェック
	for( $i = $startindex; $i <= (size($userdata)); $i++ ) {
		// 8桁以上の場合
		if( $i >= $startindex + 8 ) {
			warning( "nnCheckUserData : input UserData [" + $userdata + "] is over 8 figures [========]!\n" );
			setAttr $attrName -type "string" $nnBeforeUserData;
			return;
		}
		string $charactor = substring( $userdata, $i, $i );
		// 不正な文字が入力された場合
		if( match( $charactor, $matchdata ) == "" ) {
			warning( "nnCheckUserData : input UserData [" + $userdata + "] is invalid valuable!\n" );
			setAttr $attrName -type "string" $nnBeforeUserData;
			return;
		}
	}
}

global proc nnSaveUserData( string $attrName )
{
	global string $nnBeforeUserData;
	// UserDataをセット
	$nnBeforeUserData = `getAttr $attrName`;
}

//----------------------------------------------------------------------------
// 			nnSpecularLevel
//----------------------------------------------------------------------------
global proc nnSpecularLevelNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	"float"
			-longName		$attr
			-minValue		0
			-maxValue		1
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label		"Specular Level"
					-precision 	6
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;

	// GUIの表示設定を変更
	int $nnps2   = nnPS2GetPluginInfoMayaNNExporter();
	int $nngc    = nnGCGetPluginInfoMayaNNExporter();
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();
	floatSliderGrp -edit -visible ( $nnps2 + $nngc + $nnlb + $nnxenon + $nnps3 + $nndxg2 + $nndxg2 ) $grpName;
}

global proc nnSpecularLevelReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnSpecularLevelNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnSpecularLevelNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}

	// GUIの表示設定を変更
	int $nnps2   = nnPS2GetPluginInfoMayaNNExporter();
	int $nngc    = nnGCGetPluginInfoMayaNNExporter();
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();
	floatSliderGrp -edit -visible ( $nnps2 + $nngc + $nnlb + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}
//----------------------------------------------------------------------------
// 			nnSpecularGlossiness
//----------------------------------------------------------------------------
global proc nnSpecularGlossinessNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	"float"
			-longName		$attr
			-minValue		0
			-maxValue		1
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label		"Specular Glossiness"
					-precision 	6
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnSpecularGlossinessReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnSpecularGlossinessNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnSpecularGlossinessNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnVertexColor
//----------------------------------------------------------------------------
global proc nnVertexColorNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName	= $list[0];
	// ノードタイプを取得
	string $nodeType	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Vertex Color"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand ("nnEnableVertexColor " + $nodeName )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnEnableVertexColor " + $nodeType ) $grpName;
}

global proc nnVertexColorReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnVertexColorNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnVertexColorNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnEnableVertexColor " + $nodeType ) $grpName;
}

global proc nnEnableVertexColor( string $nodeType )
{
//	int $nextVersion = nnNextVersion();

//	if( !$nextVersion )		return;

	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnVertexColor"  + $nodeType;
	$grpName[1]	= "nnVertexColor2" + $nodeType;
	
	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	if ( `checkBoxGrp -exists $grpName[1]`) {
		// nnVertexColor == TRUE ? enable : disable
		checkBoxGrp -edit -enable $value $grpName[1];
		if( $value == false ) {
			checkBoxGrp -edit -value1 $value $grpName[1];
		}
	}
}

//----------------------------------------------------------------------------
// 			nnVertexColor2
//----------------------------------------------------------------------------
global proc nnVertexColor2New( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName	= $list[0];
	// ノードタイプを取得
	string $nodeType	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"2nd Vertex Color"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					$grpName;
			setUITemplate -popTemplate;
			checkBoxGrp -edit -enable false $grpName;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnEnableVertexColor " + $nodeType ) $grpName;
}

global proc nnVertexColor2Replace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnVertexColor2New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnVertexColor2New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
//	checkBoxGrp -edit -changeCommand ( "nnEnableVertexColor " + $nodeType ) $grpName;
	nnEnableVertexColor( $nodeType );

}

//----------------------------------------------------------------------------
//
//			PS2 Material Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnPS2MaterialAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnPS2MaterialAttributeFrameLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnMaterialAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"PlayStation2 Material Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// GUIの表示設定を変更
	int $nnps2 = nnPS2GetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nnps2 $grpName;
}

global proc nnPS2MaterialAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		nnPS2MaterialAttributeFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nnps2 = nnPS2GetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nnps2 $grpName;
}

//----------------------------------------------------------------------------
//			nnPS2MaterialAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnPS2MaterialAttributeColumnLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2マテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		setParent ( "nnPS2MaterialAttributeFrameLayout" + $nodeType );
		setUITemplate -pushTemplate attributeEditorTemplate;
				columnLayout -adjustableColumn true $grpName;
		setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnPS2MaterialAttributeColumnLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2マテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		nnPS2MaterialAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnPS2TextureAlpha0
//----------------------------------------------------------------------------
global proc nnPS2TextureAlpha0New( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		255
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2MaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Texture Alpha Palette 0"
					-minValue	0
					-maxValue	255
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnPS2TextureAlpha0Replace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2TextureAlpha0New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnPS2TextureAlpha0New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//		 	nnPS2TextureAlpha1
//----------------------------------------------------------------------------
global proc nnPS2TextureAlpha1New( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		255
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 128;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setUITemplate -pushTemplate attributeEditorTemplate;
		setParent ( "nnPS2MaterialAttributeColumnLayout" + $nodeType );
				intSliderGrp
					-label		"Texture Alpha Palette 1"
					-minValue	0
					-maxValue	255
					$grpName;
		setParent ..;
		setUITemplate -popTemplate;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnPS2TextureAlpha1Replace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2TextureAlpha1New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnPS2TextureAlpha1New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//
//			PS2 Texture Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnPS2TextureAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnPS2TextureAttributeFrameLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2用テクスチャアトリビュートフレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnPS2MaterialAttributeColumnLayout" + $nodeType );
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"PlayStation2 Texture Attribute"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnPS2TextureAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2用テクスチャアトリビュートフレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		nnPS2TextureAttributeFrameLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnPS2TextureAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnPS2TextureAttributeColumnLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnPS2TextureAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnPS2TextureAttributeColumnLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// レイアウトがなければ新規にレイアウトを作成
	if ( !`columnLayout -exists $grpName` ) {
		nnPS2TextureAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnPS2LayerSelect
//----------------------------------------------------------------------------
global proc nnPS2LayerSelectNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// コントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
				optionMenuGrp
					-label "Layer Select"
					-changeCommand ("nnPS2ChangeConnectControl " + $nodeName )
					$grpName;
					menuItem -label "BOTTOM ( T1 ) ";
					menuItem -label "TOP ( T2 ) "	;
				setParent -menu ..;

				separator -style "single";

		setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnPS2LayerSelectReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// コントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2LayerSelectNew( $attrName );
	}
	// changeCommand更新
	optionMenuGrp -edit -changeCommand ( "nnPS2ChangeConnectControl " + $nodeName ) $grpName;
}

global proc nnPS2ChangeConnectControl( string $nodeName )
{
	nnPS2BlendModeReplace		( $nodeName + ".nnPS2BlendMode1",		$nodeName + ".nnPS2BlendMode2"			);
	nnPS2UsePaletteReplace		( $nodeName + ".nnPS2UsePalette1",		$nodeName + ".nnPS2UsePalette2"			);
	nnPS2PaletteBankReplace		( $nodeName + ".nnPS2PaletteBank1", 	$nodeName + ".nnPS2PaletteBank2"		);
	nnPS2EnviromentMapReplace	( $nodeName + ".nnPS2EnviromentMap1",	$nodeName + ".nnPS2EnviromentMap2"		);
	nnPS2UClampReplace			( $nodeName + ".nnPS2UClamp1",			$nodeName + ".nnPS2UClamp2"				);
	nnPS2VClampReplace			( $nodeName + ".nnPS2VClamp1",			$nodeName + ".nnPS2VClamp2"				);
	nnPS2TexColComponentReplace	( $nodeName + ".nnPS2TexColComponent1",	$nodeName + ".nnPS2TexColComponent2"	);
	nnPS2AlphaBlendingAReplace	( $nodeName + ".nnPS2AlphaBlendingA1",	$nodeName + ".nnPS2AlphaBlendingA2"		);
	nnPS2AlphaBlendingBReplace	( $nodeName + ".nnPS2AlphaBlendingB1",	$nodeName + ".nnPS2AlphaBlendingB2"		);
	nnPS2AlphaBlendingCReplace	( $nodeName + ".nnPS2AlphaBlendingC1",	$nodeName + ".nnPS2AlphaBlendingC2"		);
	nnPS2AlphaBlendingFixReplace( $nodeName + ".nnPS2AlphaBlendingFix1",$nodeName + ".nnPS2AlphaBlendingFix2"	);
	nnPS2AlphaBlendingDReplace	( $nodeName + ".nnPS2AlphaBlendingD1",	$nodeName + ".nnPS2AlphaBlendingD2"		);
	nnPS2ManualColorClampReplace( $nodeName + ".nnPS2ManualColorClamp1",$nodeName + ".nnPS2ManualColorClamp2"	);
	nnPS2ColorClampRGBReplace	( $nodeName + ".nnPS2ColorClampRGB1",	$nodeName + ".nnPS2ColorClampRGB2"		);
	nnPS2ColorClampAReplace		( $nodeName + ".nnPS2ColorClampA1",		$nodeName + ".nnPS2ColorClampA2"		);
	nnPS2AlphaTestReplace		( $nodeName + ".nnPS2AlphaTest1",		$nodeName + ".nnPS2AlphaTest2"			);
	nnPS2AlphaTestModeReplace	( $nodeName + ".nnPS2AlphaTestMode1",	$nodeName + ".nnPS2AlphaTestMode2"		);
	nnPS2AlphaRefDataReplace	( $nodeName + ".nnPS2AlphaRefData1",	$nodeName + ".nnPS2AlphaRefData2"		);
	nnPS2ManualAlphaRefReplace  ( $nodeName + ".nnPS2ManualAlphaRef1",	$nodeName + ".nnPS2ManualAlphaRef2"		);
	nnPS2AlphaFailModeReplace	( $nodeName + ".nnPS2AlphaFailMode1",	$nodeName + ".nnPS2AlphaFailMode2"		);
	nnPS2DstAlphaTestReplace	( $nodeName + ".nnPS2DstAlphaTest1",	$nodeName + ".nnPS2DstAlphaTest2"		);
	nnPS2DstAlphaTestModeReplace( $nodeName + ".nnPS2DstAlphaTestMode1",$nodeName + ".nnPS2DstAlphaTestMode2"	);
	nnPS2ZBufferTestReplace		( $nodeName + ".nnPS2ZBufferTest1",		$nodeName + ".nnPS2ZBufferTest2"		);
	nnPS2ZBufferTestModeReplace	( $nodeName + ".nnPS2ZBufferTestMode1",	$nodeName + ".nnPS2ZBufferTestMode2"	);
	nnPS2ZBufferUpdateReplace	( $nodeName + ".nnPS2ZBufferUpdate1",	$nodeName + ".nnPS2ZBufferUpdate2"		);
	nnPS2ManualMipmapReplace	( $nodeName + ".nnPS2ManualMipmap1",	$nodeName + ".nnPS2ManualMipmap2"		);
	nnPS2MipmapLCMReplace		( $nodeName + ".nnPS2MipmapLCM1",		$nodeName + ".nnPS2MipmapLCM2"			);
	nnPS2MipmapK0Replace		( $nodeName + ".nnPS2MipmapK01",		$nodeName + ".nnPS2MipmapK02"			);
	nnPS2MipmapLReplace			( $nodeName + ".nnPS2MipmapL1",			$nodeName + ".nnPS2MipmapL2"			);
	nnPS2MipmapK1Replace		( $nodeName + ".nnPS2MipmapK11",		$nodeName + ".nnPS2MipmapK12"			);
}

proc nnPS2ConnectControl( string $attrName1, string $attrName2, string $grpName, string $nodeType, int $index )
{
	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnPS2LayerSelect"+$nodeType)`;
	// BOTTOM ( T1 )
	if( $currentLayer == 1 ) {
		// アトリビュート1とコントロールを接続する
		if( $index > 0 ) {
			connectControl -index $index $grpName $attrName1;
		}
		else {
			connectControl $grpName $attrName1;
		}
	}
	// TOP ( T2 )
	else {
		// アトリビュート2とコントロールを接続する
		if( $index > 0 ) {
			connectControl -index $index $grpName $attrName2;
		}
		else {
			connectControl $grpName $attrName2;
		}
	}
}

//----------------------------------------------------------------------------
// 			nnPS2BlendMode
//----------------------------------------------------------------------------
global proc nnPS2BlendModeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2BlendMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュート(nnPS2BlendMode1/2)がなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		4
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;

				optionMenuGrp -label "Blend Mode" $grpName;
					menuItem -label "AUTO"			-data 0;
					menuItem -label "MODULATE"		-data 1;
					menuItem -label "DECAL"			-data 2;
					menuItem -label "HIGHLIGHT"		-data 3;
					menuItem -label "HIGHLIGHT2"	-data 4;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPS2BlendModeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2BlendMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2BlendModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2BlendMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2BlendModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2BlendMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2BlendModeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPS2UsePalette
//----------------------------------------------------------------------------
global proc nnPS2UsePaletteNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2UsePalette" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュート(nnPS2UsePalette1)がなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;

				checkBoxGrp
					-label 				"Use Palette"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPS2EnablePaletteBank " + $nodeName )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2UsePaletteReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2UsePalette" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2UsePaletteNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2UsePalette1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2UsePaletteNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2UsePalette2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2UsePaletteNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnablePaletteBank " + $nodeType ) $grpName;
}

global proc nnPS2EnablePaletteBank( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnPS2UsePalette"  + $nodeType;
	$grpName[1]	= "nnPS2PaletteBank" + $nodeType;
	// nnPS2UsePalette == TRUE ? enable : disable
	intSliderGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[1];
}

//----------------------------------------------------------------------------
//			nnPS2PaletteBank
//----------------------------------------------------------------------------
global proc nnPS2PaletteBankNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2PaletteBank" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュート(nnPS2PaletteBank1/2)がなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		63
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;

				intSliderGrp
					-label		"Palette Bank"
					-minValue	0
					-maxValue	63
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2PaletteBankReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2PaletteBank" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2PaletteBankNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2PaletteBank1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2PaletteBankNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2PaletteBank2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2PaletteBankNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	nnPS2EnablePaletteBank( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2EnviromentMap
//----------------------------------------------------------------------------
global proc nnPS2EnviromentMapNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2EnviromentMap" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Enviroment Map"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2EnviromentMapReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2EnviromentMap" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPS2EnviromentMapNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2EnviromentMap1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ){
		nnPS2EnviromentMapNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2EnviromentMap2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ){
		nnPS2EnviromentMapNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPS2UClamp
//----------------------------------------------------------------------------
global proc nnPS2UClampNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2UClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type U" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CLAMP"		-data 1;
					menuItem -label "REPEAT"	-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2UClampReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2UClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2UClampNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2UClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2UClampNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2UClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2UClampNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPS2VClamp
//----------------------------------------------------------------------------
global proc nnPS2VClampNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2VClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type V" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CLAMP"		-data 1;
					menuItem -label "REPEAT"	-data 2;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPS2VClampReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2VClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2VClampNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2VClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2VClampNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2VClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2VClampNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPS2TexColComponent
//----------------------------------------------------------------------------
global proc nnPS2TexColComponentNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2TexColComponent" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Texture Color Component" $grpName;
					menuItem -label "AUTO"	-data 0;
					menuItem -label "RGB"	-data 1;
					menuItem -label "RGBA"	-data 2;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2TexColComponentReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2TexColComponent" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2TexColComponentNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2TexColComponent1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2TexColComponentNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2TexColComponent2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2TexColComponentNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaBlendingPreset
//----------------------------------------------------------------------------
global proc nnPS2AlphaBlendingPresetNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingPreset" + $nodeType;

	// コントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Alpha Blending Preset"
					-changeCommand ( "nnPS2SetAlphaBlendingFromPreset " + $nodeName )
					$grpName;

					menuItem -label "CUSTOM"		-data 0;
					menuItem -label "NOP"			-data 1;
					menuItem -label "INTER_AS"		-data 2;
					menuItem -label "INTER_AD"		-data 3;
					menuItem -label "INTER_FIX"		-data 4;
					menuItem -label "RINTER_AS"		-data 5;
					menuItem -label "RINTER_AD"		-data 6;
					menuItem -label "RINTER_FIX"	-data 7;
					menuItem -label "ADD"			-data 8;
					menuItem -label "ADD_CS_FIX"	-data 9;
					menuItem -label "ADD_CD_FIX"	-data 10;
					menuItem -label "ADD_CS_AS"		-data 11;
					menuItem -label "ADD_CD_AS"		-data 12;
					menuItem -label "ADD_CS_AD"		-data 13;
					menuItem -label "ADD_CD_AD"		-data 14;
					menuItem -label "SUB_CS"		-data 15;
					menuItem -label "SUB_CD"		-data 16;
					menuItem -label "SUB_CS_FIX"	-data 17;
					menuItem -label "SUB_CD_FIX"	-data 18;
					menuItem -label "SUB_CS_AS"		-data 19;
					menuItem -label "SUB_CD_AS"		-data 20;
					menuItem -label "SUB_CS_AD"		-data 21;
					menuItem -label "SUB_CD_AD"		-data 22;
					menuItem -label "MUL_CS_AS"		-data 23;
					menuItem -label "MUL_CS_AD"		-data 24;
					menuItem -label "MUL_CS_FIX"	-data 25;
					menuItem -label "MUL_CD_AS"		-data 26;
					menuItem -label "MUL_CD_AD"		-data 27;
					menuItem -label "MUL_CD_FIX"	-data 28;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnPS2AlphaBlendingPresetReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingPreset" + $nodeType;

	// コントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaBlendingPresetNew( $attrName );
	}
	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnPS2SetAlphaBlendingFromPreset " + $nodeName ) $grpName;
}

// AlphaBlending presetMode変換テーブル
global string $nnPresetModeTable[] = {
	"CUSTOM",		"A",	"B",	"C",	"FIX",	"D",
	"NOP",			"0",	"2",	"2",	"128",	"2",
	"INTER_AS",		"0",	"1",	"0",	"0",	"1",
	"INTER_AD",		"0",	"1",	"1",	"0",	"1",
	"INTER_FIX",	"0",	"1",	"2",	"-1",	"1",
	"RINTER_AS",	"1",	"0",	"0",	"0",	"0",
	"RINTER_AD",	"1",	"0",	"1",	"0",	"0",
	"RINTER_FIX",	"1",	"0",	"2",	"-1",	"0",
	"ADD",			"0",	"2",	"2",	"128",	"1",
	"ADD_CS_FIX",	"0",	"2",	"2",	"-1",	"1",
	"ADD_CD_FIX",	"1",	"2",	"2",	"-1",	"0",
	"ADD_CS_AS",	"0",	"2",	"0",    "0",	"1",
	"ADD_CD_AS",	"1",	"2",	"0",	"0",	"0",
	"ADD_CS_AD",	"0",	"2",	"1",	"0",	"1",
	"ADD_CD_AD",	"1",	"2",	"1",	"0",	"0",
	"SUB_CS",		"2",	"0",	"2",	"128",	"1",
	"SUB_CD",		"2",	"1",	"2",	"128",	"0",
	"SUB_CS_FIX",	"2",	"0",	"2",	"-1",	"1",
	"SUB_CD_FIX",	"2",	"1",	"2",	"-1",	"0",
	"SUB_CS_AS",	"2",	"0",	"0",	"0",	"1",
	"SUB_CD_AS",	"2",	"1",	"0",	"0",	"0",
	"SUB_CS_AD",	"2",	"0",	"1",	"0",	"1",
	"SUB_CD_AD",	"2",	"1",	"1",	"0",	"0",
	"MUL_CS_AS",	"0",	"2",	"0",	"0",	"2",
	"MUL_CS_AD",	"0",	"2",	"1",	"0",	"2",
	"MUL_CS_FIX",	"0",	"2",	"2",	"-1",	"2",
	"MUL_CD_AS",	"1",	"2",	"0",	"0",	"2",
	"MUL_CD_AD",	"1",	"2",	"1",	"0",	"2",
	"MUL_CD_FIX",	"1",	"2",	"2",	"-1",	"2"
};

// AlphaBlendingの各値からPresetをセットする
global proc nnPS2SetPresetFromAlphaBlending( string $nodeName )
{
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingPreset" + $nodeType;

	string $layerName	= "nnPS2LayerSelect"	  + $nodeType;
	int	   $layer		= `optionMenuGrp -query -select $layerName`;

	string $attrA;
	string $attrB;
	string $attrC;
	string $attrFix;
	string $attrD;
	if		( $layer == 1 ) {
		$attrA		= $nodeName + ".nnPS2AlphaBlendingA1";
		$attrB		= $nodeName + ".nnPS2AlphaBlendingB1";
		$attrC		= $nodeName + ".nnPS2AlphaBlendingC1";
		$attrFix	= $nodeName + ".nnPS2AlphaBlendingFix1";
		$attrD		= $nodeName + ".nnPS2AlphaBlendingD1";
	}
	else if	( $layer == 2 ) {
		$attrA		= $nodeName + ".nnPS2AlphaBlendingA2";
		$attrB		= $nodeName + ".nnPS2AlphaBlendingB2";
		$attrC		= $nodeName + ".nnPS2AlphaBlendingC2";
		$attrFix	= $nodeName + ".nnPS2AlphaBlendingFix2";
		$attrD		= $nodeName + ".nnPS2AlphaBlendingD2";
	}
	else {
		warning("nnPS2SetPresetFromAlphaBlending : this layer[" + $layer + "] is not support!\n");
	}
	// AlphaBlendingの各値を取得
	int $valueA   = `getAttr $attrA`;
	int $valueB   = `getAttr $attrB`;
	int $valueC   = `getAttr $attrC`;
	int $valueFix = `getAttr $attrFix`;
	int $valueD   = `getAttr $attrD`;

	int $i;
	global string $nnPresetModeTable[];
	// テーブルのアルファブレンディング値と比較
	for( $i = 6; $i < size($nnPresetModeTable); $i += 6 ) {
		// Fix値が"Fix"の時は比較しない
		if( ((int)$nnPresetModeTable[$i+4]) == -1 ) {
			if( $valueA == ((int)$nnPresetModeTable[$i+1]) &&
				$valueB == ((int)$nnPresetModeTable[$i+2]) &&
				$valueC == ((int)$nnPresetModeTable[$i+3]) &&
				$valueD == ((int)$nnPresetModeTable[$i+5])	) {

				// テーブルと一致したら対応するプリセットをセット
				optionMenuGrp -edit -value $nnPresetModeTable[$i] $grpName;
				return;
			}
		}
		else {
			if( $valueA   == ((int)$nnPresetModeTable[$i+1])	&&
				$valueB   == ((int)$nnPresetModeTable[$i+2])	&&
				$valueC   == ((int)$nnPresetModeTable[$i+3])	&&
				$valueFix == ((int)$nnPresetModeTable[$i+4])	&&
				$valueD   == ((int)$nnPresetModeTable[$i+5])	) {

				// テーブルと一致したら対応するプリセットをセット
				optionMenuGrp -edit -value $nnPresetModeTable[$i] $grpName;
				return;
			}
		}
	}
	// テーブルと一致しなければ"CUSTOM"をセット
	optionMenuGrp -edit -value "CUSTOM" $grpName;

}

// PresetからAlphaBlendingをセットする
global proc nnPS2SetAlphaBlendingFromPreset( string $nodeName )
{
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingPreset" + $nodeType;
	string $grpNameFix	= "nnPS2AlphaBlendingFix" + $nodeType;

	string $layerName	= "nnPS2LayerSelect"	  + $nodeType;
	int	   $layer		= `optionMenuGrp -query -select $layerName`;

	string $attrA;
	string $attrB;
	string $attrC;
	string $attrFix;
	string $attrD;

	if		( $layer == 1 ) {
		$attrA		= $nodeName + ".nnPS2AlphaBlendingA1";
		$attrB		= $nodeName + ".nnPS2AlphaBlendingB1";
		$attrC		= $nodeName + ".nnPS2AlphaBlendingC1";
		$attrFix	= $nodeName + ".nnPS2AlphaBlendingFix1";
		$attrD		= $nodeName + ".nnPS2AlphaBlendingD1";
	}
	else if	( $layer == 2 ) {
		$attrA		= $nodeName + ".nnPS2AlphaBlendingA2";
		$attrB		= $nodeName + ".nnPS2AlphaBlendingB2";
		$attrC		= $nodeName + ".nnPS2AlphaBlendingC2";
		$attrFix	= $nodeName + ".nnPS2AlphaBlendingFix2";
		$attrD		= $nodeName + ".nnPS2AlphaBlendingD2";
	}
	else {
		warning("nnPS2SetPresetFromAlphaBlending : this layer[" + $layer + "] is not support!\n");
	}

	// 現在選択されているプリセットモードを取得
	string $preset = `optionMenuGrp -query -value $grpName`;

	int $i;
	global string $nnPresetModeTable[];
	for( $i = 6; $i < size($nnPresetModeTable); $i += 6 ) {
		// プリセットと一致したら対応するアルファブレンディングの値をセット
		if( $preset == $nnPresetModeTable[$i] ) {
			// "CUSTOM"なら何もしない
			if( $nnPresetModeTable[$i] == "CUSTOM" ) {
				break;
			}
			// AlphaBlending Aをセット
			setAttr $attrA ((int)$nnPresetModeTable[$i+1]);
			// AlphaBlending Bをセット
			setAttr $attrB ((int)$nnPresetModeTable[$i+2]);
			// AlphaBlending Cをセット
			setAttr $attrC ((int)$nnPresetModeTable[$i+3]);
			// AlphaBlending Dをセット
			setAttr $attrD ((int)$nnPresetModeTable[$i+5]);
			// AlphaBlending Cが"FIX"のばあいはAlphaBlending Fixのenableをtrueにする。
			if( ((int)$nnPresetModeTable[$i+3]) == 2 ) {
				intSliderGrp  -edit -enable true $grpNameFix;
				// AlphaBlending Fixが"FIX"でなければ、FIX値をセット
				if( ((int)$nnPresetModeTable[$i+4]) != -1 ) {
					setAttr $attrFix ((int)$nnPresetModeTable[$i+4]);
				}
			}
			// AlphaBlending Cが"FIX"でなければAlphaBlending Fixのコントロールのenableをfalseにする。
			else {
				intSliderGrp  -edit -enable false $grpNameFix;
			}
			break;
		}
	}
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaBlendingA
//----------------------------------------------------------------------------
proc nnPS2AlphaBlendingAReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2AlphaBlendingA", "nnPS2AlphaBlending2A" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2AlphaBlendingANew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingA" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
			$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2AlphaBlendingAReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Alpha Blending A"
					-changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName )
					$grpName;
					menuItem -label "SRC COLOR"		-data 0;
					menuItem -label "DEST COLOR"	-data 1;
					menuItem -label "ZERO"			-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaBlendingAReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingA" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaBlendingANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingA1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaBlendingANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingA2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaBlendingANew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName ) $grpName;

	//nnPS2SetPresetFromAlphaBlending( $nodeName );
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaBlendingB
//----------------------------------------------------------------------------
proc nnPS2AlphaBlendingBReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2AlphaBlendingB", "nnPS2AlphaBlending2B" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2AlphaBlendingBNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingB" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
			$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 1;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2AlphaBlendingBReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Alpha Blending B"
					-changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName )
					$grpName;
					menuItem -label "SRC COLOR"		-data 0;
					menuItem -label "DEST COLOR"	-data 1;
					menuItem -label "ZERO"			-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaBlendingBReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingB" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaBlendingBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingB1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaBlendingBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingB2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaBlendingBNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName ) $grpName;

	//nnPS2SetPresetFromAlphaBlending( $nodeName );
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaBlendingC
//----------------------------------------------------------------------------
proc nnPS2AlphaBlendingCReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2AlphaBlendingC", "nnPS2AlphaBlending2C" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2AlphaBlendingCNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingC" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2AlphaBlendingCReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Alpha Blending C"
					-changeCommand ( "nnPS2EnableAlphaBlendingFix " + $nodeType + ";" + "nnPS2SetPresetFromAlphaBlending " + $nodeName )
					$grpName;
					menuItem -label "SRC ALPHA"		-data 0;
					menuItem -label "DEST ALPHA"	-data 1;
					menuItem -label "FIX"			-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaBlendingCReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingC" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaBlendingCNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingC1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaBlendingCNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingC2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaBlendingCNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnPS2EnableAlphaBlendingFix " + $nodeType + ";" + "nnPS2SetPresetFromAlphaBlending " + $nodeName ) $grpName;

	//nnPS2SetPresetFromAlphaBlending( $nodeName );
}

global proc nnPS2EnableAlphaBlendingFix( string $nodeType )
{
	// 	コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnPS2AlphaBlendingC"	  + $nodeType;
	$grpName[1] = "nnPS2AlphaBlendingFix" + $nodeType;

	if ( `optionMenuGrp -query -value $grpName[0]` == "FIX" ) {
		intSliderGrp -edit -enable true $grpName[1];
	}
	else {
		intSliderGrp -edit -enable false $grpName[1];
	}
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaBlendingFix
//----------------------------------------------------------------------------
proc nnPS2AlphaBlendingFixReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2AlphaBlendingFix", "nnPS2AlphaBlending2Fix" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2AlphaBlendingFixNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingFix" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		255
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2AlphaBlendingFixReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label			"Alpha Blending Fix"
					-minValue		0
					-maxValue		255
					-changeCommand	( "nnPS2SetPresetFromAlphaBlending " + $nodeName )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2AlphaBlendingFixReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingFix" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2AlphaBlendingFixNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingFix1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaBlendingFixNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingFix2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaBlendingFixNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	// changeCommandを更新
	intSliderGrp  -edit -changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName ) $grpName;

	nnPS2EnableAlphaBlendingFix( $nodeType );
	//nnPS2SetPresetFromAlphaBlending( $nodeName );
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaBlendingD
//----------------------------------------------------------------------------
proc nnPS2AlphaBlendingDReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2AlphaBlendingD", "nnPS2AlphaBlending2D" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2AlphaBlendingDNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingD" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 1;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2AlphaBlendingDReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Alpha Blending D"
					-changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName )
					$grpName;
					menuItem -label "SRC COLOR"  -data 0;
					menuItem -label "DEST COLOR" -data 1;
					menuItem -label "ZERO"		 -data 2;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaBlendingDReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2AlphaBlendingD" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaBlendingDNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingD1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaBlendingDNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaBlendingD2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaBlendingDNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnPS2SetPresetFromAlphaBlending " + $nodeName ) $grpName;

	nnPS2SetPresetFromAlphaBlending( $nodeName );
}

//----------------------------------------------------------------------------
// 			nnPS2ManualColorClamp
//----------------------------------------------------------------------------
global proc nnPS2ManualColorClampNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2ManualColorClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Color Clamp"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPS2EnableColorClamp " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2ManualColorClampReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2ManualColorClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPS2ManualColorClampNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ManualColorClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ManualColorClampNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ManualColorClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ManualColorClampNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnableColorClamp " + $nodeType ) $grpName;
}

global proc nnPS2EnableColorClamp( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0] = "nnPS2ManualColorClamp" + $nodeType;
	$grpName[1] = "nnPS2ColorClampRGB"	  + $nodeType;
	$grpName[2] = "nnPS2ColorClampA"	  + $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	intSliderGrp -edit -enable $value $grpName[1];
	intSliderGrp -edit -enable $value $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnPS2ColorClampRGB
//----------------------------------------------------------------------------
proc nnPS2ColorClampRGBReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2ColorClamp1RGB", "nnPS2ColorClamp2RGB" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2ColorClampRGBNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ColorClampRGB" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		255
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 255;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2ColorClampRGBReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Color Clamp RGB"
					-minValue	0
					-maxValue	255
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2ColorClampRGBReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ColorClampRGB" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2ColorClampRGBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ColorClampRGB1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ColorClampRGBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ColorClampRGB2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ColorClampRGBNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	nnPS2EnableColorClamp( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2ColorClampA
//----------------------------------------------------------------------------
proc nnPS2ColorClampAReplaceVer0_75_00( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];
	string $oldattr[] = { "nnPS2ColorClamp1A", "nnPS2ColorClamp2A" };

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];

	int $i;
	for( $i = 0; $i < 2; $i++ ) {
		// Version0.50.00のアトリビュートがあったらその値をセット
		if ( `attributeQuery -exists -node $nodeName $oldattr[$i]` ) {
			setAttr ($nodeName + "." + $attr[$i]) (`getAttr ($nodeName + "." + $oldattr[$i])`);
			// Version0.50.00のアトリビュートを削除
			deleteAttr ($nodeName + "." + $oldattr[$i]);
		}
	}
}

global proc nnPS2ColorClampANew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ColorClampA" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		255
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 255;
		}
	}
	// Version0.50.00のアトリビュートをVersion0.75.00のアトリビュートに置き換え
	nnPS2ColorClampAReplaceVer0_75_00( $attrName1, $attrName2 );
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Color Clamp A"
					-minValue	0
					-maxValue	255
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2ColorClampAReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ColorClampA" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2ColorClampANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ColorClampA1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ColorClampANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ColorClampA2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ColorClampANew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	nnPS2EnableColorClamp( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaTest
//----------------------------------------------------------------------------
global proc nnPS2AlphaTestNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaTest" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) true;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Alpha Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPS2EnableAlphaTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaTestReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaTest" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPS2AlphaTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaTest1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaTest1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaTestNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnPS2EnableAlphaTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[5];
	$grpName[0] = "nnPS2AlphaTest"			+ $nodeType;
	$grpName[1] = "nnPS2ManualAlphaRef"		+ $nodeType;
	$grpName[2] = "nnPS2AlphaTestMode"		+ $nodeType;
	$grpName[3] = "nnPS2AlphaRefData"		+ $nodeType;
	$grpName[4] = "nnPS2AlphaFailMode"		+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	int $value2 = `checkBoxGrp -query -value1 $grpName[1]`;
	checkBoxGrp		-edit	-enable $value1 $grpName[1];
	optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[2];
	if(($value1*$value2) == 0) {
		optionMenuGrp	-edit -select 7 $grpName[2];
	}
	intSliderGrp	-edit	-enable ($value1*$value2) $grpName[3];
	optionMenuGrp	-edit	-enable $value1 $grpName[4];
}

//----------------------------------------------------------------------------
// 			nnPS2ManualAlphaRef
//----------------------------------------------------------------------------
global proc nnPS2ManualAlphaRefNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ManualAlphaRef" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Alpha Ref Data"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPS2EnableManualAlphaRefData " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2ManualAlphaRefReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ManualAlphaRef" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPS2ManualAlphaRefNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ManualAlphaRef1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ManualAlphaRefNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ManualAlphaRef2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ManualAlphaRefNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnableManualAlphaRefData " + $nodeType ) $grpName;
}

global proc nnPS2EnableManualAlphaRefData( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0] = "nnPS2ManualAlphaRef"		+ $nodeType;
	$grpName[1] = "nnPS2AlphaTestMode"		+ $nodeType;
	$grpName[2] = "nnPS2AlphaRefData"		+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value $grpName[1];
	if($value == 0) {
		optionMenuGrp	-edit -select 7 $grpName[1];
	}
	intSliderGrp	-edit	-enable $value $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnPS2AlphaTestMode
//----------------------------------------------------------------------------
global proc nnPS2AlphaTestModeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaTestMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		7
			$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 6;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Test Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "ALWAYS"		-data 1;
					menuItem -label "LESS"			-data 2;
					menuItem -label "LESS EQUAL"	-data 3;
					menuItem -label "EQUAL"			-data 4;
					menuItem -label "GREATER EQUAL"	-data 5;
					menuItem -label "GREATER"		-data 6;
					menuItem -label "NOT EQUAL"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaTestModeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaTestMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaTestModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaTestMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaTestModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaTestMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaTestModeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	nnPS2EnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
//	 		nnPS2AlphaRefData
//----------------------------------------------------------------------------
global proc nnPS2AlphaRefDataNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaRefData" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		255
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Alpha Reference Data"
					-minValue	0
					-maxValue	255
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2AlphaRefDataReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaRefData" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2AlphaRefDataNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaRefData1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaRefDataNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaRefData2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaRefDataNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}
	nnPS2EnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
//	 		nnPS2AlphaFailMode
//----------------------------------------------------------------------------
global proc nnPS2AlphaFailModeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaFailMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		4
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 4;
		}
		// 既存データの互換性の為、属性作り直し
		else {
			// 既存の属性値を保存
			int $modeType = `getAttr ($nodeName+"."+$attr[$i])`;
			// 既存の属性の削除
			deleteAttr ($nodeName+"."+$attr[$i]);
			// 新規に属性の作成
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		4
				$nodeName;
			setAttr ($nodeName+"."+$attr[$i]) $modeType;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Fail Mode" $grpName;
					menuItem -label "KEEP"		-data 0;
					menuItem -label "FB_ONLY"	-data 1;
					menuItem -label "ZB_ONLY"	-data 2;
					menuItem -label "RGB_ONLY"	-data 3;
					menuItem -label "AUTO"		-data 4;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2AlphaFailModeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2AlphaFailMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2AlphaFailModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaFailMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2AlphaFailModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2AlphaFailMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2AlphaFailModeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	nnPS2EnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2DstAlphaTest
//----------------------------------------------------------------------------
global proc nnPS2DstAlphaTestNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2DstAlphaTest" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Dst Alpha Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnPS2EnableDstAlphaTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2DstAlphaTestReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2DstAlphaTest" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		nnPS2DstAlphaTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2DstAlphaTest1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2DstAlphaTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2DstAlphaTest2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2DstAlphaTestNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnableDstAlphaTest " + $nodeType ) $grpName;
}

global proc nnPS2EnableDstAlphaTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];

	$grpName[0] = "nnPS2DstAlphaTest"		+ $nodeType;
	$grpName[1] = "nnPS2DstAlphaTestMode"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	optionMenuGrp -edit	-enable $value $grpName[1];
}

//----------------------------------------------------------------------------
//		 	nnPS2DstAlphaTestMode
//----------------------------------------------------------------------------
global proc nnPS2DstAlphaTestModeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2DstAlphaTestMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		1
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Dst Alpha Test Mode" $grpName;
					menuItem -label "ALPHA0"	-data 0;
					menuItem -label "ALPHA1"	-data 1;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2DstAlphaTestModeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2DstAlphaTestMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2DstAlphaTestModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2DstAlphaTestMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2DstAlphaTestModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2DstAlphaTestMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2DstAlphaTestModeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	nnPS2EnableDstAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
//	 		nnPS2ZBufferTest
//----------------------------------------------------------------------------
global proc nnPS2ZBufferTestNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ZBufferTest" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) true;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Z Buffer Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			true
					-changeCommand		( "nnPS2EnableZBufferTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2ZBufferTestReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ZBufferTest" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2ZBufferTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferTest1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ZBufferTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferTest2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ZBufferTestNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnableZBufferTest " + $nodeType ) $grpName;
}

global proc nnPS2EnableZBufferTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0] = "nnPS2ZBufferTest"		+ $nodeType;
	$grpName[1] = "nnPS2ZBufferTestMode"	+ $nodeType;
//	$grpName[2] = "nnPS2ZBufferUpdate"		+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value	$grpName[1];
//	checkBoxGrp		-edit	-enable $value	$grpName[2];
}

//----------------------------------------------------------------------------
// 			nnPS2ZBufferTestMode
//----------------------------------------------------------------------------
global proc nnPS2ZBufferTestModeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ZBufferTestMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値セット
			setAttr ($nodeName+"."+$attr[$i]) 2;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Z Buffer Test Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "ALWAYS"		-data 1;
					menuItem -label "GREATER EQUAL"	-data 2;
					menuItem -label "GREATER"		-data 3;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2ZBufferTestModeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ZBufferTestMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2ZBufferTestModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferTestMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ZBufferTestModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferTestMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ZBufferTestModeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	nnPS2EnableZBufferTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2ZBufferUpdate
//----------------------------------------------------------------------------
global proc nnPS2ZBufferUpdateNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ZBufferUpdate" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) true;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Z Buffer Update"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2ZBufferUpdateReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2ZBufferUpdate" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2ZBufferUpdateNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferUpdate1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ZBufferUpdateNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferUpdate2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ZBufferUpdateNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	nnPS2EnableZBufferTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2ManualMipmapParam
//----------------------------------------------------------------------------
global proc nnPS2ManualMipmapNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2ManualMipmap" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Mipmap Param"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPS2EnableManualMipmap " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2ManualMipmapReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPS2ManualMipmap" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPS2ManualMipmapNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ManualMipmapParam1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2ManualMipmapNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ManualMipmapParam2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2ManualMipmapNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPS2EnableManualMipmap " + $nodeType ) $grpName;
}

global proc nnPS2EnableManualMipmap( string $nodeType )
{
	// コントロール名を作成
	string $grpName[5];
	$grpName[0] = "nnPS2ManualMipmap" + $nodeType;
	$grpName[1] = "nnPS2MipmapLCM"	  + $nodeType;
	$grpName[2] = "nnPS2MipmapL"	  + $nodeType;
	$grpName[3] = "nnPS2MipmapK0"	  + $nodeType;
	$grpName[4] = "nnPS2MipmapK1"	  + $nodeType;

	int $value1 = `checkBoxGrp		-query -value1 $grpName[0]`;
	int $value2 = `optionMenuGrp	-query -value  $grpName[1]`;

	if( $value1 == 0 ) {
		optionMenuGrp	-edit -enable $value1 $grpName[1];
		optionMenuGrp	-edit -enable $value1 $grpName[2];
		intSliderGrp	-edit -enable $value1 $grpName[3];
		intSliderGrp	-edit -enable $value1 $grpName[4];
	}
	else {
		optionMenuGrp	-edit -enable $value1 $grpName[1];
		if( $value2 == 0 ) {
			optionMenuGrp	-edit -enable true $grpName[2];
			intSliderGrp	-edit -enable true $grpName[3];
		}
		else {
			optionMenuGrp	-edit -enable false $grpName[2];
			intSliderGrp	-edit -enable false $grpName[3];
		}
		intSliderGrp	-edit -enable $value2 $grpName[4];
	}
}

//----------------------------------------------------------------------------
// 			nnPS2MipmapLCM
//----------------------------------------------------------------------------
global proc nnPS2MipmapLCMNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapLCM" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		1
				$nodeName;
			// デフォルト値セット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "LCM"
					-changeCommand		( "nnPS2EnableManualMipmap " + $nodeType )
					$grpName;

					menuItem -label "0"		-data 0;
					menuItem -label "1"		-data 1;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2MipmapLCMReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapLCM" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2MipmapLCMNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2MipmapLCM1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2MipmapLCMNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2MipmapLCM2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2MipmapLCMNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnPS2EnableManualMipmap " + $nodeType ) $grpName;
//	nnPS2EnableManualMipmap( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2MipmapL
//----------------------------------------------------------------------------
global proc nnPS2MipmapLNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapL" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値セット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "L (LCM=0)" $grpName;
					menuItem -label "0"		-data 0;
					menuItem -label "1"		-data 1;
					menuItem -label "2"		-data 2;
					menuItem -label "3"		-data 3;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPS2MipmapLReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapL" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPS2MipmapLNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferTestMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2MipmapLNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2ZBufferTestMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2MipmapLNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	nnPS2EnableManualMipmap( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2MipmapK0
//----------------------------------------------------------------------------
global proc nnPS2MipmapK0New( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapK0" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		-2048
				-maxValue		2047
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"K (LCM=0)"
					-minValue	-2048
					-maxValue	2047
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2MipmapK0Replace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapK0" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2MipmapK0New( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2MipmapK01)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2MipmapK0New( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2MipmapK02)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2MipmapK0New( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	nnPS2EnableManualMipmap( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPS2MipmapK1
//----------------------------------------------------------------------------
global proc nnPS2MipmapK1New( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapK1" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		6
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPS2TextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"K (LCM=1)"
					-minValue	0
					-maxValue	6
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPS2MipmapK1Replace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName		= "nnPS2MipmapK1" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPS2MipmapK1New( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2MipmapK11)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPS2MipmapK1New( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPS2MipmapK12)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPS2MipmapK1New( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPS2ConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	nnPS2EnableManualMipmap( $nodeType );
}

//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//
//			GC Material Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnGCMaterialAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnGCMaterialAttributeFrameLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnMaterialAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"GAMECUBE Material Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// GUIの表示設定を変更
	int $nngc = nnGCGetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nngc $grpName;
}

global proc nnGCMaterialAttributeFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		nnGCMaterialAttributeFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nngc = nnGCGetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nngc $grpName;
}

//----------------------------------------------------------------------------
//			nnGCMaterialAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnGCMaterialAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnGCMaterialAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnGCMaterialAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		nnGCMaterialAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
// 			nnGCUVMode
//----------------------------------------------------------------------------
global proc nnGCUVModeNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		3
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "UV Format" $grpName;
					menuItem -label "AUTO"			-data 0;
					menuItem -label "FIXED16_8"		-data 1;
					menuItem -label "FIXED16_10"	-data 2;
					menuItem -label "FLOAT"			-data 3;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCUVModeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCUVModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCUVModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnGCAlphaBlendingMode
//----------------------------------------------------------------------------
global proc nnGCAlphaBlendingModeNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		3
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 1;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Mode" $grpName;
					menuItem -label "NONE"		-data 0;
					menuItem -label "BLEND"		-data 1;
					menuItem -label "LOGIC"		-data 2;
					menuItem -label "SUBTRACT"	-data 3;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCAlphaBlendingModeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaBlendingModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaBlendingModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnGCAlphaBlendingSrc
//----------------------------------------------------------------------------
global proc nnGCAlphaBlendingSrcNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Factor Src" $grpName;
					menuItem -label "ZERO"			-data 0;
					menuItem -label "ONE"			-data 1;
					menuItem -label "DSTCOL"		-data 2;
					menuItem -label "INVDSTCOL"		-data 3;
					menuItem -label "SRCALPHA"		-data 4;
					menuItem -label "INVSRCALPHA"	-data 5;
					menuItem -label "DSTALPHA"		-data 6;
					menuItem -label "INVDSTALPHA"	-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCAlphaBlendingSrcReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaBlendingSrcNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaBlendingSrcNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	optionMenuGrp -edit $grpName;
}

//----------------------------------------------------------------------------
// 			nnGCAlphaBlendingDst
//----------------------------------------------------------------------------
global proc nnGCAlphaBlendingDstNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Frm Buf Blend Factor Dst" $grpName;
					menuItem -label "ZERO"			-data 0;
					menuItem -label "ONE"			-data 1;
					menuItem -label "SRCCOL"        -data 2;
					menuItem -label "INVSRCCOL" 	-data 3;
					menuItem -label "SRCALPHA"		-data 4;
					menuItem -label "INVSRCALPHA"	-data 5;
					menuItem -label "DSTALPHA"		-data 6;
					menuItem -label "INVDSTALPHA"	-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCAlphaBlendingDstReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaBlendingDstNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaBlendingDstNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnGCAlphaBlendingLogic
//----------------------------------------------------------------------------
global proc nnGCAlphaBlendingLogicNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		15
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Logic" $grpName;
					menuItem -label "CLEAR"		-data 0;
					menuItem -label "AND"		-data 1;
					menuItem -label "REVAND"    -data 2;
					menuItem -label "COPY" 		-data 3;
					menuItem -label "INVAND"	-data 4;
					menuItem -label "NOOP"		-data 5;
					menuItem -label "XOR"		-data 6;
					menuItem -label "OR"		-data 7;
					menuItem -label "NOR"		-data 8;
					menuItem -label "EQUIV"		-data 9;
					menuItem -label "INV"		-data 10;
					menuItem -label "REVOR"		-data 11;
					menuItem -label "INVCOPY"	-data 12;
					menuItem -label "INVOR"		-data 13;
					menuItem -label "NAND"		-data 14;
					menuItem -label "SET"		-data 15;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCAlphaBlendingLogicReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaBlendingLogicNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaBlendingLogicNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnGCVtxColTexEmulate
//----------------------------------------------------------------------------
global proc nnGCVtxColTexEmulateNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Vertex Color Tex Emulate"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnGCVtxColTexEmulateReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnGCVtxColTexEmulateNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCVtxColTexEmulateNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnGCManualAlphaRef
//----------------------------------------------------------------------------
global proc nnGCManualAlphaRefNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Alpha Ref Data"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnGCEnableManualAlphaRefData " + $nodeType )
					$grpName;

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnGCManualAlphaRefReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnGCManualAlphaRefNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCManualAlphaRefNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnGCEnableManualAlphaRefData " + $nodeType ) $grpName;
}

global proc nnGCEnableManualAlphaRefData( string $nodeType )
{
	// コントロール名を作成
	string $grpName[6];
	$grpName[0] = "nnGCManualAlphaRef"		+ $nodeType;
	$grpName[1] = "nnGCAlphaCompMode0"		+ $nodeType;
	$grpName[2] = "nnGCAlphaCompMode1"		+ $nodeType;
	$grpName[3] = "nnGCAlphaRefData0"		+ $nodeType;
	$grpName[4] = "nnGCAlphaRefData1"		+ $nodeType;
	$grpName[5] = "nnGCAlphaCompOperand"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value $grpName[1];
	if($value == 0) {
		optionMenuGrp	-edit -select 7 $grpName[1];
	}
	optionMenuGrp	-edit	-enable $value $grpName[2];
	if($value == 0) {
		optionMenuGrp	-edit -select 8 $grpName[2];
	}
	intSliderGrp	-edit	-enable $value $grpName[3];
	intSliderGrp	-edit	-enable $value $grpName[4];
	optionMenuGrp	-edit	-enable $value $grpName[5];
	if($value == 0) {
		optionMenuGrp	-edit -select 1 $grpName[5];
	}
}

//----------------------------------------------------------------------------
// 			nnGCAlphaCompMode0
//----------------------------------------------------------------------------
global proc nnGCAlphaCompMode0New( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 6;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Compare Mode 0" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "LESS EQUAL"    -data 2;
					menuItem -label "EQUAL" 		-data 3;
					menuItem -label "NOT EQUAL"		-data 4;
					menuItem -label "GREATER EQUAL"	-data 5;
					menuItem -label "GREATER"		-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCAlphaCompMode0Replace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaCompMode0New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaCompMode0New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnGCEnableManualAlphaRefData( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCAlphaCompMode1
//----------------------------------------------------------------------------
global proc nnGCAlphaCompMode1New( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 7;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Compare Mode 1" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "LESS EQUAL"    -data 2;
					menuItem -label "EQUAL" 		-data 3;
					menuItem -label "NOT EQUAL"		-data 4;
					menuItem -label "GREATER EQUAL"	-data 5;
					menuItem -label "GREATER"		-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnGCAlphaCompMode1Replace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaCompMode1New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaCompMode1New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnGCEnableManualAlphaRefData( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCAlphaRefData0
//----------------------------------------------------------------------------
global proc nnGCAlphaRefData0New( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		255
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Alpha Reference Data 0"
					-minValue	0
					-maxValue	255
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnGCAlphaRefData0Replace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnGCAlphaRefData0New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaRefData0New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}

	nnGCEnableManualAlphaRefData( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCAlphaRefData1
//----------------------------------------------------------------------------
global proc nnGCAlphaRefData1New( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		255
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Alpha Reference Data 1"
					-minValue	0
					-maxValue	255
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnGCAlphaRefData1Replace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnGCAlphaRefData1New( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaRefData1New( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}

	nnGCEnableManualAlphaRefData( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCAlphaCompOperand
//----------------------------------------------------------------------------
global proc nnGCAlphaCompOperandNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		3
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Compare Operand" $grpName;
					menuItem -label "AND"		-data 0;
					menuItem -label "OR"		-data 1;
					menuItem -label "XOR"    	-data 2;
					menuItem -label "XNOR" 		-data 3;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnGCAlphaCompOperandReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCAlphaCompOperandNew( $attrName );
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCAlphaCompOperandNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnGCEnableManualAlphaRefData( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCZBufferComp
//----------------------------------------------------------------------------
global proc nnGCZBufferCompNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Z Buffer Compare"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			true
					-changeCommand		( "nnGCEnableZBufferComp " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnGCZBufferCompReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnGCZBufferCompNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCZBufferCompNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnGCEnableZBufferComp " + $nodeType ) $grpName;
}

global proc nnGCEnableZBufferComp( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];

	$grpName[0] = "nnGCZBufferComp"		+ $nodeType;
	$grpName[1] = "nnGCZBufferCompMode"	+ $nodeType;
//	$grpName[2] = "nnGCZBufferUpdate"	+ $nodeType;
	$grpName[2] = "nnGCZBufferCompLoc"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	optionMenuGrp -edit	-enable $value $grpName[1];
//	checkBoxGrp   -edit	-enable $value $grpName[2];
	optionMenuGrp -edit	-enable $value $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnGCZBufferCompMode
//----------------------------------------------------------------------------
global proc nnGCZBufferCompModeNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 2;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Z Buffer Compare Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "LESS EQUAL"    -data 2;
					menuItem -label "EQUAL" 		-data 3;
					menuItem -label "NOT EQUAL"		-data 4;
					menuItem -label "GREATER EQUAL"	-data 5;
					menuItem -label "GREATER"		-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCZBufferCompModeReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCZBufferCompModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCZBufferCompModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	nnGCEnableZBufferComp( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCZBufferUpdate
//----------------------------------------------------------------------------
global proc nnGCZBufferUpdateNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Z Buffer Update"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnGCZBufferUpdateReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnGCZBufferUpdateNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ){
		nnGCZBufferUpdateNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	nnGCEnableZBufferComp( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnGCZBufferCompLoc
//----------------------------------------------------------------------------
global proc nnGCZBufferCompLocNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		2
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Z Buffer Compare Loc" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "AFTER"		-data 1;
					menuItem -label "BEFORE"	-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnGCZBufferCompLocReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCZBufferCompLocNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnGCZBufferCompLocNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	nnGCEnableZBufferComp( $nodeType );
}

//----------------------------------------------------------------------------
//
//			GC Texture Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnGCTextureAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnGCTextureAttributeFrameLayoutNew( string $attrName )
{
	string $list[];
	tokenize( $attrName, ".", $list );
	string $attr 		= $list[1];
	string $nodeName 	= $list[0];
	string $nodeType 	= `nodeType $nodeName`;
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnGCMaterialAttributeColumnLayout" + $nodeType );
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"GAMECUBE Texture Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnGCTextureAttributeFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		nnGCTextureAttributeFrameLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnGCTextureAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnGCTextureAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnGCTextureAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnGCTextureAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		nnGCTextureAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnGCLayerSelect
//----------------------------------------------------------------------------
global proc nnGCLayerSelectNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Layer Select"
					-changeCommand ("nnGCChangeConnectControl " + $nodeName )
					$grpName;
					menuItem -label "BOTTOM ( T1 ) ";
					menuItem -label "LOWER MIDDLE ( T2 ) ";
					menuItem -label "UPPER MIDDLE ( T3 ) ";
					menuItem -label "TOP ( T4 ) "	;
				setParent -menu ..;

				separator -style "single";

			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnGCLayerSelectReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCLayerSelectNew( $attrName );
	}
	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ("nnGCChangeConnectControl " + $nodeName ) $grpName;

}

global proc nnGCChangeConnectControl( string $nodeName )
{
	nnGCBlendModeReplace	( $nodeName + ".nnGCBlendMode1",	$nodeName + ".nnGCBlendMode2",
							  $nodeName + ".nnGCBlendMode3",	$nodeName + ".nnGCBlendMode4"		);
	nnGCUsePaletteReplace	( $nodeName + ".nnGCUsePalette1",	$nodeName + ".nnGCUsePalette2",
							  $nodeName + ".nnGCUsePalette3",	$nodeName + ".nnGCUsePalette4"		);
	nnGCPaletteBankReplace	( $nodeName + ".nnGCPaletteBank1",	$nodeName + ".nnGCPaletteBank2",
							  $nodeName + ".nnGCPaletteBank3",	$nodeName + ".nnGCPaletteBank4"		);
	nnGCEnviromentMapReplace( $nodeName + ".nnGCEnviromentMap1",$nodeName + ".nnGCEnviromentMap2",
							  $nodeName + ".nnGCEnviromentMap3",$nodeName + ".nnGCEnviromentMap4"	);
	nnGCUClampReplace		( $nodeName + ".nnGCUClamp1",		$nodeName + ".nnGCUClamp2",
							  $nodeName + ".nnGCUClamp3",		$nodeName + ".nnGCUClamp4"			);
	nnGCVClampReplace		( $nodeName + ".nnGCVClamp1",		$nodeName + ".nnGCVClamp2",
							  $nodeName + ".nnGCVClamp3",		$nodeName + ".nnGCVClamp4"			);
	nnGCLightBlendReplace	( $nodeName + ".nnGCLightBlend1",	$nodeName + ".nnGCLightBlend2",
							  $nodeName + ".nnGCLightBlend3",	$nodeName + ".nnGCLightBlend4"		);
}

proc nnGCConnectControl( string $attrName1, string $attrName2, string $attrName3, string $attrName4, string $grpName, string $nodeType, int $index )
{
	string $attr;
	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnGCLayerSelect"+$nodeType)`;
	switch( $currentLayer ) {
		// BOTTOM ( T1 )
		case 1:
			$attr = $attrName1;
			break;
		// LOWER MIDDLE ( T2 )
		case 2:
			$attr = $attrName2;
			break;
		// UPPER MIDDLE ( T3 )
		case 3:
			$attr = $attrName3;
			break;
		// TOP ( T3 )
		case 4:
			$attr = $attrName4;
			break;
		default:
			error( "Current Layer = " + $currentLayer + " is invalid!\n");
	}
	// アトリビュート1とコントロールを接続する
	if( $index > 0 ) {
		connectControl -index $index $grpName $attr;
	}
	else {
		connectControl $grpName $attr;
	}
}

//----------------------------------------------------------------------------
// 			nnGCBlendMode
//----------------------------------------------------------------------------
global proc nnGCBlendModeNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];
	string $attrName[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	$attrName[0] = $attrName1;
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	$attrName[1] = $attrName2;
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	$attrName[2] = $attrName3;
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	$attrName[3] = $attrName4;
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCBlendMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		10
				$nodeName;
			if( $i == 0 ) {
				// T1のデフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 0;
			}
			else {
				// T2 or T3 or T4のデフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 6;
			}
		}
		// 既存データの互換性の為、属性作り直し
		else {
			// 既存の属性値を保存
			int $modeType = `getAttr ($nodeName+"."+$attr[$i])`;
			// 既存の属性の削除
			deleteAttr ($nodeName+"."+$attr[$i]);
			// 新規に属性の作成
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		10
				$nodeName;
			setAttr ($nodeName+"."+$attr[$i]) $modeType;
		}
/************
		else {
			if( `addAttr -query -maxValue $attrName[$i]` != 6 ) {
				addAttr -edit -maxValue 6 $attrName[$i];
			}
		}
************/
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Texture Stage" $grpName;
					menuItem -label "MODULATE"			-data 0;
					menuItem -label "DECAL"				-data 1;
					menuItem -label "REPLACE"			-data 2;
					menuItem -label "BLEND"				-data 3;
					menuItem -label "PASSCLR"			-data 4;
					menuItem -label "ALPHA TEXTURE"		-data 5;
					menuItem -label "DECAL2"			-data 6;
					menuItem -label "SPECULAR MAP"		-data 7;
					menuItem -label "SPECULAR MAP2"		-data 8;
					menuItem -label "ADD"				-data 9;
					menuItem -label "SUBTRACT"			-data 10;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnGCBlendModeReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCBlendMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCBlendMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCBlendMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCBlendMode3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCBlendMode4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnGCUsePalette
//----------------------------------------------------------------------------
global proc nnGCUsePaletteNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCUsePalette" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Use Palette"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnGCEnablePaletteBank " + $nodeName )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnGCUsePaletteReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCUsePalette" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnGCUsePaletteNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUsePalette1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCUsePaletteNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUsePalette2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCUsePaletteNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUsePalette3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCUsePaletteNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUsePalette4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCUsePaletteNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnGCEnablePaletteBank " + $nodeType ) $grpName;
}

global proc nnGCEnablePaletteBank( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnGCUsePalette"  + $nodeType;
	$grpName[1]	= "nnGCPaletteBank" + $nodeType;

	intSliderGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[1];
}

//----------------------------------------------------------------------------
// 			nnGCPaletteBank
//----------------------------------------------------------------------------
global proc nnGCPaletteBankNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCPaletteBank" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		63
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Palette Bank"
					-minValue	0
					-maxValue	63
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 0 );
}

global proc nnGCPaletteBankReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCPaletteBank" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnGCPaletteBankNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCPaletteBank1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCPaletteBankNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCPaletteBank2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCPaletteBankNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCPaletteBank3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCPaletteBankNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCPaletteBank4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCPaletteBankNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 0 );
	}

	nnGCEnablePaletteBank( $nodeType );
}

//----------------------------------------------------------------------------
//		 	nnGCEnviromentMap
//----------------------------------------------------------------------------
global proc nnGCEnviromentMapNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCEnviromentMap" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Enviroment Map"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnGCEnviromentMapReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCEnviromentMap" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnGCEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCEnviromentMap1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCEnviromentMap2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCEnviromentMap3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCEnviromentMap4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnGCUClamp
//----------------------------------------------------------------------------
global proc nnGCUClampNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCUClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type U" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CLAMP"		-data 1;
					menuItem -label "REPEAT"	-data 2;
					menuItem -label "MIRROR"	-data 3;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnGCUClampReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCUClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnGCVClamp
//----------------------------------------------------------------------------
global proc nnGCVClampNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCVClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type V" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CLAMP"		-data 1;
					menuItem -label "REPEAT"	-data 2;
					menuItem -label "MIRROR"	-data 3;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnGCVClampReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCVClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCUClamp4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnGCLightBlend
//----------------------------------------------------------------------------
global proc nnGCLightBlendNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCLightBlend" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			if( $i == 0 ) {
				// T1のデフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) false;
			}
			else {
				// T2 or T3 or T4のデフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) true;
			}
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnGCTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Light Blend"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnGCLightBlendReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnGCLightBlend" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnGCLightBlendNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCLightBlend1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnGCLightBlendNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCLightBlend2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnGCLightBlendNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCLightBlend3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnGCLightBlendNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnGCLightBlend4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnGCLightBlendNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnGCConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}


//----------------------------------------------------------------------------
//
//			XBOX Material Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnXBMaterialAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnXBMaterialAttributeFrameLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PS2用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnMaterialAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"DirectX G1.1 Material Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// GUIの表示設定を変更
	int $nnxb = nnXBGetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nnxb $grpName;
}

global proc nnXBMaterialAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// XBOX用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		nnXBMaterialAttributeFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nnxb = nnXBGetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nnxb $grpName;
}

//----------------------------------------------------------------------------
//			nnXBMaterialAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnXBMaterialAttributeColumnLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// XBOXマテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeFrameLayout" + $nodeType );
		setUITemplate -pushTemplate attributeEditorTemplate;
				columnLayout -adjustableColumn true $grpName;
		setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnXBMaterialAttributeColumnLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// XBOXマテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		nnXBMaterialAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
// 			nnXBUVMode
//----------------------------------------------------------------------------
global proc nnXBUVModeNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		3
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "UV Format" $grpName;
					menuItem -label "AUTO"			-data 0;
					menuItem -label "FIXED16_8"		-data 1;
					menuItem -label "FIXED16_10"	-data 2;
					menuItem -label "FLOAT"			-data 3;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnXBUVModeReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBUVModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBUVModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnXBBlendFlag
//----------------------------------------------------------------------------
global proc nnXBBlendFlagNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Frame Buffer Blend"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnXBEnableBlendFlag " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnXBBlendFlagReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBBlendFlagNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBBlendFlagNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnXBEnableBlendFlag " + $nodeType ) $grpName;
}

global proc nnXBEnableBlendFlag( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];
	$grpName[0] = "nnXBBlendFlag"				+ $nodeType;
	$grpName[1] = "nnXBAlphaBlendingOperate"	+ $nodeType;
	$grpName[2] = "nnXBAlphaBlendingSrc"		+ $nodeType;
	$grpName[3] = "nnXBAlphaBlendingDst"		+ $nodeType;
	$grpName[4] = "nnXBAlphaBlendingLogic"		+ $nodeType;
	$grpName[5] = "nnAlphaBlendingConstColor"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	optionMenuGrp	-edit	-enable $value $grpName[1];
	optionMenuGrp	-edit	-enable $value $grpName[2];
	optionMenuGrp	-edit	-enable $value $grpName[3];
	optionMenuGrp	-edit	-enable $value $grpName[4];
	textField		-edit	-enable $value $grpName[5];
	text			-edit	-enable $value ($grpName[5]+"label1");
	text			-edit	-enable $value ($grpName[5]+"label2");
}

//----------------------------------------------------------------------------
// 			nnXBAlphaBlendingOperate
//----------------------------------------------------------------------------
global proc nnXBAlphaBlendingOperateNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		6
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Operate" $grpName;
					menuItem -label "ADD"			-data 0;
					menuItem -label "SUBTRACT"		-data 1;
					menuItem -label "REVSUBTRACT"	-data 2;
					menuItem -label "MIN"			-data 3;
					menuItem -label "MAX"			-data 4;
					menuItem -label "ADDSIGNED"		-data 5;
					menuItem -label "REVSUBSIGNED"	-data 6;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnXBAlphaBlendingOperateReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBAlphaBlendingOperateNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaBlendingOperateNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	optionMenuGrp -edit $grpName;
}

//----------------------------------------------------------------------------
// 			nnXBAlphaBlendingSrc
//----------------------------------------------------------------------------
global proc nnXBAlphaBlendingSrcNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		14
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Factor Src" $grpName;
					menuItem -label "ZERO"				-data 0;
					menuItem -label "ONE"				-data 1;
					menuItem -label "SRCCOL"			-data 2;
					menuItem -label "INVSRCCOL"			-data 3;
					menuItem -label "SRCALPHA"			-data 4;
					menuItem -label "INVSRCALPHA"		-data 5;
					menuItem -label "DSTALPHA"			-data 6;
					menuItem -label "INVDSTALPHA"		-data 7;
					menuItem -label "DSTCOL"			-data 8;
					menuItem -label "INVDSTCOL"			-data 9;
					menuItem -label "SRCALPHASAT"		-data 10;
					menuItem -label "CONSTANTCOL"		-data 11;
					menuItem -label "INVCONSTANTCOL"	-data 12;
					menuItem -label "CONSTANTALPHA"		-data 13;
					menuItem -label "INVCONSTANTALPHA"	-data 14;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnXBAlphaBlendingSrcReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBAlphaBlendingSrcNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaBlendingSrcNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	optionMenuGrp -edit $grpName;
}

//----------------------------------------------------------------------------
// 			nnXBAlphaBlendingDst
//----------------------------------------------------------------------------
global proc nnXBAlphaBlendingDstNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		14
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Factor Dst" $grpName;
					menuItem -label "ZERO"				-data 0;
					menuItem -label "ONE"				-data 1;
					menuItem -label "SRCCOL"			-data 2;
					menuItem -label "INVSRCCOL"			-data 3;
					menuItem -label "SRCALPHA"			-data 4;
					menuItem -label "INVSRCALPHA"		-data 5;
					menuItem -label "DSTALPHA"			-data 6;
					menuItem -label "INVDSTALPHA"		-data 7;
					menuItem -label "DSTCOL"			-data 8;
					menuItem -label "INVDSTCOL"			-data 9;
					menuItem -label "SRCALPHASAT"		-data 10;
					menuItem -label "CONSTANTCOL"		-data 11;
					menuItem -label "INVCONSTANTCOL"	-data 12;
					menuItem -label "CONSTANTALPHA"		-data 13;
					menuItem -label "INVCONSTANTALPHA"	-data 14;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnXBAlphaBlendingDstReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBAlphaBlendingDstNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaBlendingDstNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	optionMenuGrp -edit $grpName;
}

//----------------------------------------------------------------------------
// 			nnXBAlphaBlendingLogic
//----------------------------------------------------------------------------
global proc nnXBAlphaBlendingLogicNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		16
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Frm Buf Blend Logic" $grpName;
					menuItem -label "NONE"			-data 0;
					menuItem -label "CLEAR"			-data 1;
					menuItem -label "AND"			-data 2;
					menuItem -label "AND REVERSE"	-data 3;
					menuItem -label "COPY"			-data 4;
					menuItem -label "AND INVERTED"	-data 5;
					menuItem -label "NOOP"			-data 6;
					menuItem -label "XOR"			-data 7;
					menuItem -label "OR"			-data 8;
					menuItem -label "NOR"			-data 9;
					menuItem -label "EQUIV"			-data 10;
					menuItem -label "INVERT"		-data 11;
					menuItem -label "OR REVERSE"	-data 12;
					menuItem -label "COPY INVERTED"	-data 13;
					menuItem -label "OR_INVERTED"	-data 14;
					menuItem -label "NAND"			-data 15;
					menuItem -label "SET"			-data 16;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnXBAlphaBlendingLogicReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBAlphaBlendingLogicNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaBlendingLogicNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	optionMenuGrp -edit $grpName;
}

//----------------------------------------------------------------------------
// 			nnAlphaBlendingConstColor
//----------------------------------------------------------------------------
global string $nnBeforeAlphaBlendingConstColor;

global proc nnAlphaBlendingConstColorNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-dataType		"string"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName -type "string" "0x00000000";
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 200
					-columnAlign3		right center right
					("nnAlphaBlendingConstColorRowLayout"+$nodeType);
					text
						-label "Blend Const Color"
						($grpName+"label1");
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckAlphaBlendingConstColor " + $attrName )
						-receiveFocusCommand ( "nnSaveAlphaBlendingConstColor " + $attrName )
						$grpName;
					text
						-label "HEX ( 0x======== RGBA ) "
						($grpName+"label2");
				setParent ..;

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnAlphaBlendingConstColorReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnAlphaBlendingConstColorNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnAlphaBlendingConstColorNew( $attrName );
	}
}

global proc nnCheckAlphaBlendingConstColor( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// 現在のUserDataの値を取得
	string $userdata	= `textField -query -text $grpName`;

	int $startindex;
	string $matchdata;
	// HEX
	if( substring( $userdata, 1, 1 ) == "0" && substring( $userdata, 2, 2 ) == "x" ) {
		$startindex = 3;
		$matchdata = "0123456789abcdefABCDEF";
	}
	// DEC
	else {
		$startindex = 1;
		$matchdata = "0123456789";
	}

	global string $nnBeforeAlphaBlendingConstColor;
	int $i;
	// 入力されたUserDataをチェック
	for( $i = $startindex; $i <= (size($userdata)); $i++ ) {
		// 8桁以上の場合
		if( $i >= $startindex + 8 ) {
//			warning( "nnCheckAlphaBlendingConstColor : input UserData [" + $userdata + "] is over 8 figures [========]!\n" );
			warning( "// Warring : input UserData [" + $userdata + "] is over 8 figures [========]!\n" );
			setAttr $attrName -type "string" $nnBeforeAlphaBlendingConstColor;
			return;
		}
		string $charactor = substring( $userdata, $i, $i );
		// 不正な文字が入力された場合
		if( match( $charactor, $matchdata ) == "" ) {
//			warning( "nnCheckAlphaBlendingConstColor : input UserData [" + $userdata + "] is invalid valuable!\n" );
			warning( "// Warring : input UserData [" + $userdata + "] is invalid valuable!\n" );
			setAttr $attrName -type "string" $nnBeforeAlphaBlendingConstColor;
			return;
		}
	}
}

global proc nnSaveAlphaBlendingConstColor( string $attrName )
{
	global string $nnBeforeAlphaBlendingConstColor;
	// UserDataをセット
	$nnBeforeAlphaBlendingConstColor = `getAttr $attrName`;
}

//----------------------------------------------------------------------------
// 			nnXBAlphaTest
//----------------------------------------------------------------------------
global proc nnXBAlphaTestNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Alpha Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnXBEnableAlphaTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnXBAlphaTestReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBAlphaTestNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaTestNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnXBEnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnXBEnableAlphaTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];
	$grpName[0] = "nnXBAlphaTest"		+ $nodeType;
	$grpName[1] = "nnXBManualAlphaRef"	+ $nodeType;
	$grpName[2] = "nnXBAlphaTestMode"	+ $nodeType;
	$grpName[3] = "nnXBAlphaRefData"	+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	int $value2 = `checkBoxGrp -query -value1 $grpName[1]`;
	checkBoxGrp		-edit	-enable $value1 $grpName[1];
	optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[2];
	if( ($value1*$value2) == 0) {
		optionMenuGrp	-edit -select 5 $grpName[2];
	}
	intSliderGrp	-edit	-enable ($value1*$value2) $grpName[3];
}

//----------------------------------------------------------------------------
// 			nnXBManualAlphaRef
//----------------------------------------------------------------------------
global proc nnXBManualAlphaRefNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Alpha Ref Data"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnXBEnableManualAlphaRef " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

}

global proc nnXBManualAlphaRefReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBManualAlphaRefNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBManualAlphaRefNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnXBEnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnXBEnableManualAlphaRef( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0] = "nnXBManualAlphaRef"	+ $nodeType;
	$grpName[1] = "nnXBAlphaTestMode"	+ $nodeType;
	$grpName[2] = "nnXBAlphaRefData"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value $grpName[1];
	if($value == 0) {
		optionMenuGrp	-edit -select 5 $grpName[1];
	}
	intSliderGrp	-edit	-enable $value $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnXBAlphaTestMode
//----------------------------------------------------------------------------
global proc nnXBAlphaTestModeNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Test Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "EQUAL"			-data 2;
					menuItem -label "LESS EQUAL"	-data 3;
					menuItem -label "GREATER"		-data 4;
					menuItem -label "NOT EQUAL"		-data 5;
					menuItem -label "GREATER EQUAL"	-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnXBAlphaTestModeReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBAlphaBlendingDstNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaTestModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnXBEnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnXBAlphaRefData
//----------------------------------------------------------------------------
global proc nnXBAlphaRefDataNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		255
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Alpha Reference Data"
					-minValue	0
					-maxValue	255
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnXBAlphaRefDataReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnXBAlphaRefDataNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBAlphaRefDataNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}

	nnXBEnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnXBZBufferComp
//----------------------------------------------------------------------------
global proc nnXBZBufferCompNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"ZBuffer Compare"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			true
					-changeCommand		( "nnXBEnableZBufferComp " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnXBZBufferCompReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBZBufferCompNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBZBufferCompNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnXBEnableZBufferComp " + $nodeType ) $grpName;
}

global proc nnXBEnableZBufferComp( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0] = "nnXBZBufferComp"		+ $nodeType;
	$grpName[1] = "nnXBZBufferCompMode"	+ $nodeType;
//	$grpName[2] = "nnXBZBufferUpdate"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value $grpName[1];
//	checkBoxGrp   -edit	-enable $value $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnXBZBufferCompMode
//----------------------------------------------------------------------------
global proc nnXBZBufferCompModeNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 3;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "ZBuffer Compare Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "EQUAL"			-data 2;
					menuItem -label "LESS EQUAL"	-data 3;
					menuItem -label "GREATER"		-data 4;
					menuItem -label "NOT EQUAL"		-data 5;
					menuItem -label "GREATER EQUAL"	-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnXBZBufferCompModeReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBZBufferCompModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBZBufferCompModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnXBEnableZBufferComp( $nodeType );
}


//----------------------------------------------------------------------------
// 			nnXBZBufferUpdate
//----------------------------------------------------------------------------
global proc nnXBZBufferUpdateNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"ZBuffer Update"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnXBZBufferUpdateReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBZBufferUpdateNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnXBZBufferUpdateNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnXBEnableZBufferComp( $nodeType );
}

//----------------------------------------------------------------------------
//
//			Xbox Texture Attributes
//
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
//			nnXBLayerSelect
//----------------------------------------------------------------------------
global proc nnXBLayerSelectNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Layer Select"
					-changeCommand ("nnXBChangeConnectControl " + $nodeName )
					$grpName;
					menuItem -label "BOTTOM ( T1 ) ";
					menuItem -label "LOWER MIDDLE ( T2 ) ";
					menuItem -label "UPPER MIDDLE ( T3 ) ";
					menuItem -label "TOP ( T4 ) "	;
				setParent -menu ..;

				separator -style "single";

			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnXBLayerSelectReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBLayerSelectNew( $attrName );
	}
	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ("nnXBChangeConnectControl " + $nodeName ) $grpName;

}

global proc nnXBChangeConnectControl( string $nodeName )
{
	nnXBBlendModeReplace	( $nodeName + ".nnXBBlendMode1",	$nodeName + ".nnXBBlendMode2",
							  $nodeName + ".nnXBBlendMode3",	$nodeName + ".nnXBBlendMode4"		);
	nnXBLightStageReplace	( $nodeName + ".nnXBLightStage1",	$nodeName + ".nnXBLightStage2",
							  $nodeName + ".nnXBLightStage3",	$nodeName + ".nnXBLightStage4"		);
	nnXBEnviromentMapReplace( $nodeName + ".nnXBEnviromentMap1",$nodeName + ".nnXBEnviromentMap2",
							  $nodeName + ".nnXBEnviromentMap3",$nodeName + ".nnXBEnviromentMap4"	);
	nnXBUClampReplace		( $nodeName + ".nnXBUClamp1",		$nodeName + ".nnXBUClamp2",
							  $nodeName + ".nnXBUClamp3",		$nodeName + ".nnXBUClamp4"			);
	nnXBVClampReplace		( $nodeName + ".nnXBVClamp1",		$nodeName + ".nnXBVClamp2",
							  $nodeName + ".nnXBVClamp3",		$nodeName + ".nnXBVClamp4"			);
	nnXBLODBiasReplace		( $nodeName + ".nnXBLODBias1",		$nodeName + ".nnXBLODBias2",
							  $nodeName + ".nnXBLODBias3",		$nodeName + ".nnXBLODBias4"			);
	nnXBMaxMipLevelReplace	( $nodeName + ".nnXBMaxMipLevel1",	$nodeName + ".nnXBMaxMipLevel2",
							  $nodeName + ".nnXBMaxMipLevel3",	$nodeName + ".nnXBMaxMipLevel4"		);
	nnXBFilterModeReplace	( $nodeName + ".nnXBFilterMode1",	$nodeName + ".nnXBFilterMode2",
							  $nodeName + ".nnXBFilterMode3",	$nodeName + ".nnXBFilterMode4"		);
	nnXBMagFilterModeReplace( $nodeName + ".nnXBMagFilterMode1",$nodeName + ".nnXBMagFilterMode2",
							  $nodeName + ".nnXBMagFilterMode3",$nodeName + ".nnXBMagFilterMode4"	);
	nnXBMinFilterModeReplace( $nodeName + ".nnXBMinFilterMode1",$nodeName + ".nnXBMinFilterMode2",
							  $nodeName + ".nnXBMinFilterMode3",$nodeName + ".nnXBMinFilterMode4"	);
}

proc nnXBConnectControl( string $attrName1, string $attrName2, string $attrName3, string $attrName4, string $grpName, string $nodeType, int $index )
{
	string $attr;
	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnXBLayerSelect"+$nodeType)`;
	switch( $currentLayer ) {
		// BOTTOM ( T1 )
		case 1:
			$attr = $attrName1;
			break;
		// LOWER MIDDLE ( T2 )
		case 2:
			$attr = $attrName2;
			break;
		// UPPER MIDDLE ( T3 )
		case 3:
			$attr = $attrName3;
			break;
		// TOP ( T3 )
		case 4:
			$attr = $attrName4;
			break;
		default:
			error( "Current Layer = " + $currentLayer + " is invalid!\n");
	}
	// アトリビュート1とコントロールを接続する
	if( $index > 0 ) {
		connectControl -index $index $grpName $attr;
	}
	else {
		connectControl $grpName $attr;
	}
}


//----------------------------------------------------------------------------
// 			nnXBBlendMode
//----------------------------------------------------------------------------
global proc nnXBBlendModeNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBBlendMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		9
				$nodeName;
				// デフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 9;
/*******************
			if( $i == 0 ) {
				// T1のデフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 0;
			}
			else {
				// T2 or T3 or T4のデフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 4;
			}
*******************/
		}
		// 既存データの互換性の為、属性作り直し
		else {
			// 既存の属性値を保存
			int $modeType = `getAttr ($nodeName+"."+$attr[$i])`;
			// 既存の属性の削除
			deleteAttr ($nodeName+"."+$attr[$i]);
			// 新規に属性の作成
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		9
				$nodeName;
			setAttr ($nodeName+"."+$attr[$i]) $modeType;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label				"Texture Stage"
					-changeCommand		( "nnXBEnableTextureStage " + $nodeName )
					$grpName;
					menuItem -label "AUTO"				-data 9;
					menuItem -label "MODULATE"			-data 0;
					menuItem -label "DECAL"				-data 1;
					menuItem -label "REPLACE"			-data 2;
					menuItem -label "BLEND"				-data 3;
					menuItem -label "DECAL2"			-data 4;
					menuItem -label "SPECULAR MAP"		-data 5;
					menuItem -label "SPECULAR MAP2"		-data 6;
					menuItem -label "ADD"				-data 7;
					menuItem -label "SUBTRACT"			-data 8;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBBlendModeReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBBlendMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {

		nnXBBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBBlendMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBBlendMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBBlendMode3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBBlendMode4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBBlendModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ( "nnXBEnableTextureStage " + $nodeType ) $grpName;
}

global proc nnXBEnableTextureStage( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnXBBlendMode"  + $nodeType;
	$grpName[1]	= "nnXBLightStage" + $nodeType;

	int $menuId = `optionMenuGrp -query -select $grpName[0]`;

	if( $menuId == 1 ) {
		checkBoxGrp -edit -enable false $grpName[1];
	}
	else {
		checkBoxGrp -edit -enable true $grpName[1];
	}
}

//----------------------------------------------------------------------------
//		 	nnXBLightStage
//----------------------------------------------------------------------------
global proc nnXBLightStageNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBLightStage" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Light Stage"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBLightStageReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBLightStage" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBLightStageNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLightStage1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBLightStageNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLightStage2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBLightStageNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLightStage3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBLightStageNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLightStage4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBLightStageNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}

	nnXBEnableTextureStage( $nodeType );
}

//----------------------------------------------------------------------------
//		 	nnXBEnviromentMap
//----------------------------------------------------------------------------
global proc nnXBEnviromentMapNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBEnviromentMap" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Enviroment Map"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBEnviromentMapReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBEnviromentMap" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBEnviromentMap1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBEnviromentMap2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBEnviromentMap3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBEnviromentMap4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBEnviromentMapNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnXBUClamp
//----------------------------------------------------------------------------
global proc nnXBUClampNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBUClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type U" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CLAMP"		-data 1;
					menuItem -label "REPEAT"	-data 2;
					menuItem -label "MIRROR"	-data 3;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBUClampReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBUClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnXBVClamp
//----------------------------------------------------------------------------
global proc nnXBVClampNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBVClamp" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		3
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type V" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CLAMP"		-data 1;
					menuItem -label "REPEAT"	-data 2;
					menuItem -label "MIRROR"	-data 3;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBVClampReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBVClamp" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBVClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnXBLODBias
//----------------------------------------------------------------------------
global proc nnXBLODBiasNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBLODBias" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	"float"
				-longName		$attr[$i]
				-minValue		-1.0
				-maxValue		1.0
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0.0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label		"LOD Bias"
					-precision 	6
					-minValue	-1.0
					-maxValue	1.0
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 0 );
}

global proc nnXBLODBiasReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBLODBias" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnXBLODBiasNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLODBias1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBLODBiasNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLODBias2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBLODBiasNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLODBias3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBLODBiasNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBLODBias4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBLODBiasNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 0 );
	}
}

//----------------------------------------------------------------------------
// 			nnXBMaxMipLevel
//----------------------------------------------------------------------------
global proc nnXBMaxMipLevelNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBMaxMipLevel" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	long
				-longName		$attr[$i]
				-minValue		0
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intFieldGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intFieldGrp
					-label	"Max Mip Level"
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBMaxMipLevelReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBMaxMipLevel" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intFieldGrp -exists $grpName`) {
		nnXBMaxMipLevelNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBMaxMipLevel1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBMaxMipLevelNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBMaxMipLevel2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBMaxMipLevelNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBMaxMipLevel3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBMaxMipLevelNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBMaxMipLevel4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBMaxMipLevelNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnXBFilterMode
//----------------------------------------------------------------------------
global proc nnXBFilterModeNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBFilterMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Setup Filter Mode"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnXBEnableFilterMode " + $nodeName )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBFilterModeReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBFilterMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnXBFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBFilterMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBFilterMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBFilterMode3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBFilterMode4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnXBEnableFilterMode " + $nodeType ) $grpName;
}

global proc nnXBEnableFilterMode( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0]	= "nnXBFilterMode"  + $nodeType;
	$grpName[1]	= "nnXBMagFilterMode" + $nodeType;
	$grpName[2]	= "nnXBMinFilterMode" + $nodeType;

	optionMenuGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[1];
	optionMenuGrp -edit -enable (`checkBoxGrp -query -value1 $grpName[0]`) $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnXBMagFilterMode
//----------------------------------------------------------------------------
global proc nnXBMagFilterModeNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBMagFilterMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Filter Mode Mag" $grpName;
					menuItem -label "NEAREST"		-data 0;
					menuItem -label "LINEAR"		-data 1;
					menuItem -label "ANISOTROPIC"	-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBMagFilterModeReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBMagFilterMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBMagFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBMagFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBMagFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBMagFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}

	nnXBEnableFilterMode( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnXBMinFilterMode
//----------------------------------------------------------------------------
global proc nnXBMinFilterModeNew( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBMinFilterMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 4; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		9
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 4;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnXBTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Filter Mode Min" $grpName;
					menuItem -label "NEAREST"					-data 0;
					menuItem -label "LINEAR"					-data 1;
					menuItem -label "NEAREST MIPMAP NEAREST"	-data 2;
					menuItem -label "NEAREST MIPMAP LINEAR"		-data 3;
					menuItem -label "LINEAR MIPMAP NEAREST"		-data 4;
					menuItem -label "LINEAR MIPMAP LINEAR"		-data 5;
					menuItem -label "ANISOTROPIC"				-data 6;
					menuItem -label "ANISOTROPIC MIPMAP NEAREST"-data 7;
					menuItem -label "ANISOTROPIC MIPMAP LINEAR"	-data 9;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
}

global proc nnXBMinFilterModeReplace( string $attrName1, string $attrName2, string $attrName3, string $attrName4 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// アトリビュート名3を"."で文字列を分割する。
	tokenize( $attrName3, ".", $list );
	// アトリビュート名を取得
	$attr[2] = $list[1];
	// アトリビュート名4を"."で文字列を分割する。
	tokenize( $attrName4, ".", $list );
	// アトリビュート名を取得
	$attr[3] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnXBMinFilterMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnXBUClampNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnXBMinFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnXBMinFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp3)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[2]` ) {
		nnXBMinFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// ノードにアトリビュート(nnXBUClamp4)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[3]` ) {
		nnXBMinFilterModeNew( $attrName1, $attrName2, $attrName3, $attrName4 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnXBConnectControl( $attrName1, $attrName2, $attrName3, $attrName4, $grpName, $nodeType, 2 );
	}

	nnXBEnableFilterMode( $nodeType );
}

//----------------------------------------------------------------------------
//			nnXBTextureAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnXBTextureAttributeFrameLayoutNew( string $attrName )
{
	string $list[];
	tokenize( $attrName, ".", $list );
	string $attr 		= $list[1];
	string $nodeName 	= $list[0];
	string $nodeType 	= `nodeType $nodeName`;
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnXBMaterialAttributeColumnLayout" + $nodeType );
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"Xbox Texture Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnXBTextureAttributeFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		nnXBTextureAttributeFrameLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnXBTextureAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnXBTextureAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnXBTextureAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnXBTextureAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		nnXBTextureAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//
//			Lindbergh Material Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnLBMaterialAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnLBMaterialAttributeFrameLayoutNew( string $attrName )
{
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();

	string $title;
	if( $nnlb ) {
		$title	= "Lindbergh";
		if( $nnxenon )	$title	+= ", XBOX360";
		if( $nnps3 )	$title	+= ", PlayStaion3";
		if( $nndxg2 )	$title	+= ", DirectX G2.0";
	}
	else if( $nnxenon ){
		$title	= "XBOX360";
		if( $nnps3 )	$title	+= ", PlayStaion3";
		if( $nndxg2 )	$title	+= ", DirectX G2.0";
	}
	else if( $nnps3 ){
		$title	= "PlayStaion3";
		if( $nndxg2 )	$title	+= ", DirectX G2.0";
	}
	else if( $nndxg2 ){
		$title	= "DirectX G2.0";
	}
	else {
		return;
	}
	$title += " Material Attributes";

	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindberg用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnMaterialAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			$title
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-labelWidth		500
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// GUIの表示設定を変更
	frameLayout -edit -visible ( $nnlb + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}

global proc nnLBMaterialAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindberg用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		nnLBMaterialAttributeFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nnlb    = nnLBGetPluginInfoMayaNNExporter();
	int $nnxenon = nnXENONGetPluginInfoMayaNNExporter();
	int $nnps3   = nnPS3GetPluginInfoMayaNNExporter();
	int $nndxg2  = nnDXG2GetPluginInfoMayaNNExporter();
	frameLayout -edit -visible ( $nnlb + $nnxenon + $nnps3 + $nndxg2 ) $grpName;
}

//----------------------------------------------------------------------------
//			nnLBMaterialAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnLBMaterialAttributeColumnLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindbergマテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeFrameLayout" + $nodeType );
		setUITemplate -pushTemplate attributeEditorTemplate;
				columnLayout -adjustableColumn true $grpName;
		setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnLBMaterialAttributeColumnLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindbergマテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		nnLBMaterialAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
// 			nnLBUserProfile
//----------------------------------------------------------------------------
global proc nnLBUserProfileNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		15
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "User Profile" $grpName;
					menuItem -label "NONE"	-data 0		($grpName+"USER_PROFILE_NONE");
					menuItem -label "1"		-data 1		($grpName+"USER_PROFILE_1");
					menuItem -label "2"		-data 2		($grpName+"USER_PROFILE_2");
					menuItem -label "3"		-data 3		($grpName+"USER_PROFILE_3");
					menuItem -label "4"		-data 4		($grpName+"USER_PROFILE_4");
					menuItem -label "5"		-data 5		($grpName+"USER_PROFILE_5");
					menuItem -label "6"		-data 6		($grpName+"USER_PROFILE_6");
					menuItem -label "7"		-data 7		($grpName+"USER_PROFILE_7");
					menuItem -label "8"		-data 8		($grpName+"USER_PROFILE_8");
					menuItem -label "9"		-data 9		($grpName+"USER_PROFILE_9");
					menuItem -label "10"	-data 10	($grpName+"USER_PROFILE_10");
					menuItem -label "11"	-data 11	($grpName+"USER_PROFILE_11");
					menuItem -label "12"	-data 12	($grpName+"USER_PROFILE_12");
					menuItem -label "13"	-data 13	($grpName+"USER_PROFILE_13");
					menuItem -label "14"	-data 14	($grpName+"USER_PROFILE_14");
					menuItem -label "15"	-data 15	($grpName+"USER_PROFILE_15");
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBUserProfileReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBUserProfileNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBUserProfileNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBBlendFlag
//----------------------------------------------------------------------------
global proc nnLBBlendFlagNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Blend"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			true
					-changeCommand		( "nnLBEnableBlend " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBBlendFlagReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBBlendFlagNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendFlagNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	// changeCommandを更新
//	checkBoxGrp -edit -changeCommand ( "nnLBEnableBlend " + $nodeType ) $grpName;
}

global proc nnLBEnableBlend( string $nodeType )
{
	// コントロール名を作成
	string $grpName[7];

	$grpName[0] = "nnLBBlendFlag"			+ $nodeType;
	$grpName[1] = "nnLBBlendEquation"		+ $nodeType;
	$grpName[2] = "nnLBBlendSrcFactorRGB"	+ $nodeType;
	$grpName[3] = "nnLBBlendDstFactorRGB"	+ $nodeType;
	$grpName[4] = "nnLBBlendFuncSeparate"	+ $nodeType;
	$grpName[5] = "nnLBBlendConstColor"		+ $nodeType;
	$grpName[6] = "nnLBBlendLogicFlag"		+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	optionMenuGrp	-edit	-enable $value $grpName[1];
	optionMenuGrp	-edit	-enable $value $grpName[2];
	optionMenuGrp	-edit	-enable $value $grpName[3];
	checkBoxGrp		-edit	-enable $value $grpName[4];
	text			-edit	-enable $value ($grpName[5]+"label1");
	textField		-edit	-enable $value $grpName[5];
	text			-edit	-enable $value ($grpName[5]+"label2");
	checkBoxGrp		-edit	-enable $value $grpName[6];

	nnLBEnableBlendFuncSeparate( $nodeType );
	nnLBEnableLogicalOperation( $nodeType );
}

//----------------------------------------------------------------------------
//			nnLBBlendEquation
//----------------------------------------------------------------------------
global proc nnLBBlendEquationNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		4
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 2;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Blend Equation" $grpName;
					menuItem -label "MIN"				-data 0;
					menuItem -label "MAX"				-data 1;
					menuItem -label "ADD"				-data 2;
					menuItem -label "SUBTRACT"			-data 3;
					menuItem -label "REVERSE SUBTRACT"	-data 4;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendEquationReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBBlendEquationNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendEquationNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnLBBlendSrcFactorRGB
//----------------------------------------------------------------------------
global proc nnLBBlendSrcFactorRGBNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		14
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label			"Source Factor"
					-extraLabel		"(RGBA or RGB)"
					-columnWidth	2 150
					-columnWidth	3 100
					$grpName;

					menuItem -label "0"						-data 0;
					menuItem -label "1"						-data 1;
					menuItem -label "SRC COLOR"				-data 2;
					menuItem -label "1 - (SRC COLOR)"		-data 3;
					menuItem -label "SRC ALPHA"				-data 4;
					menuItem -label "1 - (SRC ALPHA)"		-data 5;
					menuItem -label "DST ALPHA"				-data 6;
					menuItem -label "1 - (DST ALPHA)"		-data 7;
					menuItem -label "DST COLOR"				-data 8;
					menuItem -label "1 - (DST COLOR)"		-data 9;
					menuItem -label "CONSTANT COLOR"		-data 10;
					menuItem -label "1 - (CONSTANT COLOR)"	-data 11;
					menuItem -label "CONSTANT ALPHA"		-data 12;
					menuItem -label "1 - (CONSTANT ALPHA)"	-data 13;
					menuItem -label "SRC ALPHA SATURATE"	-data 14;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendSrcFactorRGBReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBBlendSrcFactorRGBNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendSrcFactorRGBNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//			nnLBBlendDstFactorRGB
//----------------------------------------------------------------------------
global proc nnLBBlendDstFactorRGBNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		14
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label			"Destination Factor"
					-extraLabel		"(RGBA or RGB)"
					-columnWidth	2 150
					-columnWidth	3 100
					$grpName;

					menuItem -label "0"						-data 0;
					menuItem -label "1"						-data 1;
					menuItem -label "SRC COLOR"				-data 2;
					menuItem -label "1 - (SRC COLOR)"		-data 3;
					menuItem -label "SRC ALPHA"				-data 4;
					menuItem -label "1 - (SRC ALPHA)"		-data 5;
					menuItem -label "DST ALPHA"				-data 6;
					menuItem -label "1 - (DST ALPHA)"		-data 7;
					menuItem -label "DST COLOR"				-data 8;
					menuItem -label "1 - (DST COLOR)"		-data 9;
					menuItem -label "CONSTANT COLOR"		-data 10;
					menuItem -label "1 - (CONSTANT COLOR)"	-data 11;
					menuItem -label "CONSTANT ALPHA"		-data 12;
					menuItem -label "1 - (CONSTANT ALPHA)"	-data 13;
					menuItem -label "SRC ALPHA SATURATE"	-data 14;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendDstFactorRGBReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBBlendDstFactorRGBNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendDstFactorRGBNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBBlendFuncSeparate
//----------------------------------------------------------------------------
global proc nnLBBlendFuncSeparateNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Blend Func Separate"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnLBEnableBlendFuncSeparate " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBBlendFuncSeparateReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBBlendFuncSeparateNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendFuncSeparateNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	// changeCommandを更新
//	checkBoxGrp -edit -changeCommand ( "nnLBEnableBlend " + $nodeType ) $grpName;
}

global proc nnLBEnableBlendFuncSeparate( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];

	$grpName[0] = "nnLBBlendFlag"			+ $nodeType;
	$grpName[1] = "nnLBBlendFuncSeparate"	+ $nodeType;
	$grpName[2] = "nnLBBlendSrcFactorA"		+ $nodeType;
	$grpName[3] = "nnLBBlendDstFactorA"		+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	int $value2 = `checkBoxGrp -query -value1 $grpName[1]`;

	optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[2];
	optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[3];
}

//----------------------------------------------------------------------------
//			nnLBBlendSrcFactorA
//----------------------------------------------------------------------------
global proc nnLBBlendSrcFactorANew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		14
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label			"Source Factor"
					-extraLabel		"(Alpha)"
					-columnWidth	2 130
					-columnWidth	3 100
					$grpName;

					menuItem -label "0"						-data 0;
					menuItem -label "1"						-data 1;
					menuItem -label "SRC COLOR"				-data 2;
					menuItem -label "1 - (SRC COLOR)"		-data 3;
					menuItem -label "SRC ALPHA"				-data 4;
					menuItem -label "1 - (SRC ALPHA)"		-data 5;
					menuItem -label "DST ALPHA"				-data 6;
					menuItem -label "1 - (DST ALPHA)"		-data 7;
					menuItem -label "DST COLOR"				-data 8;
					menuItem -label "1 - (DST COLOR)"		-data 9;
					menuItem -label "CONSTANT COLOR"		-data 10;
					menuItem -label "1 - (CONSTANT COLOR)"	-data 11;
					menuItem -label "CONSTANT ALPHA"		-data 12;
					menuItem -label "1 - (CONSTANT ALPHA)"	-data 13;
					menuItem -label "SRC ALPHA SATURATE"	-data 14;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendSrcFactorAReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBBlendSrcFactorANew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendSrcFactorANew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableBlendFuncSeparate( $nodeType );

}

//----------------------------------------------------------------------------
//			nnLBBlendDstFactorA
//----------------------------------------------------------------------------
global proc nnLBBlendDstFactorANew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		14
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label			"Destination Factor"
					-extraLabel		"(Alpha)"
					-columnWidth	2 130
					-columnWidth	3 100
					$grpName;

					menuItem -label "0"						-data 0;
					menuItem -label "1"						-data 1;
					menuItem -label "SRC COLOR"				-data 2;
					menuItem -label "1 - (SRC COLOR)"		-data 3;
					menuItem -label "SRC ALPHA"				-data 4;
					menuItem -label "1 - (SRC ALPHA)"		-data 5;
					menuItem -label "DST ALPHA"				-data 6;
					menuItem -label "1 - (DST ALPHA)"		-data 7;
					menuItem -label "DST COLOR"				-data 8;
					menuItem -label "1 - (DST COLOR)"		-data 9;
					menuItem -label "CONSTANT COLOR"		-data 10;
					menuItem -label "1 - (CONSTANT COLOR)"	-data 11;
					menuItem -label "CONSTANT ALPHA"		-data 12;
					menuItem -label "1 - (CONSTANT ALPHA)"	-data 13;
					menuItem -label "SRC ALPHA SATURATE"	-data 14;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendDstFactorAReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBBlendDstFactorANew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendDstFactorANew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableBlendFuncSeparate( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnLBBlendConstColor
//----------------------------------------------------------------------------
global proc nnLBBlendConstColorNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-dataType		"string"
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName -type "string" "0x00000000";
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 190
					-columnAlign3		right center right
					("nnLBBlendConstColorRowLayout"+$nodeType);
					text
						-label "Blend Const Color"
						($grpName+"label1");
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckAlphaBlendingConstColor " + $attrName )
						-receiveFocusCommand ( "nnSaveAlphaBlendingConstColor " + $attrName )
						$grpName;
					text
						-label "HEX ( 0x======== RGBA ) "
						($grpName+"label2");
				setParent ..;

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendConstColorReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnLBBlendConstColorNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendConstColorNew( $attrName );
	}
}

//----------------------------------------------------------------------------
// 			nnLBBlendLogicFlag
//----------------------------------------------------------------------------
global proc nnLBBlendLogicFlagNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Logical Operation"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnLBEnableLogicalOperation " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBBlendLogicFlagReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBBlendLogicFlagNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendLogicFlagNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnLBEnableLogicalOperation " + $nodeType ) $grpName;
}

global proc nnLBEnableLogicalOperation( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];

	$grpName[0] = "nnLBBlendFlag"			+ $nodeType;
	$grpName[1] = "nnLBBlendLogicFlag"		+ $nodeType;
	$grpName[2] = "nnLBBlendLogicOperation"	+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	int $value2 = `checkBoxGrp -query -value1 $grpName[1]`;

	optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[2];
}

//----------------------------------------------------------------------------
//			nnLBBlendLogicOperation
//----------------------------------------------------------------------------
global proc nnLBBlendLogicOperationNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		15
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 5;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Operation Code" $grpName;
					menuItem -label "CLEAR"			-data 0;
					menuItem -label "AND"			-data 1;
					menuItem -label "AND REVERSE"	-data 2;
					menuItem -label "COPY"			-data 3;
					menuItem -label "AND INVERTED"	-data 4;
					menuItem -label "NOOP"			-data 5;
					menuItem -label "XOR"			-data 6;
					menuItem -label "OR"			-data 7;
					menuItem -label "NOR"			-data 8;
					menuItem -label "EQUIV"			-data 9;
					menuItem -label "INVERT"		-data 10;
					menuItem -label "OR REVERSE"	-data 11;
					menuItem -label "COPY INVERTED"	-data 12;
					menuItem -label "OR_INVERTED"	-data 13;
					menuItem -label "NAND"			-data 14;
					menuItem -label "SET"			-data 15;
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}
global proc nnLBBlendLogicOperationReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBBlendLogicOperationNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBlendLogicOperationNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableLogicalOperation( $nodeType );

}

//----------------------------------------------------------------------------
// 			nnLBAlphaTest
//----------------------------------------------------------------------------
global proc nnLBAlphaTestNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Alpha Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnLBEnableAlphaTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBAlphaTestReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBAlphaTestNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBAlphaTestNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnLBEnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnLBEnableAlphaTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];
	$grpName[0] = "nnLBAlphaTest"		+ $nodeType;
	$grpName[1] = "nnLBManualSetting"	+ $nodeType;
	$grpName[2] = "nnLBAlphaTestMode"	+ $nodeType;
	$grpName[3] = "nnLBManualAlphaRef"	+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	int $value2 = `checkBoxGrp -query -value1 $grpName[1]`;
	checkBoxGrp		-edit	-enable $value1 $grpName[1];
	optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[2];
	if( ($value1*$value2) == 0) {
		optionMenuGrp	-edit -select 5 $grpName[2];
	}
	intSliderGrp	-edit	-enable ($value1*$value2) $grpName[3];
}

//----------------------------------------------------------------------------
// 			nnLBManualSetting
//----------------------------------------------------------------------------
global proc nnLBManualSettingNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName false;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Alpha Ref Data"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnLBEnableManualAlphaRef " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;

}

global proc nnLBManualSettingReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBManualSettingNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBManualSettingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnLBEnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnLBEnableManualAlphaRef( string $nodeType )
{
	// コントロール名を作成
	string $grpName[3];
	$grpName[0] = "nnLBManualSetting"	+ $nodeType;
	$grpName[1] = "nnLBAlphaTestMode"	+ $nodeType;
	$grpName[2] = "nnLBManualAlphaRef"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value $grpName[1];
	if($value == 0) {
		optionMenuGrp	-edit -select 5 $grpName[1];
	}
	intSliderGrp	-edit	-enable $value $grpName[2];
}

//----------------------------------------------------------------------------
// 			nnLBAlphaTestMode
//----------------------------------------------------------------------------
global proc nnLBAlphaTestModeNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 4;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Test Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "EQUAL"			-data 2;
					menuItem -label "LESS EQUAL"	-data 3;
					menuItem -label "GREATER"		-data 4;
					menuItem -label "NOT EQUAL"		-data 5;
					menuItem -label "GREATER EQUAL"	-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBAlphaTestModeReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBAlphaTestModeNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBAlphaTestModeNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnLBManualAlphaRef
//----------------------------------------------------------------------------
global proc nnLBManualAlphaRefNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		255
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 0;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Alpha Reference Data"
					-minValue	0
					-maxValue	255
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	connectControl $grpName $attrName;
}

global proc nnLBManualAlphaRefReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnLBManualAlphaRefNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBManualAlphaRefNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl $grpName $attrName;
	}

	nnLBEnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnLBZBufferComp
//----------------------------------------------------------------------------
global proc nnLBZBufferCompNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"ZBuffer Compare"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			true
					-changeCommand		( "nnLBEnableZBufferComp " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBZBufferCompReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBZBufferCompNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBZBufferCompNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnLBEnableZBufferComp " + $nodeType ) $grpName;
}

global proc nnLBEnableZBufferComp( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0] = "nnLBZBufferComp"			+ $nodeType;
	$grpName[1] = "nnLBDepthCompFunction"	+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value $grpName[1];
}

//----------------------------------------------------------------------------
// 			nnLBDepthCompFunction
//----------------------------------------------------------------------------
global proc nnLBDepthCompFunctionNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	short
			-longName		$attr
			-minValue		0
			-maxValue		7
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName 3;
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "ZBuffer Compare Mode" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "LESS"			-data 1;
					menuItem -label "EQUAL"			-data 2;
					menuItem -label "LESS EQUAL"	-data 3;
					menuItem -label "GREATER"		-data 4;
					menuItem -label "NOT EQUAL"		-data 5;
					menuItem -label "GREATER EQUAL"	-data 6;
					menuItem -label "ALWAYS"		-data 7;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	connectControl -index 2 $grpName $attrName;
}

global proc nnLBDepthCompFunctionReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnLBDepthCompFunctionNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBDepthCompFunctionNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}

	nnLBEnableZBufferComp( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnLBDepthWriting
//----------------------------------------------------------------------------
global proc nnLBDepthWritingNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Depth Writing"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBDepthWritingReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBDepthWritingNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBDepthWritingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBRWriting
//----------------------------------------------------------------------------
global proc nnLBRWritingNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Red Writing"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBRWritingReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBRWritingNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBRWritingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBGWriting
//----------------------------------------------------------------------------
global proc nnLBGWritingNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Green Writing"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBGWritingReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBGWritingNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBGWritingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBBWriting
//----------------------------------------------------------------------------
global proc nnLBBWritingNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Blue Writing"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBBWritingReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBBWritingNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBBWritingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
// 			nnLBAWriting
//----------------------------------------------------------------------------
global proc nnLBAWritingNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// ノードにアトリビュートがなければ新規にアトリビュート作成
	if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		addAttr
			-attributeType	bool
			-longName		$attr
			$nodeName;
		// デフォルト値をセット
		setAttr $attrName true;
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnLBMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Alpha Writing"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

}

global proc nnLBAWritingReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnLBAWritingNew( $attrName );
	}
	// ノードにアトリビュートがなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr` ) {
		nnLBAWritingNew( $attrName );
	}
	// アトリビュートとコントロールを接続する
	else {
		connectControl -index 2 $grpName $attrName;
	}
}

//----------------------------------------------------------------------------
//
//			PSP Material Attributes
//
//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//			nnPSPMaterialAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnPSPMaterialAttributeFrameLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// PSP用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		setParent ( "nnMaterialAttributeMainColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"PSP Material Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// GUIの表示設定を変更
	int $nnpsp = nnPSPGetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nnpsp $grpName;
}

global proc nnPSPMaterialAttributeFrameLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindberg用フレームレイアウトがなければ新規に作成
	if ( !`frameLayout -exists $grpName` ) {
		nnPSPMaterialAttributeFrameLayoutNew( $attrName );
	}
	// GUIの表示設定を変更
	int $nnpsp = nnPSPGetPluginInfoMayaNNExporter();
	frameLayout -edit -visible $nnpsp $grpName;
}

//----------------------------------------------------------------------------
//			nnPSPMaterialAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnPSPMaterialAttributeColumnLayoutNew( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindbergマテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeFrameLayout" + $nodeType );
		setUITemplate -pushTemplate attributeEditorTemplate;
				columnLayout -adjustableColumn true $grpName;
		setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnPSPMaterialAttributeColumnLayoutReplace( string $attrName )
{
	// アトリビュート名を"."で文字列を分割する。
	string $list[];
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// レイアウト名を作成
	string $grpName 	= $attr + $nodeType;

	// Lindbergマテリアルアトリビュート用フレームレイアウトがなければ新規に作成
	if ( !`columnLayout -exists $grpName` ) {
		nnPSPMaterialAttributeColumnLayoutNew( $attrName );
	}
}

global proc nnPSPMatLayerSelectNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Layer Select"
					-changeCommand ("nnPSPMatChangeConnectControl " + $nodeName )
					$grpName;
					menuItem -label "BOTTOM ( T1 ) ";
					menuItem -label "TOP ( T2 ) "	;
				setParent -menu ..;

				separator -style "single";

			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnPSPMatLayerSelectReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPMatLayerSelectNew( $attrName );
	}
	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ("nnPSPMatChangeConnectControl " + $nodeName ) $grpName;

}

global proc nnPSPMatChangeConnectControl( string $nodeName )
{
	nnPSPBlendFlagReplace			( $nodeName + ".nnPSPBlendFlag1",			$nodeName + ".nnPSPBlendFlag2"			);
	nnPSPBlendOperandReplace		( $nodeName + ".nnPSPBlendOperand1",		$nodeName + ".nnPSPBlendOperand2"		);
	nnPSPBlendParamAReplace			( $nodeName + ".nnPSPBlendParamA1",			$nodeName + ".nnPSPBlendParamA2"		);
	nnPSPBlendColorAReplace			( $nodeName + ".nnPSPBlendColorA1",			$nodeName + ".nnPSPBlendColorA2"		);
	nnPSPBlendParamBReplace			( $nodeName + ".nnPSPBlendParamB1",			$nodeName + ".nnPSPBlendParamB2"		);
	nnPSPBlendColorBReplace			( $nodeName + ".nnPSPBlendColorB1",			$nodeName + ".nnPSPBlendColorB2"		);
	nnPSPBlendLogicReplace			( $nodeName + ".nnPSPBlendLogic1",			$nodeName + ".nnPSPBlendLogic2"			);
	nnPSPBlendLogicOperandReplace	( $nodeName + ".nnPSPBlendLogicOperand1",	$nodeName + ".nnPSPBlendLogicOperand2"	);
	nnPSPAlphaTestReplace			( $nodeName + ".nnPSPAlphaTest1",			$nodeName + ".nnPSPAlphaTest2"			);
	nnPSPAlphaTestFuncReplace		( $nodeName + ".nnPSPAlphaTestFunc1",		$nodeName + ".nnPSPAlphaTestFunc2"		);
	nnPSPManualAlphaTestRefReplace	( $nodeName + ".nnPSPManualAlphaTest1",		$nodeName + ".nnPSPManualAlphaTest2"	);
	nnPSPAlphaTestRefReplace		( $nodeName + ".nnPSPAlphaTestRef1",		$nodeName + ".nnPSPAlphaTestRef2"		);
	nnPSPDepthTestReplace			( $nodeName + ".nnPSPDepthTest1",			$nodeName + ".nnPSPDepthTest2"			);
	nnPSPDepthTestFuncReplace		( $nodeName + ".nnPSPDepthTestFunc1",		$nodeName + ".nnPSPDepthTestFunc2"		);
	nnPSPPixelMaskReplace			( $nodeName + ".nnPSPPixelMask1",			$nodeName + ".nnPSPPixelMask2"			);
	nnPSPAlphaTestMaskReplace		( $nodeName + ".nnPSPAlphaTestMask1",		$nodeName + ".nnPSPAlphaTestMask2"		);
	nnPSPDepthTestMaskReplace		( $nodeName + ".nnPSPDepthTestMask1",		$nodeName + ".nnPSPDepthTestMask2"		);

	nnPSPBlendModeReplace			( $nodeName + ".nnPSPBlendMode1",			$nodeName + ".nnPSPBlendMode2"			);
	nnPSPTexEnvColorReplace			( $nodeName + ".nnPSPTexEnvColor1",			$nodeName + ".nnPSPTexEnvColor2"		);
	nnPSPEnviromentMapReplace		( $nodeName + ".nnPSPEnviromentMap1",		$nodeName + ".nnPSPEnviromentMap2"		);
	nnPSPSeparateSpecularReplace	( $nodeName + ".nnPSPSeparateSpecular1",	$nodeName + ".nnPSPSeparateSpecular2"	);
	nnPSPColorDoubleReplace			( $nodeName + ".nnPSPColorDouble1",			$nodeName + ".nnPSPColorDouble2"		);
	nnPSPColorComponentReplace		( $nodeName + ".nnPSPColorComponent1",		$nodeName + ".nnPSPColorComponent2"		);
	nnPSPWrapTypeUReplace			( $nodeName + ".nnPSPWrapTypeU1",			$nodeName + ".nnPSPWrapTypeU2"			);
	nnPSPWrapTypeVReplace			( $nodeName + ".nnPSPWrapTypeV1",			$nodeName + ".nnPSPWrapTypeV2"			);
	nnPSPLODTypeReplace				( $nodeName + ".nnPSPLODType1",				$nodeName + ".nnPSPLODType2"			);
	nnPSPLODOffsetReplace			( $nodeName + ".nnPSPLODOffset1",			$nodeName + ".nnPSPLODOffset2"			);
	nnPSPLODSlopeReplace			( $nodeName + ".nnPSPLODSlope1",			$nodeName + ".nnPSPLODSlope2"			);
	nnPSPLODMaxLevelReplace			( $nodeName + ".nnPSPLODMaxLevel1",			$nodeName + ".nnPSPLODMaxLevel2"		);
}

proc string nnPSPGetCuurentMatAttrName( string $attrName1, string $attrName2, string $nodeType )
{
	string	$attr;

	$attr = $attrName1;

	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnPSPMatLayerSelect"+$nodeType)`;
	switch( $currentLayer ) {
		// BOTTOM ( T1 )
		case 1:
			$attr = $attrName1;
			break;
		// TOP ( T2 )
		case 2:
			$attr = $attrName2;
			break;
		default:
			$attr = $attrName1;
			error( "Current Layer = " + $currentLayer + " is invalid!\n");
	}

	return( $attr );

}

proc int nnPSPGetCuurentMatAttrIndex( string $nodeType )
{
	int		$index;

	$index = 0;

	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnPSPMatLayerSelect"+$nodeType)`;
	switch( $currentLayer ) {
		// BOTTOM ( T1 )
		case 1:
			$index = 0;
			break;
		// TOP ( T2 )
		case 2:
			$index = 1;
			break;
		default:
			$index = 0;
			error( "Current Layer = " + $currentLayer + " is invalid!\n");
	}

	return( $index );

}

proc nnPSPMatConnectControl( string $attrName1, string $attrName2, string $grpName, string $nodeType, int $index )
{
	string $attr;

	$attr = nnPSPGetCuurentMatAttrName( $attrName1,  $attrName2, $nodeType );

	// アトリビュート1とコントロールを接続する
	if( $index > 0 ) {
		connectControl -index $index $grpName $attr;
	}
	else {
		connectControl $grpName $attr;
	}
}

//----------------------------------------------------------------------------
// 			nnPSPBlendFlag
//----------------------------------------------------------------------------
global proc nnPSPBlendFlagNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendFlag" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) true;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Alpha Blending"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			true
					-changeCommand		( "nnPSPEnableBlend " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );

	nnPSPEnableBlend( $nodeType );
}

global proc nnPSPBlendFlagReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendFlag" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPBlendFlagNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendFlag1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendFlagNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendFlag2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendFlagNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	nnPSPEnableBlend( $nodeType );
}

global proc nnPSPEnableBlend( string $nodeType )
{
	// コントロール名を作成
	string $grpName[7];

	$grpName[0] = "nnPSPBlendFlag"		+ $nodeType;
	$grpName[1] = "nnPSPBlendOperand"	+ $nodeType;
	$grpName[2] = "nnPSPBlendParamA"	+ $nodeType;
	$grpName[3] = "nnPSPBlendColorA"	+ $nodeType;
	$grpName[4] = "nnPSPBlendParamB"	+ $nodeType;
	$grpName[5] = "nnPSPBlendColorB"	+ $nodeType;
	$grpName[6] = "nnPSPBlendLogic"		+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;

	if ( `optionMenuGrp -exists $grpName[1]` ) {
		optionMenuGrp	-edit	-enable $value $grpName[1];
	}
	if ( `optionMenuGrp -exists $grpName[2]` ) {
		optionMenuGrp	-edit	-enable $value $grpName[2];
	}
	if ( `textField -exists $grpName[3]` ) {
		text			-edit	-enable $value ($grpName[3]+"label1");
		textField		-edit	-enable $value $grpName[3];
		text			-edit	-enable $value ($grpName[3]+"label2");
	}
	if ( `optionMenuGrp -exists $grpName[4]` ) {
		optionMenuGrp	-edit	-enable $value $grpName[4];
	}
	if ( `textField -exists $grpName[5]` ) {
		text			-edit	-enable $value ($grpName[5]+"label1");
		textField		-edit	-enable $value $grpName[5];
		text			-edit	-enable $value ($grpName[5]+"label2");
	}
	if ( `checkBoxGrp -exists $grpName[6]` ) {
		checkBoxGrp		-edit	-enable $value $grpName[6];
	}

	nnPSPEnableBlendLogic( $nodeType );
}

//----------------------------------------------------------------------------
//			nnPSPBlendOperand
//----------------------------------------------------------------------------
global proc nnPSPBlendOperandNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendOperand" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		5
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Blend Operand" $grpName;
					menuItem -label "ADD"				-data 0;
					menuItem -label "SUBTRACT"			-data 1;
					menuItem -label "REVERSE SUBTRACT"	-data 2;
					menuItem -label "MIN"				-data 3;
					menuItem -label "MAX"				-data 4;
					menuItem -label "ABS"				-data 5;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPSPBlendOperandReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendOperand" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPBlendOperandNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendOperand1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendOperandNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendOperand2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendOperandNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
//			nnPSPBlendParamA
//----------------------------------------------------------------------------
global proc nnPSPBlendParamANew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendParamA" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		10
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 2;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label			"Blend Parameter A"
					$grpName;
					menuItem -label "DST COLOR"					-data 0;
					menuItem -label "1 - (DST COLOR)"			-data 1;
					menuItem -label "SRC ALPHA"					-data 2;
					menuItem -label "1 - (SRC ALPHA)"			-data 3;
					menuItem -label "DST ALPHA"					-data 4;
					menuItem -label "1 - (DST ALPHA)"			-data 5;
					menuItem -label "2 * (SRC ALPHA)"			-data 6;
					menuItem -label "1 - (2 * (SRC ALPHA))"		-data 7;
					menuItem -label "2 * (DST ALPHA)"			-data 8;
					menuItem -label "1 - (2 * (DST ALPHA))"		-data 9;
					menuItem -label "FIX VALUE"					-data 10;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPSPBlendParamAReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendParamA" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPBlendParamANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendParamA1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendParamANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendParamA2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendParamANew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}
global string $nnBeforePSPColorConstColor;

global proc nnCheckPSPConstColor( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// 現在のUserDataの値を取得
	string $userdata	= `textField -query -text $grpName`;

	int $startindex;
	string $matchdata;
	// HEX
	if( substring( $userdata, 1, 1 ) == "0" && substring( $userdata, 2, 2 ) == "x" ) {
		$startindex = 3;
		$matchdata = "0123456789abcdefABCDEF";
	}
	// DEC
	else {
		$startindex = 1;
		$matchdata = "0123456789";
	}

	global string $nnBeforePSPColorConstColor;
	int $layerIndex = nnPSPGetCuurentMatAttrIndex( $nodeType );
	int $i;
	int $ext = $layerIndex + 1;
	// 入力されたUserDataをチェック
	for( $i = $startindex; $i <= (size($userdata)); $i++ ) {
		// 8桁以上の場合
		if( $i >= $startindex + 8 ) {
			warning( "// Warring nnCheckPSPConstColor : input UserData [" + $userdata + "] is over 8 figures [========]!\n" );
			setAttr ($attrName+$ext) -type "string" $nnBeforePSPColorConstColor;
			return;
		}
		string $charactor = substring( $userdata, $i, $i );
		// 不正な文字が入力された場合
		if( match( $charactor, $matchdata ) == "" ) {
			warning( "// Warring nnCheckPSPConstColor : input UserData [" + $userdata + "] is invalid valuable!\n" );
			setAttr ($attrName+$ext) -type "string" $nnBeforePSPColorConstColor;
			return;
		}
	}
}

global proc nnSavePSPConstColor( string $attrName )
{
	global string $nnBeforePSPColorConstColor;

	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;
	

	// UserDataをセット
//	$nnBeforePSPColorConstColor = `getAttr $attrName`;
	$nnBeforePSPColorConstColor	= `textField -query -text $grpName`;
}


//----------------------------------------------------------------------------
// 			nnPSPBlendColorA
//----------------------------------------------------------------------------
global proc nnPSPBlendColorANew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendColorA" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-dataType		"string"
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) -type "string" "0x00000000";
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 190
					-columnAlign3		right center right
					("nnPSPBlendColorARowLayout"+$nodeType);
					text
						-label "Blend Const Color A"
						($grpName+"label1");
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckPSPConstColor " + ($nodeName+".nnPSPBlendColorA") )
						-receiveFocusCommand ( "nnSavePSPConstColor " + ($nodeName+"."+"nnPSPBlendColorA") )
						$grpName;
					text
						-label "HEX ( 0x======== RGBA ) "
						($grpName+"label2");
				setParent ..;

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPSPBlendColorAReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendColorA" + $nodeType;


	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnPSPBlendColorANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendColorA1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendColorANew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendColorA2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendColorANew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
//			nnPSPBlendParamB
//----------------------------------------------------------------------------
global proc nnPSPBlendParamBNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendParamB" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		10
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 3;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label			"Blend Parameter B"
					$grpName;
					menuItem -label "SRC COLOR"					-data 0;
					menuItem -label "1 - (SRC COLOR)"			-data 1;
					menuItem -label "SRC ALPHA"					-data 2;
					menuItem -label "1 - (SRC ALPHA)"			-data 3;
					menuItem -label "DST ALPHA"					-data 4;
					menuItem -label "1 - (DST ALPHA)"			-data 5;
					menuItem -label "2 * (SRC ALPHA)"			-data 6;
					menuItem -label "1 - (2 * (SRC ALPHA))"		-data 7;
					menuItem -label "2 * (DST ALPHA)"			-data 8;
					menuItem -label "1 - (2 * (DST ALPHA))"		-data 9;
					menuItem -label "FIX VALUE"					-data 10;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPSPBlendParamBReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendParamB" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPBlendParamBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendParamB1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendParamBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendParamB2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendParamBNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPBlendColorB
//----------------------------------------------------------------------------
global proc nnPSPBlendColorBNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendColorB" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-dataType		"string"
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) -type "string" "0x00000000";
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 190
					-columnAlign3		right center right
					("nnPSPBlendColorBRowLayout"+$nodeType);
					text
						-label "Blend Const Color B"
						($grpName+"label1");
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckPSPConstColor " + ($nodeName+".nnPSPBlendColorB") )
						-receiveFocusCommand ( "nnSavePSPConstColor " + ($nodeName+".nnPSPBlendColorB") )
						$grpName;
					text
						-label "HEX ( 0x======== RGBA ) "
						($grpName+"label2");
				setParent ..;

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPSPBlendColorBReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendColorB" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnPSPBlendColorBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendColorB1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendColorBNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendColorB2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendColorBNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPBlendLogic
//----------------------------------------------------------------------------
global proc nnPSPBlendLogicNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendLogic" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Blend Logic"
					-numberOfCheckBoxes 1
					-label1 			""
					-value1 			false
					-changeCommand		( "nnPSPEnableBlendLogic " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPBlendLogicReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendLogic" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPBlendLogicNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendLogic1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendLogicNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendLogic2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendLogicNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPSPEnableBlendLogic " + $nodeType ) $grpName;
}

global proc nnPSPEnableBlendLogic( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];

	$grpName[0] = "nnPSPBlendFlag"			+ $nodeType;
	$grpName[1] = "nnPSPBlendLogic"			+ $nodeType;
	$grpName[2] = "nnPSPBlendLogicOperand"	+ $nodeType;

	if ( `checkBoxGrp -exists $grpName[0]`   &&
		 `checkBoxGrp -exists $grpName[1]`   &&
		 `optionMenuGrp -exists $grpName[2]` ) {
		int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
		int $value2 = `checkBoxGrp -query -value1 $grpName[1]`;

		optionMenuGrp	-edit	-enable ($value1*$value2) $grpName[2];
	}
}

//----------------------------------------------------------------------------
//			nnPSPBlendLogicOperand
//----------------------------------------------------------------------------
global proc nnPSPBlendLogicOperandNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendLogicOperand" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		15
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 5;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Logic Operation" $grpName;
					menuItem -label "CLEAR"			-data 0;
					menuItem -label "AND"			-data 1;
					menuItem -label "AND REVERSE"	-data 2;
					menuItem -label "COPY"			-data 3;
					menuItem -label "AND INVERTED"	-data 4;
					menuItem -label "NOOP"			-data 5;
					menuItem -label "XOR"			-data 6;
					menuItem -label "OR"			-data 7;
					menuItem -label "NOR"			-data 8;
					menuItem -label "EQUIV"			-data 9;
					menuItem -label "INVERT"		-data 10;
					menuItem -label "OR REVERSE"	-data 11;
					menuItem -label "COPY INVERTED"	-data 12;
					menuItem -label "OR_INVERTED"	-data 13;
					menuItem -label "NAND"			-data 14;
					menuItem -label "SET"			-data 15;
				setParent -menu ..;
				separator -style "in";
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}
global proc nnPSPBlendLogicOperandReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendLogicOperand" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPBlendLogicOperandNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendLogicOperand1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendLogicOperandNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendLogicOperand2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendLogicOperandNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	nnPSPEnableBlendLogic( $nodeType );

}

//----------------------------------------------------------------------------
// 			nnPSPAlphaTest
//----------------------------------------------------------------------------
global proc nnPSPAlphaTestNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTest" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) true;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Alpha Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPSPEnableAlphaTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPAlphaTestReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTest" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPAlphaTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTest1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPAlphaTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTest2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPAlphaTestNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPSPEnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnPSPEnableAlphaTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[4];
	$grpName[0] = "nnPSPAlphaTest"			+ $nodeType;
	$grpName[1] = "nnPSPAlphaTestFunc"		+ $nodeType;
	$grpName[2] = "nnPSPManualAlphaTestRef"	+ $nodeType;
	$grpName[3] = "nnPSPAlphaTestRef"		+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value1 $grpName[1];

	int $value2 = `checkBoxGrp -query -value1 $grpName[2]`;
	checkBoxGrp		-edit	-enable $value1 $grpName[2];
	intSliderGrp	-edit	-enable ($value1*$value2) $grpName[3];
}

//----------------------------------------------------------------------------
// 			nnPSPAlphaTestFunc
//----------------------------------------------------------------------------
global proc nnPSPAlphaTestFuncNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTestFunc" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		7
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 6;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Alpha Test Function" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "ALWAYS"		-data 1;
					menuItem -label "EQUAL"			-data 2;
					menuItem -label "NOT EQUAL"		-data 3;
					menuItem -label "LESS"			-data 4;
					menuItem -label "LESS EQUAL"	-data 5;
					menuItem -label "GREATER"		-data 6;
					menuItem -label "GREATER EQUAL"	-data 7;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPAlphaTestFuncReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTestFunc" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPAlphaTestFuncNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTestFunc1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPAlphaTestFuncNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTestFunc2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPAlphaTestFuncNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	nnPSPEnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPSPManualAlphaTestRef
//----------------------------------------------------------------------------
global proc nnPSPManualAlphaTestRefNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPManualAlphaTestRef" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Manual Alpha Ref Data"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPSPEnableManualAlphaRef " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );

}

global proc nnPSPManualAlphaTestRefReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPManualAlphaTestRef" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPManualAlphaTestRefNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPManualAlphaTestRef1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPManualAlphaTestRefNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPManualAlphaTestRef2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPManualAlphaTestRefNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPSPEnableAlphaTest " + $nodeType ) $grpName;
}

global proc nnPSPEnableManualAlphaRef( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0] = "nnPSPManualAlphaTestRef"	+ $nodeType;
	$grpName[1] = "nnPSPAlphaTestRef"		+ $nodeType;

	int $value = `checkBoxGrp -query -value1 $grpName[0]`;
	intSliderGrp	-edit	-enable $value $grpName[1];
}

//----------------------------------------------------------------------------
// 			nnPSPAlphaTestRef
//----------------------------------------------------------------------------
global proc nnPSPAlphaTestRefNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTestRef" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		255
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"Alpha Reference Data"
					-minValue	0
					-maxValue	255
					$grpName;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPSPAlphaTestRefReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTestRef" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPSPAlphaTestRefNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTestRef1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPAlphaTestRefNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTestRef2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPAlphaTestRefNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}

	nnPSPEnableAlphaTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPSPDepthTest
//----------------------------------------------------------------------------
global proc nnPSPDepthTestNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPDepthTest" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) true;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Depth Test"
					-numberOfCheckBoxes 1
					-label1 			""
					-changeCommand		( "nnPSPEnableDepthTest " + $nodeType )
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );

}

global proc nnPSPDepthTestReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPDepthTest" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPDepthTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPDepthTest1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPDepthTestNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPDepthTest2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPDepthTestNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	// changeCommandを更新
	checkBoxGrp -edit -changeCommand ( "nnPSPEnableDepthTest " + $nodeType ) $grpName;
}

global proc nnPSPEnableDepthTest( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0] = "nnPSPDepthTest"			+ $nodeType;
	$grpName[1] = "nnPSPDepthTestFunc"		+ $nodeType;

	int $value1 = `checkBoxGrp -query -value1 $grpName[0]`;
	optionMenuGrp	-edit	-enable $value1 $grpName[1];
}

//----------------------------------------------------------------------------
// 			nnPSPDepthTestFunc
//----------------------------------------------------------------------------
global proc nnPSPDepthTestFuncNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPDepthTestFunc" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		7
				$nodeName;
			if( $i == 0 ) {
				// デフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 6;
			}
			else {
				// デフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 7;
			}
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Depth Test Function" $grpName;
					menuItem -label "NEVER"			-data 0;
					menuItem -label "ALWAYS"		-data 1;
					menuItem -label "EQUAL"			-data 2;
					menuItem -label "NOT EQUAL"		-data 3;
					menuItem -label "LESS"			-data 4;
					menuItem -label "LESS EQUAL"	-data 5;
					menuItem -label "GREATER"		-data 6;
					menuItem -label "GREATER EQUAL"	-data 7;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPDepthTestFuncReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPDepthTestFunc" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPDepthTestFuncNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPDepthTestFunc1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPDepthTestFuncNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPDepthTestFunc2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPDepthTestFuncNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	nnPSPEnableDepthTest( $nodeType );
}

//----------------------------------------------------------------------------
// 			nnPSPPixelMask
//----------------------------------------------------------------------------
global proc nnPSPPixelMaskNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPPixelMask" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-dataType		"string"
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) -type "string" "0x00000000";
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 190
					-columnAlign3		right center right
					("nnPSPPixelMaskRowLayout"+$nodeType);
					text
						-label "Pixel Mask Value"
						($grpName+"label1");
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckPSPConstColor " + ($nodeName+".nnPSPPixelMask") )
						-receiveFocusCommand ( "nnSavePSPConstColor " + ($nodeName+".nnPSPPixelMask") )
						$grpName;
					text
						-label "HEX ( 0x======== RGBA ) "
						($grpName+"label2");
				setParent ..;

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPPixelMaskReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPPixelMask" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnPSPPixelMaskNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPPixelMask1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPPixelMaskNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPPixelMask2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPPixelMaskNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPAlphaTestMask
//----------------------------------------------------------------------------
global proc nnPSPAlphaTestMaskNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTestMask" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-dataType		"string"
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) -type "string" "0xFF";
		}
	}

	int $layerIndex = nnPSPGetCuurentMatAttrIndex( $nodeType );

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 190
					-columnAlign3		right center right
					("nnPSPAlphaTestMaskRowLayout"+$nodeType);
					text
						-label "Alpha Test Mask Value"
						($grpName+"label1");
					textField
						-text	"0xFF"
						-changeCommand       ( "nnCheckPSPAlphaTestMask " + ($nodeName+".nnPSPAlphaTestMask") )
						-receiveFocusCommand ( "nnSavePSPAlphaTestMask " +  ($nodeName+".nnPSPAlphaTestMask") )
						$grpName;
					text
						-label "HEX ( 0x== 0x00 - 0xFF) "
						($grpName+"label2");
				setParent ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPAlphaTestMaskReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPAlphaTestMask" + $nodeType;


	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnPSPAlphaTestMaskNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTestMask1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPAlphaTestMaskNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPAlphaTestMask2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPAlphaTestMaskNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

global string $nnBeforePSPAlphaTestMask;
global proc nnCheckPSPAlphaTestMask( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// 現在のUserDataの値を取得
	string $userdata	= `textField -query -text $grpName`;

	int $startindex;
	int $hexFlag = 0;
	string $matchdata;
	// HEX
	if( substring( $userdata, 1, 1 ) == "0" && substring( $userdata, 2, 2 ) == "x" ) {
		$startindex = 3;
		$matchdata = "0123456789abcdefABCDEF";
		$hexFlag = 1;
	}
	// DEC
	else {
		$startindex = 1;
		$matchdata = "0123456789";
	}

	global string $nnBeforePSPAlphaTestMask;
	int $layerIndex = nnPSPGetCuurentMatAttrIndex( $nodeType );
	int $i;
	int $ext = $layerIndex + 1;
	int $limit = 3;
	
	if( $hexFlag ) {
		$limit = 2;
	}

	// 入力されたUserDataをチェック
	for( $i = $startindex; $i <= (size($userdata)); $i++ ) {
		// 2桁以上の場合
		if( $i >= $startindex + $limit ) {
			warning( "// Warring : input UserData [" + $userdata + "] is over "+$limit+" figures [==]!\n" );
			setAttr ($attrName+$ext) -type "string" $nnBeforePSPAlphaTestMask;
			return;
		}
		string $charactor = substring( $userdata, $i, $i );
		// 不正な文字が入力された場合
		if( match( $charactor, $matchdata ) == "" ) {
			warning( "// Warring : input UserData [" + $userdata + "] is invalid valuable!\n" );
			setAttr ($attrName+$ext) -type "string" $nnBeforePSPAlphaTestMask;
			return;
		}
	}
}

global proc nnSavePSPAlphaTestMask( string $attrName )
{
	global string $nnBeforePSPAlphaTestMask;

	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	// UserDataをセット
//	$nnBeforePSPAlphaTestMask = `getAttr $attrName`;
	$nnBeforePSPAlphaTestMask	= `textField -query -text $grpName`;
}

//----------------------------------------------------------------------------
// 			nnPSPDepthTestMask
//----------------------------------------------------------------------------
global proc nnPSPDepthTestMaskNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPDepthTestMask" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Depth Mask"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );

}

global proc nnPSPDepthTestMaskReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPDepthTestMask" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPDepthTestMaskNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPDepthTestMask1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPDepthTestMaskNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPDepthTestMask2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPDepthTestMaskNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

}

//----------------------------------------------------------------------------
//
//			PSP Texture Attributes
//
//----------------------------------------------------------------------------

/****************
global proc nnPSPLayerSelectNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label "Layer Select"
					-changeCommand ("nnPSPChangeConnectControl " + $nodeName )
					$grpName;
					menuItem -label "BOTTOM ( T1 ) ";
					menuItem -label "TOP ( T2 ) "	;
				setParent -menu ..;

				separator -style "single";

			setUITemplate -popTemplate;
		setParent ..;
	}
}

global proc nnPSPLayerSelectReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPLayerSelectNew( $attrName );
	}
	// changeCommandを更新
	optionMenuGrp -edit -changeCommand ("nnPSPChangeConnectControl " + $nodeName ) $grpName;

}

global proc nnPSPChangeConnectControl( string $nodeName )
{
	nnPSPBlendModeReplace		( $nodeName + ".nnPSPBlendMode1",		$nodeName + ".nnPSPBlendMode2"	);
	nnPSPTexEnvColorReplace		( $nodeName + ".nnPSPTexEnvColor1",		$nodeName + ".nnPSPTexEnvColor2");
	nnPSPEnviromentMapReplace	( $nodeName + ".nnPSPEnviromentMap1",	$nodeName + ".nnPSPEnviromentMap2");
	nnPSPSeparateSpecularReplace( $nodeName + ".nnPSPSeparateSpecular1",$nodeName + ".nnPSPSeparateSpecular2");
	nnPSPColorDoubleReplace		( $nodeName + ".nnPSPColorDouble1",		$nodeName + ".nnPSPColorDouble2");
	nnPSPWrapTypeUReplace		( $nodeName + ".nnPSPWrapTypeU1",		$nodeName + ".nnPSPWrapTypeU1");
	nnPSPWrapTypeVReplace		( $nodeName + ".nnPSPWrapTypeV1",		$nodeName + ".nnPSPWrapTypeV2");
	nnPSPLODTypeReplace			( $nodeName + ".nnPSPLODType1",			$nodeName + ".nnPSPLODType2");
	nnPSPLODOffsetReplace		( $nodeName + ".nnPSPLODOffset1",		$nodeName + ".nnPSPLODOffset2");
	nnPSPLODSlopeReplace		( $nodeName + ".nnPSPLODSlope1",		$nodeName + ".nnPSPLODSlope2");
	nnPSPLODMaxLevelReplace		( $nodeName + ".nnPSPLODMaxLevel1",		$nodeName + ".nnPSPLODMaxLevel2");
}
proc string nnPSPGetCuurentAttrName( string $attrName1, string $attrName2, string $nodeType )
{
	string	$attr;

	$attr = $attrName1;

	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnPSPLayerSelect"+$nodeType)`;
	switch( $currentLayer ) {
		// BOTTOM ( T1 )
		case 1:
			$attr = $attrName1;
			break;
		// TOP ( T2 )
		case 2:
			$attr = $attrName2;
			break;
		default:
			$attr = $attrName1;
			error( "Current Layer = " + $currentLayer + " is invalid!\n");
	}

	return( $attr );

}

proc int nnPSPGetCuurentAttrIndex( string $nodeType )
{
	int		$index;

	$index = 0;

	// カレントのレイヤーを取得
	int $currentLayer = `optionMenuGrp -query -select ("nnPSPLayerSelect"+$nodeType)`;
	switch( $currentLayer ) {
		// BOTTOM ( T1 )
		case 1:
			$attr = 0;
			break;
		// TOP ( T2 )
		case 2:
			$attr = 1;
			break;
		default:
			$attr = 0;
			error( "Current Layer = " + $currentLayer + " is invalid!\n");
	}

	return( $index );

}

proc nnPSPConnectControl( string $attrName1, string $attrName2, string $grpName, string $nodeType, int $index )
{
	string $attr;

	$attr = nnPSPGetCuurentAttrName( $attrName1,  $attrName2, $nodeType );

	// アトリビュート1とコントロールを接続する
	if( $index > 0 ) {
		connectControl -index $index $grpName $attr;
	}
	else {
		connectControl $grpName $attr;
	}
}
**************/


//----------------------------------------------------------------------------
// 			nnPSPBlendMode
//----------------------------------------------------------------------------
global proc nnPSPBlendModeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendMode" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		4
				$nodeName;
				// デフォルト値をセット
				setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp
					-label				"Texture Function"
					-changeCommand		( "nnPSPEnableBlendMode " + $nodeType )
					$grpName;
					menuItem -label "MODULATE"			-data 0;
					menuItem -label "DECAL"				-data 1;
					menuItem -label "BLEND"				-data 2;
					menuItem -label "REPLACE"			-data 3;
					menuItem -label "ADD"				-data 4;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );

}

global proc nnPSPBlendModeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPBlendMode" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {

		nnPSPBlendModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendMode1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPBlendModeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPBlendMode2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPBlendModeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

global proc nnPSPEnableBlendMode( string $nodeType )
{
	// コントロール名を作成
	string $grpName[2];
	$grpName[0]	= "nnPSPBlendMode"    + $nodeType;
	$grpName[1]	= "nnPSPTexEnvColor" + $nodeType;


	int $value = `optionMenuGrp -query -select $grpName[0]`;

	if( $value == 3 ) {
		text      -edit -enable true ($grpName[1] + "label1");
		textField -edit -enable true $grpName[1];
		text      -edit -enable true ($grpName[1] + "label2");
	}
	else {
		text      -edit -enable false ($grpName[1] + "label1");
		textField -edit -enable false $grpName[1];
		text      -edit -enable false ($grpName[1] + "label2");
	}
}

global string $nnBeforePSPTexEnvColor[2];

global proc nnCheckPSPTexEnvColor( string $attrName, string $grpName, int $index  )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;

	// 現在のUserDataの値を取得
	string $userdata	= `textField -query -text $grpName`;

	int $startindex;
	string $matchdata;
	// HEX
	if( substring( $userdata, 1, 1 ) == "0" && substring( $userdata, 2, 2 ) == "x" ) {
		$startindex = 3;
		$matchdata = "0123456789abcdefABCDEF";
	}
	// DEC
	else {
		$startindex = 1;
		$matchdata = "0123456789";
	}

	global string $nnBeforePSPTexEnvColor[2];
	int $i;
	// 入力されたUserDataをチェック
	for( $i = $startindex; $i <= (size($userdata)); $i++ ) {
		// 8桁以上の場合
		if( $i >= $startindex + 8 ) {
//			warning( "nnCheckAlphaBlendingConstColor : input UserData [" + $userdata + "] is over 8 figures [========]!\n" );
			warning( "// Warring : input UserData [" + $userdata + "] is over 8 figures [========]!\n" );
			setAttr $attrName -type "string" $nnBeforePSPTexEnvColor[$index];
			return;
		}
		string $charactor = substring( $userdata, $i, $i );
		// 不正な文字が入力された場合
		if( match( $charactor, $matchdata ) == "" ) {
//			warning( "nnCheckAlphaBlendingConstColor : input UserData [" + $userdata + "] is invalid valuable!\n" );
			warning( "// Warring : input UserData [" + $userdata + "] is invalid valuable!\n" );
			setAttr $attrName -type "string" $nnBeforePSPTexEnvColor[$index];
			return;
		}
	}
}

global proc nnSavePSPTexEnvColor( string $attrName1, string $attrName2 )
{
	global string $nnBeforePSPTexEnvColor[2];
	// PSPTexEnvColorをセット
	$nnBeforePSPTexEnvColor[0] = `getAttr $attrName1`;
	$nnBeforePSPTexEnvColor[1] = `getAttr $attrName2`;
}

//----------------------------------------------------------------------------
// 			nnPSPTexEnvColor
//----------------------------------------------------------------------------
global proc nnPSPTexEnvColorNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPTexEnvColor" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-dataType		"string"
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) -type "string" "0x00000000";
		}
	}

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;

//				string $attrName	= nnPSPGetCuurentAttrName( $attrName1,  $attrName2, $nodeType );;
				string $attrName	= nnPSPGetCuurentMatAttrName( $attrName1,  $attrName2, $nodeType );;
//				int $index = nnPSPGetCuurentAttrIndex( $nodeType );
				int $index = nnPSPGetCuurentMatAttrIndex( $nodeType );

				rowLayout
					-numberOfColumns	3
					-columnWidth		2 70
					-columnWidth		3 185
					-columnAlign3		right center right
					("nnPSPTexEnvColorRowLayout"+$nodeType);
					text
						-label "Environment Color"
						($grpName+"label1");
					textField
						-text	"0x00000000"
						-changeCommand ( "nnCheckPSPTexEnvColor " + $attrName + " " + $grpName + " " + $index )
						-receiveFocusCommand ( "nnSavePSPTexEnvColor " + $attrName1 + " " +  $attrName2 )
						$grpName;
					text
						-label "HEX ( 0x======== RGBA ) "
						($grpName+"label2");
				setParent ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}

	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );

	nnPSPEnableBlendMode( $nodeType );
}

global proc nnPSPTexEnvColorReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPTexEnvColor" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`textField -exists $grpName`) {
		nnPSPTexEnvColorNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPTexEnvColor1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPTexEnvColorNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPTexEnvColor2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPTexEnvColorNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}

	nnPSPEnableBlendMode( $nodeType );
}

//----------------------------------------------------------------------------
//		 	nnPSPEnviromentMap
//----------------------------------------------------------------------------
global proc nnPSPEnviromentMapNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPEnviromentMap" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Enviroment Map"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPEnviromentMapReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPEnviromentMap" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPEnviromentMapNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPEnviromentMap1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPEnviromentMapNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPEnviromentMap2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPEnviromentMapNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
//		 	nnPSPSeparateSpecular
//----------------------------------------------------------------------------
global proc nnPSPSeparateSpecularNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPSeparateSpecular" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Separate Specular"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPSeparateSpecularReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPSeparateSpecular" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPSeparateSpecularNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPSeparateSpecular1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPSeparateSpecularNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPSeparateSpecular2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPSeparateSpecularNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
//		 	nnPSPColorDouble
//----------------------------------------------------------------------------
global proc nnPSPColorDoubleNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPColorDouble" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	bool
				-longName		$attr[$i]
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) false;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				checkBoxGrp
					-label 				"Color Double"
					-numberOfCheckBoxes 1
					-label1 			""
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPColorDoubleReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPColorDouble" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`checkBoxGrp -exists $grpName`) {
		nnPSPColorDoubleNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPColorDouble1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPColorDoubleNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPColorDouble2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPColorDoubleNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPColorComponent
//----------------------------------------------------------------------------
global proc nnPSPColorComponentNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPColorComponent" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		1
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 1;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Color Component" $grpName;
					menuItem -label "RGB"		-data 0;
					menuItem -label "RGBA"		-data 1;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPColorComponentReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPColorComponent" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPColorComponentNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPWrapTypeU1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPColorComponentNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPWrapTypeU2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPColorComponentNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPWrapTypeU
//----------------------------------------------------------------------------
global proc nnPSPWrapTypeUNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPWrapTypeU" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 2;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type U" $grpName;
					menuItem -label "CLAMP"		-data 0;
					menuItem -label "REPEAT"	-data 1;
					menuItem -label "AUTO"		-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPWrapTypeUReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPWrapTypeU" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPWrapTypeUNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPWrapTypeU1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPWrapTypeUNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPWrapTypeU2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPWrapTypeUNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPWrapTypeV
//----------------------------------------------------------------------------
global proc nnPSPWrapTypeVNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPWrapTypeV" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 2;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "Wrap Type V" $grpName;
					menuItem -label "CLAMP"		-data 0;
					menuItem -label "REPEAT"	-data 1;
					menuItem -label "AUTO"		-data 2;
				setParent -menu ..;

				separator -style "in";

			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPWrapTypeVReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPWrapTypeV" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPWrapTypeVNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPWrapTypeV1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPWrapTypeVNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPWrapTypeV2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPWrapTypeVNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPLODType
//----------------------------------------------------------------------------
global proc nnPSPLODTypeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODType" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		2
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				optionMenuGrp -label "LOD Type" $grpName;
					menuItem -label "AUTO"		-data 0;
					menuItem -label "CONSTANT"	-data 1;
					menuItem -label "SLOPE"		-data 2;
				setParent -menu ..;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
}

global proc nnPSPLODTypeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODType" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`optionMenuGrp -exists $grpName`) {
		nnPSPLODTypeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODType1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPLODTypeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODType2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPLODTypeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 2 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPLODOffset
//----------------------------------------------------------------------------
global proc nnPSPLODOffsetNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODOffset" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	"float"
				-longName		$attr[$i]
//				-minValue		0.0
//				-maxValue		1.0
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0.0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label		"LOD Level Offset"
					-precision 		6
					-minValue		-1.0
					-maxValue		1.0
					-fieldMinValue	-1000.0
					-fieldMaxValue	1000.0
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPSPLODOffsetReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODOffset" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnPSPLODOffsetNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODOffset1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPLODOffsetNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODOffset2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPLODOffsetNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPLODSlope
//----------------------------------------------------------------------------
global proc nnPSPLODSlopeNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODSlope" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	"float"
				-longName		$attr[$i]
				-minValue		0.0
//				-maxValue		1.0
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0.3;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				floatSliderGrp
					-label		"LOD Slope Value"
					-precision 		6
					-minValue		0.0
					-maxValue		1.0
					-fieldMinValue	0.0
					-fieldMaxValue	1000.0
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPSPLODSlopeReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODSlope" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`floatSliderGrp -exists $grpName`) {
		nnPSPLODSlopeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODOffset1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPLODSlopeNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODOffset2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPLODSlopeNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}
}

//----------------------------------------------------------------------------
// 			nnPSPLODMaxLevel
//----------------------------------------------------------------------------
global proc nnPSPLODMaxLevelNew( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODMaxLevel" + $nodeType;

	int $i;
	for( $i = 0; $i < 2; $i++ ){
		// ノードにアトリビュートがなければ新規にアトリビュート作成
		if ( !`attributeQuery -exists -node $nodeName $attr[$i]` ) {
			addAttr
				-attributeType	short
				-longName		$attr[$i]
				-minValue		0
				-maxValue		7
				$nodeName;
			// デフォルト値をセット
			setAttr ($nodeName+"."+$attr[$i]) 0;
		}
	}
	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName` ) {
		setParent ( "nnPSPTextureAttributeColumnLayout" + $nodeType );
			setUITemplate -pushTemplate attributeEditorTemplate;
				intSliderGrp
					-label		"LOD Max Level"
					-minValue	0
					-maxValue	7
					$grpName;
			setUITemplate -popTemplate;
		setParent ..;
	}
	// アトリビュートとコントロールを接続する
	nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
}

global proc nnPSPLODMaxLevelReplace( string $attrName1, string $attrName2 )
{
	string $list[];
	string $attr[];

	// アトリビュート名1を"."で文字列を分割する。
	tokenize( $attrName1, ".", $list );
	// アトリビュート名を取得
	$attr[0] = $list[1];
	// アトリビュート名2を"."で文字列を分割する。
	tokenize( $attrName2, ".", $list );
	// アトリビュート名を取得
	$attr[1] = $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= "nnPSPLODMaxLevel" + $nodeType;

	// アトリビュートに接続するコントロールがなければ新規にコントロール作成
	if ( !`intSliderGrp -exists $grpName`) {
		nnPSPLODMaxLevelNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODOffset1)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[0]` ) {
		nnPSPLODMaxLevelNew( $attrName1, $attrName2 );
	}
	// ノードにアトリビュート(nnPSPLODOffset2)がなければ新規にアトリビュート作成
	else if ( !`attributeQuery -exists -node $nodeName $attr[1]` ) {
		nnPSPLODMaxLevelNew( $attrName1, $attrName2 );
	}
	// アトリビュートとコントロールを接続する
	else {
		nnPSPMatConnectControl( $attrName1, $attrName2, $grpName, $nodeType, 0 );
	}
}

//----------------------------------------------------------------------------
//			nnPSPTextureAttributeFrameLayout
//----------------------------------------------------------------------------
global proc nnPSPTextureAttributeFrameLayoutNew( string $attrName )
{
	string $list[];
	tokenize( $attrName, ".", $list );
	string $attr 		= $list[1];
	string $nodeName 	= $list[0];
	string $nodeType 	= `nodeType $nodeName`;
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnPSPMaterialAttributeColumnLayout" + $nodeType );
				frameLayout
					-collapsable	true
					-collapse		true
					-label 			"PSP Texture Attributes"
					-borderVisible 	true
					-borderStyle	"etchedIn"
					-marginWidth	5
					-marginHeight	5
					$grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnPSPTextureAttributeFrameLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`frameLayout -exists $grpName` ) {
		nnPSPTextureAttributeFrameLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------
//			nnPSPTextureAttributeColumnLayout
//----------------------------------------------------------------------------
global proc nnPSPTextureAttributeColumnLayoutNew( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		setUITemplate -pushTemplate attributeEditorTemplate;
			setParent ( "nnPSPTextureAttributeFrameLayout" + $nodeType );
				columnLayout -adjustableColumn true $grpName;
			setParent ..;
		setUITemplate -popTemplate;
	}
}

global proc nnPSPTextureAttributeColumnLayoutReplace( string $attrName )
{
	string $list[];
	// アトリビュート名を"."で文字列を分割する。
	tokenize( $attrName, ".", $list);
	// アトリビュート名を取得
	string $attr		= $list[1];
	// ノード名を取得
	string $nodeName 	= $list[0];
	// ノードタイプを取得
	string $nodeType 	= `nodeType $nodeName`;
	// コントロール名を作成
	string $grpName 	= $attr + $nodeType;

	if ( !`columnLayout -exists $grpName` ) {
		nnPSPTextureAttributeColumnLayoutNew( $attrName );
	}
}

//----------------------------------------------------------------------------

//----------------------------------------------------------------------------
//
//			nnMaterialAttribute
//
//----------------------------------------------------------------------------
global proc nnMaterialAttribute( string $shaderGroupName )
{
	if( objectType($shaderGroupName) != "lambert"		&&
	    objectType($shaderGroupName) != "anisotropic"	&&
	    objectType($shaderGroupName) != "blinn"			&&
	    objectType($shaderGroupName) != "phong"			&&
	    objectType($shaderGroupName) != "phongE"		) {
		return;
	}

//	int $nextVersion = nnNextVersion();

	// nnMaterialAttributeVersion
	editorTemplate
		-callCustom "nnMaterialAttributeVersionNew"
					"nnMaterialAttributeVersionReplace"
					"nnMaterialAttributeVersionTOP";
	editorTemplate
		-callCustom "nnMaterialAttributeMainFrameLayoutNew"
					"nnMaterialAttributeMainFrameLayoutReplace"
					"nnMaterialAttributeMainFrameLayout";
	editorTemplate
		-callCustom "nnMaterialAttributeMainColumnLayoutNew"
					"nnMaterialAttributeMainColumnLayoutReplace"
					"nnMaterialAttributeMainColumnLayout";
	//------------------------------------------------------------------//
	//																	//
	//	Common Material Attributes										//
	//																	//
	//------------------------------------------------------------------//
	editorTemplate
		-callCustom "nnMaterialAttributeFrameLayoutNew"
					"nnMaterialAttributeFrameLayoutReplace"
					"nnMaterialAttributeFrameLayout";
	editorTemplate
		-callCustom "nnMaterialAttributeColumnLayoutNew"
					"nnMaterialAttributeColumnLayoutReplace"
					"nnMaterialAttributeColumnLayout";
	// DoubleSidePolygon
	editorTemplate
		-callCustom "nnDoubleSidePolygonNew"
					"nnDoubleSidePolygonReplace"
					"nnDoubleSidePolygon";
	editorTemplate
		-suppress	"nnDoubleSidePolygon";

	// IgnoreLight
	editorTemplate
		-callCustom	"nnIgnoreLightNew"
					"nnIgnoreLightReplace"
					"nnIgnoreLight";
	editorTemplate
		-suppress	"nnIgnoreLight";

	// DisableFogging
	editorTemplate
		-callCustom	"nnDisableFoggingNew"
					"nnDisableFoggingReplace"
					"nnDisableFogging";
	editorTemplate
		-suppress	"nnDisableFogging";

	// AlphaFlag
	editorTemplate
		-callCustom "nnAlphaFlagNew"
					"nnAlphaFlagReplace"
					"nnAlphaFlag";
	editorTemplate
		-suppress	"nnAlphaFlag";

	if( objectType($shaderGroupName) != "lambert" ) {
		// SpecularType
		editorTemplate
			-callCustom "nnSpecularTypeNew"
						"nnSpecularTypeReplace"
						"nnSpecularType";
		editorTemplate
			-suppress	"nnSpecularType";
	}
	// SortKey
	editorTemplate
		-callCustom "nnSortKeyNew"
					"nnSortKeyReplace"
					"nnSortKey";
	editorTemplate
		-suppress	"nnSortKey";
	// CallBack
	editorTemplate
		-callCustom "nnCallBackNew"
					"nnCallBackReplace"
					"nnCallBack";
	editorTemplate
		-suppress	"nnCallBack";

	// UserData
	editorTemplate
		-callCustom "nnUserDataNew"
					"nnUserDataReplace"
					"nnUserData";
	editorTemplate
		-suppress	"nnUserData";

	if( objectType($shaderGroupName) != "lambert" ) {
		// SpecularLevel
		editorTemplate
			-callCustom "nnSpecularLevelNew"
						"nnSpecularLevelReplace"
						"nnSpecularLevel";
		editorTemplate
			-suppress	"nnSpecularLevel";

		// SpecularGlossiness
		editorTemplate
			-callCustom "nnSpecularGlossinessNew"
						"nnSpecularGlossinessReplace"
						"nnSpecularGlossiness";
		editorTemplate
			-suppress	"nnSpecularGlossiness";
	}

	// VertexColor
	editorTemplate
		-callCustom "nnVertexColorNew"
					"nnVertexColorReplace"
					"nnVertexColor";
	editorTemplate
		-suppress	"nnVertexColor";

//	if( $nextVersion ) {
	// VertexColor2
		editorTemplate
			-callCustom "nnVertexColor2New"
						"nnVertexColor2Replace"
						"nnVertexColor2";
		editorTemplate
			-suppress	"nnVertexColor2";
//	}

	if( nnPS2GetPluginInfoMayaNNExporter() ) {
		//------------------------------------------------------------------//
		//																	//
		//	PS2 Material Attributes											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnPS2MaterialAttributeFrameLayoutNew"
						"nnPS2MaterialAttributeFrameLayoutReplace"
						"nnPS2MaterialAttributeFrameLayout";
		editorTemplate
			-callCustom "nnPS2MaterialAttributeColumnLayoutNew"
						"nnPS2MaterialAttributeColumnLayoutReplace"
						"nnPS2MaterialAttributeColumnLayout";

		// TextureAlpha0
		editorTemplate
			-callCustom "nnPS2TextureAlpha0New"
						"nnPS2TextureAlpha0Replace"
						"nnPS2TextureAlpha0";
		editorTemplate
			-suppress	"nnPS2TextureAlpha0";

		// TextureAlpha1
		editorTemplate
			-callCustom "nnPS2TextureAlpha1New"
						"nnPS2TextureAlpha1Replace"
						"nnPS2TextureAlpha1";
		editorTemplate
			-suppress	"nnPS2TextureAlpha1";


		//------------------------------------------------------------------//
		//																	//
		//	PS2 Texture Attribute											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnPS2TextureAttributeFrameLayoutNew"
						"nnPS2TextureAttributeFrameLayoutReplace"
						"nnPS2TextureAttributeFrameLayout";
		editorTemplate
			-callCustom "nnPS2TextureAttributeColumnLayoutNew"
						"nnPS2TextureAttributeColumnLayoutReplace"
						"nnPS2TextureAttributeColumnLayout";
		//----------------------//
		//	PS2 LayerSelect		//
		//----------------------//
		// LayerSelect
		editorTemplate
			-callCustom "nnPS2LayerSelectNew"
						"nnPS2LayerSelectReplace"
						"nnPS2LayerSelect";
		editorTemplate
			-suppress	"nnPS2LayerSelect";

		// BlendMode
		editorTemplate
			-callCustom "nnPS2BlendModeNew"
						"nnPS2BlendModeReplace"
						"nnPS2BlendMode1"
						"nnPS2BlendMode2";
		editorTemplate
			-suppress	"nnPS2BlendMode1";
		editorTemplate
			-suppress	"nnPS2BlendMode2";

		// UsePalette
		editorTemplate
			-callCustom "nnPS2UsePaletteNew"
						"nnPS2UsePaletteReplace"
						"nnPS2UsePalette1"
						"nnPS2UsePalette2";
		editorTemplate
			-suppress	"nnPS2UsePalette1";
		editorTemplate
			-suppress	"nnPS2UsePalette2";

		// PaletteBank
		editorTemplate
			-callCustom "nnPS2PaletteBankNew"
						"nnPS2PaletteBankReplace"
						"nnPS2PaletteBank1"
						"nnPS2PaletteBank2";
		editorTemplate
			-suppress	"nnPS2PaletteBank1";
		editorTemplate
			-suppress	"nnPS2PaletteBank2";

		// EnviromentMap
		editorTemplate
			-callCustom "nnPS2EnviromentMapNew"
						"nnPS2EnviromentMapReplace"
						"nnPS2EnviromentMap1"
						"nnPS2EnviromentMap2";
		editorTemplate
			-suppress	"nnPS2EnviromentMap1";
		editorTemplate
			-suppress	"nnPS2EnviromentMap2";

		// UClamp
		editorTemplate
			-callCustom "nnPS2UClampNew"
						"nnPS2UClampReplace"
						"nnPS2UClamp1"
						"nnPS2UClamp2";
		editorTemplate
			-suppress	"nnPS2UClamp1";
		editorTemplate
			-suppress	"nnPS2UClamp2";

		// VClamp
		editorTemplate
			-callCustom "nnPS2VClampNew"
						"nnPS2VClampReplace"
						"nnPS2VClamp1"
						"nnPS2VClamp2";
		editorTemplate
			-suppress	"nnPS2VClamp1";
		editorTemplate
			-suppress	"nnPS2VClamp2";

		// TexColComponent
		editorTemplate
			-callCustom "nnPS2TexColComponentNew"
						"nnPS2TexColComponentReplace"
						"nnPS2TexColComponent1"
						"nnPS2TexColComponent2";
		editorTemplate
			-suppress	"nnPS2TexColComponent1";
		editorTemplate
			-suppress	"nnPS2TexColComponent2";
		// AlphaBlendingPreset
		editorTemplate
			-callCustom "nnPS2AlphaBlendingPresetNew"
						"nnPS2AlphaBlendingPresetReplace"
						"nnPS2AlphaBlendingPreset";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingPreset";

		// AlphaBlendingA
		editorTemplate
			-callCustom "nnPS2AlphaBlendingANew"
						"nnPS2AlphaBlendingAReplace"
						"nnPS2AlphaBlendingA1"
						"nnPS2AlphaBlendingA2";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingA1";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingA2";

		// AlphaBlendingB
		editorTemplate
			-callCustom "nnPS2AlphaBlendingBNew"
						"nnPS2AlphaBlendingBReplace"
						"nnPS2AlphaBlendingB1"
						"nnPS2AlphaBlendingB2";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingB1";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingB2";

		// AlphaBlendingC
		editorTemplate
			-callCustom "nnPS2AlphaBlendingCNew"
						"nnPS2AlphaBlendingCReplace"
						"nnPS2AlphaBlendingC1"
						"nnPS2AlphaBlendingC2";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingC1";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingC2";

		// AlphaBlendingFix
		editorTemplate
			-callCustom "nnPS2AlphaBlendingFixNew"
						"nnPS2AlphaBlendingFixReplace"
						"nnPS2AlphaBlendingFix1"
						"nnPS2AlphaBlendingFix2";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingFix1";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingFix2";

		// AlphaBlendingD
		editorTemplate
			-callCustom "nnPS2AlphaBlendingDNew"
						"nnPS2AlphaBlendingDReplace"
						"nnPS2AlphaBlendingD1"
						"nnPS2AlphaBlendingD2";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingD1";
		editorTemplate
			-suppress	"nnPS2AlphaBlendingD2";

		// ManualColorClamp1
		editorTemplate
			-callCustom "nnPS2ManualColorClampNew"
						"nnPS2ManualColorClampReplace"
						"nnPS2ManualColorClamp1"
						"nnPS2ManualColorClamp2";
		editorTemplate
			-suppress	"nnPS2ManualColorClamp1";
		editorTemplate
			-suppress	"nnPS2ManualColorClamp2";

		// ColorClamp1RGB
		editorTemplate
			-callCustom "nnPS2ColorClampRGBNew"
						"nnPS2ColorClampRGBReplace"
						"nnPS2ColorClampRGB1"
						"nnPS2ColorClampRGB2";
		editorTemplate
			-suppress	"nnPS2ColorClampRGB1";
		editorTemplate
			-suppress	"nnPS2ColorClampRGB2";

		// ColorClamp1A
		editorTemplate
			-callCustom "nnPS2ColorClampANew"
						"nnPS2ColorClampAReplace"
						"nnPS2ColorClampA1"
						"nnPS2ColorClampA2";
		editorTemplate
			-suppress	"nnPS2ColorClampA1";
		editorTemplate
			-suppress	"nnPS2ColorClampA2";

		// AlphaTest
		editorTemplate
			-callCustom "nnPS2AlphaTestNew"
						"nnPS2AlphaTestReplace"
						"nnPS2AlphaTest1"
						"nnPS2AlphaTest2";
		editorTemplate
			-suppress	"nnPS2AlphaTest1";
		editorTemplate
			-suppress	"nnPS2AlphaTest2";

		// ManualAlphaRef
		editorTemplate
			-callCustom "nnPS2ManualAlphaRefNew"
						"nnPS2ManualAlphaRefReplace"
						"nnPS2ManualAlphaRef1"
						"nnPS2ManualAlphaRef2";
		editorTemplate
			-suppress	"nnPS2ManualAlphaRef1";
		editorTemplate
			-suppress	"nnPS2ManualAlphaRef2";

		// AlphaTestMode
		editorTemplate
			-callCustom "nnPS2AlphaTestModeNew"
						"nnPS2AlphaTestModeReplace"
						"nnPS2AlphaTestMode1"
						"nnPS2AlphaTestMode2";
		editorTemplate
			-suppress	"nnPS2AlphaTestMode1";
		editorTemplate
			-suppress	"nnPS2AlphaTestMode2";

		// AlphaRefData
		editorTemplate
			-callCustom "nnPS2AlphaRefDataNew"
						"nnPS2AlphaRefDataReplace"
						"nnPS2AlphaRefData1"
						"nnPS2AlphaRefData2";
		editorTemplate
			-suppress	"nnPS2AlphaRefData1";
		editorTemplate
			-suppress	"nnPS2AlphaRefData2";

		// AlphaFailMode
		editorTemplate
			-callCustom "nnPS2AlphaFailModeNew"
						"nnPS2AlphaFailModeReplace"
						"nnPS2AlphaFailMode1"
						"nnPS2AlphaFailMode2";
		editorTemplate
			-suppress	"nnPS2AlphaFailMode1";
		editorTemplate
			-suppress	"nnPS2AlphaFailMode2";

		// DstAlphaTest
		editorTemplate
			-callCustom "nnPS2DstAlphaTestNew"
						"nnPS2DstAlphaTestReplace"
						"nnPS2DstAlphaTest1"
						"nnPS2DstAlphaTest2";
		editorTemplate
			-suppress	"nnPS2DstAlphaTest1";
		editorTemplate
			-suppress	"nnPS2DstAlphaTest2";

		// DstAlphaTestMode
		editorTemplate
			-callCustom "nnPS2DstAlphaTestModeNew"
						"nnPS2DstAlphaTestModeReplace"
						"nnPS2DstAlphaTestMode1"
						"nnPS2DstAlphaTestMode2";
		editorTemplate
			-suppress	"nnPS2DstAlphaTestMode1";
		editorTemplate
			-suppress	"nnPS2DstAlphaTestMode2";

		// ZBufferTest
		editorTemplate
			-callCustom "nnPS2ZBufferTestNew"
						"nnPS2ZBufferTestReplace"
						"nnPS2ZBufferTest1"
						"nnPS2ZBufferTest2";
		editorTemplate
			-suppress	"nnPS2ZBufferTest1";
		editorTemplate
			-suppress	"nnPS2ZBufferTest2";

		// ZBufferTestMode
		editorTemplate
			-callCustom "nnPS2ZBufferTestModeNew"
						"nnPS2ZBufferTestModeReplace"
						"nnPS2ZBufferTestMode1"
						"nnPS2ZBufferTestMode2";
		editorTemplate
			-suppress	"nnPS2ZBufferTestMode1";
		editorTemplate
			-suppress	"nnPS2ZBufferTestMode2";

		// ZBufferUpdate
		editorTemplate
			-callCustom "nnPS2ZBufferUpdateNew"
						"nnPS2ZBufferUpdateReplace"
						"nnPS2ZBufferUpdate1"
						"nnPS2ZBufferUpdate2";
		editorTemplate
			-suppress	"nnPS2ZBufferUpdate1";
		editorTemplate
			-suppress	"nnPS2ZBufferUpdate2";

		// ManualMipmap
		editorTemplate
			-callCustom "nnPS2ManualMipmapNew"
						"nnPS2ManualMipmapReplace"
						"nnPS2ManualMipmap1"
						"nnPS2ManualMipmap2";
		editorTemplate
			-suppress	"nnPS2ManualMipmap1";
		editorTemplate
			-suppress	"nnPS2ManualMipmap2";

		// MipmapLCM
		editorTemplate
			-callCustom "nnPS2MipmapLCMNew"
						"nnPS2MipmapLCMReplace"
						"nnPS2MipmapLCM1"
						"nnPS2MipmapLCM2";
		editorTemplate
			-suppress	"nnPS2MipmapLCM1";
		editorTemplate
			-suppress	"nnPS2MipmapLCM2";

		// MipmapL
		editorTemplate
			-callCustom "nnPS2MipmapLNew"
						"nnPS2MipmapLReplace"
						"nnPS2MipmapL1"
						"nnPS2MipmapL2";
		editorTemplate
			-suppress	"nnPS2MipmapL1";
		editorTemplate
			-suppress	"nnPS2MipmapL2";

		// MipmapK LCM=0
		editorTemplate
			-callCustom "nnPS2MipmapK0New"
						"nnPS2MipmapK0Replace"
						"nnPS2MipmapK01"
						"nnPS2MipmapK02";
		editorTemplate
			-suppress	"nnPS2MipmapK01";
		editorTemplate
			-suppress	"nnPS2MipmapK02";

		// MipmapK LCM=1
		editorTemplate
			-callCustom "nnPS2MipmapK1New"
						"nnPS2MipmapK1Replace"
						"nnPS2MipmapK11"
						"nnPS2MipmapK12";
		editorTemplate
			-suppress	"nnPS2MipmapK11";
		editorTemplate
			-suppress	"nnPS2MipmapK12";
	}

	if( nnGCGetPluginInfoMayaNNExporter() ) {
		//------------------------------------------------------------------//
		//																	//
		//	GC Material Attribute											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnGCMaterialAttributeFrameLayoutNew"
						"nnGCMaterialAttributeFrameLayoutReplace"
						"nnGCMaterialAttributeFrameLayout";
		editorTemplate
			-callCustom "nnGCMaterialAttributeColumnLayoutNew"
						"nnGCMaterialAttributeColumnLayoutReplace"
						"nnGCMaterialAttributeColumnLayout";
		// UVMode
		editorTemplate
			-callCustom "nnGCUVModeNew"
						"nnGCUVModeReplace"
						"nnGCUVMode";
		editorTemplate
			-suppress	"nnGCUVMode";

		// AlphaBlending Mode
		editorTemplate
			-callCustom "nnGCAlphaBlendingModeNew"
						"nnGCAlphaBlendingModeReplace"
						"nnGCAlphaBlendingMode";
		editorTemplate
			-suppress	"nnGCAlphaBlendingMode";

		// AlphaBlending SRC
		editorTemplate
			-callCustom "nnGCAlphaBlendingSrcNew"
						"nnGCAlphaBlendingSrcReplace"
						"nnGCAlphaBlendingSrc";
		editorTemplate
			-suppress	"nnGCAlphaBlendingSrc";

		// AlphaBlending DST
		editorTemplate
			-callCustom "nnGCAlphaBlendingDstNew"
						"nnGCAlphaBlendingDstReplace"
						"nnGCAlphaBlendingDst";
		editorTemplate
			-suppress	"nnGCAlphaBlendingDst";

		// AlphaBlending Logic
		editorTemplate
			-callCustom "nnGCAlphaBlendingLogicNew"
						"nnGCAlphaBlendingLogicReplace"
						"nnGCAlphaBlendingLogic";
		editorTemplate
			-suppress	"nnGCAlphaBlendingLogic";

		// VertexColorTexEmulate
		editorTemplate
			-callCustom "nnGCVtxColTexEmulateNew"
						"nnGCVtxColTexEmulateReplace"
						"nnGCVtxColTexEmulate";
		editorTemplate
			-suppress	"nnGCVtxColTexEmulate";

		// ManualAlphaRef
		editorTemplate
			-callCustom "nnGCManualAlphaRefNew"
						"nnGCManualAlphaRefReplace"
						"nnGCManualAlphaRef";
		editorTemplate
			-suppress	"nnGCManualAlphaRef";

		// AlphaCompMode0
		editorTemplate
			-callCustom "nnGCAlphaCompMode0New"
						"nnGCAlphaCompMode0Replace"
						"nnGCAlphaCompMode0";
		editorTemplate
			-suppress	"nnGCAlphaCompMode0";

		// AlphaCompMode1
		editorTemplate
			-callCustom "nnGCAlphaCompMode1New"
						"nnGCAlphaCompMode1Replace"
						"nnGCAlphaCompMode1";
		editorTemplate
			-suppress	"nnGCAlphaCompMode1";

		// AlphaRefData0
		editorTemplate
			-callCustom "nnGCAlphaRefData0New"
						"nnGCAlphaRefData0Replace"
						"nnGCAlphaRefData0";
		editorTemplate
			-suppress	"nnGCAlphaRefData0";
		// AlphaRefData1
		editorTemplate
			-callCustom "nnGCAlphaRefData1New"
						"nnGCAlphaRefData1Replace"
						"nnGCAlphaRefData1";
		editorTemplate
			-suppress	"nnGCAlphaRefData1";
		// AlphaCompOperand
		editorTemplate
			-callCustom "nnGCAlphaCompOperandNew"
						"nnGCAlphaCompOperandReplace"
						"nnGCAlphaCompOperand";
		editorTemplate
			-suppress	"nnGCAlphaCompOperand";
		// ZBufferComp
		editorTemplate
			-callCustom "nnGCZBufferCompNew"
						"nnGCZBufferCompReplace"
						"nnGCZBufferComp";
		editorTemplate
			-suppress	"nnGCZBufferComp";
		// ZBufferCompMode
		editorTemplate
			-callCustom "nnGCZBufferCompModeNew"
						"nnGCZBufferCompModeReplace"
						"nnGCZBufferCompMode";
		editorTemplate
			-suppress	"nnGCZBufferCompMode";

		// ZBufferCompLoc
		editorTemplate
			-callCustom "nnGCZBufferCompLocNew"
						"nnGCZBufferCompLocReplace"
						"nnGCZBufferCompLoc";
		editorTemplate
			-suppress	"nnGCZBufferCompLoc";

		// ZBufferUpdate
		editorTemplate
			-callCustom "nnGCZBufferUpdateNew"
						"nnGCZBufferUpdateReplace"
						"nnGCZBufferUpdate";
		editorTemplate
			-suppress	"nnGCZBufferUpdate";

		//------------------------------------------------------------------//
		//																	//
		//	GC Texture Attribute											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnGCTextureAttributeFrameLayoutNew"
						"nnGCTextureAttributeFrameLayoutReplace"
						"nnGCTextureAttributeFrameLayout";
		editorTemplate
			-callCustom "nnGCTextureAttributeColumnLayoutNew"
						"nnGCTextureAttributeColumnLayoutReplace"
						"nnGCTextureAttributeColumnLayout";
		//	GC LayerSelect		//
		editorTemplate
			-callCustom "nnGCLayerSelectNew"
						"nnGCLayerSelectReplace"
						"nnGCLayerSelect";
		editorTemplate
			-suppress	"nnGCLayerSelect";

		// BlendMode
		editorTemplate
			-callCustom "nnGCBlendModeNew"
						"nnGCBlendModeReplace"
						"nnGCBlendMode1"
						"nnGCBlendMode2"
						"nnGCBlendMode3"
						"nnGCBlendMode4";
		editorTemplate
			-suppress	"nnGCBlendMode1";
		editorTemplate
			-suppress	"nnGCBlendMode2";
		editorTemplate
			-suppress	"nnGCBlendMode3";
		editorTemplate
			-suppress	"nnGCBlendMode4";

		// UsePalette
		editorTemplate
			-callCustom "nnGCUsePaletteNew"
						"nnGCUsePaletteReplace"
						"nnGCUsePalette1"
						"nnGCUsePalette2"
						"nnGCUsePalette3"
						"nnGCUsePalette4";
		editorTemplate
			-suppress	"nnGCUsePalette1";
		editorTemplate
			-suppress	"nnGCUsePalette2";
		editorTemplate
			-suppress	"nnGCUsePalette3";
		editorTemplate
			-suppress	"nnGCUsePalette4";

		// PaletteBank
		editorTemplate
			-callCustom "nnGCPaletteBankNew"
						"nnGCPaletteBankReplace"
						"nnGCPaletteBank1"
						"nnGCPaletteBank2"
						"nnGCPaletteBank3"
						"nnGCPaletteBank4";
		editorTemplate
			-suppress	"nnGCPaletteBank1";
		editorTemplate
			-suppress	"nnGCPaletteBank2";
		editorTemplate
			-suppress	"nnGCPaletteBank3";
		editorTemplate
			-suppress	"nnGCPaletteBank4";

		// EnviromentMap
		editorTemplate
			-callCustom "nnGCEnviromentMapNew"
						"nnGCEnviromentMapReplace"
						"nnGCEnviromentMap1"
						"nnGCEnviromentMap2"
						"nnGCEnviromentMap3"
						"nnGCEnviromentMap4";
		editorTemplate
			-suppress	"nnGCEnviromentMap1";
		editorTemplate
			-suppress	"nnGCEnviromentMap2";
		editorTemplate
			-suppress	"nnGCEnviromentMap3";
		editorTemplate
			-suppress	"nnGCEnviromentMap4";

		// UClamp
		editorTemplate
			-callCustom "nnGCUClampNew"
						"nnGCUClampReplace"
						"nnGCUClamp1"
						"nnGCUClamp2"
						"nnGCUClamp3"
						"nnGCUClamp4";
		editorTemplate
			-suppress	"nnGCUClamp1";
		editorTemplate
			-suppress	"nnGCUClamp2";
		editorTemplate
			-suppress	"nnGCUClamp3";
		editorTemplate
			-suppress	"nnGCUClamp4";

		// VClamp
		editorTemplate
			-callCustom "nnGCVClampNew"
						"nnGCVClampReplace"
						"nnGCVClamp1"
						"nnGCVClamp2"
						"nnGCVClamp3"
						"nnGCVClamp4";
		editorTemplate
			-suppress	"nnGCVClamp1";
		editorTemplate
			-suppress	"nnGCVClamp2";
		editorTemplate
			-suppress	"nnGCVClamp3";
		editorTemplate
			-suppress	"nnGCVClamp4";

		// LightBlend
		editorTemplate
			-callCustom "nnGCLightBlendNew"
						"nnGCLightBlendReplace"
						"nnGCLightBlend1"
						"nnGCLightBlend2"
						"nnGCLightBlend3"
						"nnGCLightBlend4";
		editorTemplate
			-suppress	"nnGCLightBlend1";
		editorTemplate
			-suppress	"nnGCLightBlend2";
		editorTemplate
			-suppress	"nnGCLightBlend3";
		editorTemplate
			-suppress	"nnGCLightBlend4";
	}

	if( nnXBGetPluginInfoMayaNNExporter() ) {
		//------------------------------------------------------------------//
		//																	//
		//	Xbox Material Attributes										//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnXBMaterialAttributeFrameLayoutNew"
						"nnXBMaterialAttributeFrameLayoutReplace"
						"nnXBMaterialAttributeFrameLayout";
		editorTemplate
			-callCustom "nnXBMaterialAttributeColumnLayoutNew"
						"nnXBMaterialAttributeColumnLayoutReplace"
						"nnXBMaterialAttributeColumnLayout";
		// UVMode
		editorTemplate
			-callCustom "nnXBUVModeNew"
						"nnXBUVModeReplace"
						"nnXBUVMode";
		editorTemplate
			-suppress	"nnXBUVMode";

		// BlendFlag
		editorTemplate
			-callCustom "nnXBBlendFlagNew"
						"nnXBBlendFlagReplace"
						"nnXBBlendFlag";
		editorTemplate
			-suppress	"nnXBBlendFlag";

		// AlphaBlending Operate
		editorTemplate
			-callCustom "nnXBAlphaBlendingOperateNew"
						"nnXBAlphaBlendingOperateReplace"
						"nnXBAlphaBlendingOperate";
		editorTemplate
			-suppress	"nnXBAlphaBlendingOperate";

		// AlphaBlending SRC Factor
		editorTemplate
			-callCustom "nnXBAlphaBlendingSrcNew"
						"nnXBAlphaBlendingSrcReplace"
						"nnXBAlphaBlendingSrc";
		editorTemplate
			-suppress	"nnXBAlphaBlendingSrc";

		// AlphaBlending DST Factor
		editorTemplate
			-callCustom "nnXBAlphaBlendingDstNew"
						"nnXBAlphaBlendingDstReplace"
						"nnXBAlphaBlendingDst";
		editorTemplate
			-suppress	"nnXBAlphaBlendingDst";


		// AlphaBlending SRC Factor
		editorTemplate
			-callCustom "nnXBAlphaBlendingSrcNew"
						"nnXBAlphaBlendingSrcReplace"
						"nnXBAlphaBlendingSrc";
		editorTemplate
			-suppress	"nnXBAlphaBlendingSrc";

		// AlphaBlending Const Color
		editorTemplate
			-callCustom "nnAlphaBlendingConstColorNew"
						"nnAlphaBlendingConstColorReplace"
						"nnAlphaBlendingConstColor";
		editorTemplate
			-suppress	"nnAlphaBlendingConstColor";

		// AlphaBlending Logic
		editorTemplate
			-callCustom "nnXBAlphaBlendingLogicNew"
						"nnXBAlphaBlendingLogicReplace"
						"nnXBAlphaBlendingLogic";
		editorTemplate
			-suppress	"nnXBAlphaBlendingLogic";

		// AlphaTest
		editorTemplate
			-callCustom "nnXBAlphaTestNew"
						"nnXBAlphaTestReplace"
						"nnXBAlphaTest";
		editorTemplate
			-suppress	"nnXBAlphaTest";

		// ManualAlphaRef
		editorTemplate
			-callCustom "nnXBManualAlphaRefNew"
						"nnXBManualAlphaRefReplace"
						"nnXBManualAlphaRef";
		editorTemplate
			-suppress	"nnXBManualAlphaRef";

		// nnXBAlphaTestMode
		editorTemplate
			-callCustom "nnXBAlphaTestModeNew"
						"nnXBAlphaTestModeReplace"
						"nnXBAlphaTestMode";
		editorTemplate
			-suppress	"nnXBAlphaTestMode";

		// nnXBAlphaRefData
		editorTemplate
			-callCustom "nnXBAlphaRefDataNew"
						"nnXBAlphaRefDataReplace"
						"nnXBAlphaRefData";
		editorTemplate
			-suppress	"nnXBAlphaRefData";

		// ZBufferTest
		editorTemplate
			-callCustom "nnXBZBufferCompNew"
						"nnXBZBufferCompReplace"
						"nnXBZBufferComp";
		editorTemplate
			-suppress	"nnXBZBufferComp";

		// nnXBZBufferCompMode
		editorTemplate
			-callCustom "nnXBZBufferCompModeNew"
						"nnXBZBufferCompModeReplace"
						"nnXBZBufferCompMode";
		editorTemplate
			-suppress	"nnXBZBufferCompMode";

		// nnXBZBufferRefData
		editorTemplate
			-callCustom "nnXBZBufferUpdateNew"
						"nnXBZBufferUpdateReplace"
						"nnXBZBufferUpdate";
		editorTemplate
			-suppress	"nnXBZBufferUpdate";

		//------------------------------------------------------------------//
		//																	//
		//	Xbox Texture Attribute											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnXBTextureAttributeFrameLayoutNew"
						"nnXBTextureAttributeFrameLayoutReplace"
						"nnXBTextureAttributeFrameLayout";
		editorTemplate
			-callCustom "nnXBTextureAttributeColumnLayoutNew"
						"nnXBTextureAttributeColumnLayoutReplace"
						"nnXBTextureAttributeColumnLayout";
		//	Xbox LayerSelect		//
		editorTemplate
			-callCustom "nnXBLayerSelectNew"
						"nnXBLayerSelectReplace"
						"nnXBLayerSelect";
		editorTemplate
			-suppress	"nnXBLayerSelect";

		// BlendMode
		editorTemplate
			-callCustom "nnXBBlendModeNew"
						"nnXBBlendModeReplace"
						"nnXBBlendMode1"
						"nnXBBlendMode2"
						"nnXBBlendMode3"
						"nnXBBlendMode4";
		editorTemplate
			-suppress	"nnXBBlendMode1";
		editorTemplate
			-suppress	"nnXBBlendMode2";
		editorTemplate
			-suppress	"nnXBBlendMode3";
		editorTemplate
			-suppress	"nnXBBlendMode4";

		// LightStage
		editorTemplate
			-callCustom "nnXBLightStageNew"
						"nnXBLightStageReplace"
						"nnXBLightStage1"
						"nnXBLightStage2"
						"nnXBLightStage3"
						"nnXBLightStage4";
		editorTemplate
			-suppress	"nnXBLightStage1";
		editorTemplate
			-suppress	"nnXBLightStage2";
		editorTemplate
			-suppress	"nnXBLightStage3";
		editorTemplate
			-suppress	"nnXBLightStage4";

		// EnviromentMap
		editorTemplate
			-callCustom "nnXBEnviromentMapNew"
						"nnXBEnviromentMapReplace"
						"nnXBEnviromentMap1"
						"nnXBEnviromentMap2"
						"nnXBEnviromentMap3"
						"nnXBEnviromentMap4";
		editorTemplate
			-suppress	"nnXBEnviromentMap1";
		editorTemplate
			-suppress	"nnXBEnviromentMap2";
		editorTemplate
			-suppress	"nnXBEnviromentMap3";
		editorTemplate
			-suppress	"nnXBEnviromentMap4";

		// UClamp
		editorTemplate
			-callCustom "nnXBUClampNew"
						"nnXBUClampReplace"
						"nnXBUClamp1"
						"nnXBUClamp2"
						"nnXBUClamp3"
						"nnXBUClamp4";
		editorTemplate
			-suppress	"nnXBUClamp1";
		editorTemplate
			-suppress	"nnXBUClamp2";
		editorTemplate
			-suppress	"nnXBUClamp3";
		editorTemplate
			-suppress	"nnXBUClamp4";

		// VClamp
		editorTemplate
			-callCustom "nnXBVClampNew"
						"nnXBVClampReplace"
						"nnXBVClamp1"
						"nnXBVClamp2"
						"nnXBVClamp3"
						"nnXBVClamp4";
		editorTemplate
			-suppress	"nnXBVClamp1";
		editorTemplate
			-suppress	"nnXBVClamp2";
		editorTemplate
			-suppress	"nnXBVClamp3";
		editorTemplate
			-suppress	"nnXBVClamp4";

		// LODBias
		editorTemplate
			-callCustom "nnXBLODBiasNew"
						"nnXBLODBiasReplace"
						"nnXBLODBias1"
						"nnXBLODBias2"
						"nnXBLODBias3"
						"nnXBLODBias4";
		editorTemplate
			-suppress	"nnXBLODBias1";
		editorTemplate
			-suppress	"nnXBLODBias2";
		editorTemplate
			-suppress	"nnXBLODBias3";
		editorTemplate
			-suppress	"nnXBLODBias4";

		// MaxMipLevel
		editorTemplate
			-callCustom "nnXBMaxMipLevelNew"
						"nnXBMaxMipLevelReplace"
						"nnXBMaxMipLevel1"
						"nnXBMaxMipLevel2"
						"nnXBMaxMipLevel3"
						"nnXBMaxMipLevel4";
		editorTemplate
			-suppress	"nnXBMaxMipLevel1";
		editorTemplate
			-suppress	"nnXBMaxMipLevel2";
		editorTemplate
			-suppress	"nnXBMaxMipLevel3";
		editorTemplate
			-suppress	"nnXBMaxMipLevel4";

		// Setup Filter Mode
		editorTemplate
			-callCustom "nnXBFilterModeNew"
						"nnXBFilterModeReplace"
						"nnXBFilterMode1"
						"nnXBFilterMode2"
						"nnXBFilterMode3"
						"nnXBFilterMode4";
		editorTemplate
			-suppress	"nnXBFilterMode1";
		editorTemplate
			-suppress	"nnXBFilterMode2";
		editorTemplate
			-suppress	"nnXBFilterMode3";
		editorTemplate
			-suppress	"nnXBFilterMode4";

		// Mag Filter Mode
		editorTemplate
			-callCustom "nnXBMagFilterModeNew"
						"nnXBMagFilterModeReplace"
						"nnXBMagFilterMode1"
						"nnXBMagFilterMode2"
						"nnXBMagFilterMode3"
						"nnXBMagFilterMode4";
		editorTemplate
			-suppress	"nnXBMagFilterMode1";
		editorTemplate
			-suppress	"nnXBMagFilterMode2";
		editorTemplate
			-suppress	"nnXBMagFilterMode3";
		editorTemplate
			-suppress	"nnXBMagFilterMode4";

		// Min Filter Mode
		editorTemplate
			-callCustom "nnXBMinFilterModeNew"
						"nnXBMinFilterModeReplace"
						"nnXBMinFilterMode1"
						"nnXBMinFilterMode2"
						"nnXBMinFilterMode3"
						"nnXBMinFilterMode4";
		editorTemplate
			-suppress	"nnXBMinFilterMode1";
		editorTemplate
			-suppress	"nnXBMinFilterMode2";
		editorTemplate
			-suppress	"nnXBMinFilterMode3";
		editorTemplate
			-suppress	"nnXBMinFilterMode4";
	}

	if( nnLBGetPluginInfoMayaNNExporter()    ||
	    nnXENONGetPluginInfoMayaNNExporter() ||
	    nnPS3GetPluginInfoMayaNNExporter()   ||
	    nnDXG2GetPluginInfoMayaNNExporter()  ) {
		//------------------------------------------------------------------//
		//																	//
		//	Lindbergh Material Attribute									//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnLBMaterialAttributeFrameLayoutNew"
						"nnLBMaterialAttributeFrameLayoutReplace"
						"nnLBMaterialAttributeFrameLayout";
		editorTemplate
			-callCustom "nnLBMaterialAttributeColumnLayoutNew"
						"nnLBMaterialAttributeColumnLayoutReplace"
						"nnLBMaterialAttributeColumnLayout";

		// nnLBUserProfile
		editorTemplate
			-callCustom "nnLBUserProfileNew"
						"nnLBUserProfileReplace"
						"nnLBUserProfile";
		editorTemplate
			-suppress	"nnLBUserProfile";

		// nnLBBlendFlag
		editorTemplate
			-callCustom "nnLBBlendFlagNew"
						"nnLBBlendFlagReplace"
						"nnLBBlendFlag";
		editorTemplate
			-suppress	"nnLBBlendFlag";

		// nnLBBlendEquation
		editorTemplate
			-callCustom "nnLBBlendEquationNew"
						"nnLBBlendEquationReplace"
						"nnLBBlendEquation";
		editorTemplate
			-suppress	"nnLBBlendEquation";

		// nnLBBlendSrcFactorRGB
		editorTemplate
			-callCustom "nnLBBlendSrcFactorRGBNew"
						"nnLBBlendSrcFactorRGBReplace"
						"nnLBBlendSrcFactorRGB";
		editorTemplate
			-suppress	"nnLBBlendSrcFactorRGB";

		// nnLBBlendDstFactorRGB
		editorTemplate
			-callCustom "nnLBBlendDstFactorRGBNew"
						"nnLBBlendDstFactorRGBReplace"
						"nnLBBlendDstFactorRGB";
		editorTemplate
			-suppress	"nnLBBlendDstFactorRGB";

		// nnLBBlendFuncSeparate
		editorTemplate
			-callCustom "nnLBBlendFuncSeparateNew"
						"nnLBBlendFuncSeparateReplace"
						"nnLBBlendFuncSeparate";
		editorTemplate
			-suppress	"nnLBBlendFuncSeparate";

		// nnLBBlendSrcFactorA
		editorTemplate
			-callCustom "nnLBBlendSrcFactorANew"
						"nnLBBlendSrcFactorAReplace"
						"nnLBBlendSrcFactorA";
		editorTemplate
			-suppress	"nnLBBlendSrcFactorA";

		// nnLBBlendDstFactorA
		editorTemplate
			-callCustom "nnLBBlendDstFactorANew"
						"nnLBBlendDstFactorAReplace"
						"nnLBBlendDstFactorA";
		editorTemplate
			-suppress	"nnLBBlendDstFactorA";

		// nnLBBlendConstColor
		editorTemplate
			-callCustom "nnLBBlendConstColorNew"
						"nnLBBlendConstColorReplace"
						"nnLBBlendConstColor";
		editorTemplate
			-suppress	"nnLBBlendConstColor";

		// nnLBBlendLogicFlag
		editorTemplate
			-callCustom "nnLBBlendLogicFlagNew"
						"nnLBBlendLogicFlagReplace"
						"nnLBBlendLogicFlag";
		editorTemplate
			-suppress	"nnLBBlendLogicFlag";

		// nnLBBlendLogicOperation
		editorTemplate
			-callCustom "nnLBBlendLogicOperationNew"
						"nnLBBlendLogicOperationReplace"
						"nnLBBlendLogicOperation";
		editorTemplate
			-suppress	"nnLBBlendLogicOperation";

		// nnLBAlphaTest
		editorTemplate
			-callCustom "nnLBAlphaTestNew"
						"nnLBAlphaTestReplace"
						"nnLBAlphaTest";
		editorTemplate
			-suppress	"nnLBAlphaTest";

		// nnLBManualSetting
		editorTemplate
			-callCustom "nnLBManualSettingNew"
						"nnLBManualSettingReplace"
						"nnLBManualSetting";
		editorTemplate
			-suppress	"nnLBManualSetting";

		// nnLBAlphaTestMode
		editorTemplate
			-callCustom "nnLBAlphaTestModeNew"
						"nnLBAlphaTestModeReplace"
						"nnLBAlphaTestMode";
		editorTemplate
			-suppress	"nnLBAlphaTestMode";

		// nnLBManualAlphaRef
		editorTemplate
			-callCustom "nnLBManualAlphaRefNew"
						"nnLBManualAlphaRefReplace"
						"nnLBManualAlphaRef";
		editorTemplate
			-suppress	"nnLBManualAlphaRef";

		// nnLBZBufferComp
		editorTemplate
			-callCustom "nnLBZBufferCompNew"
						"nnLBZBufferCompReplace"
						"nnLBZBufferComp";
		editorTemplate
			-suppress	"nnLBZBufferComp";

		// nnLBDepthCompFunction
		editorTemplate
			-callCustom "nnLBDepthCompFunctionNew"
						"nnLBDepthCompFunctionReplace"
						"nnLBDepthCompFunction";
		editorTemplate
			-suppress	"nnLBDepthCompFunction";

		// nnLBDepthWriting
		editorTemplate
			-callCustom "nnLBDepthWritingNew"
						"nnLBDepthWritingReplace"
						"nnLBDepthWriting";
		editorTemplate
			-suppress	"nnLBDepthWriting";

		// nnLBRWriting
		editorTemplate
			-callCustom "nnLBRWritingNew"
						"nnLBRWritingReplace"
						"nnLBRWriting";
		editorTemplate
			-suppress	"nnLBRWriting";

		// nnLBGWriting
		editorTemplate
			-callCustom "nnLBGWritingNew"
						"nnLBGWritingReplace"
						"nnLBGWriting";
		editorTemplate
			-suppress	"nnLBGWriting";

		// nnLBBWriting
		editorTemplate
			-callCustom "nnLBBWritingNew"
						"nnLBBWritingReplace"
						"nnLBBWriting";
		editorTemplate
			-suppress	"nnLBBWriting";

		// nnLBAWriting
		editorTemplate
			-callCustom "nnLBAWritingNew"
						"nnLBAWritingReplace"
						"nnLBAWriting";
		editorTemplate
			-suppress	"nnLBAWriting";
	}

	if( nnPSPGetPluginInfoMayaNNExporter() ) {
		//------------------------------------------------------------------//
		//																	//
		//	PSP Material Attribute											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnPSPMaterialAttributeFrameLayoutNew"
						"nnPSPMaterialAttributeFrameLayoutReplace"
						"nnPSPMaterialAttributeFrameLayout";
		editorTemplate
			-callCustom "nnPSPMaterialAttributeColumnLayoutNew"
						"nnPSPMaterialAttributeColumnLayoutReplace"
						"nnPSPMaterialAttributeColumnLayout";

		//	nnPSPMatLayerSelect
		editorTemplate
			-callCustom "nnPSPMatLayerSelectNew"
						"nnPSPMatLayerSelectReplace"
						"nnPSPMatLayerSelect";
		editorTemplate
			-suppress	"nnPSPMatLayerSelect";

		// nnPSPBlendFlag
		editorTemplate
			-callCustom "nnPSPBlendFlagNew"
						"nnPSPBlendFlagReplace"
						"nnPSPBlendFlag1"
						"nnPSPBlendFlag2";
		editorTemplate
			-suppress	"nnPSPBlendFlag1";
		editorTemplate
			-suppress	"nnPSPBlendFlag2";

		// nnPSPBlendOperand
		editorTemplate
			-callCustom "nnPSPBlendOperandNew"
						"nnPSPBlendOperandReplace"
						"nnPSPBlendOperand1"
						"nnPSPBlendOperand2";
		editorTemplate
			-suppress	"nnPSPBlendOperand1";
		editorTemplate
			-suppress	"nnPSPBlendOperand2";

		// nnPSPBlendParamA
		editorTemplate
			-callCustom "nnPSPBlendParamANew"
						"nnPSPBlendParamAReplace"
						"nnPSPBlendParamA1"
						"nnPSPBlendParamA2";
		editorTemplate
			-suppress	"nnPSPBlendParamA1";
		editorTemplate
			-suppress	"nnPSPBlendParamA2";

		// nnPSPBlendColorA
		editorTemplate
			-callCustom "nnPSPBlendColorANew"
						"nnPSPBlendColorAReplace"
						"nnPSPBlendColorA1"
						"nnPSPBlendColorA2";
		editorTemplate
			-suppress	"nnPSPBlendColorA1";
		editorTemplate
			-suppress	"nnPSPBlendColorA2";

		// nnPSPBlendParamB
		editorTemplate
			-callCustom "nnPSPBlendParamBNew"
						"nnPSPBlendParamBReplace"
						"nnPSPBlendParamB1"
						"nnPSPBlendParamB2";
		editorTemplate
			-suppress	"nnPSPBlendParamB1";
		editorTemplate
			-suppress	"nnPSPBlendParamB2";

		// nnPSPBlendColorB
		editorTemplate
			-callCustom "nnPSPBlendColorBNew"
						"nnPSPBlendColorBReplace"
						"nnPSPBlendColorB1"
						"nnPSPBlendColorB2";
		editorTemplate
			-suppress	"nnPSPBlendColorB1";
		editorTemplate
			-suppress	"nnPSPBlendColorB2";

		// nnPSPBlendLogic
		editorTemplate
			-callCustom "nnPSPBlendLogicNew"
						"nnPSPBlendLogicReplace"
						"nnPSPBlendLogic1"
						"nnPSPBlendLogic2";
		editorTemplate
			-suppress	"nnPSPBlendLogic1";
		editorTemplate
			-suppress	"nnPSPBlendLogic2";

		// nnPSPBlendLogicOperand
		editorTemplate
			-callCustom "nnPSPBlendLogicOperandNew"
						"nnPSPBlendLogicOperandReplace"
						"nnPSPBlendLogicOperand1"
						"nnPSPBlendLogicOperand2";
		editorTemplate
			-suppress	"nnPSPBlendLogicOperand1";
		editorTemplate
			-suppress	"nnPSPBlendLogicOperand2";

		// nnPSPAlphaTest
		editorTemplate
			-callCustom "nnPSPAlphaTestNew"
						"nnPSPAlphaTestReplace"
						"nnPSPAlphaTest1"
						"nnPSPAlphaTest2";
		editorTemplate
			-suppress	"nnPSPAlphaTest1";

		editorTemplate
			-suppress	"nnPSPAlphaTest2";

		// nnPSPAlphaTestFunc
		editorTemplate
			-callCustom "nnPSPAlphaTestFuncNew"
						"nnPSPAlphaTestFuncReplace"
						"nnPSPAlphaTestFunc1"
						"nnPSPAlphaTestFunc2";
		editorTemplate
			-suppress	"nnPSPAlphaTestFunc1";
		editorTemplate
			-suppress	"nnPSPAlphaTestFunc2";

		// nnPSPManualAlphaTestRef
		editorTemplate
			-callCustom "nnPSPManualAlphaTestRefNew"
						"nnPSPManualAlphaTestRefReplace"
						"nnPSPManualAlphaTestRef1"
						"nnPSPManualAlphaTestRef2";
		editorTemplate
			-suppress	"nnPSPManualAlphaTestRef1";
		editorTemplate
			-suppress	"nnPSPManualAlphaTestRef2";

		// nnPSPAlphaTestRef
		editorTemplate
			-callCustom "nnPSPAlphaTestRefNew"
						"nnPSPAlphaTestRefReplace"
						"nnPSPAlphaTestRef1"
						"nnPSPAlphaTestRef2";
		editorTemplate
			-suppress	"nnPSPAlphaTestRef1";
		editorTemplate
			-suppress	"nnPSPAlphaTestRef2";

		// nnPSPDepthTest
		editorTemplate
			-callCustom "nnPSPDepthTestNew"
						"nnPSPDepthTestReplace"
						"nnPSPDepthTest1"
						"nnPSPDepthTest2";
		editorTemplate
			-suppress	"nnPSPDepthTest1";
		editorTemplate
			-suppress	"nnPSPDepthTest2";

		// nnPSPDepthTestFunc
		editorTemplate
			-callCustom "nnPSPDepthTestFuncNew"
						"nnPSPDepthTestFuncReplace"
						"nnPSPDepthTestFunc1"
						"nnPSPDepthTestFunc2";
		editorTemplate
			-suppress	"nnPSPDepthTestFunc1";
		editorTemplate
			-suppress	"nnPSPDepthTestFunc2";

		// nnPSPPixelMask
		editorTemplate
			-callCustom "nnPSPPixelMaskNew"
						"nnPSPPixelMaskReplace"
						"nnPSPPixelMask1"
						"nnPSPPixelMask2";
		editorTemplate
			-suppress	"nnPSPPixelMask1";
		editorTemplate
			-suppress	"nnPSPPixelMask2";

		// nnPSPAlphaTestMask
		editorTemplate
			-callCustom "nnPSPAlphaTestMaskNew"
						"nnPSPAlphaTestMaskReplace"
						"nnPSPAlphaTestMask1"
						"nnPSPAlphaTestMask2";
		editorTemplate
			-suppress	"nnPSPAlphaTestMask1";
		editorTemplate
			-suppress	"nnPSPAlphaTestMask2";

		// nnPSPDepthTestMask
		editorTemplate
			-callCustom "nnPSPDepthTestMaskNew"
						"nnPSPDepthTestMaskReplace"
						"nnPSPDepthTestMask1"
						"nnPSPDepthTestMask2";
		editorTemplate
			-suppress	"nnPSPDepthTestMask1";
		editorTemplate
			-suppress	"nnPSPDepthTestMask2";

		//------------------------------------------------------------------//
		//																	//
		//	PSP Texture Attribute											//
		//																	//
		//------------------------------------------------------------------//
		editorTemplate
			-callCustom "nnPSPTextureAttributeFrameLayoutNew"
						"nnPSPTextureAttributeFrameLayoutReplace"
						"nnPSPTextureAttributeFrameLayout";
		editorTemplate
			-callCustom "nnPSPTextureAttributeColumnLayoutNew"
						"nnPSPTextureAttributeColumnLayoutReplace"
						"nnPSPTextureAttributeColumnLayout";
	/***********
		//	PSP LayerSelect
		editorTemplate
			-callCustom "nnPSPLayerSelectNew"
						"nnPSPLayerSelectReplace"
						"nnPSPLayerSelect";
		editorTemplate
			-suppress	"nnPSPLayerSelect";
	*************/

		// nnPSPBlendMode
		editorTemplate
			-callCustom "nnPSPBlendModeNew"
						"nnPSPBlendModeReplace"
						"nnPSPBlendMode1"
						"nnPSPBlendMode2";
		editorTemplate
			-suppress	"nnPSPBlendMode1";
		editorTemplate
			-suppress	"nnPSPBlendMode2";

		// nnPSPTexEnvColor
		editorTemplate
			-callCustom "nnPSPTexEnvColorNew"
						"nnPSPTexEnvColorReplace"
						"nnPSPTexEnvColor1"
						"nnPSPTexEnvColor2";
		editorTemplate
			-suppress	"nnPSPTexEnvColor1";
		editorTemplate
			-suppress	"nnPSPTexEnvColor2";

		// nnPSPEnviromentMap
		editorTemplate
			-callCustom "nnPSPEnviromentMapNew"
						"nnPSPEnviromentMapReplace"
						"nnPSPEnviromentMap1"
						"nnPSPEnviromentMap2";
		editorTemplate
			-suppress	"nnPSPEnviromentMap1";
		editorTemplate
			-suppress	"nnPSPEnviromentMap2";

		// nnPSPSeparateSpecular
		editorTemplate
			-callCustom "nnPSPSeparateSpecularNew"
						"nnPSPSeparateSpecularReplace"
						"nnPSPSeparateSpecular1"
						"nnPSPSeparateSpecular2";
		editorTemplate
			-suppress	"nnPSPSeparateSpecular1";
		editorTemplate
			-suppress	"nnPSPSeparateSpecular2";

		// nnPSPColorDouble
		editorTemplate
			-callCustom "nnPSPColorDoubleNew"
						"nnPSPColorDoubleReplace"
						"nnPSPColorDouble1"
						"nnPSPColorDouble2";
		editorTemplate
			-suppress	"nnPSPColorDouble1";
		editorTemplate
			-suppress	"nnPSPColorDouble2";

		// nnPSPColorComponent
		editorTemplate
			-callCustom "nnPSPColorComponentNew"
						"nnPSPColorComponentReplace"
						"nnPSPColorComponent1"
						"nnPSPColorComponent2";
		editorTemplate
			-suppress	"nnPSPColorComponent1";
		editorTemplate
			-suppress	"nnPSPColorComponent2";

		// nnPSPWrapTypeU
		editorTemplate
			-callCustom "nnPSPWrapTypeUNew"
						"nnPSPWrapTypeUReplace"
						"nnPSPWrapTypeU1"
						"nnPSPWrapTypeU2";
		editorTemplate
			-suppress	"nnPSPWrapTypeU1";
		editorTemplate
			-suppress	"nnPSPWrapTypeU2";

		// nnPSPWrapTypeV
		editorTemplate
			-callCustom "nnPSPWrapTypeVNew"
						"nnPSPWrapTypeVReplace"
						"nnPSPWrapTypeV1"
						"nnPSPWrapTypeV2";
		editorTemplate
			-suppress	"nnPSPWrapTypeV1";
		editorTemplate
			-suppress	"nnPSPWrapTypeV2";

		// nnPSPLODType
		editorTemplate
			-callCustom "nnPSPLODTypeNew"
						"nnPSPLODTypeReplace"
						"nnPSPLODType1"
						"nnPSPLODType2";
		editorTemplate
			-suppress	"nnPSPLODType1";
		editorTemplate
			-suppress	"nnPSPLODType2";

		// nnPSPLODOffset
		editorTemplate
			-callCustom "nnPSPLODOffsetNew"
						"nnPSPLODOffsetReplace"
						"nnPSPLODOffset1"
						"nnPSPLODOffset2";
		editorTemplate
			-suppress	"nnPSPLODOffset1";
		editorTemplate
			-suppress	"nnPSPLODOffset2";

		// nnPSPLODSlope
		editorTemplate
			-callCustom "nnPSPLODSlopeNew"
						"nnPSPLODSlopeReplace"
						"nnPSPLODSlope1"
						"nnPSPLODSlope2";
		editorTemplate
			-suppress	"nnPSPLODSlope1";
		editorTemplate
			-suppress	"nnPSPLODSlope2";

		// nnPSPLODMaxLevel
		editorTemplate
			-callCustom "nnPSPLODMaxLevelNew"
						"nnPSPLODMaxLevelReplace"
						"nnPSPLODMaxLevel1"
						"nnPSPLODMaxLevel2";
		editorTemplate
			-suppress	"nnPSPLODMaxLevel1";
		editorTemplate
			-suppress	"nnPSPLODMaxLevel2";
	}

}
