本申请涉及终端游戏技术领域,尤其涉及一种面向手游的生成水深度图的方法、装置和设备。
背景技术:
在计算机游戏、手机游戏等终端游戏中,通常会有水面画面场景,而水面画面的生成效果与真实世界中的水面的贴合度,影响着玩家的游戏体验,游戏中的水面画面效果越接近真实世界,越能提高玩家的游戏体验效果。
正常水面看到的颜色和透明度与光线中传播的距离有关,也就是与水底的深度和当前摄像机观察的角度相关,如果忽略水的深度和透明度进行水面渲染,得到的结果会不够真实,如图1和图2所示,图1为单一颜色不透明的水渲染结果,图2为根据水深度填充颜色的不透明的水,图1的渲染效果明显偏离真实世界,图2根据水的深度计算水的颜色,能大约感受到池底的深度,在图2的基础上进行水的透明度计算,便是真实世界中看到的水的样子。
在图形学中,获取当前观察角度的水面深度值是通过实时计算得到的,即用3d相机渲染一遍场景中所有非透明的物体,记录它们的深度,这样相当于场景要画多一遍,虽然在pc端上可行,但由于手游设备硬件性能有限,会在手游设备运行手游时产生大量的性能消耗,降低游戏的流畅度。
技术实现要素:
本申请提供了一种面向手游的生成水深度图的方法、装置和设备,用于解决现有的水面深度的获取方式需要用3d相机渲染一遍场景中所有非透明的物体,手游设备会在游戏运行过程中产生大量的性能消耗,降低游戏的流畅度的技术问题。
有鉴于此,本申请第一方面提供了一种面向手游的生成水深度图的方法,包括:
离线获取水面的各点的垂直深度,将垂直深度数据存储到第一贴图中;
根据目标视角下的水面入射点和入射线与水底的交点确定与所述入射点对应的水面目标点和所述水面目标点对应的垂直深度,所述水面目标点为所述水面入射点射到水底得到的交点作垂直于所述水面的垂直线得到的垂直交点;
计算所述水面入射点和所述水面目标点的距离,得到水面的mesh的uv偏移值;
将所述uv偏移值写入到所述第一贴图中,得到第二贴图;
根据所述第二贴图计算游戏中的水面的uv偏移值;
根据所述游戏中的水面的uv偏移值对所述第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度;
根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点透明度,得到游戏中的水深度图。
可选地,所述根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点的透明度,得到游戏中的水深度图,包括:
根据所述游戏中的水面的各点的水深度,基于预置透明度计算公式计算游戏中的水面的各点的透明度,得到游戏中的水深度图;
其中,所述预置透明度计算公式为:
式中,power为常数值,deep为水深度,deepmax为最大水深度。
可选地,所述离线获取水面的各点的垂直深度,将垂直深度数据存储到第一贴图中,还包括:
调整水面mesh的uv值,使得所述水面mesh的纹理采样与所述第一贴图的纹理匹配。
可选地,所述根据所述第二贴图计算游戏中的水面的uv偏移值,包括:
获取所述第二贴图的水面上方到水面的四个水面视角方向;
根据所述四个水面视角方向和预置uv偏移值公式计算游戏中的水面的uv偏移值,其中,所述预置uv偏移值公式为:
式中,viewdir.x为射向x轴正方向的水面视角方向,-viewdir.x为射向x轴负方向的水面视角方向,viewdir.z为射向z轴正方向的水面视角方向,-viewdir.z为射向z轴负方向的水面视角方向,deepdir.y为x轴正方向上的水面视角方向的uv偏移值,deepdir.x为x轴负方向上的水面视角方向的uv偏移值,deepdir.w为z轴正方向上的水面视角方向的uv偏移值,deepdir.z为z轴负方向上的水面视角方向的uv偏移值。
本申请第二方面提供了一种面向手游的生成水深度图的装置,包括:
获取模块,用于离线获取水面的各点的垂直深度,将垂直深度数据储存到第一贴图中;
目标确定模块,用于根据目标视角下的水面入射点和入射线与水底的交点确定与所述入射点对应的水面目标点和所述水面目标点对应的垂直深度,所述水面目标点为所述水面入射点射到水底得到的交点作垂直于所述水面的垂直线得到的垂直交点;
离线uv偏移值计算模块,用于计算所述水面入射点和所述水面目标点的距离,得到水面mesh的uv偏移值;
贴图模块,用于将所述uv偏移值写入到所述第一贴图中,得到第二贴图;
游戏uv偏移值计算模块,用于根据所述第二贴图计算游戏中的水面的uv偏移值;
游戏水深度计算模块,用于根据所述游戏中的水面的uv偏移值对所述第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度;
游戏透明度计算模块,用于根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点的透明度,得到游戏中的水深度图。
可选地,所述游戏透明度计算模块,具体用于:
根据所述游戏中的水面的各点的水深度,基于预置透明度计算公式计算游戏中的水面的各点的透明度,得到游戏中的水深度图;
其中,所述预置透明度计算公式为:
式中,power为常数值,deep为水深度,deepmax为最大水深度。
可选地,所述获取模块还用于:
调整水面mesh的uv值,使得所述水面mesh的纹理采样与所述第一贴图的纹理匹配。
可选地,所述游戏uv偏移值计算模块具体用于:
获取所述第二贴图的水面上方到水面的四个水面视角方向;
根据所述四个水面视角方向和预置uv偏移值公式计算游戏中的水面的uv偏移值,其中,所述预置uv偏移值公式为:
式中,viewdir.x为射向x轴正方向的水面视角方向,-viewdir.x为射向x轴负方向的水面视角方向,viewdir.z为射向z轴正方向的水面视角方向,-viewdir.z为射向z轴负方向的水面视角方向,deepdir.y为x轴正方向上的水面视角方向的uv偏移值,deepdir.x为x轴负方向上的水面视角方向的uv偏移值,deepdir.w为z轴正方向上的水面视角方向的uv偏移值,deepdir.z为z轴负方向上的水面视角方向的uv偏移值。
本申请第三方面提供了一种面向手游的生成水深度图的设备,所述设备包括处理器和存储器;
所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行第一方面任一种所述的面向手游的生成水深度图的方法。
本申请第四方面提供一种计算机可读存储介质,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行第一方面任一种所述的面向手游的生成水深度图的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请提供了一种面向手游的生成水深度图的方法,包括:
离线获取水面的各点的垂直深度,将垂直深度数据存储到第一贴图中;根据目标视角下的水面入射点和入射线与水底的交点确定与入射点对应的水面目标点和水面目标点对应的垂直深度,水面目标点为所述水面入射点射到水底得到的交点作垂直于所述水面的垂直线得到的垂直交点;计算水面入射点和所述水面目标点的距离,得到水面的mesh的uv偏移值;将uv偏移值写入到所述第一贴图中,得到第二贴图;根据第二贴图计算游戏中的水面的uv偏移值;根据游戏中的水面的uv偏移值对第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度;根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点透明度,得到游戏中的水深度图。本申请提供的面向手游的生成水深度图的方法,通过离线处理的方式,对水面进行贴图处理,得到写入水面mesh的uv偏移值的第二贴图,然后利用离线得到的第二贴图来计算游戏中的水面的uv偏移值,从而计算得到游戏中的水面的各点的水深度,然后再根据水深度计算对应点的水透明度,得到游戏中的水深度图,不需要重新渲染一遍场景中所有非透明的物体,解决了现有的水面深度的获取方式需要用3d相机渲染一遍场景中所有非透明的物体,手游设备会在游戏运行过程中产生大量的性能消耗,降低游戏的流畅度的技术问题。
附图说明:
图1为单一颜色不透明的水渲染结果;
图2为根据水深度填充颜色的不透明的水;
图3为本申请实施例中提供的一种面向手游的生成水深度图的方法的流程示意图;
图4为离线获取水面的各点的垂直深度的示意图;
图5位将垂直深度数据存储到第一贴图depthtex中的效果图;
图6为某一视角的实际水深度计算示意图;
图7为向四个方向斜向下发射射线的效果示意图;
图8为将四个水面视角方向的uv偏移值写到第二贴图的四个通道中的效果示意图;
图9为本申请中例举的两种viewdir向量的uv偏移值计算方式示意图;
图10为本申请实施例中提供的一种面向手游的生成水深度图的装置的结构示意图。
具体实施方式
为了使本技术领域人员更好的理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部实施例,基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了便于理解,请参阅图3,本申请提供了一种面向手游的生成水深度图的方法的一个实施例,包括:
步骤101、离线获取水面的各点的垂直深度,将垂直深度数据存储到第一贴图中。
需要说明的是,为避免由于移动设备硬件性能的限制,无法顺利在手游中进行实时渲染深度图,本申请实施例在离线烘培过程中获取水面的各点的垂直深度,如图4所示,从上到下发射垂直的射线,得到每条射线与水底(地形或者石头等杂物)的碰撞点,水面世界坐标高度减去碰撞点的世界坐标高度便可得到垂直深度,将得到的各点的垂直深度的数据存储到第一贴图中,如图5所示,可将第一贴图命名为depthtex,其中,图5中的右边灰度图的灰度值对应垂直深度值。
还需要说明的是,此时还可以调整水面mesh的uv值,使得水面mesh的纹理采样与第一贴图的纹理匹配,从而保证纹理的一致性。
步骤102、根据目标视角下的水面入射点和入射线与水底的交点确定与入射点对应的水面目标点和所述水面目标点对应的垂直深度。
需要说明的是,在游戏里的视角并不是垂直向下看的,因此步骤101得到垂直深度后,还需要进行后续处理。如图6所示,图6为游戏中的实际深度值示意图,图6中的相机为目标视角,α为目标视角对应的水面入射光线与水面的夹角,是游戏中的变量,随玩家操作视角而改变,可以直接获取,o点为目标视角下的水面入射点,b点为入射线与水底的交点,c点为与入射点对应的水面目标点,bc为水面目标点对应的垂直深度,从图6中的目标视角实际光线穿透水的距离为ob,不是oa,因此获得最终游戏中的ob值则获得游戏中的水深度。
步骤103、计算水面入射点和水面目标点的距离,得到水面的mesh的uv偏移值。
图6中cb为c点的垂直深度,可以从步骤101中得到的第一贴图depthtex采样得到,而对于c点确定方式,可以是:
在离线烘培中,假设图6中的夹角α为30o,虚拟相机倾斜30o向下发射射线,可以得到ob的值,因此可以得到oc,oc=ob×cos(α)。在得到oc后,计算水面mesh的uv偏移值,水面mesh的uv偏移值的计算方式为:
式中,width为水面的宽度,可根据实际情况设定。
步骤104、将uv偏移值写入到所述第一贴图中,得到第二贴图。
需要说明的是,得到水面mesh的uv偏移值uvoffser之后,将uvoffset写到第一贴图中,得到第二贴图,此时可将第二贴图命名为depthdirtex。
步骤105、根据第二贴图计算游戏中的水面uv偏移值。
需要说明的是,得到第二贴图之后,离线烘培中的操作完成,接下来需要利用离线得到的第二贴图来得到游戏中睡眠的uv偏移值,计算方式可以是:
获得第二贴图的水面上方到水面的四个水面视角方向,如图7所示(仅展示游戏中水面的其中一个截面图),由于游戏中的水面是可以360度视角观看的,为了还原各个方向的斜视深度,需要向各个方向发射射线,计算的方向越多,结果越精确,为了减少计算量,本申请实施例中仅分别向 x、-x、 z和-z四个方向斜向下45o角发射射线(当然四个方向的角度取值可以不相等,取值不相等时,深度还原效果会受到相应的影响,具体取值可以根据实际应用选取),得到四个水面视角方向,然后计算四个水面视角方向的uv偏移值,分别写到第二贴图的四个通道,如图8所示。假设水面上方的虚拟射线机射线到水面视角方向为viewdir,则根据viewdir可以求得角度α,求角度α的公式为:
由于在离线时已经确定oc,因此,可以求得游戏中的ob为:
depthdirtex贴图中四个通道分别存储了四个方向的uv偏移值,x方向对于x轴负方向,y方向对于x轴正方向,z方向对于z轴负方向,w方向对于z轴正方向。如图9所示,图9例举了两种viewdir向量的uv偏移值计算方式。
viewdir1的符号为[ , ],viewdir2的符号为[-,-];
viewdir1方向上,uv-offset=[deepdir.y*viewdir1.x,deepdir.w*viewdir.z];
viewdir2方向上,uv-offset=[deepdir.x*viewdir2.x,deepdir.z*viewdir2.z];
把这两种情况统一到一个公式上,正负情况需要注意加限制;
uv-offset.x=[deepdir.y*max(0,viewdir.x)-deepdir.x*max(0,-viewdir.x)]
uv-offset.y=[deepdir.w*max(0,viewdir.z)-deepdir.z*max(0,-viewdir2.z)]
因此,可根据四个水平视角方向和预制uv偏移值公式计算游戏中的水面uv偏移值,其中,预置uv偏移值公式为:
式中,viewdir.x为射向x轴正方向的水面视角方向,-viewdir.x为射向x轴负方向的水面视角方向,viewdir.z为射向z轴正方向的水面视角方向,-viewdir.z为射向z轴负方向的水面视角方向,deepdir.y为x轴正方向上的水面视角方向的uv偏移值,deepdir.x为x轴负方向上的水面视角方向的uv偏移值,deepdir.w为z轴正方向上的水面视角方向的uv偏移值,deepdir.z为z轴负方向上的水面视角方向的uv偏移值。
步骤106、根据所述游戏中的水面的uv偏移值对第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度。
需要说明的是,在游戏里的着色器还原深度的过程可以表示为:
其中,ftex()为贴图采样操作函数。
因此,游戏中的水面的各点的水深度可以表示为:
将各点对应的α,第一贴图的uv和
步骤107、根据游戏中的水面的各点的水深度计算游戏中的水面的各点透明度,得到游戏中的水深度图。
需要说明的是,得到水深度之后,根据水深度计算透明度,计算方式可以是:
其中,deep为水深度,deepmax为最大水深度,power为常数值,可以做透明映射,让浅水的地方不会显得那么突兀,透明度效果好。
最后根据水深度和水透明度生成水深度图,生成的水深度图水深度效果还原度高,渲染速度快。
还需要说明的是,本申请实施例在离线生成贴图的过程中,斜向下的角度取值可以取多个值,比如与水面夹角分别为15o、20o、25o、30o和35o,分别生成多组数据,然后对多组数据累计取平均值,可以使得游戏中还原的深度值适应更多变的摄像机镜头,减少穿帮机率。
本申请实施例中提供的面向手游的生成水深度图的方法,通过离线处理的方式,对水面进行贴图处理,得到写入水面mesh的uv偏移值的第二贴图,然后利用离线得到的第二贴图来计算游戏中的水面的uv偏移值,从而计算得到游戏中的水面的各点的水深度,再根据水深度计算对应点的水透明度,得到游戏中的水深度图,不需要重新渲染一遍游戏场景中所有非透明的物体,解决了现有的水面深度的获取方式需要用3d相机渲染一遍场景中所有非透明的物体,手游设备会在游戏运行过程中产生大量的性能消耗,降低游戏的流畅度的技术问题。
为了便于理解,请参阅图10,本申请中提供了一种面向手游的生成水深度图的装置,包括:
获取模块,用于离线获取水面的各点的垂直深度,将垂直深度数据存储到第一贴图中;
目标确定模块,用于根据目标视角下的水面入射点和入射线与水底的交点确定与入射点对应的水面目标点和水面目标点对应的垂直深度,所述水面目标点为所述水面入射点射到水底得到的交点作垂直于所述水面的垂直线得到的垂直交点。
离线uv偏移值计算模块,用于计算所述水面入射点和水面目标点的距离,得到水面mesh的uv偏移值。
贴图模块,用于将uv偏移值写入到所述第一贴图中,得到第二贴图。
游戏uv偏移值计算模块,用于根据第二贴图计算游戏中的水面的uv偏移值。
游戏水深度计算模块,用于根据游戏中的水面的uv偏移值对第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度。
游戏水透明度计算模块,用于根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点的透明度,得到游戏中的水深度图;
进一步地,所述游戏水透明度计算模块,具体用于:
根据游戏中的水面的各点的水深度,基于预置透明度计算公式计算游戏中的水面的各点的透明度,得到游戏中的水深度图。
其中,预置透明度计算公式为:
式中,power为常数值,deep为水深度,deepmax为最大水深度。
进一步地,获取模块还用于:
调整水面mesh的uv值,使得水面mesh的纹理采样与第一贴图的纹理匹配。
进一步地,游戏uv偏移值计算模块具体用于:
获取第二贴图的水面上方到水面的四个水面视角方向;
根据四个水面视角方向和预置uv偏移值公式计算游戏中的水面的uv偏移值,其中,预置uv偏移值公式为:
式中,viewdir.x为射向x轴正方向的水面视角方向,-viewdir.x为射向x轴负方向的水面视角方向,viewdir.z为射向z轴正方向的水面视角方向,-viewdir.z为射向z轴负方向的水面视角方向,deepdir.y为x轴正方向上的水面视角方向的uv偏移值,deepdir.x为x轴负方向上的水面视角方向的uv偏移值,deepdir.w为z轴正方向上的水面视角方向的uv偏移值,deepdir.z为z轴负方向上的水面视角方向的uv偏移值。
本申请提供了一种面向手游的生成水深度图的设备,设备包括处理器和存储器;
存储器用于存储程序代码,并将程序代码传输给所述处理器;
处理器用于根据程序代码中的指令执行前述的面向手游的生成水深度图的方法实施例中的面向手游的生成水深度图的方法。
本申请提供了一种计算机可读存储介质的实施例,计算机可读存储介质用于存储程序代码,程序代码用于执行前述的面向手游的生成水深度图的实施例中的面向手游的生成水深度图的方法。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现,例如,以上所描述的系统实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的偶合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或者其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上,可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个单元中。也可以是各个单元单独物理存在,也可以两个或者两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本申请的技术方案本质上或者说对现有技术作出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机系统(可以是个人计算机,服务器,或者网络系统等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(英文全称:read-onlymemory,英文缩写:rom)、随机存取存储器(英文全称:randomaccessmemory,英文缩写:ram)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用于说明本申请的技术方案,而非对其限制,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围。
1.一种面向手游的生成水深度图的方法,其特征在于,包括:
离线获取水面的各点的垂直深度,将垂直深度数据储存到第一贴图中;
根据目标视角下的水面入射点和入射线与水底的交点确定与所述入射点对应的水面目标点和所述水面目标点对应的垂直深度,所述水面目标点为所述水面入射点射到水底得到的交点作垂直于所述水面的垂直线得到的垂直交点;
计算所述水面入射点和所述水面目标点的距离,得到水面mesh的uv偏移值;
将所述uv偏移值写入到所述第一贴图中,得到第二贴图;
根据所述第二贴图计算游戏中的水面的uv偏移值;
根据所述游戏中的水面的uv偏移值对所述第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度;
根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点的透明度,得到游戏中的水深度图。
2.根据权利要求1所述的面向手游的生成水深度图的方法,其特征在于,所述根据所述游戏中的水面的各点的水深度计算游戏中水面的各点的透明度,得到游戏中的水深度图,包括:
根据所述游戏中的水面的各点的水深度,基于预置透明度计算公式计算游戏中的水面的各点的透明度,得到游戏中的水深度图;
其中,所述预置透明度计算公式为:
式中power为常数值,deep为水深度,deepmax为最大水深度。
3.根据权利要求1所述的面向手游的生成水深度图的方法,其特征在于,所述离线获取水面的各点的垂直深度,将垂直深度数据存储到第一贴图中,还包括:
调整水面mesh的uv值,使得所述水面mesh的纹理采样与所述第一贴图的纹理匹配。
4.根据权利要求1所述的面向手游的生成水深度图的方法,其特征在于,所述根据所述第二贴图计算游戏中的水面的uv偏移值,包括:
获取所述第二贴图的水面上方到水面的四个水面视角方向;
根据所述四个水面视角方向和预置uv偏移值计算公式计算游戏中水面的uv偏移值,其中,所述预置uv偏移值公式为:
式中,viewdir.x为射向x轴正方向的水面视角方向,-viewdir.x为射向x轴负方向的水面视角方向,viewdir.z为射向z轴正方向的水面视角方向,-viewdir.z为射向z轴负方向的水面视角方向,deepdir.y为x轴正方向上的水面视角方向的uv偏移值,deepdir.x为x轴负方向上的水面视角方向的uv偏移值,deepdir.w为z轴正方向上的水面视角方向的uv偏移值,deepdir.z为z轴负方向上的水面视角方向的uv偏移值。
5.一种面向手游的生成水深度图的装置,其特征在于,包括:
获取模块,用于离线获取水面的各点的垂直深度,将垂直深度数据储存到第一贴图中;
目标确定模块,用于根据目标视角下的水面入射点和入射线与水底的交点确定与所述入射点对应的水面目标点和所述水面目标点对应的垂直深度,所述水面目标点为所述水面入射点射到水底得到的交点作垂直于所述水面的垂直线得到的垂直交点;
离线uv偏移值计算模块,用于计算所述水面入射点和所述水面目标点的距离,得到水面mesh的uv偏移值;
贴图模块,用于将所述uv偏移值写入到所述第一贴图中,得到第二贴图;
游戏uv偏移值计算模块,用于根据所述第二贴图计算游戏中的水面的uv偏移值;
游戏水深度计算模块,用于根据所述游戏中的水面的uv偏移值对所述第一贴图进行贴图采样,将采样结果除以游戏用户视角方向与游戏中的水面所成的入射角的余弦值,得到游戏中的水面的各点的水深度;
游戏水透明度计算模块,用于根据所述游戏中的水面的各点的水深度计算游戏中的水面的各点的透明度,得到游戏中的水深度图。
6.根据权利要求5所述的面向手游的生成水深度图的装置,其特征在于,所述游戏水透明度计算模块,具体用于:
根据所述游戏中的水面的各点的水深度,基于预置透明度计算公式计算游戏中的水面的各点的透明度,得到游戏中的水深度图;
其中,所述预置透明度计算公式为:
式中,power为常数值,deep为水深度,deepmax为最大水深度。
7.根据权利要求5所述的面向手游的生成水深度图的装置,其特征在于,所述获取模块还用于:
调整水面mesh的uv值,使得所述水面mesh的纹理采样与所述第一贴图的纹理匹配。
8.根据权利要求5所述的面向手游的生成水深度图的装置,其特征在于,所述游戏uv偏移值计算模块具体用于:
获取所述第二贴图的水面上方到水面的四个水面视角方向;
根据所述四个水面视角方向和预置uv偏移值计算公式计算游戏中水面的uv偏移值,其中,所述预置uv偏移值公式为:
式中,viewdir.x为射向x轴正方向的水面视角方向,-viewdir.x为射向x轴负方向的水面视角方向,viewdir.z为射向z轴正方向的水面视角方向,-viewdir.z为射向z轴负方向的水面视角方向,deepdir.y为x轴正方向上的水面视角方向的uv偏移值,deepdir.x为x轴负方向上的水面视角方向的uv偏移值,deepdir.w为z轴正方向上的水面视角方向的uv偏移值,deepdir.z为z轴负方向上的水面视角方向的uv偏移值。
9.一种面向手游的生成水深度图的设备,其特征在于,所述设备包括处理器以及存储器,所述存储器用于存储程序代码,并将所述程序代码传输给所述处理器;
所述处理器用于根据所述程序代码中的指令执行权利要求1-4任一项所述的面向手游的生成水深度图的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储程序代码,所述程序代码用于执行权利要求1-4任一项所述的面向手游的生成水深度图的方法。
技术总结