信楽焼マテリアルを作成し終えて その3

ちょっと間が空きましたが続きを書いていきます。

今回はまず自然釉から。

自然釉とは焼き物の長石が溶け、これが灰と反応して垂れたような感じになる現象、だそうです。

釉薬と違って焼成段階で自然と発生するもので、垂れ方などは本当に千差万別。

それらすべてをプロシージャルに生成するのは無理そうなので、こちらの商品のように上部だけにかかっているようにしました。

http://soraisha.com/3821.html

まあ、それでもかなり納得いってなくて、正直に言えばないほうが良かったかもしれないな、と思っています。

基本形状は上の方に帯を作成し、ここから自然釉が垂れていく感じを表現します。

いろいろと試してみたのですが、やはり [指向性ワープ] が最もまともでした。

自然釉が垂れている感じを出している部分はこのように作成しています。

sd090.jpg

垂れ部分の形状はハーフベルを使用しています。ガウスなどの円形よりこちらの方が液体が垂れているような感じを出せました。

[FX-Map] では指定個数の垂れをランダムに配置するようにしています。

ランダムと言っても水平方向のみで、垂直方向のランダムによる移動は少しだけ入っている程度です。

これを上部にだけ存在するグラデーションの帯に対して [指向性ワープ] の強度入力に入れています。

歪める方向はもちろん真下方向で、ワープ後に合わせた部分が浮いてしまうので [Blur HQ Grayscale] で馴染ませます。

この結果は以下のようになりますが、これだけだと垂れてるって感じはしません。

sd091.jpg

なので、[ワープ] で歪めます。

歪めた後は [レベル] による調整、[Dirt 6] を使ったノイズを載せて(以前解説した手法)、色を付けたら完成です。

sd092.jpg

[ワープ] の強度入力に指しているノイズは [Perlin Noise Zoom] で、Distanceが3とかなり弱めのノイズです。

その代わり [ワープ] の強度は6.66と少し大きめにしています。

ワープの強さは強度入力に刺すノイズとプロパティの強度のどちらで調整するべきかは必要な効果によるとは思いますが、基本形状のエッジ部分を大きく歪ませたいのであれば、このようにノイズは弱め、強度は強めにしておくと良いのではないかと思います。

とは言っても、この垂れ方はどうも納得いかなくて、もっと良い方法があるならぜひ教えてほしいです。

自然釉のパラメータは [FX-Map] でランダム配置する垂れ部分の数、垂れの長さ、色、ON/OFF、ランダムシードの5つです。

数を7、長さを0.48にするとこんな感じ。

sd093.jpg

これぐらいなら、まあ、自然かな…どうだろう?

次はヒビ割れ部分ですが、こちらは茄子さんがまとめてくださってます。

[亀裂の作り方(基本編)]

信楽焼マテリアルでは亀裂のライン部分の作成を [Cells 3] ノードを使ってまとめてしまっていますが、特にこだわりがなければこれで十分だと思います。

こちらの実装はこのようになっています。

sd094.jpg

[Slope Blur Grayscale] による亀裂の調整は強度小さめにしています。

強度を大きくしてしまうと陶器の亀裂にしては大きくなりすぎてしまったためです。

流石にその大きさの亀裂が入ったら割れるだろ、的なw

この亀裂はベースカラーにも影響をあたえるようにしていますが、亀裂の情報をブレンドアルファとしてベースカラーを少し暗くしているだけです。

というわけで、3回にわたって解説してきた信楽焼マテリアルの要素は全部解説しました。

法線とラフネスの解説をは行っていませんが、こちらはそのまま順番に合成していっただけです。

法線はハイトマップとして合成し、最後に法線に変換しています。

詳しくはSubstance Shareから落としてね!ってことで、手抜き解説…

もっとここはこうした方がいい、とか、こういうテクニックがあるよ!ってのがありましたらコメントでもTwitterでも教えていただけると助かります。

信楽焼マテリアルを作成し終えて その2

というわけで第2回目です。

何回続くかわからないのですが、解説書きながらけっこう修正かけてたりするので時間かかるかも。

前回までで基本色部分を解説してきましたが、今回は装飾として作成した部分の解説を行っていきます。

まずは灰から。

信楽焼には灰かぶりという物があるらしく、当初は普通に黒っぽい灰を軽いノイズとして追加していました。

しかし、見れば見るほど失敗かなと思いました。

こんな感じで灰がくっついてる陶器は見た記憶がありませんし、理屈上はありうるのかもしれませんが世に出ないような気がするなぁ、と。

で、もう少し調べてみると、灰かぶりは焦げの一種で、焦げは釜の中の灰が溜まっている部分に置かれた陶器の下の部分が焦げて灰が付着した状態らしいということがわかりました。写真を見るとかなり黒く煤けるようでしたので、こんな感じに変更してみました。

