CN104537706A - 一种基于代码移动的着色器简化方法、装置及图形渲染方法 - Google Patents
一种基于代码移动的着色器简化方法、装置及图形渲染方法 Download PDFInfo
- Publication number
- CN104537706A CN104537706A CN201410541426.8A CN201410541426A CN104537706A CN 104537706 A CN104537706 A CN 104537706A CN 201410541426 A CN201410541426 A CN 201410541426A CN 104537706 A CN104537706 A CN 104537706A
- Authority
- CN
- China
- Prior art keywords
- tinter
- adjacent
- coloring device
- pixel coloring
- fragment
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种基于代码移动的着色器简化方法、装置及图形渲染方法,通过设定移动目标,提取像素着色器中与各个移动目标相关的语句作为目标片段,通过代码移动,将各个目标片段移动至原始着色器中与像素着色器相邻的着色器中,进而得到修正着色器并作为简化着色器。本发明将像素着色器中部分耗时较大的任务分配到任务相对较少的其他着色器中进行,充分利用了执行器的性能,大大提高了着色器的渲染效率和渲染的实时性。
Description
技术领域
本发明涉及图形渲染技术领域,尤其涉及一种基于代码移动的着色器简化方法、装置及图形渲染方法。
背景技术
图形渲染的主要功能是根据给定的待渲染模型,在屏幕上生成(渲染)二维图像。其中,场景物体在屏幕上的形状和位置由待渲染模型本身的几何、相机的方位和参数决定。而待渲染模型在屏幕上的外观则由待渲染模型的材质属性、光源属性、纹理和设置的光照明模型决定。图形渲染的整个流程被分成一系列的阶段,这些阶段之间是线性串联的关系,前一阶段的输出是后一阶段的输入,前一阶段没有完成,则后一阶段不会启动,这种形式称之为渲染流水线或者渲染管线。由于计算性能对于渲染的重要性,当前渲染流水线都由特制的计算机硬件——图形处理单元(GPUs)来专门进行计算。
由于图形技术水平和图形硬件的发展水平的限制,早期的图形渲染大多使用的是固定功能的渲染流水线。所谓固定功能渲染流水线就是预先将渲染管线中各个阶段的功能定义好,在渲染启动时只需要设置管线各个阶段的渲染状态,再将顶点数据送入流水线,整个渲染流程不再施加额外的干预。在这种渲染方式中,管线的功能都已经固化,故称为固定功能渲染流水线。
随着图形技术和图形硬件技术的发展,固定功能流水线已经不能满足人们对高品质画面追求。为了追求更出色的渲染效果,人们将固定管线中的一些阶段进行了改进,使之不再执行固定的功能,而可以通过用户定制的代码来控制这个阶段的操作,实现更丰富的功能。改进过后的渲染流水线称之为定制流水线,也称之为可编程流水线。
在可编程流水线中,由用户定制的代码被称为着色器(Shader)。根据渲染管线不同阶段所提供可定制功能的不同,最新的可编程流水线提供了5种着色器,根据数据渲染的流程,依次为顶点着色器(Vertex Shader)、细分着色器(Tesselation Shader,包含2种着色器,对于DirectX,细分着色器包括外壳着色器(Hull Shader)和域着色器(Domain Shader);对于OpenGL,细分着色器包括细分评估着色器和细分控制着色器)、几何着色器(Geometry Shader)和像素着色器(Fragment Shader)。以上5个着色器按照功能可分为3类。第一类着色器是顶点着色器,处理顶点信息。第二类着色器是几何处理着色器,包括几何着色器和细分着色器,用于计算并输出新的几何图元。第三类是像素着色器,其输入为插值后的几何属性并且输出为像素的颜色值。通过这些着色器,渲染流水线中不同阶段的不同硬件资源、不同硬件处理模式被暴露出来可以供用户操作与使用,从而编写具有特定计算功能的着色器程序。
由于可编程流水线所提供的可定制功能的着色器,给使用者提供了广阔的可定制功能,当前的很多应用程序如视频游戏、可视化、高真实感绘制等都依赖于高性能的着色器计算。但是,着色器程序编写的质量很大程度上依赖于程序员的经验。尽管有一些规则和工具集来处理交互式建模和着色器程序优化,整个渲染过程仍然耗时,并且也不是最高效的。因此,人们开展了一些工作进行自动的着色器优化,并且取得了很好的结果。
自动的着色器优化方法,以用户编写的着色器代码和待渲染场景为外部输入数据,通过对着色器代码使用渲染流水线硬件资源的分析与处理,实现对绘制流水线硬件资源的优化配置与调整,实现对待渲染模型渲染结果质量、渲染所需时间以及渲染过程所需显存空间的改变,从而提高图形处理单元(GPUs)的计算性能,满足用户的需要。
一般地,对于整个着色器,最耗时的渲染计算都在像素着色器部分,因此以前的方法主要的目标都在优化像素着色器的计算。Pellacini提供了一个用户可配置的着色器简化方法来进行逐像素的过程建模。程序生成一系列由原始着色器逐步简化生成的着色器。该方法通过对着色器的代码应用指定的简化规则来生成一系列的候选变种,然后评估变种与原始着色器之间度量的差来选择具有最小误差的候选变种。这种选择过程一直循环直到最后的着色器成为了常量。Sitthi-amorn使用遗传编程来自动简化渲染过程。与Pellacini类似,该算法同样计算一系列逐步简化的着色器,但考虑了更多的代码变换规则,包括代码中表达式语句中操作数与操作符的交换、语句的删除和语句的插入等,同时该方法使用遗传算法来选取更多的简化后的着色器,并且也能生成更快的和更可靠的结果。
而Nehab和Sitthi-amorn提供了一个像素重投影的方式来优化像素渲染。该方法中提供了一个缓存策略,利用实时渲染中固有的时空一致性,在高帧率的环境下,当每生成一帧时,算法将可见表面点上的指定数据存储到一个视口大小的离屏缓存里。当在后续帧中生成像素时,算法重投影像素的表面位置到上一帧中来判定该像素是否在上一帧中可见,如果可见,那么它的数据就在缓存中。如果数据在缓存中,算法就能重复使用先前缓存的变量值,而不是进行冗余的计算。否则,算法从头计算变量值,并且将其存储在缓存中以便下一帧使用。该算法不需要复杂的数据结构,也不需要CPU到GPU的数据传输。从而提高了渲染的时效性。
从信号处理的角度来看,生成一个渲染模型表面上的视觉效果就相当于该表面上的信号生成。因此,对像素着色器简化的问题应该看作是渲染流水线上多个着色器的整体优化问题,简化像素着色器的同时也优化其他着色器,从而实现更优的像素着色器简化。但是上述的这些方法,都只是仅仅生成简化的像素着色器。而没有将像素着色器的简化看作是一个渲染流水线上的整体优化问题。
发明内容
针对现有技术的不足,本发明提供了一种基于代码移动的着色器简化方法、装置及图形渲染方法。
一种基于代码移动的着色器简化方法,原始着色器包括像素着色器,包括:
(1)从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
(2)分别将每一个目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器。
步骤(1)中通过对原始着色器中的像素着色器进行语法分析,获取原始像素着色器的程序依赖图,并根据得到的程序依赖图提取像素着色器与计算该拟合目标相关的部分形成该目标片段(实际上先根据程序依赖图得到目标片段的抽象语法树,然后再转化为相应的目标片段)。像素着色器中相同的变量处于不同的位置视为不同的变量进行处理。
本发明的着色器简化方法提取像素着色器中部分代码(目标片段),通过代码移动,将像素着色器中部分耗时较大的像素着色器中的任务分配到任务相对较少的其他着色器中进行,充分利用了执行器(计算机)的性能,大大提高了着色器的渲染效率和渲染的实时性。
作为优选,所述步骤(1)中移动目标的个数为像素着色器函数中变量或表达式的个数的20%~100%。
修正着色器的个数越多,简化后得到最优简化结果的概率越大,但是计算量也会增大,具体个数可根据实际应用需求设定。一个目标片段对应一个修正着色器,本发明中得到的修正像素着色器的个数最终取决于设定的移动目标的个数。移动目标的个数为像素着色器函数中变量或表达式的个数的20%~100%。应理解为变量和表达式的总个数的20%~100%。
所述步骤(2)通过以下步骤将目标片段移动到相邻的着色器中得到修正像素着色器:
(2-1)删除像素着色器中位于目标片段中且在对应的程序点后不被使用的语句,并将当前目标片段合并到原始着色器中与像素着色器相邻的着色器中;
(2-2)根据步骤(2-1)的结果更新原始着色器,得到与当前目标片段对应的修正着色器。
移动目标片段对于相邻的着色器,是将整个目标片段合并到相邻的着色器中,但是对像素着色器本身,并不是直接删除原始着色器的像素着色器中该目标片段,而是删除在该目标片段对应的程序点之后没有被使用的部分,这样保证删除后像素着色器能够继续使用。其中,步骤(2-2)中更新原始着色器是指得到将步骤(2-1)得到处理后的像素着色器和相邻的着色器替换原始着色器中相应的部分,得到与当前目标片段对应的修正着色器。
所述步骤(2-1)包括如下步骤:
(2-11)将当前目标片段的输出变量与相邻的着色器的输出变量合并;
(2-12)针对当前目标片段的每一个输入变量,确定像素着色器中当前目标片段对应的程序点之后该输入变量是否被使用,如果未被使用,则在相邻的着色器中删除变量名与该输入变量相同的输出变量,并将相邻的着色器中该输入变量定义为局部变量;
(2-13)根据相邻的着色器的类型将当前目标片段插入到相邻的着色器中:
若与像素着色器相邻的着色器为几何着色器,则将当前目标片段添加至几何着色器中用于计算顶点的重心坐标的程序点之前的相邻位置;
若与像素着色器相邻的着色器为顶点着色器或细分着色器,则将当前目标片段插入到相邻的着色器中主函数结束前的最后一个程序点之后。
所述步骤(2-11)针对当前目标片段中的每一个输出变量,进行如下操作:
当相邻的着色器不存在变量名与该输出变量相同的输出变量时,则将该输出变量添加至相邻着色器;
当该相邻的着色器中存在变量名与该输出变量相同、但数据类型不同的输出变量时,改变当前目标片段中该输出变量的变量名,并将修改后的输出变量添加至相邻的着色器中;
否则,不操作。
且将目标片段移动至相邻的着色器之后,要考虑输入变量与输出变量的特征,保证变量之间互不干扰,对应的像素着色器和相邻的着色器的输入变量和输出变量也需要进行相应的调整,以保证得到的修正着色器能够正常完成对待渲染模型的渲染工作。且在合并时根据相邻的着色器的种类完成,充分考虑了相邻着色器的处理流程,进一步能够提高着色器的渲染效率。
所述步骤(2)中得到简化着色器后还包括对得到简化着色器进行筛选:
利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果筛选得到若干个作为最优的简化着色器。
所述的渲染结果包括渲染图像、渲染时间和渲染所需的显存空间,所述步骤(2)包括如下步骤:
(a)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量;
(b)计算各个简化着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该修正着色器的渲染结果与原始着色器的渲染结果之间的渲染误差;
(c)根据所有简化着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为最优简化着色器。
采用帕累托前端方法(即帕累托最优法)选择待最优简化着色器。即选择满足帕累托前端条件的所有修正着色器。不同情况下,满足帕累托前端条件的个数也不同,因此,最终得到待选着色器的个数并不确定。最终根据渲染任务选择一个简化着色器完成渲染,若渲染任务需要渲染质量,则可以选择渲染误差较小的修正着色器,若要求渲染速率快,则可以选择渲染时间较小的修正着色器,同理也可以选择渲染所需的显存空间小的简化着色器。当选择渲染时间较小的修正着色器作为最终着色器,能够大大提高渲染效率,降低渲染时间消耗和渲染所需的显存空间,尤其适用于帧速率高的场景的渲染应用。通过筛选,缩小选择范围,能够方便用户选择用于执行渲染任务的着色器。
本发明还提供了一种基于代码移动的图形渲染方法,渲染采用的原始着色器包括像素着色器,其特征在于,包括如下步骤:
(S1)从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
(S2)针对每一个目标片段,将当前目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器;
(S3)从简化着色器中选择一个对待渲染模型进行渲染。
该渲染方法中先对原始着色器进行简化(采用如上所述的基于代码移动的着色器简化方法进行简化),然后从简化后的着色器中选择一个进行对待渲染模型进行渲染。
本发明还提供了一种基于代码移动的着色器简化装置,待简化的原始着色器包括像素着色器,其特征在于,包括:
目标片段提取模块,用于从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
着色器生成模块,用于针对每一个目标片段,将当前目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器。
所述的筛选装置还包括筛选模块,用于利用原始着色器与各个简化着色器对待渲染模型进行渲染,并根据渲染结果选择若干个简化着色器作为最优简化着色器。
本发明还提供了一种存储有计算机程序的计算机可读存储介质,其中所述计算机程序使计算机执行:
步骤1:从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
步骤2:分别将每一个目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器。步骤3:从简化后的着色器中选择一个对待渲染模型进行渲染。
所述计算机程序还使计算机执行如下步骤:
利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果选择若干个简化着色器作为简化着色器。
本发明还提供了另一种存储有计算机程序的计算机可读存储介质,其中所述计算机程序使计算机执行:
步骤1:从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
步骤2:分别将每一个目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器;
步骤3:从简化后的着色器中选择一个对待渲染模型进行渲染。
本发明中位置特殊说明,输入变量和输出变量均包括对应的变量的变量名和数据类型。本发明中原始着色器和简化着色器(修正着色器),包括顶点着色器、几何着色器、像素着色器等均采用着色器语言(包括HLSL、GLSL、CG等)编写的源代码。为能够操作,本发明中生成的顶点着色器、细分着色器、几何着色器和像素着色器时均是先生成对应的抽象语法树,再转化为基于着色器语言的代码。
与现有技术相比,本发明的优点在于:
提取像素着色器中部分代码(目标片段),通过代码移动,将像素着色器中部分耗时较大的像素着色器中的任务分配到任务相对较少的其他着色器中进行,充分利用了执行器(计算机)的性能,大大提高了着色器的渲染效率和渲染的实时性,且该着色器简化方法可以自动完成,无需人工干预。此外,从整体上对原始着色器进行简化,进一步提高了简化效果。
附图说明
图1为本实施例的着色器简化方法的原理图。
具体实施方式
下面将结合具体实施例和附图对本发明进行详细说明。
一种基于代码移动的着色器简化方法,原始着色器包括像素着色器,本实施例的着色器简化方法的原理如图1所示,包括:
(1)从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
以所有移动目标作为移动目标集合,分别对应于变量1~变量r,以及表达式1~表达式m。移动目标的个数为像素着色器函数中的变量或表达式个数的20%~100%(本实施例中为80%)。步骤(1)中通过对原始着色器中的像素着色器进行语法分析,获取原始像素着色器的程序依赖图,并根据得到的程序依赖图提取像素着色器与计算该拟合目标相关的部分形成该目标片段(实际上先得到目标片段的抽象语法树,然后再转化为目标片段)。
(2)分别将每一个目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为相应的简化着色器。本实施例中通过以下步骤将目标片段移动到相邻的着色器中得到修正像素着色器:
(2-1)删除像素着色器中与目标片段对应,且在对应的程序点后不被使用的语句,即得到修正像素着色器,并将当前目标片段合并到与原始着色器中与像素着色器相邻的着色器中,即得到修正后的相邻着色器,具体如下:
(2-11)将当前目标片段的输出变量与相邻的着色器的输出变量合并:
当相邻的着色器不存在变量名与该输出变量相同的输出变量时,则将该输出变量添加至相邻着色器;
当该相邻的着色器中存在变量名与该输出变量相同,但数据类型不同的输出变量时,改变当前目标片段中该输出变量的变量名,并将修改后的输出变量添加至相邻的着色器中;
否则,不操作。
(2-12)针对当前目标片段的每一个输入变量,确定像素着色器中当前目标片段对应的程序点之后,该输入变量是否继续使用,如果未继续使用,则在相邻的着色器中删除变量名与该输入变量相同的输出变量,并将相邻的着色器中该输入变量定义为局部变量;
(2-13)根据相邻的着色器的类型将当前目标片段插入到相邻的着色器中:
若与像素着色器相邻的着色器为几何着色器,则将当前目标片段添加至几何着色器中用于计算顶点的重心坐标的程序点之前的相邻位置。
若与像素着色器相邻的着色器为顶点着色器或域着色器,则将当前目标片段插入到相邻的着色器中主函数结束前的最后一个程序点之后。
本实施例中相邻的着色器为顶点着色器,因此将修正后的相邻的着色器为修正顶点着色器。不同的目标片段对应得到不同的修正像素着色器和修正顶点着色器。分别记为修正像素着色器1~修正像素着色器k,修正顶点着色器1~和修正顶点着色器k,k=2,3,……K。K为目标变量的个数,即像素着色器的函数总变量与表达式总个数的80%。
(2-2)根据步骤(2-1)的结果更新原始着色器,即利用得到的修正像素着色器和修正顶点着色器替换原始着色器中的对应部分,得到与当前目标片段对应的修正着色器,并作为相应的简化着色器。本实施例中不同目标片段对应的修正着色器记为修正着色器1~修正着色器k。
本实施例的着色器简化方法经步骤(2)得到简化后的着色器后还包括对得到简化着色器进行筛选:
利用原始着色器与各个简化着色器(此处指各个修正渲染程序)对待渲染模型进行渲染得到相应的渲染结果,原始着色器渲染结果记为渲染结果0,简化着色器的记为渲染结果1~渲染结果k。在渲染流水线中使用各个着色器进行渲染,首先将待渲染模型和相应的着色器输入到渲染流水线中,渲染过程中,待渲染模型作为相应的着色器的输入,输入到着色器中。
根据渲染结果筛选得到若干个作为最终的简化着色器,其中渲染结果包括渲染图像、渲染时间和渲染所需的显存空间,具体如下:
(a)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量;
(b)计算各个修正着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该修正着色器的渲染结果与原始着色器的渲染结果之间的渲染误差;
(c)根据所有修正着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个修正着色器作为简化着色器。
本实施例中以原始着色器对待渲染模型进行渲染时的时间为0.05毫秒,简化后着色器中渲染时间最短为0.005毫秒,渲染所需的显存空间最小为1MB,渲染误差最小为0。
基于以上简化方法得到的简化着色器,根据需要选择一个对待渲染模型进行渲染。
本实施例的着色器简化方法,通过基于代码移动的着色器简化装置实现,该着色器简化装置包括:
目标片段提取模块,用于从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
着色器生成模块,用于针对每一个目标片段,将当前目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正像素着色器,并作为相应的简化着色;
筛选模块用于利用原始着色器与各个修正着色器对待渲染模型进行渲染,并根据渲染结果选择若干个修正着色器作为简化着色器。
本实施例中原始着色器和最终得到的简化着色器等均采用着色器语言编写,在简化过程中,基于着色器语言编写的着色器不能直接操作,需要转化为相应的抽象语法树,通过对抽象语法树进行操作(实际操作对应为抽象语法树的各个节点,可以执行移动、复制、删除、添加等操作),对像素着色器完成所有操作后,再转化为着色器语言,进而完成对着色器的操作。如步骤(2)中移动目标片段时,先将目标片段转化为抽象语法树,并将原始着色器中的每个部分转化为对应的抽象语法树,删除像素着色器中目标片段的相应部分时,在该像素着色器对应的抽象语法树中删除相应的节点,删除完成后再转化为基于相应的着色器语言的像素着色器。同样,合并至相邻的着色器中,也需要通过抽象语法树完成。
本申请实施例的各模块或各步骤可以用通用的计算装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。因此,本申请实施例不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种基于代码移动的着色器简化方法,原始着色器包括像素着色器,其特征在于,包括:
(1)从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
(2)分别将每一个目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器。
2.如权利要求1所述的基于代码移动的着色器简化方法,其特征在于,所述步骤(1)中移动目标的个数为像素着色器函数中变量或表达式的个数的20%~100%。
3.如权利要求1所述的基于代码移动的着色器简化方法,所述步骤(2)通过以下步骤将目标片段移动到相邻的着色器中得到修正像素着色器:
(2-1)删除像素着色器中位于目标片段中且在对应的程序点后不被使用的语句,并将当前目标片段合并到原始着色器中与像素着色器相邻的着色器中;
(2-2)根据步骤(2-1)的结果更新原始着色器,得到与当前目标片段对应的修正着色器。
4.如权利要求3所述的基于代码移动的着色器的简化方法,其特征在于,所述步骤(2-1)包括如下步骤:
(2-11)将当前目标片段的输出变量与相邻的着色器的输出变量合并;
(2-12)针对当前目标片段的每一个输入变量,确定像素着色器中当前目标片段对应的程序点之后该输入变量是否被使用,如果未被使用,则在相邻的着色器中删除变量名与该输入变量相同的输出变量,并将相邻的着色器中该输入变量定义为局部变量;
(2-13)根据相邻的着色器的类型将当前目标片段插入到相邻的着色器中:
若与像素着色器相邻的着色器为几何着色器,则将当前目标片段添加至几何着色器中用于计算顶点的重心坐标的程序点之前的相邻位置;
若与像素着色器相邻的着色器为顶点着色器或细分着色器,则将当前目标片段插入到相邻的着色器中主函数结束前的最后一个程序点之后。
5.如权利要求4所述的基于代码移动的着色器简化方法,其特征在于,所述步骤(2-11)针对当前目标片段中的每一个输出变量,进行如下操作:
当相邻的着色器不存在变量名与该输出变量相同的输出变量时,则将该输出变量添加至相邻着色器;
当该相邻的着色器中存在变量名与该输出变量相同、但数据类型不同的输出变量时,改变当前目标片段中该输出变量的变量名,并将修改后的输出变量添加至相邻的着色器中;
否则,不操作。
6.如权利要求1~5中任意一项权利要求所述的基于代码移动的着色器简化方法,其特征在于,所述步骤(2)中得到简化着色器后还包括对得到简化着色器进行筛选:
利用原始着色器与各个简化着色器对待渲染模型进行渲染,根据渲染结果筛选得到若干个作为最优的简化着色器。
7.如权利要求6所述的基于代码移动的着色器简化方法,其特征在于,所述的渲染结果包括渲染图像、渲染时间和渲染所需的显存空间,所述步骤(2)包括如下步骤:
(a)将每一个渲染图像中所有像素点的颜色值按行或列排列成向量;
(b)计算各个简化着色器对应的向量与由原始着色器对应的向量之间的欧几里得距离,作为该修正着色器的渲染结果与原始着色器的渲染结果之间的渲染误差;
(c)根据所有简化着色器的渲染结果对应的渲染误差、渲染时间和渲染所需的显存空间,采用帕累托前端方法选择若干个简化着色器作为最优的简化着色器。
8.一种基于代码移动的图形渲染方法,渲染采用的原始着色器包括像素着色器,其特征在于,包括如下步骤:
(S1)从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
(S2)针对每一个目标片段,将当前目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器;
(S3)从简化着色器中选择一个对待渲染模型进行渲染。
9.一种基于代码移动的着色器简化装置,待简化的原始着色器包括像素着色器,其特征在于,包括:
目标片段提取模块,用于从像素着色器的函数中选择若干个变量或表达式作为移动目标,根据各个移动目标对应的程序点提取与计算当前移动目标相关的语句作为对应的目标片段;
着色器生成模块,用于针对每一个目标片段,将当前目标片段移动到原始着色器中与像素着色器相邻的着色器中,得到相应的修正着色器,并作为简化着色器。
10.如权利要求9所述的基于代码移动的着色器简化装置,其特征在于,还包括筛选模块,所述的筛选模块用于利用原始着色器与各个简化着色器对待渲染模型进行渲染,并根据渲染结果选择若干个简化着色器作为最优简化着色器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410541426.8A CN104537706B (zh) | 2014-07-31 | 2014-10-14 | 一种基于代码移动的着色器简化方法、装置及图形渲染方法 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2014103746339 | 2014-07-31 | ||
CN201410374633 | 2014-07-31 | ||
CN201410541426.8A CN104537706B (zh) | 2014-07-31 | 2014-10-14 | 一种基于代码移动的着色器简化方法、装置及图形渲染方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104537706A true CN104537706A (zh) | 2015-04-22 |
CN104537706B CN104537706B (zh) | 2017-05-10 |
Family
ID=52853225
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410541426.8A Active CN104537706B (zh) | 2014-07-31 | 2014-10-14 | 一种基于代码移动的着色器简化方法、装置及图形渲染方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104537706B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107133909A (zh) * | 2017-03-30 | 2017-09-05 | 北京奇艺世纪科技有限公司 | 一种着色器重组的方法及装置 |
WO2017181837A1 (zh) * | 2016-04-21 | 2017-10-26 | 浙江大学 | 一种渲染程序的在线优化方法 |
CN107949867A (zh) * | 2015-10-12 | 2018-04-20 | 宝马股份公司 | 用于渲染数据的方法、计算机程序产品、显示单元和车辆 |
CN112258412A (zh) * | 2020-10-22 | 2021-01-22 | 浙江大学 | 基于定义域和值域的卷积近似的着色器自动滤波方法、装置和系统 |
CN112258411A (zh) * | 2020-10-22 | 2021-01-22 | 浙江大学 | 基于定义域和值域的函数近似的着色器自动滤波方法、装置和系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040221280A1 (en) * | 2003-04-22 | 2004-11-04 | Bolton Ian Graham | Partial dead code elimination optimizations for program code conversion |
CN1702692A (zh) * | 2004-05-03 | 2005-11-30 | 微软公司 | 提供增强的图形流水线的系统和方法 |
-
2014
- 2014-10-14 CN CN201410541426.8A patent/CN104537706B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040221280A1 (en) * | 2003-04-22 | 2004-11-04 | Bolton Ian Graham | Partial dead code elimination optimizations for program code conversion |
CN1702692A (zh) * | 2004-05-03 | 2005-11-30 | 微软公司 | 提供增强的图形流水线的系统和方法 |
Non-Patent Citations (3)
Title |
---|
TAKATOSHI IKEDA等: "A code motion technique for accelerating general-purpose computation on the GPU", 《PARALLEL AND DISTRIBUTED PROCESSING SYMPOSIUM, 2006. IPDPS 2006. 20TH INTERNATIONAL》 * |
XIJUN SONG等: "An Adaptive Method for Shader Simplification", 《VIRTUAL REALITY AND VISUALIZATION (ICVRV), 2011 INTERNATIONAL CONFERENCE ON》 * |
陈月华等: "实时渲染应用程序中着色器的管理和控制", 《哈尔滨工业大学学报》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107949867A (zh) * | 2015-10-12 | 2018-04-20 | 宝马股份公司 | 用于渲染数据的方法、计算机程序产品、显示单元和车辆 |
WO2017181837A1 (zh) * | 2016-04-21 | 2017-10-26 | 浙江大学 | 一种渲染程序的在线优化方法 |
CN107133909A (zh) * | 2017-03-30 | 2017-09-05 | 北京奇艺世纪科技有限公司 | 一种着色器重组的方法及装置 |
CN107133909B (zh) * | 2017-03-30 | 2020-09-25 | 北京奇艺世纪科技有限公司 | 一种着色器重组的方法及装置 |
CN112258412A (zh) * | 2020-10-22 | 2021-01-22 | 浙江大学 | 基于定义域和值域的卷积近似的着色器自动滤波方法、装置和系统 |
CN112258411A (zh) * | 2020-10-22 | 2021-01-22 | 浙江大学 | 基于定义域和值域的函数近似的着色器自动滤波方法、装置和系统 |
CN112258412B (zh) * | 2020-10-22 | 2021-07-13 | 浙江大学 | 基于定义域和值域的卷积近似的着色器自动滤波方法、装置和系统 |
CN112258411B (zh) * | 2020-10-22 | 2021-07-13 | 浙江大学 | 基于定义域和值域的函数近似的着色器自动滤波方法、装置和系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104537706B (zh) | 2017-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104167015B (zh) | 一种基于表面信号拟合的着色器简化方法、装置及图形渲染方法 | |
CN111340928B (zh) | 一种结合光线跟踪的Web端实时混合渲染方法、装置及计算机设备 | |
EP3308359B1 (en) | Rendering using ray tracing to generate a visibility stream | |
CN105787865A (zh) | 基于游戏引擎和gpu并行处理的分形图生成与渲染方法 | |
US11676325B2 (en) | Layered, object space, programmable and asynchronous surface property generation system | |
CN104616327B (zh) | 一种基于曲面细分的着色器简化方法、装置及图形渲染方法 | |
US7773087B2 (en) | Dynamically configuring and selecting multiple ray tracing intersection methods | |
US10607400B2 (en) | Graphics processing systems using a vertex shader to render plural images | |
CN104537706A (zh) | 一种基于代码移动的着色器简化方法、装置及图形渲染方法 | |
US9684997B2 (en) | Efficient rendering of volumetric elements | |
CN104183008A (zh) | 一种基于表面信号拟合和曲面细分的着色器简化方法、装置及图形渲染方法 | |
US20120236000A1 (en) | Dynamic shader generation | |
EP3012737A1 (en) | Devices and methods for generating elementary geometries | |
US20100179788A1 (en) | System and method for hybrid solid and surface modeling for computer-aided design environments | |
WO2018113502A1 (zh) | 一种自动生成网格与着色器多层次细节的方法 | |
Schäfer et al. | State of the Art Report on Real-time Rendering with Hardware Tessellation. | |
JP2022019748A (ja) | 複合現実において動的仮想コンテンツを生成するデバイスおよび方法 | |
Hu et al. | Parallel view-dependent level-of-detail control | |
CN114820906A (zh) | 图像渲染方法、装置、电子设备及存储介质 | |
CN102142152A (zh) | 用于在计算机屏幕上显示对象的方法、装置和程序 | |
CN117280387A (zh) | 用于光线和路径追踪的位移微网格 | |
JP2017199354A (ja) | 3dシーンのグローバル・イルミネーションの描画 | |
CN111091620A (zh) | 基于图形学的地图动态路网处理方法及系统、计算机设备 | |
Krishnamurthy et al. | Optimized GPU evaluation of arbitrary degree NURBS curves and surfaces | |
Schäfer et al. | Dynamic feature-adaptive subdivision |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |