图形学理论知识 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 双向反射分布函数相关推荐

  1. 计算机图形学基础:双向反射分布函数 BRDF

    文章目录 光照.照明(Illumination) 预备知识 球面坐标(Spherical Coordinate) 立体角(Solid Angle) 投影面积(Foreshortened Area) 光 ...

  2. 图形学笔记(十三)光线追踪3——双向反射分布函数BRDF(反射方程、递归方程)、辐射度量学基础radiometry、立体角、Radiant Energy、Flux、Irrdiance、Radiance

    图形学笔记(十二)光线追踪2--使用AABB包围盒加速光线追踪.空间划分(八叉树.KD树.BSP树).物体划分(BVH加速结构).光线与物体求交 图形学笔记(十四)光线追踪4--蒙特卡洛(Monte ...

  3. PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现

    PBR:双向反射分布函数(BRDF)介绍与Cook-Torrance模型的实现 BRDF简介 再介绍BRDF之前我们要引入渲染方程这个东西: 其中L表示辐射率,其公式为: 它表示了一个拥有辐射强度Φ的 ...

  4. sBRDF空间双向反射分布函数完全解析

    SBRDF空间双向反射分布函数解析 声明:本文大部分内容基于Ph.D David K. McAllister的博士论文<A GENERALIZED SURFACE APPEARANCE REPR ...

  5. 基于微平面理论的BRDF模型(PBR材质、Cook-Torrance、GGX)

    前言   因为前边讲了在Unity中如何实现一个BRDF--简单来说就是把公式抄到Shader里,于是这篇文章则主要从原理角度来讲一讲基于物理的BRDF公式为什么长那个样子.本篇文章主要是整理一下去年 ...

  6. 【Unity大气渲染】关于单次大气散射的理论知识

    参考 最近在实现程序化天空盒,到了实现大气散射这一步,索性查漏补缺,把大气散射这块儿的理论知识补充明白了.跟着[实战]从零实现一套完整单次大气散射_一的推荐,学习这块我直接从Volumetric At ...

  7. 视频相关的理论知识与基础概念

    本文将视频相关的理论知识与基础概念划分为 11 个知识点,如下: 视频 分辨率 比特率 采样率 帧率 视频编码 编码标准 视频封装格式 视频解码 视频播放原理 视频与流媒体 1.视频 根据人眼视觉暂留 ...

  8. 十 ARM9(2440)的IIC——理论知识及程序实例

    原文地址:十 ARM9(2440)的IIC--理论知识及程序实例作者:骨Zi里德骄傲 概述 S3C2440A RISC 微处理器可以支持一个多主控IIC 总线串行接口.一条专用串行数据线(SDA)和一 ...

  9. 【Camera】Camera理论知识和基本原理

    Camera理论知识和基本原理 1. 前言 2. Basic Concepts 3. 总体流程 4. 摄像头 5. 传感器 Sensor 5.1 CCD(Charge Coupled Device) ...

最新文章

  1. oracle避免同一sql多次查询,Oracle SQL - 在一个查询中生成一行答案的最简单方法,因此我不必多次运行查询?...
  2. 算法-排序-插入排序
  3. 买服务器带操作系统,买服务器带操作系统
  4. init tarray 太大_[NOIP 2001提高组T4]Car的旅行路线
  5. STL源码剖析 map
  6. 一图讲解一条sql语句的一生——《收获,不止Oracle》的读书笔记01
  7. python是交互式语言吗_什么是Python交互式解释器
  8. 让计算机桌面更加美丽课件,让计算机桌面更加美丽_1.doc
  9. HDU1317 —— 最长路+判断正环
  10. Excel表格的35招必学秘技
  11. Yate for Mac音乐标签管理工具
  12. excel VBA自动化 - 多个工作簿自动合并到一个工作簿
  13. ISA——防火墙策略的执行过程
  14. Java 编程问题:八、函数式编程-基础和设计模式
  15. Android PAI (PlayAutoInstall)功能一些经验
  16. 511遇见电脑PC任意多开绿色软件
  17. 使用pm命令安装或卸载apk,静默安装、卸载方法
  18. 可数集合与不可数集合
  19. 300个涵盖IT各方面的免费资源(中)——设计与编码篇
  20. 《扫毒2》火爆来袭,刘德华不要片酬,却要了电影版权,网友:为啥

热门文章

  1. php cile,PHP: Kurulum - Manual
  2. python找不到模块pyodbc_“import pyodbc”导致“没有名为pyodbc的模块”
  3. java webservice 验证_SOAP header验证WebService接口的访问权限
  4. linux listen监听,Linux网络协议栈 -- socket listen监听
  5. php mysql errorcode_PHP errorCode()和errorInfo():PDO中的错误处理
  6. oracle11g scn 补丁,Oracle11g中SCN与TimeStamp的相互转换
  7. python开发环境有哪些_python编程需要什么环境
  8. k均值例子 数据挖掘_【十大经典数据挖掘算法】k-means
  9. java 线程管理框架_实现 Java 多线程并发控制框架
  10. mysql优化难 选db2_DB2数据库优化的几条策略_MySQL