[ノード]表面と裏面で別のマテリアルを割り当てる方法[blender]

blender2.82a使用
折り紙など平面なオブジェクトの表と裏でマテリアルを変えたい事がありますよね?
しかし普通にマテリアルを設定しても両方とも同じマテリアルになってしまいます。
かと言って厚みを付けるのもちょっとなぁ・・・
そんな時に表と裏で別々のマテリアルを割り当てる方法を紹介します。













法線を表示して表面を確認する
法線とはポリゴンから垂直に伸びる線の事でこの法線が述べている方向が表となります。この法線を表示するには編集モードでビューポートオーバーレイからノーマルの面を選択します。





余談ですがこの法線を画像でコントロールして擬似的に立体に見せるのがバンプマップやノーマル(法線)マップです。面の明るさは面の法線とライトから放出される線の角度から計算されます。つまり法線が傾けばまるで立体のように面の明るさが変わるのです。しかし実際は面は平坦のままです。擬似的とはそういう意味なのです。




別の確認方法もある
同じくビューポートオーバーレイからジオメトリの面の向きをオンにすると表が青、裏が赤で表示されます。



これはあくまでビューポート上で確認できるだけでマテリアルが別々になっているわけではありません。















マテリアルノードのジオメトリノードで表と裏の出力を知る
マテリアルを設定します。面の向きはマテリアルの設定に不向きなのでオフにしましょう。レンダープレビューにしてもこの色が出てしまうからです。(実際レンダリングすれば通常のマテリアルが表示されます)

シェーダーエディターで新規マテリアルを追加して、入力→ジオメトリを追加しましょう。このノードに「後ろ向きの面」があります。これをプリンシプルBSDFのベースカラーに繋ぎましょう。これで面の裏向き側が白、表に黒が出力された事が分かります。この出力を利用してマテリアルを分けます。




表と裏に別々のマテリアルを設定する
表と裏の出力が出来たなら後は簡単です。シェーダーミックスの係数に先ほどの後ろ向きの面を繋げばいいのです。それで表と裏のシェーダーを別々に設定できます。シェーダーミックスの係数が黒=0(表面)なら上のシェーダーが使われ、白=1(裏面)なら下のシェーダーが使われます。
















応用:裏面の非表示
シェーディングでの裏面の非表示は簡単です。3Dビューのシェーディングでオプションの「裏面の非表示」をオンにするだけです。しかしこれはレンダリングには反映されません。そこで先ほどの方法で裏面を透過BSDFに設定すれば良いのです。





これが出来るとこんな事もできます。
部屋の中が見えるようになります。視点から見た面は裏ですから透過されて中が見える訳です。一方奥の壁は表になりますから表のマテリアルが表示されます。これでどこの角度から見ても部屋の中が見えます。