トップ > レンダリング >
各シェーダの紹介

  

シェーダの特徴と使い分け

レンダリング処理の中の陰影計算(シェーディング)を担当するのがシェーダと呼ばれる機能です。

内蔵レンダリングエンジンは、それぞれ以下のような種類のシェーダを持ちます。

レンダリングエンジン シェーダの分類 詳細
Blender Render サーフェイスシェーダ 10種類

<< 内訳 >>
拡散反射シェーダ5種類
鏡面反射シェーダ5種類
ボリュームシェーダ 1種類
特殊シェーダ 1種類
Cycles Render サーフェイスシェーダ 12種類
ボリュームシェーダ 3種類
特殊シェーダ 4種類

それぞれのシェーダには特徴があり、表現したい物体や演出方法によって最適なシェーダを選択する必要があります

マテリアル設定の一部

シェーダは、マテリアルに対して設定します。 メッシュにマテリアルを割り当て、そのマテリアルにシェーダを設定します。

大まかに言えば、マテリアルとシェーダの関係は、マテリアルとテクスチャの関係と同じです。

  
Cycles Renderのシェーダの中には、マテリアルではなくワールド(仮想世界)に対して設定するものや、マテリアルとランプのどちらにも設定できるものがあります。

サーフェイスシェーダとボリュームシェーダ

シェーダは、大まかに分類すると、サーフェイスシェーダとボリュームシェーダに分かれます。

サーフェイスシェーダとは、物体の面の部分の陰影計算を行うシェーダです。 本ウェブサイトの解説でこれまで利用してきたのは、全て『サーフェイスシェーダ』です。

Blenderに限らず3DCGの世界では、物体の多くは面の集まりとして表現されます。 それらの物体の面が、サーフェイスシェーダで陰影計算されます。 もちろん、サーフェイスシェーダで陰影計算されることに問題はありません。

問題は、面で表現できないものを扱う場合です。 例えば、雲や煙・炎・霧のようなものが面で扱えない物体の代表です。

Blenderでは、雲や煙・炎・霧のような、面で表現できない物体は『ボリュームマテリアル』で表現します。 本ウェブサイトの解説で今まで使用してきたのは、面の質感を表現するための『サーフェイスマテリアル』ですが、『面』ではなく『内部空間の密度』で物体を表現するための『ボリュームマテリアル』と呼ばれるマテリアルが実は存在しています

その『ボリュームマテリアル』の陰影計算を行うのが、ボリュームシェーダです。 つまり、ボリュームシェーダは、メッシュの面に対してではなく、メッシュの内部空間の密度に対して作用します。

サーフェイスシェーダとボリュームシェーダの併用

Cycles Renderでは、サーフェイスシェーダとボリュームシェーダを併用することができます。 1つのメッシュオブジェクトに対して、表面はサーフェイスシェーダで陰影計算させ、内部の空間はボリュームシェーダで陰影計算させるということができます。

一方、Blender Renderでは、サーフェイスシェーダ、ボリュームシェーダ、特殊シェーダのどれか1つしか使用することができません。

もちろん、『1つのマテリアルについて』の話です。 Blender Renderでも、1つのメッシュオブジェクトに複数のマテリアルを割り当て、マテリアル1にはサーフェイスシェーダ、マテリアル2にはボリュームシェーダを割り当てるということなら可能です。

  

Blender Renderのシェーダの紹介

標準レンダリングエンジンであるBlender Renderの各シェーダの概要および描画例を紹介します。

シェーダの分類 詳細
サーフェイスシェーダ 10種類

<< 内訳 >>
拡散反射シェーダ5種類
鏡面反射シェーダ5種類
ボリュームシェーダ 1種類
特殊シェーダ 1種類

Blender Renderのシェーダには、計算式を考案した数学者や物理現象を発見した物理学者の名前が付けられたシェーダが多いです。

なお、拡散反射シェーダと鏡面反射シェーダが同時に動作する設定にはしていません

本来、拡散反射シェーダと鏡面反射シェーダは併用するものです。 しかし、ここで紹介する描画例では、拡散反射シェーダと鏡面反射シェーダを同時には使用していません。

  
シェーダの効果を見やすくするため、併用しない設定にしています。
  
