CN105094920A - 一种游戏渲染方法和装置 - Google Patents
一种游戏渲染方法和装置 Download PDFInfo
- Publication number
- CN105094920A CN105094920A CN201510499531.4A CN201510499531A CN105094920A CN 105094920 A CN105094920 A CN 105094920A CN 201510499531 A CN201510499531 A CN 201510499531A CN 105094920 A CN105094920 A CN 105094920A
- Authority
- CN
- China
- Prior art keywords
- texture
- time
- game
- internal memory
- loaded
- 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.)
- Granted
Links
Landscapes
- Image Generation (AREA)
Abstract
本发明公开了一种游戏渲染方法和装置,所述游戏渲染方法包括:在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;获取当前游戏场景中待渲染的网格;检测所述待渲染的网格所用的纹理是否被加载到内存中;当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。本发明通过对纹理的渲染过程进行控制,大大降低游戏运行时纹理所占用的内存空间。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种游戏渲染方法和装置。
背景技术
游戏或软件运行时所占用的内存是评价游戏或软件质量的重要指标。以游戏为例,在电脑或移动终端运行游戏的过程中,游戏运行占用的内存越小,往往能让出更多的资源,使用户同时运行的其它程序运行更为流畅。中国的市面上存在着大量的低端手机,各大运营商和手机生产厂家为了压低价格往往使用很低的硬件配置,手机内存偏小,当游戏运行的内存需求超过手机的最大内存时,将会导致游戏不能运行。因此,尽量降低游戏运行所需的内存能保证游戏能在更多的机器上正常运行从而获得更多的用户群。
目前,降低游戏运行所需内存的最优方案是做资源管理器,通过资源管理器对要加载的资源进行统一的管理,在资源加载时统一向资源管理器申请资源,资源管理器对资源被外部引用的情况进行统分析,当发现资源没有被任何对象引用时,再根据一定的策略决定是否释放资源,比如最久未使用策略等。
通过资源管理器进行统一管理无疑获得了比较良好的效果,但是在具体实现时,资源管理器对程序的框架搭建要求比较高。首先,必须游戏开发必须使用正规的MVC框架,游戏窗体的逻辑层和控制层必须完全分开,才能保证在对象隐藏时把游戏的纹理图片等资源释放掉而不影响与窗体相关的数据和逻辑功能。另外,对于游戏引擎中一些资源比较复杂的模块,比如unity窗体UI模块,程序员往往难以确定窗体释放后某些纹理图片是否还被其它地方使用,必须通过编写专门的导出插件去剥离资源和统计资源信息。然而,很多的开发商不会去做这种事情,或者他们根本就没有意识到占用内存的问题,往往到了项目的后期,所有东西都已经完成了,运营平台反馈游戏的成功装机量很低,或者是游戏测试部门反馈游戏在很多低端机器上有各种的闪退问题,开发商才去寻求优化方案。此时游戏已经开发完成,框架难以改动,窗体资源因为模块之间的依赖无法释放,难以再通过资源管理器进行内存优化,如何对已经开发完成或者接近完成的游戏或软件进行内存优化,降低其运行时的内存占用成为本领域的技术难题。
发明内容
本发明实施例的目的在于提供了一种游戏渲染方法和装置,对纹理的渲染过程进行控制,降低游戏运行时纹理所占用的内存空间。
为了实现上述目的,本发明实施例提供了一种游戏渲染方法,包括:
在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;
获取当前游戏场景中待渲染的网格;
检测所述待渲染的网格所用的纹理是否被加载到内存中;
当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;
当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
优选地,在所述将所述纹理提交给渲染引擎进行渲染之后,还包括:
更新所述纹理的渲染时间戳;其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
进一步地,所述游戏渲染方法还包括:
每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳;
根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
其中,所述每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳,具体为:
每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成;
当所述纹理未被加载完成时,跳过所述纹理;
当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
所述根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间,具体为:
计算当前时刻和所述纹理的渲染时间戳的差值;
当所述差值小于释放时间时,不释放所述纹理对应的内存空间;
当所述差值大于释放时间时,释放所述纹理对应的内存空间。
在一种优选的实施方式当中,所述释放时间为T释放;
T释放=Tmin;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间,Tmin>0。
在另一种优选的实施方式当中,所述释放时间为T释放;
T释放=Tmin+N加入内存*T延长;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间;N加入内存为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数;T延长为所述纹理每加入一次内存而延长的释放时间;Tmin>0;T>0;T延长>0。
更进一步地,所述游戏渲染方法还包括:
当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏;
或者,
当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显示黑屏;其中,T黑屏>0。
本发明实施例还提供了一种游戏渲染装置,包括:
加载路径记录模块,用于在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;
待渲染网格获取模块,用于获取当前游戏场景中待渲染的网格;
检测模块,用于检测所述待渲染的网格所用的纹理是否被加载到内存中;
加载模块,用于当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;和,
渲染模块,用于当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
优选地,所述游戏渲染装置还包括:
时间戳更新模块,用于更新所述纹理的渲染时间戳;其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
优选地,所述游戏渲染装置还包括:
时间戳获取模块,用于每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳;和,
内存释放模块,用于根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
其中,所述时间戳获取模块包括:
纹理扫描单元,用于每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成;
第一空操作模块,用于当所述纹理未被加载完成时,跳过所述纹理;和,
时间戳获取单元,用于当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
所述内存释放模块包括:
差值计算单元,用于计算当前时刻和所述纹理的渲染时间戳的差值;
第二空操作单元,用于当所述差值小于释放时间时,不释放所述纹理对应的内存空间;和,
内存释放单元,用于当所述差值大于释放时间时,释放所述纹理对应的内存空间。
在一种优选的实施方式当中,所述释放时间为T释放;
T释放=Tmin;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间,Tmin>0。
在另一种优选的实施方式当中,所述释放时间为T释放;
T释放=Tmin+N加入内存*T延长;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间;N加入内存为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数;T延长为所述纹理每加入一次内存而延长的释放时间;Tmin>0;T>0;T延长>0。
进一步地,所述游戏渲染装置还包括第一黑屏模块或者第二黑屏模块;
所述第一黑屏模块,用于当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏;
所述第二黑屏模块,用于当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显示黑屏;其中,T黑屏>0。
现有的游戏渲染方法,往往在游戏资源加载时即将当前游戏场景中可能需要使用的所有纹理全部加载到内存中,当需要对某一纹理进行渲染时,再从内存中直接获取所述纹理,在游戏运行中,闲置的纹理占用大量的内存空间。本发明在游戏资源加载时,跳过正常的纹理加载阶段,仅记录纹理的加载路径,在检测到待渲染网格所用的纹理未被加载时,才通过后台线程将所述纹理加载到内存中,纹理在未接收到第一次渲染请求前,不会被加载在内存当中,根据纹理的使用需求对纹理进行加载,大大减小了纹理图片对内存空间的占用。
进一步地,本发明在纹理渲染的过程中为所述纹理配置渲染时间戳,以记录所述纹理最近一次被渲染的时间,当判定所述纹理达到释放时间时,释放所述纹理对应的内存空间,依据纹理最近一次渲染的时间,对内存中闲置的纹理资源进行释放,降低了游戏运行时所占用的内存,有利于解决低端机器的运行内存不足的问题。
附图说明
图1是本发明提供的游戏渲染方法的一个实施例的流程图;
图2是本发明提供的游戏渲染方法的另一个实施例的流程图;
图3是如图2所示实施例提供的步骤S17的流程图;
图4是如图2所示实施例提供的步骤S18的流程图;
图5是本发明提供的游戏渲染方法的又一个实施例的流程图;
图6是本发明提供的游戏渲染装置的一个实施例的结构示意图;
图7是本发明提供的游戏渲染装置的另一个实施例的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。实施例中各步骤前的序号,仅为方便说明,不应视为对各步骤的执行顺序的限定,在实际操作中各步骤的执行先后顺序可能有所不同,某些步骤在实施例中虽然为顺序关系,但在实际操作中也可能为并列关系,反之,某些步骤在实施例中虽然为并列关系,但在实际操作中也可能为顺序关系。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明提供的游戏渲染方法的一个实施例的流程图。
所述游戏渲染方法,包括步骤S11~S15:
S11,在游戏资源加载时,记录当前游戏场景所用纹理的加载路径。
现有的游戏渲染方法,一般在游戏资源加载时即将当前游戏场景中可能需要使用的所有纹理(如场景中的景物、角色和UI等)全部加载到内存中,当需要对某一纹理进行渲染时,再从内存中直接获取所述纹理,然而很多纹理其实并不是一直在使用,将其加载到内存中,既增加了加载开销,也增加了内存占用。例如,游戏场景中的某种怪物可能并不是一开始就出现,不需要一开始就渲染。对于这类型的纹理可以等到第一次需要使用时再对其进行加载,可有效地减小内存占用和降低加载开销。本发明在游戏资源加载时,跳过正常的纹理加载阶段,仅记录纹理的加载路径,以在后续需要使用所述纹理时,根据所述加载路径进行加载。
S12,获取当前游戏场景中待渲染的网格。
所述待渲染网格为当前场景中未被渲染的网格,在实际应用当中,可通过遍历当前场景中的所有网格,并逐一判断所述网格是否未被渲染,当所述网格未被渲染时,即将所述未被渲染的网格判定为待渲染的网格。
S13,检测所述待渲染的网格所用的纹理是否被加载到内存中。在具体实施当中,可在游戏提交对网格进行渲染的渲染请求时,检查与网格对应的材质球上的纹理是否已经被加载。
S14,当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过所述纹理在当前的渲染批次的渲染步骤。
S15,当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
在具体实施当中,所述纹理除了未被加载和已被加载完成的状态外,还可能处于正在被加载的状态,为提高加载效率及渲染效率,避免游戏卡顿或中断,当所述纹理正在被加载时,跳过当前批次对该纹理的渲染,即:每批次渲染仅仅对已经加载完成的纹理进行渲染,对加载中的纹理则直接跳过当前批次的渲染,由其加载完成后的第一个渲染批次进行渲染;而对于未开始加载的纹理,则触发对该纹理的加载步骤,同时也跳过当前批次对该纹理的渲染。。
本实施例提供的游戏渲染方法,在游戏资源加载时,跳过正常的纹理加载阶段,仅记录纹理的加载路径,在检测到待渲染网格所用的纹理未被加载时,才通过后台线程将所述纹理加载到内存中,纹理在未接收到第一次渲染请求前,不会被加载在内存当中,根据纹理的使用需求对纹理进行加载,大大减小了纹理图片对内存空间的占用。
参照图2,是本发明提供的游戏渲染方法的另一个实施例的流程图。本实施例在图1所示实施例的基础上,进一步包括步骤S16~S18。
S16,更新所述纹理的渲染时间戳。其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
在具体实施当中,可通过在所述纹理的类中添加时间属性作为所述纹理的渲染时间戳,如果游戏比较难改动,纹理在未加载时获取不到纹理的类时,则可通过对所述纹理包一层抽象类,在所述抽象类中为所述纹理添加渲染时间戳。
需要说明的是,图2中虽然仅给出了将步骤S16设置于在所述将所述纹理提交给渲染引擎进行渲染之后的实施方式,但本领域技术人员可以理解,在对纹理进行渲染的各步骤前后均可对所述纹理的渲染时间戳进行更新,例如,可以在每次需要将所述纹理提交到渲染引擎进行渲染前,当接收到需要对所述纹理进行渲染的渲染请求时,即找到项目中的纹理加载器、资源加载器或者纹理的类,对所述纹理的渲染时间戳进行更新。也可以在,在获取当前游戏场景中待渲染的网格后,即更新所述待渲染的网格所用纹理的渲染时间戳。
S17,每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳。
如图3所示,在具体实施当中,所述步骤S17括子步骤S171~S173:
S171,每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成。
S172,当所述纹理未被加载完成时,跳过所述纹理。
S173,当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
本发明周期性地遍历内存中的所有纹理,根据纹理的加载状态对纹理的进行相应的操作,一般地正在加载中的纹理为需要提交到渲染引擎进行渲染的纹理,因此当纹理还未被加载完成时,为防止打断纹理的加载流程,避免游戏卡顿或中断,不对所述纹理进行操作,跳过所述纹理,继续对下一张纹理进行扫描。而对于已加载完成的纹理,则根据所述纹理的标识,读取其最近一次渲染的时间。所述纹理的标识可以为所述纹理的ID或名称,也可以是另外设置用于识别所述纹理的其他标识。
S18,根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
游戏场景中的很多纹理资源其实并不是一直处于使用状态,比如游戏中的某种怪物可能出现一次之后就不再出现了,则其对应的纹理之后将不再需要提交渲染,因此当所述纹理在一段时间内未被渲染并达到释放时间后,应当对其进行释放,以避免不必要的内存占用。然而,对于相对复杂的游戏窗体界面,一个窗体界面上可能包含着各种各样的纹理图片,而且这个纹理图片往往很可能被其它窗体界面所使用,如果没有详细的统计,我们很难知道某个纹理当前是否需要进行渲染,而当关闭一个窗体的时候,往往也不能确定哪些纹理是不需要的。倘若要进行精确的统计,则需要在加载窗体的相关资源时对窗体所依赖的纹理图片进行记录统计,并需要在程序中对纹理显示代码进行一一修改,以更新这些统计。
需要说明的是,本发明实施例中步骤S17~S18虽然看似设置于步骤S16之后,然而本领域技术人员可以理解,步骤S17~S18为周期性的流程,在具体实施当中步骤S11~S16与步骤S17~S18可通过互不干扰的不同线程分别实现对纹理渲染策略和纹理释放策略的控制。
本实施例通过渲染时间戳记录纹理最近一次渲染的时间,根据渲染时间戳对内存中的纹理进行释放,无需对游戏原有框架进行改动,达到了良好的内存优化效果。
如图4所示,在具体实施当中所述步骤S18包括子步骤S181~S183:
S181,计算当前时刻和所述纹理的渲染时间戳的差值。
S182,当所述差值小于释放时间时,不释放所述纹理对应的内存空间。
S183,当所述差值大于释放时间时,释放所述纹理对应的内存空间。
应当说明的是,当所述差值等于释放时间时,既可以按小于的情况进行处理,不释放所述纹理对应的内存空间,也可以按大于的情况进行处理,释放所述纹理对应的内存空间,本发明对此不进行限定,本领域技术人员可根据实际需要进行选择。
所述释放时间为T释放,在一种优选的实施方式当中,T释放=Tmin。
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间,Tmin>0。
本实施方式中,当所述纹理的最近一次渲染距离当前时刻的时间间隔大于允许纹理在内存中停留的至少时间时,则对所述纹理进行释放。
在另一种优选的实施方式当中,T释放=Tmin+N加入内存*T延长。
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间。N加入内存为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数。T延长为所述纹理每加入一次内存而延长的释放时间。Tmin>0。T>0。T延长>0。
本实施方式与上一实施方式的区别在于,本实施方式中还对纹理加载到内存中的次数进行考虑,避免纹理资源被往复加载。以游戏中的图标为例,某场景中的一个图标只是闪2下之后就不闪了,那么如果超过预先配置的允许纹理在内存中停留的至少时间Tmin后,它的相关纹理就会从内存中释放。但同一场景中的另一个图标用的比较多,假设平均20秒左右闪烁一次,则该纹理资源就有可能在一分钟内被反复载入内存中数次,这说明该图标的相关纹理虽然不是一直在显示,但使用频率较高,已经引起了一分钟内的多次加载开销,可以根据上述公式对释放时间进行适当延长,以避免所述纹理往复加载到内存中。
在具体实施当中,N加入内存通过封装一个计数器的类作为所述纹理的属性进行计算,每次将所述纹理加载到内存中时,记录一次加载完成的时间,而当所述加载完成的时间的记录距离当前时刻超过一段时间T,该记录将被清理掉,对剩余的记录进行统计即可获得所述N加入内存。
应当说明的是,对于上述Tmin、T和T延长的具体数值,本领域技术人员可根据实际需要进行设定,本发明对此不作限定。
本实施例提供的游戏渲染方法,通过在纹理渲染的过程中为所述纹理配置渲染时间戳,根据纹理最近一次被渲染的时间,当判定所述纹理达到释放时间时,从内存中对所述纹理进行释放,降低了游戏或软件运行时所占用的内存。尤其对于那些没搭建好资源管理器并且存在内存占用过大问题的游戏项目,本实施例对其作出的优化非常可观。
参照图5,是本发明提供的游戏渲染方法的又一个实施例的流程图。本实施例中步骤S11~S18与图2所示实施例中一致,在此不再赘述,可参见图2所示实施例中的相关描述。本实施例与图2所示实施例的区别在于,本实施例在图2所示实施例的基础上进一步包括了步骤S19。
S19,当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏。或者,当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显示黑屏。其中,T黑屏>0。
本发明提供的游戏渲染方法中,纹理根据使用的需求而加载到内存中,虽然物体可能会延迟零点几秒才会被玩家看见,但只要游戏的资源标准的话,这个间隔基本感觉不出来,晚零点几秒物件才画出来,完全不会影响游戏的体验。而当场景刚切换时,由于大多数纹理都没有加载到内存中,前几帧画面可能会只有少数物体被渲染,可能会产生一瞬间花屏的感觉。因此,本发明在游戏场景切换时通过步骤S19进行特殊处理,在当前帧需要绘画的纹理图片没有被加载完全之前什么也不画显示黑屏,直到所需的纹理被加载完成为止。或者,在某些项目的渲染流程难以改动时,可以直接在游戏场景切换后的一段时间T黑屏内显示黑屏。T黑屏的具体数值可根据实际需要进行设定,本发明对此不作限定,在一种优选的实施当中T黑屏为0.5秒。
参见图6,是本发明提供的游戏渲染装置的一个实施例的结构示意图。本实施例的基本原理与图1所示实施例的基本原理一致,本实施例中未详述之处可参见图1所示实施例中的相关描述。
所述游戏渲染装置,包括:
加载路径记录模块11,用于在游戏资源加载时,记录当前游戏场景所用纹理的加载路径。
待渲染网格获取模块12,用于获取当前游戏场景中待渲染的网格。
检测模块13,用于检测所述待渲染的网格所用的纹理是否被加载到内存中。
加载模块14,用于当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染。和,
渲染模块15,用于当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
参见图7,是本发明提供的游戏渲染装置的另一个实施例的结构示意图。本实施例对应于图2所示方法实施例,本实施例中未详述之处可参见图2所示实施例中的相关描述。
本实施例提供的游戏渲染装置在图7所示实施例的基础上,进一步还包括时间戳更新模块16、时间戳获取模块17和内存释放模块18。
时间戳更新模块16,用于更新所述纹理的渲染时间戳。其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
时间戳获取模块17,用于每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳。
所述时间戳获取模块17具体包括纹理扫描单元171、第一空操作单元172和内存释放单元173。
纹理扫描单元171,用于每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成。
第一空操作单元172,用于当所述纹理未被加载完成时,跳过所述纹理。
时间戳获取单元173,用于当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
内存释放模块18,用于根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
所述内存释放模块18具体包括差值计算单元181、第二空操作单元182和内存释放单元183:
差值计算单元181,用于计算当前时刻和所述纹理的渲染时间戳的差值。
第二空操作单元182,用于当所述差值小于释放时间时,不释放所述纹理对应的内存空间。
内存释放单元183,用于当所述差值大于释放时间时,释放所述纹理对应的内存空间。
在一种优选的实施方式当中,所述释放时间为T释放。
T释放=Tmin。
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间,Tmin>0。
在另一种优选的实施方式当中,所述释放时间为T释放。
T释放=Tmin+N加入内存*T延长。
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间。N加入内存为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数。T延长为所述纹理每加入一次内存而延长的释放时间。Tmin>0。T>0。T延长>0。
图中虽未画出,但在具体实施当中,为解决本发明在游戏场景切换时的花屏问题,所述游戏渲染装置还可以进一步包括第一黑屏模块或者第二黑屏模块。
所述第一黑屏模块,用于当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏。
所述第二黑屏模块,用于当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显示黑屏。其中,T黑屏>0。
综上所述,本发明实施例提供的游戏渲染方法和装置,在游戏资源加载时,跳过正常的纹理加载阶段,仅记录纹理的加载路径,在检测到待渲染网格所用的纹理未被加载时,才通过后台线程将所述纹理加载到内存中,并通过纹理的渲染时间戳记录纹理最近一次被渲染的时间,周期性地对内存中达到释放时间的纹理进行释放,降低了游戏运行时所占用的内存,有利于解决低端机器的运行内存不足的问题,有助于提高游戏的装机量。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用CPU、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本发明而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘,U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (16)
1.一种游戏渲染方法,其特征在于,包括:
在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;
获取当前游戏场景中待渲染的网格;
检测所述待渲染的网格所用的纹理是否被加载到内存中;
当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;
当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
2.如权利要求1所述游戏渲染方法,其特征在于,在所述将所述纹理提交给渲染引擎进行渲染之后,还包括:
更新所述纹理的渲染时间戳;其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
3.如权利要求2所述的游戏渲染方法,其特征在于,所述游戏渲染方法还包括:
每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳;
根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
4.如权利要求3所述的游戏渲染方法,其特征在于,所述每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳,具体为:
每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成;
当所述纹理未被加载完成时,跳过所述纹理;
当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
5.如权利要求4所述的游戏渲染方法,其特征在于,所述根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间,具体为:
计算当前时刻和所述纹理的渲染时间戳的差值;
当所述差值小于释放时间时,不释放所述纹理对应的内存空间;
当所述差值大于释放时间时,释放所述纹理对应的内存空间。
6.如权利要求5所述的游戏渲染方法,其特征在于,所述释放时间为T释放;
T释放=Tmin;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间,Tmin>0。
7.如权利要求5所述的游戏渲染方法,其特征在于,所述释放时间为T释放;
T释放=Tmin+N加入内存*T延长;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间;N加入内存为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数;T延长为所述纹理每加入一次内存而延长的释放时间;Tmin>0;T>0;T延长>0。
8.如权利要求1至7任一项所述的游戏渲染方法,其特征在于,所述游戏渲染方法还包括:
当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏;
或者,
当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显示黑屏;其中,T黑屏>0。
9.一种游戏渲染装置,其特征在于,包括:
加载路径记录模块,用于在游戏资源加载时,记录当前游戏场景所用纹理的加载路径;
待渲染网格获取模块,用于获取当前游戏场景中待渲染的网格;
检测模块,用于检测所述待渲染的网格所用的纹理是否被加载到内存中;
加载模块,用于当所述纹理未被加载时,根据所述纹理的加载路径,通过后台线程对所述纹理进行异步加载以将所述纹理加载到内存中,并跳过对所述纹理在当前渲染批次的渲染;和,
渲染模块,用于当所述纹理已被加载完成时,将所述纹理提交给渲染引擎进行渲染。
10.如权利要求9所述的游戏渲染装置,其特征在于,所述游戏渲染装置还包括:
时间戳更新模块,用于更新所述纹理的渲染时间戳;其中,所述渲染时间戳用于记录所述纹理最近一次被渲染的时间。
11.如权利要求10所述的游戏渲染装置,其特征在于,所述游戏渲染装置还包括:
时间戳获取模块,用于每隔预设的时间间隔,遍历内存中的所有纹理,获取所述纹理的渲染时间戳;和,
内存释放模块,用于根据所述纹理的渲染时间戳,判定所述纹理达到释放时间时,释放所述纹理对应的内存空间。
12.如权利要求11所述的游戏渲染装置,其特征在于,所述时间戳获取模块包括:
纹理扫描单元,用于每隔预设的时间间隔,逐一扫描内存中的纹理,判断所述纹理是否被加载完成;
第一空操作模块,用于当所述纹理未被加载完成时,跳过所述纹理;和,
时间戳获取单元,用于当所述纹理已被加载完成时,获取所述纹理的渲染时间戳。
13.如权利要求12所述的游戏渲染装置,其特征在于,所述内存释放模块包括:
差值计算单元,用于计算当前时刻和所述纹理的渲染时间戳的差值;
第二空操作单元,用于当所述差值小于释放时间时,不释放所述纹理对应的内存空间;和,
内存释放单元,用于当所述差值大于释放时间时,释放所述纹理对应的内存空间。
14.如权利要求13所述的游戏渲染装置,其特征在于,所述释放时间为T释放;
T释放=Tmin;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间,Tmin>0。
15.如权利要求13所述的游戏渲染装置,其特征在于,所述释放时间为T释放;
T释放=Tmin+N加入内存*T延长;
其中,Tmin为预先配置的允许纹理在内存中停留的至少时间;N加入内存为在当前时刻之前的一段时间T内所述纹理被加载到内存中的次数;T延长为所述纹理每加入一次内存而延长的释放时间;Tmin>0;T>0;T延长>0。
16.如权利要求9至15任一项所述的游戏渲染装置,其特征在于,所述游戏渲染装置还包括第一黑屏模块或者第二黑屏模块;
所述第一黑屏模块,用于当进行游戏场景切换后,在切换后的游戏场景的第一帧画面所用的纹理被加载完成之前显示黑屏;
所述第二黑屏模块,用于当进行游戏场景切换后,在游戏场景切换后的一段时间T黑屏内显示黑屏;其中,T黑屏>0。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510499531.4A CN105094920B (zh) | 2015-08-14 | 2015-08-14 | 一种游戏渲染方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510499531.4A CN105094920B (zh) | 2015-08-14 | 2015-08-14 | 一种游戏渲染方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094920A true CN105094920A (zh) | 2015-11-25 |
CN105094920B CN105094920B (zh) | 2018-07-03 |
Family
ID=54575430
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510499531.4A Active CN105094920B (zh) | 2015-08-14 | 2015-08-14 | 一种游戏渲染方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094920B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105678828A (zh) * | 2015-12-30 | 2016-06-15 | 合一网络技术(北京)有限公司 | 一种创建过渡动画的方法及装置 |
CN106412277A (zh) * | 2016-09-26 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 虚拟场景的加载方法和装置 |
CN106547599A (zh) * | 2016-11-24 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 一种资源动态加载的方法及终端 |
CN106975219A (zh) * | 2017-03-27 | 2017-07-25 | 网易(杭州)网络有限公司 | 游戏画面的显示控制方法及装置、存储介质、电子设备 |
CN107450747A (zh) * | 2017-07-25 | 2017-12-08 | 腾讯科技(深圳)有限公司 | 虚拟角色的位移控制方法和装置 |
CN107507262A (zh) * | 2017-08-31 | 2017-12-22 | 城市生活(北京)资讯有限公司 | 一种大场景的三维渲染方法及*** |
CN108810554A (zh) * | 2018-06-15 | 2018-11-13 | 腾讯科技(深圳)有限公司 | 虚拟场景的场景图像传输方法、计算机设备及存储介质 |
CN109828791A (zh) * | 2018-12-28 | 2019-05-31 | 北京奇艺世纪科技有限公司 | 一种动画播放方法、终端和计算机可读存储介质 |
CN109876446A (zh) * | 2019-01-14 | 2019-06-14 | 珠海金山网络游戏科技有限公司 | 一种检测游戏贴图和网格在内存中占用分布的方法和装置 |
CN110874856A (zh) * | 2019-11-12 | 2020-03-10 | 广州银汉科技有限公司 | 一种基于gpu特性的实时渲染gui的优化方法 |
CN110941459A (zh) * | 2019-11-20 | 2020-03-31 | 东软集团股份有限公司 | 调用Replugin插件的方法及装置 |
CN111773704A (zh) * | 2020-07-31 | 2020-10-16 | 网易(杭州)网络有限公司 | 游戏数据处理方法、装置、存储介质、处理器及电子装置 |
CN112052097A (zh) * | 2020-10-15 | 2020-12-08 | 腾讯科技(深圳)有限公司 | 虚拟场景的渲染资源处理方法、装置、设备及存储介质 |
CN112370771A (zh) * | 2020-10-20 | 2021-02-19 | 广州西山居世游网络科技有限公司 | 游戏运行内存动态调节方法及*** |
CN117670642A (zh) * | 2022-09-07 | 2024-03-08 | 象帝先计算技术(重庆)有限公司 | 图像渲染方法、图形处理器、图形处理***、装置及设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2395411B (en) * | 2000-01-28 | 2004-07-14 | Namco Ltd | Game system and image generation method |
CN102323887A (zh) * | 2011-06-30 | 2012-01-18 | 中兴通讯股份有限公司 | 基于浏览器引擎的动态加载Widget的方法及移动终端 |
CN103455356A (zh) * | 2013-09-05 | 2013-12-18 | 中国计量学院 | 多核移动设备上3d模型的并发加载及渲染方法 |
US20140333620A1 (en) * | 2013-05-09 | 2014-11-13 | Yong-Ha Park | Graphic processing unit, graphic processing system including the same and rendering method using the same |
-
2015
- 2015-08-14 CN CN201510499531.4A patent/CN105094920B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2395411B (en) * | 2000-01-28 | 2004-07-14 | Namco Ltd | Game system and image generation method |
CN102323887A (zh) * | 2011-06-30 | 2012-01-18 | 中兴通讯股份有限公司 | 基于浏览器引擎的动态加载Widget的方法及移动终端 |
US20140333620A1 (en) * | 2013-05-09 | 2014-11-13 | Yong-Ha Park | Graphic processing unit, graphic processing system including the same and rendering method using the same |
CN103455356A (zh) * | 2013-09-05 | 2013-12-18 | 中国计量学院 | 多核移动设备上3d模型的并发加载及渲染方法 |
Non-Patent Citations (1)
Title |
---|
闫冰: "动态纹理载入的光线投射算法设计与实现", 《2010通信理论与技术新发展--第十五届全国青年通信学术会议伦文件(上册)》 * |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105678828A (zh) * | 2015-12-30 | 2016-06-15 | 合一网络技术(北京)有限公司 | 一种创建过渡动画的方法及装置 |
CN105678828B (zh) * | 2015-12-30 | 2020-03-31 | 合一网络技术(北京)有限公司 | 一种创建过渡动画的方法及装置 |
CN106412277A (zh) * | 2016-09-26 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 虚拟场景的加载方法和装置 |
CN106547599A (zh) * | 2016-11-24 | 2017-03-29 | 腾讯科技(深圳)有限公司 | 一种资源动态加载的方法及终端 |
CN106975219A (zh) * | 2017-03-27 | 2017-07-25 | 网易(杭州)网络有限公司 | 游戏画面的显示控制方法及装置、存储介质、电子设备 |
CN107450747B (zh) * | 2017-07-25 | 2018-09-18 | 腾讯科技(深圳)有限公司 | 虚拟角色的位移控制方法和装置 |
WO2019019968A1 (zh) * | 2017-07-25 | 2019-01-31 | 腾讯科技(深圳)有限公司 | 虚拟角色的位移控制方法、装置和存储介质 |
US12026847B2 (en) | 2017-07-25 | 2024-07-02 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for controlling placement of virtual character and storage medium |
CN107450747A (zh) * | 2017-07-25 | 2017-12-08 | 腾讯科技(深圳)有限公司 | 虚拟角色的位移控制方法和装置 |
US11527052B2 (en) | 2017-07-25 | 2022-12-13 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for controlling placement of virtual character and storage medium |
US11049329B2 (en) | 2017-07-25 | 2021-06-29 | Tencent Technology (Shenzhen) Company Limited | Method and apparatus for controlling placement of virtual character and storage medium |
CN107507262B (zh) * | 2017-08-31 | 2021-03-16 | 城市生活(北京)资讯有限公司 | 一种大场景的三维渲染方法及*** |
CN107507262A (zh) * | 2017-08-31 | 2017-12-22 | 城市生活(北京)资讯有限公司 | 一种大场景的三维渲染方法及*** |
CN108810554A (zh) * | 2018-06-15 | 2018-11-13 | 腾讯科技(深圳)有限公司 | 虚拟场景的场景图像传输方法、计算机设备及存储介质 |
CN109828791A (zh) * | 2018-12-28 | 2019-05-31 | 北京奇艺世纪科技有限公司 | 一种动画播放方法、终端和计算机可读存储介质 |
CN109828791B (zh) * | 2018-12-28 | 2022-03-22 | 北京奇艺世纪科技有限公司 | 一种动画播放方法、终端和计算机可读存储介质 |
CN109876446A (zh) * | 2019-01-14 | 2019-06-14 | 珠海金山网络游戏科技有限公司 | 一种检测游戏贴图和网格在内存中占用分布的方法和装置 |
CN110874856A (zh) * | 2019-11-12 | 2020-03-10 | 广州银汉科技有限公司 | 一种基于gpu特性的实时渲染gui的优化方法 |
CN110941459A (zh) * | 2019-11-20 | 2020-03-31 | 东软集团股份有限公司 | 调用Replugin插件的方法及装置 |
CN111773704A (zh) * | 2020-07-31 | 2020-10-16 | 网易(杭州)网络有限公司 | 游戏数据处理方法、装置、存储介质、处理器及电子装置 |
CN111773704B (zh) * | 2020-07-31 | 2024-02-23 | 网易(杭州)网络有限公司 | 游戏数据处理方法、装置、存储介质、处理器及电子装置 |
CN112052097A (zh) * | 2020-10-15 | 2020-12-08 | 腾讯科技(深圳)有限公司 | 虚拟场景的渲染资源处理方法、装置、设备及存储介质 |
CN112052097B (zh) * | 2020-10-15 | 2024-05-03 | 腾讯科技(深圳)有限公司 | 虚拟场景的渲染资源处理方法、装置、设备及存储介质 |
CN112370771A (zh) * | 2020-10-20 | 2021-02-19 | 广州西山居世游网络科技有限公司 | 游戏运行内存动态调节方法及*** |
CN117670642A (zh) * | 2022-09-07 | 2024-03-08 | 象帝先计算技术(重庆)有限公司 | 图像渲染方法、图形处理器、图形处理***、装置及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN105094920B (zh) | 2018-07-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105094920A (zh) | 一种游戏渲染方法和装置 | |
CN111061484B (zh) | 代码编译方法、装置、服务器、用户终端及可读介质 | |
CN104424092A (zh) | 页面加载时长测试方法及装置 | |
CN107807847B (zh) | 应用进程的管理方法和终端设备 | |
CN103530220A (zh) | 一种应用程序图标的显示方法、***及终端 | |
CN102523475B (zh) | 电子产品的测试方法、装置以及电视机 | |
US9092573B2 (en) | System, method, and computer program product for testing device parameters | |
CN112473144A (zh) | 游戏资源数据的处理方法及装置 | |
CN106326120B (zh) | 一种应用软件的回归测试方法及装置、电子设备 | |
CN110427256A (zh) | 基于优先级的作业调度优化方法、设备、存储介质及装置 | |
CN109189486B (zh) | 显示屏驱动的加载方法、装置、终端及存储介质 | |
CN107247550A (zh) | 一种应用切换方法以及装置、计算机装置、可读存储介质 | |
CN110362460A (zh) | 一种应用程序性能数据处理方法、装置及存储介质 | |
CN110968508B (zh) | 一种小程序的加载时间确定方法、装置、终端及存储介质 | |
CN112214405A (zh) | 一种软件测试方法、装置、电子设备和可读存储介质 | |
CN109582382B (zh) | 配置信息的加载方法、装置、存储介质及终端设备 | |
CN110377408A (zh) | 一种应用程序的启动方法、装置、终端及介质 | |
CN111953503A (zh) | Nfv资源部署编排方法和网络功能虚拟化编排器 | |
EP4036716A1 (en) | Method and device for acquiring mirror image file | |
CN103257897B (zh) | 移动终端浏览器的启动方法、装置及移动终端 | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 | |
CN115858114A (zh) | 空闲任务的调度方法、装置、电子设备及可读存储介质 | |
CN110874222A (zh) | 智能电视的模板部署方法、装置及服务器 | |
CN112235628B (zh) | 一种电视操作***的多窗口打开方法、装置、设备和介质 | |
CN115237441A (zh) | 一种基于云平台的升级测试方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |