ツクロウヤ

Unityによるゲーム開発記

【シェーダー勉強①】Unityシェーダーの概要

はじめに

 お仕事の関係でシェーダーについて色々と調査する必要が出てきましたし、今までも個人開発の必要に応じて勉強していましたが、必要になる度にまた同じような内容を勉強し直していたので、内容としてはよくある形にはなりますが、勉強として一から順に内容をまとめてみたいと思います。

シェーダーとは

細かい意味はWikipedia先生にお任せして、シェーダーとは「描画方法を記述したプログラム」ということだと思います。

シェーダー - Wikipedia

シェーダーshader)とは、3次元コンピュータグラフィックスにおいて、シェーディング(陰影処理)を行うコンピュータプログラムのこと。「shade」とは「次第に変化させる」「陰影・グラデーションを付ける」という意味で、「shader」は頂点色やピクセル色などを次々に変化させるもの(より具体的に、狭義の意味で言えば関数)を意味する。

Unityのシェーダーについて

Unityでのシェーダーの種類について

Unityでは「固定関数シェーダー」「サーフェスシェーダー」「頂点/フラグメントシェーダー」の3種類で記述が可能。

・固定関数シェーダー

プログラマブルシェーダーをサポートしていない古いハードウェアのためのもの。
たぶん書くことはなさそうなので割愛。

サーフェスシェーダー

ライティングや影を扱う場合に記述を簡単に行うものためのもの。
ライティングの処理は複雑なものだけど、サーフェスシェーダーを使うと簡潔な書き方でライティングなどを含んだシェーダーを記述することが可能。
ただし、自動計算してくれることや複数のPassを記述することが出来なかったりするので、より複雑な表現を求めている場合には向いていなさそう。
ステンシルとかアウトラインとか複数Passがあるものは無理そう。

・頂点/フラグメントシェーダー

基本的にはこれを使うことになりそう。
最も柔軟なことが出来るシェーダー、頂点アニメやライトの計算を逆に行わなかったり、ステンシルやアウトラインなどの複数Passによる処理などが可能。

シェーダー言語について

Unityでシェーダーを記述する場合は「ShaderLab」という形式で記述し、実際の処理自体は「Cg」「HLSL」で構成されている

・「ShaderLab」はUnity独自形式
・「Cg」はNVIDIAが開発したシェーダー言語
・「HLSL」はマイクロソフトが開発したDirectXのシェーディング言語

おわりに

頂点シェーダーの細かい内容や実際のShaderLabの記述に関しては次回まとめたいと思います。

それでは今回はこの辺で
(´・ω・`*)ノシ

参考文献

シェーダー - Unity マニュアル

シェーダーを書く - Unity マニュアル

Unity のシェーダの基礎を勉強してみたのでやる気出してまとめてみた - 凹みTips

シェーダー: ShaderLab と固定関数シェーダー - Unity マニュアル

ShaderLab 構文 - Unity マニュアル