Unity图形学之Shader灯光的设置
1.可编程区域:顶点着色器和片段着色器,三大测试只是开关的打开和关闭
顶点着色器:
1.计算顶点的颜色--并行计算 如果是四个顶点就并行运算四次,
如果是100*100的屏幕到了片段着色器就是100*100次
2.将物体坐标系 转换到 相机坐标系
光栅化:将顶点 转换成像素 从点到面的变换 将顶点的信息做插值运算
片段着色器:
1.已经是像素点----一个像素通常是由RGBA 四个通道组成 RGBA 8888 每个通道占8bit Float[720*1280] RGBA每个8bit 一共32位 刚好是一个Float
2.顶点着色器和片段着色器 运算次数 不是一个量级
所以能把 运算 放在 顶点着色器就放这里,不要放片段着色器
3.纹理采样:从纹理像素 赋给 像素 从图片里面获取的像素点覆盖了顶点着色器计算的颜色像素点
4.像素和灯光进行计算:
alpha测试:挑选合格的 alpha 像素显示
模板测试:像素还可以携带模板 信息 Gbuffer。到达条件的模板值 才显示
深度测试:符合条件的像素 就通过,不然就丢弃
Blend:将当前要渲染的像素 和 已经渲染出来的像素 混合运算
Gbuffer:通常测试的像素暂存RGBA 模板值 深度值等信息--中转缓存 Float[720*1280*4] 相当于数组
FrontBuffer:Gbuffer通过后传递过来写入FrontBuffer Float[720*1280]
FrameBuffer:Float[720*1280] FrontBuffer和FrameBuffer交替显示,FrontBuffer写完就变成FrameBuffer
显示器
2.顶点着色器相关内容:
3.Shader1.0 最简结构:
Shader "Custom/TestVertex"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
}
SubShader
{
Pass {
}
}
FallBack "Diffuse"
}
4.顶点着色器:
1.计算顶点的颜色
2.顶点变换(在shader1.0中是固定的,没法变换)
3.灯光的作用
(1)计算顶点颜色:
Shader "Custom/TestVertex"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_TestColor("TestColor",Color) = (0,1,1,0)
}
SubShader
{
Pass {
//Color关键词做颜色变换,因为后面片段着色器没有做任何事,而且也没有做纹理的操作,所以顶点着色器计算出是什么颜色,它就显示什么颜色
Color(1,0,0,1)
Color(0,1,0,1)
//使用变量用中括号
Color[_TestColor]
}
}
FallBack "Diffuse"
}
Unity - Manual: ShaderLab: Legacy Lighting
(2)调节灯光的颜色:灯光变换公式
Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission
Ambient 环境光
Diffuse 漫反射光
Specular 镜面反射
Emission 自发光
Light Color 场景中灯光的颜色
Shader "Custom/TestVertex"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_TestColor("TestColor",Color) = (0,1,1,0)
}
SubShader
{
Pass {
//Color关键词做颜色变换,因为后面片段着色器没有做任何事,而且也没有做纹理的操作,所以顶点着色器计算出是什么颜色,它就显示什么颜色
// Color(1,0,0,1)
// Color(0,1,0,1)
//使用变量用中括号
//Color[_TestColor]
//调节灯光
//灯光先打开 默认是关闭的 Lighting 是负责所有灯光的开关
Lighting On
//负责高光灯光的开关 如果关掉Lighting Off 高光开关就会失效
SeparateSpecular On
Material{
//定义材质球(衣服)的漫反射怎么样和灯光进行作用
Diffuse (1,1,1,1)
//调节灯光和材质球颜色都会发生变化,所以这个Diffuse这个关键词可以改变和灯光计算的效果
Diffuse[_TestColor]
Ambient[_TestColor]
Specular[_TestColor]
Emission[_TestColor]
//shader1.0 灯光变化的规律公式:Ambient * Lighting Window’s Ambient Intensity setting + (Light Color * Diffuse + Light Color * Specular) + Emission
//Ambient 环境光
//Diffuse 漫反射光
//Specular 镜面反射
//Emission 自发光
//Lighting Window’s Ambient Intensity setting 项目window中灯光设置
//Light Color 场景中灯光的颜色
}
}
}
FallBack "Diffuse"
}