本日は3DCGの描画に関しての記事です。
筆者はグラフィックに対して強い興味があり学び実務経験もありますが、改めて基礎となる部分について自分の言葉でまとめていきます。
〇機械が絵を描く仕組み
パソコンやテレビ、日常生活にあふれているデジタルディスプレイはそれぞれRGBを示すライトで構成される画素の集まりで作られています。
光の三原色によって各画素のライトの点灯具合によってさまざまな色を作成することができます。
これがハードウェア(装置)側の仕組みです。
例えば日の丸を描く場合は白い色に画面中央部に赤い色で描くことができます。
つまり、描画を行うためには色に加えて画素ごとにどの色で光るかを決める必要があります。
ここでスクリーンという平面座標上で描画領域と色を決めるプログラムが実行されています。
以上がスクリーン上に絵が描かれる仕組みです。
この際にハードウェア側は画像や3Dモデルなど何かしらのデータから絵をかきますが、一連の描画に用いられる処理の流れをグラフィックスパイプライン
と呼びます。
絵の描画自体を行っているハードウェアはビデオカード
やグラフィックボード
と呼ばれていますが、グラフィックスパイプラインは主にグラフィックボード上でのデータの扱いやフォーマットを決めたもので基本的にはブラックボックス化されており、変更ができない処理になります。
グラフィックスパイプラインはOSや搭載しているハードウェアによって異なり、このレンダリングパイプラインにアクセスするためのAPIをグラフィックスAPI
と呼びます。
グラフィックスAPIとして有名なものとしてはDirect3D(Windows XBox),OpenGL(Androidなど),WebGL(ブラウザ) ,Metal(Apple),Vulkan(Android)
があります。
グラフィックスAPIを通してソフトウェアからグラフィックボード上のグラフィックスパイプラインにアクセスするため、グラフィックスAPIの進化によって描画の最適化や高度な機能の使用といった変化があります。
またこのグラフィックスパイプラインに従い実行される描画プログラムをシェーダー
とも呼びます。
シェーダーはOSレベルの処理からウェブブラウザ、ゲームといったソフトウェアレベルなど基本的にGUIを使用するすべてのアプリケーションで実行されています。
ソフトウェアごとにサポートしているグラフィックスAPIが異なり基本的にシェーダーもソフトウェアごとに異なるプログラムとなっています。
〇グラフィックスパイプライン
グラフィックスパイプラインは前述のように一般的に人が操作を意識するものではなくブラックボックス化されています。
3Dモデルの描画などを例にとると3Dモデルのデータからカメラが見ている座標に対してどのように配置されるか?遠近法などを加味して計算(具体的にはソフトウェアの座標空間からカメラ座標への変換)
また座標変換によりピクセル単位に落とし込みどの画素がどの色を描画するかを決定できます。 この処理をラフタライズと呼びます。
最後にピクセルごとの色を決めますが、こちらはフラグメントシェーダーステージと呼ばれており、プログラマブル(プログラミングによって開発者が編集可能)なステージです。
一般的にシェーダーとはこのステージで動くプログラムです。(ほかにもプログラマブルなステージ自体はあります。)
〇まとめ
今回の内容を一枚にまとめると次のようになります。
本日は以上です。