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

文档序号:6622162阅读:652来源:国知局
一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法
【专利摘要】本发明公开了一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法,本发明中基于表面信号拟合生成用于计算原始像素着色器中的变量和表达式在待渲染模型中相应的图元上的取值的拟合器,并将形成的拟合器插入到原始像素着色器中,替代对相应的变量或表达式的取值计算,从而简化原始像素着色器的计算,得到简化着色器。与原始着色器比较,简化着色器的像素着色器中的部分变量或表达式采用拟合器计算,原始的代码计算变量或表达式,可能需要大量的计算,甚至几百个指令,而利用拟合器计算时只需使用有限个乘法和加法即可计算得到,降低了像素着色器的计算量,大大提高了渲染效率,缩短了渲染时间。
【专利说明】一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法

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

【背景技术】
[0002]图形渲染的主要功能是根据给定的待渲染模型,在屏幕上生成(渲染)二维图像。其中,场景物体在屏幕上的形状和位置由待渲染模型本身的几何、相机的方位和参数决定。而待渲染模型在屏幕上的外观则由待渲染模型的材质属性、光源属性、纹理和设置的光照明模型决定。图形渲染的整个流程被分成一系列的阶段,这些阶段之间是线性串联的关系,前一阶段的输出是后一阶段的输入,前一阶段没有完成,则后一阶段不会启动,这种形式称之为渲染流水线或者渲染管线。由于计算性能对于渲染的重要性,当前渲染流水线都由特制的计算机硬件——图形处理单元(GPUs)来专门进行计算。
[0003]由于图形技术水平和图形硬件的发展水平的限制,早期的图形渲染大多使用的是固定功能的渲染流水线。所谓固定功能渲染流水线就是预先将渲染管线中各个阶段的功能定义好,在渲染启动时只需要设置管线各个阶段的渲染状态,再将顶点数据送入流水线,整个渲染流程不再施加额外的干预。在这种渲染方式中,管线的功能都已经固化,故称为固定功能渲染流水线。
[0004]随着图形技术和图形硬件技术的发展,固定功能流水线已经不能满足人们对高品质画面追求。为了追求更出色的渲染效果,人们将固定管线中的一些阶段进行了改进,使之不再执行固定的功能,而可以通过用户定制的代码来控制这个阶段的操作,实现更丰富的功能。改进过后的渲染流水线称之为定制流水线,也称之为可编程流水线。
[0005]在可编程流水线中,由用户定制的代码被称为着色器(Shader)。根据渲染管线不同阶段所提供可定制功能的不同,最新的可编程流水线提供了 5种着色器,根据数据渲染的流程,依次为顶点着色器(Vertex Shader)、细分着色器(Tesselat1n Shader,包含2种着色器,对于DirectX,细分着色器包括外壳着色器(Hull Shader)和域着色器(DomainShader);对于OpenGL,细分着色器包括细分评估着色器和细分控制着色器)、几何着色器(Geometry Shader)和像素着色器(Fragment Shader)。以上5个着色器按照功能可分为3类。第一类着色器是顶点着色器,处理顶点信息。第二类着色器是几何处理着色器,包括几何着色器和细分着色器,用于计算并输出新的几何图元。第三类是像素着色器,其输入为插值后的几何属性并且输出为像素的颜色值。通过这些着色器,渲染流水线中不同阶段的不同硬件资源、不同硬件处理模式被暴露出来可以供用户操作与使用,从而编写具有特定计算功能的着色器程序。
[0006]由于可编程流水线所提供的可定制功能的着色器,给使用者提供了广阔的可定制功能,当前的很多应用程序如视频游戏、可视化、高真实感绘制等都依赖于高性能的着色器计算。但是,着色器程序编写的质量很大程度上依赖于程序员的经验。尽管有一些规则和工具集来处理交互式建模和着色器程序优化,整个渲染过程仍然耗时,并且也不是最高效的。因此,人们开展了一些工作进行自动的着色器优化,并且取得了很好的结果。
[0007]自动的着色器优化方法,以用户编写的着色器代码和待渲染场景为外部输入数据,通过对着色器代码使用渲染流水线硬件资源的分析与处理,实现对绘制流水线硬件资源的优化配置与调整,实现对待渲染模型渲染结果质量、渲染所需时间以及渲染过程所需显存空间的改变,从而提高图形处理单元(GPUs)的计算性能,满足用户的需要。
[0008]一般地,对于整个着色器,最耗时的渲染计算都在像素着色器部分,因此以前的方法主要的目标都在优化像素着色器的计算。Pellacini提供了一个用户可配置的着色器简化方法来进行逐像素的过程建模。程序生成一系列由原始着色器逐步简化生成的着色器。该方法通过对着色器的代码应用指定的简化规则来生成一系列的候选变种,然后评估变种与原始着色器之间度量的差来选择具有最小误差的候选变种。这种选择过程一直循环直到最后的着色器成为了常量。Sitth1-amorn使用遗传编程来自动简化渲染过程。与Pellacini类似,该算法同样计算一系列逐步简化的着色器,但考虑了更多的代码变换规贝U,包括代码中表达式语句中操作数与操作符的交换、语句的删除和语句的插入等,同时该方法使用遗传算法来选取更多的简化后的着色器,并且也能生成更快的和更可靠的结果。
[0009]而Nehab和Sitth1-amorn提供了一个像素重投影的方式来优化像素渲染。该方法中提供了一个缓存策略,利用实时渲染中固有的时空一致性,在高帧率的环境下,当每生成一帧时,算法将可见表面点上的指定数据存储到一个视口大小的离屏缓存里。当在后续帧中生成像素时,算法重投影像素的表面位置到上一帧中来判定该像素是否在上一帧中可见,如果可见,那么它的数据就在缓存中。如果数据在缓存中,算法就能重复使用先前缓存的变量值,而不是进行冗余的计算。否则,算法从头计算变量值,并且将其存储在缓存中以便下一帧使用。该算法不需要复杂的数据结构,也不需要CPU到GPU的数据传输。从而提高了渲染的时效性。
[0010]从信号处理的角度来看,生成一个渲染模型表面上的视觉效果就相当于该表面上的信号生成。因此,对像素着色器简化的问题应该看作是渲染流水线上多个着色器的整体优化问题,简化像素着色器的同时也优化其他着色器,从而实现更优的像素着色器简化。但是上述的这些方法,都只是仅仅生成简化的像素着色器。而没有将像素着色器的简化看作是一个渲染流水线上的整体优化问题。


