第五课-光照和反射

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 每个反射系数项 (ka, kd, ks)表示入射光经过光与材质作用 以后出射的比例 • Phong指数则反映了物体的光滑程度(高光)
增加镜面反射率
增加高光系数
增加漫反射系数
平面明暗处理-Flat Shading
• 没有插值 – 对每个顶点通过光照方程计算颜色 – 使用第一个顶点的颜色来绘制整个 几何单元的颜色 • 性质 – 效率极高 – 适用于多边形化较好的几何体
表面明暗处理 Illumination & Shading
在真实世界中拍照片
• 光线从光源出发,在空间直线传播 • 光线射到物体上,从物体表面反射或穿过 物体(折射) • 光线最终到达视点(人眼或者照相机)
反射
折射
折射
看见了什么?
散射
• 根据光的波长不同折射率不同
彩虹
• 折射、内部反射和散射
光照属性设置
glLightModelfv( property, value ); • 打开双面光照
GL_LIGHT_MODEL_TWO_SIDE
• 全局泛光颜色
GL_LIGHT_MODEL_AMBIENT
• 光照计算模式
GL_LIGHT_MODEL_LOCAL_VIEWER
• 高光计算模式
GL_LIGHT_MODEL_COLOR_CONTROL
– 不是无穷小 – 各向异性的亮度 – 复杂结构
OpenGL中的光照计算
• 光照模拟了物体反射入射光的过程
– 物体的材质合成 – 光源的颜色和位置 – 全局光照属性 • 泛光 • 双面光照
OpenGL 中光照的模拟
• Phong 光照模型
– 对每个顶点进行计算
• 影响光照的几个属性
– 曲面材质属性 – 光源属性 – 光照模型属性
大气效果-Atmospheric Effects
这是什么?
波的干涉
• 同相位的波叠加后互相加强 • 不同相位的波叠加后互相抵消
这是什么?
光的衍射
• 物体表面有条纹排列,这些条纹排列与光 的波长排列类似 • 一些光波的反射被加强,一些被削弱
这是什么效果?
光是什么?
• 牛顿(1666)
– 光是一种粒子
如何计算V·R
V +L • 计算L和V之间的半角向量h: h = V +L
I s = k s (h ⋅ N )
n
Phong高光
环境泛光
• 环境泛光表示所有的间接光照(是一种近 似) • 使得没有被光源照到的地方也有一定的亮 度 • 是一个常数
Phong光照模型
• 三个分量之和
– 漫反射分量+镜面反射分量+环境泛光

