本来说等把课程作业做完再来弄这个,但是还是没有忍住,先做了,主要原因还是这个算法很容易实现。这个算法在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++里将string类字符串(utf-8编码)分解成单个字(可中英混输)

    最近在建词典,使用Trie字典树,需要把字符串分解成单个字.由于传入的字符串中可能包含中文或者英文,它们的字节数并不相同.一开始天真地认为中文就是两个字节,于是很happy地直接判断当前位置的字符的A ...

  2. Tips for Planning Your Business Startup

    原文链接:http://domaintree.me/?p=1037 By Robert Thibodeau –  Starting a business can be a very daunting ...

  3. CentOS 6.3下Samba服务器的安装与配置

    一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的 ...

  4. windows常用端口对应表

    端口概念 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义 ...

  5. Excel自文本导入内容时如何做到单元格内换行

    前言:今天在处理数据的时候,在数据库中用到了\n换行符号,目的是在同表格内做到数据多行显示,比如  字段名1  字段名2  字段名3  1 数据一行 数据二行 数据三行 例子是在sql查询后的结果  ...

  6. 解决:PADS导入.DXF结构图出现坐标超出范围问题

    现象: 原因: PCB尺寸是有限的,PADS中对于坐标大小有所限制,但AUTO CAD中的坐标却是无限制的. 解决方法: 1.在AUTO中使用M命令,将绘制的结构图移动至原点: 2.在AUTO中使用W ...

  7. Save()saveOrUpdate()Hibernate的merge()方法

    Save save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思.我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保存数据的原因.假如两个实体之间有关系(例如empl ...

  8. 程序测试--DOS界面测试C程序

    打开命令提示符或运行CMD或直接通过路径C:\WINDOWS\System32\cmd.exe打开即可: 转到可执行文件所在的磁盘,然后输入mycount.exe <1.txt命令即可.如图示对 ...

  9. linux系统下的权限知识梳理

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

  10. NOI2018准备Day14晚

    1个小时调处了前天晚上卡了一个晚上的数独,果然还是dfs回溯的问题. 1个小时做codevs2500城堡,然而并没有做出来 剩下1个小时,做了一道字符串的STL,空格和换行符 ,真心累啊...... ...