可以考虑用layer来简单地做,新建一个layer,让某一个光源仅仅对一个layer生效。
此外,或许可以先用光照烘焙做一次,然后再加上其他的物体,看上去也是光照仅仅对某个物体生效,我个人跟推荐这种方法,节约计算资源。
十四讲我们实现了基本的Surface Shader,十五讲讲了光照模型的基础知识。这一讲说的是如何写光照模型。自定义光照模型主要分为4步:
(0)架设框架,填写需要的参数
(1)计算漫反射强度
(2)计算镜面反射强度
(3)结合漫反射光与镜面反射光
代码配有中文注释,配合上上讲的光照公式,一步一步实现即可。
//
Author: 风宇冲
Shader "Custom/T_customLightModel" {
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
Subshader
{
//alpha测试,配合surf中的o.Alpha = c.a
AlphaTest Greater 0.4
CGPROGRAM
#pragma surface surf
lsyLightModel
//命名规则:Lighting接#pragma suface之后起的名字
//lightDir :点到光源的单位向量
viewDir:点到摄像机的单位向量
atten:衰减系数
float4 LightinglsyLightModel(SurfaceOutput s, float3 lightDir,half3 viewDir, half atten)
{
float4 c
//(1)漫反射强度
float diffuseF = max(0,dot(s.Normal,lightDir))
//(2)镜面反射强度
float specF
float3 H = normalize(lightDir+viewDir)
float specBase = max(0,dot(s.Normal,H))
// shininess 镜面强度系数,这里设置为8
specF = pow(specBase,8)
//(3)结合漫反射光与镜面反射光
c.rgb = s.Albedo * _LightColor0 * diffuseF *atten + _LightColor0*specF
c.a = s.Alpha
return c
1、打开unity3d的一个场景。2、我们把场景中的灯光都进行删除,但是发现场景还是清可见的,只是稍微暗了一点。
3、现在我们可以选择“Windows”--“Lighting”。
4、然后会d出一个“Lighting窗口”。
5、我们把“Ambient Intensity”和“Reflection Intensity”都设置为“0”。
6、现在再回到场景,所有物体都变成黑色了。
7、但是我们发现天空还是蓝色的,我们可以创建一个材质“Sky2”,并且把其shader改为“Skybox”--“Cubemap”。
8、把“Exposure”设置为“0”。
9、再次打开Lighting窗口,把“Skybox”设置为“Sky2”。
10、回到场景,我们发现整个场景都是黑色的了。
11、现在我们就可以添加局部光照,得到光照对比的效果了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)