固定渲染管线Shader

固定渲染管线是标准的几何&光照(T&L)管线,功能是固定的,它控制着世界、视、投影变换及固定光照控制和纹理混合

T&L管线可以被渲染状态控制,矩阵,光照及采制参数

固定渲染管线一般用于Shader在老显卡无法显示时的Fallback(在Shader的SubShader都无法使用的时候调用)

命令

小括号写法是固定写法

大括号写法是变量写法,可以传一个自定义变量进去

Shader "Custom/FixFunction" {
	properties 
	{
		_BaseColor("BaseColor",color)=(1,1,1,1)
	}
	subShader 
	{
		pass
		{
			//固定写法
			color(1,1,1,1)
			//变量写法
			color[_BaseColor]		
		}
	}
	FallBack "Diffuse"
}

命令块

以最基本的材质Material命令块为例子,添加一个命令块时候其后添加一个大括号

大括号后面是存放着变量(可以多个)

以下是一个material命令块写法

Shader "Custom/FixFunction" {
	properties 
	{
		_BaseColor("BaseColor",color)=(1,1,1,1)
		_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
	}
	subShader 
	{
		pass
		{
			//固定写法
			color(1,1,1,1)
			//变量写法
			color[_BaseColor]		
			//material命令块
			material
			{
				//漫反射变量
				diffuse[_DiffuseColor]				
			}
		}
	}
	FallBack "Diffuse"
}

显示效果如下图所示


改变_DiffuseColor漫反射颜色的值发现Cube颜色并没有改变

这是因为还没有开启开关属性

开关命令

以上说到改变_DiffuseColor的值没有改变Cube颜色

这是因为没有开启灯光开关

这是使用到一个开关属性

代码如下

Shader "Custom/FixFunction" {
	properties 
	{
		_BaseColor("BaseColor",color)=(1,1,1,1)
		_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
	}
	subShader 
	{
		pass
		{
			//固定写法
			color(1,1,1,1)
			//变量写法
			color[_BaseColor]		
			//material命令块
			material
			{
				//漫反射变量
				diffuse[_DiffuseColor]				
			}
			lighting on
		}
	}
	FallBack "Diffuse"
}

其他材质块命令

Shader "Custom/FixFunction" {
	properties 
	{
		_BaseColor("BaseColor",color)=(1,1,1,1)
		_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
		_AmbientColor("AmbientColor",color)=(1,1,1,1)
		_SpecularColor("SpecularColor",color)=(1,1,1,1)
		_ShininessSize("ShininessSize",range(0,5))=3
		_EmissionColor("EmissionColor",color)=(1,1,1,1)
	}
	subShader 
	{
		pass
		{
			//固定写法
			color(1,1,1,1)
			//变量写法
			color[_BaseColor]		
			//material命令块
			material
			{
				//漫反射变量
				diffuse[_DiffuseColor]	
				//环境光
				ambient[_AmbientColor]
				//高光(需开启高光属性开关)
				specular[_SpecularColor]
				//光亮
				shininess[_ShininessSize]
				//自发光
				emission[_EmissionColor]
			}
			lighting on
			separatespecular on
		}
	}
	FallBack "Diffuse"
}

贴图命令块

//固定渲染管线Shader

Shader "Custom/FixFunction" {
	properties 
	{
		_BaseColor("BaseColor",color)=(1,1,1,1)
		_DiffuseColor("DiffuseColor",color)=(1,1,1,1)
		_AmbientColor("AmbientColor",color)=(1,1,1,1)
		_SpecularColor("SpecularColor",color)=(1,1,1,1)
		_ShininessSize("ShininessSize",range(0,5))=3
		_EmissionColor("EmissionColor",color)=(1,1,1,1)
		_MainTexture("MainTexture",2d)="white"{}
		_ScecondTexture("ScecondTexture",2d)="white"{}
		_ConstantColor("ConatantColor",color)=(1,1,1,1)
	}
	subShader 
	{
		//设置透明的渲染队列
		Tags{"Queue" = "Transparent" "RenderType" = "Transparent" "IgnoreProjector" = "True"}
		Blend SrcAlpha OneMinusSrcAlpha

		pass
		{					
			//固定写法
			color(1,1,1,1)
			//变量写法
			color[_BaseColor]		
			//material命令块
			material
			{
				//漫反射变量
				diffuse[_DiffuseColor]	
				//环境光
				ambient[_AmbientColor]
				//高光(需开启高光属性开关)
				specular[_SpecularColor]
				//光亮
				shininess[_ShininessSize]
				//自发光
				emission[_EmissionColor]
			}
			lighting on
			separatespecular on

			//设置纹理
			//此时命令块中的texture就是指_MainTexture
			settexture[_MainTexture]
			{
				//结合命令
				//将贴图与初始的颜色相乘
				combine texture*primary
			}

			//设置纹理
			//此时命令块中的texture就是指_ScecondTexture
			settexture[_ScecondTexture]
			{
				//此时命令块中的constant就是指_ConstantColor
				constantColor[_ConstantColor]
				//将贴图与之前的颜色相乘(包括_MainTexture纹理颜色),第二个参数是alpha指的设置
				combine texture*previous,texture*constant
			}
		}
	}
	FallBack "Diffuse"
}

最终渲染效果如下图所示


属性面板参数如下




猜你喜欢

转载自blog.csdn.net/qq_33747722/article/details/78701923