针对APP与Unity实时渲染视频帧纹理的方法技术

技术编号:35643963 阅读:21 留言:0更新日期:2022-11-19 16:36
本发明专利技术涉及一种针对APP与Unity实时渲染视频帧纹理的方法,属于视频帧渲染技术领域。APP通过NDK与C++代码交互,通过C++渲染函数直接将视频帧纹理渲染至Unity内部纹理,C++通过共享纹理的方式,使Unity与APP同时使用一个纹理进行渲染,这种方式不需要转码、解码字符串数据,视频帧图片数据添加到GPU显存后,APP与Unity直接通过纹理句柄操作渲染纹理,节省多次内存到GPU显存的拷贝时间,满足实时渲染视频帧图片的需求,并降低了程序的复杂度,使软件架构更简洁。件架构更简洁。件架构更简洁。

【技术实现步骤摘要】
针对APP与Unity实时渲染视频帧纹理的方法


[0001]本专利技术涉及视频帧渲染
,特别涉及Unity 3D的渲染
,尤指一种针对APP与Unity实时渲染视频帧纹理的方法,是一种在Android和IOS系统中的APP与Unity 3D实时渲染视频帧纹理的方法。其可广泛应用于移动端Unity 3D动画视频功能的开发。

技术介绍

[0002]目前为了使APP读取的视频帧图片显示在Unity 3D界面中并完成实时渲染纹理和视频保存时,通常采用APP调用Unity SDK接口函数的方式。
[0003]实时渲染时,APP与Unity以字符串的方式交互变量值,APP将视频帧解码为图片数据,再转码为base64字符串,传送给Unity脚本函数,Unity脚本函数将base64字符串转换为帧图片数据后添加到GPU显存并渲染图片。
[0004]渲染视频保存时,Unity脚本函数将GPU显存内的纹理图片拷贝到内存,转码为base64字符串数据后再传送给APP,APP将base64字符串数据转码为帧图片数据后,将帧图片数据转为视频帧数据并写入视频文件。
[0005]利用Unity SDK接口函数与APP交互变量值,只能通过base64字符串数据的方式传输帧图片数据,多次转码、解码,渲染效率低,无法满足实时渲染视频帧图片的需求。亟待改进。
[0006]Unity是一款由Unity Technologies研发的跨平台2D/3D游戏引擎。它以交互的图型化开发环境为首要方式,编译器运行在Windows 和Mac OS X下,可发布游戏至Windows、Wii、OSX、iOS或HTML5等众多平台。此外,Unity 还是被广泛用于建筑可视化、实时三维动画等类型互动内容的综合型创作工具。
[0007]SDK(Software Development Kit,软件开发工具包),一般是一些被软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件的开发工具的集合。它可以简单地为某个编程语言提供应用程序接口的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。
[0008]APP(APPlication,手机软件)是指安装在智能手机上的软件,需要有相应的手机系统来运行。其主要功能是完善原始系统的不足与个性化,使手机功能更加完善,为用户提供更丰富的使用体验。
[0009]C++是一种面向对象的计算机程序设计语言。
[0010]NDK(Native Development Kit)称为本机开发套件,是一种开发工具,开发者使用该套件可以运用C / C ++为Android设备编程。
[0011]TEXTURE纹理,表示在图形中物体表面的及图片效果。
[0012]TRUE在计算机程序里通常表示判断的结果为成立。
[0013]FALSE在计算机程序里通常表示判的断结果为不成立。

技术实现思路

