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. HihoCoder - 1040 矩形判断

    矩形判断 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. Input 输入第一行是一个整数T(1<=T<=100),代表测试数据的数量. 每组数据包含4行,每行包含4 ...

  2. 使用vue2+Axios+Router 之后的总结以及遇到的一些坑

    构建 vue有自己的脚手架构建工具vue-cli,使用起来非常方便,使用webpack来集成各种开发便捷工具,比如: 代码热更新,修改代码之后网页无刷新改变,对前端开发来说非常的方便 PostCss, ...

  3. ANTLR4权威指南 - 第7章 通过特定应用程序代码解耦语法

    第7章 通过特定应用程序代码解耦语法 到目前为止,我们已经知道了怎么用ANTLR的语法来定义语言了,接下来我们要给我们的语法注入一些新的元素了.就语法本身而言,其用处并不大,因为它只能告诉我们一个用户 ...

  4. [转]VS 2010 : 如何开发和部署Outlook 2010插件(Add-in)

    本文转自:https://www.cnblogs.com/chenxizhang/archive/2010/05/08/1730766.html 概述: 这篇文章,我将通过一个简单的例子,给大家分享一 ...

  5. Day7:掌握APICloud应用管理相关服务的配置使用和相关API,包括:应用发布、版本管理、云修复、闪屏广告等。理解APICloud APP优化策略和编码规范;了解APICloud多Widget管理机制和SuperWebview的使用

    主要内容: 1. 应用发布 1.1 云编译 1.2 全包加密 网页全包加密:对网页中全包的html,css,javascript代码进行加密,加密后的网友代码都是不可读的,并且不能通过常用的格式化工具 ...

  6. FacebookFriendAdderPro

    Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Fe ...

  7. [C语言] 数据结构-算法效率的度量方法-事前分析估算方法

    事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算,抛开与计算机硬件软件有关的因素,一个程序的运行时间,依赖于算法的,好坏和问题的输入规模,所谓问题输入规模是指输入量的多少 推导过程,比 ...

  8. 【redis中键的生存时间(expire) 】

    1.redis中可以使用expire命令设置一个键的生存时间,到时间后redis会自动删除它      expire      设置生存时间(单位/秒)      pexpire    设置生存时间( ...

  9. hdu 4090

    GemAnd Prince Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  10. MySQL中的存储过程和函数

    存储过程和函数 简单的说,存储过程就是一条或者多条SQL语句的集合.可以视为批文件,但是其作用不仅仅局限于批处理.本文主要介绍如何创建存储过程和存储函数,以及如何调用.查看.修改.删除存储过程和存储函 ...