之前在游戏图形学基础介绍中介绍了渲染的基本流程以及Shader的分类,Shader1.0属于开关控制,本文主要介绍Shader1.0的基本结构,和一些基本操作。
Shader "Custom/Property"
{
Properties //属性定义通用格式
{
/*以下划线开头, _name("",type)=value */
_MainTex ("Texture", 2D) = "white" {}//表示默认值
_TestInt("testInt",int)=1
_TestFloat("testFloat",float)=0.5
_TestRange("testRange",Range(1,5))=3
_TestColor("testColor",Color)=(1,1,1)
_TestVector("testVector",Vector)=(1,1,1,1)
}
SubShader
{
Pass
{
}
}
}
上诉是Shader的通用结构,Properties 类似C#中的全局变量的定义:name(string,type)=default格式,默认以下划线开头,计算机进行渲染时会从上至下找第一个能够通过的SubShader,在SubShader中,每一个Pass都会被渲染一次。
顶点着色器
一些简单操作:
1、计算顶点的颜色:Color(0,1,0,1)或者Color[参数变量]
2、顶点变换(固定不可改变)
3、灯光的作用:DIFFUSE(漫反射), Ambien(环境光),SPECULAR(镜面反射),Emission(自发光)
Shader "Custom/Property"
{
Properties //属性定义通用格式
{
_MainTex ("Texture", 2D) = "white" {}//表示默认值
_ViewColor("Color",Color)=(0,0,0,0)
}
SubShader
{
Pass
{
Color[_ViewColor] //调节颜色
/****************************
灯光作用
Material
{
DIFFUSE[_ViewColor] //漫反射
Ambient[_ViewColor] //环境光
SPECULAR[_ViewColor] //镜面反射
Emission[_ViewColor] //自发光
}
Lighting On //灯光开关(总开关)
SeparateSpecular On //只对高光起作用
****************************/
}
}
}
片段着色器:
文理采样:Point(就近采样),Bilinear(就近周围4个像素的平均),Trilinear(就近周围8个像素平均)
- SetTexture[TextureName]{Texture Block}:设置文理
TextureName:表示文理变量
Privious:表示前面一个SetTexture出来以后的像素
Primary:表示顶点计算出来的颜色
Texture:等于SetTexture当前的文理变量
Constant:表示一个固定的颜色值。
Shader "Custom/SetTexture"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_BlendTex ("Texture2", 2D) = "white" {}
_MainColor("Color",Color)=(1,1,1,1)
}
SubShader
{
Pass
{
/****************************
Color[_MainColor]
SetTexture[_MainTex]
{
Combine Primary*Texture //顶点颜色和当前设置的颜色相乘
}
SetTexture[_MainTex]
{
ConstantColor[_MainColor] //固定颜色
Combine Texture*Constant
}
SetTexture[_BlendTex]
{
Combine Previous*Texture //表示前面一个SetTexture出来以后的像素和当前像素作用
}
****************************/
}
}
}
Shader1.0编码简单,主要是实现一些开关功能,但是Shader1.0支持所有的设备,不用考虑兼容的问题。