注:学习文章,之前在蛮牛上发表。(以前还是那么的青涩...)
看了视频对着写了一下午,还是有很多地方不懂,老师原理并没有多少讲解,但是也不确定是不是这个fixed function shader 没那么重要,只有把老师的代码和解释尽量做清楚一点。后面还有很多课程,等学完
了应该会懂老师现在的用意吧。
新手学习,愿共勉之。
Shader "Custom/Day1Shader" {
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)
_mainTexture("Main Texture", 2D) = ""//默认值就是纹理的名称
_secondTexture("Second Texture", 2D) = ""//第二张贴图
}
SubShader
{
tags{ "Queue" = "Transparent" }//提高渲染序列,让自己先渲染,防止渲染干扰
pass
{
//blend 指的是混合
//srcAlpha正在渲染的物体的Alpha值,即源物体
//OneMinusSrcAlpha 1- srcAlpha.
Blend srcAlpha OneMinusSrcAlpha //按比例混合
material
{
diffuse[_color]//默认颜色
ambient[_ambient]//环境光
specular[_specular]//集中点镜面高光
shininess[_shininess]//描述镜面高光镜面反射区域强弱
emission[_emission]//自发光
}
lighting on//开启环境光
separateSpecular on//开启高光
settexture[_mainTexture]//贴图采样
{
//combine是合并操作,primary是关键字,代表前面所有计算过的颜色和光照, 即material到eparateSpecular on
//但是两个相乘会低于正常显示结果, 所以要乘以二, 即double是提高两倍亮度,quad是四倍
combine texture * primary double
}
//如果需要多张图同时贴入
settexture[_secondTexture]//贴图采样2,因为不能settexture[_mainTexture, _mainTexture]
{
//combine texture * primary double 不能用,combine texture是拿当前的纹理即_secondTexture
//去乘以之前的所有操作, 即material到eparateSpecular on
combine texture * previous double//previous是前面所有操作,即material到settexture[_mainTexture]
}
}
}
}