sd084.jpg

下の部分にかぶるようにするため、上下グラデーションをレベルで調整し、ワープで歪ませました。

これに乗算で [Dirt 5] をブレンドしますが、このノイズはトランスフォームで縮小し、かなり細かいノイズに変更しています。

この状態でレベルをかけたのですが、黒い部分が点在する形になって焦げっぽくなくなってしまいました。

そこで、トランスフォーム直後のレベルでグレースケールを反転させています。

実際の焦げの写真を見ても、焦げてる部分が大部分で少しだけ素地が見えているという感じでしたので、こちらのほうがいいかと思いました。

また、灰かぶりは高さとラフネスにも影響を与えています。

高さについてはうっすら程度で、かなり近づいてライティングを調整すればわかるかも、くらいです。

強くするのはなんか違うような印象がありました。

ラフネスはブレンドでかなり粗くなるようにしています。焦げの強い部分は最大で220になります。

で、結果はこんな感じ。

sd085.jpg

左が Ash Level 0.0で右が1.0です。一応焦げっぽくはなった…かな?

なお、修正に合わせて Ash Height というパラメータも追加しました。その名の通り、灰かぶりの高さですね。

あとは Ash Color も追加しましたが、こちらは変更しないほうがいいと思いました。

次は長石です。

長石は鉱物の一種で、信楽焼では焼成時に溶けて白い斑点のようなものをいくつも作ります。

小さなものから比較的大きなものまであるようですが、今回は少し大きめに作ったつもりです。

ノイズの選定には少し苦労しました。

ある程度の大きな粒でほしいけど、くっつきすぎていてはダメなので、色々調べて選んでいった結果、[Gaussian Spots 1] に決めました。

[Gauss Spots 2] はちょっと細かすぎました。

ノイズを一旦アップスケールし、レベルでスポットの数が減るように調整、これをブレンドアルファとして利用してブレンドしているだけです。

sd086.jpg

これ自体は実に単純ですが、もう少し工夫したくなって少しだけ別の調整を入れています。

長石が溶ける際に部分的にはじけたりすることもあるようです。多分、不純物とかですかね?

弾けた部分は黒くなって穴が空いたようになるようです。これも幾つかの写真で確認できました。

ですので、これを実装してみたくなったので実装しました。

sd087.jpg

穴が空く場所を選定するため、長石のブレンドアルファを軽くブラーしてからレベルで調整しました。

これだけだとほぼ真ん中に必ず穴が空いてしまうので、それを防ぐためにかなり薄くワープを適用しました。

これを黒色とのブレンドアルファとして使用します。

なお、下にある元の長石と穴の色をブレンドしている部分は高さとラフネスのためのものです。

穴のあり/なしを比較するとこんな感じ。

sd088.jpg

なくても良かったかもなぁ…

最後は火色と抜けです。

焼成中に炎が当たるとその部分はほのかに赤くなるそうです。人肌ぐらいが最も良いらしいのですが、写真で見るものはけっこうな赤で人肌っぽくはないですね。

そして、全体的に火が当たっているのに、一部で火が当たりにくかったりするとその部分が白くなります。これを抜けというのだそうです。

まずは火色の色そのものの作り方ですが、これは Base Target Color パラメータで指定された単一カラーを [HSL] ノードで調整しています。

Base Target Color を赤系統(赤や茶色)にしておけば、デフォルト設定で十分火色っぽくなってくれているはずです。

ただ、赤系統から離れてしまう場合は気をつけましょう。

その場合は [HSL] ノードのパラメータもエクスポーズしているのでそちらで調整しましょう。

火色の形状は [Moisture Noise] をブラーして、レベルで調整して作成しました。

このノイズ選定も色々試してみたのですが、[Moisture Noise] が一番それっぽい結果になったと思います。

火色の部分と抜けの部分は別々にベースカラーにブレンドするようにしました。

最初は [グラデーションマップ] と [Replace Color] で調整しようと思ったのですが、これだと細かな調整が効きづらく、火色が微妙に気に入らないな、という状況下でうまく調整できなかったためです。

やっぱり途中途中で試行錯誤することは多いですし、うまくいかなかった!別の方法を検討しよう!ということも大変多いです。

ただ、ツールが充実しているおかげでイテレーションがけっこう行えるというのが強みですね。

火色の部分はこんな感じの実装です。

sd089.jpg

クリックで拡大

火色の部分にも少しノイズを載せています。

抜けの部分も火色を元にして [HSL] ノードで調整しています。

というわけで今回はここまで。

全部の解説には時間がかかりそうですが、微修正しながらだったりするので致し方なし。

信楽焼マテリアルを作成し終えて その1

