Hypershade のノードベースは壊れている
bump2d ノードは、 Use As として Tangent Space Normals を選択した場合、入力元ノードの Out Alpha の代わりに Out Color の値を参照する。
Use bump2d node for normal mapping. – Autodesk Community
Ok, I think I find out what bump2d node did when you checked the option “Use as: Tangent Space Normals”. My conclusion is that although bump2d’s “Bump Value” input is only connected to file’s “Out Alpha”. Bump2d just don’t use this “Out Alpha” and instead uses file node (or whichever node is connected upstream)’s “Out Color” attribute.
要するに、リンク先の内容が全てで、とにかくそういう話である。この挙動は file ノードだけでなく、 colorCondition などでも見られるらしい。
個人的な感想
しかし、 Bump と Tangent Space Normals を切り替えた場合にノードを接続し直さないといけないのは非常に面倒なので、今の仕様は現実に即した仕様なのかなと思っている。さらに、 Arnold の aiBump2d とaiNormalMap のようにノードそのものが用途別に分かれていると、繋ぎ変えの手間はさらに多くなってしまう。
また、これが仮に意図的なものではなく歴史的な技術的負債によるものだったとしても、この奇妙な仕様を変えてしまうと世界中の映像制作スタジオで開発されてきた 3D アセットが壊れてしまうので、このような整合性のない仕様を残すのは、互換性と業務継続性を重視する業界標準のツールとしては悪くない判断だと思う。
競合ソフトである Blender は破壊的な変更が多いが、個人利用が多いイメージなのと、オープンソースでありいつでも古いバージョンのバイナリをダウンロードすることができるというのがあるので、そのあたりでうまくバランスを取っているように見える。
実 際 に や っ て み た
使用したテクスチャ画像
使用したテクスチャ画像
(1) ディフューズカラーテクスチャとして接続した場合
| マテリアル | Alpha is Luminance | |
|---|---|---|
| オン | オフ | |
|
テクスチャの Out Color をベースカラーに接続
|
|
|
|
テクスチャの Out Alpha をベースカラーに接続
|
|
|
このように、 Alpha is Luminance がオンの場合はアルファ出力が輝度値になり、オフの場合に出力されるべきアルファ値が輝度値で上書きされていることが分かる。
一方で、RGB カラー出力はこのチェックボックスの影響を受けていないことが分かる。
(2) バンプマップ・ノーマルマップとして接続した場合
Out Alpha の値がそのまま Bump2d ノードに流れるようにして、バンプマップ・ノーマルマップを試してみる。
| マテリアル | Alpha is Luminance | |
|---|---|---|
| オン | オフ | |
|
Use As: Bump
|
|
|
|
Use As: Tangent Space Normals
|
|
|
このように、 Alpha is Luminance の状態によって、レンダリング結果が変化していることがわかる。オンの場合は輝度値がバンプマップ・ノーマルマップとして使用され、オフの場合は、元画像のアルファ値がそのまま使用される。
(3) bump2d ノードにテクスチャノードを直接接続した場合
ここまでの結果は一貫している。アルファ出力を使用する場合は、 Alpha is Luminance のチェックの有無がレンダリング結果に影響する。カラー出力を使用する場合は影響しない。それだけのことである。
では、 bump2d ノードとテクスチャノードを直接接続するとどうなるだろうか。
| マテリアル | Alpha is Luminance | |
|---|---|---|
| オン | オフ | |
|
Use As: Bump
|
|
|
|
Use As: Tangent Space Normals
|
|
|
このように、アルファ出力を bump2d ノードに接続しているにもかかわらず、Alpha is Luminance のチェックの有無がレンダリング結果に影響しなくなってしまった。これは最初に説明した通り、 bump2d ノードが接続元ノードのカラー出力を参照しているためである。
しかし、これは本来あるべき理想的なノードベースシステムの設計の原則に違反している。また、このような仕様があるため、Alpha is Luminance のオン/オフをどんなときに気にする必要があるのか、誰もちゃんと説明できなくなってしまったのである。
ノードベースのツールというのは、ノード同士を繋ぐことで、接続したソケットに対応したデータが転送されるという最も基本的な契約によって成立している。Geometry Nodes の Field のように、処理の流れが一方向ではない場合もあるが、それでも接続したソケットに対応したデータが流れるという原則は一貫している。そのような契約があるからこそ、高い自由度で創造的な作品を作ることができるのである。Hypershade がこれらの原則に違反しているということは、ノードベースのシステムとしては壊れているということだと、私は考えている。
まとめ
こんなことを知っていても何の役にも経たないので今すぐ忘れましょう。


















