体渲染实时数据修改的方法及系统与流程

文档序号:16903495发布日期:2019-02-19 18:12阅读:460来源:国知局
体渲染实时数据修改的方法及系统与流程

本发明涉及图像数据处理技术领域,具体地,涉及体渲染实时数据修改的方法及系统。



背景技术:

体数据在计算机图形学、生物医学、地质学、计算物理/化学、材料学等诸多领域都有重要用途,将它图形化后可以产生漂亮的效果,或通过直观分析得到有价值的信息。由于3d数据采集领域的高速发展,以及在具有交互式帧率的现代化工作站上执行高级可视化的可能性,体数据的重要性将继续迅速增长。

然而,基于体数据渲染的数据量庞大,内存开销大,cpu与gpu通信开销巨大,如果频繁实时的更改体数据,势必导致渲染大量延迟和操作不流畅,体验感很差。



技术实现要素:

针对现有技术中的缺陷,本发明的目的是提供一种体渲染实时数据修改的方法及系统。

根据本发明提供的一种体渲染实时数据修改的方法,包括:

索引缓冲区创建步骤:在内存中创建一个体数据索引缓冲区,所述体数据索引缓冲区的长度为体数据的长宽高之积长度的位;

数据擦除修改步骤:在cpu中实时运算当前要擦除的索引,并在体数据索引缓冲区内进行标记,表示已擦除;

数据传递步骤:将体数据索引缓冲区提交给gpu;

数据处理步骤:在gpu执行渲染时查找对应体数据索引缓冲区内索引的值,决定修改体数据是否保留或剔除。

较佳的,所述体数据索引缓冲区的数据类型为布尔类型。

较佳的,所述数据擦除修改步骤中用一个球体来模拟工具,将球体半径内的索引位标记为1,表示已擦除。

较佳的,所述数据传递步骤利用shaderlab提供的computebuffer作为传递数据结构来传递所述体数据索引缓冲区到gpu。

较佳的,所述数据传递步骤还包括:将所述体数据索引缓冲区转化为无符号整型数组。

较佳的,将所述体数据索引缓冲区中每32位组装成一个无符号整型数据,得到无符号整型数组。

较佳的,所述数据处理步骤包括:

获取当前体数据索引值i,然后将i除以32取整加1获得当前无符号整型数组的索引位置,然后将i对32取余获得在该无符号整型数据的位索引,通过位运算获得该位的值后转为整型数据,如果结果为0表示保留,结果为1,则剔除。

根据本发明提供的一种体渲染实时数据修改的系统,包括:

索引缓冲区创建模块:在内存中创建一个体数据索引缓冲区,所述体数据索引缓冲区的长度为体数据的长宽高之积长度的位;

数据擦除修改模块:在cpu中实时运算当前要擦除的索引,并在体数据索引缓冲区内进行标记,表示已擦除;

数据传递模块:将体数据索引缓冲区提交给gpu;

数据处理模块:在gpu执行渲染时查找对应体数据索引缓冲区内索引的值,决定修改体数据是否保留或剔除。

较佳的,所述数据传递模块利用shaderlab提供的computebuffer作为传递数据结构来传递所述体数据索引缓冲区到gpu。

较佳的,所述数据传递模块还包括:将所述体数据索引缓冲区转化为无符号整型数组。

与现有技术相比,本发明具有如下的有益效果:

本发明采用将索引buffer的方案并且将索引按位存储,避免了再gpu中循环运算同时也减少了内存开销,结合unity3dshaderlab,优化改进,到达实时修改体数据并流畅渲染的目的。

附图说明

通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:

图1为本发明的流程图;

图2为内存中按位存储与按整数数据读取示意图;

图3为索引缓冲区转无符号整型数组的流程图;

图4为按位转化一个无符号整型数的流程图;

图5为通过索引标识决定是否剔除体数据的流程图。

具体实施方式

下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。

如图1所示,本发明提供的一种体渲染实时数据修改的方法,包括:

索引缓冲区创建步骤:在内存中创建一个体数据索引缓冲区,所述体数据索引缓冲区的长度为体数据的长宽高之积长度的位;

数据擦除修改步骤:在cpu中实时运算当前要擦除的索引,并在体数据索引缓冲区内进行标记,表示已擦除;

数据传递步骤:将体数据索引缓冲区提交给gpu;

数据处理步骤:在gpu执行渲染时查找对应体数据索引缓冲区内索引的值,决定修改体数据是否保留或剔除。

索引缓冲区数据类型为布尔类型,由于布尔类型只占据一位内存空间;而体数据采用的是rgbahalf格式(即由16位4通道)数据组成,一个体元素值需要占用64位内存空间。因此此数据索引缓存区的实际内存空间为元素体数据内存空间的1/64。

数据擦除修改步骤中用一个球体来模拟体数据橡皮擦(磨骨的磨钻)等实用工具,将球体半径内的索引位标记为1(true)表示已经擦除。

数据传递步骤利用shaderlab提供的computebuffer作为传递数据结构来传递索引缓冲区到gpu进行运算。但是由于shaderlab在提供的支持的数据交换类型不包括位(bit)和布尔(bool)以及字节(byte)类型,因此需要将索引缓冲区的安位存储的值,转化为无符号整型(uint)数组使用。

将位(bit)缓冲区转化为无符号整型(uint)数组:由于一个无符号整型数据占用4字节即32位内存空间,那么时间上是将位缓冲区中每32位组装成一个无符号整型使用,为了方便解析则规定按照低位在前高位在后的方式进行无符号整型数据的读取,由于此无符号整型数据本身只是为了存储使用,如果位缓冲区的长度不是32的整数倍,则在末尾补0来表示,如图2所示。然后通过位运算,将位缓冲区转化为无符号整型数组,如图3、4所示。

在shaderfragment处理函数中编写程序,根据当前uv值查找索引缓冲区传入的标记,决定是将数据剔除还是保留。但是由于shaderlab编程没有提供按位读取数据的功能,因此需要对应的将传入的无符号整型数组按位读取。首先,将当前uv获取需要检索的索引值i,然后将其除以32取整加1获得当前无符号整型数组的索引位置,然后将i对32取余获得在该无符号整型数据的位索引,通过位运算获得该位的值后转为整型数据。如果结果为0表示保留,结果为1,则剔除,如图5所示。

在上述体渲染实时数据修改的方法基础上,本发明还提供一种体渲染实时数据修改的系统,包括:

索引缓冲区创建模块:在内存中创建一个体数据索引缓冲区,所述体数据索引缓冲区的长度为体数据的长宽高之积长度的位;

数据擦除修改模块:在cpu中实时运算当前要擦除的索引,并在体数据索引缓冲区内进行标记,表示已擦除;

数据传递模块:将体数据索引缓冲区提交给gpu;

数据处理模块:在gpu执行渲染时查找对应体数据索引缓冲区内索引的值,决定修改体数据是否保留或剔除。

本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。

以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1