拡散反射シェーダの描画例では鏡面反射シェーダの効果をゼロにしています。 同じように、鏡面反射シェーダの描画例では拡散反射シェーダの効果をゼロにしています。

シェーダの切り替え方法

まずは、シェーダの切り替え方法について説明します。 Propertiesウィンドウのマテリアルパネル切替ボタン(マテリアルパネル切替ボタン)を押します。

1. シェーダの切り替え
1. シェーダの切り替え

上図のようにマテリアル関連のパネル群が表示されますので、マテリアルスロットの一覧から対象のマテリアルを選択します。

次にマテリアルの種別を、"Surface"、"Wire"、"Volume"、"Halo"から選択します。

  
"Wire" はワイヤフレームで描画するためのワイヤフレームマテリアルです。 ワイヤフレームマテリアルのシェーダは、サーフェイスマテリアルと共用です。

サーフェイスマテリアルかワイヤフレームマテリアルを選択した場合は、さらに拡散反射シェーダと鏡面反射シェーダを選択する必要があります。

DiffuseパネルとSpecularパネルにある拡散反射シェーダと鏡面反射シェーダの選択リストから、拡散反射シェーダと鏡面反射シェーダをそれぞれ切り替えることができます。

なお、拡散反射シェーダも鏡面反射シェーダも未選択にはできません。 必ず何らかのシェーダを選択する必要があります。

  
シェーダの効果を消したければ、設定項目の拡散反射量(Intensity)や鏡面反射量(Intensity)をゼロにします。

拡散反射シェーダ : Lambert(ランバート)

では、拡散反射シェーダから紹介します。 まずは、Lambertシェーダからです。

Lambertシェーダは、Blender Renderでの標準の拡散反射シェーダです。 新規にマテリアルを作成すると、このシェーダが割り当てられます

拡散反射シェーダ : Lambert
拡散反射シェーダ : Lambert

Johann Heinrich Lambertというドイツの数学者であり物理学者であり天文学者でもあり、さらに科学者で哲学者でもあった人物が名前の由来だとか。

幅広い場面で使えるシェーダですが、粘土や石・コンクリートのような表面が粗い素材の表現には向きません。 再帰性反射が考慮されていないためだとか。

設定項目は、拡散反射色と拡散反射量(Intensity)のみです。

拡散反射シェーダ : Oren-Nayar(オーレン・ネイヤ)

Oren-Nayarシェーダは、やや物理的な計算も考慮されている拡散反射シェーダです。 Michael Oren氏とShree K. Nayar氏によって提唱されました。

拡散反射シェーダ : Oren-Nayar
拡散反射シェーダ : Oren-Nayar

再帰性反射が考慮されているため、Lambertシェーダが苦手とする『表面が粗い素材』の表現に向いています。

設定項目は、拡散反射色と拡散反射量(Intensity)に加え、粗さ(Roughness)があります。

拡散反射シェーダ : Toon(トゥーン)

Toonシェーダは、トゥーンレンダリングを行うための拡散反射シェーダです。

拡散反射シェーダ : Toon
拡散反射シェーダ : Toon

トゥーンとは、カートゥーンの略で、現在では漫画や子供向けのアニメーションを指します。 つまり、トゥーンレンダリングとは、セルアニメーション風のレンダリングのことを指します

陰影の変化が滑らかではなく、色の変化がはっきりとしている手描きアニメーション風のレンダリングです。

  
トゥーンレンダリングを実現するためのシェーディングを『セルシェーディング』と呼びます。

設定項目は、拡散反射色と拡散反射量(Intensity)に加え、大きさ(Size)と滑らかさ(Smooth)があります。 大きさ(Size)には明るくする領域の広さを、滑らかさ(Smooth)には陰影の変化の滑らかさを指定します。

  
大きさ(Size)が小さいとセルアニメーション風にはなりません。
  
滑らかさ(Smooth)を大きくするとセルアニメーション風にはなりません。

拡散反射シェーダ : Minnaert(ミンナルト)

