本日はShader枠です。
本日私の所属している会社でShader勉強会を開催しました。
きっかけはインターン生として参加していただいている方からShaderに関する相談を受けたことや社内のエンジニアでShaderに興味を持っている人が増えてきたので、時間をとって共有するという感じで開催しました。
ここでは2年ほど独学で学んだ筆者がShaderを学ぶ上で躓いたことなどを思い出しながらShaderに関して紹介していきます。
〇Shader勉強会目的
今回は以下のような方を対象としています。
・UnityでShaderって聞いたことあるけどよくわからない。
・Shader書いてみたいけどよくわからない。
今回の勉強会を受けて次のような目的で開催しています。
・Shaderが何をしているのか?Shaderがやっていることを理解する。
・UnityにおけるShaderの理解を行う。
・Unityで基礎的なShaderが書けるようになる。
〇Shaderとは何か?
Shaderは一般的にコンピューターにおける描画プログラム言語もしくは実行されているプログラム自体を指します。
一般的にPCでは出力装置としてディスプレイで何らかの表示が出力されています。 この表示を行うプログラムと考えてよいですが、Shaderと一般的に言われるとリアルタイムorプリレンダーにおける3DCG空間における描画を行うプログラムを指す。
3DCG空間とは、XYZ軸で位置があらわされる空間を指します。
〇Shaderが出力するもの
Shaderはプログラムであるといいましたが、プログラムであれば何かしらの出力を行っています。
Shaderは一般的にディスプレイのピクセルごとの表示色(RGB)を出力します。
これを理解するためにはディスプレイのピクセル=画素を抑えている必要があります。
パソコンやスマホの画面はRed(赤)、Green(緑)、Blue(青)の3つのライトで構成される画素の集まりで構成されています。
Shaderではこのライトの発光を制御し、画面に表示される色を決定しています。
また、この画面は例えば4kモニターの場合800万の画素で構成されており、1フレームで800万のがそのコントロールを行っています。
このために並列計算を得意とするGPU上でShaderは実行されています。
〇ShaderとGPU
前述のとおり一般的なプログラム言語ではCPU上で処理がおこなれますが、ShaderはGPU上で処理が行われる点が特徴です。
CPUとGPUは『CPUが一人の天才』に対し『GPUが1万の凡人』というようにあらわされることがありますが、GPUはCPUに比べ計算力が低いがはるかに多くのコアを持っており、同時計算できる計算量がけた違いに多いという特徴があります。
GPUは近年では、その並列計算力を応用してAIや物理シュミレーションなどの膨大なパラメータを必要とする計算分野で使用されることが増えてきましたが、GPU=GraphicsProcessingUnitと呼ばれる通り、もともと並列演算能力を使用し描画(グラフィック)計算及びその描画出力に特化して搭載されたパーツです。
こういった経緯からもShaderは前述のように1フレームで数万の出力を出せるようにGPU上で実行されています。
〇第一章まとめ
第一章ではShaderに関して触れました。
Shaderは一般的に最終的に色を返すプログラムで、数万画素で構成される画面を1フレームの間に描画するために並列計算が得意なGPU上で実行されています。
第二章ではGPU上でどのように処理が実行されているのかを紹介します。