Skip to content
第13回 レンダリングパイプライン入門

3 / 4 頂点から画素までの処理 ​

このステップの目的

レンダリングパイプラインの主要段階を理解し、前期に学んだ処理がVertex StageとFragment Stageのどこに位置するか整理します。

3Dの形が画面へ届くまで ​

Meshの頂点が、そのまま画面のPixelになるわけではありません。画面に描くには、まず頂点の位置をCameraから見た位置へ変換します。次に三角形が覆う画面上の領域を求め、その領域の色を計算します。

Vertex Stage ​

Vertex Stageでは、Meshの各頂点からPosition、Normal、UVなどを受け取ります。主な処理は、頂点の位置を画面へ投影できる座標に変換することです。

頂点アニメーションでは、Vertex StageでPositionを動かします。頂点の位置が変わると、その頂点から作る三角形の形も変わります。今回は変形Shaderを実装せず、位置を変える処理と表面の色を変える処理の違いを学びます。

Rasterization ​

Rasterizationでは、画面へ投影した三角形がどのPixelを覆うかを調べます。その結果から作るのがFragmentの候補です。この処理はVertex StageとFragment Stageの間にあり、三つの頂点のUVや色などを三角形の内側へ補間します。

Rasterizationでは色を決めません。Fragment Stageで計算する位置と、その計算に使う補間済みの値を用意します。

Fragment Stage ​

Fragment Stageでは、Texture、色、Normal、Lightなどを使って表面の描画に必要な値を計算します。前期のTexture Sampling、PBR、フレネルなど、多くの表面表現がこの段階に関係します。

FragmentとPixelは同じものではありません。一つのPixelの位置に、複数のFragment候補が重なることがあります。その候補をDepth TestやBlendで処理した結果が、最終的な画面に残ります。

Depth Testで手前と奥を決める ​

Depth Bufferには、各Pixelの位置でどの表面がCameraに近いかを記録します。保存済みのDepthとFragmentのDepthを比べると、奥に隠れるFragmentを除外できます。実際のGPUでは、条件によってFragmentの計算より前に判定することもあります。

Color BufferとDepth Buffer ​

Color Bufferに保存するのは、画面に表示する色です。Depth Bufferには距離に関係する値を保存します。Depthそのものは完成画面に見えなくても、どの表面を表示するかの判定や、その後の画面効果に使います。

半透明では順序も重要になる ​

不透明な物体では、Depthから手前の表面を決めやすくなります。半透明な物体は背景色と混ぜるため、一般に奥から手前へ描く必要があります。Depth Testだけでは解決できない場合もあり、描く順序によって見た目が変わります。

実習:見えている変化をStageへ結び付ける ​

Frame DebuggerをDisableにして、Field > Capsuleを選んでください。TransformのPosition Xを-2から-1へ変えると、Capsuleの輪郭と影の位置が一緒に動きます。Objectの配置を変えたため、頂点をCameraへ投影する位置も変わった結果です。

PositionをUndoで戻し、RedのBase Mapの色を変えてください。輪郭は変わらず、表面の色が変わることを確認します。色の影響を比べた後は、すぐにUndoで元へ戻してください。

続いてStanford Bunnyを選び、Mesh Rendererのチェックを外します。再びチェックを入れ、ウサギ越しに見えるCube、Sphere、床の模様がどう変わるかを見てください。ウサギのFragment Stageでは、既に描いた背景のTextureも入力に使っています。最後に、MeshからColor Bufferまでの処理を入力・計算・出力の矢印で結びます。

頂点から画面までの概念図
Mesh
位置・法線・UV
Vertex Stage
Vertex Stage
投影された頂点
Rasterization
Rasterization
画面上の候補と補間された値
Fragment Stage
Fragment Stage
深度判定・合成を通る色
Color Buffer
Depth Buffer
手前と奥の判定
Color Buffer

この図は各段階の役割を示しています。GPUが常にこの順序で実行することを示す図ではありません。Depth Testは手前と奥を比べる処理、Depth Writeは結果をDepth Bufferへ書く設定です。Transparentに分類された物体でも、Depth Writeが無効とは限りません。このSceneのRefraction MaterialはDepth Writeが有効です。

入力・計算・出力で読む ​

PipelineはStage名だけで覚えず、各段階の処理を説明してください。何を受け取り、何を計算し、次へ何を渡すかを順にたどります。この読み方は、第14回以降のHLSL関数や画面効果にも使います。

チェックリスト
  • Vertex Stageの入力と出力を説明できる
  • Rasterizationが三角形からFragment候補を作ると説明できる
  • FragmentとPixelを区別できる
  • Color BufferとDepth Bufferの役割を区別できる
  • 前期の表現をPipeline上の段階へ配置できる