MinnaertシェーダはLambertシェーダに似ていますが、視線と面の角度や光の方向によって拡散反射の強さを減衰させる拡散反射シェーダです。 Blender 2.37で追加されました。

拡散反射シェーダ : Minnaert
拡散反射シェーダ : Minnaert

マニュアルには、『視点から見て物体の中心となる部分が暗くなる』と書かれているのですが、少し試したところ視点を向いている面が暗くなるようです。 つまり、球体であればどこから光が当たろうが、どの方向から見ようが必ず中心が暗くなります。

ベルベット生地の表現に良さそうですが、他にはどんな場面で有用なんでしょうか。 うーん、思いつきませんね。

設定項目は、拡散反射色と拡散反射量(Intensity)に加え、暗さ(Darkness)があります。 暗さ(Darkness)が初期値のままだとLambertシェーダと全く同じ結果になります

拡散反射シェーダ : Fresnel(フレネル)

Fresnelシェーダは、対象の面と視点の位置関係が全く考慮されない拡散反射シェーダです。

拡散反射シェーダ : Fresnel
拡散反射シェーダ : Fresnel

Fresnelシェーダでは、対象の面と光源との位置関係だけで拡散反射が計算されます。 光源を向いている面は明るく、光源と垂直な面は暗くなります。 どの角度から見ていようが関係ありません

設定項目は、拡散反射色と拡散反射量(Intensity)に加え、フレネル効果(Fresnel)とブレンド係数(Factor)があります。

  
Blenderには、シェーダやマテリアルの設定項目などで『フレネル』という名称を持つものがあります。 それらは、フランスの物理的学者であるオーギュスタン・ジャン・フレネルの『フレネルの方程式』に関係します。 フレネルの方程式は、光が屈折率の異なる物質に入ろうとするときの反射と屈折の振る舞いを表します。
  
身近なところでは、水面の反射と屈折でその振る舞い観察することができます。 真上から水面を見下ろすと、光はほとんど反射しないため水底を見ることができます。 しかし、視線を遠くに移すにつれ、水の中は見えにくくなり、ある距離まで離れると水面は光を反射する率が高くなり奥の景色を映し込むようになります。
  
フレネルという名称を持つ設定項目は、そのような光の振る舞いを再現します。 視点や光源との角度によって反射率と屈折率を変化させます。

鏡面反射シェーダ : CookTorr(クックトーランス)

ここからは、鏡面反射シェーダの説明に入ります。 まずは、CookTorrシェーダからです。

CookTorrシェーダは、Blender Renderでの標準の鏡面反射シェーダです。 新規にマテリアルを作成すると、このシェーダが割り当てられます

鏡面反射シェーダ : CookTorr
鏡面反射シェーダ : CookTorr

光沢のあるプラスチックを表現するのに向いているシェーダです。 後述するPhongシェーダよりも、さらに洗練されたシェーダです。

設定項目は、鏡面反射色と鏡面反射量(Intensity)と鏡面反射硬(Hardness)のみです。

鏡面反射シェーダ : Phong(フォン)

Phongシェーダは、CookTorrシェーダに似た効果を持つ鏡面反射シェーダです。

鏡面反射シェーダ : Phong
鏡面反射シェーダ : Phong

柔らかい光沢になるため、皮膚や有機物の表現に向きます。

設定項目は、鏡面反射色と鏡面反射量(Intensity)と鏡面反射硬(Hardness)のみです。

鏡面反射シェーダ : Blinn(ブリン)

Blinnシェーダは、物理的な計算も考慮されている鏡面反射シェーダです。

鏡面反射シェーダ : Blinn
鏡面反射シェーダ : Blinn

Oren-Nayarシェーダと相性が良く、ペアで使われることが多いです。

設定項目は、鏡面反射色と鏡面反射量(Intensity)と鏡面反射硬(Hardness)に加え、屈折率(IOR : Index Of Refraction)があります。

  
屈折率(IOR : Index Of Refraction)は、空気なら1.0、水なら1.333のように材質によって決めます。 材質ごとの屈折率は、ネットで『屈折率一覧』のようなキーワードで検索すればたくさんが見つかります。

鏡面反射シェーダ : Toon(トゥーン)

