博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
材质模型
阅读量:4113 次
发布时间:2019-05-25

本文共 1955 字,大约阅读时间需要 6 分钟。

物体的材质是指物体表面对光的吸收、反射和透射的性能。由于是简单光照模型,所以只考虑材质的反射特性来建立物体的材质模型。

同光源一样,材质也由环境色、漫反射色和镜面反射色等分量组成,分别说明了物体对环境光、漫反射光和镜面反射光的反射率。

材质决定物体的颜色:

     在进行光照计算时,材质对环境光的反射率与光源的环境光分量相结合,

                                                  对漫反射光的反射率与光源的漫反射光分量相结合,

                                                  对镜面反射光的反射率与光源的镜面反射色分量相结合。

由于镜面反射光影响范围很小,而环境光是常熟,所以物体的颜色由材质的漫反射光反射率决定的。

设物体材质的漫反射光反射率的RGB值为(mr=1.0,mg=0.5,mb=0.0),表面它反射全部红光,反射一般绿光,不反射蓝光。

现在假定有一个点光源的漫反射光的RGB值为Ir=1.0,Ig=1.0,Ib=1.0

常用物体的材质属性:如

金材质的环境光反射率的红绿蓝分量为:0.247,0.20,0.075

金材质的漫反射光反射率的红绿蓝分量为:0.752,0.606,0.226

金材质的镜面反射光反射率的红绿蓝分量为:0.628,0.556,0.366

一般还存在一个高光指数,描述镜面反射光的会聚程度,这个指数一般是使用试验的方法确定。

环境光模型:Le=Ka*La,0<=Ka<=1;   La表示来自周围环境的光强;Ka为材质的环境光反射率。

漫反射光模型:Lambert余弦定律,一个理想漫反射体表面上反射出来的漫反射光强同入射光与物体表面法线之间夹角的余弦成正比。

漫反射模型:Ld=Kd*Ld*cosθ,0<= θ <=π/2 且 0<=Kd<=1;

当入射角θ在0~90度之间,点光源才能照亮物体表面;

当入射角θ大于90度时,点光源位于P点的背面,对P点的光强共享应取为0.当入射角为0时,漫反射光最强。

在简单光照模型中,只能通过设置物体的漫反射光反射率Kd来改变物体的颜色。

cosθ=L·N,且L即L·N为负值值,应取为零。

d=Kd*Ld*MAX(L·N,0)

镜面反射光模型: 用余弦函数的幂次方来模拟镜面反射光光强的空间分布,称为Phong 反射模型。

镜面反射光的光强:Ls=Ks*Lp*cosθ*cosθ*……*cosθ。及*cosθ的N次方。

Phong反射模型:cosθ=R·V,R V为单位矢量,可改写为: Ls=Ks*Lp*{(R·V)N次方}

从式中不难看词,镜面反射光光强依赖于光源与视点的相对位置。只有视点位置比较合适,才可以观察到物体表面某些区域呈现出的高光。

Blinn提出,R·V≈H·N 其中H取单位矢量L和V的平方矢量:H=(L+V)/(L+V)

Blinn-Phong反射模型: Ls=Ks*Lp*{(H·N)N次方},由于L V都是常量,H只需要计算一次,节省了计算时间。

同理:考虑H·N取值为负值时,应赋值为零,故: Ls=Ks*Lp*{MAX(H·N,0)N次方}

综合考虑环境光、漫反射光、镜面反射光且只有一个点光源的简单光照模型为:

L=Le+Ld+Ls=Ka*La+Kd*Ld*MAX(L·N,0)+ Ks*Lp*{MAX(H·N,0)N次方}

入射光的光强随着光源与物体之间距离的增加而减弱,强度则安之光源到物体距离(d)的1/(d*d)进行衰减。

因此,在计算真实感图形时,光照模型中应加入计算光强的衰减。

对于点光源,常远的d的二次函数的倒数来衰减光强。

f(d)=min(1,1/(c0+c1·d+c2·d·d))

考虑光强衰减的单光源简单光照模型为:

L=Le+Ld+Ls=Ka*La+f(d){

Kd*Ld*MAX(L·N,0)+ Ks*Lp*{MAX(H·N,0)N次方}}

如果场景中有多个点光源,简单光照模型表示为

L=Le+Ld+Ls=Ka*La+∑f(di){

Kdi*Ld,i*MAX(Li·N,0)+ Ks*Lp,i*{MAX(Hi·N,0)N次方}}

∑i,表示第i个源,有n个光源。

这些模型只考虑光的强度,没有考虑光的颜色,故也称为明暗模型。

由于计算机中采用的是RGB颜色模型,因此要为颜色的红绿蓝三个分量分别建立光照模型。

LR=Ler+Ldr+Lsr=Ka*La+∑f(di){

Kdi*Ld,i*MAX(Li·N,0)+ Ks*Lp,i*{MAX(Hi·N,0)N次方}}

LG=Leg+Ldg+Lsg=Ka*La+∑f(di){

Kdi*Ld,i*MAX(Li·N,0)+ Ks*Lp,i*{MAX(Hi·N,0)N次方}}

LB=Leb+Ldb+Lsb=Ka*La+∑f(di){

Kdi*Ld,i*MAX(Li·N,0)+ Ks*Lp,i*{MAX(Hi·N,0)N次方}}

转载地址:http://qlesi.baihongyu.com/

你可能感兴趣的文章
JDBC核心技术 - 下篇
查看>>
一篇搞懂Java反射机制
查看>>
一篇彻底搞懂Java注解与枚举类
查看>>
【2021-MOOC-浙江大学-陈越、何钦铭-数据结构】树
查看>>
MySQL主从复制不一致的原因以及解决方法
查看>>
RedisTemplate的key默认序列化器问题
查看>>
序列化与自定义序列化
查看>>
ThreadLocal
查看>>
从Executor接口设计看设计模式之最少知识法则
查看>>
OKhttp之Call接口
查看>>
application/x-www-form-urlencoded、multipart/form-data、text/plain
查看>>
关于Content-Length
查看>>
WebRequest post读取源码
查看>>
使用TcpClient可避免HttpWebRequest的常见错误
查看>>
EntityFramework 学习之一 —— 模型概述与环境搭建 .
查看>>
C# 发HTTP请求
查看>>
初试visual studio2012的新型数据库LocalDB
查看>>
启动 LocalDB 和连接到 LocalDB
查看>>
Palindrome Number --回文整数
查看>>
Reverse Integer--反转整数
查看>>