CN110070597A - 一种基于OpenCL的Unity3D渲染加速方法 - Google Patents

一种基于OpenCL的Unity3D渲染加速方法 Download PDF

Info

Publication number
CN110070597A
CN110070597A CN201910262194.5A CN201910262194A CN110070597A CN 110070597 A CN110070597 A CN 110070597A CN 201910262194 A CN201910262194 A CN 201910262194A CN 110070597 A CN110070597 A CN 110070597A
Authority
CN
China
Prior art keywords
opencl
work item
unity3d
pixel
image
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.)
Pending
Application number
CN201910262194.5A
Other languages
English (en)
Inventor
喻斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tongji University
Original Assignee
Tongji University
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tongji University filed Critical Tongji University
Priority to CN201910262194.5A priority Critical patent/CN110070597A/zh
Publication of CN110070597A publication Critical patent/CN110070597A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0877Cache access modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/50Lighting effects
    • G06T15/60Shadow generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/50Depth or shape recovery

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Generation (AREA)

Abstract

本发明涉及一种基于OpenCL的Unity3D渲染加速方法,包括:S1、在渲染过程的主机端加载场景数据,将场景数据传输到OpenCL设备端;S2、将图像中的像素点映射到OpenCL的工作项中;S3、为OpenCL设备端加载计算任务;S4、利用所有OpenCL的工作项同步执行内核函数,实现对Unity3D渲染过程的并行计算优化;S5、将内核函数的计算结果写回到全局内存空间中,完成图像中的每个像素点信息的更新;S6、完成后续渲染过程。与现有技术相比,本发明实现了对Unity3D渲染过程的并行化优化加速,减少了Unity 3D在渲染过程中的计算负担,在保证渲染质量的前提下,运算速度加快了近10倍。

Description

