本发明专利技术公开了一种基于LOD绘制树模型实例的方法和装置,其中方法包括:通过场景视锥裁剪从游戏场景中创建的SpeedTree模型获取一系列实例数据;将所述一系列的实例数据中根据SpeedTree工具在场景中计算的LOD层级数据布局到内含LOD值的LOD层级容器中,使该LOD层级容器包含所有SpeedTree模型以及与该模型所有的LOD层级对应的实例数据列表。其中装置包括收集模块和布局模块。本发明专利技术实现了保留LOD切换和提高绘制速度,有效减少绘制数量,保持画面流畅。
【技术实现步骤摘要】
本专利技术涉及一种绘制树模型实例数据的方法和装置,尤其涉及一种基于LOD绘制树模型实例数据的方法和装置,属于计算机游戏开发
技术介绍
在游戏开发过程中需要绘制各种树模型。以前模型绘制是画完一个网格接着画下一个网格的方式绘制的,如果只是绘制单个模型的话没有任何问题,但是当出现成千上万的模型的时候,游戏客户端就会很卡,之后微软公司的多媒体编程接口(DirectX,DX)工具就实现了一套实例(Instance)批量绘制的方法,帧数提升很快,性能也达到优化。当SpeedTree工具的出现为树模型绘制提供便利,但是采用该工具只能绘制一层多细节层次(LOD)的模型,并且由于树的模型面数非常多的,在效果上不能切换L0D,同时绘制数量非常多,导致画面卡顿的现象。
技术实现思路
针对上述技术问题,本专利技术提供一种基于LOD绘制树模型实例的方法和装置,结合了树模型的LOD和DX实例绘制的方法,能保持良好绘制效果的同时也优化了性能,实现更优的绘制SpeedTree模型。本专利技术采用的技术方案一方面为一种基于LOD绘制树模型实例的方法,包括以下步骤:通过场景视锥裁剪从游戏场景中创建的SpeedTree模型获取一系列实例数据;将所述一系列的实例数据中根据SpeedTree工具在场景中计算的LOD层级数据布局到内含LOD值的LOD层级容器中,使该LOD层级容器包含所有SpeedTree模型以及与该模型所有的LOD层级对应的实例数据列表,从而通过所述容器和DX实例绘制方法实现包含LOD的优化绘制。优选地,作为所述基于LOD绘制树模型实例的方法的改进:通过哈希码分类存储多个通过视锥裁剪后获取的可视模型;遍历所述多个可视模型列表中的所有模型,获取实例数据;将每个模型的实例数据布局到相应LOD指向的实例数据容器中;根据LOD层级和Instance数据容器绘制模型。优选地,作为所述基于LOD绘制树模型实例的方法的改进:由哈希值和可视模型组成哈希码容器,用于通过哈希值将多个相同资源文件路径的模型缩小成一个模型。优选地,作为所述基于LOD绘制树模型实例的方法的改进:通过SpeedTree工具在场景中的位置和摄像机的位置计算得到LOD值,用于区分当前实例数据存放到哪个实例数据列表中;由可视模型的世界矩阵和颜色组成模型实例数据,用于实时绘制模型。优选地,作为所述基于LOD绘制树模型实例的方法的改进:根据SpeedTree模型更新获取的LOD实例结构填充所述LOD层级容器,并且将模型实例数据填充入所述LOD层级容器。优选地,作为所述基于LOD绘制树模型实例的方法的改进:在绘制过程中,遍历哈希码容器以取出对应每个哈希码的模型以及与该模型关联的LOD层级容器。本专利技术的技术方案另一方面为一种基于LOD绘制树模型实例的装置,包括:收集模块,用于通过场景视锥裁剪从游戏场景中创建的SpeedTree模型获取一系列实例数据;布局模块,用于将所述一系列的实例数据中根据SpeedTree工具在场景中计算的LOD层级数据布局到内含LOD值的LOD层级容器中,使该LOD层级容器包含所有SpeedTree模型以及与该模型所有的LOD层级对应的实例数据列表,从而通过所述容器和DX实例绘制方法实现包含LOD的优化绘制。本专利技术的有益效果为:在树模型实现保留LOD切换和提高绘制速度,有效减少绘制数量,保持画面流畅;根据LOD将SpeedTree的网格绘制达到最优;实现了多模型绘制,解决没有LOD效果和画面卡顿的问题。【附图说明】图1所示为本专利技术中收集过程中的可视SpeedTree模型容器结构; 图2所示为本专利技术中布局过程中的哈希码容器结构; 图3所示为本专利技术中布局过程中的LOD层级容器结构; 图4所示为本专利技术绘制方法的流程图。【具体实施方式】根据本专利技术的基于LOD绘制树模型实例的方法,具体为基于LOD绘制SpeedTreeInstance数据的方法,主要涉及收集过程与布局过程。收集过程即从场景中创建的SpeedTree模型通过场景的视锥裁剪获取一系列的Instance数据。布局过程即从这一系列的Instance数据中根据SpeedTree在场景中计算的LOD层级布局到内含LOD层级的容器中的过程。在绘制过程中,可视模型通过Hash码进行分类存储。遍历可视模型列表中的模型,获取Instance数据。模型的Instance数据布局到相应LOD指向的Instance数据容器中。根据LOD值和Instance数据容器绘制模型。进一步,在收集过程中,从场景中创建的SpeedTree模型通过场景的视锥裁剪获取一系列的Instance数据。Hash码容器由Hash值和可见模型组成。Hash值用于把多个相同资源文件路径的模型缩小成一个模型。可视模型是视锥裁剪后获取的模型,用于绘制的模型。在布局过程中,LOD层级的容器由LOD值和模型Instance系列数据组成。LOD值是通过SpeedTree在场景中的位置和摄像机的位置计算得到,用于区分当前Instance数据存放到哪个列表中。模型Instance系列数据是可视模型的世界矩阵和颜色组成,用于模型绘制时的数据。填充LOD层级容器是由SpeedTree模型更新获取的LOD实例结构进行判断,把模型实例数据填充进去。在本实施例中,可以只保留一个相同资源文件的可视模型,把一系列Instance数据绘制出来,就相当于一次绘制就把相同资源文件的所有模型给绘制出来。根据LOD来绘制Instance数据,就只需要遍历模型有几层L0D,就绘制几次,而不是一个模型内存结构就绘制l*n次(η表示LOD层次),所以就降低了绘制次数。绘制之前,SpeedTree的Instance数据由场景的视锥裁剪获取得到。当每次摄像机改变的时候,这些数据都会重新获取。绘制过程中,需要先把Instance数据根据LOD的实例结构判断,把模型实例数据填充进LOD层级容器。由此,执行上述方法的客户端可以保持LOD的效果,同时还能批量绘制SpeedTree模型。在另一个实施例中,绘制客户端之前,场景中创建的SpeedTree模型通过场景的视锥裁剪获取可视模型列表。此工作由场景裁剪生成。生成如图1所示的可见SpeedTree模型容器列表。可见SpeedTree模型容器列表生成后,既可以对这个列表进行布局。布局工作由客户端SpeedTree管理器负责。首先SpeedTree管理器会先在Hash码容器上查询,检查之前有没有Hash码对应的模型存在,不存在就放入容器,生成如图2所示的相同资源文件所对应的唯一模型容器即Hash码容器。之后,客户端管理器进行填充LOD层级容器,通过SpeedTree模型更新获取的LOD实例结构进行判断,把模型实例数据填充进去。生成如图3所示的LOD层级容器。填充完成后,根据遍历Hash码容器里面的每一个可视模型内存结构,获取到模型结构再遍历这个模型所对应的LOD层级容器,按照模型的网格Instance绘制方法,把每层LOD的实例数据绘制出来。绘制过程如图4所示的流程图。以上所述,只是本专利技术的较佳实施例而已,本专利技术并不局限于上述实施方式,只要其以相同的手段达到本专利技术的技术效果,都应属于本专利技术的保护范围。在本专利技术的保护范围内其技术方案和/或实施本文档来自技高网...
【技术保护点】
一种基于LOD绘制树模型实例的方法,其特征在于包括以下步骤:通过场景视锥裁剪从游戏场景中创建的SpeedTree模型获取一系列实例数据;将所述一系列的实例数据中根据SpeedTree工具在场景中计算的LOD层级数据布局到内含LOD值的LOD层级容器中,使该LOD层级容器包含所有SpeedTree模型以及与该模型所有的LOD层级对应的实例数据列表,从而通过所述容器和DX实例绘制方法实现包含LOD的优化绘制。
【技术特征摘要】
【专利技术属性】
技术研发人员:黄晓权,
申请(专利权)人:珠海金山网络游戏科技有限公司,广州西山居世游网络科技有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。