基于功耗预算的实时绘制


今天给大家介绍的是一篇以画面质量与设备耗电量为引导的渲染技术论文,该论文发表于2016年著名的Siggraph图形学大会。一般来说,图像渲染质量的提升往往意味着每个像素都要进行更多的数据计算,从而造成设备耗电量的增加。对于对耗电量非常敏感的移动设备来说,我们往往需要在画面质量与设备耗电量间进行权衡。如何使用尽可能少的耗能来渲染出高质量的画面,这几乎是每个游戏团队都在思考的问题。因此,我们推荐这篇论文,希望文章中作者对于该问题的思考和提出的解决方法可以对你的项目有所帮助和启发。

先来看一下本文方法的效果图:
请输入图片描述

我们知道,渲染参数(比如Shadow Mapping、SSAO的相关参数以及图像分辨率等参数)决定了图像质量。上述效果图的意义如下:

  1. 上图左侧部分是同一场景在不同渲染参数下得到的不同质量的三幅图像,分别为最低质量的渲染图像、本文使用根据耗电量优化后的参数渲染出的图像、最高质量的渲染图像;

  2. 中间部分是三幅图像的细节比较,可以看出在图像质量方面(高光、阴影、反射等细节),本文方法得到的渲染效果与最高质量的效果相差不大,并且远好于最低质量的渲染效果;

  3. 右侧图表则是各个方法在耗能和渲染质量上的数值比较。下方的图表表示不同方法渲染质量的差距,可以看到本文方法的画质(橙色)与最高画质(绿色)相差不大,但远高于最低画质(蓝色)。而上方图表表示三种方法的耗电量统计,在画质相差不大的情况下,本文方法进行渲染的耗电量(橙色)远低于最高画质的耗电量(绿色),比最低画质的耗电量(蓝色)也高出并不多。

综上所述,本论文方法可以在基本保持渲染质量的情况下,让设备的耗电量大幅降低。根据论文中描述,其具体可以减少30%~50%的电量消耗。

接下来我们来概括一下本篇论文的渲染框架。设备输出画面的视觉效果与渲染参数有关,我们将一组渲染相关参数(Shadow Mapping,SSAO,Resolution等)的组合记为s。除了渲染参数,画面展示的场景内容还与相机的位置与朝向有关,将其记为c。这样,渲染出的效果图像就可以看作是s与c的函数,记为f(s,c)。场景渲染时,在给定相机位置与朝向c后,确定一组渲染参数s,设备便能够根据s与c输出画面f。前面提到,渲染参数决定了图像的质量,同样也决定了耗电量的多少。这样,渲染的关键问题就变为如何寻找一组合适的参数,使设备能够在满足低耗电的前提下尽可能地保证画质。文章通过一个优化过程来解决该问题。根据较高画质和较低电量消耗这两个目标,可以构造出一个优化方程组,对其求解便可以从众多可能的渲染参数组合中确定一组最优的组合,记作Sopt。通常求解Sopt难以做到实时,因此本文使用了预计算方法:对于每个可能的相机位置/朝向c,预先建立相应的帕累托曲线P(计算耗时,但算好后可以根据P快速找到Sopt),存储(c,P),之后在实际运行时,根据当前的相机位置,在查找表中通过临近的c查找对应的P,利用P再加上用户指定的图像质量和耗电量要求就够快速的搜索出Sopt,完成实时渲染。

在下文中,我们将为大家介绍该文章的大致实现步骤,大家可以根据兴趣继续阅读,也可以直接跳到后面查看具体的效果比较:)


一、算法框架

渲染的关键是确定合适的渲染参数,文章将参数s的确定转化为一个优化求解过程。由于相机不同位置c和渲染参数s所构成的参数空间是非常巨大的,并且需要优化求解的是一个多目标方程(降低电池消耗和提升渲染质量),因而本文作者尝试采用一定预处理技术来完成这一目标。概括来说,要使本文算法达到实时,关键部分有两个:

  1. 如何有效地预处理场景中不同相机位置和不同渲染参数所产生的电量消耗以及渲染质量;
  2. 如何实时地采用这些信息。

算法框架如下图:
请输入图片描述

其中绿色部分为预处理部分,黄色为实时渲染部分。在预处理阶段,文章采用了八叉树对相机可能的位置空间进行分割,在每个树节点,使用遗传算法(Genetic Programming)搜索所有可能的渲染参数组合,得到该相机位置对应的帕累托曲线P(Pareto frontiers),并将相应的(c,P)对进行存储。对于空间分割的细度,对每个树节点可以通过比较相邻节点的帕累托曲线相似度,来判定是否需要继续分化,从而保持足够的采样点来确保渲染所得图像的连贯性。

在实时渲染阶段,只需根据当前相机位置查找所有附近八叉树节点的帕累托曲线,并根据用户给定能量预算或者渲染质量差预算,在各个帕累托曲线上快速找出对应的渲染参数并进行差值,从而得当最优的渲染参数。接下来将对参数优化求解过程进行略微详细的介绍。