Substaceのマテリアルコンテストは12日までです。

今回は習作として信楽焼をイメージしたマテリアルを応募してみました。

https://share.allegorithmic.com/libraries/834

こちらがURLです。

評価は星2と低い状態ですが、これをバネに頑張りたいと思います。

ただ、何が悪いのかとかコメント書いてもらえると助かるよなぁ…

で、今回のブログネタはこのマテリアルを作成する上でやったこと、考えたことなどを書いていこうと思います。

まずは資料集め。もちろん写真資料ですが、同時に信楽焼の特徴なんかを調べました。

Wikipediaも参考にしましたが、一番参考になったのはこちらのサイト。

http://www.mushingama.com/text_honbun.htm

信楽焼の特徴が集められていて、説明もしっかりしていたので大変参考になりました。

次に実作業の話。

最初に行ったのはベースラインの作成でした。

今回の信楽焼マテリアルはろくろを回して作成するようなオブジェクト用と考えていたので、作成の際に水平方向に凹凸が出るはずだよね、と考えた結果です。

ただ、これはちょっと失敗。

薄いとほとんど効果が見えないため、結構目立つように線を入れてしまったのですが、これだとろくろを回した時に出来た凹凸という印象がまったくないです。

むしろ意図的につけた模様のようにも見えますが、どちらにしろ違う、そうじゃないって感じです。

なので応募したものからちょっとだけアップデート。

sd073.jpg

[Anisotropic Noise] は一定方向に線を走らせたい場合に大変有効です。

今回はこれを縦方向にたわませ、たわみ方の違う2つのノイズを合成、その後にブラーを掛けてレベルで調整って感じです。

前のバージョンではブラーは弱めにかけてレベルの調整を行いませんでした。

結果の違いはこんな感じ。

sd074.jpg

左がアップデート前、右がアップデート後です。

左は明らかに何らかの模様になってますが、右は制作の際についた凹凸っぽく見えなくもないかな、と。

アップデート後はライトの加減によってしか凹凸がわかりにくいのも特徴ですね。

物によってはアップデート前のほうがいいかもしれませんね。

次に表面のノイズ。こちらはかなり薄めにかけてます。

細かな凹凸が欲しかったので、かなり細かい [Dirt 6] ノイズをアップスケールして更に細かくし、その上レベルで細かさを強調しました。

ですが、最終的にはブレンド時点でかなり薄くしている(不透明度0.06)のでわかりにくいです。

sd075.jpg

ノードのサムネイルではほとんど効果がわかりませんが、実際のマテリアルを見ればないよりあったほうが自然に見えます。

なお、不透明度を大きくするとかなり気持ち悪くなるので注意。

sd076.jpg

左から不透明度0.06、0.0、0.5です。

次にベースカラーですが、こちらも地味に苦労した点です。ノードはこんな感じ。

sd077.jpg

単純ではありますがこれにたどり着くまでにいろいろ試行錯誤したんです。

まず、やっぱりろくろで回しているというところから土色の出方を横方向に引き延ばそうと考えました。

そこでやっぱり [Anisotropic Noise] の出番。こいつをブラーで少し強め(強度10)でぼかしました。

BlurHQを使っていない理由ですが、土の荒っぽさを出したいがために少し粗めのブラーを使っています。

しかしそれでもいい感じにならなかったので、Surface Noiseの項目で使用していたノイズを加算しています。

これで土の模様に粗さが出ていい感じになったと思います。もちろん、ノイズの加算はかなり薄め(不透明度0.03)です。

sd078.jpg

わかりにくいですが、上から0.03、0.0、0.2です。

ノイズによる模様の変化はペイントの剥がれ方なんかにもいい味出しそうなので、自分なりの使い方を試してみるといいでしょう。

ここまでで出来たグレースケール画像をグラデーションマップを使って色を付けます。

前にも解説したとおり、写真素材をなぞってグラデーションマップを作成しました。

で、その後についている [Replace Color] ノードは全体的な色を変化させるのに便利なノードです。

このノードはグラデーションのついたカラーを、支配的な色を元にして全体の色を変化させていくノードです。

2つの色の間で直線補間すればいいだけの場合は [ブレンド] ノードを使えばそれでおしまいなのですが、グラデーションマップで任意の色に細かく変更している場合はこれが非常に難しいわけでして。

そんな時に使えるのがこのノードです。

例えば、以下のようにノイズにグラデーションマップを適用した場合を考えましょう。

sd079.jpg 

それなりに細かいグラデーションが入っていますので、これの色を全体的に変換するのはちょっと難しいと思えます。

しかし、[Replace Color] ノードを使えばバッチリ可能です。

sd080.jpg

元のグラデーションマップにおいて重要な色は青なので、青をSource Colorとしてピックアップしておきます。

