今回、紹介させていただくShader TypeはAdd TypeとMix Typeです。
最もベーシックなShader TypeはAdd Type(Maya Shaderなど)のShaderになります。そして、物理ベースで良く使われるのがMix Type(Mental RayのMiaなど)のShaderです。
AddとMixどう違うのか?なかなか言葉で説明するのは難しいので、画像を交えながら紹介したいと思います。
まず、Shaderの構成要素は大きく別けて3つあります。
- Diffuse
- Reflection
- Toransparency(Refraction)
今後、Shaderとは何か?と言う部分を学んでいただく上で、非常に重要なことなので、この構成要素をしっかりと覚えて置いてください。
それでは、実際に画像を交えながら、Shader typeについて紹介していこうかと思います。
まずはリニア環境で、白いボールを表現したいと思います。多くの方は白色=RGB255、もしくはH0%,S0%,B(V)100%だと思っている人が多いかもしれませんが、リニアな環境(現実の世界)では、人が純白の白色として認識しているのは、だいたい80%程度の反射率しか持っていません。
そして、中間色(ハーフグレイ)は実は50%ではなく、リニアな環境では17%~18%の反射率の灰色を指します。
これらの知識はCGよりも、むしろ写真の知識に近いかもしれません。中間グレイはリニア環境では17%~18%だと覚えて置いてください。
そして、実際にDiffuce80%にShaderを設定、リニア環境でレンダリング。ガンマを掛けて戻した画像が下記です。
(地面が実は18%グレーの設定です。)
ご覧のように人が見て、白い玉と判断できるような画像になりました。実際にShaderの中身はこんな感じになってます↓
ここまではADD、MIX共に同じですね。
次はミラーボールを表現したいと思います。現実世界で100%Reflection物質と言うのは、おそらく存在しませんが、今回はわかりやすくするためにDiffuse0%、Reflection100%のミラーボールを作って見ました。
Shaderの中身はこんな感じです↓
ここでもADD、MIX共に問題ありませんね。
それでは次にはじめに作った白い玉Diffuse80%に、Refrection100%を追加してみましょう。
明らかに違いが現れましたね。これはShader内で下記のようなことが起こっているからです。↓
Add typeのshaderではDiffuseとReflectionがたされ、反射率が100%を超えてしまいました。これはリニアな世界(現実世界)では発光物となってしまいます。ところがMix typeのshaderでは、Refrectinが100%でDeffuseが0%になっています。これがADDとMIXの大きな違いです。
続いて、これらのShaderにTransparency80%とindex of Refraction(屈折)1.4を追加して見ました。
shader内はこんな感じで、大変な事に!!!!↓
ご覧頂いても解ると思いますが、Add typeのShaderはDiffuse+Refrection+Transparencyと言う計算で成り立ちます。
しかし、Mix type(物理ベース)の場合は上から順にTransparency、Reflection、Diffuseという様に重なっていますので、仮にDiffuse100%、Refrection100%でも、Transparencyが100%であれば、完全な透明物体になります。
例)Diffuse10%、Reflection50%、Toransparency50%だと、透明度50%、鏡面反射率50%、拡散反射率0%の半透明なガラスのような質感になります。Deffuseは強制的に0%です。
BRDF(Bidirectional Reflectance Distribution Function)を無視した場合ですが、これにBRDFが絡んでくると、また違った結果になるのですが。。。
今回は、そういった難しい話は無しで、単純なADDとMIXの違いについて紹介させて頂きました。
ADD、MIX以外にも、RendermanのなんとかShader(空っぽの器に、自分で要素をたして行ったり、順番を入れ替えたり自由にカスタマイズできるALで使ってたヤツ。名前忘れた)や透明度よりも鏡面反射を一番上にしたGlass type(ALで使ってたEYE shader)などの、様々なShader Typeがありますが、今回はベーシックなAddとMixについて紹介させて頂きました。
ちなみにどのタイプのShaderを使っても、リニア環境の基礎知識、Shaderへの基礎知識、反射率や色の基礎知識を持っていれば、どのshader typeでも同じ様な表現をすることが可能です。
海外で活躍するシニア、リード、TD、Shader writerは、当たり前の用にこれらの知識を持っています。
逆にこれらの知識がない状態で、リニア環境でのリニアレンダリングというのは、非常に困難だということです。
リニア環境というのは、ある種、現実世界をシュミレーションする行為に近いからです。だからこそ、実写合成で最も良く用いられる方法なのですが。
ちなみにLegend of the Guardiansの場合はリニアフローではありましたが、shaderの多くはAdd typeの物を使用していました。
Future Animetionという事もあり、特に実写合成する必要がなかったのが主な理由ですが、それでもやはりフォトリアルなテイストを目指していたので、必然とみんな物理ベースな考え方を意識してTextureを書いていましたが(^^;
物理ベースというのは、Deffuse何%、Reflection何%、Transparency何%という感じて、常に反射率を意識してTextureを書く、Shaderを設定する、反射率がトータルで100%を超えないようにする考え方です。
Shader typeというのは、それらをユーザーフレンドリーな形の仕様にしただけの物なので、基礎知識さえあれば、レンダラーが変わろうと、反射率が変わる訳ではないので、同じような絵を作る事は理論上可能です。あくまでも、理論上ですが。。。
さて、次回は今回の続きで、なぜ物理ベースのShaderが良く使用されるのか?なぜ、物理ベースである必要があるのか?を僕の見解と経験を交えて紹介して行きたいと思います。
そして、物理ベースの理詰めな絵作りの限界についても紹介したいと思います。
長文、お付き合いいただいてありがとうございました。間違い、質問などあれば、コメントやメールフォームからご指摘頂ければと思います。
僕も日々勉強、日々精進!!!です!