Unity Shader構文の概要
1.unityには2つのレンダリング関連コンポーネントがあります.mesh Filterは、三角面からなるメッシュmeshを格納するために使用され、三角面の頂点情報の一部が格納されます.Mesh rendererは外観をレンダリングするために使用されます.これは必須で、マテリアル(shader+マップ)を指定することができます.マップは必要ありません.2.shaderはopenGL,directXによりコンパイル実行される.OpenGLはGLSLを用いてshaderを記述し,dxはHLSLを用いてshaderを記述する.しかし、英偉達のCGはプラットフォーム間で実現されたため、unityはCGをパッケージ化し、shaderLabにパッケージ化した.3.3種類のシェーダ:サーフェスシェーダ:Surface Shader(比較的簡単で、パッケージ化されており、マルチライトの処理に適しています)頂点/チップシェーダ:Vertex/Fragment Shader(ベースの下部、他の2種類はその上でパッケージ化されており、より多くの機能を実現できます)固定関数シェーダ:Fixed Function Shader(旧世代のグラフィックスカード、ほとんど使用されていません)4.shaderの基本フレームワーク
必要なパラメータをクラスで集約することもできます
Shader "myshader"{
Properties{
_Color("Color",Color)=(1,1,1,1)
_Vector("Vector",Vector)=(1,1,1,1)
_Int("Int",Int)=4
_Float("Float",Float)=4.4
_Range("Range",Range(1,11))=6
_Cube("Cube",Cube)="white"{}
_2D("Texture",2D)="red"{}
_3D("Texture",3D)="black"{}
}
SubShader{
Pass{
CGPROGRAM
// , pass
float4 _Color
float3 _t1;
float2 _t;
float _Int;
float _Range;
float _Float;
sampler2D _2D;
samplerCube _Cube;
sampler3D _3D;
#pragma vertex vert
// ,
// : ( ), 。
#pragma fragment frag
// ,
// :
// float4 ,Position v ,SV_Position 。
float4 vert(float4 v:POSITION):SV_POSITION{
return mul(UNITY_MATRIX_MVP,v);//MATRIX ,
}
//SV_Target
// fixed float ,fixed -2 +2 ,float 32 ,half 16
fixed4 frag():SV_Target{
return fixed4(1,1,1,1);// fixed4
}
ENDCG
}
}
Fallback "VertexLit"
}
必要なパラメータをクラスで集約することもできます
// float4 ,Position v ,SV_Position 。
//application to vertex
struct a2v{
float4 vertex:POSITION;// UNITY vertex
float3 normal:NORMAL;// UNITY normal
float4 texcoord:TEXCOORD; // UNITY texcoord
};
struct v2f{
float4 position:SV_POSITION;
float3 temp:COLOR0;
};
//vert ,
v2f vert(a2v v){
v2f f;
f.position=mul(UNITY_MATRIX_MVP,v.vertex);//MATRIX ,
f.temp=v.normal;
return f;
}
//SV_Target
//frag , vert , GPU
// fixed float ,fixed -2 +2 ,float 32 ,half 16
fixed4 frag(v2f f):SV_Target{
return fixed4(f.temp,1);// fixed4
}