图形学理论知识 BRDF 双向反射分布函数

Bidirectional Reflectance Distribution Function

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的表面表示成一组函数的加权和。

参考资料

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

  《real-time rendering 3rd》

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

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

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

  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. Dagger2 生成代码学习

    接上一篇文章介绍了Dagger2的初步使用,相信刚接触的人会觉得很奇怪,怎么会有很多自己没有定义的代码出现,为什么Component的创建方式是那样的.为了搞清楚这些东西,我们需要查看一下Dagger ...

  2. SQL Server逻辑读、预读和物理读

    SQL Server数据存储的形式 预读:用估计信息,去硬盘读取数据到缓存.预读100次,也就是估计将要从硬盘中读取了100页数据到缓存. 物理读:查询计划生成好以后,如果缓存缺少所需要的数据,让缓存 ...

  3. JS魔法堂:mmDeferred源码剖析

    一.前言 avalon.js的影响力愈发强劲,而作为子模块之一的mmDeferred必然成为异步调用模式学习之旅的又一站呢!本文将记录我对mmDeferred的认识,若有纰漏请各位指正,谢谢.项目请见 ...

  4. [爬虫资源]各大爬虫资源大汇总,做我们自己的awesome系列

      大数据的流行一定程序导致的爬虫的流行,有些企业和公司本身不生产数据,那就只能从网上爬取数据,笔者关注相关的内容有一定的时间,也写过很多关于爬虫的系列,现在收集好的框架希望能为对爬虫有兴趣的人,或者 ...

  5. 从设计到开发,硅谷技术专家教你做“声控”APP

    编者:本文为携程机票研发部技术专家祁一鸣在携程技术微分享中的分享内容,关注携程技术中心微信公号ctriptech,获知更多一手干货. [携程技术微分享]是携程技术中心推出的线上公开分享课程,每月1-2 ...

  6. 【转】 依赖注入框架Autofac的简单使用

    Autofac是一款IOC框架,比较于其他的IOC框架,如Spring.NET,Unity,Castle等等所包含的,它很轻量级性能上也是很高的.于是,今天抽空研究了下它.下载地址:http://co ...

  7. jquery的promise实践--连续加载图片

    在javascript设计模式实践之代理模式--图片预加载中用代理模式实现了图片预加载功能. 现在就更进一步,完成一个能够一张一张的连续图片加载的功能. 功能: 1.一张一张加载图片. 2.加载错误, ...

  8. C#控件绑定数据源方式

    1:控件数据源绑定泛型Dictionary<string,string> ): Dictionart<string,string> D=new Dictionary(strin ...

  9. Winform混合式开发框架的特点总结

    Winform混合式开发框架,是一种支持分布式部署的应用模式,支持直接连接数据库,访问远程WCF服务,访问远程Web API服务等服务的综合性框架,根据不同的需求采用不同的数据接口,是一个适应性很广的 ...

  10. 求SQL语句递归的算法

    表结构是这样的 部门    上级部门    A           BB           CC           DA           AB           BC           C ...