一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法

文档序号:6622094阅读:642来源:国知局
一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法
【专利摘要】本发明公开了一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法,利用于曲面细分法在原始着色器中插入细分着色器和几何着色器,对待渲染模型进行细分,并采用表面信号拟合法生成用于计算原始像素着色器中的变量和表达式在细分模型中相应的细分图元上的取值的拟合器,并将形成的拟合器插入到原始像素着色器中,替代对相应的变量或表达式的取值计算,从而简化原始像素着色器的计算,加快计算时间。进一步,由于插入了细分着色器和几何着色器,可以在细分图元上进行拟合计算,从而提高拟合精度,减少由简化着色器带来的渲染误差。
【专利说明】一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法

【技术领域】
[0001]本发明涉及图形渲染【技术领域】,尤其涉及一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法。

【背景技术】
[0002]着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。这极大的提高了图像的画质。最新的GPU流水线提供了 5个着色器,着色器自顶向下依次为顶点着色器(Vertex Shader)、外壳着色器(Hull Shader)、域着色器(Domain Shader)、几何着色器(Geometry Shader)和像素着色器(Fragment Shader)。所有的着色器按功能可以分为3类。第一类着色器是顶点着色器,处理顶点信息,将顶点的空间位置投影在屏幕上,即计算顶点的二维坐标。第二类着色器是几何处理着色器,包括外壳着色器、域着色器和几何着色器,他们计算并输出新的几何图元。第三类是像素着色器,其输入为插值后的几何属性,输出为像素的颜色值。所有的着色器都是完全可编程的,并且允许灵活的实时渲染效果的定制。
[0003]但是,着色器的计算速度很大程度上依赖于程序员的经验。尽管有一些规则和工具集来处理交互式建模和着色器程序优化,整个渲染过程仍然耗时。一般地,最耗时的渲染计算都在像素着色器部分,因此以前的方法主要的目标都在优化像素着色器的计算。Pellacini提供了一个用户可配置的着色器简化方法来进行逐像素的过程建模。程序生成一系列由原始着色器逐步简化生成的着色器。该方法通过对着色器的代码应用指定的简化规则来生成一系列的候选变种,然后评估变种与原始着色器之间度量的差来选择具有最小误差的候选变种。这种选择过程一直循环直到最后的着色器成为了常量。Sitth1-amorn使用遗传编程来自动简化渲染过程。与Pellacini类似,该算法同样计算一系列逐步简化的着色器,但考虑了更多的代码变换规则,包括代码中表达式语句中操作数与操作符的交换、语句的删除和语句的插入等,同时该方法使用遗传算法来选取更多的简化后的着色器,并且也能生成更快的和更可靠的结果。
[0004]Pellacini的方法受限于很少的代码转换规则,会漏掉很多的优化结果。虽然Sitth1-amorn的方法增加了更多的代码转换规则,但是该方法仅仅只是对像素着色器的表达式简化,并没有考虑到整个的渲染流程。
[0005]从信号处理的角度来看,生成一个表面上的视觉效果就相当于表面上的信号生成,建模和重构。在渲染中,图形学能广泛地表示许多类型的信号:颜色,纹理映射,凹凸纹理,置换贴图,双向纹理函数,预计算的渲染和自传输纹理,等等。为了表示或近似表面的光照信号,主要有两种不同的方法。一个是调整表面使其适应信号,或者采样一个细粒度的网格然后简化网格来更好的表示给定的信号。另外一个使用基函数来表达这些信号,比如高阶的多项式函数,无网格的稀疏径向基函数,或者数据分解的基函数。因为着色器输入的限制,网格的重组近似对于着色器的优化来说显得不切实际。我们提出了一个使用高阶的多项式函数来近似着色器生成的图元上的表面信号,这个近似方法在图形学中有广泛的使用。


【发明内容】

