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.