基于嵌入式系统存储优化的图形加速方法

文档序号:9305037阅读:381来源:国知局
基于嵌入式系统存储优化的图形加速方法
【技术领域】
[0001] 本发明涉及计算机图形处理技术,尤其涉及图像加速处理方法。
【背景技术】
[0002] 图形作为传递信息的最主要媒体之一,使得计算机图形学在短短30年的历史中 飞速发展。作为商品的图形软件和硬件已能方便地生成各种线画图形和自然景物的真实感 图像,从某种程度上来讲,计算机图形学的广泛应用是计算机发展水平的标志。计算机图形 学来源于生活、舞蹈、音乐、艺术、电影制作、工程技术、科学等,它们之间的相互推动作用又 使计算机图形学大大促进了这些领域的发展。
[0003]当代计算机所具有的图形图像处理能力已经达到实时渲染高帧频高清高质量的 3D彩色图像和非常逼真的多层次场景。计算机图形图像加速处理技术已经广泛应用领域 有:计算机动画、科学计算可视化、图形用户接口、虚拟现实技术、计算机艺术、CAD/CAM等 领域。在这些年,计算机图形图像处理技术飞速发展,从单色到真彩色,从二维到三维、从低 分辨率到高清,阴影、光照、雾化、纹理、融合等技术层出不穷。正是有了图形加速技术,才让 这些所有的技术得以实现。
[0004] 在计算机图形学和计算机飞速发展的趋势下,用户对人机交互的要求越来越高, 要求系统能够提供出更多的视觉信息,要求系统可以在屏幕上显示图形图像,例如嵌入式 系统。尤其是进入21世纪后,用户对嵌入式设备的要求上升到了一个新的高度,用户要求 这些嵌入式设备实时显示高清高质量的3D图像图形。为了满足这些嵌入式系统的各种应 用需求,这些嵌入式设备必须具有高实时性、小体积、低功耗、低成本等这些性能要求。为了 使得嵌入式图形系统满足这些需求,必须要求嵌入式系统具有高效的图形渲染能力,在嵌 入式系统的有限资源下,就需要图形加速技术来快速实现图形渲染。

【发明内容】