[0006]针对现有技术的不足,本发明提供了一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法。
[0007]—种基于表面信号拟合和曲面细分的着色器简化方法,待简化的原始着色器包括原始顶点着色器和原始像素着色器,包括:
[0008](I)设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型;
[0009](2)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值;
[0010](3)根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
[0011]本发明中为得到拟合器,先对待渲染模型进行细分,从而利用细分得到的细分模型,采用表面信号拟合法计算原始像素着色器中的变量和表达式在细分模型中相应的细分图元上的取值。实际上得到的细分模型中各个细分图元上的均有各自的图元索引号,且图元索引号在细分过程中按照设定的细分参数和细分函数已经确定:是利用细分后细分图元的各个细分顶点在相应原始图元上的重心坐标进行编号,编号结果即为该细分图元在细分模型中的图元索引号。具体编号方法为:选择原始图元的一个顶点为坐标原点,从坐标原点出发,按照由外层向内层、每一层内部顺时针的遍历顺序遍历细分图元,并对图元根据遍历顺序依次编号。在形成拟合器时针对各个目标变量或目标表达式,以该像素着色器当前所处理的像素点所对应的细分图元的索引号去索引该细分图元的拟合函数,利用索引得到的拟合函数计算目标变量或表达式在该细分图元上的取值。
[0012]本发明的着色器简化方法中基于曲面细分法在原始着色器中插入细分着色器和几何着色器,对待渲染模型进行细分,并采用表面信号拟合法生成用于计算原始像素着色器中的变量和表达式在细分模型中相应的细分图元上的取值的拟合器,并将形成的拟合器插入到原始像素着色器中,替代对相应的变量或表达式的取值计算,从而简化原始像素着色器的计算,加快计算时间。进一步,由于插入了细分着色器和几何着色器,可以在细分图元上进行拟合计算,从而提高拟合精度,减少由简化着色器带来的渲染误差。
[0013]本发明中得到的修正着色器的个数与步骤(I)中设定的细分参数的组数拟合器的个数、以及步骤(3)中选择用于替换的拟合器的个数和组合方式有关。一个拟合目标在一个细分模型上对应一个拟合器,针对每一个细分模型,形成修正像素着色器时,可以选择不同的拟合目标对应的拟合器以及数量不同的拟合器,从而得到不同的修正像素着色器。修正着色器的个数越多,简化后得到最优简化结果的概率越大,但是计算量也会增大,具体个数可根据实际应用需求设定,本发明得到的修正着色器的个数为200?10000个。
[0014]每组细分参数包括:每个图元内部细分的层数、每个图元在每层细分时每条边的细分数目与细分步长。基于以上细分参数可以完成对待渲染模型的细分。如果三角形设置3个组边长细分参数(即每条边的细分数目与细分步长),四边形设置4组边长细分参数。
[0015]所述步骤(I)中通过图形硬件流水线中固定细分函数的计算方法按照每一组细分参数对待渲染模型进行细分。
[0016]可以采用多种办法对待渲染模型细分,直接利用图形硬件流水线中固定细分函数形成相应的细分函数细分,也可以利用图形硬件流水线中固定细分函数形成具有细分功能的着色器完成细分。作为优选,所述步骤(I)针对每一组细分参数形成相应的第一着色器对待渲染模型进行细分,所述的第一着色器通过如下步骤生成:
[0017](1-1)以顶点的属性值和顶点索引号作为输入变量和输出变量生成第一顶点着色器,所述的第一顶点着色器用于将各个输入变量的值赋值给相应的输出变量;
[0018](1-2)针对任意一组细分参数,根据当前组细分参数生成第一细分着色器,所述的细分着色器用于根据第一顶点着色器输出的顶点的属性值和顶点索引号,通过图形硬件流水线中固定细分函数的计算方法按照当前组细分参数对待渲染模型进行细分,并根据细分结果输出细分顶点的属性值,以及各个细分顶点所在的原始图元的所有顶点的顶点索引号和各个顶点在该原始图元上的重心坐标;
[0019](1-3)生成第一几何着色器,所述的第一几何着色器用于接收第一细分着色器的输出,并根据接收到的数据输出当前处理的细分图元的所有细分顶点的属性值、所有细分顶点所在的原始图元的所有顶点的顶点索引号和在该原始图元上的重心坐标、以及该细分图元所在的原始图元的细分索引号,所述的细分索引号为第一几何着色器根据各个细分顶点在该原始图元上的重心坐标计算得到;还用于对该细分图元的所有细分顶点在对应细分图元上的重心坐标赋值并输出;
[0020](1-4)分别将每一个第一细分着色器与第一顶点着色器、第一几何着色器和原始像素着色器组合得到相应的第一着色器,利用各个第一着色器渲染待渲染模型,将渲染过程中各个第一着色器中的第一几何着色器的输出作为相应的细分模型。
[0021]所述步骤(2)包括如下步骤:
[0022](2-1)在当前细分模型中的每个细分图元上设定若干个样本点;
[0023](2-2)将原始像素着色器中当前拟合目标对应的程序点之前,与计算当前拟合目标相关的语句作为对应的目标片段,将各个样本点的属性值作为对应的目标片段的输入,针对当前细分模型中任意一个细分图元上所有样本点对应的输出,以该细分图元对应的所有的输出作为该拟合目标在细分图元上生成的表面信号,用设定的拟合基函数对该表面信号函数进行拟合得到拟合函数;
[0024](2-3)生成拟合器,所述的拟合器用于根据当前像素点对应的细分图元的重心坐标,利用所述的拟合函数计算当前拟合目标在对应的细分图元上的取值,对应的细分图元为当前像素点在细分模型中所在的细分图元。
[0025]当前变量对应的程序点指该变量在原始像素着色器所处的位置,变量名相同的变量,在原始像素着色器中不同的位置处时应该作为不同的变量处理。步骤(2-3)中的当前像素点指像素着色器当前处理的像素点,该步骤中将得到每个细分图元上的拟合函数进行存储,并利用细分图元的图元索引号去索引该细分图元上的拟合函数。
[0026]步骤(2-1)中在每个细分图元上通过抖动采样法获取若干个样本点,样本点的个数可根据图元大小确定,通常可设为15?32个。各个样本点的属性值根据样本点的重心坐标分别对待渲染模型该样本点所在图元的顶点的属性值进行光栅化插值得到。
[0027]步骤(2-2)中通过对原始像素着色器进行语法分析,获取原始像素着色器的程序依赖图,并根据得到的程序依赖图提取像素着色器与计算该拟合目标相关的部分形成该目标片段(实际上向得到目标片段的抽象语法树,然后再转化为目标片段)。
[0028]目标变量或目标表达式的个数过小,不能达到有效的简化效果。因此,作为优选,所述的拟合目标的个数为原始像素着色中的变量与表达式的个数的20?100%。
[0029]所述步骤(2)采用最小二乘法进行拟合,采用的拟合基函数为贝塞尔曲面函数。
[0030]采用最小二乘法拟合,可以有效的减小计算得到的目标变量或目标表达式与实际值之间的差异,提高拟合精度。以贝塞尔曲面函数作为拟合基函数时,得到的拟合函数实际为包含控制顶点的贝塞尔曲面函数。利用该拟合函数计算时,将当前像素点在对应细分图元上的重心坐标代入即可得到,其中当前像素点对应的细分图元上的重心坐标从几何着色器获取。
[0031]所述步骤(3)中通过如下步骤生成顶点着色器:
[0032](al)分别以原始顶点着色器的输入变量和输出变量作为输入变量和输出变量,初始化一个空的顶点着色器;
[0033](a2)向步骤(al)处理后的顶点着色器添加主函数,所述的主函数用于将输入变量的值赋值给相应的输出变量。
[0034]通过以上步骤生成的顶点着色器用于接收当前处理的顶点的属性值,并将接收到的数据输出,所述的顶点的属性值的个数和数据类型与原始顶点着色器接收到的顶点的属性值的个数和数据类型相同。本发明令生成的顶点着色器的输入变量和输出变量与原始顶点着色器的输入变量和输出变量相同(包括输入变量和输出变量的个数和数据类型相同),能够使顶点着色器的输入与原始顶点着色器的输入能够通用。
[0035]对于DirectX,所述的细分着色器包括外壳着色器和域着色器,通过如下步骤生成细分着色器:
[0036](bl)以原始顶点着色器的输出变量作为输入变量与输出变量,初始化一个空的外壳着色器;
[0037](b2)设置该外壳着色器中的细分参数为相应细分模型对应的一组细分参数;
[0038](b3)在空的外壳着色器中插入主函数,所述的主函数用于将输入变量赋值给相应的输出变量;
[0039](b4)以外壳着色器的输出变量作为输入变量,以原始像素着色器的输入变量以及细分图元的细分顶点在对应的原始图元上的重心坐标为输出变量,初始化一个域着色器;
[0040](b5)在域着色器中插入主函数,所述的主函数用于将输入变量赋值给相应的输出变量;
[0041](b6)将原始顶点着色器的主函数插入到域着色器的主函数中;
[0042]对于OpenGL,所述的细分着色器包括细分评估着色器和细分控制着色器,通过步骤(bl)和(b6)生成,所不同的是生成是细分评估着色器和细分控制着色器。
[0043]细分着色器相当于设定细分参数,并根据设定的细分参数对待渲染模型进行细分,将进一步将细分后得到的细分顶点的进行处理(主要为位置变换)。对于域着色器而言,细分图元的细分顶点在对应的原始图元上的重心坐标由硬件计算得到,硬件流水线中固定细分函数的计算细分图元的方法计算细分图元的细分顶点,并将计算的结果输入通过固有的输入结构输入到域着色器。其中,域着色器中对应原始像素着色器的输入变量的输出变量,输出的实际上细分顶点的属性值,由硬件输入(硬件对待渲染模型细分的同时会计算得到的细分顶点的属性值)。
[0044]所述步骤(3)中通过如下步骤生成几何着色器:
[0045](Cl)以所述细分着色器的输出变量为输入变量,以原始像素着色器的输入变量以及该细分图元在细分模型中的图元索引号作为输出变量,初始化一个空的几何着色器;
[0046](c2)向步骤(Cl)处理后的几何着色器添加主函数,所述的主函数用于将输入变量的值赋值给相应的输出变量,还用于根据各个细分顶点计算在对应原始图元上的重心坐标值计算该细分图元在原始图元上的细分位置,并利用所述细分位置计算该细分图元在细分模型中的图元索引号,并将计算结果赋值给相应的输出变量,还用于对表示细分图元各个顶点在该细分图元上的重心坐标的输出变量重新赋值。
[0047]原始像素着色器的输入变量包括几何着色器当前处理的细分图元的各个细分顶点的属性值以及各个细分顶点的重心坐标(开始为该细分顶点在对应的原始图元的重心坐标)。对于几何着色器,硬件中的固定函数根据待渲染模型和细分方式计算得到图元的各个细分顶点的在原始图元上的重心坐标并输入给几何着色器,几何着色器利用硬件输入的细分图元的细分顶点在原始图元上的重心坐标值计算得到当前处理的细分图元在原始图元上的位置,根据细分图元在细分模型中的图元索引号索引该细分图元,拟合器以索引方式得到该细分图元,根据该图元索引号,能够快速的找到该细分图元上使用的拟合函数,进而计算对应的拟合目标在该细分图元上的取值。计算得到细分图元的图元索引号之后,几何着色器还需要对表示细分图元的重心坐标的输出变量重新赋值作为各个细分顶点在当前处理的细分图元上的重心坐标。本发明中对各个细分顶点的重心坐标赋的值为基本坐标值,如若细分图元为三角形,则赋值分别为(0,0,1)、(0,1,0)和(1,0,0)。
[0048]本发明中通过以上步骤生成的几何着色器用于接收细分着色器的输出,并根据接收到的数据输出当前处理的细分图元的各个细分顶点的属性值和该细分图元在细分模型中的图元索引号,以及对各个细分顶点的重心坐标重新赋值并输出,所述的细分图元在细分模型中的图元索引号由几何着色器根据各个细分顶点在对应的原始图元上的重心坐标计算得到,还用于对该图元的各个顶点在该细分图元上的重心坐标赋值并输出。
[0049]所述步骤(3)中通过如下步骤得到修正像素着色器:
[0050](dl)以几何着色器的输出变量为输入变量,原始像素着色器的输出变量为输出变量初始化一个空的像素着色器;
[0051](d2)从当前细分模型对应的所有拟合器中选择若干个拟合器作为目标拟合器,利用目标拟合器替换原始像素着色器中与各个目标拟合器的拟合目标对应的变量或表达式。
[0052]步骤(d2)以拟合器替换应理解为替换原始像素着色器中仅用于计算相应的拟合目标的所有变量和表达式。替换后还像素着色器中还应该生成相应的计算函数,并在替换后的拟合器中通过输入的细分图元在细分模型中的图元索引号,选择该像素所属细分图元上的拟合函数,利用输入的该像素点所属细分图元的重心坐标通过拟合函数计算替换后的变量或表达式的取值。
[0053]所述步骤(3)中得到修正着色器后将顶点着色器、几何着色器细分着色器以及修正像素着色器中未被用于修正像素着色器输出变量计算的输入变量和输出变量删除。
[0054]像素着色器中的部分变量和表达式通过拟合器计算后,原始像素着色器的输入变量、输出变量以及函数中仅用于计算各个拟合目标的输入变量、输出变量均不需要使用。此夕卜,对应顶点着色器、细分着色器以及几何着色器中,相应的处理过程、输入变量和输出变量需要进行适应调整,删除不必要的计算和处理变换流程,从而能够提高简化率及并降低简化后得到的着色器的内存开销。
[0055]所述步骤(3)中得到简化后的着色器后还包括对得到简化着色器进行筛选:
[0056]利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果筛选得到若干个作为最终的简化着色器。
[0057]所述步骤(3)包括如下步骤:
[0058](3-1)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量;
[0059](3-2)计算各个简化着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该修正着色器的渲染结果与原始着色器的渲染结果之间的渲染误差;
[0060](3-3)根据所有简化着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为简化着色器。
[0061]采用帕累托前端方法(帕累托最优法)筛选简化着色器即选择满足帕累托前端条件的所有修正着色器。不同情况下,满足帕累托前端条件的个数也不同,因此,最终得到待选着色器的个数并不确定。最终着色器根据渲染任务选择,若渲染任务需要渲染质量,则可以选择渲染误差较小的修正着色器,若要求渲染速率快,则可以选择渲染时间较小的修正着色器。当选择渲染时间较小的修正着色器作为最终着色器,能够大大提高渲染效率,降低渲染时间消耗和渲染所需的显存空间,尤其适用于帧速率高的场景的渲染应用。
[0062]本发明还提供了一种基于表面信号拟合和曲面细分的图形渲染方法,渲染采用的原始着色器包括原始顶点着色器和原始像素着色器,包括如下步骤:
[0063](SI)设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型;
[0064](S2)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值;
[0065](S3)根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器;
[0066](S4)从简化后的着色器中选择一个对待渲染模型进行渲染。
[0067]该渲染方法实际上是先对原始着色器进行简化(具体简化过程如上所述),然后从简化后的着色器中选择一个进行对待渲染模型进行渲染。
[0068]本发明还提供了一种基于表面信号拟合和曲面细分的着色器简化装置,待简化的原始着色器包括原始顶点着色器和原始像素着色器,包括:
[0069]细分模块,用于设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型;
[0070]信号拟合模块,用于从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值;
[0071]着色器生成模块,用于根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
[0072]所述的着色器简化装置还包括筛选模块,所述的筛选模块用于利用原始着色器与各个修正着色器对待渲染模型进行渲染,并根据渲染结果选择若干个简化着色器作为最优简化着色器。
[0073]本发明还提供了一种着色器,包括:
[0074]顶点着色器,用于接收当前处理的顶点的属性值,并将接收到的数据输出;
[0075]细分着色器,用于设定细分参数,并根据按照设定的细分参数细分后的待渲染模型,输出当前处理的细分顶点的属性值以及该细分顶点在对应的原始图元上的重心坐标;
[0076]几何着色器,用于接收细分着色器的输出,并根据接收到的数据输出当前处理的细分图元的所有细分顶点的属性值以及细分顶点在对应的细分图元上的重心坐标,还用于根据接收到的各个细分顶点在对应原始图元上的重心坐标计算并输出该细分图元在细分模型中的图元索引号,还用于对输入的图元的各个顶点在细分模型上的重心坐标赋值并输出;
[0077]像素着色器,用于根据所述几何着色器的输出计算当前处理的像素点的颜色值以渲染该像素点,在计算过程中的若干个变量或表达式在细分后的待渲染模型中相应的细分图元上的取值利用拟合器计算得到,所述的拟合器利用表面信号拟合法计算该目标变量或目标表达式在细分模型中对应的细分图元上的取值,所述的细分模型通过对待渲染模型按照与几何着色器相同的细分参数细分得到。
[0078]本发明还提供了一种存储有计算机程序的计算机可读存储介质,其中所述计算机程序使计算机执行:
[0079]步骤1:设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型;
[0080]步骤2:从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值;
[0081]步骤3:根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
[0082]所述计算机程序还使计算机执行如下步骤:
[0083]利用原始着色器与各个修正着色器对待渲染模型进行渲染,根据渲染结果选择若干个修正着色器作为简化着色器。
[0084]本发明还提供了另一种存储有计算机程序的计算机可读存储介质,其中所述计算机程序使计算机执行:
[0085]步骤1:设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型;
[0086]步骤2:从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值;
[0087]步骤3:根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
[0088]步骤4:从简化后的着色器中选择一个对待渲染模型进行渲染。
[0089]本发明中未作特殊说明,输入变量和输出变量均包括对应的变量的变量名和数据类型。本发明中原始着色器和简化后的着色器(修正着色器),包括顶点着色器、细分着色器、几何着色器、像素着色器等均采用着色器语言(包括HLSL、GLSL、CG等)编写的源代码。为能够操作,本发明中生成的顶点着色器、细分着色器、几何着色器和像素着色器时均是先生成对应的抽象语法树,再转化为基于着色器语言的代码。
[0090]与现有技术相比,本发明的优点在于:
[0091](a)通过对原始着色器进行简化得到简化后的着色器,与原始着色器比较,简化后的着色器的像素着色器中的部分(或全部)变量或表达式采用拟合器计算,原始的代码计算变量或表达式,可能需要大量的计算,甚至几百个指令,而利用拟合器计算时只需使用有限个乘法和加法即可计算得到,降低了像素着色器的计算量,大大提高了渲染效率,缩短了渲染时间;
[0092](b)插入了细分着色器和几何着色器,在渲染时对待渲染模型进行细分,提高了渲染质量;
[0093](C)首先生成若干个修正着色器,再根据渲染任务选择最终着色器,能够根据实际情况灵活选择不同的渲染方案,提高了最终着色器的适用范围;
[0094](d)能够自动完成简化,不需要人工干预。

