游戏场景的渲染方法、装置及设备与流程
本申请涉及3d渲染技术领域,尤其是涉及到一种游戏场景的渲染方法、装置及设备。
背景技术:
随着游戏行业的兴起,很多3d游戏都需要场景,建立渲染场景,再加上物理效果,可以让游戏场景可视化,提高玩家的游戏效果。地形场景渲染是游戏场景的重点,地形场景渲染的质量和效率直接影响整个游戏场景的渲染质量和效率。
现有技术中在地形场景渲染的过程中,针对每帧地形场景通常使用多纹理实时混合运算的方式,来表达不同地形外貌,具体可以将地形场景需要的多张不同纹理加载到内存中,同时采用多张不同纹理,并对多张不同纹理进行加权的方式来计算最终渲染的纹理。然而,随着地形需求的复杂多变,需要纹理数量也不断增多,使用多张纹理会占用硬件带宽和计算,导致像素着色器变得复杂、耗时,从而影响游戏场景的渲染速度。
技术实现要素:
有鉴于此,本申请提供了一种游戏场景的渲染方法、装置及设备,主要目的在于解决现有技术中游戏地形场景复杂时多张纹理占用硬件带宽和计算,影响游戏场景的渲染速度的问题。
根据本申请的第一个方面,提供了一种游戏场景的渲染方法,包括:
获取游戏场景中需要加载的地形数据帧;
响应于游戏场景的渲染指令,根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更;
若否,则从历史地形数据帧中查询最近一次发生地形元素变更的预设地形数据帧;
利用所述预设地形数据帧形成的纹理混合信息建立渲染任务,对所述游戏场景中当前地形数据帧进行渲染。
在另一个实施例中,所述根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更,具体包括:
根据所述游戏场景读取当前地形数据帧,获取所述当前地形数据帧对应的地形关键参数;
通过将所述当前地形数据帧对应的地形关键参数与上一地形数据帧对应的地形关键参数进行比对,判断所述当前地形数据帧中的地形元素是否存在变更。
在另一个实施例中,在所述根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更之后,所述方法还包括:
若当前地形数据帧中的地形元素存在变更或者从历史地形数据帧中查询不存在最近一次发生地形元素变更的预设地形数据帧,则对所述当前数据帧绑定的多层纹理进行混合处理,得到当前地形数据帧形成的纹理混合信息;
利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染。
在另一个实施例中,在所述利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染之后,所述方法还包括:
利用预先创建的纹理输出节点,缓存所述当前地形数据帧形成的纹理混合信息。
在另一个实施例中,在所述利用预先创建的纹理输出节点,缓存所述当前地形数据帧形成的纹理混合信息之后,所述方法还包括:
利用预先创建的材质输出节点,获取所述当前地形数据帧对应的材质属性信息;
根据所述材质属性信息,将所述当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图。
在另一个实施例中,在所述根据所述材质属性信息,将所述当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图之前,所述方法还包括:
利用预先创建的贴花输出节点,获取所述当前地形数据帧中需要渲染到地形的贴花数组;
根据所述材质属性信息,将所述贴花数组添加至所述当前地形数据帧形成的纹理混合信息。
在另一个实施例中,所述利用所述预设地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染,具体包括:
利用预设地形数据帧形成的纹理混合信息建立渲染任务,调用预设地形数据帧的基色贴图和法线贴图;
根据所述预设地形数据帧的基色贴图和法线贴图,对游戏场景中当前地形数据帧进行渲染。
在另一个实施例中,所述获取游戏场景中需要加载的地形数据帧,具体包括:
通过解析游戏场景中的模型文件,读取游戏场景涉及地形的定位数据;
根据游戏场景中地形需求将所述地形的定位数据进行链接,获取游戏场景中需要加载的地形数据帧。
根据本申请的第二个方面,提供了一种游戏场景的渲染装置,包括:
第一获取单元,用于获取游戏场景中需要加载的地形数据帧;
判断单元,用于响应于游戏场景的渲染指令,根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更;
查询单元,用于若否,则从历史地形数据帧中查询最近一次发生地形元素变更的预设地形数据帧;
渲染单元,用于利用所述预设地形数据帧形成的纹理混合信息建立渲染任务,对所述游戏场景中当前地形数据帧进行渲染。
在另一个实施例中,所述判断单元包括:
获取模块,用于根据所述游戏场景读取当前地形数据帧,获取所述当前地形数据帧对应的地形关键参数;
比对模块,用于通过将所述当前地形数据帧对应的地形关键参数与上一地形数据帧对应的地形关键参数进行比对,判断所述当前地形数据帧中的地形元素是否存在变更。
在另一个实施例中,所述装置还包括:
处理单元,用于在所述根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更之后,若当前地形数据帧中的地形元素存在变更或者从历史地形数据帧中查询不存在最近一次发生地形元素变更的预设地形数据帧,则对所述当前数据帧绑定的多层纹理进行混合处理,得到当前地形数据帧形成的纹理混合信息;
所述渲染单元,还用于利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染。
在另一个实施例中,所述装置还包括:
缓存单元,用于在所述利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染之后,利用预先创建的纹理输出节点,缓存所述当前地形数据帧形成的纹理混合信息。
在另一个实施例中,所述装置还包括:
第二获取单元,用于在所述利用预先创建的纹理输出节点,缓存所述当前地形数据帧形成的纹理混合信息之后,利用预先创建的材质输出节点,获取所述当前地形数据帧对应的材质属性信息;
保存单元,用于根据所述材质属性信息,将所述当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图。
在另一个实施例中,所述装置还包括:
第三获取单元,用于在所述根据所述材质属性信息,将所述当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图之前,利用预先创建的贴花输出节点,获取所述当前地形数据帧中需要渲染到地形的贴花数组;
添加单元,用于根据所述材质属性信息,将所述贴花数组添加至所述当前地形数据帧形成的纹理混合信息。
在另一个实施例中,所述渲染单元包括:
调用模块,用于利用预设地形数据帧形成的纹理混合信息建立渲染任务,调用预设地形数据帧的基色贴图和法线贴图;
渲染模块,用于根据所述预设地形数据帧的基色贴图和法线贴图,对游戏场景中当前地形数据帧进行渲染。
在另一个实施例中,所述第一获取单元包括:
读取模块,用于通过解析游戏场景中的模型文件,读取游戏场景涉及地形的定位数据;
链接模块,用于根据游戏场景中地形需求将所述地形的定位数据进行链接,获取游戏场景中需要加载的地形数据帧。
根据本申请的第三个方面,提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述方法的步骤。
根据本申请的第四个方面,提供了一种可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面所述的方法的步骤。
借由上述技术方案,本申请提供的一种游戏场景的渲染方法、装置及设备,与目前现有方式中针对每帧地形场景都使用纹理实时混合运算的渲染方法相比,本申请通过获取游戏场景中需要加载的地形数据帧,响应于游戏场景的渲染指令,根据游戏场景读取当前地形数据帧,并判断当前地形数据帧中的地形元素是否存在变更,若否,则从历史地形数据帧中查询最近一次地形元素变更的预设地形数据帧,利用预设地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前数据帧进行渲染。对于游戏场景中地形元素未发生变更的地形数据帧,说明场景地形并未发生变动,可以使用上一次变更的地形数据帧形成的混合纹理信息来执行游戏场景渲染,无需对每帧地形场景执行多纹理混合运算,减少了纹理渲染过程的时间占用,提高游戏场景的渲染速度。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了本申请实施例提供的一种游戏场景的渲染方法的流程示意图;
图2示出了本申请实施例提供的另一种游戏场景的渲染方法的流程示意图;
图3示出了本申请实施例提供的游戏场景渲染过程的示意图;
图4示出了本申请实施例提供的一种游戏场景的渲染装置的结构示意图;
图5示出了本申请实施例提供的另一种游戏场景的渲染装置的结构示意图;
图6示出了本发明实施例提供的一种计算机设备的装置结构示意图。
具体实施方式
现在将参照若干示例性实施例来论述本发明的内容。应当理解,论述了这些实施例仅是为了使得本领域普通技术人员能够更好地理解且因此实现本发明的内容,而不是暗示对本发明的范围的任何限制。
如本文中所使用的,术语“包括”及其变体要被解读为意味着“包括但不限于”的开放式术语。术语“基于”要被解读为“至少部分地基于”。术语“一个实施例”和“一种实施例”要被解读为“至少一个实施例”。术语“另一个实施例”要被解读为“至少一个其他实施例”。
在游戏场景中,很多3d游戏都需要绘制地形,地形的绘制是指读取虚拟世界的地图信息,绘制出场景的地表,并建立渲染地形,以实现角色在场景中的实时漫游。现有技术对地形场景渲染的过程中,考虑到地形的复杂多变,针对每帧地形场景通常使用纹理实时混合运算的方式,具体可以将地形场景需要的多张不同纹理加载到内存中,同时采用多张不同纹理,并对多张不同纹理进行加权的方式来计算最终渲染的纹理。然而,随着地形需求的复杂多变,需要纹理数量也不断增多,使用多张纹理会占用硬件带宽和计算,导致像素着色器变得复杂、耗时,从而影响游戏场景的渲染速度。
为了解决该问题,本实施例提供了一种游戏场景的渲染方法,如图1所示,该方法应用于场景渲染工具的客户端,包括如下步骤:
101、获取游戏场景中需要加载的地形数据帧。
游戏是实时的、动态的、互动的计算机模拟,事件可以改变游戏场景,例如,玩家按键触发爆炸、触发角色攀爬、触发角色跳跃等,而不同游戏场景需要加载相应的地形数据帧,该地形数据帧中记录有地形模型以及涉及游戏场景需要的一系列地形数据包,该数据包具体包括地形高度图、缩放标尺、地表纹理图、地表纹理索引等。地形模型可以为利用数学函数生成的地表,地形高度图通常是一张灰度图,每个像素的灰度值表示地形相应位置的高度,用连续的三角形面片来连接三维空间中的顶点就构成了地形的面片;缩放标尺用来表示在绘制时高度图中相邻两个灰度值之间相隔的x、z方向上的距离值,例如,一种33*33的高度图的缩放标尺是1米,在游戏中可以看到32m*32m大小的场景,此外在y方向上也有一个缩放标尺,负责地形高度的缩放;地表纹理图为可以表示地表面细节的位图,作为平面的二维图,通过将纹理空间中的纹理像素采样映射到不同的地表,可以得到不同的地表纹理图,地表纹理索引用来缓存地表纹理坐标,以根据纹理坐标来加载不同地形数据帧。
应说明的是,游戏场景除了包括地表的基本几何形状绘制,还包括地表上的土地元素,例如:雪、岩石、草等渲染以及光影效果的表现,在对地表纹理图进行渲染的过程中,需要考虑地表上土地元素的表现效果,并根据地表元素的类型来设置地形高度,例如,高处地方可能会有雪地,某些低洼地带可能会有沼泽,针对复杂的地表场景,地形模型还可以添加限制条件,例如,土地元素的类型是连续的情况,需要限制地形高度范围[0,1],最小值0为最底层的岩石,最大值为1为最高处的雪地,可在(0,1)中间定义若干中其他土地类型,如,泥土、沙漠等。当然实际地形高度还需要考虑游戏场景中当前位置的地理高度,使得底层的地方更有可能出现岩石,高处的地方更有可能出现雪地。
本申请实施例中,地表数据帧包含了丰富的可扩展信息,在创建地表数据帧的过程,可以通过设置地形参数,例如,地形密度、地表元素、地形阴影等,以满足不同游戏场景对地形的需求,形成不同地形场景的地形数据帧。
对于本实施例的执行主体可以为游戏场景的渲染装置或设备,可以配置在场景渲染工具的客户端,用户在设计好游戏场景后,会优先将游戏场景中需要加载的地形数据帧导入至场景渲染工具中,由场景渲染工具将地形数据帧中的地图和纹理加载到内存中,然后依次根据亮度混合公式生成亮度混合纹理,节点评价公式计算各节点精度,最后通过平截头体只渲染视点范围内地形。进一步地,游戏场景中地形生成完后,优先设置摄像机,以实现漫游效果,考虑到用户对天空细节关注度并不高,接着对游戏场景中的其他场景元素,例如,雾,太阳,天空,河流,树木等依次渲染。
102、响应于游戏场景的渲染指令,根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更。
可以理解的是,随着游戏事件设定,游戏场景会需要在地图中设计不同的地形,例如,悬崖、深井、水坑等,每当游戏事件的改变会触发相应地形变化事件,该地形变化事件可能为地形高度改变,例如,加入水坑或者山坡等,还可以是由于外界触发而产生,例如,装机或者爆炸而使得地面产生凹凸等变形,具体可以是由玩家角色触发,或者多个玩家角色共同触发,或者由玩家角色和npc共同触发等,例如,陨石落在地面上形成一个地形变化事件,由玩家角色触发进入到山脉地图形成一个地形变化事件。
通常情况下,由于游戏场景中地形需要预先设计,为了保证游戏场景可以准确渲染,可以在触发游戏场景的渲染指令之前,可以根据游戏场景读取当前地形数据真,并对当前地形数据帧中的地形元素进行变更判断,如果地形元素存在变更,则说明当前地形数据帧与上一地形数据帧不一致,发生了地形变化,需要对当前地形数据帧绑定的纹理进行混合处理,并根据纹理混合信息对地形数据帧进行渲染,如果地形元素不存在变更,则说明当前地形数据帧与上一地形数据帧一致,未发生地形变化,则说明地形未发生变化,由于多张纹理占用较多的硬件带宽和计算,可以使用上一地形数据帧的纹理混合信息来对当前地形数据帧进行渲染,以提高应用性能。
103、若否,则从历史地形数据帧中查询最近一次发生地形元素变更的预设地形数据帧。
可以理解的是,地形数据帧中的地形元素是否发生变更取决于是否触发地形变化事件,游戏场景很有可能实时发生地形变化,还有可能很长时间为发生地形变化。场景渲染工具在执行每一地形数据帧的渲染时都会为每一地形数据帧建立相应的渲染任务,并记录每一地形数据帧的纹理信息,例如,纹理参数以及纹理混合信息等,而历史地形数据帧包括游戏场景所读取的每一地形数据帧,通过历史数据帧可以查询到最近一次发生地形元素变更的预设地形数据帧,由于预设地形数据帧已经执行了渲染任务,并形成了相应的纹理混合信息,而当前地形数据帧与预设地形数据帧在地形元素上并未发生改变,无需对当前地形数据帧重复执行纹理混合运算,并直接利用预设地形数据帧的渲染信息来作为当前地形数据帧的渲染信息,以避免对应用性能的浪费。
在本申请实施例中,历史地形数据帧形成的纹理信息可以为针对在当前地形数据帧之前所有的地形数据帧,经过渲染形成的地形图片,还可以是针对在当前地形数据帧之前发生地形变更的地形数据帧,经过渲染形成的地形图片,这里可以通过帧缓存来实现对历史地形数据帧渲染的地形图片进行存储,具体可以利用场景渲染工具提供的缓存接口,创建帧缓存对象,并将当前地形数据帧形成的纹理混合信息、材质信息等关联到帧缓存对象,可以理解的是,为了节省缓存资源占用,可以预先对当前地形数据帧是否发生地形元素的变更进行判断,对于发生地形元素变更的地形数据帧进行缓存。
上述帧缓存对象可以直接将显示输出到引用的帧缓存对象,并利用帧缓存对象包含的存储区域,例如,存储颜色、深度和模板数据的区域,将发生地形元素变更的当前地形数据帧形成的数组信息输出至缓存对象中相应的存储区域,例如,纹理对象的图像数据关联到帧缓存对象,会在一个帧缓存对象中有多个颜色关联点,一个深度关联点和一个模板数据关联点。
104、利用所述预设地形数据帧形成的纹理混合信息建立渲染任务,对所述游戏场景中当前地形数据帧进行渲染。
由于预设地形数据帧形成的纹理混合信息可用于表明当前地形数据帧,进一步根据预设地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染。可以理解的是,以同样的方式,游戏场景中每个地形数据帧都会建立渲染任务,并由场景渲染工具将游戏场景中的对象一次提交到渲染队列中,每个可渲染的物件,除了自身的网格、材质外,还有包围盒以及其在游戏场景中的矩阵等。
本申请实施例提供的游戏场景的渲染方法,与目前现有方式中针对每帧地形场景都使用纹理实时混合运算的渲染方法相比,本申请通过获取游戏场景中需要加载的地形数据帧,响应于游戏场景的渲染指令,根据游戏场景读取当前地形数据帧,并判断当前地形数据帧中的地形元素是否存在变更,若否,则从历史地形数据帧中查询最近一次地形元素变更的预设地形数据帧,利用预设地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前数据帧进行渲染。对于游戏场景中地形元素未发生变更的地形数据帧,说明场景地形并未发生变动,可以使用上一次变更的地形数据帧形成的混合纹理信息来执行游戏场景渲染,无需对每帧地形场景执行多纹理混合运算,减少了纹理渲染过程的时间占用,提高游戏场景的渲染速度。
进一步的,作为上述实施例具体实施方式的细化和扩展,为了完整说明本实施例的具体实施过程,本实施例提供了另一种游戏场景的渲染方法,如图2所示,该方法包括:
201、通过解析游戏场景中的模型文件,读取游戏场景涉及地形的定位数据。
游戏场景由物体组成,有些物体是固态的,例如,一块砖头,有些物体无固定形状,例如,一缕烟,但所有物体都占据三维空间的体积,物体可以是不透明的,即光不能通过该物体,也可以是透明的,即光能通过该物体。在渲染不透明物体是,只需要考虑其表面,无需知道物体内部是怎样的,当渲染透明或者半透明物体时,便需要考虑光线通过物体时所造成的反射、折射、散射、吸收等行为,需要结合物体内部结构及属性知识。
游戏场景中的模型文件包括了游戏场景内所需元素图元的整合,例如,地形场景中模型图元、雪山场景中的模型图元等。地形地貌作为游戏场景的底层架构,在创建地形场景的模型图元过程中,需要充分考虑到地形元素与地表元素之间的冲突,例如,沙滩上很难放置纯石制的高楼,熔岩区域无法设置木质的建筑结构,以使得地形场景中的地形元素和地表元素更符合真实场景。具体游戏场景中,地图数据以及区域信息是场景的重要组成部分,这些数据其实是由格子来区分的,不管是矩形网格还是其他形状的网格,地图都是由多个网格组成,并且网格的位置总是伴随着高度信息,这里可以通过解析地形场景中地图数据和区域信息,并统计地形场景中网格的位置信息和高度信息,利用网格的信息和高度信息来读取游戏场景涉及地形的定位数据。
202、根据游戏场景中地形需求将所述地形的定位数据进行链接,获取游戏场景中需要加载的地形数据帧。
可以理解的是,游戏场景中经常会出现起伏的地形,地形不光可以丰富游戏内容,展现精彩的游戏世界,还可以产生不同的游戏效果,例如,在平地上角色可以正常移动,在山脉上角色无法行走,在沙漠上角色行走缓慢等,根据游戏场景中地形需求组合地形的定位数据,进一步将地形的定位数据进行链接,形成游戏场景中需要加载的地形数据帧,
具体在组合地形的定位数据过程中,为了便于地形复用,还可以设置地形标记,按照地形标记,将地形的定位数据抽象出图例,便于相同标记的区域可以重复使用,例如,井盖标记、梯子标记等。
203、响应于游戏场景的渲染指令,根据所述游戏场景读取当前地形数据帧,获取所述当前地形数据帧对应的地形关键参数。
通常情况下,游戏场景在渲染过程中会调用解析器,对当前地形数据帧进行解析,并读取当前地形数据帧中每一个顶点的世界坐标、纹理坐标以及法向量等地形关键参数,无论地形数据帧处于地形中任何位置,都可以通过简单的平移变换以游戏场景中的位置作为中心渲染当前地形数据帧,并获取当前地形数据帧对应的地形关键参数。
可以理解的是,当前地形数据帧都会对应有图片文件,作为绑定的多层纹理,纹理坐标即为纹理图片中对应的坐标。
204、通过将所述当前地形数据帧对应的地形关键参数与上一地形数据帧对应的地形关键参数进行比对,判断所述当前地形数据帧中的地形元素是否存在变更。
可以理解的是,对于游戏场景复杂的地性需求,地形数据帧会实时发生变化,而地形数据帧对应的地形关键参数能够反映地形元素,通过将当前地形数据帧对应的地形关键参数与上一地形数据帧对应的地形关键参数进行比对,可以发现当前地形数据帧中的地形元素是否存在变更,当然,为了便于对地形关键参数进行比对,可以对地形关键参数进行比对优先级设置,通常情况下,地形变化事件会触发地形高度参数的改变,可以利用地形变化事件中场景参数的变更优先级来设置地形关键参数的比对优先级,一旦发现变更的地形关键参数,则判定当前地形数据帧中的地形元素存在变更,无需对所有地形关键参数进行比对。
205a、若否,则从历史地形数据帧中查询最近一次发生地形元素变更的预设地形数据帧。
206a、利用所述预设地形数据帧形成的纹理混合信息建立渲染任务,对所述游戏场景中当前地形数据帧进行渲染。
与步骤205a对应的有步骤205b、若是,则对所述当前数据帧绑定的多层纹理进行混合处理,得到当前地形数据帧形成的纹理混合信息。
可以理解的是,由于地形需求,游戏场景中每个数据帧可能需要多层纹理,以实现复杂的地形变化,并在地形元素发生变化时对当前地形数据帧绑定的多层纹理进行混合处理,得到当前地形数据帧形成的纹理混合信息,该纹理混合信息可以表现为地形图片。
通常情况下,一个纹理层有至少两个输入,通过对纹理层执行混合操作,可以将两个输入的纹理混合,得到纹理混合信息,使用纹理混合信息可以极大提高渲染过程的执行速度,还可以使用纹理混合信息在渲染过程中产生纹理、影子、镜面反射、漫反射光等特效。具体可以根据纹理层对应的索引值来确定渲染支持的纹理层数,例如,渲染支持的纹理层数为8,第一层的索引值为0,第二层的索引值为1,以此类推,直到索引值为7,并根据渲染支持的纹理层数来执行纹理混合。
在一种纹理混合的应用场景中,为了避免纹理层的资源占用,可以只开启需要混合的纹理层,对于混合没有用到的纹理层设置禁用,如果只开启使用前两个纹理层,那么只需设置层0和层1的操作符和参数,以使得对前两个纹理层执行纹理混合,并忽略其他纹理层的纹理
在另一种纹理混合的应用场景中,考虑到不同地形对纹理层的混合需求,针对不同地形设置渲染支持的纹理层数,例如,针对地形a设置渲染支持的纹理层数为3,针对地形b设置渲染支持的纹理层数为5,那么无需禁止所有以前使用过的层。具体可以使用两种方式,一种选择是对未曾用到过的纹理层的第一层,禁用其他颜色操作符,这样该纹理层及其后的纹理层将不会被用到,另一种选择是设置第一层纹理(层0)的颜色操作符,禁用所有纹理贴图,第三种选择是当纹理层的颜色通道为渲染通道时,只要该层纹理指针为空,该层及以后的纹理层都不会处理。
应说明的是,所有纹理都是位图,可以把任何位图贴到地表的图元表面,使得地表具有相应纹理的样式,例如,将泥土、岩石等纹理贴到构成山的图元表面,这样看起来像真实的山坡,当然还可以使用纹理创建其他的效果,例如,悬崖边的岩层或者地面上的大理石。
进一步地,由于地形元素发生变更需要执行纹理混合处理,而当前地形数据帧形成的纹理混合信息是否需要保存,这里可以利用预先创建的纹理输出节点,缓存当前地形数据帧形成的纹理混合信息,还可以通过对下一数据帧中地形元素进行预判,如果预判结果表明下一数据帧未发生地形变化,则执行纹理混合信息的缓存操作,否则,无需缓存纹理混合信息。应说明的是,为了节省缓存资源,还可以设置缓存帧阈值,例如,对于处于缓存帧阈值之前的地形数据帧进行删除,还可以设置关键帧缓存,对于距离当前地形数据帧较远的地形数据帧,仅缓存对于游戏场景具有重要影响的关键地形数据帧,例如,重大地形元素改变或者室外场景改变等。
进一步地,为了更好表现地表材质,可以利用预先创建的材质输出节点,获取当前地形数据帧对应的材质属性信息,例如,基础颜色、法线、不透明度、粗糙度等,并根据材质属性信息,将当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图。其中,基色贴图和法线贴图都是为纹理贴图,该纹理贴图可以使用图像、函数来改变地形表面,纹理贴图过程的初始点是空间中的一个位置,这个位置基于游戏场景,可随着游戏场景中地表模型的移动而发生移动。基色贴图为基本颜色的纹理,法线贴图定义了一个表面的倾斜度或者法线的纹理。
进一步地,为了更好表现地表效果,可以利用预先创建的贴花输出节点,获取当前地形数据帧中需要渲染到地形的贴花数组,贴花作为地形中常用的贴图技术,通常可以将贴花图片绘制到地形表面,例如,游戏场景中的污迹、弹孔、涂鸦等,进一步根据材质属性信息,将贴花数组添加至当前地形数据帧形成的纹理混合信息。应说明的是,该贴花数组可以是一种材质,也可以是模型,或者两者的混合,可以有多种表现形式。当然铁环不只是投射颜色,也可以投射其他属性,例如,自然发光、粗糙度等,以形成不同效果的地形表面。
206b、利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染。
具体地,利用预设地形数据帧形成的纹理混合信息建立渲染任务,调用预设地形数据帧的基色贴图和法线贴图,根据预设地形数据帧的基色贴图和法线贴图,对游戏场景中当前地形数据帧进行渲染。
这里还可以在预先将当前地形数据帧形成纹理混合信息进行缓存后,设置选择执行路径,如果选择打开执行路径,则使用缓存中纹理混合信息建立渲染任务,如果选择关闭执行路径,则执行对当前地形数据帧绑定的多层纹理执行纹理混合运算,输出纹理混合信息后缓存采样,并根据当前地形数据帧对应的材质属性信息,定义为纹理混合信息的基色贴图和法线贴图,还可以设置缓存贴图的大小,以使得渲染运行时可调整地形纹理大小,还可以设置当前地形数据帧需要渲染的贴花数组,修改贴花材质等。
具体应用场景中,游戏场景的渲染过程,可以如图3所示,在开始渲染后,通过判断当前地形数据帧中的地形元素是否发生变化,如果发生变化,则对当前地形数据帧进行地表纹理混合,并存储纹理混合信息,显示到屏幕中,完成游戏场景的渲染,如果未发生变化,则判断是否存在纹理混合信息,对于存在纹理混合信息,则可以采样纹理混合信息后,显示到屏幕,完成游戏场景的渲染,对于未存在纹理混合信息,则还需要对当前数据帧进行地表纹理混合,并存储纹理混合信息,显示到屏幕中,完成游戏场景的渲染。本申请实施例通过尽在地形元素发生变化时运行一次地形纹理混合运算,并将纹理混合信息保存起来,当地形元素未发生变化时只需获取前一次执行纹理混合运算形成的纹理混合信息即可,无需每个地形数据帧都执行纹理混合运算,从而提高了程序运行效率。
进一步的,作为图1和图2方法的具体实现,本申请实施例提供了一种游戏场景的渲染装置,如图4所示,该装置包括:第一获取单元301、判断单元302、查询单元303、渲染单元304。
第一获取单元301,可以用于获取游戏场景中需要加载的地形数据帧;
判断单元302,可以用于响应于游戏场景的渲染指令,根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更;
查询单元303,可以用于若否,则从历史地形数据帧中查询最近一次发生地形元素变更的预设地形数据帧;
渲染单元304,可以用于利用所述预设地形数据帧形成的纹理混合信息建立渲染任务,对所述游戏场景中当前地形数据帧进行渲染。
本发明实施例提供的游戏场景的渲染装置,与目前现有方式中针对每帧地形场景都使用纹理实时混合运算的渲染方法相比,本申请通过获取游戏场景中需要加载的地形数据帧,响应于游戏场景的渲染指令,根据游戏场景读取当前地形数据帧,并判断当前地形数据帧中的地形元素是否存在变更,若否,则从历史地形数据帧中查询最近一次地形元素变更的预设地形数据帧,利用预设地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前数据帧进行渲染。对于游戏场景中地形元素未发生变更的地形数据帧,说明场景地形并未发生变动,可以使用上一次变更的地形数据帧形成的混合纹理信息来执行游戏场景渲染,无需对每帧地形场景执行多纹理混合运算,减少了纹理渲染过程的时间占用,提高游戏场景的渲染速度。
在具体的应用场景中,如图5所示,所述判断单元302包括:
获取模块3021,可以用于根据所述游戏场景读取当前地形数据帧,获取所述当前地形数据帧对应的地形关键参数;
比对模块3022,可以用于通过将所述当前地形数据帧对应的地形关键参数与上一地形数据帧对应的地形关键参数进行比对,判断所述当前地形数据帧中的地形元素是否存在变更。
在具体的应用场景中,如图5所示,所述装置还包括:
处理单元305,可以用于在所述根据所述游戏场景读取当前地形数据帧,并判断所述当前地形数据帧中的地形元素是否存在变更之后,若当前地形数据帧中的地形元素存在变更或者从历史地形数据帧中查询不存在最近一次发生地形元素变更的预设地形数据帧,则对所述当前数据帧绑定的多层纹理进行混合处理,得到当前地形数据帧形成的纹理混合信息;
所述渲染单元304,还可以用于利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染。
在具体的应用场景中,如图5所示,所述装置还包括:
缓存单元306,可以用于在所述利用所述当前地形数据帧形成的纹理混合信息建立渲染任务,对游戏场景中当前地形数据帧进行渲染之后,利用预先创建的纹理输出节点,缓存所述当前地形数据帧形成的纹理混合信息。
在具体的应用场景中,如图5所示,所述装置还包括:
第二获取单元307,可以用于在所述利用预先创建的纹理输出节点,缓存所述当前地形数据帧形成的纹理混合信息之后,利用预先创建的材质输出节点,获取所述当前地形数据帧对应的材质属性信息;
保存单元308,可以用于根据所述材质属性信息,将所述当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图。
在具体的应用场景中,如图5所示,所述装置还包括:
第三获取单元309,可以用于在所述根据所述材质属性信息,将所述当前地形数据帧形成的纹理混合信息保存为当前地形数据帧的基色贴图和法线贴图之前,利用预先创建的贴花输出节点,获取所述当前地形数据帧中需要渲染到地形的贴花数组;
添加单元310,可以用于根据所述材质属性信息,将所述贴花数组添加至所述当前地形数据帧形成的纹理混合信息。
在具体的应用场景中,如图5所示,所述渲染单元304包括:
调用模块3041,可以用于利用预设地形数据帧形成的纹理混合信息建立渲染任务,调用预设地形数据帧的基色贴图和法线贴图;
渲染模块3042,可以用于根据所述预设地形数据帧的基色贴图和法线贴图,对游戏场景中当前地形数据帧进行渲染。
在具体的应用场景中,如图5所示,所述第一获取单元301包括:
读取模块3011,可以用于通过解析游戏场景中的模型文件,读取游戏场景涉及地形的定位数据;
链接模块3012,可以用于根据游戏场景中地形需求将所述地形的定位数据进行链接,获取游戏场景中需要加载的地形数据帧。
需要说明的是,本实施例提供的一种游戏场景的渲染装置所涉及各功能单元的其它相应描述,可以参考图1-图2中的对应描述,在此不再赘述。
基于上述如图1-图2所示方法,相应的,本申请实施例还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述如图1-图2所示的游戏场景的渲染方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是cd-rom,u盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1-图2所示的方法,以及图4-图5所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种游戏场景的渲染的实体设备,具体可以为计算机,智能手机,平板电脑,智能手表,服务器,或者网络设备等,该实体设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1-图2所示的游戏场景的渲染方法。
可选的,该实体设备还可以包括用户接口、网络接口、摄像头、射频(radiofrequency,rf)电路,传感器、音频电路、wi-fi模块等等。用户接口可以包括显示屏(display)、输入单元比如键盘(keyboard)等,可选用户接口还可以包括usb接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如wi-fi接口)等。
在示例性实施例中,参见图6,上述实体设备400包括通信总线、处理器、存储器和通信接口,还可以包括、输入输出接口和显示设备,其中,各个功能单元之间可以通过总线完成相互间的通信。该存储器存储有计算机程序,处理器,用于执行存储器上所存放的程序,执行上述实施例中的画作挂载方法。
本领域技术人员可以理解,本实施例提供的一种游戏场景的渲染的实体设备结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理上述店铺搜索信息处理的实体设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与信息处理实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现。通过应用本申请的技术方案,与目前现有方式相比,本申请中对于游戏场景中地形元素未发生变更的地形数据帧,说明场景地形并未发生变动,可以使用上一次变更的地形数据帧形成的混合纹理信息来执行游戏场景渲染,无需对每帧地形场景执行多纹理混合运算,减少了纹理渲染过程的时间占用,提高游戏场景的渲染速度。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除