[0005] 本发明所要解决的技术问题就是提供一种基于嵌入式系统存储优化的图形加速 方法,快速实现图形渲染。
[0006] 为解决上述技术问题,本发明采用如下技术方案:基于嵌入式系统存储优化的 图形加速方法,采用纹理集算法进行图形渲染,采用纹理集算法进行图形渲染包括如下步 骤:
[0007] 第一,创建一个纹理集类,这个纹理集的功能是用来将小纹理合并成一张大的纹 理;
[0008] 第二,将每个物体上的小纹理传给纹理集类来创建一张大纹理,并将每个物体上 小纹理替换成这张大的纹理;
[0009] 第三,根据每张小的纹理在纹理集中的相对位置更新UV坐标;
[0010] 第四,将序列化的多个元素绘制函数合并成一个元素绘制函数。
[0011] 优选的,将各小纹理合并到大纹理中包括均匀分配和非均匀分配两种方法,均匀 分配是指在大纹理中分配给各小纹理的大小是固定的,而非均匀分配是指按各小纹理实际 的尺寸合并到大纹理中。
[0012] 本发明用纹理集算法进行图形渲染,该算法从渲染10角度出发考虑,通过减少 CPU和GPU之间数据交互所需要的巨大开销来提高渲染效率,实现了图形的加速处理。
【具体实施方式】
[0013] 本发明基于嵌入式系统存储优化的图形加速方法的基本思想是设计一种动态空 间分配算法将各个独立的小纹理合并为一个大的纹理,并且进行纹理坐标的相应修改,从 而减少GPU draw call的调用,以此提高渲染帧率。
[0014] 设我们要渲染的场景中包含了n张不同的纹理图,该场景中的几何对象总数为k, 该场景植染时发生的GPUdrawcall的调用次数为n',则必有:
[0015] n彡n,彡kXn(2-l)
[0016] 若发生一次GPUdrawcall调用的时间为t',场景中某几何对象i的植染时间(不 包括纹理状态切换的时间)为h,场景的总渲染时间为:
[0017]
[0018] 由公式(2-2)知,GPUdrawcall的调用次数增加必然使场景的渲染时间增长。而 实际表明在GPU中,GPUdrawcall的调用时间远远大于正常的渲染时间。因此,减少GPU drawcall的调用对提高场景的渲染效率具有很大的意义。又由公式(2-1)得知,若场景 中几何对象总数不变,纹理个数减少,必然会使渲染时发生的GPUdrawcall的调用次数减 少。
[0019] 由以上得知,可以通过合并纹理的方法减少GPU draw call的调用次数,从而提高 渲染效率。
[0020] 基于嵌入式系统存储优化的图形加速方法,采用纹理集算法进行图形渲染,采用 纹理集算法进行图形渲染包括如下步骤:
[0021] 第一,创建一个纹理集类,这个纹理集的主要功能是用来将小纹理合并成一张大 的纹理。
[0022] 第二,将每个物体上的小纹理传给纹理集类来创建一张大纹理,并将每个物体上 小纹理替换成这张大的纹理。
[0023] 第三,根据每张小的texture在纹理集中的相对位置更新UV坐标。
[0024] 第四,将序列化的元素绘制函数(DrawPrimitive函数)合并成一个元素绘制函数 (DrawPrimitive函数),即调用一次draw call即可。
[0025] 首先,我们有一个TextureSet的基类,这是个虚拟类,规定了一些纹理集的基本 操作函数,如Add(),Clear()等操作。
[0026] UniformSet和Non-uniformSet是继承TextureSet的两个实例,在UniformSet中 我们规定了纹理集中的每个texture的大小都是相同的(通常为需要合并的各小纹理中最 大的一个)。而non-uniformSet中则会按texture实际大小加到纹理集中。这两种方案都 有利有弊。UniformSet中管理和计算都比较方便,而Non-uniformSet对空间的利用率则比 较高。
[0027] 在实现的过程中有以下几个关键要点需要注意:
[0028] (1)如何将各小texture(纹理)合并到大纹理中
[0029] 这其中包括uniform和non-uniform两种,uniform是指在大纹理中分配给各小 texture的大小是固定的,这种方法的优点在于方便管理,计算比较方便,而缺点是比较消 费空间。而non-uniform是指按各小texture实际的size合并到大纹理中。
[0030] (2)如何处理Addressmode的问题
[0031] 所谓Addressmode的问题,即物体上要求的UV坐标超过(0, 1)时如何处理的 问题,常用的AddressMode有Clamp,Wrap,Mirror,一种解决这种问题的办法就是将带 Addressmode的小的texture在纹理集中重复多次,比如一个小texture的uv值是(0, 5), 那我们就将这个texture在纹理集中重复5次。
[0032] (3)如何处理filtering的问题
[0033] 所谓filtering是指在pixelshader中采取texture上像素点(texel)时,当 采取的点不正好是texel的正中心如何处理的问题,通常用的方法有NearestNeighbor, BilinearFiltering,TrilinearFiltering和AnisotropicFiltering。
[0034] 当小texture合并到纹理集中时,当采取点采到小texture的内部时不会出什么 问题,唯一会出问题的则是当采取点采到texture的边缘时,因为在原来小的texture中 时,texture之外为空白区域,而在大纹理中时,贝lj会采到旁边的texture中。
[0035] 解决这个问题的一个办法就是将每个小texture周围包围一个lpixel宽的外围 再合并到纹理集中。
[0036] 下面我们来举例说明这个减少drawcall的过程:
[0037] 我们现在需要画两个物体,通常情况下,我们需将第一张Texture赋给(调用 SetTextureO函数)第一个物体,然后开始画(调用DrawPrimitiveO函数),然后再将第 二张Texture通过SetTextureO赋给第二个物体,再调用DrawPrimitiveO画第二个物 体。这样整个流程就调用了两次drawcall。
[0038] 如果将两个Texture合并到一个textureset里,我们则无需要在两 次DrawPrimitiveO之间再次调用SetTextureO,也就是说我们只需要一次 DrawPrimitiveO即可,即将Drawcall的调用从两次减少到了一次。为了保证在合并后读 取pixel时不至于发生错误,我们需要对Texture的UV坐标做一个对应变换。
[0039] 另外,现有技术中,Irrlicht引擎中绝对值运算是通过分支来判断其值的正负,以 此来实现求值,这种求法不利于CPU的流水线指令处理方式。因此,本发明还可以通过优化 了Irrlicht引擎的一些底层浮点数数学运算进加快图形处理速度,其优化实现方式是:将 原来代码中的分支结构去掉,将浮点类型转换成整型,去掉其符号位,再将其转换回浮点类 型。
【主权项】
1. 基于嵌入式系统存储优化的图形加速方法,其特征在于:采用纹理集算法进行图形 渲染,采用纹理集算法进行图形渲染包括如下步骤: 第一,创建一个纹理集类,这个纹理集的功能是用来将小纹理合并成一张大的纹理; 第二,将每个物体上的小纹理传给纹理集类来创建一张大纹理,并将每个物体上小纹 理替换成这张大的纹理; 第三,根据每张小的纹理在纹理集中的相对位置更新UV坐标; 第四,将序列化的多个元素绘制函数合并成一个元素绘制函数。2. 根据权利要求1所述的基于嵌入式系统存储优化的图形加速方法,其特征在于:将 各小纹理合并到大纹理中包括均匀分配和非均匀分配两种方法,均匀分配是指在大纹理中 分配给各小纹理的大小是固定的,而非均匀分配是指按各小纹理实际的尺寸合并到大纹理 中。
【专利摘要】本发明公开了一种基于嵌入式系统存储优化的图形加速方法,采用纹理集算法进行图形渲染,包括如下步骤:第一,创建一个纹理集类,这个纹理集的功能是用来将小纹理合并成一张大的纹理;第二,将每个物体上的小纹理传给纹理集类来创建一张大纹理,并将每个物体上小纹理替换成这张大的纹理;第三,根据每张小的纹理在纹理集中的相对位置更新UV坐标;第四,将序列化的多个元素绘制函数合并成一个元素绘制函数。本发明用纹理集算法进行图形渲染,通过减少CPU和GPU之间数据交互所需要的巨大开销来提高渲染效率,实现了图形的加速处理。
【IPC分类】G06T1/00
【公开号】CN105023234
【申请号】CN201510376696
【发明人】盛斌, 吴丹, 裴淑炜, 高吟, 周旭楚, 张越青
【申请人】嘉兴慧康智能科技有限公司
【公开日】2015年11月4日
【申请日】2015年6月29日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1