一种渲染程序的在线优化方法

文档序号:10613729阅读:191来源:国知局
一种渲染程序的在线优化方法
【专利摘要】本发明公开了一种渲染程序的在线优化方法,包括:构建原始渲染程序的简化程序,根据渲染代价和绘制误差选择若干作为代表渲染程序根据依赖关系构建简化依赖图;在渲染过程中,监测待绘制场景参数,当发生剧烈变化时使用新一轮在线优化,通过多次循环来完成一次优化,每次优化中循环进行如下操作:根据简化依赖图从所有代表简化程序中选择K个作为候选简化程序,依据绘制误差和渲染代价确定本次循环结果,并根据若干次循环结果决定当前在线优化是否结束。动态选择最优的简化渲染程序,实现渲染程序与场景的解耦合,避免离线优化的枚举参数空间问题,且同时进行渲染程序的误差计算和时间测量与场景绘制,速度快,实时性强。
【专利说明】
一种渲染程序的在线优化方法
技术领域
[0001] 本发明涉及实时绘制领域,尤其涉及一种渲染程序的在线优化方法,用于在绘制 过程中在线对渲染程序进行优化。
【背景技术】
[0002] 在实时绘制领域,一直存在加快绘制速度的需求,而渲染程序的复杂度则是决定 绘制效率的一个重要因素。渲染程序是由多种着色器代码组成的,包括顶点,外壳,细分,几 何,像素,计算等多个种类。这些着色器各自对应可编程硬件渲染管线某一阶段。在绘制过 程中,渲染程序中的各个着色器将在不用的渲染阶段中被调用执行,不同的着色器,被执行 的次数也随其对应的阶段的不同而不同。在应用过程中,越简单的渲染程序可以跑得越快, 但使用人力重写更简单的程序非常低效,所以可以自动简化原始渲染程序的方法不断出 现。
[0003] Pellacini提供了一个用户可配置的着色器简化方法来进行逐像素的过程建模。 程序生成一系列由原始着色器逐步简化生成的着色器。该方法通过对着色器的代码应用指 定的简化规则来生成一系列的候选变种,然后评估变种与原始着色器之间度量的差来选择 具有最小误差的候选变种。这种选择过程一直循环直到最后的着色器成为了常量。Sitthi-amorn使用遗传编程来自动简化植染过程。与Pellacini类似,该算法同样计算一系列逐步 简化的着色器,但考虑了更多的代码变换规则,包括代码中表达式语句中操作数与操作符 的交换、语句的删除和语句的插入等,同时该方法使用遗传算法来选取更多的简化后的着 色器,并且也能生成更快的和更可靠的结果。Wang则提供了一种跨越多个着色器阶段的简 化,通过将渲染程序的执行当成一个表面信号生成的过程,将渲染程序的简化视为对表面 信号的重新拟合,并提供使用基函数来表达这些信号,比如高阶的多项式函数,无网格的稀 疏径向基函数,或者数据分解的基函数。
[0004] 但是这些方案存在以下两个问题:
[0005] 1.较长的计算时间,每一个简化程序都需要进行渲染并计算误差和时间,再从中 选择出合适的简化程序。但是大量的简化程序需要消耗很长的预计算时间。
[0006] 2.离线优化固定了渲染的模型,在计算时间和误差时,只能选择有限个视角进行 计算,并不能涵盖在运行过程中的所有可能空间。

【发明内容】

