« C4D CamMapClibの正式IDを取得しました… | トップページ | C4D ChannelShader…04 最小限とは… »

C4D ChannelShader…03

いつもの様に、無謀で… すみません…

Output()を少し…

前回のコードは…

/*
ChannelShaderPlugin
testChannelPlugin
*/


var pluginID = 1000007;

//Class ===========================================================================
class
test
{
  public:
    var test;
}


//testChannelPlugin ===============================================================
class testChannelPlugin : ChannelPlugin
{
  public:
  testChannelPlugin();

  GetName();
  GetID();

  GetInfo(settings);

  InitSettings(settings);
  InitRender(settings);

  Message(settings , message);
  EditData(settings);

  Output(settings , render , p , n , d , t , texflag , vd);
};

// ローカル変数等を初期化
testChannelPlugin::testChannelPlugin(){super();}

// シェーダーの名前を戻す。
testChannelPlugin::GetName(){return "testCHShader";}

// http://www.plugincafe.comから取得した、このプラグインの為のplugin idを戻す
//テストID:1000001-1000010

testChannelPlugin::GetID(){return pluginID;}

// CHANNEL_DIRECTBUMPとCHANNEL_RAYTRACINGのコンビネーションを戻す
testChannelPlugin::GetInfo(settings){return;}

// シェーダーセッティングを初期化
testChannelPlugin::InitSettings(settings){
  return TRUE;
}

// rdとしてOutput()機能に渡される何かを戻す
testChannelPlugin::InitRender(settings){
  var rd = new(test);
  return rd;
}

//ハンドルC4Dメッセージ
testChannelPlugin::Message(type , data){return;}

// ユーザがシェーダーをダブルクリックする時に呼ばれる
// ダイアログなどを表示する

testChannelPlugin::EditData(settings){return;}

//指定されたポイントで色を戻す
testChannelPlugin::Output(settings , rd , p , n , d , t , texflag , vd){
  return vector(1.0 , 0.0 , 0.0);//赤を返す
}



//main ============================================================================
main()
{
  //C4Dへシャーダーの登録
  Register(testChannelPlugin);
}

Output()で解りやすいのは…
p:ポイント
n:法線
d:MIP/SATマッピングの為のスポットサイズ
t:時間

上3個はベクトル
時間:tは実数… BaseTimeではないんだね… 実数だから秒なのだろうか…

ポイント:pは、テクスチャタグの投影法の… と言うことだったけど…
3D座標ではないのだろうか… UV系座標の事だろうか?
UV系ならば0.0~1.0の範囲だよね…

では、このポイント:pをカラーとして返してみると…

//指定されたポイントで色を戻す
testChannelPlugin::Output(settings , rd , p , n , d , t , texflag , vd){
  return p;
}

Channelshader_06

(注:前回の続きのため…)マテリアルのプレビューが赤のままだ…
イベントが発生しないからだろうか…?

テクスチャをクリアして再指定すると問題なくプレビューも反映されました。

オブジェクトをレンダリングすると…

Channelshader_07

この色合いは…
ポイント:pは、3D座標ではなく、UV系だね…

ここで、前々回のSDKを訳したOutput()の部分…

texflagは以下のフラグの1つのコンビネーションであるかもしれない:
TEX_TILE : テクスチャーはタイルを貼られて、シェーダーはタイリングを計算することができる
TEX_MIRROR: テクスチャーはシームレスに映されていて、TEX_TILEが設定されるならば権利をもっているだけである。
TEX_ALPHA : シェーダーのαチャネルは計算されている事とする。
TEX_BUMP : バンプチャネルは計算されている。CHANNEL_DIRECTBUMPが設定されたならば、出力の前にバンプベクトルを戻さなければならない。

これは、テクスチャタグの下にある部分…

Channelshader_08

この部分の事だね…

自分で処理しないといけないのかな…
と言う事で、XY共にタイル数を10で、下のフラグは全てOFFでレンダリング…

Channelshader_09

タイリングしていないので、問題は無いですね…
では、タイリングをONにしてレンダリング…

Channelshader_10

タイリングがONなのにタイリングされない。
やはり自分でタイリングしなければ、ならないのか…
そうか、ポイントpのxyは1.0以上の数値になっているかだね…
でも、よく見るとテクスチャが、ずれているような…

シームレスをONにしましたが、上と変化なし…

他のテクスチャに加算すると、いなくなりました…

Channelshader_11

バンプにUVを使うは変化なし…

なるほど、Output()で渡されるtexflagをTEX_TILE / TEX_MIRROR / TEX_ALPHA / TEX_BUMPでチェックして処理するんだね…

Output()の中ではOSコールが許されないとなるとprintln()もできないんだね…きっと…

d:MIP/SATマッピングのためのスポットサイズ
と言う事は、エイリアシングが起こらないように、自分で処理するんだね…

なんだか、大変だね…

t:時間は、Noiseクラスと併用すると、アニメーションでウネウネ変化するテクスチャが作れるんだろうね…

n:法線は、どう言う具合に使うんだろう…

さて、ここでSDKを見てみると…

|

« C4D CamMapClibの正式IDを取得しました… | トップページ | C4D ChannelShader…04 最小限とは… »