此模型属于经验模型,主要用来简单模拟粗糙物体表面的光照现象

此模型假设物体表面为理想漫反射体(也就是只产生漫反射现象,也成为Lambert反射体),同时,场景中存在两种光,一种为环境光,一种为方向光,然后我们分别计算这两种光照射到粗糙物体表面所产生的光照现象,最后再将两个结果相加,得出反射后的光强值。

首先是计算环境光的公式:

I_ambdiff = K_d * I_a;

其中,K_d为粗糙物体表面材质对光的反射系数,这个系数由程序编写者在宿主程序中给出,I_a为环境光的光强,也就是环境光的颜色数值,一般是一个float3型的变量。

然后是计算方向光的公式:

I_ldiff = K_d * I_l * cosa;

其中I_l为方向光的光强,也就是其颜色值,一般是float3型的变量。这个公式与计算环境光的不同,对于环境光,我们不关心它的方向,因为环境光也没有方向,它给予物体的光照在各个顶点处均是一样的。而方向光则需要关注其方向,例如一个聚光灯,灯从不同的角度来照射物体所产生的效果也是不一样的,光线方向越靠近法线,漫反射出来的光就越强,反之则越弱。公式中的a就是光线方向与顶点法线的夹角,同时要注意,入射光的方向在这里定义为顶点到光源位置。但是计算cosa会比较麻烦,所以在这里要变换一下公式,方便程序的书写。假设N为顶点的单位法向量,L为入射光的单位法向量(再次提醒一下,L的方向是由顶点指向光源的)这样,由向量的点积公式可得:cosa = N﹒L,所以计算方向光的公式就变为:

I_ldiff = K_d * I_l * (N﹒L);

综上,得出漫反射后的光强为:

I_diff = K_d * I_a + K_d * I_l * (N﹒L);

下面给出使用Cg语言的Lambert漫反射光照模型顶点着色程序:

/******************************************************/

/*Lambert漫反射光照模型                                */

/******************************************************/

struct vertex_In

{

float4 in_Position : POSITION;

float4 in_Normal   : NORMAL;

};

struct vertex_Out

{

float4 out_Position : POSITION;

float4 out_Color    : COLOR0;

};

void main_v(vertex_In vertexI,

out vertex_Out vertexO,

uniform float4*4 modelViewProj,

uniform float4*4 worldMatrix,

uniform float4*4 worldMatrix_IT,

uniform float3 globalAmbient,//全局光光强

uniform float3 lightPosition,

uniform float3 lightColor,

uniform float3 K_d//漫反射体反射系数

)

{

vertexO.out_Position = mul(modelViewProj , vertexI.in_Position);//进行投影变换

float3 worldPosition = mul(worldMatrix , vertexI.in_Position).xyz;//计算顶点的世界位置

float3 N = mul(worldMatrix_IT , vertexI.in_Normal).xyz;//计算顶点的法向量

N = normalize(N);//向量规范化

//计算方向光方向

float3 L = lightPosition - worldPosition;

L = normalize(L);//向量规范化

//计算环境光漫反射光强

float3 ambColor = Kd * globalAmbient;

//计算方向光漫反射光强

float3 dirColor = Kd * lightColor * max(dot(N , L) , 0);

vertexO.out_color.rgb = ambColor + dirColor;

vertexO.out_color.a = 1;

}

