ユニティちゃんで学習。最もシンプルなUnity 3D用シェーダーの作り方。
単色を返すシェーダー。
関連ページ
参考URL
自分はuGUI用シェーダーばかり作っていて、いい加減3Dシェーダーも勉強しなくちゃいけないと思っていました。
その勉強メモと解説になります。
事前にこちらの
uGUI用シェーダーの記事
を読むと、よりこのページのことも理解しやすいかもしれません。

テストに使う3Dモデル
最終的にはトゥーンシェーダーの勉強に繋げたいので、公式提供のユニティちゃんを使って実装しています。
こちらの
ユニティちゃんPackege
と
UnityToonShader
を使っていきます。

単色を返す3Dシェーダー
全く実用的ではないですが、最もシンプルなシェーダーは単一色を返すシェーダーになります。
Shader
"Unlit/SingleColor"
{
//マテリアルプロパティを追加
Properties
{
_Color
("Main
Color",
Color)
=
(1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma
vertex
vert
#pragma
fragment
frag
struct
appdata
{
float4
vertex
:
POSITION;
};
struct
v2f
{
float4
vertex
:
SV_POSITION;
};
//プロパティに対応するシェーダー変数を追加
fixed4
_Color;
// 頂点シェーダー
v2f
vert
(appdata
v)
{
v2f
o;
// ワールド座標をカメラを原点とする座標系に変換し、
// かつカメラの画角外の頂点を削ります
o.vertex
=
UnityObjectToClipPos(v.vertex);
return
o;
}
// ピクセルシェーダー
fixed4
frag
(v2f
i)
:
SV_Target
{
return
_Color;
}
ENDCG
}
}
}
最後のピクセルシェーダー(フラグメントシェーダー)で返してる値が実際に画面に反映される色です。
return fixed4(1, 1, 1, 1);
試しにユニティちゃんの服のマテリアルであるdef_matのシェーダーを、さきほど作ったUnlit/SingleColorに変えてみます。
結果は下の通りです。
例えば最後に返す色を白(1, 1, 1, 1)から赤(1, 0, 0, 1)に変えてみると、勿論ユニティちゃんの服の色も変わります。
return fixed4(1, 0, 0, 1);

プロパティで外部から色を指定
マテリアルプロパティ
を追加すると、いちいちコードを書き換えなくても外部から色を指定できます。
Shader
"Unlit/SingleColor"
{
//マテリアルプロパティを追加
Properties
{
_Color
("Main
Color",
Color)
=
(1,1,1,1)
}
SubShader
{
Pass
{
CGPROGRAM
#pragma
vertex
vert
#pragma
fragment
frag
struct
appdata
{
float4
vertex
:
POSITION;
};
struct
v2f
{
float4
vertex
:
SV_POSITION;
};
//プロパティに対応するシェーダー変数を追加
fixed4
_Color;
// 頂点シェーダー
v2f
vert
(appdata
v)
{
v2f
o;
// ワールド座標をカメラを原点とする座標系に変換し、
// かつカメラの画角外の頂点を削ります
o.vertex
=
UnityObjectToClipPos(v.vertex);
return
o;
}
// ピクセルシェーダー
fixed4
frag
(v2f
i)
:
SV_Target
{
return
_Color;
}
ENDCG
}
}
}
最初の方にプロパティのコードが追加されています。
//マテリアルプロパティを追加
Properties
{
_Color
("Main
Color",
Color)
=
(1,1,1,1)
}
途中辺りにプロパティに対応するシェーダー変数が定義されています。
//プロパティに対応するシェーダー変数を追加
fixed4
_Color;
マテリアルのインスペクターを見ると、Main Coorという表示が追加されています。
今回はここまで、次のページでは
座標を色に変換するシェーダー
を作っています。
0
0