一种基于OpenCL的Unity3D渲染加速方法
技术领域
本发明涉及OpenCL并行计算领域,尤其是涉及一种基于OpenCL的Unity3D渲染加速方法。
背景技术
随着信息时代的发展,人们面对的数据量越来越庞大,对计算性能的需求也随之急剧地增加。过去的计算性能的提升主要靠提高处理器频率或是增加处理器的核心数,然而,在CPU上进行的串行计算目前已经达到了计算效率的瓶颈,即使是多核CPU也难以满足当今的计算需求。而GPU从最初的只用于图形处理的处理器已经发展成了可以编程的计算平台,其具有更强的浮点计算能力和并行计算能力。GPU平台中的OpenCL并行计算框架就在这一背景下得到人们的广泛关注。
Unity3D渲染的实质工作是在计算机中模拟现实生活场景中真实物体的物理特性,包含物体形态、光照阴影变化、几何纹理以及材质等,并根据视点以及模型的位置变化、遮挡影响以及光源变换引起的色彩变化,并将最终的计算结果显示在二维平面上,是一个非常复杂的计算过程。目前的解决方案多是基于CPU平台,利用Unity所提供的图形接口和封装函数,对算法和模型进行优化,从而实现对渲染过程的控制和改进。然而,随着对图像分辨率和实时性的要求越来越高,给CPU带来了巨大的计算负担,仅仅依靠CPU的计算能力已经难以满足用户的需求。
发明内容
本发明的目的就是为了克服上述现有技术存在的缺陷而提供一种基于OpenCL的Unity3D渲染加速方法。
本发明的目的可以通过以下技术方案来实现:
一种基于OpenCL的Unity3D渲染加速方法,包括以下步骤:
S1、在渲染过程的主机端加载场景数据,将场景数据传输到OpenCL设备端;
S2、将图像中的像素点映射到OpenCL的工作项中;
S3、为OpenCL设备端加载计算任务;
S4、利用所有OpenCL的工作项同步执行内核函数,实现对Unity3D渲染过程的并行计算优化;
S5、将内核函数的计算结果写回到全局内存空间中,完成图像中的每个像素点信息的更新;
S6、完成后续渲染过程。
优选的,所述步骤S2中采用阶段式映射方法将图像中的像素点映射到OpenCL的工作项中。
优选的,所述阶段式映射方法具体包括:
将一个图像中的像素点映射到一个工作组中,一个工作组对应着一个计算单元,工作组根据硬件的特性自动调整其所包含的工作项的数目和工作项所包含的像素点的数目。
优选的,所述阶段式映射方法的访存模式为:设一个工作项包含n个像素,每个工作项读取n个像素点,组成长度为n的向量,每个工作项以其全局索引值为相对起始读取地址,每次读取都相隔128个字节。
优选的,所述步骤S4具体包括:
在OpenCL执行模型中将具有内存冲突的任务分解为多个相互独立的子任务,这些子任务通过多个内核函数的形式进入命令队列中,顺序执行命令队列得到子任务的计算结果,最后进行并行统计指令,将这些子任务的计算结果合并求解。
优选的,所述步骤S1具体包括:
在渲染过程的主机端加载场景数据并存储到图像缓存区中,将图像缓存区加载到主机端指针中,并将host_ptr指针拷贝到OpenCL设备端中,完成主机端到OpenCL设备端场景数据的传输。
与现有技术相比,本发明具有以下优点:
1、基于OpenCL并行计算,减少了Unity 3D在渲染过程中的计算负担,可以充分挖掘GPU中的巨大的计算资源,渲染速度得到了显著的提升,同时渲染效果更加真实,在保证渲染质量的前提下,与Unity中初始的渲染过程相比,运算速度加快了近10倍,可以明显缩短对大规模场景的渲染过程。
2、像素点与工作项采用阶段式映射方法,工作组可以根据硬件的特性自动调整其所包含的工作项的数目和工作项所包含的像素点的数目,从而充分发挥工作项和工作组对内存的读写能力。
附图说明
图1为本发明方法的框架图;
图2为本发明中像素点到工作项的阶段式映射方法示意图;
图3为本发明中利用分而治之的方法解决内存冲突的示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,本申请提出一种基于OpenCL的Unity3D渲染加速方法,该方法对渲染过程中的顶点变换和光照计算过程进行加速,有利于提高Unity3D渲染过程中的计算时间,从而有效的提高对复杂场景的渲染效率。该方法包括以下步骤:
S1、在渲染过程的主机端加载场景数据,将场景数据传输到OpenCL设备端;
S2、将图像中的像素点映射到OpenCL的工作项中;
S3、为OpenCL设备端加载计算任务;
S4、利用所有OpenCL的工作项同步执行内核函数,实现对Unity3D渲染过程的并行计算优化;
S5、将内核函数的计算结果写回到全局内存空间中,完成图像中的每个像素点信息的更新;
S6、完成后续渲染过程。
步骤S1具体包括:
在渲染过程的主机端加载场景数据并存储到图像缓存区中,将图像缓存区加载到主机端指针中,并将host_ptr指针拷贝到OpenCL设备端中,完成主机端到OpenCL设备端场景数据的传输。
步骤S2中采用阶段式映射方法将图像中的像素点映射到OpenCL的工作项中,具体包括:
将一个图像中的像素点映射到一个工作组中,一个工作组对应着一个计算单元,工作组根据硬件的特性自动调整其所包含的工作项的数目和工作项所包含的像素点的数目。
步骤S4中提出了分而治之的计算方法以避免OpenCL并行计算中的内存冲突问题,具体包括:
在OpenCL执行模型中将具有内存冲突的任务分解为多个相互独立的子任务,每个子任务都具备并行执行不造成内存冲突的特点,这些子任务通过多个内核函数的形式进入命令队列中,顺序执行命令队列得到子任务的计算结果,最后进行并行统计指令,将这些子任务的计算结果合并求解。
实施例一
本实施例中以Unity 3D阴影渲染为例,用本申请提出的方法对Unity3D中所使用的阴影贴图技术进行优化,具体按以下步骤进行:
(1)、确定硬件环境和软件平台:本实施例中,渲染过程的主机端采用Intel(R)Core(TM)i5-6300HQ CPU@2.30Hz,Unity 3D采用2018.1.2版本,OpenCL设备端采用NVIDIAGeForce GTX 965M显卡。
(2)、主机端加载场景数据,并存储到32位的RGBA的图像缓存区中,RGBA代表四个图像通道,每个通道大小为8个比特,根据通道次序CL_RGBA和通道数据类型CL_SIGNED_INT8建立cl_image_format结构,最后使用clCreateImage3D()创建图像。
(3):将步骤(2)中的图像缓存区加载到主机端指针中,并将host_ptr指针拷贝到OpenCL设备中,完成主机端到OpenCL设备端场景数据的传输。
(4)、在OpenCL运行时,创建NDRange索引空间,索引空间中的各个点对应着一个工作项。工作项在该索引空间内具有唯一的全局ID表示。通过索引空间,可以更好地对工作项进行管理和控制。
(5)、像素点采用阶段式映射方法映射到工作项中,工作组中的OpenCL工作项在局部内存中开辟存储空间,用以存储图像中的阴影信息。
(6)、将Unity中的阴影映射算法加载到OpenCL设备端中,在OpenCL中,将阴影映射算法分为深度图计算、光源距离计算和阴影应算计算三个计算任务,特别的对于深度图计算任务采用分而治之的方法分解为多个子任务以提高整体的并行效率。
(7)、阴影映射算法通过一系列的内核函数,进入到命令队列中,在OpenCL中顺序执行该命令队列。对于一个内核函数,所有OpenCL工作项同步执行任务指令,每个内核函数的计算的时间复杂度为O(1)。
(8)、将子任务计算结果写回到全局内存空间中,完成图像中的每个像素点信息的更新。
(9)完成对图像的阴影渲染过程,将GPU中的结果写会到Unity3D中。
步骤(5)中,如图2所示,结合本实施例的硬件特性,一个工作组包含16个工作项。在阴影映射过程中,每个像素需包含8个字节的信息,一个工作项包含4×4个像素。本实施例中工作项理想的读取模式为连续读取128个字节的数据,采用阶段式映射方法正好读取128个字节的数据,可以更充分的利用硬件性能。阶段式映射方法的访存模式为:每个工作项读取16个像素点,组成长度为16的向量,每个工作项以其全局索引值为相对起始读取地址,下次读取的地址跨度等于工作项读取的所有字节数。工作组的大小由硬件特性决定,工作组所使用的局部内存在硬件中为高速缓存,可以有效地提高数据访问效率。
本实施例中,步骤(6)中,在深度图计算过程中,当场景中存在多个光源时,会出现多个遮挡体对同一块平面区域产生阴影的现象。此时在OpenCL中,工作项对应着一个像素块,对该像素块并行执行深度图计算时,会同时对该工作项内存写入深度信息,产生内存访问冲突。此时采用分而治之的计算方法,将深度图计算根据光源数量分解为多个子任务,在单一光源下计算的深度信息单独保存,当所有光源的深度图计算完成后,对这些深度信息进行合并,即得到了该像素块最终的深度值。
实施例二
本实施例中,以Unity3D中的顶点坐标转换为例,用本申请提出的方法按以下步骤进行:
1)、在渲染过程的主机端加载场景数据,将场景数据传输到OpenCL设备端。
2)、在OpenCL运行时,创建NDRange索引空间,索引空间中的各个点对应着一个工作项。像素点采用阶段式映射方法映射到工作项中,工作组中的OpenCL工作项在局部内存中开辟存储空间。
3)、为OpenCL设备端加载顶点转换过程中的计算任务,每个子任务在OpneCL端作为内核函数进入命令队列。
4)、对于一个内核函数,将所有OpenCL工作项同步执行任务指令,其计算的时间复杂度为O(1)。
5)、将子任务计算结果写回到全局内存空间中,完成图像中的每个像素点信息的更新,完成该部分的顶点坐标变换过程。
步骤2)中,结合本实施例的硬件特性,一个工作组包含16个工作项,在顶点坐标转换过程中,每个需包含4个字节的信息,一个工作项包含8×4个像素。本实施例中工作项理想的读取模式为连续读取128个字节的数据,采用阶段式映射方法正好读取128个字节的数据。阶段式映射方法的访存模式为:每个工作项读取32个像素点,组成长度为32的向量,每个工作项以其全局索引值为相对起始读取地址,每次读取都相隔128个字节。
步骤3)中,将Unity3D顶点坐标变换过程分解为世界转换、视间转换和投影转换三个子任务,这些子任务相互独立,每个子任务对应一个内核函数。OpenCL计算框架将所有的内核函数进入命令队列中,命令队列将依次执行这些子任务。
步骤4)中,如图3所示,本实施例在世界转换过程中,将进行世界空间矩阵平移的操作,平移后的矩阵进行整合得到相机空间。对应于OpenCL模型中,由于多个矩阵平移到一个矩阵之上,会产生多个工作项对一个工作项的写入冲突。反映在NDRange索引空间里,可以共同作用在(1,1)处的有9个工作项,因此除了(1,1)处工作项的存储空间的同时,额外开辟了大小为8的扩展存储空间。当这些工作项对(1,1)工作项计算时,每一个计算结果会独立保存在该额外内存空间中。最后通过执行合并求解步骤,将这些计算结果合并,得出该工作项的最终计算结果。通过这种方式,可以完全避免对同一块内存的访存冲突。

