タグ別アーカイブ: Pixel Processor

画像から刺繍のようなテクスチャーをつくる

環境:Substance Designer 2018

思い付きで画像を刺繍模様っぽいものに変換してみました。今回もPixel Processorを使います。

 

プログラムで数字を丸める場合、たとえば10を掛けてから四捨五入して10で割るということをすると思います。これを座標に対して行うと10段階のモザイクのような画像になります(Pixel ProcessorにRoundがなかったのでFloorを使いました)。座標は0~1の範囲で、たとえば0.12や0.18は0.1となり、同じ座標の色を参照することになるので10段階に分かれるわけです。

 

これを応用してもう少し複雑なノードを組みました。

 

x軸の奇数列の場合だけ上にずらすようにして交互に並ぶようにしました。今度は10段階ではなく、得たいピクセルの解像度(128×64ピクセル)で計算します。

 

結果はこのようになります。縦方向に長くするために、128×64で四捨五入をしています。

 

同じ間隔で凹凸感を出したかったのでTile Generator等を使って上手く重なるようにノーマルテクスチャーを作成します。

 

もう少し工夫してそれっぽく整えれば何かに使えそうかな?

Flowmap #4 ノーマルマップを利用してフローマップを生成する

環境:Substance Designer 5

法線マップからフローマップを作ってみました。

天気予報の高気圧と低気圧がつくる風のベクターフィールドの映像を見ていたらふと思いつきました。法線マップのX成分とY成分のベクトルを90度曲げたら等高線に沿って流れるベクトルになるので面白い効果が得られそうです。さっそく取り組んでみました。

今回もPixel Processorを使います。法線テクスチャーをつなげばフローマップが生成される仕組みです。

Pixel Processorの内部です。法線マップからXとY成分のベクトルを取得して90度加算し、ベクトルの長さを掛けてからフローマップにします。

(追記:90°回転させるだけなのでベクトルのXとYを入れ替えてどちらかに-1を掛けるだけでもいいですね。またSubstance Designer 2018ではNormalizeノードがありますね。)

今度はフローマップを使ってテクスチャーを歪める処理をつくります。これもPixel Processorを使います。

Pixel Processorの内部です。フローマップからベクトルを取り出し、加工する画像のUV座標に加算します。

プロセスを見ていきます。パーリンノイズをハイトマップとして法線マップを作成し、Pixel Processorでフローマップに変換します。

雲模様にSlope Blurを掛けたベース画像と参照用のフローマップをPixel Processorにつないで歪んだ画像を生成してみました。ハイトマップの等高線方向に伸びたような効果が出ていますよね。

この模様からカラーテクスチャとノーマルテクスチャを生成して、ペンキが混ざったようなテクスチャーをつくってみました。

このテクスチャーをフローマップで動かせばペンキが混ざり合っているようなアニメーションになります。

Flow Map #3 ズームするフローマップ

環境:Substance Designer 5

中心にズームするフローマップに取り組んでみました。今回もSubstance DesignerのPixel Processorを使います。

中心からの角度を取ってベクトルにしています。どのピクセルも等速で中心へ向かって流れるようになります。ベクトルに掛ける符号を反転させれば中心から外側へ噴き出す流れになります。

このようなテクスチャーになりました。

Unreal Engineで確認したところ。中心に向かって吸い込まれています。

 

距離でベクトルの強さを変える

外側の流れが速く中心ほどゆっくりの動きにしてみたかったのでノードを組み直しました。該当ピクセルと中心の差を取って対角線の長さ(半径が0.5なので対角線は0.5×√2)でスケールした値をベクトルの長さにしました。

このようなテクスチャーに。

Unreal Engineで確認したところいい感じの流れになりました。

Pixel Processorでライティング

どうしても陰影をつけたいテクスチャーがあったのでPixel Processorでライティングをやってみました。シェーダーの勉強をすると最初に学ぶ懐かしのライティング。内積ってこんな使い方があるんだって思いましたよね。

