シェーディング
コンピューター グラフィックスでは、シェーディングとは、3D シーン内のオブジェクト/サーフェス/ポリゴンの色を、サーフェスの照明に対する角度、照明からの距離、カメラに対する角度、マテリアル特性などに基づいて変更する処理のことです (ただしこれに限定されるものではありません)。
シェーディングは、シェーダーと呼ばれるプログラムによってレンダリング プロセス中に実行されます。
光源に対する表面の角度
シェーディングは、光源に対する表面の角度に基づいて 3D モデル内の面の色を変更します。
次の画像は、同じモデルをエッジ ラインなしでレンダリングしたもので、エッジ ラインもレンダリングされており、画像が見やすくなっています。
三番目の画像はシェーディングを有効にしており、画像をよりリアルにし、どの面がどの面であるかをわかりやすくしています。
ライティングの種類
Shader は結果の色を計算するとき、次のように表示します。 は、ライティングモデルを使用して、サーフェス上の特定のポイントで反射される光の量を決定します。 異なるライティングモデルは異なるシェーディング技術と組み合わせることができます。ライティングが光の反射量を示す一方で、シェーディングはこの情報が最終結果を計算するためにどのように使用されるかを決定します。 例えば、特定の点でのみライティングを計算し、残りを埋めるために補間を使用することができます。 シェーダーは、考慮する光源の数などについても決定することができます。
Ambient LightingEdit
環境光源は、シーン内のすべてのオブジェクトに等しく影響を与える (omni-present) 全方向、固定強度および固定色の光源を表します。 レンダリング中、シーン内のすべてのオブジェクトは、指定された強度と色で明るくされます。 このタイプの光源は主に、シーン内のさまざまなオブジェクトの基本的な表示を行うために使用されます。
アンビエント照明は、アンビエント オクルージョンと組み合わせて、シーンの各ポイントがどの程度露出しているかを表現し、それが反射できるアンビエント ライトの量に影響します。 これにより、シーン全体に拡散した無指向性の照明が生成され、明確な影はできませんが、囲まれ、保護された領域は暗くなります。
ポイント照明の編集
光は単一の点から発し、すべての方向に広がります。
スポットライトの編集
スポットライトをモデル化します: 光は単一の点から発し、円錐形で外部に広がります。 (点光源よりも現実的なモデルです。)
指向性光源の編集
指向性光源は、サイズ無限、シーンからの距離無限のエリアライトのように、与えられた方向からすべてのオブジェクトを等しく照らします。 これは太陽のようなものです。
Distance falloffEdit
理論的には、太陽のような遮るもののない遠くの光源から、平行な 2 つの表面はほぼ同じ量に照らされます。
左の画像は、距離のフォールオフを使用していません。 2 つのボックスの前面の色がまったく同じであることに注目してください。 2 つの面が直接重なる部分にわずかな違いがあるように見えるかもしれませんが、これは、2 つの面が重なる部分の下にある垂直のエッジによる目の錯覚です。
右の画像は、距離フォールオフを使用しています。 近い方の箱の前面が、奥の箱の前面より明るいことに注意してください。
- 距離の累乗 – 光源からの距離 x にある任意のポイントについて、受け取る光の強さは 1/xn に比例します。
- 線形 (n = 1) – 光源からの距離 x の任意の点で、受光強度は 1/x に比例します。
- 二次 (n = 2) – 光に自由な経路がある場合 (すなわち、霧や光を吸収または分散する空気中の他のものがない)、これは現実に光強度が減少する方法です。
フラット シェーディングの編集
ここで、フラットなシェーディングを行うことができます。 ライティングは、ポリゴンの表面法線とすべてのポリゴンが平らであるという仮定に基づいて、各ポリゴン(通常はポリゴンの最初の頂点、三角メッシュの場合はセントロイド)に対して一度だけ評価されます。 計算された色はポリゴン全体に使用され、角がシャープに見えるようになります。 これは通常、より高度なシェーディング技術があまりにも計算コストがかかる場合に使用されます。 スペキュラハイライトは、フラットシェーディングではうまくレンダリングされません。 たまたま代表頂点に大きなスペキュラ成分があった場合、その輝度は面全体に一様に描かれます。 スペキュラハイライトが代表点にかからない場合、完全に見逃される。
スムーズシェーディングの編集
ポリゴンの境界で色が不連続に変わるフラットシェーディングとは対照的に、スムーズシェーディングではピクセルごとに色が変わり、隣接する 2 つのポリゴン間で色が滑らかに変化する。 通常、まず頂点で値を計算し、ポリゴンの頂点間の画素の値をバイリニア補間を用いて計算する。
グロー シェーディングの編集
- 各ポリゴン頂点の法線を決定します。
- 各頂点に照明モデルを適用し、頂点の法線から光強度を計算します。
- 表面のポリゴン上でバイリニア補間を使用して頂点の強度を補間します。
問題点
- 照明が頂点でのみ計算されるため、不正確さ (特に大きな三角形上のスペキュラー ハイライト) が明らかになりすぎる場合があります。
フォン シェーディングの編集
フォンシェーディングは、光強度を補間する代わりに、法線が頂点間で補間され、照明がピクセルごとに評価されることを除いて、グーロー シェーディングと似ています。
- ポリゴンの各頂点について法線 N を計算します。
- バイリニア補間を使用して、各ピクセルについて法線 Ni を計算します。 (法線は毎回再正規化する必要があります。)
- 各ピクセルに照明モデルを適用し、Ni から光強度を計算します。
遅延シェーディング
Deferred Shading は、シェーディング計算を 2 パスでレンダリングして後の段階に先送りし、高価なシェーディング ピクセルを廃棄しないことにより性能を向上できる可能性を持つシェーディング技法です。 最初のパスはサーフェス パラメーター (深度、法線、マテリアル パラメーターなど) をキャプチャするだけで、2 番目のパスは実際のシェーディングを実行し、最終カラーを計算します。 Bishop と Weimer は、照明モデルと法線のバイリニア補間を適用した結果の式のテイラー級数展開を使用することを提案しました。 したがって,2次多項式補間が使用された. このタイプの二次補間は、Barrera らによってさらに詳しく説明され、1 つの 2 次多項式が Phong 反射モデルの拡散光を補間するために使用され、別の 2 次多項式が鏡面光に使用されました。
球面線形補間 (Slerp) が Kuij と Blake によってポリゴン上の法線と、光源への方向のベクトルの両方を計算するために使用されています。 同様のアプローチは Hast によって提案されましたが、法線が常に単位長さを持ち、計算の多い正規化が回避されるという利点のある、法線のクォータニオン補間を使用します。 smooth shadingEdit
Flat | Smooth |
---|---|
Uses the same color for every pixel in a face – usually the color of the first vertex | Smooth shading uses linear interpolation of either colors or normals between vertices |
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round | The edges disappear with this technique |
Same color for any point of the face | Each point of the face has its own color |
Individual faces are visualized | Visualize underlying surface |
Not suitable for smooth objects | Suitable for any objects |
Less computationally expensive | More computationally expensive |