Script Node

最終更新日23 May 2017 05:27

Open Shading Languageというシェーダ言語で自作シェーダを適用させることができます。

Script Nodeを使うには

PropertiesのRenderの

  • DeviceがCPUになっている
  • Open Shading Languageに☑してある

というのが条件です。
こうなってないとScript Nodeを使ったとき真っ黒になってしまいます[1]。

コーディングしやすくするためにレイアウトをscriptに

画面の上のほうに、レイアウトを選べるところがあります。
scriptinh_layout.png
scriptレイアウトにするとエラーメッセージも見れるレイアウトになってやりやすいです。

.oslファイルを保存する場所

どこにでも保存できますが、決まった場所に保存しないとコンパイルエラーになってしまいます。
Windowsの場合

C:\Users\$user\AppData\Roaming\Blender Foundation\Blender\2.78\shadersの下に.oslファイルを保存します。

コンパイル

Text Editorで書く場合Script Node Updateを押します。
compile.png
このバーのメニューの中にもAlt+Pでコンパイルと書いてありますが、
こっちだとpythonコンパイルの方が走ってしまい、エラーじゃないのにエラーと出てしまうのでびっくりしてしまいます。

エラーメッセージを見るためにコンソールを出す

コンソール画面が出てない場合があります、そんな場合は
Window->Toggle System Consoleを押してみます。
showconsole.png
公式にあったサンプルコードを入れてみた結果
shader simple_material(
    color Diffuse_Color = color(0.6, 0.8, 0.6),
    float Noise_Factor = 0.5,
    output closure color BSDF = diffuse(N))
{
    color material_color = Diffuse_Color * mix(1.0, noise(P * 10.0), Noise_Factor);
    BSDF = material_color * diffuse(N);
}
noise.png
まだら模様のスザンヌちゃんになりました。
Nって何?なんで宣言なしに使えんの?
OSLのドキュメント[3]を見るに、OSLを使うと最初から使えるグローバル変数だそうです。
使えるのは
point P 頂点の位置
vector I 視点からPへ来る光源レイの方向。IはincidentのI GeometryNode[4]のIncomingと同じ いわゆるライトベクトル
normal N 点Pにおける法線 GeometryNode[4]のNormalと同じ
normal Ng bump mappingしても変わらない法線
float u,v テクスチャ座標
vector dPdu,dPdv 点Pにおける部分微分
point Ps 光がqueriedされる位置 light attenuation shadersだけで使用されている
float time 現在の時間
float dtime shading sampleによってカバーされる時間の量
vector dPdtime 点Pの動く時間
closure color Ci 入射光

osl


ファイル

サポートサイト Wikidot.com osl