本发明涉及适用于unity引擎的渲染领域,尤其涉及一种多功能着色器及引擎渲染方法。
背景技术:
unity引擎中存在大量的着色器和着色器编辑器,但是其工具上手难度大,编写难度高,效果多的情况下会导致文量增大难以管理,工作沟通不及时使得同效果冗余文件过多,进而影响打包编译时间;而单独配备人员进行文件管理与编写,浪费多余人力。
技术实现要素:
本发明的目的在于提供一种多功能着色器及引擎渲染方法,从而解决现有技术中存在的前述问题。
为了实现上述目的,本发明采用的技术方案如下:
一种多功能着色器,所述着色器适用于unity引擎的渲染部分;所述着色器包括,
渲染单元;所述渲染单元内设置有用于控制渲染逻辑的shader文件;
脚本单元;所述脚本单元内设置有用于展示着色器操作界面的editor脚本;
所述着色器操作界面用于接收指令并依据所述指令修改所述shader文件以更改渲染逻辑,还用于实时反馈所述指令的执行结果。
优选的,所述渲染单元包括,
混合设置模块;所述混合设置模块用于控制待渲染文件的本次渲染结果与缓存的混合方式;
深度写入模块;所述深度写入模块用于判断待渲染文件的本次渲染是否需要写入深度,并在待渲染文件需要写入深度时,对待渲染文件执行写入深度处理;
面剔除设置模块;所述面剔除设置模块用于确定待渲染文件在本次渲染中的需要被渲染的具体面;
基础纹理模块;所述基础纹理模块内设置有纹理样式,所述基础纹理模块用于根据设定的纹理样式对待渲染文件进行纹理样式的处理;
边缘光模块;所述边缘光模块内存储有边缘光颜色与边缘光衰减强弱值,所述边缘光模块用于判断待渲染文件是否需要使用边缘光效果,并在待渲染文件需要使用边缘光效果时,根据设置的边缘光颜色和边缘光衰减强弱值,对待渲染文件进行边缘光效果处理;
溶解模块;所述溶解模块内存储有溶解使用的uv索引、溶解的边缘色、溶解用的贴图、溶解的透明阈值和溶解流动的倍速,所述溶解模块用于判断待渲染文件是否需要进行溶解处理,并在待渲染文件需要使用溶解处理时,根据设置的溶解使用的uv索引、溶解的边缘色、溶解用的贴图、溶解的透明阈值和溶解流动的倍速,对待渲染文件进行溶解处理;
流动模块;所述流动模块内存储有纹理的流动扰动贴图、纹理流动的倍速、纹理扰动的强度、纹理流动的方向、纹理流动的速度以及纹理整体二层流动uv的缩放权重,所述流动模块用于根据设置的纹理的流动扰动贴图、纹理流动的倍速、纹理扰动的强度、纹理流动的方向、纹理流动的速度以及纹理整体二层流动uv的缩放权重,对待渲染文件进行纹理效果的处理;
顶点扰动模块;所述顶点扰动模块内设置有扰动强度和偏移强弱;所述顶点扰动模块用于根据设定的扰动强度和偏移强弱,控制所述待渲染文件中顶点在法线方向上的位置偏移。
优选的,所述混合设置模块内设置有三种混合模式,分别为alphablend、additiveblend以及custom;alphablend和additiveblend为界面预制的模式,custom可以完全自定义121种不同的混合模式。
本发明的目的还在于提供一种引擎渲染方法,所述引擎安装在计算机内,所述引擎包括至少一个如上述任一所述的着色器,包括如下步骤,
s1、所述着色器接收待渲染文件;所述脚本单元将所述着色器的操作界面进行展示;
s2、所述混合设置模块接收所述待渲染文件,并对所述待渲染文件进行混合渲染混合设置;
s3、所述深度写入模块接收经步骤s2处理后的待渲染文件,并判断该待渲染文件是否需要写入深度,若是,则对该待渲染文件进行写入深度处理,并执行步骤s4;若否,则直接执行步骤s4;
s4、所述面剔除设置模块接收经所述步骤s3处理后的待渲染文件,并确定该所述待渲染文件中需要渲染的面;
s5、所述顶点扰动模块接收经步骤s4处理后的待渲染文件,并对该待渲染文件中的顶点进行扰动偏移;
s6、所述流动模块接收经步骤s5处理后的待渲染文件,并对该待渲染文件首先进行纹理扰动偏移操作,并设置纹理流动倍速;之后读取基础纹理模块中的纹理样式,对纹理样式进行采样,并根据采样的纹理样式对待渲染文件进行纹理样式处理;
s7、所述边缘光模块接收经步骤s6处理后的待渲染文件,并判断该待渲染文件是否需要进行边缘光处理,若是,则对该待渲染文件进行边缘光处理,并执行步骤s8;若否,则直接执行步骤s8;
s8、所述溶解模块接收经步骤s7处理后的待渲染文件,并判断该待渲染文件是够需要进行溶解处理,若是,则对该待渲染文件进行溶解处理,并执行步骤s9;若否,则直接执行步骤s9;
s9、将经步骤s8处理后的待渲染文件输出到帧缓存,并经引擎统一整合绘制到所述计算机的显示界面上。
优选的,将所述shader文件和所述editor脚本放入所述引擎的目录中,所述引擎会自动编译所述shader文件和所述editor脚本,以获取渲染逻辑,并展示所述着色器的操作界面。
本发明的有益效果是:1、本发明的着色器将参数变成选择化,降低配置使用难度,通过关键字编译和实时参数的控制,可以实现768种不同组合,充分满足制作人员的日常需求。2、本发明的着色器在开启11x11的混合组合,则可以提供46464种组合样式;本着色器一个文件可以编译出48种变体,根据关键字的开启与关闭,可以实现渲染逻辑的取舍,从而实现逻辑的优化。3、将可变渲染选项参数化,通过界面脚本的展示,可以直接点击配置不同的参数,减少了学习成本。4、使用较少的文件和变体提供丰富的效果支持,减少人力资源的使用及培训成本,减少维护成本,便于统一管理。5、使用定制化界面,简化参数控制项,使用关键字,通过变体的方式减少shader文件数量,使用配置方式多种属性可直接配置化,减少shader文件数量。
附图说明
图1是本发明实施例中所述着色器的运行原理示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。
实施例一
一种多功能着色器,所述着色器适用于unity引擎的渲染部分;所述着色器包括,
渲染单元;所述渲染单元内设置有用于控制渲染逻辑的shader文件;
脚本单元;所述脚本单元内设置有用于展示着色器操作界面的editor脚本;
所述着色器操作界面用于接收指令并依据所述指令修改所述shader文件以更改渲染逻辑,还用于实时反馈所述指令的执行结果。
本实施例中,所述渲染单元包括,
混合设置模块;所述混合设置模块用于控制待渲染文件的本次渲染结果与缓存的混合方式;
深度写入模块;所述深度写入模块用于判断待渲染文件的本次渲染是否需要写入深度,并在待渲染文件需要写入深度时,对待渲染文件执行写入深度处理;
面剔除设置模块;所述面剔除设置模块用于确定待渲染文件在本次渲染中的需要被渲染的具体面;
基础纹理模块;所述基础纹理模块内设置有纹理样式,所述基础纹理模块用于根据设定的纹理样式对待渲染文件进行纹理样式的处理;
边缘光模块;所述边缘光模块内存储有边缘光颜色与边缘光衰减强弱值,所述边缘光模块用于判断待渲染文件是否需要使用边缘光效果,并在待渲染文件需要使用边缘光效果时,根据设置的边缘光颜色和边缘光衰减强弱值,对待渲染文件进行边缘光效果处理;
溶解模块;所述溶解模块内存储有溶解使用的uv索引、溶解的边缘色、溶解用的贴图、溶解的透明阈值和溶解流动的倍速,所述溶解模块用于判断待渲染文件是否需要进行溶解处理,并在待渲染文件需要使用溶解处理时,根据设置的溶解使用的uv索引、溶解的边缘色、溶解用的贴图、溶解的透明阈值和溶解流动的倍速,对待渲染文件进行溶解处理;
流动模块;所述流动模块内存储有纹理的流动扰动贴图、纹理流动的倍速、纹理扰动的强度、纹理流动的方向、纹理流动的速度以及纹理整体二层流动uv的缩放权重,所述流动模块用于根据设置的纹理的流动扰动贴图、纹理流动的倍速、纹理扰动的强度、纹理流动的方向、纹理流动的速度以及纹理整体二层流动uv的缩放权重,对待渲染文件进行纹理效果的处理;
顶点扰动模块;所述顶点扰动模块内设置有扰动强度和偏移强弱;所述顶点扰动模块用于根据设定的扰动强度和偏移强弱,控制所述待渲染文件中顶点在法线方向上的位置偏移。
本实施例中,所述渲染逻辑包括各模块的开启或关闭,以及各模块的关键字参数。
本实施例中,所述混合设置模块的功能和作用是设置当前渲染结果与framebuff中的缓存结果的混合方式。渲染是一层一层来做的,一帧的画面可能要分多层渲染,基本来讲,一个shader一个pass就要使用一层渲染,直到所有层渲染结束,每一层的渲染结果都会缓存到framebuff,但是framebuff只有一层,所以当前的渲染结果要和之前的framebuff做混合变为一层,然后保存在framebuff中,即会用到混合模式设置,来告知如何将当前的渲染结果混合到framebuff。
本实施例中,所述深度写入模块用来设置当前shader是否将渲染结果写入到framebuff的深度信息通道。渲染是一层一层来做的,一帧的画面可能要分多层渲染,基本来讲,一个shader一个pass就要使用一层渲染,直到所有层渲染结束,每一层的渲染结果都会缓存到framebuff但是framebuff只有一层,所以当前的渲染结果要和之前的framebuff做混合变为一层,然后保存在framebuff中,framebuff中可以包含当前渲染像素的深度值,如果开启深度写入,则当前渲染结果的深度信息会被写入到framebuff的深度信息中,否则不写入。
本实施例中,着色模型具有uv信息通道,此通道通道可以有多层,二层指的就是模型的第二层uv通道,流动是指采样贴图时对uv进行偏移,使渲染像素看上去是在流动。
本实施例中,所述顶点就是模型的点,顶点扰动就是指让模型的点按照指定的方式进行偏移运动。
本实施例中,所述着色器具备关键字可控功能。比如,是否使用边缘光、是否使用溶解功能、是否使用流动功能、是否使用顶点扰动功能等,其中每种功能的开启与关闭都会决定渲染逻辑的取舍。
本实施例中,所述着色器具备动态配置参数可控功能。比如,表面剔除模式、是否使用分离的alpha这遮罩、是否开启深度写入、是否开启gpu实例关联模式等;所述混合设置模块内设置有三种混合模式,分别为alphablend、additiveblend以及custom;alphablend和additiveblend为界面预制的模式,custom可以完全自定义121种不同的混合模式。
本实施例中,alphablend指按照当前渲染结果的透明的强弱和framebuff中的像素进行混合,当前透明度越高,当前像素混合时占比越低,framebuff中的像素混合式占比越高,当前透明度越低,当前像素混合时占比约高,framebuff中的像素占比约低。总比例为100%。additiveblend指直接将当前像素叠加到framebuff的像素值上,做加法运算。custom值可以自定义当前像素和framebuff像素的混合方式。前两种方式在实际使用,使用频率很高,故做成预设,custom是为了提高自由度,让使用者可以自定义混合方式,即custom也可以做前两种混合方式。
本实施例中,三种预设模式指alphablend、additiveblend、custom。custom可以自定义出的所有混合模式(不常用),其中包含alphablendadditiveblend。排列算法如下,custom有两个参数,可以填入如下11个值:zero、one、dstcolor、srccolor、oneminusdstcolor、srcalpha、oneminussrccolor、dstalpha、oneminusdstalpha、srcalphasaturate、oneminussrcalpha。11*11=121。故得121种不同的混合模式。
本实施例中,所述流动模块、边缘光模块、顶点扰动模块和溶解模块可以根据实际的操作过程进行选择性的使用。
实施例二
本实施例中提供了一种引擎渲染方法,所述引擎安装在计算机内,所述引擎包括至少一个着色器,所述方法包括如下步骤,
s1、所述着色器接收待渲染文件;所述脚本单元将所述着色器的操作界面进行展示;
s2、所述混合设置模块接收所述待渲染文件,并对所述待渲染文件进行混合渲染混合设置;
s3、所述深度写入模块接收经步骤s2处理后的待渲染文件,并判断该待渲染文件是否需要写入深度,若是,则对该待渲染文件进行写入深度处理,并执行步骤s4;若否,则直接执行步骤s4;
s4、所述面剔除设置模块接收经所述步骤s3处理后的待渲染文件,并确定该所述待渲染文件中需要渲染的面;
s5、所述顶点扰动模块接收经步骤s4处理后的待渲染文件,并对该待渲染文件中的顶点进行扰动偏移;
s6、所述流动模块接收经步骤s5处理后的待渲染文件,并对该待渲染文件首先进行纹理扰动偏移操作,并设置纹理流动倍速;之后读取基础纹理模块中的纹理样式,对纹理样式进行采样,并根据采样的纹理样式对待渲染文件进行纹理样式处理;
s7、所述边缘光模块接收经步骤s6处理后的待渲染文件,并判断该待渲染文件是否需要进行边缘光处理,若是,则对该待渲染文件进行边缘光处理,并执行步骤s8;若否,则直接执行步骤s8;
s8、所述溶解模块接收经步骤s7处理后的待渲染文件,并判断该待渲染文件是够需要进行溶解处理,若是,则对该待渲染文件进行溶解处理,并执行步骤s9;若否,则直接执行步骤s9;
s9、将经步骤s8处理后的待渲染文件输出到帧缓存,并经引擎统一整合绘制到所述计算机的显示界面上。
本实施例中,将所述shader文件和所述editor脚本放入所述引擎的目录中,所述引擎会自动编译所述shader文件和所述editor脚本,以获取渲染逻辑,并展示所述着色器的操作界面。
通过采用本发明公开的上述技术方案,得到了如下有益的效果:
本发明提供了一种多功能着色器及引擎渲染方法,本发明中的着色器将参数变成选择化,降低配置使用难度,通过关键字编译和实时参数的控制,可以实现768种不同组合,充分满足制作人员的日常需求;着色器在开启11x11的混合组合,则可以提供46464种组合样式;本着色器一个文件可以编译出48种变体,根据关键字的开启与关闭,可以实现渲染逻辑的取舍,从而实现逻辑的优化;所述着色器将可变渲染选项参数化,通过界面脚本的展示,可以直接点击配置不同的参数,减少了学习成本;使用较少的文件和变体提供丰富的效果支持,减少人力资源的使用及培训成本,减少维护成本,便于统一管理;同时,使用定制化界面,简化参数控制项,使用关键字,通过变体的方式减少shader文件数量,使用配置方式多种属性可直接配置化,减少shader文件数量。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。