首页 / 专利库 / 电脑图像 / 着色器 / 顶点着色器 / 水波纹图像的生成方法、装置、设备及存储介质

波纹图像的生成方法、装置、设备及存储介质

阅读:992发布:2020-05-14

专利汇可以提供波纹图像的生成方法、装置、设备及存储介质专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种 水 波纹图像的生成方法,包括:通过预设的C#脚本程序,计算目标水波纹图像中每个 像素 点的纹理坐标及对应的 颜色 值;创建一个 着色器 ,将目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、预设的水波 分辨率 的长宽比值、水波生成中心点的纹理坐标存储至着色器中;创建一个材质球,将着色器中存储的数据传入材质球;计算目标水波纹图像在屏幕中的 位置 坐标,根据位置坐标和材质球生成目标水波纹图像。本发明还公开了一种水波纹图像的生成装置、设备和一种存储介质。本发明解决了在利用Unity3D实现仿真的水波纹视觉效果时,计算机性能消耗过大,以及由于水波纹扭曲效果不能作用于背景图片以外的物体上而导致的视觉效果不佳的技术问题。,下面是波纹图像的生成方法、装置、设备及存储介质专利的具体信息内容。

1.一种波纹图像的生成方法,其特征在于,所述方法包括如下步骤:
通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一水波纹图像中每个像素点的纹理坐标;
根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;
创建一个着色器,将所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至所述着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至所述着色器中;
在所述着色器中创建一个材质球,将所述着色器中存储的所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、所述水波分辨率的长宽比值和所述水波生成中心点的纹理坐标传入所述材质球;
调用所述着色器的顶点函数,根据所述顶点函数计算所述目标水波纹图像在屏幕中的位置坐标,根据所述位置坐标和所述材质球生成所述目标水波纹图像。
2.如权利要求1所述的方法,其特征在于,所述根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值的步骤包括:
将所述上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到所述目标水波纹图像中每个像素点的纹理坐标;
根据所述目标水波纹图像中每个像素点的纹理坐标,计算与所述目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量;
根据所述水平偏移量和所述垂直偏移量,计算所述目标水波纹图像中每个像素点的颜色值。
3.如权利要求2所述的方法,其特征在于,所述将所述上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到所述目标水波纹图像中每个像素点的纹理坐标的步骤包括:
在计算所述目标水波纹图像中的任一目标像素点的纹理坐标时,获取所述目标像素点在所述上一帧水波纹图像中的纹理坐标,以及所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标;
将所述目标像素点在所述上一帧水波纹图像中的纹理坐标,以及所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标代入预设的坐标变换公式中进行计算,得到所述目标像素点在所述目标水波纹图像中的纹理坐标。
4.如权利要求3所述的方法,其特征在于,所述坐标变换公式为:
waveB[w,h]'=(waveA[w,h-1]+waveA[w,h+1]+waveA[w-1,h-1]+waveA[w-1,h]+waveA[w-1,h+1]+waveA[w+1,h-1]+waveA[w+1,h]+waveA[w+1,h+1])/4-waveB[w,h];
其中,waveB[w,h]'表示所述目标像素点在所述目标水波纹图像中的纹理坐标,waveA[w,h-1]、waveA[w,h+1]、waveA[w-1,h-1]、waveA[w-1,h]、waveA[w-1,h+1]、waveA[w+1,h-
1]、waveA[w+1,h]、waveA[w+1,h+1]分别表示所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标,waveB[w,h]表示所述目标像素点在所述上一帧水波纹图像中的纹理坐标。
5.如权利要求4所述的方法,其特征在于,所述根据所述目标水波纹图像中每个像素点的纹理坐标,计算与所述目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量的步骤包括:
在计算与所述目标像素点对应的水平偏移量和垂直偏移量时,获取与所述目标像素点在水平方向上相邻的左、右像素点的纹理坐标,以及与所述目标像素点在垂直方向上相邻的上、下像素点的纹理坐标;
计算所述左、右像素点在水平方向上的纹理坐标差值,以及所述上、下像素点在垂直方向上的纹理坐标差值;
将所述左、右像素点在水平方向上的纹理坐标差值作为与所述目标像素点对应的水平偏移量,将所述上、下像素点在垂直方向上的纹理坐标差值作为与所述目标像素点对应的垂直偏移量。
6.如权利要求5所述的方法,其特征在于,所述颜色值包括R,G,B三基色的颜色值,其中,R根据所述水平偏移量计算得到,G根据所述垂直偏移量计算得到,R和G的取值范围在0~1之间,B为0~1之间的预设值。
7.如权利要求6所述的方法,其特征在于,所述方法还包括:
根据预设的波纹衰减算法,对所述目标像素点在所述目标水波纹图像中的纹理坐标进行衰减处理;
将所述衰减处理后的纹理坐标作为所述目标像素点在所述目标水波纹图像的下一帧水波纹图像中的纹理坐标。
8.如权利要求7所述的方法,其特征在于,所述波纹衰减算法为:
waveB[w,h]”=waveB[w,h]'-waveB[w,h]'*atten,其中,waveB[w,h]”表示衰减处理后的纹理坐标,atten表示预设的衰减系数。
9.如权利要求1至8中任一项所述的方法,其特征在于,所述方法还包括:
以所述水波生成中心点为圆心,根据预设半径确定一个波纹中心区域;
根据所述着色器的片元函数,在所述波纹中心区域计算一个新的波纹;
按照预设的混合权重,将所述目标水波纹图像中的波纹与所述新的波纹进行混合,其中,在所述波纹中心区域,所述目标水波纹图像中波纹的混合权重随着离所述水波生成中心点距离的增大而增大,所述新的波纹的混合权重随着离所述水波生成中心点距离的增大而减小。
10.一种水波纹图像的生成装置,其特征在于,所述装置包括:
获取模,用于通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标;
脚本执行模块,用于根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;
着色器创建模块,用于创建一个着色器,将所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至所述着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至所述着色器中;
材质球创建模块,用于在所述着色器中创建一个材质球,将所述着色器中存储的所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、所述水波分辨率的长宽比值和所述水波生成中心点的纹理坐标传入所述材质球;
生成模块,用于调用所述着色器的顶点函数,根据所述顶点函数计算所述目标水波纹图像在屏幕中的位置坐标,根据所述位置坐标和所述材质球生成所述目标水波纹图像。
11.一种水波纹图像的生成设备,其特征在于,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的水波纹图像的生成程序,所述水波纹图像的生成程序被所述处理器执行时实现如权利要求1至9中任一项所述的水波纹图像的生成方法的步骤。
12.一种存储介质,其特征在于,所述存储介质上存储有水波纹图像的生成程序,所述水波纹图像的生成程序被处理器执行时实现如权利要求1至9中任一项所述的水波纹图像的生成方法的步骤。

