学习文章链接:https://zhuanlan.zhihu.com/p/47880664, 感谢!
自定义颜色变量,在材质面板设置颜色来改变物体的颜色
Properties
{
_Color0 ("test Color0", Color) = (1, 1, 1, 1)
}
SubShader
{
Pass//一次模型渲染,以CGPROGRAM开始,以ENDCG结束
{
CGPROGRAM
//#pragma 是unity内置的便已指令命令
#pragma vertex vert //定义一个顶点着色器,语句后面不能跟分号
#pragma fragment flag //定义一个片断着色器
fixed4 _Color0;//属性的中变量如果使用则需要重新声明,float, half, fixed表示精度 语句后面需要跟分号
//实现着色器内容
//顶点着色器中的顶点数据都是直接存储在模型中的,shader通过标识语义自动获取数据
//POSITION:表示输入顶点参数的位置信息
//SV_POSTION:标记顶点着色器变换后的顶点位置坐标,以便片断着色器知道哪个是从顶点着色器传过来的顶点位置信息
//方法返回顶点位置给片断着色器
float4 vert(float4 ver : POSITION) : SV_POSITION{
return UnityObjectToClipPos(ver); //unity封装好的将顶点从模型坐标转换到裁剪坐标的矩阵转换方法
}
//片断着色器主要处理最终显示在屏幕上的像素结果
//SV_TARGET:表示判断着色器返回的结果是用于下一阶段的颜色值,也就是输出到显示器的值
float4 flag() : SV_TARGET{
return _Color0;
}
ENDCG
}
最终结果:
CG/HLSL中的数据类型和shader属性中数据类型:
// CG/HLSL中的数据类型:
// 浮点类型:float、 half、 fixed
// 整型:integer
// 2D纹理:sampler2D
// 3D纹理:samplerCUBE
// 用法:
// float:高精度,32位,常用于世界坐标位置,纹理UV,复杂函数标量计算,如三角函数、幂函数
// half:中精度,16位,常用于本地坐标下的位置、方向向量、HDR颜色等
// fixed:低精度,11位,常用于常规颜色与贴图,以及低精度见的运算
//
// 注:在PC平台都作为float使用,half和fixed在一些移动设备有效
//
// 2D和3D纹理在移动平台会转换成低精度的纹理类型,如果需要中精度或高精度可使用如下声明方法:
// sampler2D_half 或 samplerCUBE_float....
// CG/HLSL中的数据类型和shader属性中类型对应:
// Int/Float/Range 用浮点型表示
// Vector/Color 用float4 、half4、 fixed4表示
// 2D、3D、CUBE则对应 sampler2D、sampler3D、samplerCUBE