ちなみに、[Pick] ボタンを押すとスポイト状態になって色の取得が可能になるので、2Dビューから取得しましょう。

Target ColorはSource Colorと同じであれば何も変化がありません。

Target Colorをエクスポーズしたい場合、デフォルト値としてはSource Colorと同じであるほうが良いでしょう。

Source Colorのカラーボックスを [Pick] してやればいいので簡単です。

信楽焼マテリアルも同様に色の変化を設定できるようにしていますが、もちろん焼き物から遠く離れた色を選択すると色々あれな結果になるので注意してください。

以下は色の変更例です。

sd081.jpg

流石に青はないな…

実は、当初はここまででベースカラーを作っていたのですが、他の要素を入れているうちにやっぱりどうにも気に入らなくなりました。

実際の写真と比べてみても綺麗すぎるというか、土の粗さが見えない感じがしてどうにももやもやしてたわけです。

そこで色々ノイズを試したりしてみたのですが、これが一番いいな!と思ったのが現在入っているものです。

結論としてはかなり細かいノイズを減算する、です。

粗いノイズだとほんとにただのノイズが混じってるだけという感じなんですが、細かいノイズだとディザリングの要領で色が少し暗めに、それでいて表面の粗さを表現できます。

ここで使用しているのは [Dirt 4] ノードですが、これでもまだ粗いと感じたのでやっぱりアップスケールしています。

アップスケールしている場合としていない場合ではこれだけ違います。

sd082.jpg 

上がアップスケールあり、下がなしです。

なしの方は表面に何かが付着しているような印象で、土の粗さの表現としては不的確かな、と。

これを入れることでツルッとしすぎていると感じたベースカラーがいい感じで落ち着いたと思いました。

一応、[Dirt Level] というパラメータで変化させることが出来るようにはなっていますが、いじる必要はあまり感じません。

いじってみるとこんな感じ。

sd083.jpg 

左が1.0、右が0.0です。

右はちょっとツルッとしすぎていて、土から作られたという印象が薄くなってしまいます。

信楽焼はちょっと粗めの土を使うらしいので、粘土のような質感になってもらうのも困りますからね。

右も、元が粘土であるならありかもしれませんが…

というわけで、その1の解説はここまで。

もっとこうした方がいい、とか、もっと簡単な方法がある、といった情報がありましたらTwitterなりコメントなりでツッコミ入れていただけるとありがたいです。

Speckleでお手軽クオリティアップ

今回はお手軽にクオリティアップを行うため、Speckle を加える方法を書いていきます。

ただし、今回紹介する方法は1つの手法でしかなく、別の方法でも同じ効果が得られるのであれば構いません。

むしろもっといい方法があるなら教えてほしいです。

Speckleというのは英語で小さな斑点、ぽつぽつなどの意味がある言葉です。

多くのチュートリアル動画ではすぺっこー、すぺっこーと言ってるのが聞けるはずです。

ここでいうSpeckleというのは、レンガやタイル、コンクリートなどに点在する小さな穴、凹みです。

ただ、タイルの場合はタイルの模様として入っているぽつぽつもSpeckleと呼びますが、今回は傷っぽい凹みです。

綺麗でシミひとつないタイルというのはそれはそれで綺麗ではありますが、やはり現実味はありません。

リアリティを上げるには汚れや、今回のSpeckleなどを入れてやるべきです。

まあ、Speckleを入れただけではリアリティは上がりませんが、汚れとかを入れたけどちょっと物足りないな、という場合にはSpeckleを入れてみるとクオリティが上がる印象です。

では、まずはその綺麗なタイルを作りましょう。

とりあえずベースカラーと法線はこんな感じで設定します。

sd065.jpg

ラフネスは適当に単色でも構いませんが、タイルと目地を別々にしても構いません。

ベースカラーに入力しているレベルノードは目地とタイルをきちんと分けるための処置です。目地が細くなるように調整しています。

これを行わないとタイル部分が黒くなっていまいちタイルっぽさが失われます。

法線の強度は 10 を指定していて、少し強めに出るようにしました。

この方がタイルっぽいから、というのが理由です。

このノードによって作成されるテクスチャはこんな感じです。

sd066.jpg

これはこれで綺麗ですが、近未来の超科学的な研究室みたいな無機質な感じを受けますね。

では、これにSpeckleを施していきましょう。

まずはノイズの選定です。

小さな斑点を付ける必要があるため、Perlinノイズのような滑らかなノイズや何らかの形状を示すようなノイズは向いていません。

この手の処理に向いているのはほんとにノイズっぽいノイズで、[Dirt] や [BnW Spots] などのノイズを用いることが自分は多いです。

大きめの穴などであれば [Gaussian Spots] も使えるでしょう。

