之前学了下Unity3D的shader,回头再看的时候,已经忘得七七八八了。索性直接再时间学一下,顺便记一下笔记加上些自己的理解。
Unity3D最简单的渲染管线是固定渲染管线。
1、固定渲染管线最简单的语法:(物体显示为)
Shader "Skin/NewSurfaceShader" {
SubShader{
pass {
color(1,1,1,1)
}
}
}
效果:
2、颜色作为面板上的变量
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
}
SubShader{
pass {
//color(1,1,1,1)
color[_color]
}
}
}
效果跟上面一致。
3、上面只是一个面,需要有立体感,那么得增加一个漫反射
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
}
SubShader{
pass {
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
}
lighting on
}
}
}
效果:
4、增加一个环境光,显得更立体
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
_Ambient("AmbientColor",color)=(1,0.3,0.3,1)
}
SubShader{
pass {
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
ambient[_Ambient]
}
lighting on
}
}
}
5、打开高光效果,以及控制高光大小
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
_Ambient("AmbientColor",color)=(1,0.3,0.3,1)
_Specular("SpecularColor",color)=(1,1,1,1)
_shininess("shininess",range(0,6))=3
}
SubShader{
pass {
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
ambient[_Ambient]
specular[_Specular]
shininess[_shininess]
}
lighting on
separatespecular on
}
}
}
6、自发光
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
_Ambient("AmbientColor",color)=(1,0.3,0.3,1)
_Specular("SpecularColor",color)=(1,1,1,1)
_shininess("shininess",range(0,6))=3
_Emission("EmissionColor",color)=(1,1,1,1)
}
SubShader{
pass {
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
ambient[_Ambient]
specular[_Specular]
shininess[_shininess]
emission[_Emission]
}
lighting on
separatespecular on
}
}
}
7、贴图
注意:第一个贴图的关键字是:primary,意思是显示当前贴图
第二个贴图的关键字是:previous,意思是乘以以前的贴图效果
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
_Ambient("AmbientColor",color)=(1,0.3,0.3,1)
_Specular("SpecularColor",color)=(1,1,1,1)
_shininess("shininess",range(0,6))=3
_Emission("EmissionColor",color)=(1,1,1,1)
_MainTexture("MainTexture",2d)=""
_SecondTexture("SecondTexture",2d)=""
}
SubShader{
pass {
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
ambient[_Ambient]
specular[_Specular]
shininess[_shininess]
emission[_Emission]
}
lighting on
separatespecular on
settexture[_MainTexture]
{
combine texture * primary double //贴图乘以双倍的颜色设置
}
settexture[_SecondTexture]
{
combine texture * previous double //贴图乘以先前的贴图
//combine texture * primary double //遮盖先前的贴图
}
}
}
}
效果
8、显示透明效果
这里注意需要以下两个关键语句,使得透明通道起作用,tags控制渲染顺序
Tags { "Queue" = "Transparent" }
Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
_Ambient("AmbientColor",color)=(1,0.3,0.3,1)
_Specular("SpecularColor",color)=(1,1,1,1)
_shininess("shininess",range(0,6))=3
_Emission("EmissionColor",color)=(1,1,1,1)
_MainTexture("MainTexture",2d)=""
_SecondTexture("SecondTexture",2d)=""
}
SubShader{
Tags { "Queue" = "Transparent" }
pass {
Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
ambient[_Ambient]
specular[_Specular]
shininess[_shininess]
emission[_Emission]
}
lighting on
separatespecular on
settexture[_MainTexture]
{
combine texture * primary double //贴图乘以双倍的颜色设置
}
settexture[_SecondTexture]
{
combine texture * previous double //贴图乘以先前的贴图
//combine texture * primary double //遮盖先前的贴图
}
}
}
}
9、贴图本身自带透明效果
注意以下关键语句
constantColor[_constant]
combine texture * previous double,texture*constant //贴图乘以先前的贴图
Shader "Skin/NewSurfaceShader" {
properties{
_color("MainColor",color)=(1,1,1,1)
_Ambient("AmbientColor",color)=(1,0.3,0.3,1)
_Specular("SpecularColor",color)=(1,1,1,1)
_shininess("shininess",range(0,6))=3
_Emission("EmissionColor",color)=(1,1,1,1)
_constant("ConstantColor",color)=(1,1,1,1)
_MainTexture("MainTexture",2d)=""
_SecondTexture("SecondTexture",2d)=""
}
SubShader{
Tags { "Queue" = "Transparent" }
pass {
Blend SrcAlpha OneMinusSrcAlpha // Traditional transparency
//color(1,1,1,1)
//color[_color]
material{
diffuse[_color]
ambient[_Ambient]
specular[_Specular]
shininess[_shininess]
emission[_Emission]
}
lighting on
separatespecular on
settexture[_MainTexture]
{
combine texture * primary double //贴图乘以双倍的颜色设置
}
settexture[_SecondTexture]
{
constantColor[_constant]
combine texture * previous double,texture*constant //贴图乘以先前的贴图
//combine texture * primary double //遮盖先前的贴图
}
}
}
}