说明书全文

波纹图像的生成方法、装置、设备及存储介质

技术领域

[0001] 本发明涉及图像处理技术领域,尤其涉及水波纹图像的生成方法、装置、设备及存储介质。

背景技术

[0002] Unity3D是由Unity Technologies公司开发的可轻松创建诸如三维视频游戏、建筑可视化、实时三维动画以及2D平面游戏等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎,因其强大的跨平台开发特性、绚丽的3D渲染效果以及自由丰富的人机交互功能而闻名出众。
[0003] 目前,在利用Unity3D实现仿真的水波纹视觉效果的过程中,用Unity3D实现的2D平面水波纹效果基于一张图片,该图片一般作为背景,这种方式的缺陷在于:只有该图片才有水波纹的扭曲效果,其他的图层或者游戏物体(比如在场景中游动的鱼)并没有该扭曲效果,导致视觉效果不佳;此外,计算动态场景中每图像的水波纹纹理需要调用Unity3D的应用程序编程接口(Application Programming Interface,API),导致计算机性能消耗过大。

发明内容

[0004] 本发明的主要目的在于提出一种水波纹图像的生成方法、装置、设备及存储介质,旨在解决在利用Unity3D实现仿真的水波纹视觉效果时,计算机性能消耗过大,以及由于水波纹扭曲效果不能作用于背景图片以外的物体上而导致的视觉效果不佳的技术问题。
[0005] 为实现上述目的,本发明提供一种水波纹图像的生成方法,所述方法包括如下步骤:
[0006] 通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标;
[0007] 根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;
[0008] 创建一个着色器,将所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至所述着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至所述着色器中;
[0009] 在所述着色器中创建一个材质球,将所述着色器中存储的所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、所述水波分辨率的长宽比值和所述水波生成中心点的纹理坐标传入所述材质球;
[0010] 调用所述着色器的顶点函数,根据所述顶点函数计算所述目标水波纹图像在屏幕中的位置坐标,根据所述位置坐标和所述材质球生成所述目标水波纹图像。
[0011] 可选地,所述根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值的步骤包括:
[0012] 将所述上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到所述目标水波纹图像中每个像素点的纹理坐标;
[0013] 根据所述目标水波纹图像中每个像素点的纹理坐标,计算与所述目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量;
[0014] 根据所述水平偏移量和所述垂直偏移量,计算所述目标水波纹图像中每个像素点的颜色值。
[0015] 可选地,所述将所述上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到所述目标水波纹图像中每个像素点的纹理坐标的步骤包括:
[0016] 在计算所述目标水波纹图像中的任一目标像素点的纹理坐标时,获取所述目标像素点在所述上一帧水波纹图像中的纹理坐标,以及所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标;
[0017] 将所述目标像素点在所述上一帧水波纹图像中的纹理坐标,以及所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标代入预设的坐标变换公式中进行计算,得到所述目标像素点在所述目标水波纹图像中的纹理坐标。
[0018] 可选地,所述坐标变换公式为:
[0019] waveB[w,h]'=(waveA[w,h-1]+waveA[w,h+1]+waveA[w-1,h-1]+waveA[w-1,h]+waveA[w-1,h+1]+waveA[w+1,h-1]+waveA[w+1,h]+waveA[w+1,h+1])/4-waveB[w,h];
[0020] 其中,waveB[w,h]'表示所述目标像素点在所述目标水波纹图像中的纹理坐标,waveA[w,h-1]、waveA[w,h+1]、waveA[w-1,h-1]、waveA[w-1,h]、waveA[w-1,h+1]、waveA[w+1,h-1]、waveA[w+1,h]、waveA[w+1,h+1]分别表示所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标,waveB[w,h]表示所述目标像素点在所述上一帧水波纹图像中的纹理坐标。
[0021] 可选地,所述根据所述目标水波纹图像中每个像素点的纹理坐标,计算与所述目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量的步骤包括:
[0022] 在计算与所述目标像素点对应的水平偏移量和垂直偏移量时,获取与所述目标像素点在水平方向上相邻的左、右像素点的纹理坐标,以及与所述目标像素点在垂直方向上相邻的上、下像素点的纹理坐标;
[0023] 计算所述左、右像素点在水平方向上的纹理坐标差值,以及所述上、下像素点在垂直方向上的纹理坐标差值;
[0024] 将所述左、右像素点在水平方向上的纹理坐标差值作为与所述目标像素点对应的水平偏移量,将所述上、下像素点在垂直方向上的纹理坐标差值作为与所述目标像素点对应的垂直偏移量。
[0025] 可选地,所述颜色值包括R,G,B三基色的颜色值,其中,R根据所述水平偏移量计算得到,G根据所述垂直偏移量计算得到,R和G的取值范围在0~1之间,B为0~1之间的预设值。
[0026] 可选地,所述方法还包括:
[0027] 根据预设的波纹衰减算法,对所述目标像素点在所述目标水波纹图像中的纹理坐标进行衰减处理;
[0028] 将所述衰减处理后的纹理坐标作为所述目标像素点在所述目标水波纹图像的下一帧水波纹图像中的纹理坐标。
[0029] 可选地,所述波纹衰减算法为:
[0030] waveB[w,h]”=waveB[w,h]'-waveB[w,h]'*atten,其中,waveB[w,h]”表示衰减处理后的纹理坐标,atten表示预设的衰减系数。
[0031] 可选地,所述方法还包括:
[0032] 以所述水波生成中心点为圆心,根据预设半径确定一个波纹中心区域;
[0033] 根据所述着色器的片元函数,在所述波纹中心区域计算一个新的波纹;
[0034] 按照预设的混合权重,将所述目标水波纹图像中的波纹与所述新的波纹进行混合,其中,在所述波纹中心区域,所述目标水波纹图像中波纹的混合权重随着离所述水波生成中心点距离的增大而增大,所述新的波纹的混合权重随着离所述水波生成中心点距离的增大而减小。
[0035] 此外,为实现上述目的,本发明还提供一种水波纹图像的生成装置,所述装置包括:
[0036] 获取模,用于通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标;
[0037] 脚本执行模块,用于根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;
[0038] 着色器创建模块,用于创建一个着色器,将所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至所述着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至所述着色器中;
[0039] 材质球创建模块,用于在所述着色器中创建一个材质球,将所述着色器中存储的所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、所述水波分辨率的长宽比值和所述水波生成中心点的纹理坐标传入所述材质球;
[0040] 生成模块,用于调用所述着色器的顶点函数,根据所述顶点函数计算所述目标水波纹图像在屏幕中的位置坐标,根据所述位置坐标和所述材质球生成所述目标水波纹图像。
[0041] 此外,为实现上述目的,本发明还提供一种水波纹图像的生成设备,所述设备包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的水波纹图像的生成程序,所述水波纹图像的生成程序被所述处理器执行时实现如上所述的水波纹图像的生成方法的步骤。
[0042] 此外,为实现上述目的,本发明还提供一种存储介质,所述存储介质上存储有水波纹图像的生成程序,所述水波纹图像的生成程序被处理器执行时实现如上所述的水波纹图像的生成方法的步骤。
[0043] 本发明通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标;根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;创建一个着色器,将所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至所述着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至所述着色器中;在所述着色器中创建一个材质球,将所述着色器中存储的所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、所述水波分辨率的长宽比值和所述水波生成中心点的纹理坐标传入所述材质球;调用所述着色器的顶点函数,根据所述顶点函数计算所述目标水波纹图像在屏幕中的位置坐标,根据所述位置坐标和所述材质球生成所述目标水波纹图像。通过这种方式,水波纹的扭曲效果可以作用到其他图层或者游戏物体上,从而增强了视觉效果;此外,通过多线程计算方式,能够合理利用计算资源,提高计算效率。从而本发明解决了在利用Unity3D实现仿真的水波纹视觉效果时,计算机性能消耗过大,以及由于水波纹扭曲效果不能作用于背景图片以外的物体上而导致的视觉效果不佳的技术问题。附图说明
[0044] 图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图;
[0045] 图2为本发明水波纹图像的生成方法第一实施例的流程示意图;
[0046] 图3为本发明水波纹图像的生成装置一实施例的模块示意图;
[0047] 图4为本发明实施例中目标水波纹图像的显示效果示意图;
[0048] 图5为本发明实施例中水波生成中心点的显示效果示意图;
[0049] 图6为本发明实施例中将目标水波纹图像与波纹中心区域中生成的新的波纹进行混合后的显示效果示意图。
[0050] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0051] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0052] 如图1所示,图1是本发明实施例方案涉及的硬件运行环境的设备结构示意图。
[0053] 本发明实施例中水波纹图像的生成设备可以是PC机、计算机或服务器
[0054] 如图1所示,该设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。
用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口
1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器
1001的存储装置。
[0055] 本领域技术人员可以理解,图1中示出的设备结构并不构成对设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
[0056] 如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及水波纹图像的生成程序。
[0057] 在图1所示的终端中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的水波纹图像的生成程序,并执行下述水波纹图像的生成方法各个实施例中的操作。
[0058] 基于上述硬件结构,提出本发明水波纹图像的生成方法各个实施例。
[0059] 参照图2,图2为本发明水波纹图像的生成方法第一实施例的流程示意图,所述方法包括:
[0060] 步骤S10,通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标;
[0061] 本实施例中水波纹图像的生成方法应用于使用Unity3D工具实现水波纹效果仿真的场景,具体可以由水波纹图像的生成设备实现,本实施例以水波纹图像的生成设备为服务器为例进行说明。通过观察大自然中的水波,我们发现水波有扩散、衰减、折射的特性,根据这些特性,运用数学和几何知识,可以模拟出真实的水波。本实施例基于Unity的2D场景,设定鼠标在屏幕上停留的位置作为水波生成中心点,用户也可根据自己需求灵活设置水波生成中心点。
[0062] 为保证本发明正常实施,服务器需预先创建一个C#脚本程序,C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言,本实施例中,C#脚本程序用于计算待生成的目标水波纹图像中的水波纹纹理数据,该水波纹纹理数据包括水波纹图像中每个像素点的纹理坐标及对应的颜色值。
[0063] 具体地,可以在C#脚本程序中定义两个int类型(整型)的变量waveWidth、waveHeigh,分别作为水波分辨率的长和宽,其中waveWidth/waveHeight可以为水波纹图像显示窗口分辨率的长宽比;定义两个float类型(浮点型)的二维纹理坐标数组waveA、waveB,其中waveA用于存储上一帧水波纹图像中每个像素点的纹理坐标,waveB用于存储目标水波纹图像中每个像素点的纹理坐标,为存储图像中所有像素点的纹理坐标,waveA、waveB的数组长度可以设置为waveWidth*waveHeight;此外,定义一个Color类型(颜色型)的数组,用于存储目标水波纹图像中每个像素点的颜色值;定义一个Texture2D类型(二维图片型)的变量tex_uv,用于存储目标水波纹图像的水波纹纹理数据。
[0064] 在每帧水波纹图像显示的时间间隔,服务器执行上述C#脚本程序,可以获取到预先存储的当前待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标,其中,纹理坐标为UV坐标,U代表水平方向,U代表垂直方向,通过UV坐标,可以定位每个像素点在图像中的位置。
[0065] 步骤S20,根据上一帧水波纹图像中每个像素点的纹理坐标,计算目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;
[0066] 该步骤中,服务器继续执行C#脚本程序,以根据上述获取到的上一帧水波纹图像中每个像素点的纹理坐标,计算目标水波纹图像中每个像素点的纹理坐标及对应的颜色值。
[0067] 具体地,该步骤S20可以进一步包括:将上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到目标水波纹图像中每个像素点的纹理坐标;根据目标水波纹图像中每个像素点的纹理坐标,计算与目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量;根据水平偏移量和垂直偏移量,计算目标水波纹图像中每个像素点的颜色值。
[0068] 在本实施例中,服务器可以将上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到目标水波纹图像中每个像素点的纹理坐标,该纹理坐标存储至数组waveB中,然后,根据目标水波纹图像中每个像素点的纹理坐标,计算与该目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量,再根据该水平偏移量和垂直偏移量,计算目标水波纹图像中每个像素点的颜色值,该颜色值存储至数组Color中。
[0069] 其中,将上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到目标水波纹图像中每个像素点的纹理坐标的步骤可以进一步包括:在计算目标水波纹图像中的任一目标像素点的纹理坐标时,获取目标像素点在上一帧水波纹图像中的纹理坐标,以及目标像素点周围的8个像素点在上一帧水波纹图像中的纹理坐标;将目标像素点在上一帧水波纹图像中的纹理坐标,以及目标像素点周围的8个像素点在上一帧水波纹图像中的纹理坐标代入预设的坐标变换公式中进行计算,得到目标像素点在目标水波纹图像中的纹理坐标。
[0070] 上述坐标变换公式可以为:
[0071] waveB[w,h]'=(waveA[w,h-1]+waveA[w,h+1]+waveA[w-1,h-1]+waveA[w-1,h]+waveA[w-1,h+1]+waveA[w+1,h-1]+waveA[w+1,h]+waveA[w+1,h+1])/4-waveB[w,h];
[0072] 其中,waveB[w,h]'表示目标像素点在目标水波纹图像中的纹理坐标,waveA[w,h-1]、waveA[w,h+1]、waveA[w-1,h-1]、waveA[w-1,h]、waveA[w-1,h+1]、waveA[w+1,h-1]、waveA[w+1,h]、waveA[w+1,h+1]分别表示目标像素点周围的8个像素点在上一帧水波纹图像中的纹理坐标,waveB[w,h]表示目标像素点在上一帧水波纹图像中的纹理坐标。
[0073] 进一步地,上述根据目标水波纹图像中每个像素点的纹理坐标,计算与目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量的步骤包括:在计算与目标像素点对应的水平偏移量和垂直偏移量时,获取与目标像素点在水平方向上相邻的左、右像素点的纹理坐标,以及与目标像素点在垂直方向上相邻的上、下像素点的纹理坐标;计算左、右像素点在水平方向上的纹理坐标差值,以及上、下像素点在垂直方向上的纹理坐标差值;将左、右像素点在水平方向上的纹理坐标差值作为与目标像素点对应的水平偏移量,将上、下像素点在垂直方向上的纹理坐标差值作为与目标像素点对应的垂直偏移量。
[0074] 在本实施例中,设目标像素点对应的水平偏移量为offset_u,垂直偏移量为offset_v,则offset_u等于目标像素点的左、右两个像素点在水平方向上的纹理坐标差值,offset_v等于目标像素点的上、下两个像素点在垂直方向上的纹理坐标差值。之后,再根据offset_u和offset_v计算目标像素点的颜色值。
[0075] 进一步地,上述颜色值包括R,G,B三基色的颜色值,其中,R根据水平偏移量计算得到,G根据垂直偏移量计算得到,R和G的取值范围在0~1之间,B为0~1之间的预设值。
[0076] 服务器在计算得到目标水波纹图像中每个像素点的纹理坐标及对应的颜色值后,将该目标水波纹图像中每个像素点的纹理坐标及对应的颜色值赋值给tex_uv,即得到目标水波纹图像的水波纹纹理。
[0077] 进一步地,本实施例中,水波纹图像的生成方法还可以包括:根据预设的波纹衰减算法,对所述目标像素点在所述目标水波纹图像中的纹理坐标进行衰减处理;将所述衰减处理后的纹理坐标作为所述目标像素点在所述目标水波纹图像的下一帧水波纹图像中的纹理坐标。
[0078] 在本实施例中,为了呈现一种波纹随着时间的推移慢慢衰减的效果,可以根据预设的波纹衰减算法,对目标像素点在所述目标水波纹图像中的纹理坐标,即waveB[w,h]'进行衰减处理,然后将衰减处理后的纹理坐标作为该目标像素点在目标水波纹图像的下一帧水波纹图像中的纹理坐标。
[0079] 上述波纹衰减算法可以为:waveB[w,h]”=waveB[w,h]'-waveB[w,h]'*atten,其中,waveB[w,h]”表示衰减处理后的纹理坐标,atten表示预设的衰减系数。
[0080] 采用上述算法,波纹会在每一帧慢慢衰减,直到为0。其中,衰减系数atten为float类型的变量,其可以灵活设置,比如当想要波纹快速衰减时,可以将atten设置得较大,当想要波纹缓慢衰减时,可以将atten设置得较小。
[0081] 需要说明的是,为了使波纹能够扩散,可以用将当前的帧计算的波形和上两帧的波形进行替换,循环重复上述计算,波纹会不断的进行扩散。
[0082] 步骤S30,创建一个着色器,将目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至着色器中;
[0083] 服务器在计算得到目标水波纹图像的水波纹纹理后,创建一个着色器Shader,然后将该目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至该着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至该着色器中,以供后续调用。
[0084] 具体地,可以先创建一个着色器,命名为WaterWaveCameraShader,在WaterWaveCameraShader里定义sampler2D类型的变量存储上述计算得到的tex_uv,定义两个float类型的变量_WaveCenter_x和_WaveCenter_y,存储波纹生成中心点的uv坐标的x和y,定义一个float类型的变量_Scale_xy,存储水波分辨率的比值waveWidth/waveHeight。
[0085] 步骤S40,在着色器中创建一个材质球,将着色器中存储的目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、水波分辨率的长宽比值和水波生成中心点的纹理坐标传入材质球;
[0086] 该步骤中,服务器首先在着色器中创建一个材质球,由于本发明的水波纹是基于摄像机(Camera)的,所以WaterWaveCamera脚本需绑定在一个Camera上,在WaterWaveCamera脚本中写一个后处理函数,此函数是在该摄像机拍摄到的图像的基础上,对这个图像进行后期特效处理;然后,将着色器中存储的目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、水波分辨率的长宽比值和水波生成中心点的纹理坐标传入材质球。
[0087] 步骤S50,调用着色器的顶点函数,根据顶点函数计算目标水波纹图像在屏幕中的位置坐标,根据位置坐标和材质球生成目标水波纹图像。
[0088] 该步骤中,服务器通过调用着色器自带的顶点函数,计算目标水波纹图像在屏幕中的位置坐标,其中顶点函数用于完成纹理的顶点坐标从模型空间到剪裁空间的转换;然后,根据计算得到的位置坐标和材质球生成目标水波纹图像。其中,计算目标水波纹图像在屏幕中的位置坐标以及根据位置坐标和材质球生成目标水波纹图像的具体方式可以参照现有技术,此处不做赘述。
[0089] 本实施例通过上述方式,水波纹的扭曲效果可以作用到其他图层或者游戏物体上,从而增强了视觉效果;此外,通过单独创建一个C#脚本程序计算目标水波纹图像中每个像素点的纹理坐标及对应的颜色值,实现了对水波纹理的计算,相比于现有的通过调用Unity3D的API计算水波纹理的方式,计算机性能消耗大大减少。从而本实施例解决了在利用Unity3D实现仿真的水波纹视觉效果时,计算机性能消耗过大,以及由于水波纹扭曲效果不能作用于背景图片以外的物体上而导致的视觉效果不佳的技术问题。
[0090] 进一步地,基于本发明水波纹图像的生成方法第一实施例,提出本发明水波纹图像的生成方法第二实施例。
[0091] 在本实施例中,水波纹图像的生成方法还可以包括:以水波生成中心点为圆心,根据预设半径确定一个波纹中心区域;根据着色器的片元函数,在波纹中心区域计算一个新的波纹;按照预设的混合权重,将目标水波纹图像中的波纹与新的波纹进行混合,其中,在波纹中心区域,目标水波纹图像中波纹的混合权重随着离水波生成中心点距离的增大而增大,新的波纹的混合权重随着离水波生成中心点距离的增大而减小。
[0092] 在本实施例中,为进一步增强图像的视觉效果,可以对生成的目标水波纹图像中的水波纹理进行优化。具体地,可以定义一个float类型的变量_Waveuv,来储存_WaveTex获取到的水波纹纹理的uv,_Waveuv.x和_Waveuv.y取值区间为(0~1),由于波纹的uv偏移是有正有负的,所以需要将这个_Waveuv.x和_Waveuv.y映射到(-1~1)之间,如果此时波纹效果太强,可以乘以一个小于1的数来削弱_Waveuv偏移效果。将顶点函数输出的uv值和_Waveuv进行叠加,并应用到主纹理_MainTex上,即可得到水波纹效果。但此时的水波纹效果的波纹中心区域看起来是由很多密密麻麻的水波组成,视觉感官极差,效果如图4所示,图4为本发明实施例中目标水波纹图像的显示效果示意图。
[0093] 为了削弱中心区域的违和感,可以在Shader的片元函数里面使用正弦函数和时间函数重新在波纹中心区域计算一个新的波纹,如图5所示,图5为本发明实施例中水波生成中心点的显示效果示意图,可以以水波生成中心点为圆心,并定义一个float类型的变量_R,作为需要处理的波纹中心区域半径,由此确定一个波纹中心区域,然后调用Shader的片元函数在该波纹中心区域计算一个新的波纹,之后,按照预设的混合权重,将目标水波纹图像中的波纹与该新的波纹进行混合,混合规则可以为:在波纹中心区域,目标水波纹图像中的波纹的混合权重随着离水波生成中心点距离的增大而增大,新的波纹的混合权重随着离水波生成中心点距离的增大而减小,如此可以实现两个波的无缝衔接,最终效果如图6所示,图6为本发明实施例中将目标水波纹图像与波纹中心区域中生成的新的波纹进行混合后的显示效果示意图,图6中的波纹视觉效果已经有显著改善,且场景中的鱼也有扭曲效果。
[0094] 本实施例通过在波纹中心区域计算一个新的波纹,并将目标水波纹图像中的波纹与新的波纹进行混合,进一步增强了图像的视觉效果。
[0095] 本发明还提供一种水波纹图像的生成装置。参照图3,图3为本发明水波纹图像的生成装置一实施例的模块示意图。本实施例中,所述水波纹图像的生成装置包括:
[0096] 获取模块10,用于通过预设的C#脚本程序,获取待生成的目标水波纹图像的上一帧水波纹图像中每个像素点的纹理坐标;
[0097] 脚本执行模块20,用于根据所述上一帧水波纹图像中每个像素点的纹理坐标,计算所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值;
[0098] 着色器创建模块30,用于创建一个着色器,将所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值存储至所述着色器中,并将预设的水波分辨率的长宽比值、水波生成中心点的纹理坐标存储至所述着色器中;
[0099] 材质球创建模块40,用于在所述着色器中创建一个材质球,将所述着色器中存储的所述目标水波纹图像中每个像素点的纹理坐标及对应的颜色值、所述水波分辨率的长宽比值和所述水波生成中心点的纹理坐标传入所述材质球;
[0100] 生成模块50,用于调用所述着色器的顶点函数,根据所述顶点函数计算所述目标水波纹图像在屏幕中的位置坐标,根据所述位置坐标和所述材质球生成所述目标水波纹图像。
[0101] 进一步地,所述脚本执行模块20还用于:
[0102] 将所述上一帧水波纹图像中每个像素点的纹理坐标进行坐标变换,得到所述目标水波纹图像中每个像素点的纹理坐标;
[0103] 根据所述目标水波纹图像中每个像素点的纹理坐标,计算与所述目标水波纹图像中每个像素点的纹理坐标对应的水平偏移量和垂直偏移量;
[0104] 根据所述水平偏移量和所述垂直偏移量,计算所述目标水波纹图像中每个像素点的颜色值。
[0105] 进一步地,所述脚本执行模块20还用于:
[0106] 在计算所述目标水波纹图像中的任一目标像素点的纹理坐标时,获取所述目标像素点在所述上一帧水波纹图像中的纹理坐标,以及所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标;
[0107] 将所述目标像素点在所述上一帧水波纹图像中的纹理坐标,以及所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标代入预设的坐标变换公式中进行计算,得到所述目标像素点在所述目标水波纹图像中的纹理坐标。
[0108] 进一步地,所述坐标变换公式为:
[0109] waveB[w,h]'=(waveA[w,h-1]+waveA[w,h+1]+waveA[w-1,h-1]+waveA[w-1,h]+waveA[w-1,h+1]+waveA[w+1,h-1]+waveA[w+1,h]+waveA[w+1,h+1])/4-waveB[w,h];
[0110] 其中,waveB[w,h]'表示所述目标像素点在所述目标水波纹图像中的纹理坐标,waveA[w,h-1]、waveA[w,h+1]、waveA[w-1,h-1]、waveA[w-1,h]、waveA[w-1,h+1]、waveA[w+1,h-1]、waveA[w+1,h]、waveA[w+1,h+1]分别表示所述目标像素点周围的8个像素点在所述上一帧水波纹图像中的纹理坐标,waveB[w,h]表示所述目标像素点在所述上一帧水波纹图像中的纹理坐标。
[0111] 进一步地,所述脚本执行模块20还用于:
[0112] 在计算与所述目标像素点对应的水平偏移量和垂直偏移量时,获取与所述目标像素点在水平方向上相邻的左、右像素点的纹理坐标,以及与所述目标像素点在垂直方向上相邻的上、下像素点的纹理坐标;
[0113] 计算所述左、右像素点在水平方向上的纹理坐标差值,以及所述上、下像素点在垂直方向上的纹理坐标差值;
[0114] 将所述左、右像素点在水平方向上的纹理坐标差值作为与所述目标像素点对应的水平偏移量,将所述上、下像素点在垂直方向上的纹理坐标差值作为与所述目标像素点对应的垂直偏移量。
[0115] 进一步地,所述颜色值包括R,G,B三基色的颜色值,其中,R根据所述水平偏移量计算得到,G根据所述垂直偏移量计算得到,R和G的取值范围在0~1之间,B为0~1之间的预设值。
[0116] 进一步地,所述装置还包括:
[0117] 衰减模块,用于根据预设的波纹衰减算法,对所述目标像素点在所述目标水波纹图像中的纹理坐标进行衰减处理;
[0118] 将所述衰减处理后的纹理坐标作为所述目标像素点在所述目标水波纹图像的下一帧水波纹图像中的纹理坐标;
[0119] 进一步地,所述波纹衰减算法为:
[0120] waveB[w,h]”=waveB[w,h]'-waveB[w,h]'*atten,其中,waveB[w,h]”表示衰减处理后的纹理坐标,atten表示预设的衰减系数。
[0121] 进一步地,所述装置还包括:
[0122] 确定模块,用于以所述水波生成中心点为圆心,根据预设半径确定一个波纹中心区域;
[0123] 计算模块,用于根据所述着色器的片元函数,在所述波纹中心区域计算一个新的波纹;
[0124] 波纹混合模块,用于按照预设的混合权重,将所述目标水波纹图像中的波纹与所述新的波纹进行混合,其中,在所述波纹中心区域,所述目标水波纹图像中波纹的混合权重随着离所述水波生成中心点距离的增大而增大,所述新的波纹的混合权重随着离所述水波生成中心点距离的增大而减小。
[0125] 上述各程序模块实现的方法及有益效果可参照本发明水波纹图像的生成方法实施例,此处不再赘述。
[0126] 本发明还提供一种存储介质。
[0127] 本发明存储介质上存储有水波纹图像的生成程序,所述水波纹图像的生成程序被处理器执行时实现如上所述的水波纹图像的生成方法的步骤。
[0128] 其中,在所述处理器上运行的水波纹图像的生成程序被执行时所实现的方法可参照本发明水波纹图像的生成方法各个实施例,此处不再赘述。
[0129] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
[0130] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0131] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0132] 以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