一种基于着色器的2d像素火焰方法及其系统

文档序号:1928433 发布日期:2021-12-07 浏览:13次 >En<

阅读说明:本技术 一种基于着色器的2d像素火焰方法及其系统 (2D pixel flame method and system based on shader ) 是由 刘德建 胡铭 陈宏展 于 2020-06-04 设计创作,主要内容包括:本发明提供了一种基于着色器的2D像素火焰方法,所述方法包括如下步骤:步骤S1、从CPU端传入贴图纹理数据、模型初始的顶点、着色器绘制参数到GPU端;步骤S2、根据着色器绘制参数渲染物体到帧缓存;步骤S3、将2D像素火焰效果与贴图中其他物体效果合并后输出到屏幕,从而达到模拟火焰的浮动的效果;本发明能将2D像素火焰着色器化可以快速开发出效果,方便快捷的调整效果。(The invention provides a 2D pixel flame method based on a shader, which comprises the following steps: step S1, transferring texture data of the map, initial vertex of the model and drawing parameters of the shader from the CPU end to the GPU end; step S2, rendering the object to a frame buffer according to the drawing parameters of the shader; step S3, combining the flame effect of the 2D pixel with the effect of other objects in the map and outputting the combined result to a screen, thereby achieving the effect of simulating the floating of flame; the invention can shade the 2D pixel flame to develop the effect quickly, and adjust the effect conveniently and quickly.)

一种基于着色器的2D像素火焰方法及其系统

技术领域

本发明涉及动画制作技术领域,特别是一种基于着色器的2D像素火焰方法及其系统。

背景技术

2D像素火焰是使用着色渲染模拟火焰的浮动的效果,是游戏中技能和场景表现经常使用的表现方法,现有技术基本是使用贴图动画的方式,按照时间流逝播放贴图动画。其中,现有技术存在如下缺点:1、资源量大,制作贴图的时候需要每帧制作贴图。2、灵活性差,调整火焰的大小等参数都需要重新制作资源。

发明内容

为克服上述问题,本发明的目的是提供一种基于着色器的2D像素火焰方法,游戏资源的制作只要靠着色器参数进行调整即可实现,提高了工作效率,且降低了CPU端的压力。

本发明采用以下方案实现:一种基于着色器的2D像素火焰方法,所述方法包括如下步骤:

步骤S1、从CPU端传入贴图纹理数据、模型初始的顶点、着色器绘制参数到GPU端;

步骤S2、根据着色器绘制参数渲染物体到帧缓存;

步骤S3、将2D像素火焰效果与贴图中其他物体效果合并后输出到屏幕,从而达到模拟火焰的浮动的效果。

进一步的,所述步骤S2进一步具体为:步骤S21、先让顶点在屏幕空间Y方向位置进行规范化,即让objPosY位于在0到1之间:coordinateY=objPosY+0.5,其中,coordinateY是规范化后顶点在屏幕空间Y方向位置,objPosY是顶点在屏幕空间Y方向位置;

步骤S22、获取火焰淡出的位置:glowSlope=1/(glowEnd-glowStart);其中,glowSlope是火焰淡出的位置,glowStart是火焰开始位置,glowEnd是火焰结束位置;

步骤S23、获取噪声贴图的采样值,即noiseTexSample=tex2D(noiseTex,glowNoiseuvPixX,glowNoiseuvPixY)其中,noiseTexSample是噪声贴图的采样值,tex2D是采样贴图函数,noiseTex是噪声贴图,glowNoiseuvPixY是像素合并后的噪声贴图采样的Y方向坐标,glowNoiseuvPixX是像素合并后的噪声贴图采样的X方向坐标,其中,glowNoiseuvPixX=floor(glowPixelLevel*glowNoiseuvX)/glowPixelLevel;glowNoiseuvPixY=floor(glowPixelLevel*glowNoiseuvY)/glowPixelLevel–time*glowSpeed;floor函数表示向下求整,glowNoiseuvY是噪声贴图采样的Y方向坐标,glowNoiseuvX是噪声贴图采样的X方向坐标,glowPixelLevel是火焰像素大小,time是每帧时间流逝差值,glowSpeed是火焰速度;

步骤S24、根据规范化后顶点在屏幕空间Y方向位置coordinateY、火焰淡出的位置glowSlope、噪声贴图的采样值noiseTexSample,来获得当前火焰是否淡出的标准值,即glowBrightness=noiseTexSample+glowSlope*coordinateY+(–1–glowSlope*glowStart);

步骤S25、获取模型贴图采样的颜色输出到帧缓存的的百分比glowTexOn,即当glowTexCut>glowBrightness时,glowTexOn=0,glowTexCut<=glowBrightness时,glowTexOn=1;其中,glowTexCut是火焰中火苗数;

