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
		}