学习光照的一些参数

light intensity  光强度(发光强度的单位。代号cd。是一光源在给定方向上的发光强度)

glossiness 光泽度 (用数字表示的物体表面接近镜面的程度,它主要取决于光源照明和观察的角度 ,一般指加工品的表面色泽,磨损,损坏会影响光泽度)

specular 高光  (高光是指图像中色调较亮的像素,高光色调最大的色阶值是255)

ambient 环境光 (整个环境的默认灯光)

direction light 方向光(平行光,定向灯)  光源拥有不变方向的平行光线且不会随着距离衰减(一般用于太阳光)

point light 点光(点灯) 像所有方向发射光,非线性衰减

spot light 聚光灯(射灯)   一种锥形光源,相当于点光给了一个罩子,隔得越远非线性衰减

area light 区域光(一个区域内的环境光)

漫反射强度=材质的漫反射系数×光源强度×(法线方向向量·入射光方向向量)

例如:0.5(反射一半)×1(最强,白色)×cos0(入射光垂直于法线,夹角0)=0.5(半减,灰色)

*所有的“强度”“系数”都是和“颜色”是等价的,因为将RGB三个分量计算过后,合并的结果就是颜色而不再是强度了。

即“漫反射颜色=材质的漫反射颜色×光源颜色×(法线方向向量·入射光方向向量)”(下同)

*注意,“×”是数乘,而“·”则是点乘,也就是说最后两向量的点积表示的就是它们夹角的cos值。(下同)

*注意,所有向量都是单位向量,并且入射光向量由反射点指向平面外。(下同)

*图示,L是入射光,N是法线,R是反射光,eye是视点

2、镜面反射

理想镜面是不存在的,对一般的光滑表面而言,反射光会集中在一个范围内,它的结果与视点有关,即:

镜面反射强度=材质镜面反射系数×光源强度×(法线方向向量·入射光与视点夹角一半的方向向量)^光泽度

例如:0.5(反射一半)×1(最强,白色)×cos0(视点位于反射光方向上,夹角0)^1(加权1)=0.5(半减,灰色)

*“^光泽度”是“光泽度次方”,光泽度越大,高光的亮斑越小

*标准算法应该是指向视点的光线和反射线的单位向量的点乘(即上图中的α角),但为了节省计算,我们按blin模型用此代替。

*那个半向量=视点方向向量+入射光方向向量,如果按下图的箭头,那么就是视点方向向量-入射光方向向量

*图示,H为半向量,它与eye的夹角等于它与L的夹角,这个角只是近似(你可以很容易的发现,其实它少了一半),但对于实时渲染而言,这已经足够了。

3、环境反射
环境光是一种经过多次反射平衡的光,它的强度是均匀的,并且分布是一样的,即:

环境光没有位置或方向上的特征,只有一个颜色亮度值,而且不会衰减,所以在所有方向和所有物体表面上投射的环境光的数量是恒定不变的。

因此,在局部光照明模型中(全局光照明包含对象间的作用,需要光线追踪等算法。为了效率,实时渲染中可以忽略),我们用一个常量进行计算:

环境反射强度=材质环境反射系数×环境光强度

例如:0.5(反射一半)×1(最强,白色)=0.5(半减,灰色)

时间: 2024-08-24 21:54:55

学习光照的一些参数的相关文章

Linux 程序设计学习笔记----命令行参数处理

转载请注明出处.http://blog.csdn.net/suool/article/details/38089001 问题引入----命令行参数及解析 在使用linux时,与windows最大的不同应该就是经常使用命令行来解决大多数问题.比如下面这样的: 而显然我们知道C语言程序的入口是mian函数,即是从main函数开始执行,而main函数的原型是: int main( int argc, char *argv[] ); int main( int argc, char **argv );

SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编写均建立在前文SpringMVC学习(五)——SpringMVC的参数绑定的案例基础之上,因此希望读者能仔细阅读这篇文章. 绑定数组 现有这样一个需求:在商品列表页面选中多个商品,然后删除之.下面是我对该需求的分析:此功能要求商品列表页面中的每个商品前有一个checkbook(复选框),选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id批量删除商品信息. 首先将itemList.jsp页面改