[0007] 针对现有技术的不足,本发明提出了一种渲染程序的在线优化方法,该方法减少 了生成的简化程序的数量,并在绘制过程中完成简化程序的选择,使得渲染程序的优化更 迅速,更准确。
[0008] -种渲染程序的在线简化方法,包括如下步骤:
[0009] (1)对原始渲染程序进行如下预处理:
[0010] (1-1)采用不同渲染程序简化规则对原始渲染程序进行预简化得到若干个简化程 序,并计算各个简化渲染程序的渲染代价;
[0011] (1-2)根据每一个简化程序使用的简化规则,确定原始渲染程序以及各个简化程 序之间的依赖关系;
[0012] (1-3)计算各个简化渲染程序的参数影响向量和渲染代价,所述参数影响向量为 相应渲染程序中所有输入参数对渲染程序中计算结果的影响值组成的向量;
[0013] (1-4)根据简化程序渲染代价和参数影响向量从所有简化渲染程序·-·_中聚类选 择若干个作为代表简化程序,并依据依赖关系,将原始渲染程序和所有代表简化程序生成 简化依赖图;
[0014] (2)在渲染过程中,以当前绘制到窗口的程序作为基础程序,监测待绘制场景参 数,当发生剧烈变化时开始新一轮在线优化,每轮在线优化过程中循环进行如下操作:
[0015] (2-1)根据简化依赖图从所有代表简化程序中选择K个作为候选简化程序:
[0016] (2-2)在使用基础程序绘制到窗口的过程中,插入K个候选简化程序的绘制,计算 并储存相应的绘制误差和渲染代价;
[0017] (2-3)针对任意一个候选简化程序:
[0018] 若满足El〈E_max且Τ1〈??,则更新基础程序结束本轮优化;
[0019] 否则,不更新基础程序,并进行如下操作:
[0020] 若连续若干次循环都不更新基础程序,则停止本轮在线优化;
[0021] 否则,返回继续执行步骤(2-1);
[0022]其中,Ε1,Τ1分别表示简化程序的绘制误差和渲染代价,E_max表示最大允许的误 差(根据需要设定),το表示当前基础程序的渲染代价。
[0023] 本发明中的渲染程序采用HLSL语言编写的源代码,为了在渲染过程(即绘制过程) 中进行处理,需要将源代码处理为对应的抽象语法树和程序依赖树。在应用简化规则生成 的简化程序之后,仍需将简化的抽象语法树转化为HLSL代码,进行渲染。
[0024] 本发明中对原始渲染程序进行简化时使用的简化规则共有3种,分别为:表达式删 除规则、代码移动规则和曲面细分规则,其中,代码移动和曲面细分与论文"Automatic shader simplification using surfacesignal approximation" 中提出公开的两种规则 一致,表达式删除规则可以采用文献"User-configurable automatic shader simplification"中公开的规则一致。作为优选,对于表达式删除规则可以与文献"User-configurable automatic shader simpl if icat ion" 中稍有不同 ,不同 点具体如下:
[0025] (a)对与二元表达式a 0 b将会有两种简化变种a (i) b - b和a參b - a。
[0026] (b)对于从cb到ce的循环计算,将随机生成i,j并将循环替代为从cb+i到ce-j。
[0027] 对原始渲染程序进行简化时,从渲染程序中选择目标代码(可以是原始渲染程序 中的某一条语句或多条语句或所有语句),然后从上述三种简化规则选择其中至少一种对 目标代码进行简化,且针对不同的目标代码可以采用不同的简化规则的组合,这样通过对 一个原始渲染程序简化即可得到大量的简化渲染程序。
[0028] 依赖图当中每一个节点表示的都是一个简化的渲染程序,通过有向边联系在一 起。因为所有的简化程序都是由原始渲染程序简化而来,故原始渲染程序作为整个简化依 赖图的根节点存在。
[0029] 在简化依赖图中,存在节点A和节点B,若节点B的程序是通过在简化程序A上应用 一次简化操作得到的,则会存在一条由节点A指向节点B的有向边。以下面两条语句SI,S2举 例:SI: c = a+b; S2: e = d+c.可以分别应用代码移动规则到语句SI,S2生成两个节点VI,V2。 但是观察到移动语句S2必将移动语句S1,因此V2可以说是在VI的基础上移动语句S2生成 的,故简化图中存在一条从VI指向V2的有向边。
[0030]聚类完成之后,将依照原始的简化依赖图重新构建这些选出来的简化程序之间的 依赖关系,生成依赖图,该依赖图中仅保留选择的代表简化程序。
[0031] 本发明步骤(1-3)中,针对任意一个简化程序,通过如下方法计算参数影响向量和 渲染代价:
[0032] 获取该简化程序在顶点着色器和像素着色器中的标量指令量和顶点着色器和像 素着色器的接口所需的浮点数数量和每一个输入参数的取值对渲染程序中相应计算结果 的影响值,并根据标量指令量估算简化程序的渲染代价。
[0033] 顶点着色器和像素着色器的接口所需的浮点数数量实际上也是光栅化阶段所需 光栅化的浮点数数量。顶点着色器和像素着色器中的标量指令量和顶点着色器和像素着色 器的接口所需的浮点数数量均采用论文"A system for rapid,automatic shader level-of-detail"中公开的方法获取。
[0034] 针对任意一个简化程序,根据如下公式计算渲染代价:
[0035] Ctotal=ffvCv+fffCf+ffaNa,
[0036] 其中,Cv,Cf分别为在顶点着色器和像素着色器的标量指令量的数量,Na为像素着 色器的接口所需的浮点数,C v、Cf分别为在顶点着色器和像素着色器中的标量指令量的数 量,Na为像素着色器的接口所需的浮点数数量,W v,Wf分别为顶点着色器和像素着色器中的 标量指令量的计算的权重,1为像素着色器的接口所需的浮点数的权重。
[0037] 本发明中Wv,Wf,Wa分别为各个绘制阶段计算的权重,其赋值范围分别为0.2~2.0, 0 · 8~20,10~400。优选的Wv,Wf,Wa的取值分别为0 · 2,10,200。
[0038]第k个输入参数对渲染程序中计算结果的影响值取根据如下公式计算:
[0039] qk = Ef w;r/(fe),
[0040] 其中,N为应用到第k个输入参数对应的简化规则总数,
[0041] i是指与第k个输入参数相关的第i个表达式或语句,
[0042] 为定义在第k个参数对第i个表达式或语句上的影响,
[0043] Wi为第i个表达式或语句的标量数量。
[0044] 对于不同的简化规则,其造成的参数影响的权重也是不一样的。本发明中将代码 删除设为1,代码移动设为〇. 1。因为曲面细分总是基于代码移动生成出来的,将其设置为代 码移动的权重除以细分出的三角形顶点个数。参数影响向量是将所有参数的影响值组合为 向量,向量的维数等于输入变量的个数。
[0045] 所述步骤(1-4)通过如下方法从所有的简化程序中选择若干个作为代表简化程序 时:
[0046] (S1-41)按照简化程序的渲染代价将所有简化程序划分为N组;
[0047] (S1-42)针对每一组,利用K-means聚类将每一组聚成Μ类,聚类时使用的距离函数 为两个简化程序的参数影响向量的点积;
[0048] (S1-43)针对每类根据距离函数选取离类中心最近的简化程序为代表。
[0049] N为10~100,根据简化程序的个数设定,越大相应的N较大,Μ为5~50。
[0050] 步骤(2)中需要监测场景参数是否变化,当剧烈变化发生时(如场景载入,摄像机 转向,或者渲染的像素量改变超过20%),需要重启新一轮优化,否则此轮优化正常进行。同 时为保证一轮优化过程中输入数据的一致性,需要对场景输入参数进行缓存。监测和缓存 的间隔默认设置为200ms。
[0051] 在每轮优化过程中的第一次循环采用如下方法进行搜索:
[0052] 从原始渲染程序出发,根据依赖图的联通性,在原始渲染程序的L邻域范围内的选 择代价(即渲染代价)小的K个代表渲染程序作为候选渲染程序。
[0053]此次搜索时渲染代价根据采用步骤(1-3)中的方法计算得到,针对前已经计算过 渲染代价的代表渲染程序,由于在整个优化过程中会对数据进行缓存,因此可以根据缓存 结果直接获取。
[0054]选择渲染代价时,若存在并列(并列定义:若两个代价的差值不超过二者均值的 10%~50%,则认为二者并列)则从中依次选择与根节点最邻近的代表简化程序作为候选 简化程序。进一步,若出现若干个完全相等且与原始渲染程序的步长相同的,此时从中则随 机选择K个。
[0055] L邻域范围为在依赖图中与原始渲染程序的步长在L步之内的代表渲染程序,L的 取值范围为2~6,优选L为4。
[0056]在第一轮循环中已经求解若干个代表渲染程序(即已经求解得到对应的渲染代价 和绘制误差),在这些已经求解的基础上可以预测其他代表渲染程序的渲染代价和绘制误 差,因此,在第一轮循环,可以通过预测绘制误差和渲染代价进行搜索。
[0057]在每轮优化过程中的第一次循环之后的所有循环中外采用如下方法进行搜索: [0058]首先,根据第一次循环得到的若干已知代表渲染程序预测剩余代表渲染程序的渲 染代价和绘制误差,然后,在根据预测结果依据帕累托法则选择K个代表渲染程序作为候选 渲染程序。
[0059] 依照以下公式预测代表渲染程序的渲染代价Ctotal:
[0060] Ctotal = NvCvtv+NpCptp+Nata, (1)
[0061] Nv,NP,Na分别指顶点数,绘制模型更新的像素数(即已绘制区域内的像素个数,由 DirectX API查询得来),以及渲染管线中需要读取的总共需要读取的标量的数量,
[0062] CV,CP分别指顶点着色器和像素着色器执行的指令数,
[0063] tv,tP,ta分别指的优化过程中的渲染程序在顶点处理阶段、像素处理阶段和光栅 化阶段所耗费的单位时间。
[0064] 单位时间是在线优化时按照公式(1)拟合出来的,拟合时的参数包括:初始值分别 为1.0,1.2,1200;若干组已知量(公式(1)中所有除t v,tP,ta外的所有参数),若干组已知量 由上一次循环中的步骤(2-2)获取。
[0065] 通过如下公式预测第j个代表简化程序的绘制误差
[0066]
[0067] I」表示第j个代表简化程序在简化依赖图中对应的节点的父节点总数,
[0068] 化5%分别为第j个和第ik个父节点对应的代表简化程序的参数影响向量,
[0069] AjJlj表示第ik个父节点对应的代表渲染程序的绘制误差。
[0070] 对于第ik个父节点对应的代表渲染程序的绘制误差^匕根据如下公式计算得到:
[0071]
[0072]其中,eP为第ik个父节点的一个已知的子节点对应的代表渲染程序的绘制误差,qP 分别为第p个代表简化程序的参数影响向量,qik为第p个代表简化程序对应的节点在在简 化依赖图中的第ik个父节点所对应的代表简化程序的参数影响向量,I P表示第P个代表简化 程序在简化依赖图中对应的节点的所有父节点总数。
[0073]本发明中最初的已知节点为本轮在线优化过程中第一次循环中已经求解得到对 应的渲染代价和绘制误差的节点。
[0074]在线渲染程序优化的目标是在任意渲染参数下,选择在给定质量阈值内速度最快 的渲染程序。渲染参数的变化会导致不同简化程序的渲染质量和渲染代价有变化,而在渲 染过程中,渲染参数又是不断变化的。因此在参数变化时,需要重新计算简化程序的渲染代 价和绘制质量并重新选择最优,这一动态计算的过程和渲染过程是同步的,故称之为在线 渲染程序优化。但是计算简化程序的渲染代价和绘制质量需要占用额外的GPU执行,降低整 体绘制效率,故越少的简化程序被执行,优化后的效率越高。
[0075] 实际的过程当中,为了较为准确的估算出简化程序的具体质量,采用了两种数据 驱动的模型来进行较为精确的渲染代价和绘制质量(即绘制误差)的估测,设计了一个迭代 式优化方案来在线优化渲染程序,完成对场景的监控和缓存,根据监控结果在完成预测之 后进一步中获取真实数据,然后这些真实数据反过来又将成为下一次预测的基础,以提供 更准确的预测,如此循环迭代,并依照数据做出优化决策。绘制质量的预测需要三个方面的 支持,简化依赖图,已经计算过的简化程序的绘制误差,以及各个简化程序的参数影响。
[0076] 为了计算得到eik,需要利用那些已经被计算过的简化程序,对于一个已知绘制误 差为eP的简化程序,将根据简化依赖图找到它的所有父节点,针对每个父节点,分别计算得 到它父节点的 eik,
[0077] 在完成对简化渲染程序的渲染代价和质量预估之后,需要从中选取K个合适的简 化程序进行渲染。依照我们的优化的目标,那些点都应该属于帕累托最优点,所以这些被预 估的简化程序将按照预估出来的植染代价和质量计算帕累托线(Pareto Frontier),并从 中选出此帕累托线上K个最快的,K为2~7,优选K为4。
[0078] 本发明中针对每一个后续渲染程序利用层级图计算相应的绘制误差,具体如下步 骤:
[0079] 针对当前候选渲染程序,使用开启优化监测到的场景参数,将其绘制到与绘制窗 口同样大小的纹理;
[0080] 生成这张纹理的层级图(MipMap),并使用计算着色器(Compute Shader)计算特定 层级上的纹理与原始绘制程序(即待优化的渲染程序)的L2像素误差,默认设置为5层。
[0081 ]层级图(MipMap)能够减小计算量,提高误差计算效率,进而提高优化速度。
[0082]为解决CPU与GPU执行不同步问题,每一个候选简化程序计算所得的渲染代价和绘 制误差都必须等待3~7帧之后才去获取,N为。这些数据将被储存到对应的简化节点上,并 计算出_eik和tv,tp,ta。
[0083]本发明中步骤(2-3)过程有两个标准决定是否更新基础程序:1.在所有被计算过 的简化程序中,是否存在绘制误差在误差范围内且绘制效率比现有基础程序高的简化程 序;2.此简化程序是否与现有基础程序的图像差别过大。若连续2~5次循环无法更新基础 程序,则停止优化,本发明中默认3次循环。
[0084]本发明的优化方法两部分组成,预处理阶段和在线优化阶段。在预处理阶段分析 代码指令和代码的参数影响,获取对渲染代价和绘制误差的预测并完成对简化程序的聚 类,减少了简化程序的冗余现象。此外提出了简化依赖图来表示各个简化程序之间的关系, 以便在线优化时的完成对简化程序的搜索及预测。在在线优化阶段,多次迭代来完成一次 优化。为依靠简化依赖图,使用了数据驱动的预测模型来预测简化程序的渲染代价和绘制 效率,从而减少了需要绘制的简化程序的数量,加速了优化效率。
[0085] 与现有技术相比,本发明的有益效果如下:利用参数影响和性能估计减少了简化 程序生成数量,加速预处理时间。在绘制阶段动态选择最优的简化程序,不仅实现渲染程序 与场景的解耦合,且避免离线优化的枚举参数空间问题,加速优化。且通过引入参数影响来 减少需要生成的简化程序个数,在绘制过程中进行简化程序的渲染代价和绘制质量(即绘 制误差)的计算来动态确定简化程序的质量,使简化程序的误差计算和时间测量与场景绘 制同时进行,能在当前绘制参数下真实的渲染代价和绘制误差,从而做出更准确的选择。
【具体实施方式】
[0086] 下面将结合具体实施例对本发明进行详细说明。
[0087]本实施例中在执行前,先将原始渲染程序进行语法分析,将原始渲染程序中的原 始像素着色器和原始顶点着色器转化为相应的抽象语法树。之后所有的操作均是对各个相 应的抽象语法树进行操作。本实施例中原始渲染程序由原始顶点着色器和原始像素着色器 组成。
[0088] -种植染程序的在线优化方法,包括:
[0089] (1)对原始渲染程序进行预处理,操作如下:
[0090] (1-1)依照多个渲染程序简化规则对渲染程序进行简化,生成大量简化过后的渲 染程序;
[0091] 本实施例中应用表达式删除,代码移动,曲面细分三种规则对渲染程序进行简化, 共生成75342个简化程序。
[0092] (1-2)对每个简化后的渲染程序,根据每一个简化程序使用的简化规则,计算出简 化程序之间的依赖关系;
[0093] (1-3)分析每一个简化程序的代码,得到每一个输入参数的参数影响,并估算简化 程序的渲染代价;
[0094] 对于任意一个简化程序,它的第k个参数(即输入变量)的影响按以下方式计算:
[0095]
[0096] N应用到第k个参数的简化规则总数,
[0097] i是指与k相关的第i个简化表达式或语句,
[0098] r|(X)表示的是定义在第k个参数,第i个表达式或语句上的影响,
[0099] Wi表示的是简化的变量的标量数量。
[0100] 对于不同的简化规则,其造成的参数影响的权重也是不一样的。将代码删除设为 1,代码移动设为0.1。因为曲面细分总是基于代码移动生成出来的,将其设置为代码移动的 权重除以细分出的三角形顶点个数。
[0101 ]针对任意一个简化渲染程序使用以下公式计算渲染代价Ctotei:
[0102] Ct〇tai = 0.2Cv+10Cf+200Na
[0103] Cv,Cf分别指在顶点着色器和像素着色器的计算指令条数,
[0104] Na指在光栅化阶段所需光栅化的标量数量,
[0105] (1-4)依照简化程序估算出来时间和参数影响向量,从中聚类出具有代表性的简 化程序,并依据依赖关系,生成简化依赖图;
[0106] 采用K-平均(K-means)的方案进行聚类,距离函数值使用简化程序的参数影响向 量的点积,本实施例中共划分15组,每一组选出20个。
[0107] 完成预处理阶段之后,得到根据原始渲染程序生成的简化依赖图,包含了生成的 简化程序,已经简化程序之间的依赖关系。本实施例中,最终的简化依赖图有794个简化程 序,此时为代表渲染程序。
[0108] (2)在渲染过程中,以当前绘制到窗口的程序作为基础程序,监测待绘制场景参 数,当发生剧烈变化时进行在线优化。为提高优化效率,本实施例中另外开启一个线程进行 在线优化。
[0109] 在渲染过程中,绘制到窗口的程序称之为基础程序,设定优化允许的误差值。监测 场景运动,决定是否开启新的优化,同时每隔一段时间对场景参数进行缓存;
[0110] 本实施例中,因检测到场景导入(初始化)故开始新一轮优化,并缓存当前的场景 参数。同时设置误差允许值为1.2。
[0111] 每轮在线优化过程中循环进行如下操作:
[0112] (2-1)根据简化依赖图从所有代表简化程序中选择K个作为候选简化程序:
[0113] 从简化依赖图中选择N个简化程序,根据所处的不同优化状态,拥有两种不同的选 择策略:1.初始搜索策略;2.基于绘制误差和渲染代价的预测的搜索策略。
[0114] 初始搜索适用于每轮在线优化过程中的第一轮循环时的搜索,具体如下:
[0115] 从原始渲染程序出发,根据依赖图的联通性,在原始渲染程序的L邻域范围内的选 择代价(即渲染代价)小的K个代表渲染程序作为候选渲染程序。本实施例中K = 4。
[0116] 此次搜索时渲染代价根据采用步骤(1-3)中的方法计算得到,针对前已经计算过 渲染代价的代表渲染程序,由于在整个优化过程中会对数据进行缓存,因此可以根据缓存 结果直接获取。
[0117] 选择渲染代价时,若存在并列(并列定义:若两个代价的差值不超过二者均值的 10%~50%,则认为二者并列)则从中依次选择与根节点最邻近的代表简化程序作为候选 简化程序。进一步,若出现若干个完全相等且与原始渲染程序的步长相同的,此时从中则随 机选择K个。
[0118] L邻域范围为在依赖图中与原始渲染程序的步长在L步之内的代表渲染程序,本实 施例中L = 4。
[0119] 在第一轮循环中已经求解若干个代表渲染程序(即已经求解得到对应的渲染代价 和绘制误差),在这些已经求解的基础上可以预测其他代表渲染程序的渲染代价和绘制误 差,因此,在第一轮循环之后,可以通过预测绘制误差和渲染代价进行搜索,即基于绘制误 差和渲染代价的预测的搜索策略。
[0120] 在每轮在线优化过程中在第一次循环之后的循环中外采用基于绘制误差和渲染 代价的预测的搜索策略进行搜索,具体如下:
[0121] 首先,根据第一次循环得到的若干已知代表渲染程序预测剩余代表渲染程序的渲 染代价和绘制误差,然后,在根据预测结果依据帕累托法则选择K个代表渲染程序作为候选 渲染程序。
[0122] 依照以下公式预测代表渲染程序的渲染代价Ctotal:
[0123] Ctotal = NvCvtv+NpCptp+Nata, (1)
[0124] Nv,NP,Na分别指顶点数,绘制模型更新的像素数(即已绘制区域内的像素个数,由 DirectX API查询得来),以及渲染管线中需要读取的总共需要读取的标量的数量,
[0125] CV,CP分别指顶点着色器和像素着色器执行的指令数,
[0126] tv,tP,ta分别指的优化过程中的渲染程序在顶点处理阶段、像素处理阶段和光栅 化阶段所耗费的单位时间。
[0127] 单位时间是在线优化时按照公式(1)拟合出来的,拟合时的参数包括:初始值分别 为1.0,1.2,1200;若干组已知量(公式(1)中所有除t v,tP,ta外的所有参数),若干组已知量 由上一次循环中的步骤(2-2)获取。
[0128] 通过如下公式预测第j个代表简化程序的绘制误差
[0129]
[0130] I表示第j个代表简化程序在简化依赖图上父节点的总数,
[0131 ] qj,Qik分别为第j个和第ik个代表简化程序的参数影响向量,
[0132] 6知则表示第ik个父节点对应的代表渲染程序与第j个代表简化程序之间的绘制误 差;
[0133] 为了计算得到eik,需要利用那些已经在步骤(2-2)中计算过的真实绘制误差的简 化程序(即代表简化程序),对于一个已知绘制误差为e P的简化程序,将根据简化依赖图找 到它的父节点Ip,并根据如下公式计算得到它每一个父节点对应的代表简化程序的绘制误 差 ei.k:
[0134]
[0135] 其中,eP为第ik个父节点的一个已知的子节点对应的代表渲染程序的绘制误差,qP 分别为第P个代表简化程序的参数影响向量,为第P个代表简化程序对应的节点在在简 化依赖图中的第ik个父节点所对应的代表简化程序的参数影响向量,I P表示第p个代表简化 程序在简化依赖图中对应的节点的所有父节点总数。
[0136] (2-2)在使用基础程序绘制到窗口的过程中,插入选出的K个候选简化程序的绘 制,计算并储存相应的绘制误差和渲染代价;
[0137] 在正常向窗口绘制模型时,插入选择的4个候选渲染程序的绘制,计算并收集各个 候选渲染程序的绘制误差和渲染代价。
[0138] 计算绘制误差和渲染代价时:
[0139] 针对每一个候选渲染程序,使用之前缓存的场景参数,将其绘制到与绘制窗口同 样大小的纹理;
[0140] 生成这张纹理的层级图(MipMap),并使用计算着色器(Compute Shader)计算特定 层级上的此纹理与原始绘制程序的绘制结果之间的像素误差,默认设置为5层。
[0141] 为解决CPU与GPU执行不同步问题,每一个简化程序计算所得的时间和误差都必须 等待若干帧之后才去获取。这些数据将被储存到对应的简化节点上,并计算出 eik和tv,tP, ta。通常等待3~7帧之后才获取,本实施例中等待5帧。
[0142] (2-3)针对任意一个候选简化程序:
[0143] 若满足El〈E_max且Τ1〈??,则更新基础程序结束本轮在线优化;
[0144] 否则,不更新基础程序,并进行如下操作:
[0145] 若连续L次循环都不更新基础程序,则停止本轮在线优化;
[0146] 否则,返回步骤(2-1)继续执行下一次循环;
[0147] 其中,Ε1,Τ1分别表示简化程序的绘制误差和渲染代价,E_max表示最大允许的误 差(根据需要设定),T0表示当前基础程序的渲染代价。
[0148] 本实施例中,被计算的4个简化程序存在比现有基础程序更优的选择,更新基础程 序,并继续优化,循环执行步骤(2-1)~(2-3)。在接下来的循环中,将使用基于绘制误差和 时间的预测的搜索策略选择Κ个候选渲染程序。
[0149] 以上所述仅为本发明的优选实施方式,本发明的保护范围并不仅限于上述实施方 式,凡是属于本发明原理的技术方案均属于本发明的保护范围。对于本领域的技术人员而 言,在不脱离本发明的原理的前提下进行的若干改进和润饰,这些改进和润饰也应视为本 发明的保护范围。
【主权项】
1. 一种擅染程序的在线简化方法,其特征在于,包括如下步骤: (1) 对原始擅染程序进行如下预处理: (1-1)采用不同擅染程序简化规则对原始擅染程序进行预简化得到若干个简化程序, 并计算各个简化擅染程序的擅染代价; (1-2)根据每一个简化程序使用的简化规则,确定原始擅染程序W及各个简化程序之 间的依赖关系; (1-3)计算各个简化擅染程序的参数影响向量和擅染代价,所述参数影响向量为相应 擅染程序中所有输入参数对擅染程序中计算结果的影响值组成的向量; (1-4)根据简化程序的擅染代价和参数影响向量从所有简化擅染程序,中聚类选择若 干个作为代表简化程序,并依据依赖关系,将原始擅染程序和所有代表简化程序生成简化 依赖图; (2) 在擅染过程中,W当前绘制到窗口的程序作为基础程序,监测待绘制场景参数,当 发生剧烈变化时开始新一轮在线优化,每一轮在线优化时循环进行如下操作: (2-1)根据简化依赖图从所有代表简化程序中选择K个作为候选简化程序: (2-2)在使用基础程序绘制到窗口的过程中,插入选出的K个候选简化程序的绘制,计 算并储存相应的绘制误差和擅染代价; (2-3)针对任意一个候选简化程序: 若满足EKE_max且TKTO,则更新基础程序并结束本轮在线优化; 否则,不更新基础程序,并进行如下操作: 若连续若干次循环都不更新基础程序,则停止在线优化; 否则,返回继续执行步骤(2-1); 其中,E1,T1分别表示简化程序的绘制误差和擅染代价,E_max表示最大允许的误差,TO 表示当前基础程序的擅染代价。2. 如权利要求1所述的擅染程序的在线简化方法,其特征在于,所述步骤(1-3)针对任 意一个简化程序,通过如下方法计算参数影响向量和擅染代价: 获取每一个简化程序在顶点着色器和像素着色器中的标量指令量和顶点着色器和像 素着色器的接口所需的浮点数数量和每一个输入参数的取值对擅染程序中相应计算结果 的影响值,并根据标量指令量估算简化程序的擅染代价。3. 如权利要求1所述的擅染程序的在线简化方法,其特征在于,所述步骤(1-3)针对任 意一个简化程序,根据如下公式计算擅染代价: Ctetal = WvCv+^Cf 瑚3, 其中,Cv,Cf分别为在顶点着色器和像素着色器中的标量指令量的数量,Na为像素着色 器的接口所需的浮点数数量,Wv,Wf分别为顶点着色器和像素着色器中的标量指令量的计算 的权重,Wa为像素着色器的接口所需的浮点数的权重。4. 如权利要求1所述的在线擅染程序优化方法,其特征在于,所述步骤(1-3)中第k个输 入参数对擅染程序中计算结果的影响值qk根据如下公式计算:其中,N为应用到第k个输入参数对应的简化规则总数, i是指与第k个输入参数相关的第i个表达式或语句, ri(k〇为定义在第k个参数对第i个表达式或语句上的影响, Wi为第i个表达式或语句的标量数量。5. 如权利要求1所述的擅染程序的在线简化方法,其特征在于,所述步骤(1-4)通过如 下方法从所有的简化程序中选择若干个作为代表简化程序时: (S1-41)按照简化程序的擅染代价将所有简化程序划分为N组; 间-42)针对每一组,利用K-means聚类将每一组聚成Μ类,聚类时使用的距离函数为两 个简化程序的参数影响向量的点积; (S1-43)针对每类根据距离函数选取离类中屯、最近的简化程序为代表。6. 如权利要求1所述的擅染程序的在线简化方法,其特征在于,每轮在线优化时第一次 循环中采用如下方法进行捜索: 从原始擅染程序出发,根据依赖图的联通性,在原始擅染程序的L邻域范围内的选择代 价小的Κ个代表擅染程序作为候选擅染程序。7. 如权利要求1所述的擅染程序的在线简化方法,其特征在于,每轮在线优化时第一次 循环之后的循环中外采用如下方法进行捜索: 首先,根据第一次循环得到的若干已知代表擅染程序预测剩余代表擅染程序的擅染代 价和绘制误差,然后,再根据预测结果依据帕累托法则选择Κ个代表擅染程序作为候选擅染 程序。8. 如权利要求7所述的擅染程序的在线简化方法,其特征在于,依照W下公式预测代表 擅染程序的擅染代价Ctotal: Ctotal 二 NvCvtv+NpCptp+Nata , ( 1 ) Nv,Np,Na分别指顶点数,绘制模型更新的像素数,W及擅染管线中需要读取的总共需要 读取的标量的数量, Cv,Cp分别指顶点着色器和像素着色器执行的指令数, tv, tp,ta分别指的优化过程中的擅染程序在顶点处理阶段、像素处理阶段和光栅化阶 段所耗费的单位时间。9. 如权利要求7所述的擅染程序的在线简化方法,其特征在于,通过如下公式预测第j 个代表简化程序的绘制误差ej:Ij表示第j个代表简化程序在简化依赖图中对应的节点的父节点总数, qj,qik分别为第j个和第ik个父节点对应的代表简化程序的参数影响向量,Gik则表示 第ik个父节点对应的代表擅染程序的绘制误差。
【文档编号】G06T15/00GK105976421SQ201610256550
【公开日】2016年9月28日
【申请日】2016年4月21日
【发明人】王锐, 鲍虎军, 袁亚振
【申请人】浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1