Claims (6)

1.一种基于OpenCL的Unity3D渲染加速方法,其特征在于,包括以下步骤:
S1、在渲染过程的主机端加载场景数据,将场景数据传输到OpenCL设备端;
S2、将图像中的像素点映射到OpenCL的工作项中;
S3、为OpenCL设备端加载计算任务;
S4、利用所有OpenCL的工作项同步执行内核函数,实现对Unity3D渲染过程的并行计算优化;
S5、将内核函数的计算结果写回到全局内存空间中,完成图像中的每个像素点信息的更新;
S6、完成后续渲染过程。
2.根据权利要求1所述的一种基于OpenCL的Unity3D渲染加速方法,其特征在于,所述步骤S2中采用阶段式映射方法将图像中的像素点映射到OpenCL的工作项中。
3.根据权利要求2所述的一种基于OpenCL的Unity3D渲染加速方法,其特征在于,所述阶段式映射方法具体包括:
将一个图像中的像素点映射到一个工作组中,一个工作组对应着一个计算单元,工作组根据硬件的特性自动调整其所包含的工作项的数目和工作项所包含的像素点的数目。
4.根据权利要求2所述的一种基于OpenCL的Unity3D渲染加速方法,其特征在于,所述阶段式映射方法的访存模式为:设一个工作项包含n个像素,每个工作项读取n个像素点,组成长度为n的向量,每个工作项以其全局索引值为相对起始读取地址,每次读取都相隔128个字节。
5.根据权利要求1所述的一种基于OpenCL的Unity3D渲染加速方法,其特征在于,所述步骤S4具体包括:
在OpenCL执行模型中将具有内存冲突的任务分解为多个相互独立的子任务,这些子任务通过多个内核函数的形式进入命令队列中,顺序执行命令队列得到子任务的计算结果,最后进行并行统计指令,将这些子任务的计算结果合并求解。
6.根据权利要求1所述的一种基于OpenCL的Unity3D渲染加速方法,其特征在于,所述步骤S1具体包括:
在渲染过程的主机端加载场景数据并存储到图像缓存区中,将图像缓存区加载到主机端指针中,并将host_ptr指针拷贝到OpenCL设备端中,完成主机端到OpenCL设备端场景数据的传输。
CN201910262194.5A 2019-04-02 2019-04-02 一种基于OpenCL的Unity3D渲染加速方法 Pending CN110070597A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910262194.5A CN110070597A (zh) 2019-04-02 2019-04-02 一种基于OpenCL的Unity3D渲染加速方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910262194.5A CN110070597A (zh) 2019-04-02 2019-04-02 一种基于OpenCL的Unity3D渲染加速方法