【专利附图】

【附图说明】
[0095]图1为本实施例的着色器简化方法的原理图。

【具体实施方式】
[0096]下面将结合具体实施例和附图对本发明进行详细说明。
[0097]本实施例中待简化的原始着色器包括原始顶点着色器和原始像素着色器。一种基于表面信号拟合和曲面细分的着色器简化方法的简化原理如图1所示,包括:
[0098](I)设定若干组细分参数,通过图形硬件流水线中固定细分函数的计算方法按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型。
[0099]每组细分参数包括:每个图元内部细分的层数、每个图元在每层细分时每条边的细分数目与细分步长。对于三角形图元,则分别针对每一条边设置3个边长细分参数(细分数目与细分步长),即对应有3细分数目与细分步长。设定的细分参数的组数可根据实际应用需求调整,设定的细分参数的组数通常为4?256组(本实施例中为256组)。
[0100]本实施例中针对每一组细分参数形成相应的第一着色器,然后利用形成的第一着色器对待渲染模型进行细分,其中通过如下步骤生成第一着色器:
[0101](1-1)以顶点的属性值和顶点索引号作为输入变量和输出变量生成第一顶点着色器,该第一顶点着色器用于将各个输入变量的值赋值给相应的输出变量;
[0102](1-2)针对任意一组细分参数,根据当前组细分参数生成第一细分着色器,该细分着色器用于根据第一顶点着色器输出的顶点的属性值和顶点索引号,通过图形硬件流水线中固定细分函数的计算方法按照当前组细分参数对待渲染模型进行细分,并根据细分结果输出细分顶点的属性值,以及各个细分顶点所在的原始图元的所有顶点的顶点索引号和各个顶点在该原始图元上的重心坐标;
[0103](1-3)生成第一几何着色器,该第一几何着色器用于接收第一细分着色器的输出,并根据接收到的数据输出当前处理的细分图元的所有细分顶点的属性值、所有细分顶点所在的原始图元的所有顶点的顶点索引号和在该原始图元上的重心坐标、以及该细分图元所在的原始图元的细分索引号,细分索引号为第一几何着色器根据各个细分顶点在该原始图元上的重心坐标计算得到;还用于对该细分图元的所有细分顶点在对应细分图元上的重心坐标赋值并输出;
[0104](1-4)分别将每一个第一细分着色器与第一顶点着色器、第一几何着色器和原始像素着色器组合得到相应的第一着色器,利用各个第一着色器渲染待渲染模型,将渲染过程中各个第一着色器中的第一几何着色器的输出作为相应的细分模型。
[0105](2)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值,包括如下步骤:
[0106](2-1)在当前细分模型中的每个细分图元上设定若干个样本点(本实施例中为16个);
[0107](2-2)将原始像素着色器中当前拟合目标对应的程序点之前,与计算当前拟合目标相关的语句作为对应的目标片段,将各个样本点的属性值作为对应的目标片段的输入,针对当前细分模型中任意一个细分图元上所有样本点对应的输出,以该细分图元对应的所有的输出作为该拟合目标在细分图元上生成的表面信号,用设定的拟合基函数对该表面信号函数进行拟合得到拟合函数;
[0108](2-3)生成拟合器,该拟合器用于根据当前像素点在对应细分图元上的重心坐标,利用相应的拟合函数(即当前像素点在细分模型中所在的细分图元上对应的拟合函数)计算当前拟合目标在对应的细分图元上的取值,对应的细分图元为当前像素点在细分模型中所在的细分图元。
[0109]本实施例中拟合目标为原始像素着色中所有的变量与表达式的个数。以所有移动目标作为拟合目标集合,分别对应于变量I?变量r,以及表达式I?表达式m。每个拟合器均对应不同的拟合目标或细分模型,将得到的拟合器分别记为拟合器I?拟合器P,P的取值与拟合目标的个数和细分模型相关。
[0110]本实施例中拟合时采用最小二乘法,拟合基函数为拟合贝塞尔三角曲面函数,得到的拟合函数为具有控制顶点的贝塞尔三角曲面函数。此时,拟合器根据以下公式:
[0111]~ Σ {?/?{? B (β.(., Cps/i
[0112]计算当前拟合目标在对应的细分图元上的取值val,其中,(s,t)为当前像素点所在的细分图元的重心坐标,是关于(s,t)的贝塞尔二元三角多项式(即贝塞尔三角曲面函数),Cpijl为拟合函数的控制顶点控制点值,其中η为贝塞尔二元三角多项式的阶数(本实施例η = 2),本发明中采用二阶贝塞尔二元三角多项式,1、j、l为求和的下标,取值范围为O到η。
[0113]本实施例中拟合目标的个数为原始像素着色中的函数的所有变量。
[0114]本实施例中当前像素点指待渲染模型中当前处理的像素点。
[0115](3)根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
[0116]通过如下步骤生成顶点着色器:
[0117](al)分别以原始顶点着色器的输入变量和输出变量作为输入变量和输出变量,初始化一个空的顶点着色器;
[0118](a2)向步骤(al)处理后的顶点着色器添加主函数,所述的主函数用于将输入变量的值赋值给相应的输出变量。
[0119]本实施例的着色器基于DirectX实现,对于DirectX,细分着色器包括外壳着色器和域着色器,通过如下步骤生成细分着色器:
[0120](bl)以原始顶点着色器的输出变量作为输入变量与输出变量,初始化一个空的外壳着色器;
[0121](b2)设置该外壳着色器中的细分参数为相应细分模型对应的一组细分参数;
[0122](b3)在空的外壳着色器中插入主函数,所述的主函数用于将输入变量赋值给相应的输出变量;
[0123](b4)以外壳着色器的输出变量作为输入变量,以原始像素着色器的输入变量以及细分图元的细分顶点在对应的原始图元上的重心坐标为输出变量,初始化一个域着色器;
[0124](b5)在域着色器中插入主函数,所述的主函数用于将输入变量赋值给相应的输出变量;
[0125](b6)将原始顶点着色器的主函数插入到域着色器的主函数中。
[0126]根据原始顶点着色器,针对每一个细分模型,通过如下步骤生成几何着色器:
[0127](Cl)以细分着色器的输出变量为输入变量,以原始像素着色器的输入变量以及该细分图元在细分模型中的图元索引号作为输出变量,初始化一个空的几何着色器;
[0128](c2)向步骤(Cl)处理后的几何着色器添加主函数,该主函数用于将输入变量的值赋值给相应的输出变量,还用于根据各个细分顶点计算在对应原始图元上的重心坐标值计算该细分图元在原始图元上的细分位置,并利用细分位置计算该细分图元在细分模型中的图元索引号,并将计算结果赋值给相应的输出变量,还用于对表示细分图元各个顶点的重心坐标的输出变量重新赋值。
[0129]几何着色器的主函数通过以下步骤计算细分图元在细分模型中的图元索引号:
[0130]获得几何着色器当前处理的细分图元的重心的重心坐标P,判断其从属于哪一个区域edge_id。(将原始图元的重心与图元各个顶点相连,可以将图元分为若干个区域)。
[0131]获取该重心坐标属于细分层的那一层,设重心的中心坐标中最小的为t。则层数layer = floor(3*t*n/2);计算该重心坐标在层数layer中属于第几个图元,计算过程如下:
[0132]计算当前细分层的图元边的细分个数segment_num = η - 2*layer ;
[0133]计算在当前细分层。当前细分边的两个端点重心坐标xO,x2,每一个细分边的长度segment_length,并计算出当前重心坐标投影到细分边上的长度d,和投影点所在的细分边序号,segment_id ;
[0134]xO = (2*layer/(3*n),1-(4*layer/(3*n)),l_2*layer/(3*n) - (1-(4*layer/(3*n)));
[0135]y2 = (x0.x, x0.z, x0.y);
[0136]segment_length = 1.414/n ;
[0137]d = abs(dot ((p - xO)*(x2 - xO))/(segment_length*segment_num));
[0138]segment_id = floor (d/segment_length);
[0139]计算当前重心所作点是属于上三角性还是下三角形up_and_down
[0140]如果(P.χ-χ0.χ) >1/ (3*η)则 up_and_down = 2 ;否则 up_and_down = I。
[0141]获取在当前细分层的索引local_index = (segment_num_l) *2*edge_id+ (segment_num_l)*2+up_and_down ;
[0142]计算比当前层layer外圈的三角形个数outer_triangle。
[0143]针对每一个细分层layer_id〈layer。
[0144]此层的三角形个数为outer_triangle+ = (η - 2*layer_id_l) *2*3.
[0145]最终的三角形索引号为outer_triangle+local_index。
[0146]该主函数还用于对表示细分图元各个顶点的重心坐标的输出变量重新赋值,若细分图元为三角形,则赋值分别为(0,0,1)、(0,1,0)和(1,0,0)。
[0147]通过如下步骤得到修正像素着色器:
[0148](dl)以几何着色器的输出变量为输入变量,原始像素着色器的输出变量为输出变量初始化一个空的像素着色器;
[0149](d2)从当前细分模型对应的所有拟合器中选择若干个拟合器作为目标拟合器,利用目标拟合器替换原始像素着色器中与各个目标拟合器的拟合目标对应的变量或表达式。
[0150]本实施例中将生成的几何着色器记为几何着色器I?几何着色器k,细分着色器记为细分着色器I?细分着色器k,修正像素着色器记为修正像素着色器I?修正像素着色器k,k的取值与细分参数的组数和拟合目标的个数有关,通过将对应的各部分组合得到相应的修正着色器。
[0151]本实施例的基于表面信号拟合和曲面细分的着色器简化方法,步骤(3)中得到修正着色器后还包括如下步骤:
[0152]首先,根据该修正着色器中的修正像素着色器删除该修正像素着色器中的顶点着色器、几何着色器以及细分着色器中未被修正像素着色器使用的输入变量、输出变量以及表达式。
[0153]本实施例的着色器简化方法在得到简化着色器后还利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果对简化着色器进行筛选得到若干个作为最优简化着色器。本实施例的渲染结果包括渲染图像、渲染时间和渲染所需的显存空间。修正着色器对应的渲染结果即为渲染结果I?渲染结果k。原始着色器的渲染结果记为原始渲染结果。本实施例中渲染在渲染流水线中使用各个着色器进行,首先将待渲染模型和相应的着色器输入到渲染流水线中,渲染过程中,待渲染模型作为相应的着色器的输入,输入到着色器中。
[0154]筛选具体如下:
[0155](3-1)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量;
[0156](3-2)计算各个简化着色器(此处即为修正着色器)对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该简化着色器的渲染结果与原始着色器的渲染结果之间的渲染误差;
[0157](3-3)根据所有修正着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为简化着色器。
[0158]本实施例中以原始着色器对待渲染模型进行渲染时的时间为0.05毫秒,简化后着色器中渲染时间最短为0.005毫秒,渲染所需的显存空间最小为1MB,渲染误差最小为O。
[0159]基于以上简化方法得到的简化着色器,根据需要选择一个对待渲染模型进行渲染。
[0160]本实施例的着色器简化方法,通过基于表面信号拟合和曲面细分的着色器简化装置实现,该着色器简化装置包括:
[0161]细分模块,用于设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型;
[0162]信号拟合模块,用于从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值;
[0163]着色器生成模块,用于根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正像素着色器,并以各个修正着色器作为简化着色器;
[0164]筛选模块,用于利用原始着色器与各个修正着色器对待渲染模型进行渲染,并根据渲染结果选择若干个修正着色器作为简化着色器。
[0165]本实施例中原始着色器和最终得到的简化着色器、以及中间形成的像素着色器、细分着色、几何着色器等均采用着色器语言编写,在简化过程中,基于着色器语言编写的着色器不能直接操作,需要转化为相应的抽象语法树,通过对抽象语法树进行操作(实际操作对应为抽象语法树的各个节点,可以执行移动、复制、删除、添加等操作),对像素着色器完成所有操作后,再转化为着色器语言,进而完成对着色器的操作。下面以形成顶点着色器为例进行说明:
[0166]先将原始顶点着色器转化为抽象语法树,并初始一个空的顶点着色器对应的抽象语法树,将原始顶点着色对应的抽象语法树中对应于原始顶点着色器的输入变量和输出变量的节点复制到初始化得到的顶点着色器对应的抽象语法树中,并继续向该抽象语法树中添加主函数对应的节点。添加完成后再将得到的抽象语法树转化为着色器语言,即得到相应的顶点着色器。
[0167]本申请实施例的各模块或各步骤可以用通用的计算装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。因此,本申请实施例不限制于任何特定的硬件和软件结合。
[0168]以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种基于表面信号拟合和曲面细分的着色器简化方法,待简化的原始着色器包括原始顶点着色器和原始像素着色器,其特征在于,包括: (1)设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型; (2)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值; (3)根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
2.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,每组细分参数包括:每个图元内部细分的层数、每个图元在每层细分时每条边的细分数目与细分步长。
3.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(I)中通过图形硬件流水线中固定细分函数的计算方法按照每一组细分参数对待渲染模型进行细分。
4.如权利要求3所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(I)针对每一组细分参数形成相应的第一着色器对待渲染模型进行细分,所述的第一着色器通过如下步骤生成: (1-1)以顶点的属性值和顶点索引号作为输入变量和输出变量生成第一顶点着色器,所述的第一顶点着色器用于将各个输入变量的值赋值给相应的输出变量; (1-2)针对任意一组细分参数,根据当前组细分参数生成第一细分着色器,所述的细分着色器用于根据第一顶点着色器输出的顶点的属性值和顶点索引号,通过图形硬件流水线中固定细分函数的计算方法按照当前组细分参数对待渲染模型进行细分,并根据细分结果输出细分顶点的属性值,以及各个细分顶点所在的原始图元的所有顶点的顶点索引号和各个顶点在该原始图元上的重心坐标; (1-3)生成第一几何着色器,所述的第一几何着色器用于接收第一细分着色器的输出,并根据接收到的数据输出当前处理的细分图元的所有细分顶点的属性值、所有细分顶点所在的原始图元的所有顶点的顶点索引号和在该原始图元上的重心坐标、以及该细分图元所在的原始图元的细分索引号,所述的细分索引号为第一几何着色器根据各个细分顶点在该原始图元上的重心坐标计算得到;还用于对该细分图元的所有细分顶点在对应细分图元上的重心坐标赋值并输出; (1-4)分别将每一个第一细分着色器与第一顶点着色器、第一几何着色器和原始像素着色器组合得到相应的第一着色器,利用各个第一着色器渲染待渲染模型,将渲染过程中各个第一着色器中的第一几何着色器的输出作为相应的细分模型。
5.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(2)包括如下步骤: (2-1)在当前细分模型中的每个细分图元上设定若干个样本点; (2-2)将原始像素着色器中当前拟合目标对应的程序点之前,与计算当前拟合目标相关的语句作为对应的目标片段,将各个样本点的属性值作为对应的目标片段的输入,针对当前细分模型中任意一个细分图元上所有样本点对应的输出,以该细分图元对应的所有的输出作为该拟合目标在细分图元上生成的表面信号,用设定的拟合基函数对该表面信号函数进行拟合得到拟合函数; (2-3)生成拟合器,所述的拟合器用于根据当前像素点对应的细分图元的重心坐标,利用所述的拟合函数计算当前拟合目标在对应的细分图元上的取值,对应的细分图元为当前像素点在细分模型中所在的细分图元。
6.如权利要求5所述的基于表面信号拟合的着色器中像素着色器的简化方法,其特征在于,所述的拟合目标的个数为原始像素着色中的变量与表达式的个数的20?100%。
7.如权利要求5所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(2)采用最小二乘法进行拟合,采用的拟合基函数为贝塞尔曲面函数。
8.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(3)中通过如下步骤生成顶点着色器: (al)分别以原始顶点着色器的输入变量和输出变量作为输入变量和输出变量,初始化一个空的顶点着色器; (a2)向步骤(al)处理后的顶点着色器添加主函数,所述的主函数用于将输入变量的值赋值给相应的输出变量。
9.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,对于DirectX,所述的细分着色器包括外壳着色器和域着色器,通过如下步骤生成细分着色器: (bl)以原始顶点着色器的输出变量作为输入变量与输出变量,初始化一个空的外壳着色器; (b2)设置该外壳着色器中的细分参数为相应细分模型对应的一组细分参数; (b3)在空的外壳着色器中插入主函数,所述的主函数用于将输入变量赋值给相应的输出变量; (b4)以外壳着色器的输出变量作为输入变量,以原始像素着色器的输入变量以及细分图元的细分顶点在对应的原始图元上的重心坐标为输出变量,初始化一个域着色器; (b5)在域着色器中插入主函数,所述的主函数用于将输入变量赋值给相应的输出变量; (b6)将原始顶点着色器的主函数插入到域着色器的主函数中; 对于OpenGL,所述的细分着色器包括细分评估着色器和细分控制着色器,通过步骤(bl)和(b6)生成,所不同的是生成是细分评估着色器和细分控制着色器。
10.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(3)中通过如下步骤生成几何着色器: (Cl)以所述细分着色器的输出变量为输入变量,以原始像素着色器的输入变量以及该细分图元在细分模型中的图元索引号作为输出变量,初始化一个空的几何着色器; (c2)向步骤(cl)处理后的几何着色器添加主函数,所述的主函数用于将输入变量的值赋值给相应的输出变量,还用于根据各个细分顶点计算在对应原始图元上的重心坐标值计算该细分图元在原始图元上的细分位置,并利用所述细分位置计算该细分图元在细分模型中的图元索引号,并将计算结果赋值给相应的输出变量,还用于对表示细分图元各个顶点的重心坐标的输出变量重新赋值。
11.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(3)中通过如下步骤得到修正像素着色器: (dl)以几何着色器的输出变量为输入变量,原始像素着色器的输出变量为输出变量初始化一个空的像素着色器; (d2)从当前细分模型对应的所有拟合器中选择若干个拟合器作为目标拟合器,利用目标拟合器替换原始像素着色器中与各个目标拟合器的拟合目标对应的变量或表达式。
12.如权利要求1所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(3)中得到修正着色器后将顶点着色器、几何着色器细分着色器以及修正像素着色器中未被用于修正像素着色器输出变量计算的输入变量和输出变量删除。
13.如权利要求1?12中任意一项权利要求所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述步骤(3)中得到简化后的着色器后还包括对得到简化着色器进行筛选: 利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果筛选得到若干个作为最终的简化着色器。
14.如权利要求13所述的基于表面信号拟合和曲面细分的着色器简化方法,其特征在于,所述的渲染结果包括渲染图像、渲染时间和渲染所需的显存空间,所述步骤(3)包括如下步骤: (3-1)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量; (3-2)计算各个简化着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该修正着色器的渲染结果与原始着色器的渲染结果之间的渲染误差; (3-3)根据所有简化着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为简化着色器。
15.一种基于表面信号拟合和曲面细分的图形渲染方法,渲染采用的原始着色器包括原始顶点着色器和原始像素着色器,其特征在于,包括如下步骤: (51)设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型; (52)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值; (53)根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器; (S4)从简化后的着色器中选择一个对待渲染模型进行渲染。
16.一种基于表面信号拟合和曲面细分的着色器简化装置,待简化的原始着色器包括原始顶点着色器和原始像素着色器,其特征在于,包括: 细分模块,用于设定若干组细分参数,按照每一组细分参数对待渲染模型进行细分,得到相应的细分模型; 信号拟合模块,用于从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成与各个细分模型对应的拟合器,所述的拟合器用于对该拟合目标在当前细分模型中对应的细分图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在当前细分模型中对应的细分图元上的取值; 着色器生成模块,用于根据原始顶点着色器生成顶点着色器、几何着色器,针对任意一个细分模型,根据该细分模型对应的细分参数生成一个细分着色器,并从当前细分模型对应的所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器,并将该修正像素着色器与顶点着色器、几何着色器以及当前细分模型对应的细分着色器组合得到相应的修正着色器,并以各个修正着色器作为简化着色器。
17.如权利要求16所述的基于表面信号拟合和曲面细分的着色器简化装置,其特征在于,还包括筛选模块,所述的筛选模块用于利用原始着色器与各个修正着色器对待渲染模型进行渲染,并根据渲染结果选择若干个简化着色器作为最优简化着色器。
【文档编号】G06T15/10GK104183008SQ201410373494
【公开日】2014年12月3日 申请日期:2014年7月31日 优先权日:2014年7月31日
【发明者】王锐, 鲍虎军, 杨先津, 袁亚振 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1