一种基于可视化编程的跨平台渲染效果的编辑系统的制作方法

文档序号:15561082发布日期:2018-09-29 02:15阅读:187来源:国知局

本发明涉及一种渲染效果的编辑系统,尤其涉及一种基于可视化编程的跨平台渲染效果的编辑系统。



背景技术:

可编程渲染管线的出现给计算机图形技术带来了翻天覆地的变化。可编程渲染管线的核心是着色器技术,这是一段可以在图形处理核心gpu上运行的程序,用来给三维物体上色。程序员可以通过编写高级着色器语言直接控制gpu中的着色单元,灵活的控制渲染管线,制作出形形色色的着色效果。

各种游戏引擎都提供了基于着色器技术的材质编辑系统来优化着色器编程流程。比如由unitytechnologies开发的unity3d引擎。这是利用交互的图型化开发环境为首要方式的软件。该引擎内置了很多优质的着色器,提供了多种光照模型供选择。使用这些内置的着色器的材质实例只需要修改参数就可以方便使用。不过高度的集成,也使得表现效果不够灵活。为了获得个性化的效果,着色器的现有参数接口不能满足效果需求的时候,美术人员往往就无计可施了,就需要专门的图形程序员重新编辑修改着色器代码来加入新的功能。而独特的美术效果在一个成功的产品设计中有着举足轻重的作用。这使得在渲染效果编辑的过程中,程序员和美术人员在功能和时间上是高度相互依赖的耦合关系。



技术实现要素:

本发明的目的是提供一种基于图形化编程的跨平台的渲染效果编辑系统。目标是可以通过图形化的连接、组合各个渲染功能来得到丰富的渲染效果,并可以实时预览渲染效果,并且可以再编辑。

为解决上述问题,本发明是通过以下技术方案实现的:

一种基于可视化编程的跨平台渲染效果的编辑系统,所述编辑系统由图形化界面模块gui(graphicaluserinterface,简称gui模块)、自动化着色器代码编辑模块ase(autoshadereditor,简称ase模块)、渲染实现模块和3d预览模块组成,并共同组成了一个松耦合的系统架构;

编辑系统工作的步骤为:

第一步,图形化界面模块gui主要负责响应用户输入消息,并将消息翻译成为自动化着色器代码编辑模块ase的有效指令,向自动化着色器代码编辑模块ase发送指令;

第二步,自动化着色器代码编辑模块ase响应图形化界面模块gui发出的指令,完成生成着色器代码的核心功能;

第三步,随后自动化着色器代码编辑模块ase将产生的着色器代码和着色材质需要的美术集资源描述表传递给3d预览模块;

第四步,3d预览模块和图形化界面模块gui都要通过渲染实现模块,对接图形渲染api,送入渲染管线,在屏幕上渲染出来。

所述图形化界面模块gui,向上,面向各个引擎系统,为用户提供可编辑控件的显示并接收用户输入,向下,面向自动化着色器代码编辑模块ase,将用户的输入转化为固定的格式信息传递给自动化着色器代码编辑模块ase封装的对外接口;所述图形化界面模块gui向上隐藏自动化着色器代码编辑模块ase中的抽象类型数据,向下隐藏用户复杂的操作。

所述图形化界面模块gui分为gui控件模块、消息处理模块、控件数据结构和公共资源模块;gui控件模块向渲染实现模块传递各个控件的显示数据,又要负责相应用户输入;gui控件模块负责记录逻辑画布上所有gui控件的实例数据;gui控件的功能和自动化着色器代码编辑模块ase的着色树中的节点功能一一对应;gui控件的主控件对应着色树的根节点,代表一种光照模型着色器代码框架,gui控件的子控件对应着色树的子树节点,代表一个特定着色器功能;只要gui控件的接口数据类型相同就可以自由组合,逻辑画布是gui控件的容器,记录gui控件的显示信息,当用户输入消息时,分发给对应的gui控件;

