本日はShader勉強枠です。
今回までUnityのShaderを勉強していきました。
今回はここまで勉強したShaderの知識を一度振り返って復習します。
〇Shaderとは?
UnityのShaderは『3Dオブジェクトを描画するためのプログラム』です。
Unity内でマテリアルと紐づくことでオブジェクトの描画を行っています。
ShaderLabという言語で記述し、中身はCG/HLSL言語で記述されています。

〇ShaderLabの中身
ShaerLabを大雑把にみると次のようになります。
Shader "ShaderName" {
Properties {
//...
}
SubShader {
//...
}
FallBack "Diffuse"
}
〇Shaderの構造体
Shaderは主に以下の構造体で構成されています。
●Name
Shader ○○/▽▽
{
---Shaderの中身---
}
このShaderは○○というカテゴリーの▽▽という名前のShaderになります。
例えば
Shader Custom/Alpha{
---Shaderの中身---
}
と
Shader Custom/Beta{
---Shaderの中身---
}
という2種類のShaderが存在した場合UnityではCustomの中にAlphaとBetaが表示されます。

●Properties
ここに記述したものはUintyのマテリアルでパラメータとして扱うことができます。
C#でいうところのPublic Classのような扱いでしょうか?
Properties{
//Color
_Color("Color",color) = (1,1,1,1)
//テクスチャ
_MainTex ("Albedo (RGB)", 2D) = "white" {}
//スライダー(スライダー)
_Power("Power",Range(0.1))=0
}
ここで記述したパラメータを使って処理を行う形になります。
Propertiesで扱えるパラメータの形は主に以下のようになります。
・Color
Properties{
_Color("Color",color)=(1,1,1,1)
}
Unityでカラーを扱うことができます。

・Range
マテリアルでスライダーを表示させることができます。
Properties{
_Power("Power",Range(0,1))=0.5
}
右辺に与えた数値は初期数値になります。複雑な表現を行うShaderには必ずと言ってもいいほど使用されています。この場合細かい表現が行えます。

・Texture(画像)
画像を扱う場合のプロパティです。
Properties{
_MainTex("MainTexuter",2D)= "White"{}
}
・Float
Properties{
_Float("Float", Float) = 10.0
}

FloatはRangeと同様数値を扱うことができます。
x,y,z,wそれぞれのベクトルを扱えます。
Properties{
_Vector("Vector", Vector) = (0.5, 0.1, 0.1, 0.1)
}

Vectorは例えば海の波のように一定方向にテクスチャが流れるShaderでの流れる向きや速度を設定するなどの場面で使われるようです。
●SubShader
SubShader枠はShaderを実際に記述する場所になります。
CGPROGRAM~ENDCGの間はcg/HLSL言語で記述されます。
#pragma ○○
でどのようなShaderを書くかを記述します。
#pragma surface surf Lambert
ここまではサーフェースShaderのLambertのライティングで記述していました。
●Input構造体
Input構造体は描画するオブジェクトのテクスチャなど座標を扱うものを記述します。
Input{
float2 uv_MainTex;
float3 viewDir;
}
見る角度によってオブジェクトの状態を変える時などはviewDirを用います。 これは視線ベクトルを意味します。
● void surf() {}
実際の処理を記述します。
void surf(Input IN,inout SurfaceOutput o)
Input構造体の情報をoとして扱うという意味です。
void surf(Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D(_MainTex, IN.uv_MainTex).rgb;
}
o.Albedo = tex2D(_MainTex,IN.uv_MainTex).rgb;
ここではoのアルベド(光の反射)は_MainTexのRGBを用いることが記述されています。
〇Fallback
最後にもしこのShaderがデバイスで動かなかった場合代わりに使用するShaderが記述されます。
以上でShaderの基本の復習になります。
前回最初に触った時よりもすらすら理解できています。
次はここまで勉強したことを用いて応用します。