[0014]本专利技术的目的在于提供一种针对APP与Unity实时渲染视频帧纹理的方法,是一种高效的移动端Unity 3D视频渲染技术,解决了现有技术存在的移动端Unity 3D渲染效率低的问题。
[0015]本专利技术的上述目的通过以下技术方案实现:针对APP与Unity实时渲染视频帧纹理的方法,APP通过NDK与C++代码交互,通过C++渲染函数直接将视频帧纹理渲染至Unity内部纹理,C++通过共享纹理的方式,使Unity与APP同时使用一个纹理进行渲染;包括如下步骤:S1、Unity端导出SDK,APP端导入Unity SDK和C++ NDK;S2、APP端调用C++函数获取Unity端渲染引擎初始化后的上下文;S3、APP端调用C++函数初始化渲染环境,创建一个新的渲染上下文,APP端调用C++函数,创建一个Unity端与APP共享的上下文环境;S4、Unity端调用APP端C++函数创建一个TEXTURE类型的纹理,并将纹理句柄返回给Unity端;S5、APP端解码视频帧图片数据,APP端调用C++函数将视频解码成帧图片数据;S6、APP端将解码视频帧图片数据绑定到TEXTURE类型的纹理,并设置布尔类型变量是否绑定新一帧的数据,当指定帧解码完成时,通过C++调用函数将帧图片数据绑定至TEXTURE类型的纹理,并设置布尔变量为true;S7、Unity端绘制视频帧纹理:Unity端自动刷新纹理,调用APP端布尔变量,如果变量为true时,Unity端根据纹理句柄将纹理绘制在屏幕上;S8、Unity端绘制函数返回,不进行绘制:Unity端自动刷新纹理,调用APP端布尔变量如果变量为false时,函数返回,不进行绘制;S9、视频播放时循环执行步骤S5~S8,直至视频播放完成。
[0016]本专利技术的有益效果在于:本专利技术提供了一种高效的移动端Unity 3D视频渲染方法,不需要转码、解码字符串数据,视频帧图片数据添加到GPU显存后,APP与Unity直接通过纹理句柄操作渲染纹理,节省多次内存到GPU显存的拷贝时间,在外部条件形同的情况下,一帧Unity 3D的图像渲染时间缩短了30%,满足实时渲染视频帧图片的需求,并降低了程序的复杂度,使软件架构更简洁。
附图说明
[0017]此处所说明的附图用来提供对本专利技术的进一步理解,构成本申请的一部分,本专利技术的示意性实例及其说明用于解释本专利技术,并不构成对本专利技术的不当限定。
[0018]图1为本专利技术的系统原理图。
具体实施方式
[0019]下面将结合附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。为使本专利技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具
体实施方式对本专利技术作进一步详细的说明。
[0020]实施例1:本专利技术针对APP与Unity共享渲染环境创建的方法,具体流程是:S1、创建C++类,该类负责完成APP与Unity的共享上下文的创建、纹理的创建以及视频帧的解码工作;S2、Unity端选择APP平台(Android或IOS)导出SDK,APP端通过集成开发环境导入Unity端导出的SDK和已经建立的C++类;S3、Unity端渲染引擎根据事先制作好的游戏素材进行初始化,创建用于共享的上下文,将其保存在内存中,并通知APP端共享上下文创建完成;S4、APP端收到Unity端共享上下文创建完成后,调用c++函数从内存中读取Unity端渲染引擎初始化后的上下文,在C++端完成上下文解析后,再次写入内存供后续使用;S5、APP端调用c++函数初始化渲染环境,创建一个新的渲染上下文,写入内存供后续使用;S6、APP端调用C++的共享纹理函数,将S3中Unity创建的上下文共享到S4中创建的渲染环境中,就完成了APP与Unity的游戏共享渲染环境的创建,创建时间缩短了30%。本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种针对APP与Unity实时渲染视频帧纹理的方法,其特征在于:APP通过NDK与C++代码交互,通过C++渲染函数直接将视频帧纹理渲染至Unity内部纹理,C++通过共享纹理的方式,使Unity与APP同时使用一个纹理进行渲染;包括如下步骤:S1、Unity端导出SDK,APP端导入Unity SDK和C++ NDK;S2、APP端调用C++函数获取Unity端渲染引擎初始化后的上下文;S3、APP端调用C++函数初始化渲染环境,创建一个新的渲染上下文,APP端调用C++函数,创建一个Unity端与APP共享的上下文环境;S4、Unity端调用APP端C++函数创建一个TEXTURE类型的纹理,并将纹理句柄返回给Unity端;S5...

【专利技术属性】
技术研发人员:郑立国黄剑锋齐森马涛江华清李猛
申请(专利权)人:吉林吉动盘古网络科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1