見出し画像

SbstanceDesignerの多次元FloatとVectorとの違い

SbstanceDesigner の関数を書きたい人向け



多次元Floatの積

検証用に Value Processor の中で簡単な関数を組みます。

赤い破線が出ており
Float4 * Float や Float3 * Float
 が成立しません。

一方、青い線で連結された Float4 * Float4 が成立します。
同様に Float3 * Float3 が成立します。

ちなみに Vector3*Vector3 は一般的ではなく、
ベクターをスケールしたい場合は Vector3*Float が一般的です。

しかし計算式の使い方によって、多次元フロート型は、Vectorよりも使い方が自由です。

このアウトプットから解るように、
各要素がそれぞれ乗算されているだけです。

Vector * Float のように扱いたい場合は、
下記のように、同様の型を使い、すべてに同じ値を入れれば良いだけです。

また、とにかくデータ型を揃えればよいので、このようにすることで一つの値から Float4 をつくってから乗算するのもありです。
このようにSubstance Designerではベクトル演算が他の言語よりも少しだけ面倒です。
しかし、もともとは Float4 は RGBA を前提に作られていると考えると、自然な理解ができます。

もう一つ注意があります。

DotProduct や CrossProduct を使う場合

ベクトルの計算で良く使う、DotProduct や CrossProduct を使う場合、少なくともSubstance Designer 2023年版では、Cross(Float4,loat4) が使えません。このツールでは Cross関数 は入力に Float3 しか受け付けません。
よく使うのは、

  • Dot(Float2,Float2) 

  • Dot(Float3,Float3) 

  • Cross(Float3,Float3) 

かと思います。

入力データが FLoat4 の場合は、Swizzle を使って Float3 に直して計算する必要があります。

おしまい。

Thanks for reading.


この記事が気に入ったらサポートをしてみませんか?