glEnable( GL_RESCALE_NORMAL )
材质属性
• 定义一个绘制元素的曲面属性
• glMaterialfv( face, property, value );
GL_DIFFUSE GL_SPECULAR GL_AMBIENT GL_EMISSION GL_SHININESS
漫射分量:基本的 高光 泛光 自发射光 高光系数
• 物体表面属性
– 反射光谱(即物体表面颜色) – 几何(物体表面的位置、朝向和表面微结构)
直接光照和全局光照
• 直接光照:物体表面的点直接接受场景中 光源的照明
– 通过局部光照明模型计算 – 决定哪个光源可见
• 全局光照:物体表面的点受到与其它物体 相交后的光线的照射
3 2 1
反射模型
• 由Phong提出的简单模型:
OpenGL支持平面明暗处理: glShadeModel(GL_FLAT)
Gouraud明暗处理
• 插值颜色 – 对每个顶点通过光照方程计算颜色 – 在三角形的边上线性插值得到暗色 – 在扫面线上线性插值得到最终的颜色 • 性质 – 效率很高 – 对于三角形内部的颜色细节不能模拟
OpenGL支持Gouraud明暗处理: glShadeModel(GL_SMOOTH)
• 托马斯·杨 (1801)
– 光是一种波
• 麦斯韦尔(1860)
– 光是电磁波
• 爱因斯坦(1905)
– 光由光子组成
• 现代理论:具有波-粒子的双重性质
电磁光谱
光谱颜色
三原色原理
颜色的相加
颜色的吸收
颜色的相减
CMYK打印
光照的两个要素
• 光源:
– 所发射光的光谱(即颜色) – 几何(光源位置和方向) – 方向衰减率
– 漫反射分量 + – 镜面反射分量 + – “泛光”
漫反射明暗处理
• 模拟不平整的表面 – 在任何方向都反射光源射过来的光线 – 暗淡、不光滑的材质(例如粉笔) • 理想漫反射 – 也叫Lambert反射模型 – 物体表面在每个方向的反射量一样 – 在每个方向观察都一样 – 反射光的强度只与光源方向有关
• 光源位置由齐次坐标中的w分量控制
w= 0 方 光( x y z) 向 w ≠ 0 位 在(x w y w z w)的 部 源 置 局 光
远距离光源
• 渲染计算通常计算从表面任意一点到光源的方向 • 如果光源无限远,所有的向量是平行的(如日光) • 简单地用光照方向
方向光源:
x y p0 = z 1 x y p0 = z 0
漫反射光计算
• Lambert漫反射模型
光源的强度。 IL:光源的强度。 漫反射系数, 三个分量, 三个分量 kd:漫反射系数,有RGB三个分量,表 示此面片对光照的反射能力,范围 示此面片对光照的反射能力,范围[0,1]。 。 法向。 n :法向。 光照方向。 L:光照方向。
I
:反射进入眼睛的光强。 反射进入眼睛的光强。
位置光源
光源衰减
• 需要考虑光线在传播过程中 出现的衰减
I = La ka + f att I d kd ( N • L)
f att =
1 a + bd L + cd L
2
a=b=0; c=1 a=b=0.25; c=0.5 a=0; b=1; c=0
光源衰减
• glLightf(GL_LIGHT0,GL_CONSTANT_AT TENUATION,2.0); glLightf(GL_LIGHT0,GL_LINEAR_ATTEN UATION,1.0); glLightf(GL_LIGHT0,GL_QUADRATIC_AT TENUATION,0.5);
• 顶点的法向
– 将相邻面的法向平均得到顶点的法向 – 但是对于尖锐的表面不适用
• 顶点/三角形
– 计算出每个顶点的法向,对于每个三角形存储它们 – 在尖锐处的顶点有多个法向
渲染和光照 Shading & Lighting
• 固定渲染
– 通常用于已经计算好的光照显示 – 对于每个顶点或者每个面指定颜色
渲染和光照 Shading & Lighting
• 光照
– 使用OpenGL计算颜色 – 对于每个顶点或者每个面指定法向
局部光照明模型的缺陷
• 全局光照
– – – – 阴影 折射 反射 相互漫反射
• 表面真实的细节
– 子面散射(subsurface scattering) – 各向异性的反射
• 真实光源
漫反射光跟视线方向无关! 漫反射光跟视线方向无关!
理想漫反射
• 如果n和L之间的夹角为钝角,n·L为负值
漫反射例子
镜面反射
• 模拟较光滑的表面 – 在某一方向反射光线 – 光滑、有光泽的材质(例如金属表面) – 高光会随着视点的变化而变化 • 理想镜面反射 – 入射光线反射符合镜面反射定律
绝大多数表面不是理想的镜面
• 顶点光照颜色的计算包括四个分量:
– – – – Ambient Diffuse Specular Emission
曲面法向
• 法向是曲面的局部属性,反映了曲面如何 反射入射进来的光
• glNormal3f( x, y, z )
– 当前设置的法向用于计算当前设置的顶点 – 法向是单位向量!
• 最好不要用下面的OpenGL法向归一化程序 glEnable( GL_NORMALIZE )
– 可分别设置前面和背面属性
光源属性
• glLightfv( light, property, value ); – light指定了第几个光源
• 场景中可饱含多个光源,从 GL_LIGHT0开始标记 开始标记 glGetIntegerv( GL_MAX_LIGHTS, &n );
– 光源属性
• 颜色 • 位置与类型 • 衰减系数
打开光源
• 打开第n个光源
glEnable( GL_LIGHTn );
• 打开光照
glEnable( GL_LIGHTING );
光源与材质(演示)
光源位置演示
高级光照属性
• 聚光灯
– 局部的光照明效果
• GL_SPOT_DIRECTION • GL_SPOT_CUTOFF • GL_SPOT_EXPONENT
镜面反射计算
• 能看见多少高光? • 取决于:
– 光的入射角 – 视线角度
镜面反射计算
非理想镜面反射
• 真实的材质在镜面反射角度外还有反射存 在
非理想镜面反射
• 在镜面反射角度反射光最强 • 反射光在镜面反射方向形成反射光束
Phong镜面反射模型
n的作用
• 高光指数n • 当n增大时, 的值也变得越来越窄
Phong光照模型
材质属性
• 场景中的物体必须定义它的漫射、镜面和泛 光属性
ka :ambient reflectance k :diffuse reflectance Surface Data = d ks:specular reflectance n:phong exponent
Βιβλιοθήκη Baidu
Phong明暗处理
• 插值法向 – 对于每个象素通过光照方程计算 颜色 • 性质 – 计算代价较高 – 绘制效果最好
OpenGL只有通过GLSL才能支持 Phong明暗处理
光照 Lighting
三角形的法向
• 三角形的法向
– 三角形定义一个平面 – 可以很容易从顶点计算得到单位法向向量 – 三角形的方向与顶点的顺序有关
光源 (续)
• 光源的颜色属性
– GL_AMBIENT :泛光项 – GL_DIFFUSE :漫射光项 – GL_SPECULAR:高光项 :
• 光源的位置和类型: 光源的位置和类型:
– GL_POSITION
光源的属性
• OpenGL 支持两类光源
– 局部点光源 – 无穷远处的方向光源(平行光)
相关文档
最新文档