全局照明算法基础——从辐射亮度到渲染方程

  全局照明(Global Illumination)问题上已经有很多著名的算法,如路径追踪(Path Tracing),辐照度(Radiosity)等。绝大部分书籍/教材都直接介绍了做法,在理论方面有所欠缺(比如算法的正确性)。这段时间在看《Advanced Global Illumination》,大呼爽快,所以做了这些笔记。


一、方向和立体角

clip_image002

  立体角(Solid Angle)是平面角的推广。如上图,考虑一块不规则的曲面,其在单位球体(球心在原点,半径clip_image004)上的投影为曲面clip_image006,则clip_image006[1]的面积clip_image008为该曲面对应的立体角clip_image010。根据定义易知,任何包含原点的球体对应的立体角都为clip_image012。如果用球坐标clip_image014来刻画立体角,那么其微分clip_image016可以被表示为

clip_image018

此外,根据立体角的定义,可以给出任何曲面元对应立体角的计算公式——

clip_image020

其示意图如下:

clip_image022


二、Radiance的定义

  考虑密度函数clip_image024,它给出在时空坐标clip_image026处单位体积内沿方向clip_image028、波长为clip_image030的光子的数量。那么给定位置clip_image032、时间clip_image034、方向clip_image036以及波长clip_image038,容易知道单位时间内沿方向clip_image016[1]通过面元clip_image040的、波长在clip_image042间的光子的能量为

clip_image044

其中clip_image046是这些光子的速度。在波长范围clip_image048、全体立体角clip_image010[1]、曲面clip_image006[2]上对clip_image050积分得

clip_image052

这就是曲面clip_image006[3]上的辐射通量(Flux)的定义。

  类似地,定义辐射照度(Irradiance)为

clip_image054

辐射强度(Intensity)为

clip_image056

以及辐射亮度(Radiance)——

clip_image058

这几个量间有以下关系:

clip_image060


三、Radiance的守恒性质

  从clip_image062的定义可知,Radiance是空间位置和方向的函数可以写作clip_image064,表示从空间位置clip_image066出发、朝向clip_image068Radiance。(类似地,clip_image070表示空间位置clip_image066[1]处朝方向clip_image072Radiance)若clip_image066[2]clip_image074间没有遮挡,则有以下重要性质成立:

clip_image076

  证明:

clip_image078

  如上图,由Radiance的定义有

clip_image080

其中clip_image082是从clip_image084出发向clip_image086发射的能量。根据能量守恒,它们必定都被clip_image086[1]接收,即

clip_image088

又由立体角的性质

clip_image090

clip_image092

代入得

clip_image094

整理即得clip_image076[1]


四、以Radiance来量度传感设备响应

  摄像机、人眼等感光设备所得到的光的量度可以用Radiance来衡量,而非Flux等。由此可以得出一些结论,比如一个明亮的物体随着观察者距离的增加不会显得更暗,这是因为在光的传播过程中Radiance不随距离改变。 


五、BRDF

  一束光照射到某个表面上,反射的效果随着表面的材质有所不同。譬如,理想的镜子会把所有的入射光反射到某个特定的方向,而在其他方向上的反射光为0;理想的Lambertian表面会把入射光往所有的方向均匀地反射。反射光在不同方向上的多少分布,再结合入射光的方向所构成的函数,称为bidirectional reflectance distribution functionBRDF),记作clip_image096,表示沿clip_image098方向照射到clip_image066[3]处的光在clip_image068[1]方向上的分布。准确地说:

clip_image100

并非所有的物体表面的反射都能用BRDF来建模,譬如通透的玉石(入射光可以从某一处进入玉石内部,然后从另一处穿出)等。一个把透明物体的表面纳入考虑的函数叫做bidirectional scattering distribution functionBSDF),它描述了所有方向的入射光和出射光的分布;Bidirectional surface scattering reflectance distribution functionBSSRDF)则更加强大(使用起来也更为困难),它可以描述前面提到的通透的玉石对光的作用。在这里,为了简化问题,假设所有的物体表面都使用BRDF描述。


