Shader语法不区分大小写
基础的数据类型
Properties{
_Color("Main Color",Color) = (1,1,1,1)
_Shininess("Shininess",range(0,8)) = 4
_MainTex("MainTex",2D) = ""{}
}
_Color("Main Color",Color) = (1,1,1,1)
一个Shader中可以存在一个或多个"SubShader{}",但是显卡每次渲染处理的时候只能选择一个SubShaders执行
执行顺序是最先处理最上方的"SubShader{}",如果显卡版本不支持第一个"SubShader{}",就会依次执行下面的"SubShader{}"
在编写多个"SubShader{}"时,一般第一个是最复杂的,对显卡要求最高,依次写更支持低版本显卡的"SubShader{}",越往下,算法和指令越简单
"Pass{}"写在SubShader{}代码块中
"Pass{}"包含了一系列的渲染状态设置命令
通过Name命令,给Pass通道设置名字,这个名字可以通过C#脚本访问到
Pass{
Name "ExampleNamedPass"
}
Tag
标签是可以分配给通道的键值对数据。Unity 使用预定义的标签和值来确定如何以及何时渲染给定的通道。您还可以使用自定义值创建自己的自定义通道标签,并从 C# 代码访问它们。
Shader "Examples/SinglePass"
{
SubShader
{
Pass
{
Name "ExamplePassName"
Tags { "ExampleTagKey" = "ExampleTagValue" }
// ShaderLab commands go here.
// HLSL code goes here.
}
}
}
例如
等
Diffuse[_Color] _color是在Properties中定义的属性
Material{
Diffuse[_Color] //材质球颜色
Ambient[_Ambient] //材质球环境光
Specular[_Specular] //高光 搭配 Separatespecular 使用
Shininess[_Shininess] //高光强度
Emission[_Emission] //自发光
}
Separatespecular On //独立的镜面的高光效果 打开
Lighting On //光照效果 打开 (off关闭)
Settexture[_MainTex] //设置贴图 Settexture只能设置一张贴图
{
combine texture * primary double //combine-混合 texture-贴图 primary-之前计算好的顶点光照 (double-数值翻倍,quad-数值×4)
}
Settexture[_SecondTex]
{
constantColor[_Constant] //生成 constant 的颜色信息
combine texture * previous double , texture * constant //previous-之前所有顶点光照贴图计算的数据 ,texture-在","添加texture,意思是使用贴图的透明通道信息 constant贴图再混合一个color属性调整透明度
}
Shader "Custom/TestShader"
{
Properties{
_Color("Main Color",Color) = (1,1,1,1)
_Ambient("Ambient",Color) = (0.3,0.3,0.3,0.3)
_Specular("Specular",Color)= (1,1,1,1)
_Shininess("Shininess",range(0,8)) = 4
_Emission("Emission",Color) = (1,1,1,1)
_MainTex("MainTex",2D) = "white"{}
_SecondTex("SecondTex",2D) = ""{}
_Constant("ConstantColor",Color) = (1,1,1,0.3)
}
SubShader
{
Tags { "Queue"="Transparent" } //设置渲染顺序
Pass{
Blend SrcAlpha OneMinusSrcAlpha //混合透明通道
//Color(1,0,0,1)
//Color[_Color]
Material{
Diffuse[_Color] //材质球颜色
Ambient[_Ambient] //材质球环境光
Specular[_Specular] //高光 搭配 Separatespecular 使用
Shininess[_Shininess] //高光强度
Emission[_Emission] //自发光
}
Lighting On //光照效果 打开 (off关闭)
Separatespecular On //独立的镜面的高光效果 打开
Settexture[_MainTex] //设置贴图 Settexture只能设置一张贴图
{
combine texture * primary double //combine-混合 texture-贴图 primary-之前计算好的顶点光照 (double-数值翻倍,quad-数值×4)
}
Settexture[_SecondTex]
{
constantColor[_Constant] //生成 constant 的颜色信息
combine texture * previous double , texture * constant //previous-之前所有顶点光照贴图计算的数据 ,texture-在","添加texture,意思是使用贴图的透明通道信息 constant贴图再混合一个color属性调整透明度
}
}
}
}