ディレクショナルライトをノードで組んでみました。ちょっと驚いたのがベクトルの正規化ノードがないこと(見落としているだけかなー・・)。しょうがないので正規化する計算をしました。しかしノードって四則演算がものすごく面倒くさいですね・・。

(追記:Substance Designer 2018にはNormalizeノードが入っていました)

このような法線テクスチャーの入力に対して

このような結果になります。

せっかくなんでポイントライトもやってみました。

いい感じの結果です。でもタイリングテクスチャーではなくなってしまいますね・・。

Flow Map #2 回転するフローマップ

環境:Substance Designer 5

Substance DesignerのPixel Processorで回転するフローマップを作ってみることにしました。

座標を中心にオフセットし、中心からの角度をアークタンジェントで求めます。風車のように回したいので角度を加算して90°方向にベクトルの向きを変えます。角速度は半径に比例するので、半径の長さを色に掛けることで、同一角度上のピクセルの動きが一致します。

最後にベクトルを色に変換して、フローマップが出来ました。フローマップはノーマルマップと違って一見何を意味しているのかわかりにくいですね。

Unreal Engineで確認したところ綺麗に回ってくれました。

 

歪ませてみる

等速で回るのもいいけど、どうせなら緩急つけて回してみたい。

このようなノードを間に挟んで渦巻のフローマップも作ってみました。

y=x*(1-x)*4

半径の真ん中あたりで一番速くなるようなカーブをかけてます。

結果このようなテクスチャーが出来ました。これで正しいのかなと思いながらUnreal Engineで動かしてみると・・

いい感じに渦巻いています。

プログラマブルな画像処理ツールとしてSubstance Designerは便利ですね。

 

半径(範囲)

内包する円の直径で計算していましたが、対角線を直径としてスケーリングするならこのようなノードになります。こうするとテクスチャー全体で回るようになります。

法線テクスチャの回転

Substance DesignerにPixel Processorというピクセルシェーダのような処理が出来る機能を知ったので習作で法線テクスチャーの回転をやってみました。ここのところ座標の回転をやっているので今回もその流れでいこうかと思います。

法線テクスチャーはベクトルを画像にしたデータで、XYZの座標がそのままRGBに格納されています。ベクトルの値は-1~1までの範囲ですが、画像にはマイナスがないので0~1(または0~255)の値にスケーリングされています。画像を回転させるにはベクトルの方向を維持しないとなりません。

法線テクスチャーにPixel Processorノードをつなぎます。Editボタンでノードの中に入り処理を組んでいきます。

全体のノードはこのような感じ。入力した座標を回転させ、その座標に該当するピクセルを画像データから取得し、そこに回転の計算を掛けて出力する、という流れ。

画像を中心で回転させるためにGet Float2($posに設定)ノードで入力された座標を(-0.5, -0.5)でオフセットして中心が原点に来るように移動し、Rotate Positionノードで回転させた後、(0.5, 0.5)でオフセットして元の座標に戻します。入力の値は0~1の範囲。時計回りに回転させるために入力の回転値に-1を掛けています。

回転の値はベクトルの計算に使うのでTurns to Degreesでオイラー角にスケールし直した後にDegrees To Radianでラジアンに変換させています。ところどころ単位には気を付ける必要あり。

画像のそれぞれの成分を分解。回転に使う要素はXとYなのでSwizzle Float1等を使って取り出し、[0, 1] to [-1, 1]ノードでベクトルの範囲にスケーリングします。

ここでも書いたように、ベクトルを回転させる計算を組みます。

x’ = x*cosθ – y*sinθ
y’ = x*sinθ + y*cosθ

x, y成分と角度(ラジアン)を組み合わせて式をつくり、[-1, 1] to [0, 1]で元の画像の成分にスケーリングしてVector Float2, Vector Float4ノードで統合していきます。最後にfloat4ノードを右クリックしてSet as Output Nodeを設定すれば結果が出力されるようになります。

Substance Designerはまだ使いこなせているレベルではないですが何かと可能性は感じています。