Instant Radiosity实现
本来说等把课程作业做完再来弄这个,但是还是没有忍住,先做了,主要原因还是这个算法很容易实现。这个算法在1997年由Keller首次提出。虽然名字叫Instant Radiosity,但是它和Radiosity还是有很大区别的,主要表现为Radiosity是确定性的算法,而Instant Radiosity是一个随机算法。再说该算法的思想,就是从光源像场景透射出很多粒子,与场景中物体发生碰撞后,就在碰撞点处创建出虚拟点光源(VirtualPointLight),利用这些VPL来近似模拟间接光照,思想十分简单。下图形象地展示了整个算法过程:

对于图中的这个室内场景,先求出它的直接光照结果图(左边两列(图1-10),因为是面积光源,所以需要对光源进行采样获得软阴影),而后从光源发射粒子击中墙壁或者地面桌面后,就在交点处设置一个虚拟点光源,对场景进行照明,得到结果图片11-20,最后将这两组结果做加权和就可以得到最终结果。至于怎么加权都无所谓了,一切看最终效果来定吧,我在实现的时候是做的基于重要性采样下的直接光和间接光的一比一相加。实际运行结果显示,由于一些VPL会在采样的时候被拒绝,最终直接光照平均亮度是大于间接光照的。
由于之前有过光子映射算法的实现经历,实现这个算法也十分简单,因为它的从光源发射粒子的这一步骤和光子映射中的photon pass十分相似。一般说来,对于间接光源做一次反射足以达到人们要求的视觉效果,但是如果场景足够复杂,或者场景主要由间接光照明的时候这就不够了。我在自己的实现中,对间接光作了6次反射,这样就和之前光子映射算法中光子在场景中的反射次数一致了,也可以作为两种算法的对比。下图展示了crytek_sponza在两种光源(左,右)下的效果,上,中,下分别是direct light渲染,Instant Radiosity渲染,photon mapping渲染:

左图中可以明显看出只计算直接光照和Instant Radiosity的效果区别,右图我利用了之前PM算法已渲染好的一个场景,能感觉出PM渲染的场景还是比Instant Radiosity更加生动,个人感觉层次感更好,离光源更近的地方更亮,这是光子分布天生的特性决定的,距离光源近的物体,被光子击中的概率远大于远处一样大小的物体,从而远处表面上的光子密度就会相对比较低,所以PM不需要考虑光的衰减问题。而Instant Radiosity则是创建好虚拟点光源后,将整个场景看做一个多光源的场景,用raytrace进行渲染,这样一来,需要手动设置光源衰减模型,这里我用了一个简单的二次模型来模拟,但是效果仍然不理想。不过Instant Radiosity速度是远超PM的,而且噪声也没有PM那么明显,只是Instant Radiosity仅适用于理想漫反射场景。
最后附上常用GI算法的比较:(表中漏掉了光子映射算法,它的特性依次是:有(光子图), 静态, 动态, 低, 无实时处理能力)

Instant Radiosity实现的更多相关文章
- SPX Instant Screen Capture
Today I will recommend a NICE screen capture tool, which name is SPA Instant Screen Capture. http:// ...
- Instant Complexity - POJ1472
Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Description Analyzing the run-time comple ...
- Error running app: This version of Android Studio is incompatible with the Gradle Plugin used. Try disabling Instant Run.
转自:http://blog.csdn.net/qq_15807167/article/details/51984920 参考:http://stackoverflow.com/questions/3 ...
- 如何安装Oracle Instant Client
Oracle Instant Client是Oracle发布的轻量级数据库客户端,下面我们来看看官方的定义: Instant Client allows you to run your applica ...
- This version of android studio is incompatible with the gradle version used.Try disabling the instant run解决办法
今天打开android studio又碰到一个奇怪的问题:This version of android studio is incompatible with the gradle version ...
- 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...
- Instant Python 中文缩减版
前言 本文主要来自<Python基础教程(第2版)>([挪]Magnus Lie Hetland著,司维 曾军崴 谭颖华译 人民邮电出版社) 中的“附录A 简明版本”,对于其中的有问题之处 ...
- [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能
reference to : http://www.cnblogs.com/soaringEveryday/p/4991563.html 以往的Android开发有一个头疼的且拖慢速度的问题,就是你每 ...
- [原创]Android Studio的Instant Run(即时安装)原理分析和源码浅析
Android Studio升级到2.0之后,新增了Instant Run功能,该功能可以热替换apk中的部分代码,大幅提高测试安装的效率. 但是,由于我的项目中自定义了一些ClassLoader,当 ...
随机推荐
- Oracle11g的最佳灵活体系结构OFA
- python MySQLdb 对mysql基本操作方法
#!/usr/bin/env python # -*- coding:utf-8 -*- import MySQLdb conn = MySQLdb.connect(host=',db='host') ...
- 超详细的java反射教程
看技术博客时,看到关于java反射的博文,写的非常好.猛击下面的地址,开始java反射之旅 中文翻译地址:http://ifeve.com/java-reflection/ 英文原版地址:http:/ ...
- logback配置详解1
一:根节点<configuration>包含的属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true. scanPeriod: 设置监测配置文 ...
- ASP.NET 5 DNX SDK删除旧版本
ASP.NET 5各种升级后旧版本的DNX不会删除,想删除旧版本的DNX,可以通过以下命令完成 首先打开CMD或者Powershell 1.先输入dnvm看看命令中是否有uninstall 2.如果没 ...
- 1、策略模式(Strategy)
//抽象接口 class ReplaceAlgorithm { public: ; }; //三种具体的替换算法 class LRU_ReplaceAlgorithm : public Replace ...
- spark standalone ha spark submit
when you build a spark standalone ha cluster, when you submit your app, you should send it to the l ...
- Smokeping -- 监控网络质量
1.下载fping.echoping.smokeping 链接:http://pan.baidu.com/s/1pL4HLYb 密码:fxe2 2.安装依赖包 yum install -y perl ...
- python高级之函数
python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多 ...
- app测试总结
1.安全测试(权限) 1)软件权限:其中包括发送信息,拨打电话,链接网络,访问手机信息,联系人信息等等 2)数据在本地的存储.传输等 3)执行某些操作时导致的输入有效性验证.授权.数据加密等方面 4) ...