python 学习笔记 11 -- 使用参数使你的程序变得更性感

当然,在之前的系列中,我已介绍如何给 Python 脚本传参,当然,今天不会继续介绍这么无聊的东东.首先使用 python 的sys.argv 传参的话,就固定了参数的个数.顺序以及格式,这么死的规定如何性感? I have a dream , to make my code much sexer ! 今天我们简单介绍一下如何更加随性的给 python 脚本传参.效果如下: [email protected]:/tmp$ python arg.py -h NAME: project with u

【神经网络学习笔记】LIBSVM参数讲解

支持向量机SVM(Support Vector Machine)作为一种可训练的机器学习方法可以实现模式分类和非线性回归,本文就matlab中的LIBSVM工具箱展开说明. 在matlab中调用LIBSVM工具箱可以方便的使用LIBSVM网络,台湾大学的林智仁教授已经封装好各方法,大家可以在此下载. LIBSVM工具箱的主要函数为svmtrain和svmpredict,调用格式为 model = svmtrain(train_lable,train_data,options); [predict

JavaScript学习之获取URL参数

最近看了几道面试题,其中有一道就是关于写一个方法来获取浏览器地址栏URL查询部分的字段内容.虽然之前看过相关的东西,但感觉有点模糊,所以就又全面的学习一遍,谨以此文记之! 准备知识 在JavaScript中,既然说到URL(这里也只是根据本题浅显介绍),那肯定就要说Location对象了: ①Location对象是window对象的一个属性,可通过window.location来访问(因为window就是全局对象,所以可以直接使用location来引用Location对象喽): ②Locatio

SpringMVC学习(五)——SpringMVC的参数绑定

SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案例代码的编写均建立在前文SpringMVC学习(四)——Spring.MyBatis和SpringMVC的整合的案例基础之上,因此希望读者能仔细阅读这篇文章. 默认支持的数据类型 现在有这样一个需求:打开商品编辑页面,展示商品信息.这是我对这个需求的分析:编辑商品信息,需要根据商品id查询商品信息,然后展示到页面.我这里假设请求的url为/itemEdit.action,由于我想要根据商品id查询商品信息,所以需要传

关于HttpClient的学习心得,请求参数中文乱码问题

最近调用了一个第三方接口,接口文档限定是 HTTPS post 请求 参数是 json格式.然后随便在网上找了一份HttpClient的工具代码,然后直接调用post的请求,参数也觉得没有问题,返回值也正常,但是后来发现参数中的中文全部变成了问号传递过去了,后来发现是参数传递时编码没有指定,现记录下来以供以后学习查看,有遇到和我一样问题的初学者可以减少差询问题的时间. 代码如下: HttpClient httpClient = null; HttpPost httpPost = null; St

TensorFlow-谷歌深度学习库 命令行参数

程序的入口: tf.app.run tf.app.run( main=None, argv=None ) 运行程序,可以提供'main'函数以及函数参数列表.处理flag解析然后执行main函数. 什么是flag解析呢? 由于深度学习神经网络往往需要对各种Hyperparameter调优,比如学习率,卷积核参数设置等等, 这时使用命令行调参是非常方便的. 需要用到TensorFlow框架中的tf.app.flags组件 tf.app.flags组件中提供很多自带的设置不同类型命令行参数以及其默认

Python学习记录3-函数参数详解

参数详解 参数分类 普通参数 默认参数 关键字参数 收集参数 普通参数 定义时直接定义变量名 调用的时候直接把变量或者值放入指定位置 def 函数名 (参数1, 参数2, ....): 函数体 # 调用 函数名 (value1, value2, ....) # 调用的时候,具体值参考的是位置,按位置赋值 默认参数 形参带有默认值 调用的时候,如果没有对相应形参赋值,则使用默认值 def func_name(p1=v1, p2=v2, ....): func_block #调用1 func_nam