BRDF理论

  BRDF表示的是双向反射分布函数Bidirectional Reflectance Distribution Function),它描述了光线如何在物体表面进行反射,可以用来描述材质属性

  BRDF的输入参数是入射光的的仰角、方位角、出射光的仰角、方位角,还与入射光的波长相关。

  BRDF的输出结果是一个数值,表示在给定的入射条件下,出射方向上反射的相对能量,另外一种理解方式是用光子的概念来考虑,BRDF给出了入射光子以特定方向离开的概率。

  BRDF有一些重要的属性:

  1.Helmholtz互异性(Helmholtz Reciprocity):入射角和出射角互换,函数值保持不变。

  2.能量守恒:出射能量不可能大于入射能量,所以BRDF必须进行归一化处理。

  BRDF在描述光线与物体相互作用方面是一个很好的抽象,但只是更一般方程的一种近似。

  更一般的方程双向表面散反射分布函数(Bidirectional Surface Scattering Reflectance Distribution)BSSRDF.

  一般的BSSRDF,虽然复杂,仍然忽略了一些非常重要的变量,比如光的偏振。

  BRDF没有描述内部光线散射现象。

  此外,要注意,反射函数,都没有处理穿过物体表面的光线传播,只是对反射情况进行了处理。

  SVBRDF: spatially varying BRDF

  SBRDF: spatial BRDF

  处理透射问题:BTDF

  T:Trasmittance

  为了处理光线传播问题,对物体表面定义了两个BRDF和两个BTDF,每侧各有一个,这样就组成了BSDF

  S : Scattering

  但是太过复杂的公式很少用到,通常BRDFSVBRDF就可以描述一般物体表面。

  

  给定一个BRDF和入射光的辐射率分布,反射方程就可以确定在给定观察方向上的出射辐射率大小,可以通过对所有方向上的入射光辐射率在物体表面以上的半球内进行积分得到。

  有一种理解BRDF的方法就是在输入方向保持恒定的情况下对它进行可视化表示,用图形表示出各个方向的出射光的能量分布:

  下面是几种BRDF的图形表示:

各种BRDF理论模型:

  一个想法是使用微小面元对物体表面进行建模,每一个小平面都是表面上的一个小平面镜,具有随机的大小和角度。

  在这些模型中,通常赋予小平面一个高斯分布的尺寸和角度(高斯分布比较简单)。

  另外一种平面表示技术称为“高度相关Height Correlation”,因为小平面具有和光波长近似的尺寸,所以会出现干涉、衍射。

  在物理方面需要考虑的一个重要因素是Fresnel反射,一个完整的Fresnel公式依赖于折射系数、消光系数以及入射角等因素。

  计算机图形学常常会忽略偏振,可以使用两个偏振的平均值。

  一些BRDF理论模型的局限性在于没有考虑各向异性的情形。

  如果视点和光源位置不动,当材质的采样点绕法线方向旋转时,如果它的颜色发生变化,那么这个材质就是各向异性的。

  像刷洗过的金属、上过漆的木头、织布、毛皮以及头发这样的材质都有一个确定的方向分量。

  理论模型在给定材质样品的表示方面不一定有用。

  另外的一种方法就是从实际物体的表面来获取BRDF数据

  测角仪、图像双向反射计,以及基于图像的方法都可以根据入射角和出射角测量得到反射信息。

  有些数据库在网上是公开的。

  另外一种表示BRDF的方法是用基相加(Basis Summation)技术,这些方法主要着眼于BRDF自身的形状表示。

  基相加技术就是努力将BRDF的表面表示成一组函数的加权和。

参考资料

  《实时计算机图形学》,第二版

http://www.cnblogs.com/mengdd/archive/2013/08/05/3237991.html

