Substance Painterからにテクスチャをエクスポートし、Blenderでセットアップする際によくわからんところとして、透明の扱いがある。Substance Painterで透明を表現するときは、マテリアルモードを【pbr-metal-rough-with-alpha-blending】(または【pbr-metal-rough-with-alpha-test】)にし、Opacity(不透明度)マップを追加して透明部分を表現する、という流れは何となく把握することができた。しかし、これをBlenderに戻すときにどのようにノードを組めばいいのかが、まだはっきり理解できていない。
上図は試験管。(GlassVisorの色がついちゃってるけど)透明なガラスなので当然透けさせたい。図ではOpacityを0.24に設定。
Blenderで透明を表現できそうなパラメータには二つあり、一つはAlpha(アルファ)、もう一方はtransmission(伝播)である。transmissionについては、日本語UIだと伝播と訳されてしまっているため、最初はこれが何のパラメータなのかが全く分からなかったが、調べていくとどうもこれが透明にかかわる値らしい。
はじめは透明度は伝播らしいから、透明度が入っているはずのAlphaをここにつなげばいいのかなと思いやっていた。(Opacityは不透明度ということに気づいていれば・・・)。しかしどうもうまくいっていない様子。だからといってアルファにつないでも透明度が変わる様子はない。
何故だろうと思い調べたりしているという地にたどり着いたのは、公式マニュアルと以下のサイトで、これを参照することで、特に後者のサイトの画像によって両者の違いを何となくつかむことができた。
Alphaは存在自体の濃さや、2Dソフトにおけるレイヤ濃度に対応している。まさに不透明度である。これに対して伝播のほうはその材質が光をどれだけ通すかのパラメータであるようだ。ついでに、IORの値によって屈折率を調整することもできるようである。
不透明度と透明度よりかは不透明度と透過度というべきか。似ていて反対の意味のようだけども違っている。日本語でうまく言い分けるのは難しいのはわかる。
では、なぜアルファにオパシティマップをつないでも透明度が変化しなかったのかというと、シェーダ設定が透明をサポートしていないものになっていたからである。
透明を扱うためにはBlend ModeをOpaque(オペーク)からAlpha ClipやAlpha Blendに変更しなくてはならない(Alpha hashはやや癖がありそう)。Unityのシェーダと同じようなものなのだが、ノードでだいたい済むだろうと思い、この設定の項目はまったく気にしていなかった。
上図はバケツモデルにおけるOpaque,Opaque+Transmission, Alpha blend Alpha0.5の比較。
Alphaを薄くした方は全体的に色も厚みも薄くなっているような感じな一方で、Transmissionのほうは濃さや厚みを保ちつつも透け感が出ており、材質として存在感を感じる気がする。
transmissionとAlphaの違いは何となく分かったが、結局BlenderのCyclesやEEVEEでレンダリングするのではなく、UnityやUnrealEngineにおいて用いるアセットを作るという分には、Alphaを使った透明表現を使っておけばよいのだろう(きっと)。
それにしても伝播という訳は微妙にわかりにくかったので、このようなわかりにくさを避けるためにも、少々慣れは必要になるだろうが英語インターフェースに慣れておく方がいいのだろう。これを機に今まではツールチップとインターフェースの翻訳をTrue、新規データをFalseとしていたものを、ツールチップのみのチェックに代えて、英語UIで頑張っていこうと思う。
コメント