今回は [Dirt 3] を使ってこんな感じにしてみました。

sd067.jpg

ノイズはそのまま使うのではなく、レベルノードを用いて白点を少なくします。

さて、Speckleは小さな穴として使用しますので、このまま法線化するのはよろしくありません。白点が凸形状として捕らえられてしまうからです。

なので、白黒を反転させてから法線にします。

sd068.jpg

法線の強度はお好みで。今回はデフォルトの1.0にしました。

ここで生成した法線を元の法線に結合させます。これには [Normal Combine] ノードを使用します。

sd069.jpg

このようにして法線の結合は完了です。

さて、今回はタイルの法線とSpeckleの法線をどちらも法線変換してから結合しています。

もちろん、高さ情報の段階で結合(タイルの高さからSpeckleの高さを減算)し、それを法線に変換することも別に悪いことではありません。

ここでそのような手法を採っていない理由としては、タイルの法線とSpeckleの法線の強度を一緒にまとめてしまうのがあまりよろしくないと感じたからです。

最終的には好みの問題ではあるのですが、タイルの法線を調整していたらSpeckleの法線が強くなりすぎてしまったので高さ結合の段階でSpeckleによる穴を浅くする、というのはあまり健全ではないような気がしました。

何度も言うようですが、最終的には好みの問題なので、実際に使用する人の意見を取り入れつつ決めると良いかと思います。

小さな穴は法線で表現が可能なのでこれでおしまいでもいいのですが、せっかくだからもうちょっと調整しましょう。

穴が開いている、ということは、その部分のベースカラーやラフネスに変化が加えられている可能性があるということです。

まずはベースカラーですが、AOというわけではないですが、少し暗くしておきます。

sd070.jpg

上のレベルノードは [Dirt 3] から接続されたノードです。2個上の画像にも載っているレベルノードと同じです。

ブレンドノードはモードを減算にしておき、不透明度はお好みで。

次にラフネスですが、目地は白(粗い状態)とし、タイルは少し滑らかに、Speckleはタイルより粗くする感じにします。

sd071.jpg

[Invert Grayscale] ノードの入力はタイル形状にレベルを掛けたもので、ベースカラーの生成に利用しているものです。

目地は白でいいのでタイル部分にそれなりのグレーを入れるために単一カラーを加算しているのが真ん中のブレンドノードです。

最後のブレンドノードでSpeckleを加算しています。これでSpeckle部分が粗くなります。

元からどの程度粗くなるかは不透明度で調整しましょう。

で、最終結果はこんな感じ。

sd072.jpg

画像の左側がSpeckleなし、右側がありです。

どちらがよりリアリティがあるか、と言われると割と難しいところな感じですね。

理由としてはSpeckle以外にこれといった粗がないので、Speckleが浮いてしまってるようにも見えるためではないかと思います。

普通、このような傷のあるタイルというのは経年劣化しているものがほとんどなので、それなりに劣化してるように見えないとよろしくないですね。

今回は小さな傷ということでちょっと凹ませてちょっと色を変えたくらいですが、もっと大きな傷になった場合はそれぞれのマテリアルに合わせた壊れ方をしてやる必要がある点に注意してください。

これを怠るとやはりリアリティが失われてしまうでしょう。

というわけでお手軽テクニックの1つを紹介したわけですが、お手軽だけにそこまで大きなクオリティアップは図れません。

しかし、この手のテクニックを色々と合わせていくことでマテリアルのクオリティを高くすることが出来ます。

小さなテクニックを1つ1つ自分のライブラリに加えていくことで、高クオリティなものを素早く作ることができるようになるのがプロシージャルの利点ではないかと考えています。

ですので、こういうテクニックがあるよ!というネタを持っている人は色々公開してくれると大変ありがたいですね。

FX-Mapの使い方

今回はSubstance Designerの謎ノード、FX-Mapについて得られた知見を書いていこうと思います。

いろいろと調べてみたのですが、まだまだわからないところがあるノードでもあります。

言葉で説明するより実際に使ってみましょう。

まずはパレットの中からFX-Mapノードを選択し、追加してみましょう。

sd046.jpg 

配置しただけでは何も表示されません。

入力ピンは [バックグラウンド] と [Input Image 0] です。

とりあえず、[バックグラウンド] には均一カラー(グレースケール)の黒を、[Input Image 0] にはShapeノードでディスクを入れてみましょう。

sd047.jpg

背景が黒くなっただけでやっぱり何も表示されません。

入力ピンは [Input Image 1] が新たに追加されました。

残念ながら、この増えたピンに何かを入力しても事態は改善されません。

プロパティペインを見てもそれっぽい何かは存在していません。

ではどうするか?

