画面を綺麗に見せる
ゲームプログラムを組むとよくシェーダーの話題が出てきます。
一昔前のハードは使うことが出来なかったのですが、PS3あたりから普通に使えるようになりました。
シェーダーはモデル表面の質感を高めるために使われます。
昔のハードだと、GPU処理が間に合わない為、素のポリゴンでキャラクタを表示していました。ハードウェアでグーローシェーディングをサポートしていたため、立体的な陰影はつくのですが、材質までは表現できません。
材質表現する為には、ポリゴンをレンダリングする過程で材質の情報を描かなければなりません。
ピクセルレベルで影計算をする事で、凸凹した表面を表現することもできます。
結果的に情報量の多い画面を作れるので、綺麗な画面が完成します。
シェーダーはどんな事をしているのか?
ポリゴン描画をするのはハードウェアがやってくれます。主にグラフィックカードですね。
プログラマが渡すのは、ポリゴンの頂点情報と、ポリゴンの並び順のインデックスやUVなどです。UVはテクスチャのどの辺の絵を参照するかのアドレスのようなものです。
これをGPUにお願いする際に、描画手順を書いたコードを渡します。それがシェーダーです。
シェーダーは主に2種類あり、バーテックスシェーダーと、フラグメントシェーダーがあります。他にもハルシェーダーやジオメトリシェーダー等、時代とともに増えています。
まず、バーテックスシェーダーで頂点レベルで行う演算を行います。頂点カラーとかですね。ポリゴンのワークフローが完成したら、ラスタライザーに渡り、具体的にポリゴンを画面に描いていきます。その時、ピクセルレベルでフラグメントシェーダーがカラーの操作を行います。
結局画面はドットの集合体なので、ピクセルレベルの作業が重要になります。
この段階で、テクスチャから色を持って来て(サンプリング)、光源計算をしながら描いていきます。
すべてのポリゴンが書き終わったら、別のモデルのポリゴンを書いていきます。
すべてのモデルが書き終わったら、いったん画面をテクスチャにして、ポストエフェクトで色味を整えます。ここでエフェクトをかけまくって綺麗な映像を加工します。
シェーダーは覚えるべきか?
覚えなくてもゲームは作れます。
エンジンを使うと、基本的なシェーダーがそろっていますし、コードもいっぱいネット上に上がっています。
覚えた方がゲーム会社では重宝されます。
ただ、それよりも先にゲームアプリケーションの仕組みをしっかりマスターするほうが先です。
マルチタスクの同期は絶対必須なので、そちらを完全にマスターするほうが先です。
コメント