未来を創る、テックコミュニティー

代表技術通信~Unityのことをちゃんと勉強する② Shaderについて(2)

草場代表
2020/09/28

こんばんは。代表の草場です。

昨日に引き続き、Shaderに関してです。「【Unity入門】シェーダーを書いてみよう!ShaderLabの簡単な書き方!」に基づき、簡単な処理で実行をしました。モデルを設定した色で表示するシェーダー処理です。
コードの基本構成は以下の通り。
プロパティ情報
関数宣言
変数宣言
頂点シェーダー
フラグメントシェーダー

・プロパティ情報
Properties
{
_Color ("Main Coooooooooooolor", Color) = (1,1,1,1)

// Color プロパティー (デフォルトは白) a____
}

Unity側から送ってほしい情報を書くことになります。ここに書いた内容は「このシェーダーを保持しているマテリアル」の「Inspectorウィンドウ上」に表示されています。
①第一引数「Main Coooooooooooolor」という名称で、
②第二引数「Color型」のデータを取得し、
③のちの変数定義箇所でしている_Color変数へ代入している
確かに、Main Coooooooooooolorと表示されました。

・関数宣言
// 宣言
#pragma vertex vert
// “vert” 関数を頂点シェーダー使用する宣言
#pragma fragment frag
// “frag” 関数をフラグメントシェーダーと使用する宣言

一行目は「頂点(vertex)シェーダーでは、vertという関数を呼び出してね」、二行目は「フラグメント(fragment)シェーダーでは、fragという関数を呼び出してね」という意味です。これを定義することにより、各シェーダー処理が実行される時に、自作した「vert」「frag」関数を呼び出してもらえます。

・変数宣言
// 変数定義
fixed4 _Color; // マテリアルからのカラー

_Colorという変数を準備しています。先ほどのプロパティ情報箇所の指定によって、この変数にUnityから取得してきたデータが入るようになります。

・頂点Shader
// 頂点シェーダー
float4 vert (float4 vertex : POSITION) : SV_POSITION
{
return UnityObjectToClipPos(vertex);
}

頂点シェーダーは、頂点情報を操作するシェーダーです。

・フラグメントShader
// フラグメントシェーダー
fixed4 frag () : SV_Target
{
return _Color; a____
}

フラグメントシェーダーは、ピクセル情報を操作するシェーダーです。ここで以下のエラー出ました。
Shader error in ‘Unlit/MyShader’: unrecognized identifier ‘a____’ at line 38 (on d3d11)

なんとなーーーーくわかってきたので、公式のチュートリアルをもう少し見てみます。

 

 

 

 

 

この記事を書いた人
草場代表
エディター