moyasiエフェクト館

主にエフェクト関係の記事を上げていこうかと思います。


エフェクトに関係する記事上げてきます
エフェクト関係の記事の内容は緩く募集中
自分がわかる範囲であれば書いていこうかなと。

乗算ではなく減算で合成するあれこれ

f:id:tktknkyo:20210125225518p:plain

今回は特定のツールの話というわけではありません

なので、ツールを問わずに影響のある内容だとは思います。

 

【初めに】

 

エフェクトではシームレス(繋ぎ目のない)テクスチャと

●などの形状を乗算して使う事がよくあります。

f:id:tktknkyo:20210125225841p:plain

非常に定番なのはこのような

形状と、ディテール用のテクスチャをそれぞれ乗算するという手法

白い部分だけ映るという、計算結果としては、分かりやすい手段な事に加え

 

f:id:tktknkyo:20210125230049p:plain

ディテール用のテクスチャ同士の乗算や

同じテクスチャでも、タイリング数のみ変えたものの乗算でディテールを細かくしたりもできます。

同じテクスチャを使う場合であれば、使うテクスチャの数も増えないというメリットもあります。

 

乗算、いわゆる掛け算にはなるのですが

こういう場合での乗算は主に暗くする場合に使われます。

そして減算はそのまま引き算なので、当然暗くなります。

 

ではこの二つの違いの部分について色々と書いていきます。

 

 

【原理的な内容】

 

原理そのものは非常に簡単で

両方とも普通の計算式でしかありません

例えば1に対して0.5の場合

 

乗算であれば

1*0.5=0.5

 

減算であれば

1-0.5=0.5

 

で変化はありません

ですが1の部分や0.5の部分の数字か変われば当然結果は変わってきます。

画像同士の合成でも、これがそのまま当てはまります。

(画像同士で想定する場合、両方0-1の数字で考えてください)

 

【色々違い検証】

 

f:id:tktknkyo:20210125230956p:plain

まずは乗算でよく使う形状を取るための乗算

乗算は明るい部分、減算は黒い部分が残るので

減算する場合は白黒を反転させましょう。

 

 

f:id:tktknkyo:20210125231131p:plainf:id:tktknkyo:20210125231159p:plain

左が乗算でしたもの

右が減算でしたもの

 

同じ画像ベースでしている場合、中央を抜いてきているのは同じではあるが

結果としてはこのような違いがある。

乗算の方が、合成に使った円の形状が見えやすい

 

理由としては、先ほどの計算式で当てはめる場合

減算でのみ真っ黒になっている部分というのは

計算でいえば0.5同士の部分というのが近いと思われる。

 

乗算は0.5*0.5=0.25で

薄いながらも灰色がしっかり残っているが

減算は0.5-0.5=0で

完全に真っ黒になる

 

f:id:tktknkyo:20210125231807p:plain

つづいてノイズ同士の合成の場合

 

f:id:tktknkyo:20210125231855p:plain

ノイズ同士を乗算した結果がこちら

暗めではあるが、全体にノイズがしっかり残っている

 

 

f:id:tktknkyo:20210125232018p:plain

つづいてこちらが減算したもの。

合成する側の白黒反転は入れたものの

 

非常に暗いです、当然選んだテクスチャが悪かったなどなどはあると思いますが...

その辺は実際に合成してみて色々試すしかないという部分は当然ありますが

 

基本的に減算は、真っ黒な領域が出てきやすいです。

真っ黒=0なので

減算したあとに、定数で乗算しても真っ黒のままです

そうなってくると、どうしても都合の悪い部分も出てきたりします。

 

そしてなによりUE4のマテリアル内などでする場合だと負の数にいきやすいです。

そうなってくると、定数で乗算するとどんどん暗くなります

ブルームで発光させたいのに一部はむしろかなりくらいなど、そういうのが起こります。

Clamp入れれば解決しますけど、あくまで一つの例として

 

f:id:tktknkyo:20210125233153p:plain

個人的に好きな例としては

雲模様とグラデーションで減算して炎のベースを作るものなどがあります。

これは小さい黒い領域の出やすい減算なのでやりやすい所もあると思います。

 

 

ゲームエンジン内で減算を使う場合は色々処理で面倒な部分があるのが正直な所ではありますが

画像そのものを作る段階で、形状を出したい場合であれば減算は中々便利な手段だと思います。

 

 

【差の絶対値について】

※2020/01/30追記

 

記事を完成した後でしたが

差の絶対値も触れておいたほうが良いと思ったので追記しておきます。

 

差の絶対値、PhotoShopなどにある合成方法の一つで

計算としては【引き算した後に負の数を正の数に変換したもの

 

負の数を正の数への変換は内部的にはおそらく二乗してから平方根だと思われます

(内部の計算式は自分で実装する場合以外は気にしなくてもいいです。)

 

f:id:tktknkyo:20210130183904p:plain

まずはグラデーションと雲模様の合成結果

雲模様から、グラデーションで差の絶対値で計算しています。

 

 

f:id:tktknkyo:20210130183951p:plain

先ほどの画像では解りにくいと思うので

拡大したものがこちら

 

減算の結果は上の部分は大体真っ黒になっていましたが

その黒い部分も白くなっています。

 

ただ、これではどのようなものに使うのか?が解りにくいと思うので

もう一つ例を出します

f:id:tktknkyo:20210130184311p:plain

三つ縦に並んだものの、一番下が差の絶対値での結果です

今度は〇の形状のものを使用しました。

 

そして一番右にあるのは、解りやすく色を極端にしたものです

 

f:id:tktknkyo:20210130184500p:plain

拡大するとこのような模様が出来上がっています。

ノイズの影響で四角に近いですが

計算に使った〇の形状と似た形状の、ノイズの掛かったラインが出来ているのが解ると思います。

差の絶対値を使う場合のメリットとしては

ノイズの掛かった細い筋などを作りたいときに便利な手法の一つです。

 

使う場面としては、減算や乗算に比べれば少ないとは思いますが

このような細い筋のようなものを作りたいときは、試してみるのもありだとは思います。

 

一つ注意としては、差の絶対値の場合

計算途中に負の数を持つことが必須になります

ツールによってはやりにくい場合もあると思うので、そこは注意してください。

 

SubstanceDesignerで差の絶対値を使う場合は以下の記事を参考にしてください。

tktknkyo.hatenadiary.jp

 

 

 

 

 

今回はここまでとなります。

ちょっと変わった内容になりましたが、また何か思いついたら定期的に記事を書いていければなと。