Toonシェーダは、トゥーンレンダリング用の鏡面反射シェーダです。

鏡面反射シェーダ : Toon
鏡面反射シェーダ : Toon

同名の拡散反射シェーダのToonシェーダと合わせて利用することが多くなるでしょう。

設定項目は、鏡面反射色と鏡面反射量(Intensity)と鏡面反射硬(Hardness)に加え、大きさ(Size)と滑らかさ(Smooth)があります。 大きさ(Size)には明るくする領域の広さを、滑らかさ(Smooth)には陰影の変化の滑らかさを指定します。

  
拡散反射シェーダのToonシェーダとは違い、大きさ(Size)を大きくする必要はありません。
  
滑らかさ(Smooth)を大きくするとセルアニメーション風にはなりません。

鏡面反射シェーダ : wardIso(ウォードアイソトロピック)

wardIsoシェーダは、プラスチックや金属の表現に最適な鏡面反射シェーダです。 Blender 2.37で追加されました。

鏡面反射シェーダ : wardIso
鏡面反射シェーダ : wardIso

鮮明な光沢からぼんやりした柔らかい光沢まで自由自在です。

設定項目は、鏡面反射色と鏡面反射量(Intensity)と鏡面反射硬(Hardness)に加え、面勾配(Slope)があります。 面勾配(Slope)を小さくすると光沢が鮮明になり、大きくするとぼんやりした柔らかい光沢になります。

ボリュームシェーダ

本ウェブサイトでは初めて紹介することになるボリュームシェーダです。 標準レンダリングエンジンのBlender Renderではボリュームシェーダはこれ1つだけです。

ボリュームシェーダ
ボリュームシェーダ

物体の表面ではなく、内部空間の密度を表現するシェーダです。 内部に粒子があるかのようにレンダリングされます。

Density(密度)やDensity Scale(密度の大きさ)など様々な設定項目を持ちます。

特殊シェーダ : Halo

Haloシェーダは、光輪(ハロー)を表現するための特殊シェーダです。 カメラのレンズに光が差し込んで発生するレンズフレアなどの再現に向きます。

特殊シェーダ : Halo
特殊シェーダ : Halo

面ではなく頂点に作用します。 球体が塗りつぶされたようになっているのは、球体の頂点が多いためです。 無数の光輪が重なってこのように見えます。

Size(光輪の大きさ)やHardness(光輪の光の強さ)など様々な設定項目を持ちます。

次の記事へ

では、長くなりましたので、ここで一区切りします。 続きは次の記事を参照ください

  

まとめ

シェーダには、それぞれ特徴があります。 表現したい物体や演出に合ったものを選択しましょう。

シェーダは大まかに分類すると、サーフェイスシェーダとボリュームシェーダに分かれます。 サーフェイスシェーダは面で物体を表現し、ボリュームシェーダは密度で表現します。

なお、サーフェイスシェーダとボリュームシェーダは併用することができます。

Blender Renderには、10種類のサーフェイスシェーダ、1種類のボリュームシェーダ、1種類の特殊シェーダが搭載されており、特徴は以下の通りです。

サーフェイスシェーダ 特徴
拡散反射シェーダ : Lambert 幅広く使える
拡散反射シェーダ : Oren-Nayar 表面が粗い素材の表現に向いている
拡散反射シェーダ : Toon セルアニメーション風の表現に向いている
拡散反射シェーダ : Minnaert ベルベット生地の表現に向いている
拡散反射シェーダ : Fresnel 対象の面と光源との位置関係だけで拡散反射が計算される
鏡面反射シェーダ : CookTorr 光沢のあるプラスチックの表現に向いている
鏡面反射シェーダ : Phong 皮膚や有機物の表現に向いている
鏡面反射シェーダ : Blinn 物理的な計算が考慮されている
鏡面反射シェーダ : Toon セルアニメーション風の表現に向いている
鏡面反射シェーダ : wardIso 幅広く使える
ボリュームシェーダ 特徴
ボリュームシェーダ 内部空間の密度で表現する
特殊シェーダ 特徴
Haloシェーダ 光輪を表現する
メニュー