今天动手写第一个shader
1.取消天空盒子 为了更好地显示效果
2.创建一个shader
命名为Chapter5-SimpleShader
3.创建一个材质球
命名为SimpleShaderMat 最后共有两个
4.创建一个球体 放在视野中央 然后将shader赋予材质球 将材质球拖到球体上
5.到了写代码的时候了
Shader "Custom/Chapter5-SimpleShader" {
SubShader{
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment farg
float4 vert(float4 v:POSITION) :SV_POSITION{
return mul(UNITY_MATRIX_MVP,v);
}
float4 farg() : SV_Target{
return fixed4(1.0,1.0,1.0,1.0);
}
ENDCG
}
}
}
代码很简单,但是VS2015貌似不支持shader的编写,没有提示代码什么的,很难受。
6.保存代码后就可以看到效果了(如果你的代码写的有问题 )
报错的shader
没报错的shader
第一个shader圆满完成,接着来看看这些代码都是什么意思。
1.
#pragma vertex vert
#pragma fragment farg
首先,vertex代表我们定义的顶点着色器,我们将顶点着色器代码写在这个函数里,fragment代表我们定义的片元着色器,我们将片元着色器代码写在这个函数里。
2.
float4 vert(float4 v:POSITION) :SV_POSITION{
return mul(UNITY_MATRIX_MVP,v);
这段代码是逐顶点执行的,这里的POSITION是CG/HLSL中的语义,这些将告诉unity把模型的顶点坐标填充到输入参数V中,SV_POSITION则是顶点着色器的输出是裁剪空间中的顶点坐标。
顶点着色器中只包含了一行代码,把顶点坐标从模型空间转换到裁剪空间中。
3.
float4 farg() : SV_Target{
return fixed4(1.0,1.0,1.0,1.0);
frag函数并没有输出,片元着色器的代码很简单,返回了一个表示白色的fixed4类型的变量(fixed4(1.0,1.0,1.0,1.0)),(0,0,0)表示黑色,(1,1,1)表示白色。
今天到此为止。