一种可视化和可定制的三维渲染系统及方法
技术领域
本发明涉及一种可视化和可定制的三维渲染系统及方法,属于计算机三维图形处理领域。
背景技术
在现在的游戏开发产业中,3D程序员负责和维护渲染引擎的开发。开发一个渲染引擎所需要的工具有各种程序开发语言(C++,C#等),以及某种3D渲染图形库,如OpenGL或者DirectX等等。大型的专业游戏引擎会在公用的图形库基础上抽象出一套自己的图形接口,以达到跨平台开发的目的。由于渲染引擎内部的实现是通过程序代码来呈现的,所以大部分工作只能由专业的3D程序开发人员来维护和开发。游戏美术仅仅是渲染引擎的最终使用者。在某些情况下,游戏美术会对引擎的开发提出自己的要求和建议,再由专业的3D程序员来实现。但是中间的迭代开发会花费大量的时间和人力。从程序员的角度来看,一个完全由程序代码组织起来的渲染引擎,随着项目组人员的流动,大型团队里多人协同开发,功能的扩充,以及对多平台的支持等等情况的出现,代码会变得越来越臃肿晦涩,导致的结果就是,功能越来越难扩充,在开发的过程中极易产生漏洞,整个渲染引擎越来越难以优化。
发明内容
本发明的技术方案提供了一种可视化和可定制的三维渲染系统及方法,用于解决现有技术的不足。
本发明的技术方案包括一种可视化和可定制的三维渲染系统,包括编辑模块、初始化模块、效果节点模块、操作栈模块、优化模块、编译模块及执行模块,编辑模块位于客户端,初始化模块、效果节点模块、操作栈模块、优化模块、编译模块及执行模块位于服务端,其特征在于:编辑模块,用于提供编辑界面对效果节点进行自定义编辑,得到效果节点图并进行发送,其中效果节点图集为有向不循环图,包括多个设置参数的效果节点;初始化模块,用于获取有向不循环图进行合法性检查并执行初始化,以及对效果节点执行预处理;效果节点模块,用于使用渲染引擎对有向不循环图进行分析,并在渲染开始前对效果节点图进行遍历获取执行时所需的参数,进而将参数以微数据形式压入微数据堆栈中,其中微数据包括操作数和操作符;操作栈模块,用于将所述微数据堆栈转化为操作栈,包括将微数据堆栈中的操作符转换为可操作操作符,并为操作符关联指定的操作数,其中操作符包括CPU操作符和GPU操作符;优化模块,用于将多个可合并的GPU操作符合并为一个复合GPU操作符,并为每个符合GPU操作生成对应的唯一签名;编译模块,用于通过签名获取对应的GPU操作符,并执行对应的编译操作;执行模块,用于执行编译模块产生的结果数据,最终得到渲染结果。
根据所述的可视化和可定制的三维渲染系统,其中效果节点包括:输入数据、输出数据及参数,其中输入数据、输出数据及参数可以是任意个数且数据类型固定。
根据所述的可视化和可定制的三维渲染系统,其中效果节点还包括:每个效果节点的功能独立,包括通过输入数据及参数得到输出数据。
根据所述的可视化和可定制的三维渲染系统,其中效果节点还包括:使用有向不循环图的数据结构对效果节点进行组织,效果节点进一步包括输入效果节点、功能效果节点及输出效果节点,其中输入效果节点为游戏引擎传入的数据,功能效果节点用于对根据用户编辑将传入的输入数据生成对应的输出数据,所述输出效果节点用于表示输出至显示装置的结果。
根据所述的可视化和可定制的三维渲染系统,其中初始化模块用于执行以下步骤:当服务端的游戏程序运行时,使用渲染引擎接收效果节点图,并在内存重构整个有向不循环图,以及对该图的合法性进行检查;对有向不循环图中所有的效果节点进行唯一一次初始化,对应的,还包括对效果节点进行预处理。
在一个优选的实施方案中,其特征在于:所述操作数表示需要被处理的数据,所述操作符表示所要执行的内容。
在一个优选的实施方案中,其特征在于:所述CPU操作符表示由计算机的CPU运算单元执行的内容,所述GPU操作符表示由计算机的GPU运算单元执行的内容,使用GPU操作符和CPU操作符组合完成渲染引擎所需要的从GPU渲染到逻辑判断所需要的所有功能。
根据所述的可视化和可定制的三维渲染系统,其中优化模块还包括:对每个GPU操作符进行合并为复合GPU操作符时,为每个生成的复合GPU操作符分配全局唯一的数字签名,其中唯一数字签名通过复合操作符所有子操作符、子操作符所处理的数据以及这些数据的数据类型进行计算生成;对每个被动态生成的相同复合GPU操作符只进行一次编译。
根据所述的可视化和可定制的三维渲染系统,其中系统还包括:对每个经过操作符处理生成的数据结果使用一计数器进行关联,当对应数据结果使用完之后使计数器数值减一,若计数器数值为零时则回收数据结果,其回收包括将数据结果存放至缓存中并关联对应的生命参数,当该数据结果没有被使用时间超过指定阈值时,则释放缓存中的数据结果。
根据所述的可视化和可定制的三维渲染系统,该系统还包括:所述全局唯一签名存储于磁盘上,当游戏程序启动时,则将全局唯一签名关联的已编译数据预读至内存。
本发明的技术方案还包括根据上述任意系统的一种可视化和可定制的三维渲染方法,该方法包括:提供编辑界面对效果节点进行自定义编辑,得到效果节点图并进行发送,其中效果节点图集为有向不循环图,包括多个设置参数的效果节点;获取有向不循环图进行合法性检查并执行初始化,以及对效果节点执行预处理;使用渲染引擎对有向不循环图进行分析,并在渲染开始前对效果节点图进行遍历获取执行时所需的参数,进而将参数以微数据形式压入微数据堆栈中,其中微数据包括操作数和操作符;将所述微数据堆栈转化为操作栈,包括将微数据堆栈中的操作符转换为可操作操作符,并为操作符关联指定的操作数,其中操作符包括CPU操作符和GPU操作符;将多个可合并的GPU操作符合并为一个复合GPU操作符,并为每个符合GPU操作生成对应的唯一签名;通过签名获取对应的GPU操作符,并执行对应的编译操作。执行编译模块产生的结果数据,最终得到渲染结果。
本发明的有益效果为:
渲染引擎框架下,游戏项目里的技术美术可以在不接触程序代码的情况下,最大程度的参数到渲染引擎的制作当中,从而可以最大程度的决定最终的游戏效果;美术会把他们想要的一个复杂的功能需求分解成若干个功能单一,实现简单的子模块,程序只需要保证这些子模块的执行正确就可以,而怎么由简单功能组合成一个最终的复杂的功能,完全由美术来决定,这样就省去了大量的花在美术和程序之间迭代开发的时间;可视化的渲染引擎架构,便于对渲染引擎的新功能扩展;可视化的渲染引擎架构,便于对渲染中出现的问题快速定位及调试;可视化的渲染引擎架构,便于对渲染引擎的宏观优化;可以非常方便的针对不同配置的机器定制出一套专有的渲染管线;可以非常方便的针对不同平台定制出一套专有的渲染管线。可以快速地为游戏尝试各种不同的风格。
附图说明
图1所示为根据本发明实施方式的流程图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的可视化和可定制的三维渲染系统适用于游戏动画的开发。
图1所示为根据本发明实施方式的流程图。本发明流程图所使用的系统采用了客户端,服务器的架构。这里的客户端具体指的是一个特有的效果节点图编辑器,使用这个节点编辑器,游戏项目里的美术或者引擎架构师可以很方便直观地编写,修改,定制一个3D渲染管线。这里的服务器具体指的就是在开发的游戏。整个实现方法分为如下几个步骤,如下S101~S108所示:
S101,效果节点图的制作。美术和引擎架构师在效果节点编辑器里制作符合自己需求的3D渲染管线。最终得到一个由一个0的含有各种设置参数的效果节点的集合。
S102,效果节点图的保存和传送.效果节点编辑器通过网络通讯或者保存文件等手段,把制作好的效果节点图传送给服务器端--游戏。
S103,效果节点图的初始化。当游戏运行时,当渲染引擎接收到效果节点图,首先会在内存中重构整个图的结构,检查图的合法性,并对图上连接的所有节点做一次(唯一一次)初始化工作。各个效果节点可以利用这次初始化的机会,做一些自己需要预处理的工作。
S104,遍历效果节点图,生成微数据堆栈。当渲染引擎做完对图的初始化工作以后,就处于可以渲染的状态了。在每一帧渲染的最开始,渲染引擎要对效果节点图做一次自顶向下的遍历,以最终结果为导向,遍历所有为得到这个最终结果所依赖的效果节点。在这个遍历过程中,效果节点的执行函数会被调用,在这里,效果节点可以执行自己的逻辑操作,并把实际需要执行的操作以及这些操作在执行时所需要的参数,以微数据的形式压入到微数据堆栈中。
S105,微数据堆栈转化成操作栈,遍历完效果节点图,我们就得到了一个微数据堆栈。在这个微数据堆栈中,存在着两种数据,一种是操作数,一种是操作符。每个操作数都有自己的类型,以及和这个数据类型相匹配的数据。操作符分为两类,一类是Cpu操作符,一类是Gpu操作符。微数据堆栈并不能被执行,要执行渲染操作,首先要把微数据堆栈转化成操作栈。在这个转化过程当中,我把每一个操作符和他需要的数据参数关联起来。数据参数可以是微数据堆栈中的操作数,也可以是前一个操作的结果。
S106,操作栈的优化。当渲染引擎得到了有微数据堆栈转化的操作栈以后,理论上就可以执行已得到最终结果了,但这时的操作栈的执行效率是非常低的,达不到游戏里面实时渲染的目的。所以在执行这个操作栈之前,我们要对它进行优化。通过引入复合Gpu操作符的概念,我们可以把操作栈上可合并的多个Gpu操作符合并成一个大的复合Gpu操作符,并赋予每个动态生成的复合Gpu操作符一个全局唯一的签名。
S107,操作栈的编译。经过优化过后的操作栈,需要经过编译才能够最终执行。在这个过程当中,我们需要对操作栈上的每一个操作进行编译,这是一个耗时的过程。但是由于引入了全局唯一签名的机制,我们可以做到相同的操作只会被编译一次,并且编译后的操作,可以用这个全局唯一的签名当作关键字保存在磁盘上,以便于下次游戏运行初始化的时候就家在进入内存。
S108,操作栈的执行。经过编译的操作栈,就可以由渲染引擎拿来执行,以得到最终所需要的结果了。
以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。