シェーディングとは、暗さのレベルを変化させることで、3Dモデル( 3Dコンピュータグラフィックスの分野)またはイラスト(視覚芸術)における奥行きの知覚を表現することを指します。[1]シェーディングは、オブジェクトの表面における光の局所的な動作を近似しようとするものであり、光の全体的な動作に該当するシャドウマッピングやシャドウボリュームなどの影を追加する手法と混同しないでください。
陰影は、伝統的に描画において、暗い部分には濃い色や濃い色合いの画材を、明るい部分には薄い色や薄い色合いの画材を塗布することで、暗さの範囲を表現するために使用されます。明るい部分と陰影のある部分を持つ物体などの光のパターンは、紙に奥行きの錯覚を作り出すのに役立ちます。[2] [3]
陰影付けには様々な技法があり、クロスハッチングもその一つです。クロスハッチングでは、異なる間隔の垂直線を格子状に描き、領域を陰影付けします。線が密集しているほど、領域は暗く見えます。同様に、線が離れているほど、領域は明るく見えます。
パウダーシェーディングは、スケッチにおけるシェーディング技法の一種です。スタンピングパウダーと紙のスタンプを用いて絵を描きます(カラーで描きます)。スタンピングパウダーは滑らかで、光沢のある粒子は含まれていません。使用する紙は、パウダーが紙に残るように、細かい粒子がついたものを使用してください。


コンピュータグラフィックスにおいて、シェーディングとは、光源に対するサーフェスの角度、光源からの距離、カメラに対する角度、マテリアルのプロパティ(双方向反射率分布関数など)などに基づいて、3D シーン内のオブジェクト/サーフェス/ポリゴンの色を変更し、フォトリアリスティックな効果を生み出すプロセスを指します。
シェーディングは、レンダリングプロセス中にシェーダーと呼ばれるプログラムによって実行されます。
シェーディングは、光源に対するサーフェスの角度に基づいて、3D モデル内の面の色を変更します。
下の最初の画像では、箱の面がすべて同じ色でレンダリングされています。エッジラインもレンダリングされているため、画像が見やすくなっています。
2番目の画像は、エッジラインを除いた同じモデルです。ボックスの1つの面がどこで終わり、次の面がどこで始まるのかが分かりにくいです。
3 番目の画像ではシェーディングが有効になっているため、画像がよりリアルになり、どの顔がどの顔であるかがわかりやすくなっています。

シェーダーは結果色を計算する際に、照明モデルを用いて表面上の特定のポイントで反射される光の量を決定します。異なる照明モデルは、異なるシェーディング手法と組み合わせることができます。照明は反射される光の量を示すのに対し、シェーディングは最終結果を計算するためにこの情報をどのように使用するかを決定します。例えば、特定のポイントでのみ照明を計算し、残りの部分は補間によって埋めるといった具合です。また、シェーダーは考慮する光源の数なども決定します。
アンビエント光源は、シーン内のすべてのオブジェクトに均等に影響を与える(遍在する)全方向、固定強度、固定色の光源を表します。レンダリング中、シーン内のすべてのオブジェクトは指定された強度と色で照らされます。このタイプの光源は主に、シーン内の様々なオブジェクトの基本的な見え方を示すために使用されます。これは実装が最も簡単な照明タイプであり、光がどのように散乱または反射され、均一な効果を生み出すかをモデル化します。
アンビエントライティングはアンビエントオクルージョンと組み合わせることで、シーンの各ポイントの露出度を表現し、反射するアンビエントライトの量を変化させることができます。これにより、シーン全体に拡散した無指向性の光が生成され、明確な影は投影されませんが、囲まれたエリアや日陰のエリアは暗くなります。その結果、通常は曇りの日に似た視覚効果が得られます。
光は一点から発せられ、あらゆる方向に広がります。
スポットライトをモデル化します。光は単一の点から発生し、円錐状に外側に広がります。
光は、単一平面上の小さな領域から発生します。(点光源よりも現実的なモデルです。)
指向性光源は、シーンから無限の距離とサイズを持つ面光源のように、特定の方向からすべてのオブジェクトを均等に照らします。陰影はありますが、距離による減衰はありません。これは太陽のようなものです。
理論的には、平行な2つの面は、太陽のような遠くにある遮るもののない光源から、ほぼ同じ量の光を照射されます。距離減衰効果により、陰影がより濃く表現される画像が生成されるため、近接した光源でもリアルな画像が得られます。
左の画像は距離減衰を使用していません。2つの箱の前面の色が全く同じであることに注目してください。2つの面が直接重なり合う部分にわずかな違いがあるように見えるかもしれませんが、これは2つの面が交わる部分の下にある垂直のエッジによって生じる錯覚です。
右の画像では、距離減衰が使用されています。手前の箱の前面が奥の箱の前面よりも明るいことに注目してください。また、床は遠ざかるにつれて明るい色から暗い色へと変化しています。
距離の減衰はいくつかの方法で計算できます。
シェーディングでは、ライティング計算のためにサーフェス法線が必要になることがよくあります。法線はモデルの各頂点ごとに事前に計算して保存しておくことができます。


