一种3D渲染方法、装置及引擎制造方法及图纸

技术编号:13455478 阅读:69 留言:0更新日期:2016-08-02 20:24
本发明专利技术公开了一种基于DirectX Effect系统的3D渲染方法,包括步骤:S1、在调用DrawCall对当前画面的物体进行渲染时,根据预置的映射表获取3D引擎内存中的所述物体的参数值所对应的shader参数索引值;其中,所述映射表中记录有DirectX Effect系统的Effect参数名与shader参数索引值的映射关系,且所述3D引擎内存中的每一物体的参数值设有对应的Effect参数名;S2、将所述3D引擎内存中的所述物体的参数值拷贝到所述shader参数索引值所对应的驱动内存中。本发明专利技术还公开了一种基于DirectX Effect系统的3D渲染装置及3D游戏引擎。

【技术实现步骤摘要】

本专利技术涉及图像处理
,尤其涉及一种基于DirectX Effect系统的3D清染方法、装置以及3D游戏引擎。
技术介绍
3D引擎需要有各种渲染效果(Effect),比如方向光、点光、阴影等等这些基础效果,又比如中毒、冰冻、隐身这些游戏中特殊渲染效果。实现渲染效果的最底层技术就是Shader,这是一种直接运行在显卡GPU上的程序,一般效果都会由顶点Shader与像素Shader组成,负责整个渲染流程的不同功能。Shader的输入包括顶点、贴图与参数,当Shader程序确定功能之后,用户改变这些输入就可以显示出不同的画面表现。顶点决定渲染物体的形状,贴图决定渲染物体的基本颜色与纹理,参数则最终决定各种特殊效果的具体表现,比如方向光效果的方向参数决定物体的明暗面朝向、隐身效果的Alpha参数决定了物体透明的程度。游戏画面每一次渲染即为一次GPU DrawCall。每一次DrawCall对应着一个Effect、一套Shader,还对应着渲染物体的顶点、贴图、参数。DrawCall是GPU进行渲染的最基础调用。一帧3D画面的DrawCal I数量与画面中的物体数量成正比,简单的物体只有一次DrawCall,复杂的物体可能有多次DrawCall。3D引擎可能有非常多的渲染效果,这么多的效果不可能都写在引擎代码里,因此Effect的描述需要在引擎之外去定义。引擎提供一个基础的框架系统,支持用户去扩展各种渲染效果。Eff ect系统是底层Shader与各种输入数据之间的桥梁,Eff ect系统定义了Eff ect文件。Effect文件是一种用户可阅读和修改的描述文本,它要描述Shader代码本身,它要定义顶点的格式,它要定义这个效果需要多少贴图,最后还要描述各种Shader参数的定义,一般的Effect都会带有几个到几十个参数。而Effect系统具体的主要功能有两个:I)在引擎加载模块中解释Effect文件中各种输入数据的定义,2)在引擎渲染模块中高效的把各种渲染输入数据传递到底层的Shader。现有3D引擎的Effect系统,一般有两种实现选择:I)直接使用DirectX (Direct extens1n,简称DX)的Ef feet系统,这是微软在DirectX中已经实现的一套Effect系统。优点是此系统直接可用且Effect文件格式比较通用,缺点就是无源码,不够灵活,性能方向只能说勉强够用,真的要做极限的优化还有一段距离。这种方案在很多游戏公司自研端游引擎中比较常见。2)自己实现一套Effect系统。由于微软DirectX不是跨平台的,因此当3D引擎有跨平台的需求时,引擎开发者会自己实现一套Effect系统。这个方案的优点当然就是灵活、有需要可以自行修改,缺点是开发成本比较大,因为Effect文件是一种比较复杂的描述文本,基本就是一套简化的编程语言,解释难度比较大。
技术实现思路
经工程测试研究发现,DirectXEffect系统的功能性方面做得还是不错的,引擎没有跨平台需求时是比较好的选择,唯一的问题就是它的运行性能离理想情况还有不少距离。当前大型3D游戏需要渲染大量的物体,而每个物体Shader越来越复杂,参数越来越多,它的性能问题会更突出一些,因为Ef feet系统的运行消耗,基本上就是与DrawCal I和Shader参数数量这两个数值成正比。再具体来说,DirectX Effect的Shader参数设置方案是最大的性能问题所在。由于它会把所有物体参数记录在它内部的内存中,因此这样会使整个渲染流程多一次内存的拷贝。即存在DirectX Effect系统时,会先将物体参数从引擎内存拷贝到DirectX Effect系统的内存,然后再从DirectX Effeet系统的内存拷贝到Shader的驱动内存。性能方面的另一个问题,是参数设置数量的问题,3D引擎的渲染中,有些物体参数是全局的,比如整个场景的灯光方向,对于每一个DrawCall都是固定的。如果DirectXEffeet系统能有效利用这些信息,就能减少参数的设置数量,最终做到只设置每个DrawCalI都不一样的参数。但很可惜现有的DirectX Effeet系统并没有提供这种参数设置优化,它只会把整个Ef f ect的所有参数在调用DrawCal I的时候全部重设一次。这两个问题叠加起来,就会使得现有的DirectX Effect系统的DrawCall消耗比较大,而且基本都是消耗在参数的内存拷贝上。因此在为了成本考虑不自行实现一套Effect的前提下,有必要找一种DirectXEffect的运行优化方案,减少这些Effect参数的拷贝,提升3D引擎的渲染效率。为实现上述目的,本专利技术提供一种基于DirectXEffect系统的3D渲染方法、装置及引擎,能够有效解决DirectX Effeet系统的运行性能问题,提高渲染效率。本专利技术实施例提供了一种基于DirectXEffect系统的3D渲染方法,包括步骤:S1、在调用DrawCall对当前画面的物体进行渲染时,根据预置的映射表获取3D引擎内存中的所述物体的参数值所对应的shader参数索引值;其中,所述映射表中记录有DirectX Effect系统的Effect参数名与shader参数索引值的映射关系,且所述3D引擎内存中的每一物体的参数值设有对应的Effect参数名;S2、将所述3D引擎内存中的所述物体的参数值拷贝到所述shader参数索引值所对应的驱动内存中。作为上述方案的改进,所述映射表具体通过以下方式预先得到:为DirectX Effeet系统中的每一Effeet参数名设置对应的唯一识别码,并记录Effect参数名与唯一识别码的映射关系;其中,每一所述唯一识别码作为对应的Effect参数名的参数值;将所述唯一识别码拷贝到shader的驱动内存中以进行Effect参数设置,使所述DirectX Effect系统产生shader级别的API回调;在所述API回调中获取shader参数索引值及对应的shader参数值;其中,所述shader参数值与所述唯一识别码--对应;基于所述shader参数值与所述唯一识别码的对应关系以及所述Effect参数名与唯一识别码的映射关系,得到所述Effect参数名与shader参数索引值的映射关系。作为上述方案的改进,所述方法还包括步骤:S3、若当前画面的所有物体渲染完成,则将渲染完成后的当前画面输出,否则返回步骤S I。作为上述方案的改进,所述画面为游戏画面。本专利技术实施例还提供了一种基于DirectX Effect系统的3D清染方法,包括步骤:S1、在调用DrawCall对当前画面的物体进行渲染时,根据预置的映射表获取3D引擎内存中的所述物体的参数值所对应的shader参数索引值;其中,所述映射表中记录有DirectX Effect系统的Effect参数名与shader参数索引值的映射关系,且所述3D引擎内存中的每一物体的参数值设有对应的Effect参数名;S2、根据所述物体的参数名判断对应的参数值是否为全局Effect参数值,若在判断为是全局Effect参数值并且非首次对当前画面调用DrawCall时,返回执行步骤SI,否则执行步骤S3本文档来自技高网
...
一种3D渲染方法、装置及引擎

【技术保护点】
一种基于DirectX Effect系统的3D渲染方法,其特征在于,包括步骤:S1、在调用DrawCall对当前画面的物体进行渲染时,根据预置的映射表获取3D引擎内存中的所述物体的参数值所对应的shader参数索引值;其中,所述映射表中记录有DirectX Effect系统的Effect参数名与shader参数索引值的映射关系,且所述3D引擎内存中的每一物体的参数值设有对应的Effect参数名;S2、将所述3D引擎内存中的所述物体的参数值拷贝到所述shader参数索引值所对应的驱动内存中。

【技术特征摘要】

【专利技术属性】
技术研发人员:孔颖
申请(专利权)人:网易杭州网络有限公司
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1