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. linux xargs 命令详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...

  2. 用imageMagick合成图片添加图片水印

    用imageMagick合成图片的方式大致有三种, 使用convert命令加 +append或-append参数 使用convert命令加 -composite参数 直接使用composite命令来完 ...

  3. 【LeetCode题解】136_只出现一次的数字

    目录 [LeetCode题解]136_只出现一次的数字 描述 方法一:列表操作 思路 Java 实现 Python 实现 方法二:哈希表 思路 Java 实现 Python 实现 方法三:数学运算 思 ...

  4. overfitting(过度拟合)的概念

    来自:http://blog.csdn.net/fengzhe0411/article/details/7165549 最近几天在看模式识别方面的资料,多次遇到“overfitting”这个概念,最终 ...

  5. BG.Hive - part1

    1. Hive架构 What is hive? Facebook,https://en.wikipedia.org/wiki/Apache_Hive a> 一种工具,可以通过SQL轻松的访问数据 ...

  6. debian上安装docker ce

    在Debian9上安装Docker CE 使用从包中安装的方式 Docker是一个开源的容器引擎,它有助于更快地交付产品.Docker可将应用程序和基础设施层隔离,并且将基础设施当作程序一样进行管理. ...

  7. 面试6 在c#中如何声明一个类不能被继承

    C#通过关键字 sealed 可以声明一个类型不能被继承. 设计中应该为所有不被作为基类的类型添加sealed关键字,用以避免各种来自继承的易产生的错误.

  8. java SE 入门之控制语句&方法&递归算法(第五篇)

    一 控制语句(选择结构) 在学习控制语句之前,我们要先明确两件事情,什么是顺序结构(也叫做顺序执行),什么是选择结构 (分支结构或分支执行或选择执行),我们的代码执行是分为先后顺序的,就像我们之前写的 ...

  9. AVPlayer 音乐播放后台播放,以及锁屏主题设置

    第一步:在appDelegate中通知app支持后台播放:在方法 - (BOOL)application:(UIApplication *)application didFinishLaunching ...

  10. 三:Jquery-event

    一:jq中事件 1.页面载入事件 ready()方法 格式: $(document).ready(function(){}); $(function(){}); 2.绑定事件 click(),dblc ...