六、BRDF的几个性质

  由BRDF的性质可知,某不透明的、不发光的表面上某一点clip_image066[4]处朝clip_image068[2]Radiance是此点反射外来光的结果,可表示为

clip_image102

其中clip_image104是从clip_image106方向来的光在clip_image068[3]方向上反射的结果。根据BRDF的定义有

clip_image108

于是,

clip_image110

该式在之后会介绍的渲染方程中扮演了重要的角色。

  Reciprocity:规定任意BRDF满足clip_image112,由此,不妨将BRDF记作clip_image114

  能量守恒:单位面积的入射能量为

clip_image116

而单位面积反射的总能量为

clip_image118

于是由能量守恒:

clip_image120


七、渲染方程(The Rendering Equation

  clip_image064[1]可以被分为两部分:clip_image066[5]处自身向clip_image068[4]方向发出的光和clip_image066[6]点反射外来光产生的光。即

clip_image122

其中clip_image124是自发光项,clip_image126是反射项。根据6中的推导,反射项clip_image126[1]可以被表示为

clip_image128

代入得

clip_image130

这就是所谓的渲染方程。可以看到该方程是递归的,且包含了一个不易计算的积分(只有在某些极简单的场景下才能求出解析解)。几乎所有的全局照明算法都是在求解渲染方程,因此称其为图形学的理论基石之一也不为过。

转载于:https://www.cnblogs.com/AirGuanZ/p/6389628.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统下载地址

系统下载地址 http://pan.baidu.com/s/1o6hVbPC 其中有xp win7和win8 32位 win7和win8 64位转载于:https://blog.51cto.com/freedom886/1403433

聊一聊DTM子事务屏障功能之SQL Server版

背景 前面写了两篇(聊一聊如何用C#轻松完成一个SAGA分布式事务和聊一聊如何用C#轻松完成一个TCC分布式事务)如何用 C# 基于 DTM 轻松实现 SAGA 和 TCC 的分布式事务,其中有一个子事务屏障的功能,很好的处理了空补偿、悬挂、重复请…

ORA-00257+mysql_ORA-00257错误的解决办法

author: headsen chendate: 2018-04-17 11:12:39notice:个人原创,转载请注明作者和出处,否则依法追击法律责任。1,oracle数据库正常使用中,突然报ora-00257的错误,原因是归档日志满…

学习路线

为什么80%的码农都做不了架构师?>>> 一、构想 1.专门制定某领域学习路线。 2.为人们进入某领域而学习提供依据。 转载于:https://my.oschina.net/kun123/blog/838360

数字图像处理技术在TWaver可视化中的应用

数字图像处理(Digital Image Processing)又称为计算机图像处理,它是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。常用的图像处理方法有图像增强、复原、编码、压缩等,数字图像处理应用领域非常广泛。具体关于数字…

WPF 实现调用本机摄像头~

WPF开发者QQ群:340500857由于微信群人数太多入群请添加小编微信号yanjinhuawechat 或 W_Feng_aiQ 邀请入群需备注WPF开发者 PS:有更好的方式欢迎推荐。接着很久前的上一篇此项目使用了OpenCVSharp加载本地摄像头,多个摄像头支持切换展示&…

全球增长最快域名解析商Top10:中国占据四席

IDC评述网(idcps.com)04月29日报道:根据国外域名统计机构DailyChanges最新实时数据显示,4月27日,在全球增长最快的十家域名解析服务商榜单中,中国占据四个席位。上榜的中国域名解析商分别是:51D…

C++之‘nullptr’ was not declared in this scope

在vim里面写了一个简单cpp文件,为了避免野指针,需要指针初始化 char *p2 = nullptr 1、编译时报错如下 2、解决办法 编译加上 g++ -std=gnu++0x int.cpp -o int 3、C里面的null和C++里面的nullptr、NULL介绍 NULL在C++中的定义 /* Define NULL pointer value */ #ifndef …

想说爱你不容易 | 使用最小 WEB API 实现文件上传

前言在 .NET 6 之前&#xff0c;实现文件上传功能十分简单&#xff1a;[HttpPost("upload")] public async Task<IActionResult> Upload(IFormFile file) {//对file执行操作return Ok(file.FileName); }但是&#xff0c;当使用 .NET 6 的最小 WEB API 来实现相…

Android下载文件

2019独角兽企业重金招聘Python工程师标准>>> package com.test;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.net.URL;import java.net.URLConnection;import android.app.Activity;import android.content.Intent…

C++之operator关键字(重载操作符) 使用总结

operator是C++的关键字,它和运算符一起使用,表示一个运算符函数, 一、为什么使用操作符重载 简单的说我们基本数据比如int float 都可以比较大小 有>、<、=,但是对象需要比较大小怎么办,我们也可以用>、<、=,只不过我们需要一个通用的规范比较对象的属性…

#HTTP协议学习# (七)cookie

本文转自&#xff1a;http://www.cnblogs.com/TankXiao/archive/2012/12/12/2794160.html Cookie是HTTP协议中非常重要的东西&#xff0c; 之前拜读了Fish Li 写的【细说Cookie】&#xff0c; 让我学到了很多东西。Fish的这篇文章写得太经典了。 所以我这篇文章就没有太多内容了…

C#中的类型~存储~变量

欢迎您成为我的读者&#xff0c;希望这篇文章能给你一些帮助。前言今天在群里看到朋友讨论把粉丝称为读者&#xff0c;这让我内心特别激动。以前我还是比较关注自己的文章阅读量&#xff0c;有没有人转发&#xff0c;今天新增多少个关注。而现在&#xff0c;我的关注点变了&…

C++之typename

1、typename和class 在模板前,typename和class没有区别 template<typename T> class A; template<class T> class A;typename和class对编译器而言却是不同的东西 2、声明一个类型 看下面的代码 我们编译下结果如下 编译器不知道T::const_iterator是个类型。如果…

mooc数据结构与算法python版期末考试_数据结构与算法Python版-中国大学mooc-试题题目及答案...

数据结构与算法Python版-中国大学mooc-试题题目及答案更多相关问题婴儿出生一两天后就有笑的反应&#xff0c;这种笑的反应属于()。【判断题】填制原始凭证&#xff0c;汉字大写金额数字一律用正楷或草书书写&#xff0c;汉字大写金额数字到元位或角位为止的&#xff0c;后面必…

使用 NetCoreBeauty 优化 .NET CORE 独立部署目录结构

在将一个 .NET CORE \ .NET 5.0 \ .NET 6.0 程序进行独立部署发布时&#xff0c;会在发布目录产生很多系统类库&#xff0c;导致目录非常不简洁。这给寻找入口程序造成了困难&#xff0c;特别是路遥工具箱这种绿色软件&#xff0c;不会在开始菜单、系统桌面创建快捷方式&#x…

ios之最简单的程序

1、构建学生对象并且打印相关信息 代码&#xff1a;#import <UIKit/UIKit.h> #import "AppDelegate.h"interface Student : NSObject //变量 property NSString *name; property int age; property float score;//method -(void)show;endimplementation Studen…

网站前端_EasyUI.基础入门.0009.使用EasyUI Layout组件的最佳姿势?

1. 基础布局<div id"l" class"easyui-layout" data-options"width:500,height:250"><div data-options"region:north,title:north,height:50"></div><div data-options"region:west,title:west,width:100&q…

MySQL数据库如何管理与维护_mysql数据库的管理与维护

mysql数据库的管理与维护云服务器(Elastic Compute Service&#xff0c;简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备&#xff0c;让您像使用水、电、天然气等公共资源一样…

[转载]Javascript异步编程的4种方法

NodeJs的最大特性就是"异步" 目前在NodeJs里实现异步的方法中&#xff0c;使用“回调”是最常见的。 其实还有其他4种实现异步的方法&#xff1a; 在此以做记录 --- http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html --- 你可能知道&am…