所述消息处理模块是gui控件模块的对外接口,向上接收用户的操作信息并传递给gui控件模块处理,向下把控制模块计算出的指令传给下一层的自动化着色器代码编辑模块ase;

所述控件数据结构是gui控件中对用户可见的全部内容的抽象,包括控件的颜色、尺寸、位置等等位置,按照是否需要响应用户输入,分为交互和静态两种数据结构,画布中的gui控件实例使用该数据结构生成。

所述自动化着色器代码编辑模块ase是整个系统的数据逻辑的核心,使用着色树的数据结构来生成着色器代码;自动化着色器代码编辑模块ase的工作流程是:响应图形化界面模块gui发送的指令,创建、删除、编辑着色树子树节点,维护节点之间的连接关系;然后深度遍历着色树,对节点连接的做有效性检查;然后再次深度遍历着色树,生产着色器代码;最后将生产的着色器代码和着色材质需要的美术集资源描述表数据发送给3d预览模块。

自动化着色器代码编辑模块ase的封装只需要索引到着色树的根结点,对外隐藏着色树的树状结构关系,自动化着色器代码编辑模块ase的封装的对外接口,向上面向图形化界面模块gui,提供创建、删除、链接节点和反馈的操作指令接口,向下面向3d预览模块,提供生产的着色器代码和选所需美术资源描述。

所述渲染实现模块是为了完成gui控件在屏幕上的渲染实现,需要针对不同的图形渲染api编写不同的实现代码,渲染实现模块监听系统发来的屏幕刷新请求,然后向图形化界面模块gui和3d预览模块申请需要渲染的几何数据,转换这些数据并发给图形渲染api,由图形渲染api将数据转化为图元送入渲染管线中渲染到屏幕上。

所述3d预览模块是用来接受自动化着色器代码编辑模块ase产生的着色代码和渲染着色材质需要的美术集资源描述表数据,更新渲染状态,最终将渲染数据传给渲染实现模块。

本发明提供一个图形化界面来编辑着色器渲染效果,隐藏了繁琐的着色器语言技术细节。通过在运行时对着色器代码进行重组,可以根据用户的需求动态的改变着色器算法,是一种所见即所得的渲染效果生成方式。本发明很适合美术人员使用,扩大了美术人员对渲染效果设计的掌控力,减弱了在美术工作流程中对专业程序员的依赖,同时减短了软件开发的人力成本和时间成本,优化软件开发流程。本发明的方案通过抽象出的两个核心模块:可视化编辑模块和自动化着色器代码编辑模块ase,可以适用于多个图形渲染api和多个引擎平台,具有较好的通用性。

附图说明

下面结合附图对本发明进一步说明:

图1是本发明的整体构架示意图

图2是本发明的图形化界面模块gui结构示意图

图3是本发明的自动化着色器编辑模块ase结构示意图

具体实施方式

下面结合附图及具体实施方式对本发明进行详细描述:

如图1所示,一种基于可视化编程的跨平台渲染效果的编辑系统,所述编辑系统由图形化界面模块gui、自动化着色器代码编辑模块ase、渲染实现模块和3d预览模块组成,并共同组成了一个松耦合的系统架构;

编辑系统工作的步骤为:

第一步,图形化界面模块gui主要负责响应用户输入消息,并将消息翻译成为自动化着色器代码编辑模块ase的有效指令,向自动化着色器代码编辑模块ase发送指令;

第二步,自动化着色器代码编辑模块ase响应图形化界面模块gui发出的指令,完成生成着色器代码的核心功能;

第三步,随后自动化着色器代码编辑模块ase将产生的着色器代码和着色材质需要的美术集资源描述表传递给3d预览模块;

第四步,3d预览模块和图形化界面模块gui都要通过渲染实现模块,对接图形渲染api,送入渲染管线,在屏幕上渲染出来。

所述图形化界面模块gui,向上,面向各个引擎系统,为用户提供可编辑控件的显示并接收用户输入,向下,面向自动化着色器代码编辑模块ase,将用户的输入转化为固定的格式信息传递给自动化着色器代码编辑模块ase封装的对外接口;所述图形化界面模块gui向上隐藏自动化着色器代码编辑模块ase中的抽象类型数据,向下隐藏用户复杂的操作。

