• 双向反射分布函数(BRDF:Bidirecitonal Reflectance Distribution Function)

    • 用来描述物体表面对光的反射性质
  • 预备知识
  • BRDF的定义和性质
  • BRDF模型
  • BRDF的度量与评价

光照、照明

  • 分为全局和局部光照

    • 局部光照(Local illumination)和物体直接被光源照射的情况
    • 全局光照(global illumination)和物体被光源外的其他地方的光线照射的情况相关,包括其他物体反射和投射过来的光线。

预备知识

  • 球面坐标(Spherical Coordinate)
  • 立体角(Solid Angel)
  • 投影面积(Foreshortened Area)
  • 光能(Radiant Energy)
  • 光通量(Radiant Flux)
  • 灰度(Irradiance)
  • 发光强度(Intensity)
  • 光亮度(Radiance)

球面坐标

  • 由于光线主要通过方向来表达,通常用球面坐标表示比笛卡尔坐标更方便

  • 球面坐标中的向量用三个元素表示

    • r表示向量长度
    • θ表示向量与z轴的夹角
    • φ表示向量在x-y平面上的投影与x轴逆时针夹角
  • 球面坐标和三维笛卡尔坐标对应关系

Car(x,y,z)=Sph(r,theta,phi)
  • 转换关系
r=sqrt(x^2+y^2+z^2)

θ = acos(z/r)
φ = atan(y/x)

立体角(Solid Angle)

  • 立体角描述了从原点向一个球面区域张开的视野大小,是平面角的自然推广
  • 立体角的最大值为全交:4π,改最大值表示区域为整个球面
  • 立体角微分形式
dw=dA/r^2
  • 由于面积微元在球面坐标系下可以写成
dA = (rdθ)(rsinθdφ) = r^2sinθdθdφ

投影面积(Foreshortened Area)

  • 投影面积描述了一个物体表面的微小区域在某个视线方向上的可见面积。
  • 对于面积微元A,则沿着与法向夹角为θ方向的A的可见面积。
Area=Acos θ

光能(Radiant Energy)

  • 光能表示的是(一个区域中)光子能量的总和。
  • 光能通常使用符号Q表示,单位是焦耳(J)

光通量(Radiant Flux)

  • 光能并不会停留和存储在某个位置,而是在始终不断运动。
  • 光通量描述的是单位时间穿过截面的光能。

辉度(Irradiance)

  • 辉度表示单位面积受光能的影响的程度,等于单位面积上的光通量

发光强度(Intensity)

  • 对一个点(如光源),发光强度表啊是单位立体角上的光通量。

光亮度(Radiance)

  • 光亮度表示物体表面沿着某一方向的明亮成都,它表示单位投影面积和单位立体角上的光通量。

BRDF的定义和性质

  • BRDF的定义
  • BRDF的性质
    • 可逆性(Reciprocity)
    • 能量守恒
    • 基于BRDF的渲染方程(Redering Equation)

BRDF的定义

  • BRDF描述的是物体表面将光能从任何一个入射方向反射到任何一个视点方向的反射特性。

  • BRDF模型是绝大多数图形学算法中用于描述光反射现象的基本模型。

  • BRDF是关于入射光方向和反射光方向的四维实值函数,它等于反射方向的光亮度和沿入射方向的入射光的辉度之比:

    f(wi→wr)=dLr(wr)/dEi

    • 可以写成关于入射光的光亮度的形式

    f(wi→wr)=dLr(wr)/Li(wi)cos wi dwi

BRDF的可逆性

  • BRDF的可逆性源自于Helmholtz光路可逆性
  • BRDF的可逆性是说:交换入射光和反射光的角色,并不会改变BRDF的值

    f(wi→wr)=f(wr→wi)

能量守恒性质

  • BRDF需要遵循的另一个物理定律是能量守恒。入射光的能量与出射光的总能量应该相等

    Qincoming=Qreflected + Qabsorb + Qtransmitted

  • 因此BRDF必须满足如下积分的不等式、

渲染方程(Redering Equation)

  • 用于计算环境光照明下的反射光的光亮度,可以写成不同角度入射光的光亮度乘BRDF的积分

BRDF模型

  • 为了方便高效的使用BRDF数据,往往被组织成为参数化的数值模型

  • BRDF的数值模型分为三类

    • 经验模型(Empirical Models)
    • 基于物理的模型(Physical-based Models)
    • 数据表达的模型(Data-driven Models)
  • 经验模型

    • 使用基于实验提出的公式对BRDF做快速估计
  • 基于物理的模型

    • 根据物体表面材料的几何以及光学属性简历反射方程计算BRDF
  • 数据表达的模型

    • 将BRDF按照实测数据建立查找表,以便于快速的查找和计算

经验模型1:Lambertain

  • Lambertain模型是最基本的反射模型

    • 反射光线被均匀的反射到到各个方向
    • 沿不同的方向BRDF是一个常数
  • 反射率
    • 反射率是反射光亮度与入射光亮度之比。

  • Lambert漫反射模型能很好的描述包含纯粹漫反射的物体(如:纸张)
  • Lambert漫反射模型不能表现出材质的镜面反射效果,而镜面反射对金属材质非常重要。
  • 由于Lambert模型的简洁以及对漫反射良好的描述,常在其他经验模型中作为分量被包含

