最近项目要用到shader,所以最近通过官网资料研究了下,顺便记录下:
该文章出自【狗刨学习网】
Unity中的shader可以分为三类:
1:表面着色器(surface shaders)
2:可编程着色器( vertex and fragment shaders )
3:固定着色器(fixed function shaders)
先写最简单的fixed function shaders,先看下代码
Shader
"FixedShader/Test"
//shader名字
{
Properties
//变量块
{
MainColor(
"Main_Color"
, Color ) = (1,0.5,0.5,1)
//定义一个名字为MainColor的变量,类型为Color(RGBA格式),同时给一个默认值
}
SubShader
//代码块
{
pass
{
Color[MainColor]
//使用上面定义的变量,将对象颜色设置为变量的值
}
}
FallBack
"Diffuse"
//如果当前显卡不支持上面的SubShader,则使用这个
}
"FixedShader/Test"
//shader名字
{
Properties
//变量块
{
MainColor(
"Main_Color"
, Color ) = (1,0.5,0.5,1)
//定义一个名字为MainColor的变量,类型为Color(RGBA格式),同时给一个默认值
}
SubShader
//代码块
{
pass
{
Color[MainColor]
//使用上面定义的变量,将对象颜色设置为变量的值
}
}
FallBack
"Diffuse"
//如果当前显卡不支持上面的SubShader,则使用这个
}
通过代码可以看到,Unity的Shader代码可以分为两块:Properties(变量块)、SubShader(代码块)在变量块中定义的变量就相当于Unity脚本中的一个Public变量,可以直接在编辑器中看到。
而代码块则是设置渲染的参数,直接给显卡用的,而程序肯定不能只支持一张显卡,所以这个subshader不止一个的,Unity在执行渲染的时候会选择当前显卡支持的subshader。代码很简单,就不再解释了。
要看效果的话,在Unity中创建一个Material,然后把写好的shader拖给他,最后把Material拖给一个可见的对象就可以了,看下效果图: