您现在的位置是:首页 >技术交流 >Fixed Function Shader网站首页技术交流
Fixed Function Shader
简介Fixed Function Shader
Properties 属性
Shader语法不区分大小写
基础的数据类型
如何定义一个属性
-
属性要在"Properties{}"代码块中定义
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)
- _Color:属性名字(在之后的代码块中,调用到这个属性时,使用的名字)
- "Main Color":在Unity中,我们在面板中看到的名字
- Color:数据类型
- (1,1,1,1):数据的默认值
SubShader shader代码块
一个Shader中可以存在一个或多个"SubShader{}",但是显卡每次渲染处理的时候只能选择一个SubShaders执行
执行顺序是最先处理最上方的"SubShader{}",如果显卡版本不支持第一个"SubShader{}",就会依次执行下面的"SubShader{}"
在编写多个"SubShader{}"时,一般第一个是最复杂的,对显卡要求最高,依次写更支持低版本显卡的"SubShader{}",越往下,算法和指令越简单
Pass 通道
"Pass{}"写在SubShader{}代码块中
"Pass{}"包含了一系列的渲染状态设置命令
Name
通过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.
}
}
}
例如
- 设置材质球属性
- 设置光照
- 设置贴图属性
- 设置透明度
等
Material 材质
Diffuse[_Color] _color是在Properties中定义的属性
Material{
Diffuse[_Color] //材质球颜色
Ambient[_Ambient] //材质球环境光
Specular[_Specular] //高光 搭配 Separatespecular 使用
Shininess[_Shininess] //高光强度
Emission[_Emission] //自发光
}
Separatespecular On //独立的镜面的高光效果 打开
Lighting 光照
Lighting On //光照效果 打开 (off关闭)
Settexture 贴图
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属性调整透明度
}
}
}
}
风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。