如图2所示,所述图形化界面模块gui分为gui控件模块、消息处理模块、控件数据结构和公共资源模块;gui控件模块向渲染实现模块传递各个控件的显示数据,又要负责相应用户输入;gui控件模块负责记录逻辑画布上所有gui控件的实例数据;gui控件的功能和自动化着色器代码编辑模块ase的着色树中的节点功能一一对应;gui控件的主控件对应着色树的根节点,代表一种光照模型着色器代码框架,gui控件的子控件对应着色树的子树节点,代表一个特定着色器功能;只要gui控件的接口数据类型相同就可以自由组合,逻辑画布是gui控件的容器,记录gui控件的显示信息,当用户输入消息时,分发给对应的gui控件;

所述消息处理模块是gui控件模块的对外接口,向上接收用户的操作信息并传递给gui控件模块处理,向下把控制模块计算出的指令传给下一层的自动化着色器代码编辑模块ase;

所述控件数据结构是gui控件中对用户可见的全部内容的抽象,包括控件的颜色、尺寸、位置等等位置,按照是否需要响应用户输入,分为交互和静态两种数据结构,画布中的gui控件实例使用该数据结构生成。

如图3所示,所述自动化着色器代码编辑模块ase是整个系统的数据逻辑的核心,使用着色树的数据结构来生成着色器代码;自动化着色器代码编辑模块ase的工作流程是:响应图形化界面模块gui发送的指令,创建、删除、编辑着色树子树节点,维护节点之间的连接关系;然后深度遍历着色树,对节点连接的做有效性检查;然后再次深度遍历着色树,生产着色器代码;最后将生产的着色器代码和着色材质需要的美术集资源描述表数据发送给3d预览模块。

自动化着色器代码编辑模块ase的封装只需要索引到着色树的根结点,对外隐藏着色树的树状结构关系,自动化着色器代码编辑模块ase的封装的对外接口,向上面向图形化界面模块gui,提供创建、删除、链接节点和反馈的操作指令接口,向下面向3d预览模块,提供生产的着色器代码和选所需美术资源描述。

着色树是自动化着色器代码编辑模块ase的一种数据结构。这种数据结构将着色器代码抽象为一种近似的树形的结构。ase生成代码之前深度优先遍历整个着色树,检查所有节点是否有效。有效性根据节点的数据类型是否吻合来判断。通过有效性判断后,ase从根节点开始,深度优先遍历,逐步生成完整的着色器代码。根节点是基于任意光照模型的着色器代码框架(比如binn光照模型,pbr光照模型等等)。不同的着色器代码框架提供不同材质属性接口(比如高光,漫反射,法线等)。每一个属性接口后面可以连接一个子树。每个子树节点描述了一段具有特定功能的着色器代码片段。通过连接这些节点,将各个功能组合起来。在遍历的节点过程中,逐步按照节点中重写的生成、合并方法将一个个功能代码片段合并起来,最后将合并的代码片段输入根节点的各个属性接口中,由根节点统一装配这些代码片段到着色器代码框架中,生成完整的着色器代码。子树节点分为两种类型:一类描述资源,有着自己的数据类型,是参与着色运算的数据;另一类描述带有计算功能的着色代码片段,是运算符。

所述渲染实现模块是为了完成gui控件在屏幕上的渲染实现,需要针对不同的图形渲染api编写不同的实现代码,渲染实现模块监听系统发来的屏幕刷新请求,然后向图形化界面模块gui和3d预览模块申请需要渲染的几何数据,转换这些数据并发给图形渲染api,由图形渲染api将数据转化为图元送入渲染管线中渲染到屏幕上。

所述3d预览模块是用来接受自动化着色器代码编辑模块ase产生的着色代码和渲染着色材质需要的美术集资源描述表数据,更新渲染状态,最终将渲染数据传给渲染实现模块。

需要强调的是:以上仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1