FX-Mapノードを右クリックすると、Ctrl+Eで [FX-Mapを編集] というコマンドが存在するのがわかります。

sd048.jpg

そうです。このノードは内部を編集する必要があるのです。

クリックすると以下のようにFX-Map内部のグラフを編集できるようになります。

sd049.jpg

最初にあるのはこのクワドラントというノードのみです。

とりあえず、スペースキーを押してどんなノードが配置可能か見てみましょう。

sd050.jpg

コメント関連はどこにでもあるので無視するとして、配置可能なノードは反復、クワドラント、切り替えの3つしかありません。

この3つのノードはどんなものかというと、それぞれ for, switch, if という、プログラミング言語ではお馴染みのフロー制御命令です。

つまり、FX-Mapというノードは、これらのフロー制御を用いて入力されたイメージなどを加工するノードなのです。

言葉で説明してもわかりにくいので、FX-Mapをイメージした簡単なフローチャートを書いてみました。

sd059.jpg 

FX-Map開始の次は100回ループです。ループ内と書かれた矢印以降の処理を100回行います。

その次にまた8回ループです。

800回ループすればいいだろって?まあ、そうなんですけどイメージのためです。

次は条件分岐で、チャートには書かれていませんがランダムに設定された位置が右半分か左半分かで処理を分けます。

右半分なら円を描画し、左半分なら四角を描画します。

このようなフローの入れ子構造で処理する機能はSDの通常のノードグラフには存在していません。

処理としてできることは簡単なものに限られますが、FX-Mapはこのような入れ子構造を実現することが出来る数少ないノードなのです。

ちなみに、このフローチャートをFX-Mapで再現するとこうなります。

sd060.jpg 

見ての通り、FX-Mapのノードグラフは上から下に進んでいきます。

これはフローチャートを意識しているようにも見えますね。

では各ノードを見ていきましょう。

前述のフローチャートの実際の処理部分は円を描画、四角を描画の部分です。

これに当たるのは [クワドラント] というノードになります。

このノードは2種類の意味を持っていて、個人的にはこれがFX-Mapをわかりにくくしている要因の1つじゃないかと思っています。

クワドラントノードで図形の描画をするためにはプロパティペインのパターンから何かを選びましょう。

とりあえず、FX-Mapの初期状態に戻し、パターンを [Input Image] に変更します。これはFX-Mapノードの入力 [Input Image 0] の画像を描画するための設定です。

sd051.jpg

どうでしょうか?FX-Mapノードにディスクが表示されたはずです。

クワドラントノードのもう1つの役割は画像を4分割する機能です。

出力ピンは4つあり、左から左上、右上、左下、右下の領域を示します。

それぞれの出力ピンの先の処理は分割された4つの空間での処理を意味することになります。

実際にこの挙動を確認してみましょう。

もう1つのクワドラントノードをグラフに追加し、以前のクワドラントノードの上に置いて4つの出力ピンすべてを最初のクワドラントノードにつなげましょう。

sd052.jpg

これだけでは何も変化がありませんが、上のクワドラントノードを選択、右クリックして [ルートとして設定] を選択します。

sd053.jpg

するとどうでしょう?ディスクが4分割の空間それぞれに表示されていませんか?

どうしてこうなるのでしょう?

FX-Mapではルートとして設定されたノードから下方向に処理が進みます。ルートノードはオレンジ色になり、1つのFX-Mapでは選択できるノードは1つだけです。

この図の例では、ルートとして設定されてクワドラントによって、画像の空間は4分割されました。

そして4分割されたそれぞれの空間に対して下のクワドラントの処理(ここでは [Input Image 0] を描画する)を実行します。

いわゆる switch 命令との違いは、switch 命令が基本1回しか処理を行わないのに対して、クワドラントノードは出力ピンにつながっているものをすべて実行します。

例えば、つながっている4つのピンの内の1つを外してみてください。4つのうちの外した部分が欠けるはずです。

もう少し別の例を見ていきましょう。

下図のように設定して、左下のクワドラントノードはパターンを [Input Image] に、右下のクワドラントノードは [波] にしましょう。

sd054.jpg 

結果はこうなります。

sd055.jpg

クワドラントノードは割り当てられた画像領域を4つに分割するので、クワドラント→クワドラント→クワドラントとすると今度は16分割もできます。

これを繰り返せばより細かく空間を分割することも出来ます。

いまだによくわからないクワドラントの挙動としては、クワドラントを1つ以上通過させてしまうと、何故か画像の色が暗くなる点です。

上の図ではディスクがグレーになってしまっていますが、元イメージは真っ白なはずなんですが…

この挙動には意味があるのかもしれませんが、今のところよくわかっていません。

次に反復ノードです。これは for 文による繰り返しを実現します。

