【シェーダー勉強①】Unityシェーダーの概要
はじめに
お仕事の関係でシェーダーについて色々と調査する必要が出てきましたし、今までも個人開発の必要に応じて勉強していましたが、必要になる度にまた同じような内容を勉強し直していたので、内容としてはよくある形にはなりますが、勉強として一から順に内容をまとめてみたいと思います。
シェーダーとは
細かい意味はWikipedia先生にお任せして、シェーダーとは「描画方法を記述したプログラム」ということだと思います。
シェーダー(英: shader)とは、3次元コンピュータグラフィックスにおいて、シェーディング(陰影処理)を行うコンピュータプログラムのこと。「shade」とは「次第に変化させる」「陰影・グラデーションを付ける」という意味で、「shader」は頂点色やピクセル色などを次々に変化させるもの(より具体的に、狭義の意味で言えば関数)を意味する。
Unityのシェーダーについて
Unityでのシェーダーの種類について
Unityでは「固定関数シェーダー」「サーフェスシェーダー」「頂点/フラグメントシェーダー」の3種類で記述が可能。
・固定関数シェーダー
プログラマブルシェーダーをサポートしていない古いハードウェアのためのもの。
たぶん書くことはなさそうなので割愛。
・サーフェスシェーダー
ライティングや影を扱う場合に記述を簡単に行うものためのもの。
ライティングの処理は複雑なものだけど、サーフェスシェーダーを使うと簡潔な書き方でライティングなどを含んだシェーダーを記述することが可能。
ただし、自動計算してくれることや複数のPassを記述することが出来なかったりするので、より複雑な表現を求めている場合には向いていなさそう。
ステンシルとかアウトラインとか複数Passがあるものは無理そう。
・頂点/フラグメントシェーダー
基本的にはこれを使うことになりそう。
最も柔軟なことが出来るシェーダー、頂点アニメやライトの計算を逆に行わなかったり、ステンシルやアウトラインなどの複数Passによる処理などが可能。
シェーダー言語について
Unityでシェーダーを記述する場合は「ShaderLab」という形式で記述し、実際の処理自体は「Cg」「HLSL」で構成されている
・「ShaderLab」はUnity独自形式
・「Cg」はNVIDIAが開発したシェーダー言語
・「HLSL」はマイクロソフトが開発したDirectXのシェーディング言語
おわりに
頂点シェーダーの細かい内容や実際のShaderLabの記述に関しては次回まとめたいと思います。
それでは今回はこの辺で
(´・ω・`*)ノシ
参考文献
Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた - 凹みTips