2009年12月 のアーカイブ

配列プラグのサイズ確保と値設定

2009年12月27日 日曜日

カスタムノードに配列アトリビュートを設定すると、
ついやってしまい勝ちなミスが配列外の参照です。
配列アトリビュートが多数あると、コネクトが正確に行われていない状態で
AEパネルを開くとMayaごと強制終了してしまいます。
その回避さくとして、あらかじめ配列プラグのサイズと値の初期設定を行っておきます。

MArrayDataBuilderを使ったコード例

//ArrayPlug
MArrayDataHandle rotHnd = data.inputArrayValue( rotate, &returnStatus );
MArrayDataHandle flagHnd = data.inputArrayValue( flag, &returnStatus );

if( returnStatus != MS::kSuccess )
	MGlobal::displayError( "Node cannot get value\n" );
else
{
	//PlugからNodeObject取得
	MObject myNodeObj = plug.node( &returnStatus );

	//NodeObjectからDepNodeファンクション取得
	MFnDependencyNode depFn( myNodeObj );

	//rotateプラグの要素数取得
	const unsigned int nElems = rotHnd.elementCount();

	for( unsigned int i=0; i<nElems; i++ ){

		returnStatus = rotHnd.jumpToElement( i );
		if( returnStatus != MS::kSuccess )
			MGlobal::displayError( "Node cannot get value\n" );

		returnStatus = flagHnd.jumpToElement( i );
		if( returnStatus != MS::kSuccess ) {
			//flagプラグにコネクトがなくプラグが確保されていない場合
			//ここで要素数を確保する
			MObject flagAttr = depFn.attribute( "flag" );
			MArrayDataBuilder builder( flagAttr, nElems );
			MDataHandle flagHandle = builder.addElement( i );
			flagHandle.set( (int)0 );
			flagHnd.set(builder);

			flagHnd.jumpToElement( i );
		}

		・
		・
		・
	}
}

この他にももっとスマートな方法はあるかと思いますが、とりあえずのメモ替わりに。
配列プラグの要素確保にはMArrayDataBuilderを使うのがミソのようです。
ハンドルに値をセットするには明示的にキャストしないと入りません。
配列プラグを安定して使えるようにするには結構手間がかかりますねぇ。

iray® Interactive Photorealistic Rendering Technology

2009年12月25日 金曜日

iray® Interactive Photorealistic Rendering Technology

GPUを使った高速GIレンダラーのようです。
インターラクティブなレンダラーが最近の流行ですねぇ。

Pixelux announces autocage for DMM plugin

2009年12月10日 木曜日

Pixelux announces autocage for DMM plugin

材質物理学を用いて破壊をシミュレートするプラグイン。

Kray 2.0 released

2009年12月2日 水曜日

Kray 2.0 released

Lightwave3D用 GIレンダラー Kray2.0リリース