本来说等把课程作业做完再来弄这个,但是还是没有忍住,先做了,主要原因还是这个算法很容易实现。这个算法在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实现的更多相关文章

  1. SPX Instant Screen Capture

    Today I will recommend a NICE screen capture tool, which name is SPA Instant Screen Capture. http:// ...

  2. Instant Complexity - POJ1472

    Instant Complexity Time Limit: 1000MS Memory Limit: 10000K Description Analyzing the run-time comple ...

  3. 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 ...

  4. 如何安装Oracle Instant Client

    Oracle Instant Client是Oracle发布的轻量级数据库客户端,下面我们来看看官方的定义: Instant Client allows you to run your applica ...

  5. 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 ...

  6. 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

    以往的Android开发有一个头疼的且拖慢速度的问题,就是你每改一行代码要想看到结果必须要编译运行到手机或者模拟器上,而且需要从头(可能是登录界面)一直点击到你修改的界面为止.开发一个完整的Andro ...

  7. Instant Python 中文缩减版

    前言 本文主要来自<Python基础教程(第2版)>([挪]Magnus Lie Hetland著,司维 曾军崴 谭颖华译 人民邮电出版社) 中的“附录A 简明版本”,对于其中的有问题之处 ...

  8. [Android Pro] 告别编译运行 ---- Android Studio 2.0 Preview发布Instant Run功能

    reference to : http://www.cnblogs.com/soaringEveryday/p/4991563.html 以往的Android开发有一个头疼的且拖慢速度的问题,就是你每 ...

  9. [原创]Android Studio的Instant Run(即时安装)原理分析和源码浅析

    Android Studio升级到2.0之后,新增了Instant Run功能,该功能可以热替换apk中的部分代码,大幅提高测试安装的效率. 但是,由于我的项目中自定义了一些ClassLoader,当 ...

随机推荐

  1. 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

  2. CentOS安装LNMP环境的基础组件

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. 在安装LNMP环境之前,请确保已经使用yum安装了以下各类基础组件(如果系统已自带,还可以考虑yum update下基础组件): ...

  3. android sqlite select,update,delete语法

    String sql = "update recentsongtab set usetime=? , strdatetime=? where songid=?";//修改的SQL语 ...

  4. Neutron 理解(10):虚拟专用网(VPN)虚拟化 [How Neutron implements VPN Virtualization]

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  5. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  6. Hibdernate入门

    Hibernate中java对象的三种状态 瞬时状态(Transient):通过NEW创建对象后对象并没有立刻持久化他未与数据哭中的数据有任何关联 持久状态(Persistent):当对象与Sessi ...

  7. http协议进阶(二)URL与资源

    一.URL的语法  URL是互联网资源的标准化名称 URL提供了一种定位互联网上任意资源的手段,但这些资源要通过不同方案(协议:比如http.ftp.smtp)来访问,因此URL语法会略有差异 大部分 ...

  8. Oracle 中的分析函数

    Oracle常用分析函数介绍(排名函数+窗口函数) 2014年11月30日 ⁄ 数据库 ⁄ 共 3903字 ⁄ 暂无评论 ⁄ 阅读 7,772 次 评级函数 常见评级函数如下: RANK():返回数据 ...

  9. java多线程系类:JUC线程池:02之线程池原理(一)

    在上一章"Java多线程系列--"JUC线程池"01之 线程池架构"中,我们了解了线程池的架构.线程池的实现类是ThreadPoolExecutor类.本章,我 ...

  10. C#.NET 大型企业信息化系统 - 防黑客攻击 - SSO系统加固优化经验分享

    好久没写文章了,突然间也不知道写什么好了一样,好多人可能以为我死了,写个文章分享一下.证明一下自己还在,很好的活着吧,刷个存在感. 放弃了很多娱乐.休闲.旅游.写文章.看书.陪伴家人,静心默默的用了接 ...