Lambert漫反射光照模型归纳相关推荐

  1. Unity Shader 学习记录(5) —— 实现漫反射光照模型

    1 公式计算 从公式可以看出,要计算漫反射需要知道4 个参数:入射光线的颜色和强度 cgh"材质的漫反射系数mdiuse,表面法线n以及光源方向I. 为了防止点积结果为负值,我们需要使用ma ...

  2. Unity Shader漫反射光照模型与半兰伯特光照模型

    文章目录 一.基础光照模型中漫反射部分的计算公式 二.逐顶点光照实现 逐顶点代码 逐顶点效果图 三.逐像素光照模型实现 逐像素代码 逐像素效果图 四.半兰伯特光照模型实现 广义半兰伯特光照模型公式 半 ...

  3. 兰伯特(Lambert)光照模型总结

    兰伯特光照模型是经验模型,主要用来模拟粗糙物体表面的光照现象,即漫反射. 漫反射特点 1:反射强度与观察者的角度没有关系 2:反射强度与光线的入射角度有关系 漫反射光照符合兰伯特定律(Lambert' ...

  4. 庄懂的TA笔记(五)<漫反射 镜面反射>

    1.漫反射: 黑话: 常用向量:(全要记) nDir:法线方向,点乘操作,简称,n; lDir:光照方向,点乘操作,简称,l: vDir:观察方向,点乘操作,简称,v: rDir:光反射方向,点乘操作 ...

  5. 图形 2.4 传统经验光照模型详解(PBR光照计算公式介绍)

    参考视频: 图形 2.4 传统经验光照模型详解 GAMES101-现代计算机图形学入门-闫令琪 P15 参考资料: PBR-learnopengl 彻底看懂PBR/BRDF方程-知乎 辐射强度.辐亮度 ...

  6. 7.Phong 和 BlinnPhong

    Lambert漫反射光照模型,这是一个用来模拟粗糙表面对光线的漫反射现象的经验模型,对于纸张.粗糙墙壁等等来说,这个模型或许够用,但对于金属这样的光滑表面来说,我们就需要使用Phong模型来模拟光滑表 ...

  7. UnityShader 表面着色器简单例程集合

    0.前言 这些简单的shader程序都是写于2015年的暑假.当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目.这些文章闲置在我个人博客中,一年将过,师弟也到了 ...

  8. matlab绘制蔓叶线,powerdraw

    设计.发明的目的和基本思路.创新点.技术关键和主要技术指标 利用高等数学中相关的知识做基础,利用计算机图形学的知识做桥梁,利用c++程序具体实现绘制功能,利用MFC做出软件的外在界面和GUI,用来实现 ...

  9. Unity渲染管线流程

    渲染管线概述 Unity渲染管线流程: 多相机渲染 CPU渲染管线 层级剔除 遮挡剔除 发送数据(将所有数据打包,发送给GPU) GPU渲染管线 图元装配及光栅化 执行裁剪 裁剪空间转换到NDC 计算 ...

最新文章

  1. 一种新方法或让AI模型拥有“联想”力,或能识别从未见过的事物
  2. swift-判断是否已获得相机、相册权限
  3. ITK:计算两个图像之间的均方度量值
  4. 函数参数的值传递和地址传递
  5. pythonjava app切出后无网络连接_Python爬虫爬资源时由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。怎么破?...
  6. fetch 不是xhr_fetch与XHR的区别与优势
  7. 趣文:舌尖上的程序猿
  8. pycharm conda 环境 切换 linux_windows配置wsl2环境+pycharm指路
  9. java 获取及修改系统变量
  10. 如何让程序员更容易的开发Web界面?重构SmartAdmin展示TinyUI
  11. DB9标准的公头\母头接线定义
  12. 常工院计算机学院,常亚楠-华中师范大学计算机学院
  13. cmak(kafka Manager) 编译教程
  14. iOS游戏开发之使用 Spritekit 框架和 Swift 的 iOS 2D 太空射击游戏(教程含源码)
  15. 马云、周鸿祎高调宣布:清退『小白兔员工』,绝不手软!
  16. python怎么画三维函数图像_python中如何画三维的图形?
  17. java 格式化日期字符串
  18. 杭电2030java做法_杭电ACM2019java做法
  19. android 文字闪烁效果,Android Shader应用开发之霓虹闪烁文字效果
  20. 下载论文电子书专用网站

热门文章

  1. qma7981 源码 驱动_高品质PCB板配单报价,QMA7981-TR
  2. (点击||敲击)发出声音特效「HTML+CSS+JavaScript」项目总结
  3. Drupal简明教程
  4. Drupal框架使用中...
  5. KDJ金叉死叉分析以及KDJ金叉的买点形态
  6. 互联网工作 常用名词及基础知识扫盲
  7. 《新一代视频压缩编码标准H.264/AVC》
  8. hadoop成功启动后,重新formatamp;nbs…
  9. Caused by org.springframework.beans.factory.NoSuchBeanDefinitionException
  10. director入门