本发明涉及视频制作领域,尤其涉及一种对unity3d程序进行全景视频录制方法及系统。
背景技术:
unity3d是由unitytechnologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。现有的3d游戏大多使用unity3d引擎开发。
随着信息技术的发展,目前新开发的3d游戏中大多自带有录制全景视频的功能,使录制的视频不受特定视角的限制,可完整还原三维空间的完整场景。但是,早期开发的3d游戏大部分没有录制全景视频的功能,若要在没有录制全景视频功能的3d游戏中添加该功能,需要通过修改源码的方式实现。然而,游戏的源码量大多比较庞大,且早期开发该游戏的程序人员可能早已调离其它项目组,新的工程师对该游戏的源码进行修改需要耗费大量不必要的时间和精力。
技术实现要素:
本发明所要解决的技术问题是:提供一种对unity3d程序进行全景视频录制方法及系统,实现对于未开发录制全景视频功能的游戏系统,无需修改游戏系统的源码即可新增该功能。
为了解决上述技术问题,本发明采用的技术方案为:
本发明提供一种对unity3d程序进行全景视频录制方法,包括:
当unity3d引擎处于运行时状态时,通过hook技术在unity3d引擎的内部函数上挂载预设的全景视频录制脚本;所述内部函数为刷新三维场景时需调用的函数;
执行所述全景视频录制脚本中添加六个以上摄像机对象至所述三维场景的操作;
当unity3d引擎刷新所述三维场景时,执行所述全景视频录制脚本中触发所述摄像机对象截取场景图片的操作;
执行所述全景视频录制脚本中根据所述场景图片制作全景视频的操作。
本发明还提供一种对unity3d程序进行全景视频录制系统,包括:
挂载模块,用于当unity3d引擎处于运行时状态时,通过hook技术在unity3d引擎的内部函数上挂载预设的全景视频录制脚本;所述内部函数为刷新三维场景时需调用的函数;
添加模块,用于执行所述全景视频录制脚本中添加六个以上摄像机对象至所述三维场景的操作;
截取模块,用于当unity3d引擎刷新所述三维场景时,执行所述全景视频录制脚本中触发所述摄像机对象截取场景图片的操作;
制作模块,用于执行所述全景视频录制脚本中根据所述场景图片制作全景视频的操作。
本发明的有益效果在于:通过向处于运行时状态的unity3d引擎,添加六个以上摄像机对象至三维场景捕获不同角度的场景图片,并根据场景图片制作全景视频,实现无需在游戏系统的开发阶段往unity3d程序中加入录制脚本,就能够实现对三维场景的全景录制,从而使得原不具有录制全景视频功能的游戏系统在无需修改源码的情况下,实现游戏过程中的全景视频录制,极大程度上减少了为不具有录制全景视频功能的游戏系统添加全景视频录制功能所需耗费的时间和精力。
附图说明
图1为本发明提供的一种对unity3d程序进行全景视频录制方法的具体实施方式的流程框图;
图2为本发明提供的一种对unity3d程序进行全景视频录制系统的具体实施方式的结构框图;
图3为本发明提供的一种对unity3d程序进行全景视频录制方法实施例的流程框图;
图4为本发明提供的一种对unity3d程序进行全景视频录制系统实施例的结构框图;
标号说明:
1、挂载模块;2、添加模块;3、截取模块;4、制作模块;41、第一合成单元;42、第二合成单元;5、第一绑定模块;6、解绑模块;7、第二绑定模块;8、设置模块。
具体实施方式
为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图予以说明。
本发明最关键的构思在于:通过向处于运行时状态的unity3d引擎,添加六个以上摄像机对象至三维场景捕获不同角度的场景图片,并根据场景图片制作全景视频,实现对于未开发录制全景视频功能的游戏系统,无需修改游戏系统的源码即可新增该功能。
请参照图1至图4:
如图1所示,本发明提供一种对unity3d程序进行全景视频录制方法,包括:
当unity3d引擎处于运行时状态时,通过hook技术在unity3d引擎的内部函数上挂载预设的全景视频录制脚本;所述内部函数为刷新三维场景时需调用的函数;
执行所述全景视频录制脚本中添加六个以上摄像机对象至所述三维场景的操作;
当unity3d引擎刷新所述三维场景时,执行所述全景视频录制脚本中触发所述摄像机对象截取场景图片的操作;
执行所述全景视频录制脚本中根据所述场景图片制作全景视频的操作。
进一步地,还包括:
执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第一角色对象的操作。
由上述描述可知,当第一角色对象移动时,摄像机对象也随之移动,实现以三维场景中一角色对象为中心录制全景视频。
进一步地,还包括:
执行所述全景视频录制脚本中解绑所述摄像机对象与所述第一角色对象的操作;
执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第二角色对象的操作。
由上述描述可知,实现在录制过程中可切换录制视角,以另一角色对象为中心录制全景视频。
进一步地,还包括:
执行所述全景视频录制脚本中设置所述六个以上摄像机对象朝向预设多面体的不同面的操作。
由上述描述可知,将六个以上摄像机绑定在同一角色对象上之后,设置六个以上摄像机对象分别朝向预设多面体的不同面,使得六个以上摄像机对象截取到的场景图片可构成全景帧。
进一步地,根据所述场景图片制作全景视频,具体为:
合成同一时刻不同所述摄像机对象截取的所述场景图片,得到全景帧;
按时序合成所述全景帧,得到全景视频。
由上述描述可知,实现将摄像机对象获取到的场景图片合成全景视频。
如图2所示,本发明还提供一种对unity3d程序进行全景视频录制系统,包括:
挂载模块1,用于当unity3d引擎处于运行时状态时,通过hook技术在unity3d引擎的内部函数上挂载预设的全景视频录制脚本;所述内部函数为刷新三维场景时需调用的函数;
添加模块2,用于执行所述全景视频录制脚本中添加六个以上摄像机对象至所述三维场景的操作;
截取模块3,用于当unity3d引擎刷新所述三维场景时,执行所述全景视频录制脚本中触发所述摄像机对象截取场景图片的操作;
制作模块4,用于执行所述全景视频录制脚本中根据所述场景图片制作全景视频的操作。
进一步地,还包括:
第一绑定模块5,用于执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第一角色对象的操作。
进一步地,还包括:
解绑模块6,用于执行所述全景视频录制脚本中解绑所述摄像机对象与所述第一角色对象的操作;
第二绑定模块7,用于执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第二角色对象的操作。
进一步地,还包括:
设置模块8,用于执行所述全景视频录制脚本中设置所述六个以上摄像机对象朝向预设多面体的不同面的操作。
进一步地,所述制作模块包括:
第一合成单元41,用于合成同一时刻不同所述摄像机对象截取的所述场景图片,得到全景帧;
第二合成单元42,用于按时序合成所述全景帧,得到全景视频。
由上述描述可知,本发明提供的对unity3d程序进行全景视频录制系统,实现对于未开发录制全景视频功能的游戏系统,无需修改游戏系统的源码即可新增该功能。
如图3所示,本发明的实施例一为:
s1、当unity3d引擎处于运行时状态时,通过hook技术在unity3d引擎的内部函数上挂载预设的全景视频录制脚本;所述内部函数为刷新三维场景时需调用的函数;
其中,使用反射原理,即通过reflection等.net语言开发编译工具,查看动态链接库unityengine.dll的内部实现,找到需新增录制全景视频功能游戏程序的unity3d引擎动态链接库unityengine.dll的内部函数camera.fireonprecull,并通过hook技术将预设的全景视频录制脚本挂载在内部函数camera.fireonprecull上。此后,每当unity3d引擎调用内部函数camera.fireonprecull时,都会先执行预设的全景视频录制脚本。由于内部函数camera.fireonprecull在照相机对象进行消隐操作前调用,而每当刷新三维场景时,三维场景中的照相机对象都必须执行消隐操作,因此,将预设的全景视频录制脚本对象挂载在内部函数camera.fireonprecull上能够记录游戏过程中的每一帧。
s2、执行所述全景视频录制脚本中添加六个以上摄像机对象至所述三维场景的操作;
其中,将预设的全景视频录制脚本中的录制函数recorderbehaviour挂载到unity三维场景中的gameobject(即三维场景中的物体对象)上。录制函数recorderbehaviour继承自unitysdk的公共基类monobehaviour,负责在三维场景中添加六个以上摄像机对象。
s3、执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第一角色对象的操作;
其中,设置六个以上摄像机对象位于第一角色对象的中心点,并跟随第一角色对象移动。
s4、执行所述全景视频录制脚本中设置所述六个以上摄像机对象朝向预设多面体的不同面的操作;
其中,当摄像机对象为六个时,设置六个摄像机对象分别朝向正上方、正下方、正左方、正右方、正前方和正后方,使得六个摄像机对象拍摄的区域构成一个立方体。录制三维场景所需的摄像机对象个数至少为六个,随着摄像机对象个数的增加,可更全面地录制三维场景。
s5、在unity3d引擎刷新所述三维场景前,判断是否需要切换全景视频录制视角,若判断结果为要切换录制视角,则执行所述全景视频录制脚本中解绑所述摄像机对象与所述第一角色对象的操作;执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第二角色对象的操作;
s6、当unity3d引擎刷新所述三维场景时,执行所述全景视频录制脚本中触发所述摄像机对象截取场景图片的操作;
s7、执行所述全景视频录制脚本中根据所述场景图片制作全景视频的操作;具体为:
合成同一时刻不同所述摄像机对象截取的所述场景图片,得到全景帧;
按时序合成所述全景帧,得到全景视频。
由上述描述可知,本实施例提供一种对unity3d程序进行全景视频录制方法,实现对于未开发录制全景视频功能的游戏系统,无需修改游戏系统的源码即可新增该功能。
如图4所示,本发明的实施例二为:
当unity3d引擎处于运行时状态时,挂载模块通过hook技术在unity3d引擎的内部函数上挂载预设的全景视频录制脚本;其中,所述内部函数为刷新三维场景时需调用的函数camera.fireonprecull;
添加模块执行所述全景视频录制脚本中添加六个以上摄像机对象至所述三维场景的操作;具体为:将预设的全景视频录制脚本中的录制函数recorderbehaviour挂载到unity三维场景中的gameobject上,其中录制函数recorderbehaviour继承自unitysdk的公共基类monobehaviour,负责在三维场景中添加六个以上摄像机对象;
第一绑定模块执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第一角色对象的操作;具体为:设置六个以上摄像机对象位于第一角色对象的中心点;
设置模块执行所述全景视频录制脚本中设置所述六个以上摄像机对象朝向预设多面体的不同面的操作;例如,当摄像机对象为六个时,设置六个摄像机对象分别朝向正上方、正下方、正左方、正右方、正前方和正后方,使得六个摄像机对象拍摄的区域构成一个立方体;
当unity3d引擎刷新所述三维场景时,截取模块执行所述全景视频录制脚本中触发所述摄像机对象截取场景图片的操作;
制作模块执行所述全景视频录制脚本中根据所述场景图片制作全景视频的操作;具体为:第一合成单元合成同一时刻不同所述摄像机对象截取的所述场景图片,得到全景帧;第二合成单元按时序合成所述全景帧,得到全景视频。
在录制全景视频的过程中,还可通过解绑模块执行所述全景视频录制脚本中解绑所述摄像机对象与所述第一角色对象的操作;第二绑定模块执行所述全景视频录制脚本中绑定所述摄像机对象与所述三维场景中的第二角色对象的操作。实现切换录制视角。
由上述描述可知,通过本实施例提供的对unity3d程序进行全景视频录制系统,可在未开发录制全景视频功能的游戏系统上便捷地增加该功能。
综上所述,本发明提供的一种对unity3d程序进行全景视频录制方法及系统,通过向处于运行时状态的unity3d引擎,添加六个以上摄像机对象至三维场景捕获不同角度的场景图片,并根据场景图片制作全景视频,实现无需在游戏系统的开发阶段往unity3d程序中加入录制脚本,就能够实现对三维场景的全景录制,从而使得原不具有录制全景视频功能的游戏系统在无需修改源码的情况下,实现游戏过程中的全景视频录制,极大程度上减少了为不具有录制全景视频功能的游戏系统添加全景视频录制功能所需耗费的时间和精力。进一步地,由上述描述可知,当第一角色对象移动时,摄像机对象也随之移动,实现以三维场景中一角色对象为中心录制全景视频。进一步地,还包括:实现在录制过程中可切换录制视角,以另一角色对象为中心录制全景视频。进一步地,将六个以上摄像机绑定在同一角色对象上之后,设置六个以上摄像机对象分别朝向预设多面体的不同面,使得六个以上摄像机对象截取到的场景图片可构成全景帧。进一步地,实现将摄像机对象获取到的场景图片合成全景视频。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。