步骤S26、获取火焰颜色输出到帧缓存的的百分比glowGlowOn,即当glowCut>glowBrightness时,glowGlowOn=0,glowCut<=glowBrightness时,glowGlowOn=1;其中,glowCut是火焰中火苗大小;

步骤S27、求得最终输出到帧缓存的颜色值得到帧缓存中的数值,即帧缓存的颜色值frameBuff=tex2D(mainTex,uv)*glowTexOn+glowGlowOn*(1-glowTexOn)*glowColor;其中,mainTex是模型贴图,uv是贴图纹理坐标,glowColor是火焰颜色。

本发明还提供了一种基于着色器的2D像素火焰系统,所述系统包括:参数输入模块、数据处理模块、以及合并输出模块;

所述参数输入模块,用于从CPU端传入贴图纹理数据、模型初始的顶点、着色器绘制参数到GPU端;

所述数据处理模块,用于根据着色器绘制参数渲染物体到帧缓存;

所述合并输出模块,用于将2D像素火焰效果与贴图中其他物体效果合并后输出到屏幕,从而达到模拟火焰的浮动的效果。

进一步的,所述数据处理模块进一步通过以下步骤实现:步骤S11、先让顶点在屏幕空间Y方向位置进行规范化,即让objPosY位于在0到1之间:coordinateY=objPosY+0.5,其中,coordinateY是规范化后顶点在屏幕空间Y方向位置,objPosY是顶点在屏幕空间Y方向位置;

步骤S12、获取火焰淡出的位置:glowSlope=1/(glowEnd-glowStart);其中,glowSlope是火焰淡出的位置,glowStart是火焰开始位置,glowEnd是火焰结束位置;

步骤S13、获取噪声贴图的采样值,即noiseTexSample=tex2D(noiseTex,glowNoiseuvPixX,glowNoiseuvPixY)其中,noiseTexSample是噪声贴图的采样值,tex2D是采样贴图函数,noiseTex是噪声贴图,glowNoiseuvPixY是像素合并后的噪声贴图采样的Y方向坐标,glowNoiseuvPixX是像素合并后的噪声贴图采样的X方向坐标,其中,glowNoiseuvPixX=floor(glowPixelLevel*glowNoiseuvX)/glowPixelLevel;glowNoiseuvPixY=floor(glowPixelLevel*glowNoiseuvY)/glowPixelLevel–time*glowSpeed;floor函数表示向下求整,glowNoiseuvY是噪声贴图采样的Y方向坐标,glowNoiseuvX是噪声贴图采样的X方向坐标,glowPixelLevel是火焰像素大小,time是每帧时间流逝差值,glowSpeed是火焰速度;

步骤S14、根据规范化后顶点在屏幕空间Y方向位置coordinateY、火焰淡出的位置glowSlope、噪声贴图的采样值noiseTexSample,来获得当前火焰是否淡出的标准值,即glowBrightness=noiseTexSample+glowSlope*coordinateY+(–1–glowSlope*glowStart);

步骤S15、获取模型贴图采样的颜色输出到帧缓存的的百分比glowTexOn,即当glowTexCut>glowBrightness时,glowTexOn=0,glowTexCut<=glowBrightness时,glowTexOn=1;其中,glowTexCut是火焰中火苗数;

步骤S16、获取火焰颜色输出到帧缓存的的百分比glowGlowOn,即当glowCut>glowBrightness时,glowGlowOn=0,glowCut<=glowBrightness时,glowGlowOn=1;其中,glowCut是火焰中火苗大小;

步骤S17、求得最终输出到帧缓存的颜色值得到帧缓存中的数值,即帧缓存的颜色值frameBuff=tex2D(mainTex,uv)*glowTexOn+glowGlowOn*(1-glowTexOn)*glowColor;其中,mainTex是模型贴图,uv是贴图纹理坐标,glowColor是火焰颜色。

本发明的有益效果在于:本发明的游戏资源的制作只要靠着色器参数进行调整就可以实现,这样无需现有技术中:要量大的资源(制作贴图的时候需要每帧制作贴图),这样降低了CPU的压力,另外,灵活性差强。

附图说明

图1是本发明的方法流程示意图。

图2是本发明的系统原理框图。

具体实施方式

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

请参阅图1所示,本发明的一种基于着色器的2D像素火焰方法,所述方法包括如下步骤:

步骤S1、从CPU端传入贴图纹理数据、模型初始的顶点、着色器绘制参数到GPU端;

步骤S2、根据着色器绘制参数渲染物体到帧缓存;

步骤S3、将2D像素火焰效果与贴图中其他物体效果合并后输出到屏幕,从而达到模拟火焰的浮动的效果。