例えば下図のようにすると、クワドラントノードの処理部分を反復によって複数回実行します。

sd056.jpg

反復ノードの右側出力ピンは各ループの処理です。

反復回数のプロパティで指定した回数だけこの右側出力ピンから処理が実行されます。

左側のピンは1回のみの処理を意味します。

例えば、左側のピンに"A"という処理を、右側のピンに"B"という処理を挿すと、Aが1回処理された後にBがループ回数分だけ処理されます。

まあ、ループ前の1回だけの処理を行う機能、と考えるといいでしょう。使う機会はそれほど多くないのではないでしょうか。

さて、クワドラントノードの処理は Input Image をそのまま描画するだけの処理です。

これを何度も繰り返しても何も変化はありません。上から何度も同じ画像が書き込まれるだけです。

そこで、クワドラントノードのプロパティを以下のように変更します。

パターンサイズ幅、及び高さ:0.2

ブランチオフセット:空の関数

ブランチオフセットの関数は以下のようにします。

sd057.jpg

0~1のランダム数値をオフセットとして使用します。

結果はこうなります。

sd058.jpg

ディスクの位置がランダムに変化し、反復処理されるたびにランダム値が変化しているのがわかるでしょう。

反復を使用する場合にはランダムも一緒に使わないと効果がわからなくなってしまうでしょう。

最後に切り替えです。これはそのまま if 文と考えると良いでしょう。

プロパティペインには [セレクタ] という項目がありますが、これは左か右を選択でき、それによって処理を変更することが出来ます。

もちろん関数も作成することが出来ますが、関数の出力は Boolean でなければなりません。

例として、以下のようなノード構成があったとします。

sd061.jpg

4分割した空間のそれぞれに [Input Image] か [波] を描画するようにしています。

ここでセレクタの関数は以下のようにします。

sd062.jpg

[$pos] は空間の中心座標がどこにあるかを示しています。このx値が 0.5 未満ならTrue、0.5 以上ならFalseとなります。

つまり、空間の左側はTrue、右側はFalseということです。

切り替えノードにおいてはTrueが右、Falseが左を指します。なので、結果は左側が [波]、右側が [Input Image] になるわけです。

さて、ここまでで3つのノードの解説を行いましたが、これでFX-Mapを使いこなせるかというとそういうものでもなく、やっぱりちょっと使いにくいことが否定できなかったりします。

使いにくいと感じた部分としては、例えば反復の現在のループ回数が取得できなかったり。

棒を綺麗な円状に並べたい、と思った場合は反復時の現在のループカウントが必要になりますが、これを取得する方法が今のところ見つかってません。

そもそもクワドラントノードで設定可能な画像処理の部分がやれることが意外と限られていて、あまりいい例が思いつきません。

とりあえず、Youtubeにあったチュートリアルから草地の地面を作成する場合の処理とか、

sd064.jpg

花びらっぽい形状を円状に配置することで簡単な花を作ったりすることは十分可能でしょう。

sd063.jpg

とにかくちょっとわかりにくいノードではありますが、ループや条件分岐を任意に行える機能がSDの通常ノードには存在しないので、こういうことをしたい場合は使わざるを得ないかな、と思います。

まあ、[Tile Generator] ノードや [Splatter] ノードで十分ならそちらを使っておいた方がいいです。

どうしても任意の形状を作成したい場合にのみFX-Mapを使う、という形のほうがいいんじゃないでしょうか?

ワープと指向性ワープ

Substance Designerのワープと指向性ワープについて疑問に思ったので調べてみました。

ワープというとワープ航法とか思い浮かべるのが日本人の基本的な思考じゃないかという気がしますが、ワープとは歪めるという意味の単語です。

名前のとおり、画像を歪めるためのノードです。

指向性ワープは比較的わかりやすいノードです。

入力ピンには歪めたい画像を入力し、強度入力にはグレースケールの画像を入力します。

指向性ワープは歪める方向をパラメータで指定し、各ピクセルについてグレースケールの値を強度とします。

つまり、強度入力の黒の部分は歪まず、白の部分は大きく歪みます。

sd041.jpg

GradientLinear2を使うとこのように真ん中から歪ませることが可能です。

また、Shapeの放物面を利用すると、ワープ方向をグリグリ動かして球の表面の模様を見ているように歪めることも出来ます。

sd042.jpg

指向性ワープはこのように歪む方向がわかりやすいんですが、通常のワープはどうなのでしょう?

普通に考えるなら、カラー画像を強度入力とし、RチャンネルとGチャンネルでそれぞれUV方向に歪めることになるんじゃないかと思います。

しかし、ワープの2つ目の入力ピンはグラデーション入力となっており、グレースケールの画像を入力することになります。

色々と調べた結果、ワープは各ピクセルのグレーの勾配を歪める方向としているようです。

