PBR Step by Step(四)Lambertian反射模型
光照可分为局部光照和全局光照。
局部光照:直接照射到物体表面的光照
全局光照:物体表面受周围环境影响的光照
左图中点x接收到周围环境的光线照射,来自周围表面的反射光照称为全局光照;右图中点x接收来自太阳光的直接照射,来自太阳发射的直接光照称为局部光照。
在现实环境中,全局光照的情况更为复杂,例如:
- 半透明表面(Semi-transparent surfaces):光线可以穿过表面进行复杂的交互,如玻璃棱镜,可以改变光的波长;
- 次表面散射(Sub-Surface Scattering):光线可以穿过子表面,在同一表面的不同方向反射,如皮肤;
- 表面渗色(Surface bleeding):光线穿过表面,在介质中改变颜色到目标表面。
其他例子还有很多,全局光照会比局部光照效果更佳柔和自然,但考虑到其复杂性,应用到实时渲染中也是有一定难度的。
我们在前几篇中通过理论得到的BRDF光照模型公式实际为局部光照模型中,还欠缺了全局光照因素。
下面,我们来研究一下BRDF的局部反射模型,先来看下最简单的Lambertian反射模型。
Lambertian反射模型
Lambertian反射称作完全漫反射。这是一种理想情况,现实中不存在完全漫反射,但Lambertian可以用来近似的模拟一些粗糙表面的效果,比如纸张。
对于Lambertian表面,入射方向与出射方向无关,\({\omega_i}\)与\({\omega_o}\)无关,\({L_o(p, \omega_o)}\)可以表示为\({L_o(p, \omega_o)} = {L_r(p)}\)。
在上一篇中,我们知道反射辐射度的方程为:
\({L_o(p,\omega_o)} = \int_{\Omega_i}{f_r(p, \omega_i, \omega_o)}\, {L_i(p, \omega_i)}\, {\cos \theta_i}\, {d\omega_i}\)
在Lambertian反射模型中,由于\({\omega_i}\)与\({\omega_o}\)无关,BRDF项\({f_r(p, \omega_i, \omega_o)} = {f_r(p)}\),上式可表示为:
\({L_r(p)} = {f_r(p)\int_{\Omega_i}L_i(p, \omega_i)\, \cos \theta_i \, d\omega_i} = {f_r(p)\, E_i(p)}\)
\(\Rightarrow {f_r(p)} = \frac{L_r(p)}{E_i(p)}\)
在上一篇的反射率中,\({\Omega_o}\)内的反射通量\({d\Phi_o} = {dA\int_{\Omega_o}L_o(p,\omega_o) \, \cos \theta_o \, d\omega_o}\)
在整个Lambertian表面半球积分(\({\Omega_o} = {2\pi}\))中:
\({d\Phi_o} = {dAL_r(p)\int_{2\pi}\cos \theta_o \, d\omega_o} = {dA \, L_r(p) \, \pi}\)
式中的\({\int_{2\pi}\cos \theta_o \, d\omega_o} = {\pi}\),这是一个半球积分,在第一篇中我们推出过该结果。
\({d\Phi_i} = {dA\int_{2\pi} L_i(p, \omega_i) \, \cos \theta_i \, d\omega_i} = {dA \, E_i(p)}\)
反射率\({\rho_d(p)} = \frac{d\phi_o}{d\phi_i} = \frac{L_r(p) \, \pi}{E_i(p)} = {f_r(p) \, \pi}\)
这样,我们就得到了Lambertain BRDF:\({f_r(p)} = \frac{\rho_d(p)}{\pi}\)
其中\({\rho_d}\)可以用常数项表示:\({\rho_d} = {k_d \, c_d}\),\({k_d \in [0, 1]}\),表示漫反射系数;\({c_d}\)表示漫反射颜色。
Lambertain BRDF又可写为\({f_r(p)} = \frac{k_d \, c_d}{\pi}\)
我们通常在实时渲染出于性能方面的考虑,会省略掉\(\pi\),我们熟知的漫反射颜色计算公式,就是从反射辐射度方程中简化而来的:
反射辐射度方程:\({L_o(p,\omega_o)} = {f_r(p, \omega_i, \omega_o)}\int_{\Omega_i}{L_i(p, \omega_i)}\, {\cos \theta_i}\, {d\omega_i}\)
漫反射着色公式:\({L_r} = {k_d \, c_d} {\sum_{1}^{n} \, L_i \, (n * l)} \)
对比看一下,是不是很像?\(\sum_{1}^{n}\)表示逐个光源求和近似积分,\({L_i}\)表示光源强度,\({n * l}\)表示\({\cos \theta_i}\)项
PBR Step by Step(四)Lambertian反射模型的更多相关文章
- PBR Step by Step( 五)Phong反射模型
Lamertian模型描述了当光源直接照射到粗糙物体表面时,反射光线的分布情况.在现实中,除了直接光照,还有来自周围环境的间接光照. 直接照射到物体表面的光照,又称为局部光照: 间接照射到物体表面的光 ...
- 课程四(Convolutional Neural Networks),第一周(Foundations of Convolutional Neural Networks) —— 2.Programming assignments:Convolutional Model: step by step
Convolutional Neural Networks: Step by Step Welcome to Course 4's first assignment! In this assignme ...
- 【转载】MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
1. Set - 元组的集合,在 Set 中的元组用逗号分开,Set 以花括号括起来,例如: { ([Product].[Category].[Accessories]), ([Product].[ ...
- e2e 自动化集成测试 架构 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (四) Q 反回调
上一篇文章“e2e 自动化集成测试 架构 京东 商品搜索 实例 WebStorm Node.js Mocha WebDriverIO Selenium Step by step (三) SqlServ ...
- WPF Step By Step 系列 - 开篇 ·
WPF Step By Step 系列 - 开篇 公司最近要去我去整理出一个完整的WPF培训的教程,我刚好将自己学习WPF的过程和经验总结整理成笔记的方式来讲述,这里就不按照书上面的东西来说了,书本上 ...
- enode框架step by step之框架要实现的目标的分析思路剖析1
enode框架step by step之框架要实现的目标的分析思路剖析1 enode框架系列step by step文章系列索引: 分享一个基于DDD以及事件驱动架构(EDA)的应用开发框架enode ...
- Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1
摘要: Step by Step 真正从零开始,TensorFlow详细安装入门图文教程!帮你完成那个最难的从0到1 安装遇到问题请文末留言. 悦动智能公众号:aibbtcom AI这个概念好像突然就 ...
- 数据库设计 Step by Step (2)——数据库生命周期
引言:数据库设计 Step by Step (1)得到这么多朋友的关注着实出乎了我的意外.这也坚定了我把这一系列的博文写好的决心.近来工作上的事务比较繁重,加之我期望这个系列的文章能尽可能的系统.完整 ...
- Asp.Net Core 5 REST API - Step by Step
翻译自 Mohamad Lawand 2021年1月19日的文章 <Asp.Net Core 5 Rest API Step by Step> [1] 在本文中,我们将创建一个简单的 As ...
随机推荐
- 写一个栈,实现出栈、入栈、求最小值,时间复杂度为O(1)
#-*-coding:utf-8-*- ''' 需求:写一个栈,实现出栈.入栈.求最小值,时间复杂度为O(1) 思路:通过两个栈实现,一个栈stack,一个辅助栈min_stack,记录stack中的 ...
- [机器学习]-SVD奇异值分解的基本原理和运用
SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...
- element-ui合并行:span-method
objectSpanMethod({ row, column, rowIndex, columnIndex }) { if (columnIndex === 0) { if (rowIndex % 2 ...
- html总结(一)
一.了解 HTML文档也被称为网页,包含html标签和纯文本,浏览器读取HTML文档,以网页的形式显示出来,而标签决定了所显示网页的格式. 二.要点 常用的HTML文档声明 HTML5 <!DO ...
- Jenkins mac pkg安装 后默认配置文件/启动路径
自启动文件路径 /Library/LaunchDaemons/org.jenkins-ci.plist jenkins.war 执行文件路径 /Applications/Jenkins/jenkins ...
- 第10月第20天 afnetwork like MKNetworkEngine http post
1. + (AFHTTPRequestOperation *)requestSellerWithCompletion:(requestFinishedCompletionBlock)successBl ...
- Caffe 碎碎念
Window Data Layer window data layer 的数据是存在硬盘上的图片, 需要在一个txt里指定用于训练或测试的图片以及bounding box, bounding box ...
- ZYNQ. DMA基本用法
DMA环路测试 vivadoblock zynq7 + dma +fifo sdk 中可以导入 demo demo 中 默认都是 一个字节8bit数据 的测试程序. 如果是其他长度的数据,不仅要修改数 ...
- 上传插件dropzone.js实例
dropzone.js默认是Ajax上传图片给服务器,那么如何获取到图片名呢?其实我们是可以通过dropzone的success函数获取到服务器返回的数据 dropzone.js在HTML的配置如下: ...
- 【干货】SIFT-Workstation 下载与安装 不跳过每一个细节部分
SIFT-Workstation.ova 下载地址https://digital-forensics.sans.org/community/download-sift-kit ov ...