在本发明中,所述步骤S2进一步具体为:步骤S21、先让顶点在屏幕空间Y方向位置进行规范化,即让objPosY位于在0到1之间:coordinateY=objPosY+0.5,其中,coordinateY是规范化后顶点在屏幕空间Y方向位置,objPosY是顶点在屏幕空间Y方向位置;

步骤S22、获取火焰淡出的位置:glowSlope=1/(glowEnd-glowStart);其中,glowSlope是火焰淡出的位置,glowStart是火焰开始位置,glowEnd是火焰结束位置;

步骤S23、获取噪声贴图的采样值,即noiseTexSample=tex2D(noiseTex,glowNoiseuvPixX,glowNoiseuvPixY)其中,noiseTexSample是噪声贴图的采样值,tex2D是采样贴图函数,noiseTex是噪声贴图,glowNoiseuvPixY是像素合并后的噪声贴图采样的Y方向坐标,glowNoiseuvPixX是像素合并后的噪声贴图采样的X方向坐标,其中,glowNoiseuvPixX=floor(glowPixelLevel*glowNoiseuvX)/glowPixelLevel;glowNoiseuvPixY=floor(glowPixelLevel*glowNoiseuvY)/glowPixelLevel–time*glowSpeed;floor函数表示向下求整,glowNoiseuvY是噪声贴图采样的Y方向坐标,glowNoiseuvX是噪声贴图采样的X方向坐标,glowPixelLevel是火焰像素大小,time是每帧时间流逝差值,glowSpeed是火焰速度;

步骤S24、根据规范化后顶点在屏幕空间Y方向位置coordinateY、火焰淡出的位置glowSlope、噪声贴图的采样值noiseTexSample,来获得当前火焰是否淡出的标准值,即glowBrightness=noiseTexSample+glowSlope*coordinateY+(–1–glowSlope*glowStart);

步骤S25、获取模型贴图采样的颜色输出到帧缓存的的百分比glowTexOn,即当glowTexCut>glowBrightness时,glowTexOn=0,glowTexCut<=glowBrightness时,glowTexOn=1;其中,glowTexCut是火焰中火苗数;

步骤S26、获取火焰颜色输出到帧缓存的的百分比glowGlowOn,即当glowCut>glowBrightness时,glowGlowOn=0,glowCut<=glowBrightness时,glowGlowOn=1;其中,glowCut是火焰中火苗大小;

步骤S27、求得最终输出到帧缓存的颜色值得到帧缓存中的数值(即输出到屏幕的值),即帧缓存的颜色值frameBuff=tex2D(mainTex,uv)*glowTexOn+glowGlowOn*(1-glowTexOn)*glowColor;其中,mainTex是模型贴图,uv是贴图纹理坐标,glowColor是火焰颜色。

其中,本发明的一实施例:根据着色器绘制参数渲染物体到帧缓存,具体步骤如下

①coordinateY=objPosY+0.5(让objPosY位于在0到1之间)

②glowSlope=1/(glowEnd-glowStart);

③glowNoiseuvPixX=floor(glowPixelLevel*glowNoiseuvX)/glowPixelLevel;

④glowNoiseuvPixY=floor(glowPixelLevel*glowNoiseuvY)/glowPixelLevel–time*glowSpeed;

⑤noiseTexSample=tex2D(noiseTex,glowNoiseuvPixX,glowNoiseuvPixY);

⑥glowBrightness=noiseTexSample+glowSlope*coordinateY+(–1–glowSlope*glowStart);

⑦glowTexCut>glowBrightness时glowTexOn=0,glowTexCut<=glowBrightness时glowTexOn=1;

⑧glowCut>glowBrightness时glowGlowOn=0,glowCut<=glowBrightness时glowGlowOn=1;

⑨frameBufftex2D(mainTex,uv)*glowTexOn+glowGlowOn*(1-glowTexOn)*glowColor;

1)floor函数表示向下求整

2)tex2D采样贴图

3)objPosY顶点在屏幕空间Y方向位置(从输入的模型初始的顶点来获得)

4)coordinateY规范化后顶点在屏幕空间Y方向位置

5)glowSlope火焰淡出的位置

6)glowNoiseuvY噪声贴图采样的Y方向坐标(从输入的贴图纹理数据获得)

7)glowNoiseuvX噪声贴图采样的X方向坐标(从输入的贴图纹理数据获得)

8)glowPixelLevel火焰像素大小,glowPixelLevel为50代表50个像素内都用一个噪声贴图采样坐标。(从输入的着色器绘制参数获得)

9)glowNoiseuvPixY像素合并后的噪声贴图采样的Y方向坐标

10)glowNoiseuvPixX像素合并后的噪声贴图采样的X方向坐标

11)noiseTexSample噪声贴图的采样值