強度をプロパティで正の方向に大きくしていくと白から黒に流れるように画像が歪んでいきます。負の方向ならもちろん逆転します。

イメージとしては、グレースケール画像をハイトマップと考え、高いところから低いところに絵の具が流れていくようなもの、と考えるべきでしょう。

例えば、Shapeのガウスを使うと中心部分が盛り上がったような歪ませ方が可能です。

sd043.jpg

これらのノードの使用方法は、指向性ワープについては単純に特定方向に歪ませることです。

対してワープは様々な方向に歪ませるので、例えば上の画像のレンガなどを歪ませるような用途で使用できます。

現実のレンガはすべてのレンガが綺麗な四角形になっているわけではありません。

ワープを利用することでレンガの1つ1つをばらばらに歪ませ、それっぽい映像にすることが出来ます。

BnW Spots 1にブラーを掛け、これをグラデーション入力に入れるとこのように荒い感じのレンガにすることが出来ます。

sd044.jpg

ワープのグラデーション入力にノイズを入れる場合は注意してください。

適当なノイズを何も考えずに入力すると元画像がどんなものかさっぱりわからない程度の映像になってしまいます。

以下はBnW Spots 1をブラーを掛けずに入力した後の画像です。

sd045.jpg

ほんとに元画像が何なのかさっぱりわかりませんね。

基本的にノイズを使用する場合はブラーか Blur HQ Grayscaleを使用しましょう。

なお、Blur HQ Grayscaleを利用するとブラーより滑らかに歪みます。

また、ノイズの中でもPerlin Noiseはそのまま利用しても上記のような映像にはなりません。

ワープとノイズの使い方は色々やって自分なりの使い方を確立すると良いのではないでしょうか?

第4回ぷちコンを終えて

第4回のUE4ぷちコンでは4作を応募させていただきました。

動画と実行ファイルはそれぞれこちらです。

Dodge Balls!!!

https://www.youtube.com/watch?v=h1t7uisGGJU

https://dl.dropboxusercontent.com/u/39588440/DodgeBalls.zip

アストロロボ・SSK

https://www.youtube.com/watch?v=C5wAsn7uMBk

https://dl.dropboxusercontent.com/u/39588440/AstroRoboSSK.zip

まもれ!アストロロボ・SSK

https://www.youtube.com/watch?v=g890GLmqmrY

https://dl.dropboxusercontent.com/u/39588440/MamoreSSK.zip

早撃ち アストロロボ・SSK

https://www.youtube.com/watch?v=Eg8GYHsgES4

https://dl.dropboxusercontent.com/u/39588440/HayauchiSSK.zip

応募順に並べていますが、実際に作成した順番は上から3, 1, 2, 4という順番です。

開発期間も作成順番が早いほど長くなっていて、アストロロボ・SSKが実質1週間くらい、まもれ!が3~4日、Dodgeが1日、早撃ちが半日くらいです。

早撃ちは6時間弱で作っているので半日もない計算ですが、とりあえずこの程度であれば短時間で作ることは可能なわけです。

今回のぷちコンでは前回と同様に自分なりの目標を立てました。

目標は3つ。

1. 完成品のみ応募する

2. Substance系のツールを使用する

3. 複数作品(2作品以上)を応募する

1はどの段階で完成品とするかという問題はありますが、ゲームの面白さとかバランスとかはある程度あればOKという感じで、タイトルからゲームを初めてゲームオーバーになってタイトルに戻る、という流れがちゃんと出来てればOKとしました。

ゲームの面白さは追求していませんが、最低限これはゲームです、といえるものを作りました。

バランスもゲームにならないバランスでは困るので、最低限のバランスは取ったつもりです。

2はSubstance DesignerとSubstance Painterを使用することを目標にしました。

実際、プレイヤーキャラのSSKや敵モデルのテクスチャにはSubstance Painterを使用していますし、ドッジボールのテクスチャやタイトルのSSKの文字などにSubstance Designerを使っています。

SDで作ったマテリアルをSPで使いたいとも思っていたのですが、そこまではまだアーティストらしい事ができないので断念。

3は4作出したのでOK。

というわけで、ちゃんと目的は達成しました。

これは素直に嬉しいことです。

しかしながら、やはり問題や反省点も多く、主な反省点は複数作品作るために1つの作品に時間をあまりかけられない→あまり新しいことはしないで知っていることを中心にやろう、となってしまった部分でしょう。

次回は出来れば、この機能使ったことないな、という物を使ってみたいな、と思います。

ここからは今回のぷちコンでの具体的な反省点、やったこと、疑問に思ったことなどを適当に列挙していきたいと思います。

順番とかもなく思いついた端から書いていきます。

続きを読む