码迷,mamicode.com
首页 > 其他好文 > 详细

Lambert 光照模型

时间:2015-10-18 06:38:39      阅读:342      评论:0      收藏:0      [点我收藏+]

标签:

漫反射

光线照射到粗糙物体表面,向各个方向等强度地反射光,因此从各个视角出发,物体表面呈现相同的亮度,所看到的物体表面某点的明暗程度不随观测者的位置变化的,这种等同地向各个方向散射的现象称为光的漫反射。

技术分享

 

Lambert光照模型

漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比。

技术分享

Lambert漫反射模型:

简介

Lambert 光照模型,是光源照射到物体时产生的漫反射效果,没有高光。如下图:这个时顶点函数处理后的该光照模型,因此看起来像素不够平滑。

技术分享

 

漫反射强度=法线与光线的点积即(N*L),当他们夹角为0时,漫反射强度最大,夹角为90度时,反射强度为0。

float3 diffuseReflection = atten * _LightColor0.xyz *  max(0.0, dot(normalDirection,lightDirection));//反射系数*灯光颜色*漫反射强度;
float3 lightFinal = diffuseReflection + UNITY_LIGHTMODEL_AMBIENT.xyz;//漫反射后与环境光叠加
float4 o.col = float4(lightFinal*_Color.rgb,1.0);//最终的漫反射效果在与模型的材质叠加(颜色,贴图等)

源代码:
技术分享
 1 Shader "JQM/Lambert"
 2 {
 3     Properties
 4     {
 5         _Color("Color", color) = (1.0,1.0,1.0,1.0)
 6     }
 7     SubShader{
 8         Pass{
 9             
10             Tags { "LightMode" = "ForwardBase"}
11 
12             CGPROGRAM
13             #pragma vertex vert
14             #pragma fragment frag
15 
16             //使用自定义变量
17             uniform float4 _Color;
18 
19             //使用Unity定义的变量
20             uniform float4 _LightColor0;
21 
22             struct vertexInput{
23                 float4 vertex:POSITION;
24                 float3 normal:NORMAL;
25             };
26 
27             struct vertexOutput{
28                 float4 pos:SV_POSITION;
29                 float4 col:COLOR;
30             };
31 
32             //顶点程序
33             vertexOutput vert(vertexInput v)
34             {
35                 vertexOutput o;
36                 
37                 float3 normalDirection = normalize( mul(float4(v.normal,0.0),_World2Object)).xyz;
38                 float3 lightDirection;
39                 float atten = 1.0;
40 
41                 lightDirection = normalize(_WorldSpaceLightPos0.xyz);
42                 
43                 float3 diffuseReflection = atten * _LightColor0.xyz *  max(0.0, dot(normalDirection,lightDirection));
44                 float3 lightFinal = diffuseReflection + UNITY_LIGHTMODEL_AMBIENT.xyz;
45 
46                 o.col = float4(lightFinal*_Color.rgb,1.0);
47                 o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
48                 return o;
49             }
50 
51             //片段程序
52             float4 frag(vertexOutput i):COLOR
53             {
54                 return i.col;
55             }
56 
57             ENDCG
58         }
59     }
60     
61 }
View Code

 

物体在空间中 受到 光源 环境光 和 自身材质(颜色,贴图) 的综合因素的影响,形成的效果。

技术分享

技术分享

技术分享

 

Lambert 光照模型

标签:

原文地址:http://www.cnblogs.com/jqm304775992/p/4887779.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!