从unity编辑器Unity2020.1.0f1(is Buy)\Unity\Editor\Data\CGIncludes\UnityCG.cginc ,找到已经 写好语义bind的struct结构体放到自己编写的shader脚本里面使用
Shader "P2 MyShader" {
//属性,可以在编辑器里面bind和修改的
Properties {
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_Glossiness ("Smoothness", Range(0,1)) = 0.5
_Metallic ("Metallic", Range(0,1)) = 0.0
}
SubShader{
Pass{
//第一步:顶点初始化[系统做]
CGPROGRAM //插入 cg代码开始
struct my_struct{ //定义结构体
int a; //类型 名称
};
float sum(float a,float b){ //定义函数
return a+ b;
}
struct my_vert_data{//用结构体 存储语义参数 ;建议参考unity内置cg库的结构体来bind语义
float4 pos : POSITION;
};
//第二步:编写顶点shader
#pragma vertex my_vert //把my_vert作为顶点着色器入口
fixed4 _Color; //(表示颜色)在着色器里面使用 属性块里面的变量 名字必须跟属性块的变量名一致
sampler2D _MainTex; //(表示纹理)在着色器里面使用 属性块里面的变量 名字必须跟属性块的变量名一致
//怎么样获得上一个工位的参数(pos): --> 用语义bind句获取(float4 pos : POSITION),打算给下一个工位返回什么? 括号后就再bind语义一次 (): POSITION
float4 my_vert(my_vert_data data) : POSITION{ //使用语义bind结构体
return UnityObjectToClipPos(data.pos); //mul(UNITY_MATRIX_MVP,pos) 位置转到世界空间,返回语义bind结构体对应bind语义
}
//第三步:Tellellation曲面化[系统做]
//第四步:几何shader[系统做]
//第五步:裁剪,投影[系统做]
//第六步:三角形遍历[系统做]
//第七步:编写像素(片元)shader 上色并且返回颜色给第八步
#pragma fragment my_frag //把my_frag作为(像素)片元着色器入口,拿到上一个工位的参数进行上色,完会返回1个颜色给第八步
/*
fixed4 my_frag(float2 uv : TEXCOORD0) : COLOR{ //float2存放UV bind:拿到上一个工位的第一套纹理语义 bind:返回颜色语义
//return fixed4(1.0,0.0,0.0,1.0);
//return _Color; 返回引用属性块里的变量
return tex2D(_MainTex,uv); //使用标准内置函数查找 纹理图片UV的颜色
}
*/
fixed4 my_frag() : COLOR{
return _Color;
}
//第八步:输出[系统做]
ENDCG //插入 cg代码结束
}
}
FallBack "Diffuse"//降级处理
}