2010年9月29日水曜日

【CG】 Shader type について

さてさて、お待たせしました。ようやく画像の準備が出来たので、簡単にですがShaderのTypeについて紹介したいともいます。

今回、紹介させていただくShader TypeはAdd TypeとMix Typeです。

最もベーシックなShader TypeはAdd Type(Maya Shaderなど)のShaderになります。そして、物理ベースで良く使われるのがMix Type(Mental RayのMiaなど)のShaderです。
AddとMixどう違うのか?なかなか言葉で説明するのは難しいので、画像を交えながら紹介したいと思います。
まず、Shaderの構成要素は大きく別けて3つあります。


  1. Diffuse
  2. Reflection
  3. Toransparency(Refraction)
この3つがShaderを構成する大きな要素になります。Specularに関しては、CG世界だけの嘘の表現なので、今回は要素として削除していますが、分類するとReflectionと同じ分類になると思います。

今後、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が良く使用されるのか?なぜ、物理ベースである必要があるのか?を僕の見解と経験を交えて紹介して行きたいと思います。
そして、物理ベースの理詰めな絵作りの限界についても紹介したいと思います。

長文、お付き合いいただいてありがとうございました。間違い、質問などあれば、コメントやメールフォームからご指摘頂ければと思います。

僕も日々勉強、日々精進!!!です!

0 件のコメント:

コメントを投稿