当前位置: 首页 > news >正文

基于预计算辐射传递的全局光照技术

http://xueshu.baidu.com/usercenter/paper/show?paperid=097d4f3c59f80d4b459b9b98c31988f1&site=xueshu_se

全局光照的算法包括光线追踪和辐射度两大类。
光线追踪是全局光照计算的经典方法可以绘制出高质量的镜面反射效果。该方法逆向追踪到达绘制屏幕上的每一个像素的光线,通过与场景中的物体的多次相交,反射以及投射来确定光线路径,计算该像素的亮度以及颜色值。尽管光线追踪技术是一项较为成熟的真实感图像绘制技术,但是其消耗的计算量非常大,以至于现在该技术没有广泛地应用到实际中去。

辐射度算法以热传递理论为基础,原理是考虑场景中所有面的相互光辐射作用,求解能力平衡方程,获取场景各个点的亮度。 普通的辐射度算法计算量和消耗资源量也相当大。

为了渲染出真实感强,绘制高效率的全局光照效果,Sloan根据光照和绘制效果的线性关系,并利用GPU的优越性能,提出了预计算辐射传递(precomputed radiance transfer, PRT)框架。PRT 算法是采用球面光辐射传递映射方法在物体表面创建函数,把任意低频入射的传递表示成辐射度传递,其中包括阴影和交互反射。对光辐射传递单独进行预处理,在运行阶段,这些转移函数应用到实际入射光中。光源和光辐射传递函数都用低频球谐波函数描述。在绘制过程中,由于全局光照计算所需的光辐射传递函数信息已经在预处理中获得,

而且该函数和光源分布函数都已经分解成正交函数序列,因此最后的出射光强计算化简为两者的系数向量的点积,这种绘制速度比较快。

本文通过利用小波技术重建高频信号,得到了高频的光照仿真效果,并且在实时绘制塔台模拟大规模场景时,采用了自适应细分的算法,大大提高了绘制机场模型的效率。

1 基于球面和谐函数的PRT函数方法
PRT算法表现了在复杂的光源下,由于物体自身的遮挡和反射造成的自阴影和自反射光,这些阴影和反射光都是低频率的软阴影和反射。它通过对复杂的光线相互作用进行预计算来节省时间,提供了一种动态改变光照环境的方法,其本质是通过入射光的线性组合来计算每个点的光照,用球面调和函数解码这些数据。

1.1 真实物理光照模型
如果场景中有nlights个光源,则模型表面的光照颜色用下式计算:
在这里插入图片描述
其中:N为表面法线,L为光照方向。
这个光照模型只不过是真实物理光照的简化,只有完全地模拟物理才能得到真正照片级的真实。但物理光照公式计算相当复杂,实现实时计算困难。看下面的物理公式,实际上是在半球上对光线方向(V)的亮度(L)函数进行积分。

在这里插入图片描述
1.2 光辐射传输函数的预计算
PRT算法的核心是对光照信息使用球面调和来进行编码。一个原始信号,可以分解为一系列基函数的线性组合,如果要在以后利用这些基函数来重建原始信号,必须事先得到每个基函数相对应于原始信号得系数(缩放因子)。比如要计算信号f(x)中基函数b(x)分量得系数(权重),需要在f定义域上对f(x)b(x)进行积分,也就是所谓的卷积,这一过程为projection。而重建原始信号,则将经相应系数缩放后的所有基函数求和即可。

PRT采用的是一种叫做伴随勒让德多项式(associated legendre polynomials)的正交函数。通常用P表示这类多项式,伴随勒让德多项式具有两个参数l和m,定义域为[-1,1],返回值为实数,l和m两个参数将这些多项式归为若干组,l便是组的编号,取值为大于0的整数,而m取值为[0,l]的整数,同一组中的任意2个多项式之间卷积为一个固定的常数项,而不是同组中的任意2个多项式之间卷积又是另外一个固定的常数。很显然一个n组勒让德多形式一共有n(n+1)项,如果用这些多项式进行信号projection 可以得到n(n+1)个参数。

在这里插入图片描述
当l=0时,球面调和函数可以用来近似环境光照,可以用在AO(ambient occlusion)计算中。而l=1时,因为球面上值呈余弦分布,故可以用来近似漫反射计算中的cos项。现在要利用这些球面调和函数对球面上的原始入射亮度信号进行编码,只要在球面上做卷积运算就可以了。

相关文章:

  • 傅里叶变换
  • PhpStorm插件之Translation
  • 小波变换原理
  • 如何通俗地理解傅立叶变换?
  • T函数
  • 分部积分法
  • mssql sqlserver 使用SSMS运行sql脚本的六种方法分享
  • 探讨基于球谐函数的全局光照
  • vue的实例属性$data
  • unity中的球谐光照
  • Python简介
  • 光探针的细节
  • 软件工程第十一周总结
  • 伽马校正
  • sRGB颜色空间
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Brief introduction of how to 'Call, Apply and Bind'
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java反射-动态类加载和重新加载
  • Java-详解HashMap
  • React-flux杂记
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • text-decoration与color属性
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • XML已死 ?
  • 阿里云购买磁盘后挂载
  • 线性表及其算法(java实现)
  • 写代码的正确姿势
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​低代码平台的核心价值与优势
  • # centos7下FFmpeg环境部署记录
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (接口封装)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • *** 2003
  • .Net 6.0 处理跨域的方式
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .net6使用Sejil可视化日志
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET文档生成工具ADB使用图文教程
  • .NET项目中存在多个web.config文件时的加载顺序
  • .NET学习教程二——.net基础定义+VS常用设置
  • .sh
  • []新浪博客如何插入代码(其他博客应该也可以)