【发明内容】

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

【专利附图】

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

【具体实施方式】
[0070]下面将结合具体实施例和附图对本发明进行详细说明。
[0071]本实施例的基于表面信号拟合的像素着色器简化方法,包括:
[0072]从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成相应的拟合器,所述的拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值;
[0073]从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器。
[0074]一种基于表面信号拟合的着色器简化方法,待简化的原始着色器包括原始顶点着色器和原始像素着色器,该着色器简化方法的原理如图1所示,包括:
[0075](I)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,分别为以所有拟合目标作为拟合目标集合,分别对应于变量I?变量r,以及表达式I?表达式m。针对每一个拟合目标,分别生成相应的拟合器,该拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值,具体如下:
[0076](1-1)在待渲染模型中的每个图元上利用抖动采样法设定若干个样本点(本实施例中为16个);
[0077](1-2)将原始像素着色器中当前拟合目标对应的程序点(该拟合目标所在的位置)之前,与计算当前拟合目标相关的语句作为对应的目标片段,将各个样本点的属性值作为对应的目标片段的输入,以该图元对应的所有的输出作为该拟合目标在该图元上生成的表面信号,用设定的拟合基函数对该表面信号函数进行拟合得到拟合函数;
[0078](1-3)生成拟合器,该拟合器用于根据当前像素点对应的图元的重心坐标,利用所述的拟合函数计算当前拟合目标在对应的图元上的取值,对应的细分图元为当前像素点在待渲染模型中所在的图元。
[0079]步骤(1-2)中通过对原始像素着色器进行语法分析,获取原始像素着色器的程序依赖图,并根据得到的程序依赖图提取像素着色器与计算该拟合目标相关的部分形成该目标片段(实际上向得到目标片段的抽象语法树,然后再转化为目标片段)。
[0080]本实施例中拟合时采用最小二乘法,拟合基函数为拟合贝塞尔三角曲面函数,得到的拟合函数为具有控制顶点的贝塞尔三角曲面函数。此时,拟合器根据以下公式:
[0081]val-
[0082]计算当前拟合目标在对应的细分图元上的取值val,其中,(s,t)为当前像素点所在的细分图元的重心坐标,是关于(s,t)的贝塞尔二元三角多项式(即贝塞尔三角曲面基函数),Cpijl为拟合函数的控制顶点控制点值,其中η为贝塞尔二元三角多项式的阶数(η = 2),本发明中采用二阶贝塞尔二元三角多项式,1、j、I为求和的下标,取值范围为O到η。
[0083]本实施例中拟合目标的个数为原始像素着色中的函数的所有变量。不同的拟合目标对应得到不同的拟合器,分别记为拟合器I?拟合器P,P等于拟合目标的个数。
[0084]本实施例中当前像素点指待渲染模型中当前处理的像素点,样本点的属性值是根据样本点的重心坐标对该样本点所在图元的顶点的各个属性值进行光栅化插值得到。
[0085](2)从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器;
[0086]选择的拟合器不同的拟合器得到的修正像素着色器不同,根据排列组合选择不同的个数的拟合器或个数相同但对应于不同拟合目标的拟合器去替原始像素着色器中的相应内容,进而得到不同的修正像素着色器。本实施例中得到500个修正像素着色器。
[0087]步骤(2)基于抽象语法树实现,先将原始像素着色器和拟合器转化为抽象语法树,然后再将拟合器中的节点复制到原始像素着色器中的相应位置,并根据删除原始像素着色器中仅用于计算该拟合目标的节点全部删除,完成后再将得到的抽象语法树转化为着色器语言,即得到修正像素着色器。
[0088](3)根据原始顶点着色器生成几何着色器,并添加至原始着色器中,并分别用各个修正像素着色器替换原始像素着色器,得到相应的修正着色器,并以各个修正着色器作为简化着色器。
[0089]本实施例中通过如下步骤生成几何着色器:
[0090](3-1)以原始顶点着色器的输出变量作为输入变量,以原始顶点着色器的输出变量,以及图元各个顶点的重心坐标和图元的索引号作为输出变量,初始化一个空的几何着色器;
[0091](3-2)向步骤(I)得到的几何着色器添加主函数,该主函数用于将输入变量的值赋值给相应的输出变量,并对图元的各个顶点的重心坐标和图元的索引号进行赋值。
[0092]原始像素着色器的输入变量通常包括几何着色器当前处理的图元的各个细分顶点的属性值。对于几何着色器,硬件中的固定函数根据待渲染模型计算得到图元的各个顶点的重心坐标,几何着色器根据该重心坐标计算得到当前处理的图元的索引号。计算完成后,几何着色器重新对图元的顶点的重心坐标值进行赋值给相应的输出变量,并输出。通常重新赋值为基本坐标值,如若细分图元为三角形,则赋值分别为(0,0,1)、(0,1,0)和(1,0,O)。
[0093]具体实现时需要先将原始顶点着色器转化为抽象语法树,并初始一个空的几何着色器对应的抽象语法树,然后将原始顶点着色对应的抽象语法树中对应于原始顶点着色器的输出变量的节点复制到初始化得到的顶点着色器对应的抽象语法树中作为输入变量对应的节点,并添加用于表示图元中各个顶点的重心坐标和图元索引号的输出变量对应的节点。继续向该抽象语法树中添加主函数对应的节点。添加完成后再将得到的抽象语法树转化为着色器语言,即得到相应的几何着色器。
[0094]本实施例中步骤(3)得到修正着色器中未被用于计算修正像素着色器的输出变量的输入变量和输出变量删除。
[0095]本实施例的着色器简化方法在得到简化着色器后还利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果对简化着色器进行筛选得到若干个作为最优简化着色器。通过如下步骤筛选:
[0096](a)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量;
[0097](b)计算各个简化着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该简化着色器的渲染结果与原始着色器的渲染结果之间的渲染误差;
[0098](c)根据所有简化着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为最优简化着色器。
[0099]本实施例中将得到几何着色器、修正像素着色器分别记为几何着色器I?几何着色器k,修正像素着色器I?修正像素着色器k。对一个得到的修正着色器对应的渲染结果即为渲染结果I?渲染结果k。原始着色器的渲染结果记为原始渲染结果。
[0100]本实施例中渲染在渲染流水线中使用各个着色器进行,首先将待渲染模型和相应的着色器输入到渲染流水线中,渲染过程中,待渲染模型作为相应的着色器的输入,输入到着色器中。
[0101]本实施例的渲染结果包括渲染图像、渲染时间和渲染所需的显存空间。本实施例中以原始着色器对待渲染模型进行渲染时的时间为0.05毫秒,简化后着色器中渲染时间最短为0.005毫秒,渲染所需的显存空间最小为1MB,渲染误差最小为O。
[0102]基于以上简化方法得到的简化着色器,根据需要选择一个对待渲染模型进行渲染。
[0103]本实施例的着色器简化方法,通过基于表面信号拟合和曲面细分的着色器简化装置实现,该着色器简化装置包括:
[0104]信号拟合模块,用于从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成相应的拟合器,所述的拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值;
[0105]像素着色器修正模块,用于从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器;
[0106]着色器生成模块,用于根据原始顶点着色器生成几何着色器,并添加至原始着色器中,并分别用各个修正像素着色器替换原始像素着色器,得到相应的修正着色器,并以各个修正着色器作为简化着色器;
[0107]筛选模块,所述的筛选模块用于利用原始着色器与各个修正着色器对待渲染模型进行渲染,并根据渲染结果选择若干个修正着色器作为简化着色器。
[0108]本实施例中原始着色器和最终得到的简化着色器等均采用着色器语言编写,在简化过程中,基于着色器语言编写的着色器不能直接操作,需要转化为相应的抽象语法树,通过对抽象语法树进行操作(实际操作对应为抽象语法树的各个节点,可以执行移动、复制、删除、添加等操作),对像素着色器完成所有操作后,再转化为着色器语言,进而完成对着色器的操作。
[0109]本申请实施例的各模块或各步骤可以用通用的计算装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。因此,本申请实施例不限制于任何特定的硬件和软件结合。
[0110]以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种基于表面信号拟合的着色器简化方法,待简化的原始着色器包括原始顶点着色器和原始像素着色器,其特征在于,包括: (1)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成相应的拟合器,所述的拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值; (2)从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器; (3)根据原始顶点着色器生成几何着色器,并添加至原始着色器中,分别用各个修正像素着色器替换原始像素着色器,得到相应的修正着色器,并以各个修正着色器作为简化着色器。
2.如权利要求1所述的基于表面信号拟合的着色器简化方法,其特征在于,所述步骤(I)包括如下步骤: (1-1)在待渲染模型中的每个图元上设定若干个样本点; (1-2)将原始像素着色器中当前拟合目标对应的程序点之前,与计算当前拟合目标相关的语句作为对应的目标片段,将各个样本点的属性值作为对应的目标片段的输入,以该图元对应的所有的输出作为该拟合目标在该图元上生成的表面信号,用设定的拟合基函数对该表面信号函数进行拟合得到拟合函数; (1-3)生成拟合器,所述的拟合器用于根据当前像素点对应的图元的重心坐标,利用所述的拟合函数计算当前拟合目标在对应的图元上的取值,对应的细分图元为当前像素点在待渲染模型中所在的图元。
3.如权利要求2所述的基于表面信号拟合的着色器简化方法,其特征在于,所述的拟合目标的个数为原始像素着色中的变量与表达式的个数的20?100%。
4.如权利要求2所述的基于表面信号拟合的着色器简化方法,其特征在于,所述步骤(I)采用最小二乘法进行拟合,采用的拟合基函数为贝塞尔曲面函数。
5.如权利要求1所述的基于表面信号拟合的着色器简化方法,其特征在于,所述步骤(3)中通过如下步骤生成几何着色器: (3-1)以原始顶点着色器的输出变量作为输入变量,以原始顶点着色器的输出变量,以及图元各个顶点的重心坐标和图元的索引号作为输出变量,初始化一个空的几何着色器; (3-2)向步骤(I)得到的几何着色器添加主函数,所述的主函数用于将输入变量的值赋值给相应的输出变量,并对图元的各个顶点的重心坐标和图元的索引号进行赋值。
6.如权利要求1?5中任意一项权利要求所述的基于表面信号拟合的着色器简化方法,其特征在于,所述步骤(3)中得到简化着色器后还包括对得到简化着色器进行筛选: 利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果筛选得到若干个作为最终的简化着色器。
7.如权利要求6所述的基于表面信号拟合的着色器简化方法,其特征在于,所述的渲染结果包括渲染图像、渲染时间和渲染所需的显存空间,通过如下步骤筛选: (a)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量; (b)计算各个简化着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该简化着色器的渲染结果与原始着色器的渲染结果之间的渲染误差; (C)根据所有简化着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为最优简化着色器。
8.一种基于表面信号拟合的图形渲染方法,渲染采用的原始着色器包括原始顶点着色器和原始像素着色器,其特征在于,包括如下步骤: (51)从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成相应的拟合器,所述的拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值; (52)从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器; (53)根据原始顶点着色器生成几何着色器,并添加至原始着色器中,并分别用各个修正像素着色器替换原始像素着色器,得到相应的修正着色器,并以各个修正着色器作为简化着色器; (54)从简化后的着色器中选择一个对待渲染模型进行渲染。
9.一种基于表面信号拟合的着色器简化装置,待简化的原始着色器包括原始顶点着色器和原始像素着色器,其特征在于,包括: 信号拟合模块,用于从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成相应的拟合器,所述的拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值; 像素着色器修正模块,用于从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器; 着色器生成模块,用于根据原始顶点着色器生成几何着色器,并添加至原始着色器中,并分别用各个修正像素着色器替换原始像素着色器,得到相应的修正着色器,并以各个修正着色器作为简化着色器。
10.如权利要求9所述的基于表面信号拟合的着色器简化装置,其特征在于,还包括筛选模块,所述的筛选模块用于利用原始着色器与各个简化着色器对待渲染模型进行渲染,并根据渲染结果选择若干个简化着色器作为最优简化着色器。
11.一种基于表面信号拟合的像素着色器简化方法,其特征在于,包括: 从原始像素着色器的函数中选择若干个变量或表达式作为拟合目标,针对每一个拟合目标,分别生成相应的拟合器,所述的拟合器用于对该拟合目标在待渲染模型中对应的图元上生成的表面信号进行拟合,并根据拟合结果计算该拟合目标在对应图元上的取值; 从所有拟合器中选择若干个替换原始像素着色器中对应的变量或表达式得到修正像素着色器。
【文档编号】G06T15/10GK104167015SQ201410374691
【公开日】2014年11月26日 申请日期:2014年7月31日 优先权日:2014年7月31日
【发明者】王锐, 鲍虎军, 杨先津, 袁亚振 申请人:浙江大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1