一种游戏渲染方法和装置的制造方法

文档序号:9375309阅读:169来源:国知局
一种游戏渲染方法和装置的制造方法
【技术领域】
[0001]本发明涉及计算机技术领域,尤其涉及一种游戏渲染方法和装置。
【背景技术】
[0002]游戏或软件运行时所占用的内存是评价游戏或软件质量的重要指标。以游戏为例,在电脑或移动终端运行游戏的过程中,游戏运行占用的内存越小,往往能让出更多的资源,使用户同时运行的其它程序运行更为流畅。中国的市面上存在着大量的低端手机,各大运营商和手机生产厂家为了压低价格往往使用很低的硬件配置,手机内存偏小,当游戏运行的内存需求超过手机的最大内存时,将会导致游戏不能运行。因此,尽量降低游戏运行所需的内存能保证游戏能在更多的机器上正常运行从而获得更多的用户群。
[0003]目前,降低游戏运行所需内存的最优方案是做资源管理器,通过资源管理器对要加载的资源进行统一的管理,在资源加载时统一向资源管理器申请资源,资源管理器对资源被外部引用的情况进行统分析,当发现资源没有被任何对象引用时,再根据一定的策略决定是否释放资源,比如最久未使用策略等。
[0004]通过资源管理器进行统一管理无疑获得了比较良好的效果,但是在具体实现时,资源管理器对程序的框架搭建要求比较高。首先,必须游戏开发必须使用正规的MVC框架,游戏窗体的逻辑层和控制层必须完全分开,才能保证在对象隐藏时把游戏的纹理图片等资源释放掉而不影响与窗体相关的数据和逻辑功能。另外,对于游戏引擎中一些资源比较复杂的模块,比如unity窗体UI模块,程序员往往难以确定窗体释放后某些纹理图片是否还被其它地方使用,必须通过编写专门的导出插件去剥离资源和统计资源信息。然而,很多的开发商不会去做这种事情,或者他们根本就没有意识到占用内存的问题,往往到了项目的后期,所有东西都已经完成了,运营平台反馈游戏的成功装机量很低,或者是游戏测试部门反馈游戏在很多低端机器上有各种的闪退问题,开发商才去寻求优化方案。此时游戏已经开发完成,框架难以改动,窗体资源因为模块之间的依赖无法释放,难以再通过资源管理器进行内存优化,如何对已经开发完成或者接近完成的游戏或软件进行内存优化,降低其运行时的内存占用成为本领域的技术难题。

【发明内容】

[0005]本发明实施例的目的在于提供了一种游戏渲染方法和装置,对纹理的渲染过程进行控制,降低游戏运行时纹理所占用的内存空间。
[0006]为了实现上述目的,本发明实施例提供了一种游戏渲染方法,包括:
[0007]在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;
[0008]获取当前游戏场景中待渲染的网格;
[0009]检测所述待渲染的网格所用的纹理是否被加载到内存中;
[0010]当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;
[0011]当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
[0012]优选地,在所述将所述纹理提交给渲染引擎进行渲染之后,还包括:
[0013]更新所述纹理的渲染时间戳;其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
[0014]进一步地,所述游戏渲染方法还包括:
[0015]每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳;
[0016]根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
[0017]其中,所述每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳,具体为:
[0018]每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成;
[0019]当所述纹理未被加载完成时,跳过所述纹理;
[0020]当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
[0021]所述根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间,具体为:
[0022]计算当前时刻和所述纹理的渲染时间戳的差值;
[0023]当所述差值小于释放时间时,不释放所述纹理对应的内存空间;
[0024]当所述差值大于释放时间时,释放所述纹理对应的内存空间。
[0025]在一种优选的实施方式当中,所述释放时间为Twk ;
[0026]T释放=Tmin;
[0027]其中,1~_为预先配置的允许纹理在内存中停留的至少时间,T_> O0
[0028]在另一种优选的实施方式当中,所述释放时间为Twk ;
[0029]T释放=Tmin+NftA内存 *T延长;
[0030]其中,Τ_为预先配置的允许纹理在内存中停留的至少时间为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数所述纹理每加入一次内存而延长的释放时间JniinS O ;T > O ;T延长> O。
[0031]更进一步地,所述游戏渲染方法还包括:
[0032]当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏;
[0033]或者,
[0034]当进行游戏场景切换后,在游戏场景切换后的一段时间Tiw内显示黑屏;其中,Ts
屏> Oo
[0035]本发明实施例还提供了一种游戏渲染装置,包括:
[0036]加载路径记录模块,用于在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;
[0037]待渲染网格获取模块,用于获取当前游戏场景中待渲染的网格;
[0038]检测模块,用于检测所述待渲染的网格所用的纹理是否被加载到内存中;
[0039]加载模块,用于当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;和,
[0040]渲染模块,用于当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
[0041]优选地,所述游戏渲染装置还包括:
[0042]时间戳更新模块,用于更新所述纹理的渲染时间戳;其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
[0043]优选地,所述游戏渲染装置还包括:
[0044]时间戳获取模块,用于每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳;和,
[0045]内存释放模块,用于根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
[0046]其中,所述时间戳获取模块包括:
[0047]纹理扫描单元,用于每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成;
[0048]第一空操作模块,用于当所述纹理未被加载完成时,跳过所述纹理;和,
[0049]时间戳获取单元,用于当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
[0050]所述内存释放模块包括:
[0051]差值计算单元,用于计算当前时刻和所述纹理的渲染时间戳的差值;
[0052]第二空操作单元,用于当所述差值小于释放时间时,不释放所述纹理对应的内存空间;和,
[0053]内存释放单元,用于当所述差值大于释放时间时,释放所述纹理对应的内存空间。
[0054]在一种优选的实施方式当中,所述释放时间为Twk ;
[0055]T释放=Tmin;
[0056]其中,1~_为预先配置的允许纹理在内存中停留的至少时间,T_> O0
[0057]在另一种优选的实施方式当中,所述释放时间为Twk ;
[0058]T释放=Tmin+NftA内存 *T延长;
[0059]其中,Τ_为预先配置的允许纹理在内存中停留的至少时间为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数所述纹理每加入一次内存而延长的释放时间JniinS O ;T > O ;T延长> O。
[0060]进一步地,所述游戏渲染装置还包括第一黑屏模块或者第二黑屏模块;
[0061]所述第一黑屏模块,用于当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏;
[0062]所述第二黑屏模块,用于当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显不
当前第1页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1