漫反射与Lambert模型
漫反射指的是粗糙的物体表面各个方向等强度地反射光,即等同的各个方向散射的现象
(图片源于Unity Shader 入门精要-冯乐乐著)
对于物体上的某一点,使用环境光源的情况下
A=K*I(环境光强)
其中A为漫反射物体与环境光交互反射的光强
K为漫反射物体材质的反射系数,取值范围为(0,1)
I1为环境光光强
因为环境光在物体各个点的强度相同,且没有方向因此上述Lambert公式中无需考虑光强的方向,但对于使用点光源就要考虑了
对于物体上的某一点,使用环境光源的情况下
A=K*I2*Cos(α)(点光源)
其中A为漫反射物体与环境光交互反射的光强
K为漫反射物体材质的反射系数,取值范围为(0,1)
I2为点光源光强
α为点光源向量与表面法向量的夹角
在Cg中,点光源向量为顶点指向光源的向量,并非普通情况下所指的从光源位置到顶点的向量,即:
(图片源于Unity Shader 入门精要-冯乐乐著)
如图所示,l为顶点指向光源的单位向量,n为顶点单位法向量,将向量表示为单位向量可以避免一些错误
因此A=K*I2*Cos(α)可以表示为A=K*I2*(n*l).
因为n*l=|n|*|l|*Cos(α)
而|n|=|l|=1
所以A=K*I2*Cos(α)等价于A=K*I2*(n*l)
对于|n|>1或|l|>1时
A=K*I2*Cos(α)等价于A=K*I2*(n*l)/(|n|*|l|)
对于漫反射模型来说,n,l,的数值并不是必须的,所以还是将其归一化会比较好,也可以避免一些额外的计算
因此,综合环境光和点光源计算得到最终的公式:A=K*I1+K*I2*(n*l) (n,l为单位向量)
附上源代码:
(代码源于GPU编程+Cg语言之阳春白雪下里巴人)
漫反射与Lambert模型相关推荐
- Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片
问题: Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片,原因不得而知. 使用半兰伯特漫反射代码如下: *************** ...
- 兰伯特(Lambert)模型
漫反射,是投射在粗糙表面上的光向各个方向反射的现象.当一束平行的入射光线射到粗糙的表面时,表面会把光线向着四面八方反射,所以入射线虽然互相平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则 ...
- (转)光照模型及cg实现
经典光照模型(illumination model) 物体表面光照颜色由入射光.物体材质,以及材质和光的交互规律共同决定. 由于环境光给予物体各个点的光照强度相同,且没有方向之分,所以在只有环境光的情 ...
- PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现
PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现 BRDF简介 再介绍BRDF之前我们要引入渲染方程这个东西: 其中L表示辐射率,其公式为: 它表示了一个拥有辐射强度Φ的 ...
- mie散射理论方程_腾讯游戏学院专家:PBR渲染模型的理论及具体应用
编者按 PBR,基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型.腾讯游戏学院专家Leonn,将和大家分享PBR的理论知识以及在Disney和UE中的典型应用. 文 | Leonn 腾讯 ...
- 虚幻引擎之自定义着色模型(ShadingModel)
虚幻引擎之自定义着色模型(ShadingModel) 文章目录 虚幻引擎之自定义着色模型(ShadingModel) 一.前言 二.着色模型 2.1 材质输入 2.2 模型浅析 2.2.1 Defau ...
- 【技术美术图形部分】2.2 模型与材质基础
记录之前膜拜一下这节课的大佬,才大三,我一个研二菜狗留下不学无术的泪水! May佬提到,这次课程安排的目的是给美术同学一个缓冲的空间,我的话在写这篇学习笔记就尽量加入一些自己的理解. 友情提示!才发现 ...
- PBR以及在Disney和UE渲染模型中的使用
PBR,基于物理的渲染模型,是当前主流游戏引擎使用的真实感3D渲染模型,在游戏场景渲染中,它用更接近光学物理的方式,建立一个对全场景材质的大一统shader.大一统shader的好处包括:统一美术制作 ...
- 进阶光照与材质之光照和反射模型
第五章讲述了一些漫反射模型和镜面反射模型的原理和数学公式 博主在unity中实现了一下,把部分结果贴在上面 有下面几个主题: 渲染公式 基本光照定义 光照和lambert法则 双向反射分布函数BRDF ...
最新文章
- Java学习笔记(九)--数组及Arrays类
- docker安装redis并设置密码
- bgp 建立邻居发送的报文_大型网络BGP之IBGP和EBGP邻居关系基础配置
- 看完这个你还不理解右值引用和移动构造 你就可以来咬我(中)
- 华中科技大学计算机系统结构,华中科技大学计算机系统结构复习题.pdf
- 一个开源的ORM框架——Light.Data
- Perl 连接Oracle 出现OCI missing的问题及解决
- 爬虫可视化点选配置工具之chrome插件简介
- [转]Birdfont 2.10 发布,字体编辑器
- PS抠发丝简单详细方法
- 开源.net 混淆器ConfuserEx
- 国内外常用的MD5在线解密网站
- 漫谈Anchor-based和Anchor-Free
- 滴滴云 远程访问jupyter
- 科技爱好者周刊:第 90 期
- Java 8 新特性 宋红康跟学
- Kafka教程(一)Kafka入门教程
- SetFocus()函数
- 深入分析:Onliner SpamBot7.11亿电邮账号泄露事件
- 最新成果展示:Ga2O3-SBD计算模型
热门文章
- 身份认证协议攻击怎么解决
- 面向对象:不要热情,不要高冷,只要37度的温暖
- java怎么没有jmf包_java JMF
- 陌上花将开,徐徐观赏
- 折叠屏市场起风,华为、OPPO“你追我赶”
- 【css技巧】CSS filter的神奇用法 | 褪色|融合效果等
- 蔡颖-《APS走向实践》书解读之二:需求驱动-预测、掌握、满足需求
- 2020年全球程序员收入出炉,国内程序员的收入也不低!北京以10万美元的薪资排名第十!
- Postman couldn‘t upload file
- 获取300套PPT模板+7天WPS会员,扫码关注领取