二、问题定义

定义渲染函数为f(c,s),即给定相机参数c以及渲染参数s,输出渲染图像f。其中f包括所有前向渲染和延迟渲染的最终结果。假设我们有一个最优画质设置sbest,那我们就可以定义一个与最优质量图像的画质差:

3.png

其中,x,y为图片中的坐标变量。类似的,我们可以定义一个电量消耗关于相机参数c和渲染参数s的函数p(c,s),这样我们就可以定义以下优化方程式:

4.png

其中pbgt和ebgt分别为给定的电量消耗阈值(预算)以及画质差阈值(预算)。以上公式的意义分别是,在给定的电量预算中,找出画质最优的渲染参数,以及在给定画面质量预算时,计算出最节省能耗的渲染设置。文章的渲染关键就是在用户给定预算(电量或者画质)时,找出最优的渲染参数。


三、解决方案

由于该问题涉及两个目标,画面渲染质量和电量消耗,为了更有效地解决这个优化问题,文章提出了一个偏量排序策略(Partial Order),即将一个渲染设置优于另一个的定义为:要么有更好的渲染效果并至少保持一样的能耗;要么更节省能耗并保持至少一样好的画质。基于此,文章使用帕累托优化(Pareto-Optimal),引入帕累托曲线(Pareto frontiers)缩小了整个优化空间,即在帕累托曲线(Pareto frontiers)上的渲染设置肯定比其他参数空间上的点更优,这样就能快速的求出给定预算下的最优渲染设置了。如下图所示,只需找到离预算线最近的点就是最优的结果。

5.png

帕累托曲线的计算是相对耗时的,为了可以实时计算出最佳解决方案,文章采取了预处理的方法来实现,并提出了一个合理假设,即:在一定的相机参数范围内,优化的帕累托曲线会比较相似。基于此,文章采用了八叉树来对整个场景相机位置进行划分,并给出了一个自适应分割空间方法如下图:

请输入图片描述

如上左图,每个小方格都是一个相机位置/朝向采样,其中o表示位置,v表示方向。为方便说明,这里使用2D表示并有4个方向。通过遗传算法先计算场景四周位置每个方向的帕累托曲线后(图中o0-o3),比较他们同一方向的帕累托曲线的差异(如图中红色部分),如果大于一定阈值,就分出一个子树(图中蓝色部分),循环往复,直到所有数节点间差异都小于阈值。而小于阈值部分,便继承父节点的帕累托曲线,如图中的虚线部分。而在运行时,首先根据运行相机的位置找到八叉树中的对应叶子节点,然后根据相机方向对应的投影面积最大的预算方向,如右图中,对应位置是o7以及v3。从而得到该运行时相机的近似帕累托曲线。在具体实现中,会对参数的结果进行插值,以避免画质的突然变化。


四、效果展示

请输入图片描述

在实验部分,文章主要测试了4个场景:Valley, Hall, Elven Ruins以及Sun Temple。如上图所示,和最节省模式相比,该方法的画质差是很小的,而和最佳画质的能量消耗相比,该方法的能量消耗和最低画质在一个等级上。

请输入图片描述

在该算法的统计数据上,如上图,我们可以看出,在一个667.9K个三角形512MB大小的场景下,最终的预处理数据仅为18.1KB,这表明该方法在实际应用中是较为可行的。然而,31.7K三角形,就需要35.3个小时(能量消耗测试需要具有统计意义,每次采样文章使用10秒钟时间进行)的预处理,如果进一步降低预处理的时间,文章作者将其列为了将来进一步完善的工作。下图为Valley,Hall以及ElvenRuins场景示意图以及统计图,可以看出该方法的画质几乎和最优化质在一个水平上,而能量消耗却很少。

请输入图片描述
请输入图片描述


五、结论

本文就设备的渲染耗时问题进行了深入的研究,并结合具体的实际案例,验证了本文提出的方法非常有效。该论文所提出的解决方案主要有以下三个特点:

  1. 能够在渲染质量与能量消耗方面做出一个最优的权衡;
  2. 用户可以指定需要满足的画面质量目标或者能量消耗目标;
  3. 通过少量的预处理数据,即可在实时渲染中得到应用。

六、论文相关信息

关于论文通讯作者
王锐,浙江大学教授,博导。2007年浙江大学数学系博士毕业,2008年起在浙江大学计算机科学与技术学院CAD&CG国家重点实验室任教。长期从事计算机图形学绘制、虚拟现实方面的研究工作,在快速/实时全局光照明绘制、光场传输采样的理论与方法、绘制流水线设计与优化等方面取得了具有国际先进水平的研究成果。在计算机图形学的顶级期刊/会议ACM Transaction on Graphic及SIGGRAPH,SIGGRAPH Asia发表多篇论文,在IEEE TVCG, CGF,C&G,TVCJ,EG,PG等国际知名期刊和会议共发表论文三十余篇。现为国际知名期刊CGF的编委。




原文出处:侑虎科技
本文作者:admin
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值