Blenderでは通常ノードベースでシェーダーを構築することができます。
このためユーザーは特にプログラミングの知識を求められず初心者でもフィーリングでシェーダーを構築することができます。
UnityについてもShaderGraphの登場によって同様にノードベースでのシェーダー構築が可能になりましが、プログラマー以外のエンジニアがシェーダーを触れることになったことでアーティストなどの参入や初学者の参入のハードルが低くなりました。
筆者はコードでの構築が好きですが、プロトタイプ開発などで使用することがよくあります。
特に前職時代ある仕事で顧客に見てもらいながらその場で見た目を構築することがあり、こういったライブコーディングにはノードベースのシェーダーは最適です。
と話題がそれてしまいましたが、今回はデフォルトがノードで構築するBlenderのシェーダーをコードで記述していきます。
〇OSLについて
BlenderではOSL(Open Shading Language)がシェーダー言語として使用されています。
OSL
はもともとはソニー イメージワークスがArnold Rendererを動かすためのシェディング言語として開発したのが始まりです。
Arnold RenderはMayaなど同じくAutodesk製品で主に使用されているレンダリングエンジンで、BlenderではArnoldはデフォルトでは使用できませんがArnold自体でレンダリングすることは可能でBtoA
と呼ばれるコミュニティ作成のアドオンを使用することでレンダリングすることができます。
〇注意点
BlenderではOSLのシェーダーはCPU及びOptixレンダリングバックエンドのみで実行されます。
〇Blenderのコードベースのシェーダー
①Blenderでシェーディングウィンドウを開きます。
②追加
コマンドからスクリプト
を追加します
スクリプトノードが作成されます。
スクリプトノードには内部
,外部
のタブがあります。
これはUnityのShaderGraphを触ったことがある場合はイメージがしやすいですがBlender内部にテキストエディタとしてコードを記述するか、外部のディレクトリにスクリプトを記述するかを選択するものになります。
今回は最初に内部
から試していきます。
③スクリプトウィンドウ
で新規のテキストファイルを作成します。
④次のコードを貼り付けます。
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); }
⑤シェーディングタブ
に戻りスクリプトノードから先ほど作成したファイルを選択します。
⑥スクリプトノード
の更新ボタンを選択します。
これによって作成したコードがノードとして使用できるようになります。
⑦出力をBlenderのマテリアル出力に接続しレンダリングを行います。
結果が確認できます。
なおレンダープロパティでOpen Shading Language
をチェックを入れて有効化します。
このパラメータはCPUでのみ表示されGPUを使用している場合は表示されません。
GPUでなぜ使用できないかについては別途調べてみたいです。(気になる)
以上でBlenderでコードベースでシェーダーを書くことができました。
詳しい解説などはまた別途行いますが感覚としてはUnityのShaderGraphに近いものを感じます。
本日は以上です。