Publications (1)

Publication Number Publication Date
CN110070597A true CN110070597A (zh) 2019-07-30

Family

ID=67366859

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910262194.5A Pending CN110070597A (zh) 2019-04-02 2019-04-02 一种基于OpenCL的Unity3D渲染加速方法

Country Status (1)

Country Link
CN (1) CN110070597A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112433847A (zh) * 2020-11-09 2021-03-02 中国船舶重工集团公司第七0九研究所 一种OpenCL内核提交的方法及装置

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104090742A (zh) * 2014-07-17 2014-10-08 北京邮电大学 一种基于OpenCL的并行化渐进式光子映射方法和装置
CN104823215A (zh) * 2012-12-28 2015-08-05 苹果公司 子画面图形渲染系统
CN105787865A (zh) * 2016-03-01 2016-07-20 西华大学 基于游戏引擎和gpu并行处理的分形图生成与渲染方法
CN106095588A (zh) * 2016-06-28 2016-11-09 北京大学深圳研究生院 基于gpgpu平台的cdvs提取过程加速方法
CN107194864A (zh) * 2017-04-24 2017-09-22 中国人民解放军信息工程大学 基于异构平台的ct图像三维重建加速方法及其装置
CN108090947A (zh) * 2018-01-03 2018-05-29 沈阳品尚科技有限公司 一种面向3d场景的光线追踪优化方法
CN108573521A (zh) * 2018-04-12 2018-09-25 东南大学 基于cuda并行计算框架的实时交互式裸眼3d显示方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104823215A (zh) * 2012-12-28 2015-08-05 苹果公司 子画面图形渲染系统
CN104090742A (zh) * 2014-07-17 2014-10-08 北京邮电大学 一种基于OpenCL的并行化渐进式光子映射方法和装置
CN105787865A (zh) * 2016-03-01 2016-07-20 西华大学 基于游戏引擎和gpu并行处理的分形图生成与渲染方法
CN106095588A (zh) * 2016-06-28 2016-11-09 北京大学深圳研究生院 基于gpgpu平台的cdvs提取过程加速方法
CN107194864A (zh) * 2017-04-24 2017-09-22 中国人民解放军信息工程大学 基于异构平台的ct图像三维重建加速方法及其装置
CN108090947A (zh) * 2018-01-03 2018-05-29 沈阳品尚科技有限公司 一种面向3d场景的光线追踪优化方法
CN108573521A (zh) * 2018-04-12 2018-09-25 东南大学 基于cuda并行计算框架的实时交互式裸眼3d显示方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
朱亚辉: "3D实时渲染的并行方法研究", 《万方学位论文》 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112433847A (zh) * 2020-11-09 2021-03-02 中国船舶重工集团公司第七0九研究所 一种OpenCL内核提交的方法及装置
CN112433847B (zh) * 2020-11-09 2024-04-02 中国船舶集团有限公司 一种OpenCL内核提交的方法及装置

