简单光照明的Phong模型
光照模型
S
N
S R V
简单光照模型-镜面反射
• 镜面反射光特点
– 空间分布具有一定方向性 – 光强不仅取决于入射光和表面材料,还与观察方向
有关 – 具有与入射光相同的性质
N R L
P
镜面反射
简单光照模型-Phong光照模型
• 简单光照模型模拟物体表面对光的反射 作用,光源为点光源 • 反射作用分为
• 1975年,Phong提出图形学中第一个有影
简单光照模型-Phong光照模型
• Phong光照模型的综合表述:由物体表面上 一点P反射到视点的光强I为环境光的反射 光强Ie、理想漫反射光强Id、和镜面反射光 Is的总和。
I Ie Id Is
I a Ka I p [ Kd ( L N ) K s (V R)n ]
考虑周围环境对当前景物表面的光照影
响,忽略了光在环境景物之间的传递,
很难表现自然界复杂场景的高质量真实
感图形。为了增加图形的真实感,必须
考虑环境的漫射、镜面反射和规则投射
对景物表面产生的整体照明效果。
7.3.6 整体光照模型
• 物体表面入射光的构成
(1)光源直接照射
(2)其它物体的反射光 (3)透射光
• 点光源的照射:在物体的不同部分其亮度也
不同,亮度的大小依赖于物体的朝向及它与点光源 之间的距离.
简单光照模型-漫反射角度余弦的推导
• 漫反射
– 粗糙、无光泽物体(如粉笔)表面对光的反射 – 光照方程
I d I p K d cos
[0, ]
2
• I d 漫反射的亮度 • I p 点光源的亮度
N
R L
N
phong光照模型
05
Phong光照模型的优缺 点
优点
真实感强
Phong光照模型能够模拟出较为真实的光照效果,通过计算不同表 面的反射特性,能够呈现出较为逼真的材质质感。
灵活性高
Phong光照模型提供了多种光照参数,如环境光、漫反射光和镜面 光等,允许开发者根据需求调整光照效果,以适应不同的场景和需 求。
易于实现
。
编写着色器
Unity使用着色器来实现光照模型,需要编写相应的Phong 着色器代码。
渲染图像
将着色器代码应用到物体上,并根据光源和材质属性计算 出物体的光照强度,最终渲染出具有真实感的3D图像。
THANKS FOR WATCHING
感谢您的观看
沉浸式体验
Phong光照模型能够提供逼真的光照效果,使虚拟现实场景更加 真实、自然,提高用户的沉浸感。
交互式探索
通过Phong光照模型,虚拟现实开发者可以为用户提供更加丰富的 交互体验,如实时调整光照、观察物体表面的反射等。
教育与培训
Phong光照模型在虚拟现实中的教育应用也很广泛,如模拟实验、 历史场景重建等,有助于提高学习效果和培训质量。
04
Phong光照模型的应用
游戏开发
逼真渲染
Phong光照模型能够提供 逼真的光照效果,使游戏 场景更加真实、生动。
细节表现
通过Phong光照模型,游 戏开发者可以更好地表现 物体的细节和纹理,提升 游戏的视觉体验。
交互性增强
Phong光照模型能够根据 玩家的视角和动作实时调 整光照效果,增强游戏的 交互性和沉浸感。
折射光
折射光的概念
折射光是指光线在穿过透明物体时发生折射后形成的影像。在Phong光照模型中,折射光的计也是实现逼真光照效 果的重要一环。
ww光照模型是真实感图形渲染的基础
Phong Demo
1.简介
光照模型是真实感图形渲染的基础,从1967年Wylie等人第一次在显示物体的时候加进光照效果后,该领域迅速的发展。
简单的光照模型模拟物体表面对光的反射作用,它只考虑物体对直接光照的反射作用,而物体间的反射光只用环境光统一表示。
Phong模型就是这样一种模型。
Phong光照模型可以表述为:由物体表面上一点P反射到视点的光强I为环境光的反射光强I e、理想漫反射光强I d和镜面反射光I s的总和,即:
I=I a K a+I p K d L⋅N+I p K s R⋅V n
2.程序用法
通过动态的调节Phong模型中的各种参数并观察其对最重效果的影响,学生可以直观的看到环境光强、理想漫反射光强和镜面反射光对最终结果的影响,进而更加直观的理解该模型中各个成分的作用。
phong着色
Phong光照模型的简单说明我简单地介绍一下Phong光照模型...虽然这种光照模型算是比较古老的,但是通过合适的参数设置,仍然可以实现真实的效果。
我们的目标是渲染出以下效果,这里以Doom3的男主角为例(终于不是怪物了...)一般而言,Phong光照模型分为三个累加阶段:漫反射,镜面反射和环境光以下按顺序说明:1.漫反射(Diffuse)对于表面比较粗糙的物体,基本表面的明暗就是漫反射效果,比如裤子的材质。
某一个象素的明暗系数只取决于该点与光源的相对位置,而与眼睛的位置无关。
diffuse_color = base_map * (N * V_L )* mat_diffuse * light_diffuse;上式中base_map代表该点的基础颜色,一般通过纹理索引;N 是该点的法线;V_L是该点到光源方向的单位向量;N * V_L 即两者的点积,注意需要用max( ( N * V_L ), 0 ),因为负的值是没有意义的;mat_diffuse和light_diffuse分别是材质和光源的漫反射系数,用来宏观调制漫反射的颜色。
下图是只有N * V_L 项的渲染结果:2.镜面反射(Specular)尽管漫反射已经可以很好地表达光照,但是由于它是与视点无关的,所以多少有些欠缺生动,而镜面反射是视点相关的,所以会随着眼睛位置的变化而“流动”。
specular_color = pow( v_e' * v_l, gloss ) * mat_specular * light_specular;这里解释一下:v_e' 是e_v的反射向量(v_e' = reflect( e_v, n ) ),而e_v是眼睛到该点的单位向量,所谓反射向量,即以与该点的法线所垂直的平面做镜面反射所得到的向量(虽然按照原理来说,应该是光线反射,而非视线反射...都没有问题吧);v_l是该点到光源的单位向量;v_e' * v_l 是两者的点积, 同样要用max(v_e' * v_l,0),负的值也是不需要的;pow是幂积,点积是底,gloss是指数;gloss用来调制亮斑的大小,一般来说,gloss越大,光斑越细小,gloss越小,光斑分布越宽泛。
Phong光照模型
Phong光照模型简介在3D计算机图形学中,Phong着⾊是计算机图形学先驱Bui Tuong Phong发明的⼀种⽤于表⾯着⾊的插值技术。
也称为Phong插值或法向⽮量插值阴影。
它会在栅格化的多边形上内插表⾯法线,并根据内插法线和反射模型计算像素颜⾊。
Phong阴影也可以指Phong插值和Phong反射模型的特定组合。
主要过程:计算多边形顶点的法向量双线性插值计算每个像素点的法向量通过每个像素的法向量计算光强根据光强绘制像素历史:在1975年,由Phong提出,以他的名字冠名,是⼀种局部光照的模型。
Phong着⾊法与Gouraud着⾊法⽐较Phong着⾊法与Gouraud着⾊法类似,区别在于进⾏双线性插值的不是光照强度本⾝,⽽是顶点的法线。
因此使⽤这种着⾊法计算出的⾼光⽐Gouraud着⾊更精确。
Phong着⾊法与Gouraud著⾊法⽐较,Phong著⾊法的效果更逼真,能够提供更好的光滑曲⾯的近似值。
Phong著⾊法假设⼀个平滑变化的曲⾯为⼀⽮量。
在对于有较⼩的⾼光曲线区的反射模型,例如Phong模型时,Phong著⾊法⽐Gouraud著⾊法更优。
但运算程序也⽐前者为复杂。
Gouraud著⾊法在遇到在较⼤的多边形模型中央有⾼光曲线区时会产⽣严重的问题。
因为这些⾼光曲线区在多边形的顶点处会产⽣缺失⽽Gouraud著⾊法是基于顶点的颜⾊的,这些⾼光曲线区会从多边形的内部缺失。
这个问题在Phong著⾊法中得到了解决。
不同于通过多边形差值的Gouraud著⾊法,Phong著⾊法中⼀个⽮量是从多边形顶点的法线到多边形表⾯进⾏差值的。
为了或得到最后的像素颜⾊,⾯的法线被差值,应⽤于⼀个反射模型。
由于Phong著⾊法需要逐像素点进⾏计算,因此运算量远⼤于Gouraud著⾊法。
Phong光照模型是真实图形学中提出的第⼀个有影响的光照明模型,该模型只考虑物体对直接光照的反射作⽤,认为环境光是常量,没有考虑物体之间相互的反射光,物体间的反射光只⽤环境光表⽰。
计算机图形学中的光照模型比较
计算机图形学中的光照模型比较计算机图形学是研究如何使用计算机生成、处理和显示图像的学科领域,而光照模型是其中非常重要的一部分。
在计算机图形学中,光照模型用于模拟物体表面与光源之间的相互作用,以达到生成逼真图像的目的。
光照模型的选择对于渲染出真实感的图像具有重要的影响。
在本文中,我们将比较几种常见的光照模型,包括经典的Phong模型、Blinn-Phong模型和非真实感渲染中的简化光照模型。
Phong模型是计算机图形学中最早被提出,并被广泛应用的光照模型之一。
Phong模型通过将光照效果分为环境光、漫反射光和镜面光三个分量来模拟光照效果。
环境光是指由于光源在场景中的反射和散射而产生的光,漫反射光是指光源照射到物体表面后发生散射的光,镜面光是指光源照射到物体表面后发生反射的光。
Phong模型通过计算这三个分量的相对强度和颜色来生成逼真的光照效果。
尽管Phong模型能够产生良好的视觉效果,但它对镜面反射的计算较为复杂,需要大量的计算资源。
Blinn-Phong模型是Phong模型的一个改进版本。
与Phong 模型相比,Blinn-Phong模型在计算镜面反射光时采用了一种更简化的计算方式。
Blinn-Phong模型使用了一个半向量来替代Phong模型中的反射向量,从而减少了计算量。
这种简化的计算方式使得Blinn-Phong模型比Phong模型更适合于实时渲染,因为它能够在保持相对较高的性能的同时产生相似的视觉效果。
Blinn-Phong模型在计算镜面反射光的同时,还考虑了物体表面的粗糙程度,以产生光照的模糊效果。
在非真实感渲染中,简化的光照模型通常用于模拟卡通风格或艺术风格的图像。
这些光照模型通过简化Phong模型或Blinn-Phong模型中的计算步骤,达到减少计算量、速度更快的目的。
例如,卡通渲染通常使用了一个固定的漫反射光方向和强度,以达到平面和明亮的效果。
另一个例子是使用了一种简化的环境光照模型,将物体表面分成几个离散的区域并为每个区域分配一个不同的亮度值和颜色值,以产生卡通风格的图像。
简单光照明模型
1
y2
I1 ys
y2 I2 y1
ys
Ib
y1
1
y4
I1 ys
y4
I4 y1
ys
Ia
Is I2
Ib
扫描线
I4
Is
xb
1
xa
Ib xs
xa
Ia xb
xs
x
oy
I3
双线性光强插值
如果采用增量算法,当扫描线ys由j变成j+1时,新扫描线上的点(xa,j+1)和(xb,j+1)的光强,可以由前一条 扫描线与边的交点(xa,j)和(xb,j)的光强作一次加法得到:
1、双线性光强插值(Gourand明暗处理)
• 流程:先计算物体表面多边形各顶点的光强,然后用双线性插值,求出多边形内部区域中各点的光强。 • 基本算法描述如下 • (1)计算多边形顶点的平均法向 • (2)用 Phong光照明模型计算顶点的平均光强 • (3)插值计算离散边上的各点光强。 • (4)插值计算多边形内域中各点的光强
中的符号如下图,其中η1,η2分别对应介质的折射率。 入射光
θ η1
η2 α 折射光
(3)能量关系
在光的反射和折射现象中,能量是守恒的,能量的分布情况满足如下公式:
Ii=Id+Is+It+Iv
Ii :为入射光强,由直接光源或间接光源引起; Id:为漫反射光强,由表面不光滑引起; Is:为镜面反射光强,由表面光滑性引起; It:为透射光强,由物体的透光性引起; Iv:为被物体吸收的光强,由能量损耗引起。
• 增量式光照明模型的基本思想是: (1)在每一个多边形的顶点处,计算合适的光照明强度或其他参数; (2)然后在各个多边形内部进行均匀插值(用来填充图像变换时像素之间的空隙); (3)最后得到多边形的光滑颜色分布。 插值的两种形式:双线性光强插值(Gourand明暗处理)和双线性法向插值(Phong明暗处理)
phong光照模型公式
phong光照模型公式Phong光照模型公式介绍•光照模型是计算计算机图形学中的重要概念之一,它描述了光照在物体表面的作用。
•Phong光照模型是计算机图形学中最常用的光照模型之一,由Bui Tuong Phong提出。
•本文将详细介绍Phong光照模型的公式及其各个组成部分。
Phong光照模型公式Phong光照模型可以分为三个独立的部分:环境光照、漫反射光照和镜面光照。
它们的组合就是物体的最终光照效果。
环境光照•环境光照是来自周围环境的无方向光,对物体的作用均匀而全局。
•环境光照的计算公式为:Ia = ka * La•其中,Ia是环境光照的强度,ka是环境光照系数,La是环境光颜色。
漫反射光照•漫反射光照是来自光源的有方向光,对物体表面的不同区域有不同的作用。
•漫反射光照的计算公式为:Id = kd * Ld * max(0, N · L)•其中,Id是漫反射光照的强度,kd是漫反射系数,Ld是光源颜色,N是物体表面法向量,L是光源方向向量。
镜面光照•镜面光照是来自光源的有方向光,对物体表面的特定区域产生高光效果。
•镜面光照的计算公式为:Is = ks * Ls * max(0, R · V)^s •其中,Is是镜面光照的强度,ks是镜面反射系数,Ls是光源颜色,R是光的反射方向向量,V是视线方向向量,s是镜面光照的反射指数。
光照模型的应用•Phong光照模型通常用于计算机图形学中的渲染算法,用于模拟真实世界中的光照效果。
•光照模型的计算可以应用于三维模型的表面上,使其在渲染过程中呈现出真实感和立体感。
总结•Phong光照模型通过组合环境光照、漫反射光照和镜面光照三个部分,可以模拟真实世界中的光照效果。
•光照模型在计算机图形学中有着广泛的应用,能够提升渲染效果和真实感。
•了解Phong光照模型的公式及其组成部分,对于研究和应用计算机图形学具有重要意义。
以上是对Phong光照模型公式的介绍和解析。
计算机形学光照模型基础知识全面解析
计算机形学光照模型基础知识全面解析计算机图形学的光照模型是模拟真实世界中的光照效果,使得计算机生成的图像更加逼真。
本文将全面解析计算机形学光照模型的基础知识,帮助读者深入了解光照模型的原理和应用。
一、光照模型的概述光照模型是计算机图形学中的重要内容,它可以模拟光照对物体的影响,使得计算机生成的图像具有真实感。
光照模型通常由三部分组成,分别是环境光、漫反射光和镜面光。
这三部分光线的叠加决定了物体在计算机图像中的亮度和明暗。
1. 环境光:环境光是指来自无特定方向的光线,它可以认为是光线在环境中的均匀散射。
环境光的强度在整个场景中是恒定的,它决定了整个场景的基准亮度。
2. 漫反射光:漫反射光是指光线照射到物体表面后均匀散射的光线。
漫反射光的强度受到物体表面法线和光线入射方向的夹角以及材质的反射特性的影响,决定了物体的明暗。
3. 镜面光:镜面光是指光线照射到物体表面后沿着反射角方向反射的光线,它使得物体表面呈现出高光效果。
镜面光的强度受到光线入射方向、观察者方向以及物体表面的平滑程度等因素的影响。
二、经典的光照模型计算机图形学中有多种经典的光照模型,本节将介绍其中的两种:Lambert模型和Phong模型。
这两种模型分别从漫反射光和镜面光的角度考虑光照效果。
1. Lambert模型Lambert模型是一种最简单的光照模型,它只考虑漫反射光的影响。
Lambert模型中,物体表面的明暗只与光线入射方向和物体表面法线的夹角有关,与观察者方向无关。
该模型的计算公式为:I = Ia * Ka + Ip * Kd * cosθ其中,I表示最终的颜色强度,Ia表示环境光的强度,Ka表示物体表面的环境光反射系数,Ip表示光源的强度,Kd表示物体表面的漫反射系数,θ表示光线入射方向与物体表面法线的夹角。
2. Phong模型Phong模型是一种综合考虑漫反射光和镜面光的影响的光照模型。
Phong模型根据光线入射方向、观察者方向和物体表面的平滑程度来计算镜面光的反射强度,从而使得物体表面呈现出光泽感。
第9章 phong光照模型
9.1.2 材 质
Computer Graphics
材质的颜色是由它所反射的光的波长决定 如果光线被投射至一个不透明的物体表面,则部分 光线被反射,部分被吸收
物体表面的材质类型决定了反射光的强弱 表面光滑较亮的材质将反射较多的入射光,而较 暗的表面则吸收较多的入射光。 同样对于一个半透明物体的表面,部分入射光会被 反射,而另一部分则被折射。
Computer Graphics
第九章
简单光照明模型
光照模型:
Computer Graphics
根据光学物理中的有关定律,计算出景物表面上任一点投向观 察者眼中的光亮度的大小和色彩组成的公式,从而在显示器上 生成所显示的真实感图形。
生成连续色调的真实感图形的四个主要步骤:
用数学方法建立所构造三维场景的几何描述,并 将它们输入计算机。(造型)
Ipscosnθ θ
Ips
θ
E’
D E‘
光亮度 Ipd
E D E’
(a)
(b)
图 Phong光照明模型用于光滑球面时的情形
漫反射系数/镜面反射系数
Computer Graphics
4. Phong模型
Computer Graphics
I I paka I p (kd cosi ks cosn )
c
osi
k
s
rps g ps
c
osn
b
bpa
bpd
bps
光谱量对应的颜色可由用户直接指定
一旦反射光中三种分量的颜色以及它们的系数ka, kd和ks确 定之后,从景物表面上某点达到观察者的反射光颜色就仅仅
计算机图形学实验报告-实验5Phong光照模型
计算机图形学实验报告班级计算机工硕班学号 **********姓名王泽晶实验五: Phong光照模型实验目的通过本次试验,学生可以掌握简单光照明模型的计算,以及真实感绘制中三维场景搭建的初步知识。
实验内容:对给定的光源、相机状态,对球进行Phong光照明模型绘制。
搭建三维场景:a)在三维空间中摆放1个球,半径为R,默认为50 ,摆放位置为(0,0,0)b)球的材质默认值为Ka = (0.1,0.1,0.1), Kd = (0,0,0.8), Ks = 0.2, n = 10c)视点方向初始为(0,0,1),光源方向初始为(1,1,1)d)视口设置为x0 = -100, y0 = -75, w = 200, h = 150使用phong模型绘制场景试验步骤:添加成员函数,编写成员数代码为override public function computeIntersection( viewStart:Vec3, viewDir:Vec3):Boolean {// See /geometry/sphereline/var viewEnd:Vec3 = viewStart.add(viewDir);var A:Number = Math.pow(viewEnd.getVec(0) - viewStart.getVec(0), 2)+Math.pow(viewEnd.getVec(1) - viewStart.getVec(1), 2) +Math.pow(viewEnd.getVec(2) - viewStart.getVec(2), 2);var B:Number =((viewEnd.getVec(0) - viewStart.getVec(0)) * (viewStart.getVec(0) - _position.getVec(0)) +(viewEnd.getVec(1) - viewStart.getVec(1)) * (viewStart.getVec(1) -_position.getVec(1)) +(viewEnd.getVec(2) - viewStart.getVec(2)) * (viewStart.getVec(2) -_position.getVec(2))) * 2.0;var C:Number = Math.pow(_position.getVec(0) - viewStart.getVec(0), 2) + Math.pow(_position.getVec(1) - viewStart.getVec(1), 2) +Math.pow(_position.getVec(2) - viewStart.getVec(2), 2) - _radius*_radius;// Solve C + Bt + At^2 = 0var delta:Number = B*B - 4*A*C;if ( delta<0.0 || A==0.0 ) return false;// We don't consider whether 0<t<1 here because real viewer is at infinite place var t1:Number = (-B + Math.sqrt(delta)) / (2*A);var t2:Number = (-B - Math.sqrt(delta)) / (2*A);if ( t1<t2 )point = viewStart.multiplyk(1.0 - t1).add(viewEnd.multiplyk(t1));elsepoint = viewStart.multiplyk(1.0 - t2).add(viewEnd.multiplyk(t2));normal = Vec3.normalize(point.minus(_position));return true;}public var _width :Number =0.0;public var _height:Number = 0.0;public var data:Array = new Array();protected function group1_creationCompleteHandler(event:FlexEvent):void{draw();}public function draw():void{graphics.clear();if(txtViewDir.text == "")return;var ary:Array = txtViewDir.text.split(",");var flag:Boolean = false;for(var i:int= 0;i<ary.length;i++){if(ary[i] == "" || isNaN(ary[i])){flag = true;break;}}if(flag)txtViewDir.setStyle("color",0xff0000);return;}txtViewDir.setStyle("color",0x000000);var viewDir:Vec3 = new Vec3(Number(ary[0]), Number(ary[1]), Number(ary[2]));ary = txtLight.text.split(",");flag = false;for(i= 0;i<ary.length;i++){if(ary[i] == "" || isNaN(ary[i])){flag = true;break;}}if(flag){txtLight.setStyle("color",0xff0000);return;}txtLight.setStyle("color",0x000000);var light:Light = new Light();light.direction = new Vec3(Number(ary[0]), Number(ary[1]),Number(ary[2])).negative();light.ambient = new Vec3(Number(ary[0]), Number(ary[1]), Number(ary[2]));light.intensity = new Vec3(Number(ary[0]), Number(ary[1]), Number(ary[2]));var material:Material = new Material();material.diffuse =new Vec3(0.0, 0.0, 0.8);material.specular =new Vec3(0.2, 0.2, 0.2);material.ambient =new Vec3(0.1, 0.1, 0.1);data = createSceneImage( 200, 150, viewDir, light, material );drawImg();}public function drawImg():void{for(var y:int = 0 ;y<150;y++)for(var x:int =0;x<200;x++){var index:int = (y*200 + x) * 3;var r:Number = data[index+0];var g:Number = data[index+1];var b:Number = data[index+2];var cl:uint =(r << 16) | (g << 8) | b;this.graphics.beginFill(cl)this.graphics.drawCircle(x,y,1);this.graphics.endFill();}}}public function allocateBuffer( width:int,height: int ):Array{var data:Array = new Array();data.length = width * height * 3;_width = width;_height = heightreturn data;}public function createSceneImage( width:int,height: int ,viewDir:Vec3, light:Light, material:Material ):Array{var data:Array = new Array();var sphere:SphereObject = new SphereObject(50.0);sphere.setPosition(new Vec3(0.0, 0.0, 0.0) );sphere.setMaterial( material );var halfW:int = width / 2var halfH:int = height / 2;for ( var y:int=0; y<height; ++y ){for ( var x:int=0; x<width; ++x ){var viewStart:Vec3 = new Vec3(Number(x - halfW), Number(y - halfH), 0.0);if ( puteIntersection(viewStart, viewDir) )sphere.color = puteColor(light, viewDir, sphere.normal);elsesphere.color = new Vec3(0.1, 0.1, 0.1);var index:int = (y*width + x) * 3;data[index+0] = (sphere.color.getVec(0) * 255.0);data[index+1] = (sphere.color.getVec(1) * 255.0);data[index+2] = (sphere.color.getVec(2) * 255.0);}}return data;}protected function button1_clickHandler(event:MouseEvent):void {// TODO Auto-generated method stubdraw();}编译运行得到如下结果:。
光照模型
• 1975年,Phong提出图形学中第一个有影
简单光照模型-Phong光照模型
• Phong光照模型的综合表述:由物体表面上 一点P反射到视点的光强I为环境光的反射 光强Ie、理想漫反射光强Id、和镜面反射光 Is的总和。
I Ie Id Is
I a Ka I p [ Kd ( L N ) K s (V R)n ]
简单光照模型- 环境光例子
• 具有不同环境光反射系数的两个球
I a 1.0
Ka 0.4
Ka 0.8
简单光照模型-环境光
• 缺点:虽然不同的物体具有不同的亮度, 但是同一物体的表面的亮度是一个恒定 的值,没有明暗的自然过度。
简单光照模型
• 考虑引入点光源。
• 点光源:几何形状为一个点,位于空间中的某 个位置,向周围所有的方向上辐射等强度的光。 记其亮度为Ip
L S N S R
V
简单光照模型-镜面反射
• 镜面反射光特点
– 空间分布具有一定方向性 – 光强不仅取决于入射光和表面材料,还与观察方向
有关 – 具有与入射光相同的性质
N R L
P
镜面反射
简单光照模型-Phong光照模型
• 简单光照模型模拟物体表面对光的反射 作用,光源为点光源 • 反射作用分为
• 局部光照模型仅考虑了(1)
7.3.6 整体光照模型
• 例如:从视点观察到的物体A表 面的亮度来源于三方面的贡献: (1)光源直接照射到A的表面,然 后被反射到人眼中的光产生的。 (2)光源或其它物体的光经A物体 折射到人眼中的光产生的。 (3)物体B的表面将光反射到物体 A的表面,再经物体A的表面反射 到人眼中产生的。 • 局部光照模型仅考虑了(1)
光照模型——精选推荐
光照模型Lambert模型(漫反射)环境光:Iambdiff = Kd*Ia其中Ia 表⽰环境光强度,Kd(0<K<1)为材质对环境光的反射系数,Iambdiff是漫反射体与环境光交互反射的光强。
⽅向光:Ildiff = Kd * Il * Cos(θ)其中Il是点光源强度,θ是⼊射光⽅向与顶点法线的夹⾓,称⼊射⾓(0<=A<=90°),Ildiff是漫反射体与⽅向光交互反射的光强,若 N为顶点单位法向量,L表⽰从顶点指向光源的单位向量(注意顶点指向光源),则Cos(θ)等价于dot(N,L),故⼜有:Ildiff = Kd * Il * dot(N,L)最后综合环境光和⽅向光源,Lambert光照模型可以写成:Idiff = Iambdiff + Ildiff = Kd * Ia + Kd * Il * dot(N,L)Phong模型(镜⾯反射)Phong模型认为镜⾯反射的光强与反射光线和视线的夹⾓相关:Ispec = Ks * Il * ( dot(V,R) )^Ns其中Ks 为镜⾯反射系数,Ns是⾼光指数,V表⽰从顶点到视点的观察⽅向,R代表反射光⽅向。
由于反射光的⽅向R可以通过⼊射光⽅向L(从顶点指向光源)和物体的法向量求出,R + L = 2 * dot(N, L) * N 即 R = 2 * dot(N,L) * N - L所以最终的计算式为:Ispec = Ks * Il * ( dot(V, (2 * dot(N,L) * N – L ) )^NsBlinn-Phong光照模型(修正镜⾯光)Blinn-Phong是⼀个基于Phong模型修正的模型,其公式为:Ispec = Ks * Il * ( dot(N,H) )^Ns其中N是⼊射点的单位法向量,H是光⼊射⽅向L和视点⽅向V的中间向量,通常也称之为半⾓向量(半⾓向量被⼴泛⽤于各类光照模型,原因不但在于半⾓向量蕴含的信息价值,也在于半⾓向量是很简单的计算:H = (L + V) / |L + V| )。
9.2简单光照模型
PDF pdfFactory
一、Phong光照模型
在实际的应用中,由于Phong光照模型是一个经验模型, 因此还具有以下的一些问题: –显示出的物体象塑料,无质感变化 –没有考虑物体间相互反射光 –镜面反射颜色与材质无关 –镜面反射入射角大,会产生失真现象
PDF pdfFactory
PDF pdfFactory
三、背景物理知识
镜面反射光:一束光照射到一面镜子上或不绣钢的表面,光 线会沿着反射光方向全部反射出去,这种叫镜面反射光。 折射光:比如水晶、玻璃等,光线会穿过去一直往前走。 吸收光:比如冬天晒太阳会感觉到温暖,这是因为吸收了太 阳光。
PDF pdfFactory
PDF pdfFactory
PDF pdfFactory
PDF pdfFactory
二、光照模型的发展演化
1、早期发展 1967年,Wylie等人第一次在显示物体时加进光照效果, 认为光强与距离成反比。 1970年,Bouknight提出第一个光反射模型:Lambert漫 反射+环境光(第一个可用的光照模型)。这篇文章发表 在 Communication of ACM 上。 1971年,Gouraud提出漫反射模型加插值的思想(漫反射 的意思是光强主要取决于入射光的强度和入射光与法线的夹 角)发表在 IEEE Transactions on Computers 上。 1975年,Phong提出图形学中第一个最有影响的光照明模型 。在漫反射模型的基础上加进了高光项。
PDF pdfFactory
PDF pdfFactory
三、背景物理知识
1、光的传播规律 反射定律:入射角等于反射角,而且反射光线、入射光 线与法向量在同一平面上。
7_2Phong着色模型
2
Phong着色模型
1973年,Phong Bui Tuong(博士论文) 提出 Phong镜面反射模型
简称Phong模型 计算镜面反射光光强的经验公式
3
光照模型(1/3)
景物表面的材料 景物表面的材料
反射系数(反射光) 反射系数(反射光)——决定入射光中有多少光线被反射 决定入射光中有多少光线被反射
如果L, , 和 都是单位向量 都是单位向量, 如果 ,N,R和V都是单位向量,有
16
Phong模型
综合了漫反射、镜面反射及泛光反射分量
I = K a I a + K d I e cos α + k s I e cos γ
n
17
Phong光照明模型 光照明模型
多个光源, 多个光源,效果可以累积
通常,光强以RGB颜色向量表示 通常,光强以 颜色向量表示 反射系数也是三维向量,则单点光源公式为 反射系数也是三维向量,
20
Gouraud着色法
光强双线形插值
在多边形顶点使用照明公式( , , ), 在多边形顶点使用照明公式(P1,P2,P3), 其他点进行插值计算,体现渐变效果( , , ) 其他点进行插值计算,体现渐变效果(P’,P’’, P)
21
Phong着色法
法向量插值 计算方法同Gouraud 优缺点 能较好地模拟高光 相邻多边形之间的光亮度过渡更自然 计算量比Gouraud Shading要大得多 在镜面加亮方面有效
7
漫反射 (2/3)
Lambert余弦定律
理想漫反射体在点光源照射体表面法向之间夹角的余弦cosθ成正比 成正比 同入射光与物体表面法向之间夹角的余弦
I = k d I l cos θ
phong模型公式
phong模型公式Phong模型公式导言Phong模型公式是计算机图形学中一种重要的光照模型,用于模拟真实世界中的光照效果。
本文将介绍Phong模型公式的原理、应用以及一些注意事项。
Phong模型公式的原理Phong模型公式由Bui-Tuong Phong于1973年提出,它分为三个主要的部分:环境光反射、漫反射和镜面反射。
通过计算三者的叠加效果,可以得到物体表面的光照强度。
环境光反射环境光反射是指光源照射到物体表面后被散射到周围环境中的光线。
它与物体表面的材质属性无关,通常可视为均匀的柔和光照。
环境光反射的计算公式为:I_a = k_a * I其中,I_a为环境光强度,k_a为环境光系数,I为光源强度。
漫反射是指当光线照射到物体表面时,被物体材质粗糙度所散射的光线。
漫反射的强度取决于入射光线的角度和物体表面的法向量。
漫反射的计算公式为:I_d = k_d * I * (L · N)其中,I_d为漫反射强度,k_d为漫反射系数,I为光源强度,L 为光线方向向量,N为法向量。
镜面反射镜面反射是指光线照射到物体表面时,在光线方向上镜面反射的现象。
镜面反射主要与物体表面的镜面反射特性相关,如光线的反射方向和视角。
镜面反射的强度取决于视角、反射方向和光源的位置。
镜面反射的计算公式为:I_s = k_s * I * (R · V)^n其中,I_s为镜面反射强度,k_s为镜面反射系数,I为光源强度,R为反射方向向量,V为视角方向向量,n为反射系数。
Phong模型公式的应用Phong模型公式广泛应用于三维计算机图形学中的渲染引擎,用于计算物体表面的光照效果。
通过调整环境光系数、漫反射系数和镜面反射系数等参数,可以获得不同材质和光照条件下的逼真图像。
在使用Phong模型公式时,需要注意以下几个问题:•光源位置的选择对光照效果有重要影响,应根据实际场景进行调整。
•光照计算是基于像素级别的,因此需要进行光照插值以获得平滑的效果。
blinn phong 公式
blinn phong 公式Blinn-Phong光照模型是计算机图形学中常用的一种光照模型,用于模拟光照对物体表面的影响。
它的计算方式基于Phong光照模型的基础上进行了改进,能够更准确地模拟光照效果。
Blinn-Phong光照模型由一个反射项和一个镜面反射项组成。
反射项用来计算物体表面的漫反射和环境光反射,而镜面反射项则用来计算物体表面的镜面高光。
我们来看反射项的计算。
反射项由漫反射和环境光反射两部分组成。
漫反射用来模拟光线从不同方向照射到物体表面后的散射效果,而环境光反射则模拟了环境中的全局光照。
漫反射的计算方式是通过计算光线的入射角和物体表面法线的夹角来确定的。
入射角越大,漫反射强度越强。
而入射角和法线夹角的余弦值可以通过点乘操作来计算,点乘结果再乘以光照颜色和物体表面的漫反射系数,就得到了漫反射的最终颜色。
环境光反射则是通过将光照颜色和物体表面的环境光反射系数相乘,得到了环境光反射的最终颜色。
接下来,我们来看镜面反射项的计算。
镜面反射用来模拟光线从光源方向照射到物体表面后的反射效果,产生了高亮的镜面反射效果。
镜面反射的计算方式是通过计算光线的反射向量和观察向量的夹角来确定的。
反射向量是由光线的入射向量和物体表面法线共同确定的,而观察向量则是由观察者的位置和物体表面点的位置共同确定的。
观察向量和反射向量的夹角越小,镜面反射强度越强。
夹角的余弦值可以通过点乘操作来计算,再乘以光照颜色、物体表面的镜面反射系数和镜面指数,就得到了镜面反射的最终颜色。
将反射项和镜面反射项的颜色相加,就得到了Blinn-Phong光照模型的最终颜色。
Blinn-Phong光照模型的优点是计算简单,而且能够在保持较高渲染效果的同时,保证实时渲染的要求。
然而,它也有一些缺点,例如无法准确模拟透射、折射等效果。
在实际应用中,Blinn-Phong光照模型常被用于实时渲染、游戏开发等领域。
通过调整光照颜色、漫反射系数、环境光反射系数、镜面反射系数和镜面指数等参数,可以实现不同的光照效果,使得物体表面看起来更加真实和生动。
球体Phong光照模型课程设计报告
计算机图形学课程设计课程设计球体Pho ng光照模型亠、实验目的(1)掌握双线性法矢插值模型;(2) 掌握ZBuffer算法的思想;(3) 掌握有效边表填充算法;二、实验要求1、建立三维坐标系Oxyz,原点位于屏幕客户区中心,x轴水平向右为正,y轴垂直向上为正,z轴垂直于屏幕指向观察者。
2、绘制体心和坐标系中心重合的球体表面,使用Z-Buffer消隐算法进行消隐。
3、使用单点光源对球体进行照射生成Pho ng光照模型,光源位置位于球体右上方。
4、背景色设置为RGB(128,0,0)。
5、使用键盘方向键旋转球体。
6使用鼠标左击缩小球体、右击增大球体。
三、实验步骤建立球体的网格模型,使用地理划分法将球体北极和南极划分为三角形面片,其余部分划分为四边形面片,先对球体网格模型进行背面剔除,然后使用深度缓冲算法进行消隐。
计算面片各顶点的平均法矢量,然后采用双线性法失插值计算面片内各点的法矢量。
最终根据每点的法矢量对光源的朝向,通过简单光照模型计算所获得的光强。
面片使用有效边表算法填1、Pho ng双线性法矢插值模型Gouraud双线性光强插值模型解决了相邻多边形之间的颜色突变问题,产生的真实感图形颜色过渡均匀,图形显得非常光滑,这是它的优点,但是,由于采用光强插值,其镜面反射光效果不太理想,而且相邻多边形边界处的马赫带效应并不能完全消除。
Phong 模型提出的双线性法矢插值模型可以有效的解决上述问题,产生正确的高光区域。
Pho ng模型在进行光强插值的时候,需要先对面片的每一个顶点计算平均法矢量,然后通过双线性法矢插值计算面片内每个点的法矢量,最后根据简单光照模型计算面片上各点的颜色值。
基本算法如下。
(1)计算面片顶点的平均法矢量。
i =1n由于球心位于三维坐标系原点,所以球面上任意面片的顶点平均法矢量就是该点的位置矢量。
(2) 计算面片内部各点的法矢量。
在图中,三角形面片的顶点坐标为 P o (x o ,y o ),法矢量为N o ; R(x i ,yj,法矢量是 N i ; B(X 2,y 2),法矢量为N 2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章真实感图形的绘制
用计算机在图形设备上生成连续色调的真实感图形必须完成四个基本的任务。
第一,用数学方法建立所构造三维场景的几何描述,并将它们输入至计算机。
这部分工作可由三维立体造型或曲面造型系统来完成。
场景的几何描述直接影响图形的复杂性和图形绘制的计算费用,选择合理而有效的数据表示和输入手段是极其重要的。
第二,将三维几何描述转换为二维透视图。
这可通过对场景的透视变换来完成。
第三,确定场景中的所有可见面,这需要使用隐藏面消除算法将视域之外或被其它物体遮挡的不可见面消去。
第四,计算场景中可见面的颜色,严格地说,就是根据基于光学物理的光照明模型计算可见面投射到观察者眼中的光亮度大小和颜色组成,并将它转换成适合图形设备的颜色值,从而确定投影画面上每一象素的颜色,最终生成图形。
在光栅图形系统上显示的三维图形的真实感取决于能否成功地模拟明暗效应,这要求设计较好的明暗模型,用以计算可见表面应该显示的亮度和彩色。
明暗模型并不需要精确地考虑真实世界中光线和表面的性质,而只需要在兼顾精确程度和计算成本的要求下,追求更好的显示效果。
通常设计一个明暗模型需要考虑的主要问题是照明特性、表面特性和观察角度。
照明特性是指可见表面被照明的情况,主要有光源的数目和性质,环境光及阴影效应等。
表面特性主要是指表面对入射光线的反射、折射或透明的不同情形,还有表面的纹理及颜色等。
观察角度是指观察景物时观察者相对可见表面所在的位置。
已经有许多不同的明暗模型都较好地处理了上述各问题。
不同明暗模型的区别主要在于模拟的方法,实现的复杂程度,及取得的显示效果等方面。
第一节漫反射及具体光源的照明(简单光照明的Phong模型)
1.环境光
在多数实际环境中,存在由于许多物体表面多次反射而产生的均匀的照明光线,这就是环境光线。
环境光线的存在使物体得到漫射照明,例如阴天就可以看做是仅有漫射照明。
这时亮度可以如下简单地计算:
I =κa· I a(1)
其中是I可见表面的亮度,I a是环境光线的总亮度,κa是物体表面对环境光线的反射系数,它在0到1之间,与表面的性质有关,表明了有多少环境光线从物体的表面反射出去。
2.漫反射
具体光源在物体表面可以引起漫反射和镜面反射。
漫反射是指来自具体光源的能量到达表面上的某一点后,就均匀地向各个方向散射出去,使得观察者从不同角度观察时,这一点呈现的亮度是相同的。
这样漫反射与观察者的位置是无关的。
通常不光滑的粗糙表面总是呈现出漫反射的效果。
对于这种情况,Lambert定律指出,漫反射的效果与表面相对于光源的取向有关,即:
I d=I p·κ d ·COSθ(2)其中I d是漫反射引起的可见表面上一点的亮度。
I p是点光源发出的入射光线引起的亮度。
κd是漫反射系数,它的取值在0到1之间,随物体材料不同而不同。
θ是可见表面法向N 和点光源方向L之间的夹角,即入射角,它应该在0°到90°之间,如图8.1所示。
cos的实际计算,可以假定向量N和L都已经正规为了简化计算公式(2)中余弦值θ
图8.1 入射光和表面法向量
化,即已经是长度为1的单位向量,这样就可以使用向量的数量积或内积。
因为这时..cos L N =θ于是得:
I d =I p · I d ·(L · N ) (3) 考虑将环境光线和漫反射的效果结合起来,计算亮度的公式应该写成:
I=I a · κa + I p · I d ·(L · N ) (4)
3.镜面反射与Phone 模型
看镜面反射的情形。
镜面反射是指来自具体光源的光能到达可见表面上的某一点后,主要沿着由射入角等于反射角所决定的方向传播,从而使得观察者从不同角度观察时,这一点呈现的亮度并不相同。
在任何有光泽的表面上都可以观察到镜面反射的效果。
例如,用很亮的光照射一个红色的苹果,会发现最亮点不是红色的,而是有些呈现白色,这是入射光线的颜色。
这个最亮点就是有镜面反射引起的。
如果观察者移动位置,会看到最亮点也随之移动。
这是因为光泽表面在不同方向对光线的镜面反射是不同的。
在理想的光泽表面上,例如在非常好的镜面上,反射光线只是在由入射角等于反射角所确定的方向上才有。
这意味着此时在图8.2镜面反射的示意图中,只有当观察者相对表面的方向V 与反射光线的方向R 之间的夹角α为零时,才能看到镜面反射引起的反射光线。
对于不是非常理想的光泽表面,例如一个苹果,反射光线引起的亮度随着α的增大而迅速下降。
由Phong Bui-Tuong 提出的明亮模型,用αn
cos 来近似反射光线引起的亮度随着α增大而下降的速率。
n 取值一般在1到2000之间,决定于反射表面的有关性质。
对于理想的反射表面,n 就是无穷大。
这里选用αn cos ,是以经验观察为基础的。
图8.2 镜面反射
可以得到计算表面亮度的公式: I=K a I a + I p [K d cos θ+K s cos n α] (5) 这里可以假定反射光线的方向向量R 和指向观察点的向量V 都已经正规化,即已经是长度为1的单位向量,于是可以简单地利用向量内积计算余弦值:V R .cos =α.对()θW ,通常根据经验选取一个常数k s 来代替,这样公式(5)可写成下面更容易计算的形式:
I=K a I a + I p [K d (L ·N)+K s (R ·V)n ] (6)
实验表明,应用计算公式(6)已经可以得到很好的具有明暗表现的画面,这个公式是
形成具有明暗表现画面的良好基础。
反射光线的方向向量R需要计算,为简便,有时用更容易计算的 H·N 代替R·V,得到
I=K a I a+ I p[K d(L·N)+K s(H·N)n] (7)
对于彩色表面,上述各公式也可以应用,只需分别应用于对各颜色分量的计算。
例如,选择通常的红、绿、蓝颜色系统,这时上述公式中有关亮度及反射系数等,就要看做是三元向量。
通过分别对各颜色分量进行计算,就可以完成对彩色表面的亮度计算。
在对真实感图象的不断研究探索中,人们还不断提出一些更为完美的明暗模型,或者对已有的明暗模型做出改进。
这方面的研究工作是很多的。
练习1 设点P 处法向量(0,1,0),光线向量(-1,2,-1),光源参数:Ia=1,Ip=Is=10,材质参数:ka=kp=0.15,ks=0.8,n=5。
视线向量(1)(1,1.5, 0.5)。
(2)(1, 1.5, -0.5) 。
计算光亮度。
练习2 为利用Phong模型绘制真实感图形写出实现程序框架。
(参看课件)
练习3 编程显示真实感球、圆柱、圆锥、圆环,及一般的旋转面。
(参看课件)
练习 4 已知法向量,光线向量,如何计算反射向量?设法向量(1,1,0),光线向量(-1,2,-1),求反射向量。
练习5 说明用H·N 代替R·V是近似的,何时是准确的。
练习6编程显示真实感立方体,RGB彩色立方体。
(参看课件)
练习7 复习点乘积、叉乘积的意义,简要说明在计算机图形学中的应用。
练习8 两条参数曲线a1(t)和a2(t)间可以构造“直纹面”: Q(s,t)= (1-s) a1(t) + s a2(t) 。
现在设a1(t)和a2(t)分别选取为:(1)两条直线段,分别是一个正方体底面和顶面不同方向的对角线;(2)分别在z=0和z=1平面内的两个圆,圆心(0,0,0)和(0,1,1),半径3和2。
请编写程序利用Phong模型绘制所得真实感图形。
练习9 沿一条参数曲线的每一点“膨胀”出一个半径为r的圆,可以构造以该曲线为中心轴线的“管道”。
设曲线参数方程是a(t),主法线向量是N(t),副法线向量是B(t)(对平面参数曲线,主法线向量是曲线所在平面内的法向量,副法线向量是曲线所在平面的法向量。
)这时可以得到管道曲面的参数方程是:
Q(θ,t) = a(t) + r[N(t)cosθ+ B(t)sinθ]
现在设a(t) = (t,sint,0),即是z=0平面内一条正弦曲线,取r=1,请编写程序利用Phong模型绘制所得管道的真实感图形。
*练习10 说明形体造型的其他方法,如可用于表现水滴的元球模型等,考虑编程实现。
(参看课件)
**练习11 给出基本形体布尔操作后使用Phong模型绘制所得真实感图形的程序框架。
(*号表示难度,可选作。
)。