4 / 4 GPUによる描画の流れ
Sceneの情報が一枚の画像になるまでを、役割ごとに説明します。
カメラを動かした結果
保存したSceneでCameraの位置だけを少し変えます。SphereのMeshやMaterialを編集していなくてもGameビューが変わることを確かめ、Cameraを元の位置へ戻します。これを手掛かりに、Sceneのデータから画面を作る処理を読みます。
リアルタイムレンダリング
シーンの情報から画像を作るレンダリング
画面に置かれた要素の情報から、最終的な画像を作る処理をレンダリングと呼びます。
図形、画像、文字、材質、光などの情報をもとに、最終的な見え方を計算します。
映画CGのように時間をかけて高品質に描く方法もあればゲームのようにリアルタイムで高速に描く方法もあります。
この授業で扱うシェーダーは、リアルタイムレンダリングの中核を担うグラフィックスプログラミングの技術です。
毎フレームすばやく計算するリアルタイムCG
ゲームは操作に反応して即座に画面を更新する必要があります。
フレームレートが60fpsなら、1フレームあたり約16.67msで描画を完了させる必要があり、高速な処理が求められます。
映画やアニメのオフラインレンダリングのように1枚の絵を何分もかけて描画するわけにはいかないため、計算の効率化が重要になります。
リアルタイムCGでは、表現の説得力と計算効率のバランスが物理的な正確さよりも重視される場合があります。
CG映像を構成する要素
最終的な映像は、1つの設定ではなく複数の要素の組み合わせで決まります。
映像表現を並列計算するGPU
GPU は Graphics Processing Unit の略です。
CPU が処理を順番に考えるのが得意なのに対し、GPU は同じ種類の計算を大量に回すことが得意なプロセッサです。
画面には大量のピクセルがあるため、グラフィックス表現では並列での計算能力が非常に重要です。
シェーダーはそのための機能を持つ GPU 上で動くプログラムです。
描画パイプラインの基本
頂点シェーダーとフラグメントシェーダー
頂点シェーダー
モデルの頂点位置や頂点ごとの情報を計算します。
画面にどう配置されるか、形に関わる処理を担当します。
フラグメントシェーダー
各ピクセルの色を計算します。
光の当たり方やテクスチャーを踏まえ、最終的な見た目に関わる処理を担当します。
リアルタイムCGでは、通常まず形に関わる計算を行い、その後で色に関わる計算を行う流れで描画を進めます。
Meshとマテリアルが画面に出るまで
- Mesh が形の情報を持つ
- マテリアルがシェーダー と各種設定値を持つ
- 頂点シェーダーが頂点を画面用に計算する
- フラグメントシェーダーが各ピクセルの色を決める
- 結果として画面に表示される
描画の流れを確認する4つの問い
- Mesh は形
- Texture は画像
- マテリアルは設定の束
- シェーダー は見た目を計算するルール
シェーダーを視覚的に組み立てるShader Graph
Shader Graph は Unity のノードベースなシェーダー作成ツールです。
コードを直接書かずに処理の流れを組み立てられます。
ただし中で何を計算しているかを理解しないと応用できません。
HLSL はシェーダーをテキストで記述するためのプログラミング言語です。
今期は Shader Graph を中心に学び、必要に応じて HLSL にも触れます。
条件を変えた確認
「形の頂点」「描画時の色」「どこから見るか」を、Mesh・Shader・Cameraへ対応付けてください。次にMaterialの色だけを変える操作を、この流れの中で説明してください。
予測と結果の照合
Meshは頂点などの形状データ、Cameraは見る位置や投影、Shaderは頂点や色を扱う描画計算を担当します。Materialの色はShaderへの入力値です。
Materialの基準値を保存します。次回は色を出力する計算をShader Graphで作ります。
授業全体の到達目標
授業の到達目標
Shader Graphを使った教材の概要
- Unity Shader Graphで基本的なシェーダーを作成できる
- UV操作、ノイズ、ブレンドなどを使って見た目を制御できる
- ベクトル、法線、反射、影、頂点変形の役割を説明できる
- 自作したシェーダーをエフェクト制作やゲーム制作へ利用できる
ゲーム制作者は、すべてのグラフィックス素材を自作する必要はありません。
一方で、調達したアセットを作品へ合わせて調整し、描画負荷を判断するには、見た目が何から作られているかを理解する必要があります。
CGプログラマーを目指す場合は、この基礎がより高度なレンダリング技術を学ぶ土台になります。
- 一枚の画像を作る処理をレンダリングと呼ぶことを説明できる。
- Materialの変更とCameraの変更を別の入力として説明できる。