Similar Documents

Publication Publication Date Title
WO2022116759A1 (zh) 图像渲染方法、装置、计算机设备和存储介质
CN110827385B (zh) 树遍历的特定于查询的行为修改
WO2022042436A1 (zh) 图像渲染方法、装置、电子设备及存储介质
US7973790B2 (en) Method for hybrid rasterization and raytracing with consistent programmable shading
US10055883B2 (en) Frustum tests for sub-pixel shadows
CN110827390A (zh) 处理无序不透明和α光线/图元交点的方法
CN113781625B (zh) 适用于光线追踪的基于硬件的技术
CN114820906B (zh) 图像渲染方法、装置、电子设备及存储介质
US20230120253A1 (en) Method and apparatus for generating virtual character, electronic device and readable storage medium
CN117157676A (zh) 加速实时光线追踪的三角形可见性测试
CN111210498A (zh) 降低多边形网格的细节水平以减少被渲染几何的复杂度
CN110675480B (zh) 用于获取纹理操作的采样位置的方法和装置
CN105556565A (zh) 片段着色器执行顶点着色器计算
US10861230B2 (en) System-generated stable barycentric coordinates and direct plane equation access
US20210256759A1 (en) Performance of ray-traced shadow creation within a scene
US11315310B2 (en) Reservoir-based spatiotemporal importance resampling utilizing a global illumination data structure
CN111445003A (zh) 神经网络生成器
CN117501312A (zh) 图形渲染的方法及装置
WO2024027237A1 (zh) 渲染的优化方法、电子设备和计算机可读存储介质
US20240095993A1 (en) Reducing false positive ray traversal in a bounding volume hierarchy
CN112041894A (zh) 渲染期间提高涉及水面的场景的真实感
CN113822975B (zh) 用于对图像进行有效采样的技术
CN109087381B (zh) 一种基于双发射vliw的统一架构渲染着色器
CN110070597A (zh) 一种基于OpenCL的Unity3D渲染加速方法
US12106423B2 (en) Reducing false positive ray traversal using ray clipping

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20190730

RJ01 Rejection of invention patent application after publication