CN1851753A - 一种基于状态集的Shader三维图形绘制框架和绘制方法 - Google Patents
一种基于状态集的Shader三维图形绘制框架和绘制方法 Download PDFInfo
- Publication number
- CN1851753A CN1851753A CNA2005101262163A CN200510126216A CN1851753A CN 1851753 A CN1851753 A CN 1851753A CN A2005101262163 A CNA2005101262163 A CN A2005101262163A CN 200510126216 A CN200510126216 A CN 200510126216A CN 1851753 A CN1851753 A CN 1851753A
- Authority
- CN
- China
- Prior art keywords
- array
- shader
- information
- state
- rendered object
- 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
Images
Landscapes
- Image Generation (AREA)
Abstract
一种基于状态集的Shader三维图形绘制框架和绘制方法,将绘制对象的模型信息、纹理信息、声音信息以及相应的Shader代码在被调入场景图之前被统一封装和描述在Materials Description文件中;通过场景图的数据存储结构中的Material Loader和Media Loader分别调入渲染对象中,同时按照Shader信息排序进行静态和动态优化,然后将优化后的绘制状态信息送入绘制引擎进行绘制,绘制引擎由绘制控制和状态控制构成,两者配合完成一个绘制对象的绘制过程。本发明对Vertex Shader和Pixel Shader进行了有效管理,充分利用状态集的状态封装和排序功能,在提高了绘制效率的同时,简化了接口调用,方便了程序员的开发。
Description
所属技术领域
本发明涉及一种三维图形引擎框架,特别是一种基于状态集的Shader三维图形绘制框架和绘制方法。
背景技术
随着硬件设计和工艺水平的提高,图形处理单元(Graphic ProcessingUnit,GPU)成为图形实时渲染过程中的核心角色。利用GPU可以将CPU(中央处理器)的负载转移,缓解CPU和AGP在图形渲染过程中造成的数据传输瓶颈,同时增加的可编程特性,可以对输入物体的形状、外观和运动提供可编程控制。
图形处理单元提供了两种可编程模块,通过运行特殊Shader程序完成渲染对象的逐顶点per-vertex以及逐片段per-pixel的并行运算。这些在主程序中被指定并在运行时由渲染管线自动调用。基于GPU的绘制过程首先是程序输入绘制物体的顶点、颜色和纹理等信息,这些数据将被顶点控制器程序VertexShader处理,其结果包含最新变换后的顶点进而完成图元装配和光栅化。随后,片段控制器程序Pixel Shader提供逐片断的操作,其结果将被送入帧缓存显示。这种绘制方式的高效率得益于其并行化的计算,这不仅能够提高程序实时渲染的速度,还拓展了实时渲染程序的特效内容,如高动态渲染、凹凸贴图、柔和阴影等效果。
利用GPU进行实时图形渲染计算是近年来军事仿真和电脑游戏也竞相选择的编程方式。伴随着GPU硬件的不断更新,从早期的游戏极品飞车到最新的DOOM III,甚至于利用最先进设备制作的数字电影,越来越多的逼真渲染实时计算使用了GPU这一利器。
虽然,对GPU执行的Shader程序的管理整合到现有的图形引擎有助于进一步提高绘制效率、提高渲染逼真性,但随之产生的负面影响是渲染环境状态数量的增加和切换的频繁。目前,对状态的描述和管理一般采用状态集的概念,以往有多种Shader整合方法,传统采用最多的是回调函数,如图1所示。这种方式在渲染前提供接口声明Shader程序对象和绘制状态,没有考虑到渲染对象之间在状态上的关系,不能进行状态合并,从而限制了绘制效率。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供一种基于状态集的Shader图形绘制框架和绘制方法,它对Vertex Shader和Pixel Shader进行了有效管理,充分利用状态集的状态封装和排序功能,在提高了绘制效率的同时,简化了接口调用,方便了程序员的开发。
本发明的技术解决方案:一种基于状态集的Shader三维图形绘制框架,由绘制对象描述接口文件Materials Description、场景图SceneGraph、渲染对象、绘制引擎Render Engine组成,其特征在于:
所述的Materials Description通过xml文件进行定义,对绘制对象的模型信息、纹理信息、声音信息、Shader文件或代码内容以及绘制所需状态信息进行统一封装和描述;
所述的场景图的内存存贮结构分为材质载入器Material Loader和介质载入器Media Loader两部分,Material Loader负责读取对象整体描述及绘制状态信息,同时对绘制状态信息以Shader信息排序进行静态优化,并调入渲染对象的状态集中,Media Loader负责读取顶点、纹理、音频以及Shader代码绘制对象本身的几何信息,同时建立全局交叉数组并辅以索引数组,并调入渲染对象的数据集中;
所述的渲染对象,分为状态集和数据集,状态集包括顶点描述VertexDescription和片段Pixel Description描述,在渲染过程中,状态集对绘制状态信息按照Shader信息继续排序进行动态优化,数据集对全局交叉数组和索引数组的进行更新保存;
所述的绘制引擎由绘制控制和状态控制构成,绘制控制是对渲染对象进行绘制过程中的控制,它根据渲染对象的数据集中几何信息分发给OpenGL或硬件代码进行绘制;状态控制,是对渲染对象进行绘制过程中有关绘制状态的控制,绘制控制和状态控制两者配合完成一个绘制对象的绘制过程。
所述的绘制状态信息以Shader信息排序进行静态优化绘制状态的静态优化过程为:
(1)初始化全局交叉数组,数组结构采用标准库Array模版,每单元内容为OpenGL的枚举型T2_C4_N3_V3结构;
(2)初始化全局索引数组,数组结构采用标准库Array模版,每单元内容为长整形结构;
(3)当有新的绘制对象加入场景图后,分别完成如下操作:
a.获得绘制对象的纹理、颜色、法向量、位置数组指针;
b.进行索引生成,保证每一个顶点在交叉数组中只出现一次;
c.获得绘制对象的绘制状态指针,并根据指针获得纹理以及Shader信息;
d.在全局交叉数组中搜索与该绘制对象具有相同Shader的数组部分,若发现则继续搜索与该绘制对象具有相同纹理状态的数组部分,如发现则将该顶点序列和索引序列分别存储在全局交叉数组和索引数组中,若没有对应纹理的数组,则将该顶点序列和索引序列存储在该Shader对应的最后一个数组序列之后;若没有与相同的Shader,则将该顶点序列和索引序列存储在全局的交叉数组和索引数组之后;
(4)在绘制对象中记录其索引在全局索引中的起始点和长度,完成静态优化。
所述的绘制状态信息以Shader信息排序进行动态优化过程为:
(1)初始化绘制数组以便防止绘制对象序列;
(2)依次获得每一针的所需的绘制对象;
(3)遍历绘制数组搜索相应Shader以及纹理信息的绘制状态
a.若为搜索到相似的Shader,则将该对象放入绘制数组的末端;
b.若发现相似的Shader而没有相似的纹理,则将该对象放入该Shader对应的数组的相对末端;
(4)当发现Shader和纹理均相似时开始进行动态排序:
a.按照耗时优先级比较最耗时的状态的是否有与该对象相同的,如不相同则插入相同对象的之后;
b.若相同则在相同的对象组中继续比较下一个耗时状态,如此往复,直到所有状态比较结束;
c.当最后一个状态比较仍像同,则视为两个绘制对象完全相同,进而顺序排列即可;
(5)处理下一个绘制对象,直到所有带绘制对象处理比较完毕。
采用上述基于状态集的Shader三维图形绘制方法,包括下列步骤:
(1)将绘制对象的模型信息、纹理信息、声音信息以及相应的Shader代码在被调入场景图之前被统一封装和描述在绘制对象的描述接口MaterialsDescription文件中;
(2)将上述的绘制对象信息通过场景图的数据存储结构中的MaterialLoader和Media Loader分别调入渲染对象中,其中Material Loader负责绘制对象的状态信息调入,Material Loader在将状态信息调入之前,要按照Shader信息排序进行静态优化,并调入渲染对象的状态集中;Media Loader负责读取顶点、纹理、音频以及Shader代码绘制对象本身的几何信息,同时建立全局交叉数组并辅以索引数组,并调入渲染对象的数据集中;
(3)将渲染对象分为状态集和数据集,状态集包括顶点描述VertexDescription和片段Pixel Description描述,在渲染过程中,状态集对绘制对象的状态信息按照Shader信息继续排序进行动态优化,数据集对全局交叉数组和索引数组的更新进行保存;
(4)将在渲染对象中渲染后的绘制对象送入绘制引擎进行绘制,绘制引擎由绘制控制和状态控制构成,绘制控制将获得的对象顶点、纹理、音频以及Shader代码的绘制对象本身数据信息分发给OpenGL或硬件代码进行绘制,而绘制对象的状态描述信息则交由状态控制进行绘制状态的改变,绘制控制和状态控制两者配合完成一个绘制对象的绘制过程。
本发明的原理是:一个场景图的生成过程依赖于模型文件和模型读入器,经过模型载入过程生成的场景图数据结构可能存在一些影响图形绘制效率的地方。本发明使场景图数据结构在用于绘制之前,经过一个预处理过程,发现那些影响图形绘制效率的部分,在保证绘制正确地情况下,对场景图数据结构做出调整,提高了绘制效率。
采用上述绘制引的绘制方法步骤为:
(1)将绘制对象的模型信息、纹理信息、声音信息以及相应的Shader代码在被调入场景图之前被统一封装在绘制对象的描述接口MaterialsDescription文件中,其中包括模型信息、纹理信息、声音信息以及相应得Shader代码;
(2)将上述的绘制对象信息通过场景图中设置的Material Loader和MediaLoader分别调入渲染对象中,其中Material Loader负责绘制对象的状态信息调入,Material Loader在将状态信息调入之前,要按照Shader信息排序进行静态优化,并调入渲染对象的状态集中;Media Loader负责读取顶点、纹理、音频以及Shader代码绘制对象本身的几何信息,同时建立全局交叉数组并辅以索引数组,存入渲染对象的数据集中;
(3)将渲染对象分为状态集和数据集,状态集包括顶点描述VertexDescription和片段Pixel Description描述,在渲染过程中,状态集对绘制对象的状态信息按照Shader信息继续排序进行动态优化,数据集对全局交叉数组和索引数组的更新进行保存;
(4)将在渲染对象中渲染后的绘制对象送入绘制引擎进行绘制,绘制引擎由绘制控制和状态控制构成,绘制控制将获得的对象顶点、纹理、音频以及Shader代码的绘制对象本身数据信息分发给OpenGL或硬件代码HLSL/CG/GLSL进行绘制,而绘制对象的状态描述信息则交由状态控制进行绘制状态的改变,绘制控制和状态控制两者配合完成一个绘制对象的绘制过程。
本发明与现有技术相比的有益效果为:
(1)传统的图形系统将绘制对象的模型(几何)、纹理、声音等信息分别进行读取,除人为对应之外,它们之间没有联系。对于一个复杂的绘制对象,如一架飞机,如果能将其几何、纹理、声音甚至绘制状态集合到一起,不仅可以提高完整性以及可扩展性(当一组信息有了明确的内涵,就不难扩展其外延),同时在复杂系统(同时承载上百个绘制对象)中能够更好的加以独立控制(这里的独立控制是指如个例的更改上述信息等操作)。因此,本发明提出绘制对象描述接口,它可以通过xml文件进行定义,接口对模型的几何信息(对应模型文件)、纹理信息(对应纹理贴图文件)、声音信息(对应音频文件)、硬件绘制信息(Shader文件或代码内容)以及绘制所需状态信息(如是否需要使用光照、绘制模式等)进行统一封装和描述,进而可以对文件进行扩充,如增加视频信息,控制信息等。
(2)提供对绘制对象的静一动态结合的状态优化过程,使场景进一步优化,提高了渲染效率,满足了复杂场景的实时显示。
(3)支持Shader的状态集。将Shader对象融入绘制引擎,并根据状态集的排序特点提供对Shader的排序和可扩展的继承式调用。
(4)将现有技术中的绘制引擎只为绘制控制的结构分为绘制控制和状态控制,即使绘制对象的状态集合被状态管理进行监控和管理,这样做更好的加速绘制过程和状态优化,同时也使绘制效率大大提高。
附图说明
图1为图形绘制引擎中通常的Shader调用示意图;
图2为本发明图形绘制引擎中渲染对象及相关控制数据结构示意图;
图3为本发明的Materials Description的描述示意图;
图4为本发明的Media Loader的结构示意图;
图5本发明的Material Loader结构示意图;
图6为本发明基于Shader信息排序的动态优化过程示意图;
图7为本发明的场景图中动态优化示例图;
图8为本发明的Render Engine中状态控制管理示意图;
图9为本发明实现图2绘制框架的类图。
具体实施方式
如图2所示,本发明的绘制结构分为以下几个部分,它由绘制对象描述接口文件Materials Description、场景图SceneGraph、渲染对象、绘制引擎RenderEngine组成,其中Materials Description通过xml文件进行定义,对绘制对象的模型信息,包括几何信息(对应模型文件)、纹理信息(对应纹理贴图文件)、声音信息(对应音频文件)、硬件绘制信息(Shader文件或代码内容)以及绘制所需状态信息(如是否需要使用光照、绘制模式等)进行统一封装和描述;场景图为描述虚拟场景的树状数据结构,其数据结构由组节点和叶节点组成,将其在内存中的存贮结构分为材质载入器Material Loader和介质载入器MediaLoader两部分,Material Loader负责读取对象整体描述及绘制状态信息,同时对该状态信息以Shader信息排序进行静态优化,并调入渲染对象的状态集中,Media Loader负责读取顶点、纹理、音频以及Shader代码绘制对象本身的几何信息,同时建立全局交叉数组并辅以索引数组,并调入渲染对象的数据集中,Material Loader和Media Loader形成的绘制对象位于场景图的叶节点;渲染对象,分为状态集和数据集,状态集为Material Loader的读取结果,MediaLoader为数据集的读取结果,状态集包括顶点描述Vertex Description和片段Pixel Description描述,在渲染过程中,状态集对绘制对象的状态信息按照Shader信息继续排序进行动态优化,数据集对全局交叉数组和索引数组的更新进行保存;绘制引擎Render Engine由绘制控制和状态控制构成,绘制控制是对渲染对象进行绘制过程中的控制,它根据渲染对象的数据集中的几何信息分发给OpenGL或硬件代码进行绘制,解决进行状态优化后的几何信息,如顶点数据、法向量数据、颜色数据、纹理数据等在何时(不同对象的前后顺序)以何种方式(三角形列表、条带等)送入显示卡进行绘制;状态控制,是对渲染对象进行绘制过程中有关绘制状态的控制,主要解决的是将渲染对象的相关绘制状态(如光照、材质、各种缓冲区等)送入显示卡进行设置,绘制控制和状态控制两者配合完成一个绘制对象的绘制过程。
如图3所示,本发明的Materials Description描述了绘制对象及其几何、绘制状态信息,并已XML文件的形式进行记录。XML文件形式如下:
其中,MaterialName记录该绘制对象的名称,以便系统记录并辨认;MaterialRenderState记录绘制所需的绘制状态,提供给状态管理模块使用;MaterialFiles记录了绘制对象的集合信息的文件,包含ModelFile以及TextureFile文件,在多纹理的状态下,TextureFile可以重复出现。
如图4所示,本发明的Media Loader充分采用了Plug-in的机制,可以随着资源文件类型的扩充不断丰富绘制对象的内容,其工作过程是:获取来自于Materials Description的绘制资源信息,如顶点、纹理和声音等,这些资源实现需要保存在硬盘中,随后Media Loader将根据资源文件名后缀激活Plug-in对象并由该对象完成资源读取,读取后的资源将被保存在绘制对象的数据集合中。
如图5所示,本发明的Material Loader结构类似于Media Loader,MaterialLoader的信息来源于Materials Description,它记录了绘制对象绘制过程中所需的绘制状态,如光照等,这些信息被Material Loader获取后直接保存到绘制对象的状态集合中并参与后面的状态排序。
为了加快绘制过程,本发明采用OpenGL中的交叉数组建立全局交叉数组,并且假设所有绘制对象均包含以上四种坐标(假若缺少则自动补零),将所有绘制对象的几何信息在读入时存入全局的交叉数组可以加速绘制,并辅以索引数组在交叉数组中进行索引。
不难想象,一个复杂的场景包含复杂的对象,对应的绘制状态关系复杂,而绘制过程中绘制状态的复杂严重影响硬件的绘制效率。例如,场景中包含1000架相同的飞机,每架飞机拥有两个绘制状态(如机身是一种纹理状态,而驾驶舱的玻璃是另一种透明的纹理)。理想的绘制顺序是先渲染所有机身,进而渲染所有透明的玻璃。但事与愿违,由于系统是相继的载入飞机,最初形成的渲染序列使得绘制过程为机身、玻璃、机身、玻璃……因此,状态不停切换导致绘制效率极低。所以,本发明提出了对状态信息进行优化的方案,但状态优化过程同样耗费系统时间和空间,一味追求绝对的优化对于整个渲染过程并非有利,因此必须在排序优化时间复杂度和绘制时间复杂度之间平衡,因此,本发明提出的状态优化方法在读入绘制对象时进行静态排序,进而在动态绘制过程中再次基础上进行局部的动态成化排序。
Material Loader进行Shader信息排序的静态优化过程为如图6所示:
(1)初始化全局交叉数组,数组结构采用标准库Array模版,每单元内容为OpenGL的枚举型T2_C4_N3_V3结构;
(2)初始化全局索引数组,数组结构采用标准库Array模版,每单元内容为长整形结构;
(3)当有新的绘制对象加入场景图后,分别完成如下操作:
a.获得绘制对象的纹理、颜色、法向量、位置数组指针;
b.由于绘制数组顶点可能存在重复,为了节省空间,进行索引生成,保证每一个顶点在交叉数组中只出现一次,用索引描述具体引用顺序,如顶点序列:a,a,b,a,c,d,c,e,索引后的顶点序列为a,b,c,d,e,而索引序列为0,0,1,0,2,3,2,4。
c.获得绘制对象的绘制状态指针,并根据指针获得纹理以及Shader信息;
d.在全局交叉数组中搜索与该绘制对象具有相同Shader的数组部分,若发现则继续搜索与该绘制对象具有相同纹理状态的数组部分,如发现则将该顶点序列和索引序列分别存储在全局交叉数组和索引数组中,若没有对应纹理的数组,则将该顶点序列和索引序列存储在该Shader对应的最后一个数组序列之后;若没有与相同的Shader,则将该顶点序列和索引序列存储在全局的交叉数组和索引数组之后;
(4)在绘制对象中记录其索引在全局索引中的起始点和长度,完成静态优化。
如图1所示,本发明的渲染对象中的状态集的结构采用面对对象的方式实现,其中主要成员时状态数组,记录OpenGL绘制所需的状态,同时数组的存在也保证系统可以对状态进行优化;数据集保存了绘制所需的顶点数组、纹理数组等。
如图6所示,本发明的渲染对象中状态集的基于Shader信息排序动态优化过程为:
(1)初始化绘制数组以便放置绘制对象序列;
(2)依次获得每一针的所需的绘制对象;
(3)遍历绘制数组搜索相应Shader以及纹理信息的绘制状态:
a.若为搜索到相似的Shader,则将该对象放入绘制数组的末端;
b.若发现相似的Shader而没有相似的纹理,则将该对象放入该Shader对应的数组的相对末端;
(4)当发现Shader和纹理均相似时开始进行动态排序:
a.按照耗时优先级比较最耗时的状态的是否有与该对象相同的,如不相同则插入相同对象的之后;
b.若相同则在相同的对象组中继续比较下一个耗时状态,如此往复,直到所有状态比较结束;
c.当最后一个状态比较仍像同,则视为两个绘制对象完全相同,进而顺序排列即可;
(5)处理下一个绘制对象,直到所有带绘制对象处理比较完毕;
(6)将绘制数组送入绘制引擎进行绘制。
作为绘制对象主体,顶点的几何、颜色、向量和纹理等坐标信息被保存为数组。为了加快绘制过程,本发明采用OpenGL中的交叉数组对其进行描述,并且假设所有绘制对象均包含以上四种坐标(假若缺少则自动补零)。将所有绘制对象的几何信息在读入时存入全局的交叉数组可以加速绘制,并辅以索引数组在交叉数组中进行索引。
如图7所示,一个绘制对象描述的是虚拟场景中的一个实际物体,而要描述多个实际的物体就需要场景图维护多个绘制对象。根据场景图的树形结构,各个绘制对象之间绘制状态集合元素可以进行聚合一将相似的状态向组节点进行合并,并记录在组节点的状态集中,这样做的好处是在绘制时尽量少的改变状态。图7中a图表示的是当组节点某状态属性(开、关、必开或必关)为开时,那么其子节点的变化形如b图,由于绘制对象A没有设置该状态,那么A继承G的设置,由于B与G状态相同,那么B不变,而C明确指出状态为关,则C状态不继承G。c图表示的是当组节点的属性Attrib为必开AON时,那么如d图所示,A,B同b图,而c图则继承G的属性,变为开。
如图8所示,本发明的状态控制过程示意图,状态优化过程后,绘制对象之间的状态切换已得到精简,将这些绘制对象形成数祖绘制。状态控制室对数祖中绘制对象的绘制状态变量进行控制的模块,状态变量名是OpenGL状态机的内容,这些变量的设置有StateHandler进行调用,调用语句就是OpenGL API的内容。
绘制物体是所必需指明的,如裁减面状态、Alpha测试状态、多边形模式状态、光源状态等。这些状态与图2中绘制对象的状态变量相对应,它们形成状态集合State Set,这些信息由Material Loader从文件描述中获得,提供给绘制引擎中的State Handler进行优化控制后送入硬件HW。
此外,对本发明的绘制控制过程:依次获得绘制对象,首先设置绘制状态,然后将顶点、颜色、纹理数组通过OpenGL API送入硬件完成绘制。
如图9所示,为在具体的实现中实现了图2的框架,支持Shader的绘制框架在保存了原有渲染模块的基础上实现了对其的继承和扩充。MaterialSet代表材质信息,是一个广泛的含义,其内涵是一种硬件渲染的方式,包括绘制状态集合、硬件Shader代码集合以及渲染必要的参数集合(如光源参数、纹理参数等),如凹凸贴图就可以被定义为一种MaterialSet,其包含顶点信息,凹凸纹理。IMaterial接口将场景图对MaterialSet的封装进行公开,以导入相关材质编辑器ATI的材质结果;渲染过程Render Pass是Vertex和Pixel程序对象的容器。同时,Material还提供了对于Shader参数ShaderParameters的支持。
Claims (6)
1、一种基于状态集的Shader三维图形绘制框架,由绘制对象描述接口文件Materials Description、场景图SceneGraph、渲染对象、绘制引擎RenderEngine组成,其特征在于:
所述的Materials Description通过xml文件进行定义,对绘制对象的模型信息、纹理信息、声音信息、Shader文件或代码内容以及绘制所需状态信息进行统一封装和描述;
所述的场景图的内存存贮结构分为材质载入器Material Loader和介质载入器Media Loader两部分,Material Loader负责读取对象整体描述及绘制状态信息,同时对绘制状态信息以Shader信息排序进行静态优化,并调入渲染对象的状态集中,Media Loader负责读取顶点、纹理、音频以及Shader代码绘制对象本身的几何信息,同时建立全局交叉数组并辅以索引数组,并调入渲染对象的数据集中;
所述的渲染对象,分为状态集和数据集,状态集包括顶点描述VertexDescription和片段Pixel Description描述,在渲染过程中,状态集对绘制状态信息按照Shader信息继续排序进行动态优化,数据集对全局交叉数组和索引数组的进行更新保存;
所述的绘制引擎由绘制控制和状态控制构成,绘制控制对渲染对象进行绘制过程中的控制,它根据渲染对象的数据集中几何信息分发给OpenGL或硬件代码进行绘制;状态控制对渲染对象进行绘制过程中有关绘制状态的控制,绘制控制和状态控制两者配合完成一个绘制对象的绘制过程。
2、根据权利要求1所述的基于状态集的Shader三维图形绘制框架,其特征在于:所述的绘制状态信息以Shader信息排序进行静态优化绘制状态的静态优化过程为:
(1)初始化全局交叉数组,数组结构采用标准库Array模版,每单元内容为OpenGL的枚举型T2_C4_N3_V3结构;
(2)初始化全局索引数组,数组结构采用标准库Array模版,每单元内容为长整形结构;
(3)当有新的绘制对象加入场景图后,分别完成如下操作:
a.获得绘制对象的纹理、颜色、法向量、位置数组指针;
b.进行索引生成,保证每一个顶点在交叉数组中只出现一次;
c.获得绘制对象的绘制状态指针,并根据指针获得纹理以及Shader信息;
d.在全局交叉数组中搜索与该绘制对象具有相同Shader的数组部分,若发现则继续搜索与该绘制对象具有相同纹理状态的数组部分,如发现则将该顶点序列和索引序列分别存储在全局交叉数组和索引数组中,若没有对应纹理的数组,则将该顶点序列和索引序列存储在该Shader对应的最后一个数组序列之后;若没有与相同的Shader,则将该顶点序列和索引序列存储在全局的交叉数组和索引数组之后;
(4)在绘制对象中记录其索引在全局索引中的起始点和长度,完成静态优化。
3、根据权利要求1所述的基于状态集的Shader三维图形绘制框架,其特征在于:所述的绘制状态信息以Shader信息排序进行动态优化过程为:
(1)初始化绘制数组以便防止绘制对象序列;
(2)依次获得每一针的所需的绘制对象;
(3)遍历绘制数组搜索相应Shader以及纹理信息的绘制状态
a.若为搜索到相似的Shader,则将该对象放入绘制数组的末端;
b.若发现相似的Shader而没有相似的纹理,则将该对象放入该Shader对应的数组的相对末端;
(4)当发现Shader和纹理均相似时开始进行动态排序:
a.按照耗时优先级比较最耗时的状态的是否有与该对象相同的,如不相同则插入相同对象的之后;
b.若相同则在相同的对象组中继续比较下一个耗时状态,如此往复,直到所有状态比较结束;
c.当最后一个状态比较仍像同,则视为两个绘制对象完全相同,进而顺序排列即可;
(5)处理下一个绘制对象,直到所有带绘制对象处理比较完毕。
4、采用上述绘制框架的绘制方法,其特征在于包括下列步骤:
(1)将绘制对象的模型信息、纹理信息、声音信息以及相应的Shader代码在被调入场景图之前被统一封装和描述在绘制对象的描述接口MaterialsDescription文件中;
(2)将上述的绘制对象信息通过场景图的数据存储结构中的MaterialLoader和Media Loader分别调入渲染对象中,其中Material Loader负责绘制对象的状态信息调入,Material Loader在将状态信息调入之前,要按照Shader信息排序进行静态优化,并调入渲染对象的状态集中;Media Loader负责读取顶点、纹理、音频以及Shader代码绘制对象本身的几何信息,同时建立全局交叉数组并辅以索引数组,并调入渲染对象的数据集中;
(3)将渲染对象分为状态集和数据集,状态集包括顶点描述VertexDescription和片段Pixel Description描述,在渲染过程中,状态集对绘制对象的状态信息按照Shader信息继续排序进行动态优化,数据集对全局交叉数组和索引数组的更新进行保存;
(4)将在渲染对象中渲染后的绘制对象送入绘制引擎进行绘制,绘制引擎由绘制控制和状态控制构成,绘制控制将获得的对象顶点、纹理、音频以及Shader代码的绘制对象本身数据信息分发给OpenGL或硬件代码进行绘制,而绘制对象的状态描述信息则交由状态控制进行绘制状态的改变,绘制控制和状态控制两者配合完成一个绘制对象的绘制过程。
5、根据权利要求4所述的基于状态集的Shader三维图形绘制方法,其特征在于:所述的绘制状态信息以Shader信息排序进行静态优化绘制状态的静态优化过程为:
(1)初始化全局交叉数组,数组结构采用标准库Array模版,每单元内容为OpenGL的枚举型T2_C4_N3_V3结构;
(2)初始化全局索引数组,数组结构采用标准库Array模版,每单元内容为长整形结构;
(3)当有新的绘制对象加入场景图后,分别完成如下操作:
a.获得绘制对象的纹理、颜色、法向量、位置数组指针;
b.进行索引生成,保证每一个顶点在交叉数组中只出现一次;
c.获得绘制对象的绘制状态指针,并根据指针获得纹理以及Shader信息;
d.在全局交叉数组中搜索与该绘制对象具有相同Shader的数组部分,若发现则继续搜索与该绘制对象具有相同纹理状态的数组部分,如发现则将该顶点序列和索引序列分别存储在全局交叉数组和索引数组中,若没有对应纹理的数组,则将该顶点序列和索引序列存储在该Shader对应的最后一个数组序列之后;若没有与相同的Shader,则将该顶点序列和索引序列存储在全局的交叉数组和索引数组之后;
(4)在绘制对象中记录其索引在全局索引中的起始点和长度,完成静态优化。
6、根据权利要求1所述的基于状态集的Shader三维图形绘制方法,其特征在于:所述的绘制状态信息以Shader信息排序进行动态优化过程为:
(1)初始化绘制数组以便防止绘制对象序列;
(2)依次获得每一针的所需的绘制对象;
(3)遍历绘制数组搜索相应Shader以及纹理信息的绘制状态;
a.若为搜索到相似的Shader,则将该对象放入绘制数组的末端;
b.若发现相似的Shader而没有相似的纹理,则将该对象放入该Shader对应的数组的相对末端;
(4)当发现Shader和纹理均相似时开始进行动态排序:
a.按照耗时优先级比较最耗时的状态的是否有与该对象相同的,如不相同则插入相同对象的之后;
b.若相同则在相同的对象组中继续比较下一个耗时状态,如此往复,直到所有状态比较结束;
c.当最后一个状态比较仍像同,则视为两个绘制对象完全相同,进而顺序排列即可;
(5)处理下一个绘制对象,直到所有带绘制对象处理比较完毕。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101262163A CN100388318C (zh) | 2005-11-28 | 2005-11-28 | 一种基于状态集的Shader三维图形绘制系统和绘制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2005101262163A CN100388318C (zh) | 2005-11-28 | 2005-11-28 | 一种基于状态集的Shader三维图形绘制系统和绘制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1851753A true CN1851753A (zh) | 2006-10-25 |
CN100388318C CN100388318C (zh) | 2008-05-14 |
Family
ID=37133232
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005101262163A Expired - Fee Related CN100388318C (zh) | 2005-11-28 | 2005-11-28 | 一种基于状态集的Shader三维图形绘制系统和绘制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100388318C (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100593789C (zh) * | 2007-07-11 | 2010-03-10 | 成都金山互动娱乐科技有限公司 | 一种利用3d技术提供网络游戏反外挂图像来源的方法 |
CN101819684A (zh) * | 2010-04-12 | 2010-09-01 | 长春理工大学 | 一种动画电影虚拟三维场景的空间加速结构及其创建与更新方法 |
WO2012083508A1 (zh) * | 2010-12-24 | 2012-06-28 | 中国科学院自动化研究所 | 互联网上复杂场景真实感快速绘制方法 |
CN102567000A (zh) * | 2010-12-31 | 2012-07-11 | 新奥特(北京)视频技术有限公司 | 一种支持动态参数的特技插件的方法和装置 |
CN102572299A (zh) * | 2010-12-31 | 2012-07-11 | 新奥特(北京)视频技术有限公司 | 一种统一的特技调节方法 |
CN102867284A (zh) * | 2011-07-07 | 2013-01-09 | 腾讯科技(深圳)有限公司 | 一种图形绘制引擎及其实现方法 |
CN105701854A (zh) * | 2016-01-06 | 2016-06-22 | 网易(杭州)网络有限公司 | 一种3d渲染方法、装置及引擎 |
CN102572299B (zh) * | 2010-12-31 | 2016-12-14 | 新奥特(北京)视频技术有限公司 | 一种统一的特技调节方法 |
CN106997610A (zh) * | 2016-01-26 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 一种图像渲染方法、装置及电子设备 |
CN109359224A (zh) * | 2018-10-19 | 2019-02-19 | 珠海金山网络游戏科技有限公司 | 一种材质的数据处理方法、装置、电子设备及存储介质 |
CN110533755A (zh) * | 2019-08-30 | 2019-12-03 | 腾讯科技(深圳)有限公司 | 一种场景渲染的方法以及相关装置 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853162B (zh) * | 2010-06-01 | 2013-01-09 | 电子科技大学 | 一种可编辑的网页三维几何造型渲染方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100601952B1 (ko) * | 2004-04-20 | 2006-07-14 | 삼성전자주식회사 | 3차원 그래픽 데이터의 재구성장치 및 방법 |
CN1271572C (zh) * | 2004-08-05 | 2006-08-23 | 上海交通大学 | 二维图像序列三维重建方法 |
-
2005
- 2005-11-28 CN CNB2005101262163A patent/CN100388318C/zh not_active Expired - Fee Related
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100593789C (zh) * | 2007-07-11 | 2010-03-10 | 成都金山互动娱乐科技有限公司 | 一种利用3d技术提供网络游戏反外挂图像来源的方法 |
CN101819684A (zh) * | 2010-04-12 | 2010-09-01 | 长春理工大学 | 一种动画电影虚拟三维场景的空间加速结构及其创建与更新方法 |
CN101819684B (zh) * | 2010-04-12 | 2012-06-20 | 长春理工大学 | 一种动画电影虚拟三维场景的空间加速结构及其创建与更新方法 |
US9773343B2 (en) | 2010-12-24 | 2017-09-26 | Institute Of Automation, Chinese Academy Of Sciences | Method for real-time and realistic rendering of complex scenes on internet |
WO2012083508A1 (zh) * | 2010-12-24 | 2012-06-28 | 中国科学院自动化研究所 | 互联网上复杂场景真实感快速绘制方法 |
CN103180881A (zh) * | 2010-12-24 | 2013-06-26 | 中国科学院自动化研究所 | 互联网上复杂场景真实感快速绘制方法 |
CN103180881B (zh) * | 2010-12-24 | 2016-08-03 | 中国科学院自动化研究所 | 互联网上复杂场景真实感快速绘制方法 |
CN102567000A (zh) * | 2010-12-31 | 2012-07-11 | 新奥特(北京)视频技术有限公司 | 一种支持动态参数的特技插件的方法和装置 |
CN102572299A (zh) * | 2010-12-31 | 2012-07-11 | 新奥特(北京)视频技术有限公司 | 一种统一的特技调节方法 |
CN102572299B (zh) * | 2010-12-31 | 2016-12-14 | 新奥特(北京)视频技术有限公司 | 一种统一的特技调节方法 |
CN102867284A (zh) * | 2011-07-07 | 2013-01-09 | 腾讯科技(深圳)有限公司 | 一种图形绘制引擎及其实现方法 |
CN102867284B (zh) * | 2011-07-07 | 2016-10-26 | 腾讯科技(深圳)有限公司 | 一种图形绘制引擎装置及其实现方法 |
CN105701854A (zh) * | 2016-01-06 | 2016-06-22 | 网易(杭州)网络有限公司 | 一种3d渲染方法、装置及引擎 |
CN105701854B (zh) * | 2016-01-06 | 2018-07-03 | 网易(杭州)网络有限公司 | 一种3d渲染方法、装置及引擎 |
CN106997610A (zh) * | 2016-01-26 | 2017-08-01 | 阿里巴巴集团控股有限公司 | 一种图像渲染方法、装置及电子设备 |
CN106997610B (zh) * | 2016-01-26 | 2020-08-25 | 阿里巴巴集团控股有限公司 | 一种图像渲染方法、装置及电子设备 |
CN109359224A (zh) * | 2018-10-19 | 2019-02-19 | 珠海金山网络游戏科技有限公司 | 一种材质的数据处理方法、装置、电子设备及存储介质 |
CN110533755A (zh) * | 2019-08-30 | 2019-12-03 | 腾讯科技(深圳)有限公司 | 一种场景渲染的方法以及相关装置 |
Also Published As
Publication number | Publication date |
---|---|
CN100388318C (zh) | 2008-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1851753A (zh) | 一种基于状态集的Shader三维图形绘制框架和绘制方法 | |
CN100342331C (zh) | 用于执行渲染美术品的着色器驱动编译的方法 | |
US8253730B1 (en) | System and method for construction of data structures for ray tracing using bounding hierarchies | |
CN106575228B (zh) | 图形处理中的渲染目标命令重新排序 | |
US7659894B2 (en) | Terminating spatial partition hierarchies by a priori bounding memory | |
EP2335223B1 (en) | Ray tracing system architectures and methods | |
CN105354872A (zh) | 一种基于3d网页游戏的渲染引擎、实现方法及制作工具 | |
KR101633243B1 (ko) | 가시성 정보를 사용한 그래픽 데이터의 렌더링 | |
US11315302B2 (en) | Dedicated ray memory for ray tracing in graphics systems | |
US20090213115A1 (en) | Instant ray tracing | |
KR102668120B1 (ko) | 병렬 광선 테스트를 갖는 광선 교차 회로 | |
KR20170038525A (ko) | 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치의 동작 방법 | |
US20240062452A1 (en) | Ray Tracing System Architectures and Methods | |
US8952961B2 (en) | Systems and methods for photon map querying | |
US11995771B2 (en) | Automated weighting generation for three-dimensional models | |
WO2008091958A2 (en) | Terminating spatial partition hierarchies by a priori bounding memory | |
TW202338739A (zh) | 用於底層層次包圍盒的各層級的儲存 | |
US20240185502A1 (en) | Efficient real-time shadow rendering | |
Dietrich et al. | Realistic and interactive visualization of high-density plant ecosystems | |
Sellers et al. | Rendering massive virtual worlds | |
US20240169644A1 (en) | Graphics processors | |
Garmsen | Real-Time Ray Traced Global Illumination Using Fast Sphere Intersection Approximation for Dynamic Objects | |
Moreira | Intelligent optimization methodologies applied to the visualization of virtual environments | |
do Vale Moreira | Intelligent optimization methodologies applied to the visualization of virtual environments | |
KR20050064580A (ko) | 하드웨어 쉐이더를 이용한 3차원 그래픽 플러그인 시스템및 그 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20080514 Termination date: 20131128 |