《Global illumination with radiance regression functions》

2023-12-18 13:30

本文主要是介绍《Global illumination with radiance regression functions》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这里插入图片描述总结一下最近看的这篇结合神经网络的全局光照论文 这是一篇2013年TOG的论文。

介绍

论文的主要思想是利用了神经网络的非线性特性去拟合全局光照中的间接光照部分,采用了基础的2层MLP去训练,最终能实现一些点光源、glossy材质的光照渲染。为了更好的理解、其输入输出表示如下。

首先是原文的介绍: 4个三维向量:着色点位置 x p x_p xp,间接光照对应视角方向 v v v,点光源位置 l l l,点表面法线 n n n,再加上BRDF附带的albedo等参数 n p n_p np
在这里插入图片描述

我们在拥有了能预测间接光照的模型后,就可以在实时渲染中计算完直接光照后进行叠加即可。
在这里插入图片描述
可以看出最主要的就是如何去训练出这个ML模型。接下去进一步讨论,

训练神经网络

首先是模型的训练损失计算

在这里插入图片描述然后对整个训练模型训练过程的神经网络进行表示
在这里插入图片描述
之后通过最小化 E ( w ) E(w) E(w)进行训练

作者指出,在理论上一层的隐藏层神经网络可以拟合连续的方程,而由于间接光照s+包含了较多峰谷,两层能更好的拟合少量的这样节点,所以理论上都是可以实现,只是会增加神经网络参数或层数,太大的话不好训练。

渲染

渲染阶段主要通过将每个像素的相应值传入神经网络计算间接光照再和计算的直接光照相加。

其中 a ( x p ) a(x_p) a(xp) n ( x p ) n(x_p) n(xp)可以从渲染管线中获得(g-buffer),然后为了神经网络更好的训练减少不必要的参数。这两个加上的参数,作者认为很有用所以也做了消融实验
在这里插入图片描述
a是ground truth, b是两个都加,c只有albedo,d都没加, 看到b 和a十分的效果十分的接近。

考虑场景复杂性

另外考虑到场景的复杂性,用kd-tree对数据点降维然后进行了划分,让尽可能相似的点在一起,然后训练一个共用的RRF神经网络。其中为了防止不同RRF之间的非连续性还将对应的box扩大了10%
在这里插入图片描述
考虑到划分轴选择的问题,最佳分裂轴是在 ν 的子节点上产生最小训练和预测误差的轴,暴力或者随机的遍历所有轴选取即可。

实验表现

在这里插入图片描述
其中RRF的效果能达到30-60多帧的效果,在当年某些场景还算可以。但当场景几何复杂了,就像Plant一样,RRF的难学习到其中的共性,自然就慢。

跟训练集的大小也有关系,训练集越大效果越好
在这里插入图片描述
可以对glossy的材质进行渲染,就像下面的墙面
在这里插入图片描述

总的来说,当年选用的两层简单的MLP效果还是有很大的局限,场景一大稍微一复杂就无法有效拟合了,并且推理的时间也相当的慢,光照如果变化的剧烈也一样,另外场景也是不能变动的,动了预测的肯定就不准了,毕竟是用训练数据训练的网络。

这篇关于《Global illumination with radiance regression functions》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/508560

相关文章

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

关于OceanBase MySQL 模式中全局索引 global index 的常见问题

在OceanBase的问答区和开源社区钉钉群聊中,时常会有关于全局索引 global index的诸多提问,因此,借这篇博客,针对其中一些普遍出现的问题进行简要的解答。 什么是 global index ? 由于 MySQL 不具备 global index 的概念,因此这一问题会经常被社区版用户提及。就在前几天,就要人询问下面这个语法的意义。 create table part_tes

Flink实战案例(二十三):自定义时间和窗口的操作符(四)window functions之增量聚合函数(一)ReduceFunction

实例一 例子: 计算每个传感器15s窗口中的温度最小值 val minTempPerWindow = sensorData.map(r => (r.id, r.temperature)).keyBy(_._1).timeWindow(Time.seconds(15)).reduce((r1, r2) => (r1._1, r1._2.min(r2._2))) 实例二 ReduceFun

$GLOBALS与global区别 变量销毁机制

代码一: <?php$var1 = 1;function test1(){global $var1; #等价于 $var1 = &$GLOBALS['var1']; 这里的$var1跟外面的$var1是不同的指针,但指向同样的数据unset($var1); #当你unset一个引用,只是断开了变量名和变量内容之间的绑定,这并不意味着变量内容被销毁了.echo $var1; #P

Face Recognition简记1-A Performance Comparison of Loss Functions for Deep Face Recognition

创新点 1.各种loss的比较 总结 很久没见到这么专业的比较了,好高兴。 好像印证了一句话,没有免费的午餐。。。。 ArcFace 和 Angular Margin Softmax是性能比较突出的

【matlab】global的用法

>> help globalglobal - Declare global variables 声明全局变量This MATLAB function defines X, Y, and Z as global in scope. %此函数定义X,Y,Z为全局global X Y Zglobal 的参考页另请参阅 clear, isglobal, who名为 global 的其他函数mbc/Gl

pytorch Loss Functions

1. pytorch中loss函数使用方法示例 import torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch.autograd import Variable# 定义网络时需要继承nn.Module并实现它的forward方法,将网络中具有可学习参数的层放在构造函数__init__中# 不具有可学习参

JavaScript - Blocks - Functions

浏览器内置 functions var myText = 'I am a string';var newString = myText.replace('string', 'sausage');console.log(newString);// the replace() string function takes a string,// replaces one substring w

MATH36022 Numerical Analysis 2 Approximation of Functions – Week 3 Exercises

Show that the Chebyshev polynomials are orthogonal on ( − 1 , 1 ) (−1, 1) (−1,1) with respect to the weight function ( 1 − x 2 ) − 1 / 2 (1 − x^2)^{−1/2} (1−x2)−1/2. Ans: T n ( x ) = cos ⁡ ( n arcc

Spark MLlib模型训练—回归算法 Linear regression

Spark MLlib模型训练—回归算法 Linear regression 线性回归是回归分析中最基础且应用广泛的一种方法。它用于建模目标变量和一个或多个自变量之间的关系。随着大数据时代的到来,使用像 Spark 这样的分布式计算框架进行大规模数据处理和建模变得尤为重要。本文将全面解析 Spark 中的线性回归算法,介绍其原理、参数、Scala 实现、代码解读、结果分析以及实际应用场景。 1