(转)图形学理论知识 BRDF 双向反射分布函数(Bidirectional Reflectance Distribution Function)的更多相关文章

  1. 图形学理论知识 BRDF 双向反射分布函数(Bidirectional Reflectance Distribution Function)

    图形学理论知识 BRDF 双向反射分布函数 Bidirectional Reflectance Distribution Function BRDF理论 BRDF表示的是双向反射分布函数(Bidire ...

  2. 【Unity Shaders】Diffuse Shading——使用2D ramp texture来创建一个假的BRDF(双向反射分布函数)

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  3. 累积分布函数(cumulative distribution function)

    sklearn实战-乳腺癌细胞数据挖掘(博客主亲自录制视频教程,QQ:231469242) https://study.163.com/course/introduction.htm?courseId ...

  4. 微表面分布函数(Microfacet Distribution Function)确切含义

    <Physically-Based Shading Models in Film and Game Production>中说:“D()的值不局限于0到1,可以任意大”,这句话使我比较好奇 ...

  5. 3D图形学理论入门指南

    转:http://gad.qq.com/article/detail/35096 介绍         当我还小的时候,我曾以为计算机图形学是最酷的玩意儿.但是随即我认识到,学习图形学——创建那些超级 ...

  6. Web前端理论知识记录

      Web前端理论知识记录 Elena· 5 个月前 cookies,sessionStorage和localStorage的区别? sessionStorage用于本地存储一个会话(session) ...

  7. js中函数的一些理论知识

      函数的一些理论知识 1. 函数:                执行一个明确的动作并提供一个返回值的独立代码块.同时函数也是javascript中的一级公民(就是函数和其它变量一样). 2.函数的 ...

  8. 用VC进行COM编程所必须掌握的理论知识

    一.为什么要用COM 软件工程发展到今天,从一开始的结构化编程,到面向对象编程,再到现在的COM编程,目标只有一个,就是希望软件能象积方块一样是累起来的,是组装起来的,而不是一点点编出来的.结构化编程 ...

  9. TestNG学习-001-基础理论知识

    此 文主要讲述用 TestNG 的基础理论知识,TestNG 的特定,编写测试过程三步骤,与 JUnit4+ 的差异,以此使亲对 TestNG 测试框架能够有一个简单的认知. 希望能对初学 TestN ...

随机推荐

  1. ruby执行周期性任务

    1.前言      无论是用ruby做系统管理,还是用rails做web开发,都可能遇到周期性任务,它们按照一定时间周期(1小时,2天......)持续地触发.在ruby中,我认为一次性任务使用sid ...

  2. [转]创建一个 Microsoft Outlook 扩展插件

    本文转自:https://coyee.com/article/10625-how-to-create-an-add-in-for-microsoft-outlook 下载示例 1.介绍 Visual ...

  3. C# 数据库增加新表怎么更新ef

    找到dbmx文件,打开,右键,更新模型 也可以 右键从模型中删除 重新更新过来,感觉说了句废话 哈哈

  4. JSTL fn:split()函数

    jstl fn:split()函数代码和用法 -使用fn:split() 函数将一个字符串到一个数组根据分隔符字符串的子字符串. 使用fn:split() 函数将一个字符串到一个数组根据分隔符字符串的 ...

  5. 【转】Dubbo声明式缓存

    缓存的应用非常广泛,为了提高数据访问的速度.Dubbo也不例外,它提供了声明式缓存,以减少用户加缓存的工作量. 一.Dubbo中缓存策略 lru 基于最近最少使用原则删除多余缓存,保持最热的数据被缓存 ...

  6. java自学-运算符

    上一篇介绍了java的变量和数据类型,要对数据处理,还需要用到java运算符,这里只总结下常用的,运算符主要分为以下几类:1 算数运算符 算数运算符包括: + 加法运算 - 减法运算 * 乘法运算 / ...

  7. knockout事件绑定

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  8. nginx+tomcat实现Windows系统下的负载均衡搭建的案例

    刚入行没多久就听过‘负载均衡’的大名,到现在因为工作接触的少,所以没什么太多的认识.但自己又对其非常的好奇,所以前两天通过查资料,在自己的笔记本上就搭建了一个超简单的案例(工作中没有时间,晚上到家了条 ...

  9. 关于shader的学习

    教程地址:https://onevcat.com/2013/07/shader-tutorial-1 因为想做一些特效,所以想稍微了解一下shader的代码,一下是一些笔记 // Upgrade NO ...

  10. 中小型研发团队架构实践五:Redis快速入门及应用

    Redis的使用难吗?不难,Redis用好容易吗?不容易.Redis的使用虽然不难,但与业务结合的应用场景特别多.特别紧,用好并不容易.我们希望通过一篇文章及Demo,即可轻松.快速入门并学会应用. ...