12)glowBrightness当前火焰是否淡出标准值

13)time每帧时间流逝差值(从输入的贴图纹理数据获得)

14)noiseTex噪声贴图(从输入的贴图纹理数据获得)

15)mainTex模型贴图(从输入的贴图纹理数据获得)

16)glowColor火焰颜色(从输入的着色器绘制参数获得)

17)glowSpeed火焰速度(从输入的着色器绘制参数获得)

18)glowStart火焰开始位置(从输入的着色器绘制参数获得)

19)glowEnd火焰结束位置(从输入的着色器绘制参数获得)

20)glowTexCut火焰中火苗数(从输入的着色器绘制参数获得)

21)glowCut火焰中火苗大小(从输入的着色器绘制参数获得)

22)glowTexOn模型贴图采样的颜色,输出到帧缓存的的百分比

23)glowGlowOn火焰颜色,输出到帧缓存的的百分比

24)frameBuff帧缓存

⑩合并其他物体效果并输出到屏幕。

请参阅图2所示,本发明还提供了一种基于着色器的2D像素火焰系统,所述系统包括:参数输入模块、数据处理模块、以及合并输出模块;

所述参数输入模块,用于从CPU端传入贴图纹理数据、模型初始的顶点、着色器绘制参数到GPU端;

所述数据处理模块,用于根据着色器绘制参数渲染物体到帧缓存;

所述合并输出模块,用于将2D像素火焰效果与贴图中其他物体效果合并后输出到屏幕,从而达到模拟火焰的浮动的效果。

所述数据处理模块进一步通过以下步骤实现:步骤S11、先让顶点在屏幕空间Y方向位置进行规范化,即让objPosY位于在0到1之间:coordinateY=objPosY+0.5,其中,coordinateY是规范化后顶点在屏幕空间Y方向位置,objPosY是顶点在屏幕空间Y方向位置;

步骤S12、获取火焰淡出的位置:glowSlope=1/(glowEnd-glowStart);其中,glowSlope是火焰淡出的位置,glowStart是火焰开始位置,glowEnd是火焰结束位置;

步骤S13、获取噪声贴图的采样值,即noiseTexSample=tex2D(noiseTex,glowNoiseuvPixX,glowNoiseuvPixY)其中,noiseTexSample是噪声贴图的采样值,tex2D是采样贴图函数,noiseTex是噪声贴图,glowNoiseuvPixY是像素合并后的噪声贴图采样的Y方向坐标,glowNoiseuvPixX是像素合并后的噪声贴图采样的X方向坐标,其中,glowNoiseuvPixX=floor(glowPixelLevel*glowNoiseuvX)/glowPixelLevel;glowNoiseuvPixY=floor(glowPixelLevel*glowNoiseuvY)/glowPixelLevel–time*glowSpeed;floor函数表示向下求整,glowNoiseuvY是噪声贴图采样的Y方向坐标,glowNoiseuvX是噪声贴图采样的X方向坐标,glowPixelLevel是火焰像素大小,glowPixelLevel为50代表50个像素内都用一个噪声贴图采样坐标。time是每帧时间流逝差值,glowSpeed是火焰速度;

步骤S14、根据规范化后顶点在屏幕空间Y方向位置coordinateY、火焰淡出的位置glowSlope、噪声贴图的采样值noiseTexSample,来获得当前火焰是否淡出的标准值,即glowBrightness=noiseTexSample+glowSlope*coordinateY+(–1–glowSlope*glowStart);

步骤S15、获取模型贴图采样的颜色输出到帧缓存的的百分比glowTexOn,即当glowTexCut>glowBrightness时,glowTexOn=0,glowTexCut<=glowBrightness时,glowTexOn=1;其中,glowTexCut是火焰中火苗数;

步骤S16、获取火焰颜色输出到帧缓存的的百分比glowGlowOn,即当glowCut>glowBrightness时,glowGlowOn=0,glowCut<=glowBrightness时,glowGlowOn=1;其中,glowCut是火焰中火苗大小;

步骤S17、求得最终输出到帧缓存的颜色值得到帧缓存中的数值,即帧缓存的颜色值frameBuff=tex2D(mainTex,uv)*glowTexOn+glowGlowOn*(1-glowTexOn)*glowColor;其中,mainTex是模型贴图,uv是贴图纹理坐标,glowColor是火焰颜色。

总之,2D游戏中控制包的大小和资源制作的方便性是非常重要的指标,在现在游戏竞争的年代,快速开发出效果,方便快捷的调整效果,变成公司竞争力的指标。而资源的制作只要靠着色器参数进行调整就可以实现,将是很大的进步;本发明提高了工作效率,且降低了CPU端的压力

以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种编辑游戏状态迁移的方法及其系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类