ここでは、ポリゴンの表面法線とすべてのポリゴンが平坦であるという仮定に基づき、各ポリゴンに対して照明が 1 回だけ評価されます (通常はポリゴンの最初の頂点ですが、三角形メッシュの場合は重心の場合もあります)。計算された色はポリゴン全体に使用され、角がシャープに見えます。これは通常、より高度なシェーディング手法の計算コストが高すぎる場合に使用されます。フラット シェーディングでは、スペキュラハイライトのレンダリングが適切に行われません。代表的な頂点に大きなスペキュラ コンポーネントがある場合、その明るさは面全体に均一に描画されます。スペキュラ ハイライトが代表的なポイントに当たらない場合、そのハイライトは完全に失われます。したがって、スペキュラ反射コンポーネントは通常、フラット シェーディングの計算には含められません。
フラットシェーディングではポリゴンの境界で色が不連続に変化しますが、スムースシェーディングではピクセルごとに色が変化するため、隣接する2つのポリゴン間では色が滑らかに変化します。通常、値はまず頂点で計算され、次に双線形補間法を用いてポリゴンの頂点間のピクセルの値が計算されます。スムースシェーディングの種類には、グーローシェーディング[4]やフォンシェーディング[5]などがあります。
問題点:
フォンシェーディングはグーローシェーディングに似ていますが、光の強度を補間する代わりに頂点間の法線を補間し、照明をピクセルごとに評価する点が異なります。そのため、鏡面反射ハイライトはグーローシェーディングモデルよりもはるかに正確に計算されます。
ディファードシェーディングとは、シェーディング計算を2パスに分けてレンダリングすることで後段に遅延させるシェーディング手法です。これにより、シェーディング処理の負荷が高いピクセルを破棄せずに済むため、パフォーマンスが向上する可能性があります。最初のパスでは、サーフェスパラメータ(深度、法線、マテリアルパラメータなど)のみをキャプチャし、2番目のパスで実際のシェーディングと最終的な色の計算を行います。[6] [7] [8] : 884
グーローシェーディングとフォンシェーディングはどちらも双線形補間を用いて実装できます。BishopとWeimer [9]は、照明モデルと法線の双線形補間を適用して得られた式のテイラー級数展開を用いることを提案しました。そのため、2次多項式補間が 用いられました。この双二次補間はBarreraら[10]によってさらに発展させられ、フォン反射モデルの拡散光を補間するために2次多項式が使用され、鏡面反射光には別の2次多項式が使用されました。
KuijとBlake [11]は、ポリゴンの法線と光源方向のベクトルを計算するために球面線形補間(Slerp )を用いた。同様のアプローチはHast [12]によって提案されており、法線の四元数補間を用いており、法線の長さが常に単位長となり、計算負荷の高い正規化を回避できるという利点がある。

コンピュータビジョンにおいて、3Dモデルを再構築する手法の中には、シェーディング、あるいはシェーディングから形状を抽出する手法が存在します。画像のシェーディングに基づいて、1枚の写真から3次元モデルを再構築することができます。[13]