【Maya】ShaderFXで矢印シェーダーを作る
こんにちは、シェーダー勉強中のしおむすびです。
今回は以下の記事を参考にさせていただき、MayaのShaderFXを使って同じものを作っていこうと思います。
なかなかShaderFXの日本語記事が見つからなかったりするので、もしこれからShaderFXを学ぶ方の参考になれば幸いです。
zenn.dev
実際に完成した様子はこちらです。
MayaのShaderFXで矢印シェーダーをつくりました #Maya #ShaderFX pic.twitter.com/4P40WirTKe
— しおむすび (@shiomusubi290) 2021年12月20日
では、解説していきます。
手順1 : X - Y
ここは、参考記事の手順では split
というノードを使っていますが、ShaderFXには同じ名前のノードがないため、代わりに VectorComponent
ノードを使っています。VectorComponent
ノードは、色かベクトルの各チャンネルや値を取得することができるノードです。
あとは Subtract
ノードに X と Y をつなげれば完了です。
手順2 : 上下対称にする
ここは参考記事通りに進めます。最初の Subtract
のところで 0.5 を引いているものの境目が真ん中ではないように見えますが、特に問題ないのでこのまま進めます。
手順3 : 二値化
ここも参考記事通りに進めます。
Fractional
ノードと Step
ノードでなぜこのような見た目になるのかというと、
Fractional
ノードは小数部分(x - floor(x))を返すノードなので、「X-Y = 0」の箇所のみ黒くなる- X-Y < 0 の箇所は、floor関数が「その数よりも小さい最も近い数」を返すので、結果的に正の値になり白く描画されます。(例えば x=-2.2なら、-2.2 - floor(-2.2) = -2.2 - (-3) = 0.8)
- https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/floor.xhtml
Step
ノードは 「edge(上につなげた値) > x(下につなげた値) ? 0.0 : 1.0」 を返すので、Fractional
ノードでの結果が0.5よりも大きいところは黒、それ以外は白で描画される
というのが理由です。
手順4 : 着色
参考記事ではLerpを使っていますが、ShaderFXにはLerpノードは存在しません。
代わりのノードとして Interpolate Smooth
ノードがありますが、試してみたところうまくいかなかったので、今回は単純にAdd
ノードで対応しました。
(白ではないところに色を付けたいだけなので、基本的に加算すれば色が付きます。(白の箇所は1なので、これ以上加算されても白以外にはならない))
手順5 : 矢印を動かす
こちらは参考記事通りにTime
ノードをAdd
ノードで繋げます。
色を出力する
最後に、色をPixelColorとして出力するために、 VectorConstruct
を使って float4 に変換します。
以下のスクショに Baseline
というノードがありますが、これは独自に作っているグループノードで、Hardware Shaderへの接続部分をまとめています。
これに関しての解説はまた別記事を書こうと思います。
(中身も別途スクショで貼っておきます)