经验模型2:Phong模型

  • Phong模型是在Lambert漫反射模型的基础上,添加了镜面反射项,以表达反射角上的镜面反射效果

  • 其中pd和ps分别表示漫反射光和镜面反射光线的反射率,s表示发光指数,用于描述镜面反射的锋利度。
  • Phong模型不满足可逆性
  • Phong模型缺乏物理解释,并且对于某些金属材质,它并不十分准确,优势在于简洁高效,可以同时表现漫反射和镜面反射的特征。

Phong模型的扩展

  • Blinn-Phong模型
  • 引入入射方向l和视线方向v的角平分线h,使用h和法向n的点积代替原来的r与v的点积,简化运算。

【三】材质反射属性模型BRDF的更多相关文章

  1. Qt 3D教程(三)实现对模型材质參数的控制

    Qt 3D教程(三)实现对模型材质參数的控制 蒋彩阳原创文章,首发地址:http://blog.csdn.net/gamesdev/article/details/47131841.欢迎同行前来探讨. ...

  2. SQL2000的三种“故障还原模型”

    一.SQL2000的三种“故障还原模型” 在数据库属性的“选项”页,“故障还原模型”栏,共有三项选择:简单.完全.大容量日志记录.它们的根本差别在于SQL2000对数据库日志的维护方式不同.下面逐个讲 ...

  3. 在UML系统开发中有三个主要的模型

    http://www.cnblogs.com/Yogurshine/archive/2013/01/14/2859248.html 在UML系统开发中有三个主要的模型: 功能模型: 从用户的角度展示系 ...

  4. 第三篇 css属性

    一.颜色属性 颜色属性有下面四种方式 <div style="color:blueviolet">ppppp</div> <div style=&qu ...

  5. C和指针 第三章 链接属性 extern、internal、none

    三种链接属性 组成一个程序有多个源文件,如果相同的标识符出现在多个源文件中,那么标识符的链接属性决定如何处理在不同文件中出现的标识符. 链接属性有三种: external:外部 多个源文件中的相同标识 ...

  6. (第三章)Java内存模型(下)

    一.happens-before happens-before是JMM最核心的概念.对于Java程序员来说,理解happens-before是理解JMM的关键. 1.1 JMM的设计 从JMM设计者的 ...

  7. day28 反射 属性操作 getattr hasattr setattr delattr

    反射 用字符串来对应其同名的属性或者方法,通过某种方法调用这个字符串来执行方法或者获取属性 网络编程的时候非常好用,是很重要的内容 先看个示例吧: class Teather: dic = { &qu ...

  8. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第2章节--SharePoint 2013 App 模型概览 理解三个SharePoint 部署模型 Apps       ...

  9. UIButton中的三个UIEdgeInsets属性

    接着昨天的 UIButton中的三个UIEdgeInsets属性 ,今天我们具体谈谈UIButton的contentEdgeInsets.titleEdgeInsets.imageEdgeInsets ...

随机推荐

  1. 查询list转化为tree的两种方式及排序

    方式一,数据库查询tree; MyBatis collection 集合 MyBatis 是数据持久层框架,支持定制化 SQL.存储过程以及高级映射.尤其强大在于它的映射语句,比如高级映射中的 col ...

  2. PTA(Advanced Level)1075.PAT Judge

    The ranklist of PAT is generated from the status list, which shows the scores of the submissions. Th ...

  3. layui-dTree显示不出来且前台报错

    layui-dTree显示不出来且前台报错 Cannot read property 'parents' of null 检查过后发现layer并没有使用到,找不到任何办法解决. 最后删除了respo ...

  4. Linux系列(7):入门之磁盘与文件系统管理

    1.磁盘的主要概念 下面展示一下磁盘结构图: 1.磁道 2.柱面 3.物理扇区 已经了解了这么多概念,现在总结一下 4.磁盘分区 1.概念 磁盘分区就是将磁盘划分成不同的区域. 2.分区的最小单位 早 ...

  5. C++中如何调用DLL文件

    一.动态链接库简介 动态库链接库英文位DLL,是Dynamic Link Library的缩写形式,DLL不是可执行文件.动态链接提供了一种方法,使进程可以调用不属于其可执行文件代码的函数.函数可执行 ...

  6. 虚拟机(Vmware)安装ubuntu18.04和配置调整(二)

    二.配置修改 1.修改语言环境(settings->Region & Language) 选中中文简体(Chinese(simplified)),点击Apply 中文简体语言安装完成后, ...

  7. Dom编程-左侧菜单栏设计模型实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Datetime 在C#中的用法 获取当前时间的各种格式

    DateTime 获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = ...

  9. Python 风格指南

    https://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/contents/ 目前个人遵循的基本规范 ...

  10. 5 java 笔记

    1  建议不要在循环体内修改循环变量的值 2 java语言没有提供goto语句来控制程序的跳转 2 java语言同样也提供了continue和break关键字来控制程序的循环结构 3 java中的标签 ...