MtlXテスト

流石に一週間は期間開けすぎですわ。
・・・うちの大学ってお嬢様部とかあるのか?しらんけど。

炭酸水入りのタンブラーを作ってみようとしました。
しかしちょっとスチのりっぽいですね。なんか粘度が高そう。
原因はおそらく全体に満遍なく泡があることだと思います。あと上に泡が留まっていないので余計に。まあそこまでやるならパーティクルを発生させたほうがいい気がします。
というのも、これはBooleanSubtractで作った液体のジオメトリの中に、そのジオメトリで生成したIsoOffsetからScatterでポイントを作成し、Sphere(Primitive)を配置しています。パーティクルを使用していないんですね。

上から見た図

さて、タイトルのMtlXとはMaterialXのことです。HoudiniではMaterialXを扱う手段がありまして、それを試してみた形となります。なぜそんな話をするのかというと、Sphere(Primitive)は法線の反転ができません・・・・・・・・・・・。実際にnormalノードでReverse NormalsのModifyを有効にすると分かります。出来ません。
実はこの泡の作成をするためには、法線を反転する必要があるのです。記事冒頭の写真には法線を反転せずレンダリングしたものがあります。それがこちらです。

反転しなかったもの。カビか何かが浮かんでらっしゃる?

清涼感が台無しです。黒い何かが浮かんでいるように見えます。本来、光の方角を向いた面はハイライトが描写されますが、泡の場合は内側にも面があります。内側にもハイライトがあるんですね。
「気泡とは、十分に透明な屈折率1の球体である」ということに気が付いて試したはよかったんですが、法線を反転しなければいけないとは思っていませんでした。
というか「法線が内側に閉じた境界のない物体」なんて存在しないと思っていました。そういう物体って外側から見たら基本的に見えませんし。半透明なら別ですが、その場合は半透明の物体自体に内側に空洞を作りますし。
まさか気泡がそれだったとは。

話を戻しましてMaterialXの場合は、MtlX NormalノードにMtlX Multiplyノードをつなげて法線ベクトルに-1をかけてやれば、反転した法線を取得できます。それをMtlX Standard Surfaceの法線につないで上書きしてやればいいのです。シェーダーには法線を計算する仕事があるので法線を取得することができるんでしょう。何で計算してるのかは知りませんが。dx,dy,dzの偏微分で勾配を算出してるのかもしれませんし、Sphere(Primitive)自体に何かあるのかも。

初めてMaterialXを触りましたが、いまだに設定可能な項目一覧を見ると気が遠くなりそうになりますね。MayaのArnoldは知っていますし、拡散光や反射光・透過光などそれぞれの意味を知った今では理解できるようにはなってきていますが、まだAntisotropy(異方性)などがよく理解できていないのでシングレのへにょへにょタマモクロスみたいな心になります。CoatとThinFilmの違いも知っておいたほうがよさそう。

そんなところで。