CN113450443B - 海面模型的渲染方法和装置 - Google Patents
海面模型的渲染方法和装置 Download PDFInfo
- Publication number
- CN113450443B CN113450443B CN202110774748.7A CN202110774748A CN113450443B CN 113450443 B CN113450443 B CN 113450443B CN 202110774748 A CN202110774748 A CN 202110774748A CN 113450443 B CN113450443 B CN 113450443B
- Authority
- CN
- China
- Prior art keywords
- depth
- sea surface
- determining
- color
- vertex
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/04—Texture mapping
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
Landscapes
- Engineering & Computer Science (AREA)
- Computer Graphics (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Image Generation (AREA)
Abstract
本发明公开了一种海面模型的渲染方法和装置。其中,该方法包括:获取材质信息,其中,所述材质信息包括海面纹理,所述海面纹理具有基础颜色;通过视线深度调整所述基础颜色,得到所述海面纹理的目标颜色;基于所述海面纹理的目标颜色对所述海面模型进行渲染。本发明解决了相关技术中海面颜色较为单调,从而使得渲染出的海面效果不佳的技术问题。
Description
技术领域
本发明涉及计算机图形处理领域,具体而言,涉及一种海面模型的渲染方法和装置。
背景技术
游戏作品中的许多场景都会涉及大面积的海面渲染,目前在进行海面渲染时,通过在一块平面上绘制平铺的材质,并在沿岸处做泡沫贴图和透明处理来实现。该平铺的材质含一张基础颜色来表示海面纹理,以及一张流动的法线表示海面波纹的起伏来模拟光照效果。基于上述方案能够实现海面的渲染,但海面颜色较为单调,从而使得渲染出的海面效果不佳。
针对相关技术中海面颜色较为单调,从而使得渲染出的海面效果不佳的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种海面模型的渲染方法和装置,以至少解决相关技术中海面颜色较为单调,从而使得渲染出的海面效果不佳的技术问题。
根据本发明实施例的一个方面,提供了一种海面模型的渲染方法,包括:获取材质信息,其中,材质信息包括海面纹理,海面纹理具有基础颜色;通过视线深度调整基础颜色,得到海面纹理的目标颜色;基于海面纹理的目标颜色对海面模型进行渲染。
进一步地,通过视线深度调整基础颜色,得到海面纹理的目标颜色,包括:获取海面纹理中,每个顶点的视线深度;将每个顶点的视线深度映射至基础颜色,以在每个顶点处对基础颜色进行调整,得到海面纹理中每个顶点的目标颜色。
进一步地,获取海面纹理中,每个顶点的视线深度,包括:基于屏幕深度图获取海面模型所处的场景与虚拟摄像机的第一距离,其中,虚拟摄像机用于确定显示于屏幕上的场景图像;获取当前顶点与虚拟摄像机的第二距离;确定第一距离与第二距离之差为当前顶点的视线深度。
进一步地,将每个顶点的视线深度映射至基础颜色,以在每个顶点处对基础颜色进行调整,得到海面纹理中每个顶点的目标颜色,包括:对当前顶点的视线深度按照预设的深度区间进行归一化处理,得到深度信息;获取深度区间的最小深度对应的第一颜色和深度区间的最大深度对应的第二颜色;基于深度信息在第一颜色和第二颜色之间进行插值,得到当前顶点的目标颜色,其中,第一颜色对应于深度区间的最小深度,第二颜色对应于深度区间的最大深度。
进一步地,上述方法还包括:通过视线深度确定海面纹理的目标透明度;基于海面纹理的目标透明度渲染海面模型的透明度。
进一步地,上述方法还包括:获取预设的焦散时间参数以及预设的焦散矩阵;基于海面纹理的贴图坐标、焦散时间参数以及焦散矩阵,确定三个滚动贴图;根据三个滚动贴图确定焦散掩膜;将焦散掩膜叠加在海面纹理的顶点颜色上。
进一步地,基于贴图坐标、焦散时间参数以及焦散矩阵,确定三个滚动贴图,包括:基于贴图坐标和焦散时间参数确定中间贴图;确定中间贴图与焦散矩阵的第一乘积为第一滚动贴图;确定第一滚动贴图与焦散矩阵的第二乘积为第二滚动贴图;确定第二滚动贴图与焦散矩阵的第三乘积为第三滚动贴图。
进一步地,每个滚动贴图包括三个通道的参数,根据三个滚动贴图确定焦散掩膜,包括:获取每个滚动贴图在三个通道上的三个波浪条纹;分别将每个滚动贴图在三个通道上的三个波浪条纹相加,得到三个滚动贴图对应的三个滚动条纹;从三个滚动条纹中选择最小的滚动条纹,得到焦散掩膜。
进一步地,将焦散掩膜叠加在海面纹理的顶点坐标上,包括:获取海面纹理中预设的浅海区;将焦散掩膜叠加在浅海区的顶点上。
进一步地,上述方法还包括:基于海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,其中,顶点的水深为顶点在垂直方向的深度;将第一波形和第二波形相乘,生成用于表示海浪的第三波形;将第三波形与海面纹理的顶点坐标进行叠加,以生成海面模型中的海浪模型。
进一步地,基于海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,包括:获取波峰的对应的第一水深,其中,波峰根据波浪时间参数变化而变化,波浪时间参数由0增加至1后跳变回0;获取预设的第二水深和第三水深,其中,第二水深用于确定第一波形的起始位置对应的深度,第三水深用于确定第一波形的波峰位置对应的深度;确定第一水深和第二水深之差为第一平滑阶梯函数的第一参数,确定第一水深和第三水深之差为第一平滑阶梯函数的第二参数,确定当前顶点的水深为第一平滑阶梯函数的第三参数;基于第一平滑阶梯函数的第一参数、第二参数和第三参数确定初始第一波形,并将第一平滑阶梯函数中的第一参数和第二参数相互替换后生成初始第二波形;基于波浪时间参数确定第一波形和第二波形的透明度;确定透明度与初始第一波形相乘得到第一波形,并确定确定透明度与初始第二波形相乘得到第二波形。
进一步地,在将第三波形与海面纹理的顶点坐标进行叠加之后,获取预设的泡沫贴图;获取预设的海浪淡出距离与泡沫贴图的第四乘积;确定第一水深和第四乘积之和为第二平滑阶梯函数的第一参数,确定第一水深为第二平滑阶梯函数的第二参数,确定当前顶点的水深为第二平滑阶梯函数的第三参数;基于第二平滑阶梯函数的第一参数、第二参数和第三参数确定第三波形的颜色衰减;获取海面纹理中属于预设区域的部分顶点;将第三波形的颜色衰减与部分顶点的顶点颜色值相乘,以对海面模型的预设区域进行颜色衰减。
进一步地,上述方法还包括:获取根据参数不同的多个水面波函数生成的多个水面波,其中,参数包括如下至少一项:水面波函数的波矢量、水面波函数的振幅、水面波函数的频率以及水面波函数的相位;基于多个水面波的参数生成相位参数,其中,将至少一个水面波在第一维度的第一向量替换为海面纹理的顶点的水深,将至少一个水面波在第二维度的第二向量被替换为海面纹理的顶点的水深,顶点的水深为顶点在垂直方向的深度;确定相位参数对应的正弦值和相位参数对应的余弦值;基于多个水面波的参数、正弦值和余弦值确定第一维度的偏移量、第二维度的偏移量和第三维度的偏移量,其中,第三维度垂直于第一维度和第二维度构成的平面;将海面纹理的顶点坐标按照第一维度的偏移量、第二维度的偏移量和第三维度的偏移量进行偏移。
进一步地,基于多个水面波的参数生成相位参数,包括:将多个水面波在第一维度上的第一坐标构成的第一向量,并将多个水面波在第二维度上的第二坐标构成的第二向量;将第一向量的至少一个第一坐标替换为顶点的水深得到第三向量,并将第二向量的至少一个第二坐标替换为顶点的水深得到第四向量;基于第三向量、第四向量、水面波的频率以及多个预设的波浪时间参数生成相位参数。
进一步地,基于多个水面波的参数、正弦值和余弦值确定第一维度的偏移量、第二维度的偏移量和第三维度的偏移量,包括:获取多个水面波的波峰陡峭参数、多个水面波的振幅参数以及多个水面波在第一维度上的第一坐标的第五乘积;获取多个水面波的波峰陡峭参数、多个水面波的振幅参数以及多个水面波在第二维度上的第二坐标的第六乘积;确定第五乘积与余弦值点乘得到第一维度的偏移量,确定第六乘积与余弦值点乘得到第三维度的偏移量,并确定多个水面波的振幅参数与正弦值点乘得到第二维度的偏移量。
进一步地,上述方法还包括:基于第三维度的偏移量确定波峰区域以及波峰区域的基础透射参数;基于主光源方向和虚拟摄像机的视线方向的夹角确定透射强度系数;基于基础透射参数、透射强度系数、以及主光源颜色确定散射颜色;将散射颜色与海面纹理的颜色相乘,以调整海面纹理的颜色。
根据本发明实施例的另一方面,还提供了一种海面模型的渲染装置,包括:获取模块,用于获取材质信息,其中,材质信息包括海面纹理,海面纹理具有基础颜色;调整模块,用于通过视线深度调整基础颜色,得到海面纹理的目标颜色;渲染模块,用于基于海面纹理的目标颜色对海面模型进行渲染。
根据本发明实施例的另一方面,还提供了一种计算机可读存储介质,计算机可读存储介质包括存储的程序,其中,在程序运行时控制计算机可读存储介质所在设备执行上述的海面模型的渲染方法。
根据本发明实施例的另一方面,还提供了一种电子装置,包括存储器和处理器,存储器中存储有计算机程序,处理器被设置为通过计算机程序执行上述的海面模型的渲染方法。
在本发明实施例中,获取材质信息,其中,材质信息包括海面纹理,海面纹理具有基础颜色;通过视线深度调整基础颜色,得到海面纹理的目标颜色;基于海面纹理的目标颜色对海面模型进行渲染。上述方案基于视线深度调整海面纹理的基础颜色得到目标颜色,并基于目标颜色渲染海面模型的颜色,从而使得渲染得到的海面模型与人眼看海面的效果更加接近,进而使得海面的渲染效果更加生动和真实,解决了相关技术中海面颜色较为单调,从而使得渲染出的海面效果不佳的问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本申请实施例的一种海面模型的渲染方法的流程图;
图2a是根据本申请实施例的一种基于目标颜色对海面模型进行渲染的示意图;
图2b是图2a中颜色(Color)和透明度(Opacity)变化的示意图;
图3a是根据本申请实施例的一种滚动贴图对应的波浪条纹的示意图;
图3b是根据本申请实施例的一种滚动uv a的示意图;
图3c是根据本申请实施例的一种焦散效果的示意图;
图4a是根据本申请实施例的一种生成第一波形的示意图;
图4b是根据本申请实施例的一种海浪衰减部分的示意图;
图4c是根据本申请实施例的一种海量前岸的示意图;
图4d是根据本申请实施例的一种将海浪衰减部分叠加在海浪前案的示意图;
图5是根据本申请实施例一种Gerstner波形结合SSS透射及白沫效果的示意图。
图6是根据本申请实施例的一种海面模型的渲染装置的示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本发明实施例,提供了一种海面模型的渲染方法的实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
图1是根据本申请实施例的一种海面模型的渲染方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,获取材质信息,其中,材质信息包括海面纹理,海面纹理具有基础颜色。
具体的,上述平铺材质可以是将预设的海面纹理贴在海面模型上得到的材质,上述基础颜色用于表示海面纹理本身的颜色。
步骤S104,通过视线深度调整基础颜色,得到海面纹理的目标颜色。
具体的,上述视线深度用于表示沿着视线方向的海面深度。虚拟摄像机在绘制海面时,会得到两个深度信息,即除去海面以外的场景的深度信息a以及海面上各点离虚拟摄像机的距离b,上述视线深度可以通过b-a得到。
观察实际的海面可知,远处的海面颜色相对于近处的海面颜色更深,为了得到与现实中的海面更加匹配的渲染效果,在一种可选的实施例中,可以假设视线深度越大的画面具有更深的颜色,视线深度越小的海面具有更浅的颜色,然后基于该假设,确定海面纹理的目标颜色。例如,可以设置一深度阈值,对于视线深度大于该深度阈值的顶点,按照顶点的视线深度与深度阈值之差加深基础颜色;对于视线深度小于该深度阈值的顶点,按照顶点的视线深度与深度阈值之差浅化基础颜色。
步骤S106,基于海面纹理的目标颜色对海面模型进行渲染。
具体的,可以基于Unity引擎对海面模型进行渲染。在相关技术中,直接使用海面纹理的基础颜色进行着色,在本申请上述方案中,通过目标颜色进行着色,从而能够实现渲染出的海面由远至近呈现出由深至浅的效果,更加符合人眼看海面的实际情况。
由上可知,本申请上述实施例获取材质信息,其中,材质信息包括海面纹理,海面纹理具有基础颜色;通过视线深度调整基础颜色,得到海面纹理的目标颜色;基于海面纹理的目标颜色对海面模型进行渲染。上述方案基于视线深度调整海面纹理的基础颜色得到目标颜色,并基于目标颜色渲染海面模型的颜色,从而使得渲染得到的海面模型与人眼看海面的效果更加接近,进而使得海面的渲染效果更加生动真实,解决了相关技术中海面颜色较为单调,从而使得渲染出的海面效果不佳的问题。
作为一种可选的实施例,通过视线深度调整基础颜色,得到海面纹理的目标颜色,包括:获取海面纹理中,每个顶点的视线深度;将每个顶点的视线深度映射至基础颜色,以在每个顶点处对基础颜色进行调整,得到海面纹理中每个顶点的目标颜色。
在上述方案中,海面纹理的每个顶点具有预设的颜色值,该预设的颜色值即为海面纹理的基础颜色。海面纹理中的每个顶点具有不同的视线深度,基于顶点对应的视线深度调整顶点的基础颜色,即可得到每个顶点的目标颜色。
作为一种可选的实施例,获取海面纹理中,每个顶点的视线深度,包括:基于屏幕深度图获取海面模型所处的场景与虚拟摄像机的第一距离,其中,虚拟摄像机用于确定显示于屏幕上的场景图像;获取当前顶点与虚拟摄像机的第二距离;确定第一距离与第二距离之差为当前顶点的视线深度。
具体的,场景中始终都具有至少一个虚拟摄像机,该虚拟摄像机用于生成场景图像,虚拟摄像机具有可设置的属性信息,例如:位置、大小、视野范围、裁剪平面等,通过对虚拟摄像机进行属性设置,可以控制虚拟摄像机按照需求捕捉待渲染的部分,将通过虚拟摄像机捕捉到的待渲染的部分进行渲染,即可得到场景图像。上述屏幕深度图是渲染引擎能够读取到的数据,屏幕深度图中包括海面模型所处的场景与虚拟摄像机的距离,即上述第一距离。
海面纹理本身不携带有水平方向的深度信息,上述方案在绘制海面时,通过采样屏幕深度图得出场景离虚拟摄像机的第一距离,并将第一距离与海面离虚拟摄像机的第二距离相减,即可得出视线方向的深度灰度图,该深度灰度图记录了每个顶点的视线深度。
作为一种可选的实施例,将每个顶点的视线深度映射至基础颜色,以在每个顶点处对基础颜色进行调整,得到海面纹理中每个顶点的目标颜色,包括:对当前顶点的视线深度按照预设的深度区间进行归一化处理,得到深度信息;获取深度区间的最小深度对应的第一颜色和深度区间的最大深度对应的第二颜色;基于深度信息在第一颜色和第二颜色之间进行插值,得到当前顶点的目标颜色,其中,第一颜色对应于深度区间的最小深度,第二颜色对应于深度区间的最大深度。
具体的,上述深度区间的下限,即该深度区间的最小深度对应预设的第一颜色,该深度区间的上限,即该深度区间的最大深度对应预设的第二颜色。按照顶点归一化后得到的深度信息在第一颜色和第二颜色之间进行插值,即可确定出顶点的目标颜色。
需要说明的是,对于视线深度大于深度区间上限的顶点,可以确定第二颜色为该顶点的目标颜色。
在一种可选的实施例中,以[0,50]作为深度区间对视线深度进行归一化处理,即depth_factor=smoothstep(0,50,depth),将这个水深区域平滑换算成0到1的变量depth_factor,超过50米的水深对应的depth_factor都为1。
然后获取第一颜色shallow_color和第二颜色deep_color进行插值运算,调整基础颜色后得到的目标颜色base_color=lerp(shallow_color,deep_color,depth_factor),depth_factor用于表示当前顶点的视线深度与深度区间上限或与深度区间下限的距离,相当于shallow_color或deep_color的权重。通过这样的方式,视线方向水深就能够映射在基础颜色上,视线深度为0处对应shallow_color,视线深度为50处对应deep_color。
作为一种可选的实施例,在基于平铺材质渲染海面模型的过程中,上述方法还包括:通过视线深度确定海面纹理的目标透明度;基于海面纹理的目标透明度渲染海面模型的透明度。
在上述步骤中,通过视线深度确定海面纹理的目标透明度,仍然可以是使用上述归一化后得到的深度信息,在第一透明度和第二透明度之间进行插值,以得到每个顶点对应的目标透明度。此处的第一透明度用于表示与深度区间的下限对应的透明度,可以为100%,第二透明度用于表示与透明区间的上限对应的透明度,可以为0。
图2a是根据本申请实施例的一种基于目标颜色对海面模型进行渲染的示意图,结合图2a所示,视线深度较大处颜色更深(Deep),视线深度较小处颜色深度更浅(Shallow)。图2b是图2a中颜色(Color)和透明度(Opacity)变化的示意图,结合图2b所示,随着视线深度的增加,颜色逐渐加深,透明度逐渐降低,从而使得渲染出的海面浅海的偏绿色到深海的偏蓝色过渡。
相关技术中对海面模型的渲染由于材质对光照的响应不够全面,因此难以表现出海水特有的通透感。本实施例中,还用户生成焦散效果,来增加水体的通透效果,同时采用选择纯代码方式生成焦散效果,从而节省贴图采样开销。焦散是指当光线穿过一个透明物体时,由于透明物体表面的不平整,使得光线折射并没有平行发生,出现漫折射,使得投影表面出现光子分散的现象。下面具体进行说明。
作为一种可选的实施例,在基于平铺材质渲染海面模型的过程中,上述方法还包括:获取预设的焦散时间参数以及预设的焦散矩阵;基于海面纹理的贴图坐标、焦散时间参数以及焦散矩阵,确定三个滚动贴图;根据三个滚动贴图确定焦散掩膜;将焦散掩膜叠加在海面纹理的顶点颜色上。
具体的,上述焦散时间参数可以通过引擎传入,焦散矩阵为平铺材质内所包含的信息。上述焦散时间参数用于确定滚动贴图的滚动周期,焦散矩阵为一个3*3矩阵。在得到焦散掩膜后,将焦散掩膜叠加在海面纹理的顶点坐标上,即可在海面模型中叠加焦散效果。
在一种可选的实施例中,将焦散掩膜叠加在海面纹理的顶点颜色上,可以是将焦散掩膜与顶点的反透明度参数相乘后,与海面纹理的顶点颜色相加,上述的反透明度参数根据透明度参数得到,透明度参数根据上述实施例中获取透明度的方式得到。
作为一种可选的实施例,基于贴图坐标、焦散时间参数以及焦散矩阵,确定三个滚动贴图,包括:基于贴图坐标和焦散时间参数确定中间贴图;确定中间贴图与焦散矩阵的第一乘积为第一滚动贴图;确定第一滚动贴图与焦散矩阵的第二乘积为第二滚动贴图;确定第二滚动贴图与焦散矩阵的第三乘积为第三滚动贴图。
上述运算会使uv各通道缩放、旋转、位移。该焦散矩阵可以是随机的矩阵,以使得三个滚动贴图的间隔、方向、速度都是随机的。
作为一种可选的实施例,每个滚动贴图包括三个通道的参数,根据三个滚动贴图确定焦散掩膜,包括:获取每个滚动贴图在三个通道上的三个波浪条纹;分别将每个滚动贴图在三个通道上的三个波浪条纹相加,得到三个滚动贴图对应的三个滚动条纹;从三个滚动条纹中选择最小的滚动条纹,得到焦散掩膜。
具体的,上述三个通道可以为x,y,z三个通道。
图3a是根据本申请实施例的一种滚动贴图对应的波浪条纹的示意图,结合图3a所示,f(x)表示frac(a.x),即滚动uv a在x轴这一通道上的波浪条纹(uv a在y轴和z轴通道上的条纹未示出),g(x)表示(0.5-frac(a.x))^2,即uv a在三个通道上的三个波浪条纹相加得到uv a对应的滚动条纹。
作为一种可选的实施例,将焦散掩膜叠加在海面纹理的顶点坐标上,包括:获取海面纹理中预设的浅海区;将焦散掩膜叠加在浅海区的顶点上。
上述浅海区是预设的区域,在浅海区叠加焦散掩膜实现焦散效果,渲染得到的海面模型更加真实,水体更加通透。
在一种可选的实施例中,可以通过如下代码生成焦散掩膜
float3 uv=float3(Input.uv,u_frame_time*0.5);
float3x3 m=float3x3(-2,-1,2,3,-2,1,1,2,2);
float3 a=mul(uv,m)*0.5;
float3 b=mul(a,m)*0.4;
float3 c=mul(b,m)*0.3;
float caustic=pow(min(min(length(0.5-frac(a)),length(0.5-frac(b))),length(0.5-frac(c))),7.0)*25.0;
上述代码中,Input.uv表示海面纹理的贴图坐标,u_frame_time表示焦散时间参数,m表示焦散矩阵,a、b、c用于表示构件的3个滚动uv,它们由Input.uv与3x3矩阵m相乘得出,m的数值不进行具体限定,只要使滚动uv的间隔、方向、速度都随机即可,float caustic表示焦散掩膜。
以a为例,frac(a)表示只取a的小数部分,结果如图3b所示。length(0.5-frac(a))等同于sqrt((0.5-frac(a.x))^2+(0.5-frac(a.y))^2+(0.5-frac(a.z))^2),即将3个x,y,z三个维度的波浪形纹理相加。a的y、z分类同理,于是a的xyz3个通道生成波浪条纹后相加得到黑白纹理,便于理解记为A,类似的还能得到b对应的B,以及c对应的C。最后对A、B、C纹理做取最小值操作,得到的焦散mask(焦散掩膜),具体如图3c所示,将其叠加作用于浅海区,使得水体更为通透。
相关技术中生成的海面模型通过简单的平铺来呈现海浪,导致重复感较强,难以体现海浪由远至近的效果。本申请实施例提供下述方案,来实现海面模型海浪的生成。
作为一种可选的实施例,在基于平铺材质渲染海面模型的过程中,上述方法还包括:基于海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,其中,顶点的水深为顶点在垂直方向的深度;将第一波形和第二波形相乘,生成用于表示海浪的第三波形;将第三波形与海面纹理的顶点坐标进行叠加,以生成海面模型中的海浪模型。
具体的,上述方案将生成的两个相反的波形相乘,从而生成波浪。在一种可选的实施例中,通过一平滑阶梯函数(smoothstep)函数生成第一波形和第二波形。具体的,通过smoothstep(a,b,x)生成第一波形,通过smoothstep(b,a,x)生成第二波形,这两个波形即为相反的两个波形,然后计算smoothstep(a,b,x)*smoothstep(b,a,x),即可得到第三波形。也即上述第三波形构成的海浪本质上是正反两个smoothstep相乘的变体。
上述顶点的水深是世界空间下的垂直方向的水深。上述方案基于顶点处水深获取第一波形和第二波形,从而使得生成的用于表示海浪的第三波形与顶点处水深相关,而并非简单的平铺,避免了海浪的效果重复,并能够体现出海浪由远至近的效果的效果。
作为一种可选的实施例,基于海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,包括:获取波峰的对应的第一水深,其中,波峰根据波浪时间参数变化而变化,波浪时间参数由0增加至1后跳变回0;获取预设的第二水深和第三水深,其中,第二水深用于确定第一波形的起始位置对应的深度,第三水深用于确定第一波形的波峰位置对应的深度;确定第一水深和第二水深之差为第一平滑阶梯函数的第一参数,确定第一水深和第三水深之差为第一平滑阶梯函数的第二参数,确定当前顶点的水深为第一平滑阶梯函数的第三参数;基于第一平滑阶梯函数的第一参数、第二参数和第三参数确定初始第一波形,并将第一平滑阶梯函数中的第一参数和第二参数相互替换后生成初始第二波形;基于波浪时间参数确定第一波形和第二波形的透明度;确定透明度与初始第一波形相乘得到第一波形,并确定确定透明度与初始第二波形相乘得到第二波形。
具体的,上述第一平滑阶梯函数即为smoothstep函数,上述第二水深和第三水深可以根据需求进行设置,第一水深减去第二水深得到波形的起始位置,第一水深减去第三水深得到波形的最高位置。
需要注意的是,上述第一水深根据波浪时间参数变化的参数,该波浪时间参数可以是对系统时间取其小数部分得到,该波浪时间参数由0增加至1后跳变回0,从而使得第一水深也随之变换,进而使得第一波形和第二波形也会随着时间而变化,最终会让表示海浪模型的第三波形也随着时间而变化。基于这一特征,使得上述方案生成的海面模型中的海浪避免了简单的平铺所引起的重复性,使得海面模型中的海浪更加生动。
在一种可选的实施例中,以第一波形为例,可以通过如下代码实现第一波形的生成。其中,各参数都用了同一个时间种子t,t=frac(系统时间)是系统时间的小数部分,循环从0渐增至1再跳变回0的。
float t=frac(u_frame_time);
float surf;
float peak=30.0–t*60.0;
float alpha=saturate(t*1.5);
surf=saturate((peak-water_depth)*0.08+0.76);
surf*=surf;
surf*=alpha*smoothstep(peak-7.0,peak-3.0,water_depth)*5.0;
surf即为生成的第一波形,peak表示波峰对应的第一水深,7.0表示第二水深,3.0表示第三水深,因此peak-7.0表示第一smoothstep的第一参数,peak-3.0表示第一smoothstep的第二参数,water_depth表示第一smoothstep的第三参数。peak由当前时间种子t计算得到,peak=30-60*t表示随着t的增长波峰对应的水深从30逐渐减少至-30(为了使海浪末端消失在海岸,波峰对应水深要一直减少至负数);water_depth则是引擎传入的顶点的水深,
上述alpha用于表示透明度,第一波形和第二波形的透明度可以相同。上述5.0用于将得到的第一波形或第二波形的高度扩大五倍。该示例生成的波形如图4a所示。
上述步骤确定了海浪模型的顶点坐标,下面进行海浪模型的颜色渲染,波形的衰减部分与泡沫贴图相乘即可得到渐隐的效果,但为了实现了更加自然的海浪消退效果,本实施例采用溶解的方法。作为一种可选的实施例,在将第三波形与海面纹理的顶点坐标进行叠加之后,上述方法还包括:获取预设的泡沫贴图;获取预设的海浪淡出距离与泡沫贴图的第四乘积;确定第一水深和第四乘积之和为第二平滑阶梯函数的第一参数,确定第一水深为第二平滑阶梯函数的第二参数,确定当前顶点的水深为第二平滑阶梯函数的第三参数;基于第二平滑阶梯函数的第一参数、第二参数和第三参数确定第三波形的颜色衰减;获取海面纹理中属于预设区域的部分顶点;将第三波形的颜色衰减与部分顶点的顶点颜色值相乘,以对海面模型的预设区域进行颜色衰减。
具体的,上述预设区域可以是从海面纹理中划分出的属于海浪前岸的区域,从而通过上述步骤,对海面模型中的海浪前岸区域的颜色进行衰减,以使海面模型更加符合人眼观察真实海浪的实际情况。
在一种可选的实施例中,可以通过如下代码确定海浪的衰减部分:
surf_fade=smoothstep(peak+foam_tex*surf_fade_length,peak,water_depth);
具体的,surf_fade是海浪的衰减部分,peak、water_depth的意义与上一段示例中的代码相同;foam_tex用于表示泡沫贴图采样的结果,surf_fade_length表示预设的海浪淡出的距离,得到surf_fade结果如图4b所示。
相关技术中,由于海面模型的顶点是比较稀疏的,通过逐顶点的水深参数得出的海岸边缘较硬,缺少平滑的过渡,本实施例可以通过如下代码确定海浪前岸:
smoothstep(peak-surf_front,peak,water_depth);
具体的,surf_front表示波前处的水深与波峰处的水深的差值。但是这样得出的结果会比较圆润,因此在surf_front中加入随机的变化值,本示例中使用了海面法线的X分量,得到海浪前端结果如图4c所示。然后将海浪的前端与衰减部分相乘,就得到了如图4d所示的海浪的着色表现。因为是把海浪的波峰用VS(顶点着色器)中一致的时间因子t表示的,就能让海浪与顶点动画同步,从而实现了整体的海浪效果。
相关技术中,海面模型的沿岸表现较为单调,且缺少动态效果。本实施例提出如下解决方案。作为一种可选的实施例,在基于平铺材质渲染海面模型的过程中,上述方法还包括:获取根据参数不同的多个水面波函数生成的多个水面波,其中,参数包括如下至少一项:水面波函数的波矢量、水面波函数的振幅、水面波函数的频率以及水面波函数的相位;基于多个水面波的参数生成相位参数,其中,将至少一个水面波在第一维度的第一向量替换为海面纹理的顶点的水深,将至少一个水面波在第二维度的第二向量被替换为海面纹理的顶点的水深,顶点的水深为顶点在垂直方向的深度;确定相位参数对应的正弦值和相位参数对应的余弦值;基于多个水面波的参数、正弦值和余弦值确定第一维度的偏移量、第二维度的偏移量和第三维度的偏移量,其中,第三维度垂直于第一维度和第二维度构成的平面;将海面纹理的顶点坐标按照第一维度的偏移量、第二维度的偏移量和第三维度的偏移量进行偏移。
具体的,上述水面波可以是Gerstner波,Gerstner波的形状比较真实且计算量较小,Gerstner波的参数包括:波矢量ki,振幅Ai,频率ωi和相位其中,i=1,2...N,即可通过下述Gerstner波对应的公式生成Gerstner波:/>下述实施例以Gerstner波为例进行说明。
上述方案中,通对Gerstner波函数的任意一项或多项参数进行不同的设置,即可获得多个不同的Gerstner波,并可以根据多个Gerstner波生成一相位参数,再基于该相位参数确定出三个维度的偏移量,基于三个维度的偏移量对顶点进行偏移,从而丰富海面模型的动画效果。
作为一种可选的实施例,基于多个水面波的参数生成相位参数,包括:将多个水面波在第一维度上的第一坐标构成的第一向量,并将多个水面波在第二维度上的第二坐标构成的第二向量;将第一向量的至少一个第一坐标替换为顶点的水深得到第三向量,并将第二向量的至少一个第二坐标替换为顶点的水深得到第四向量;基于第三向量、第四向量、水面波的频率以及多个预设的波浪时间参数生成相位参数。
在上述步骤中,使用垂直水深代替原坐标参考系,使得波形移动方向平行于海岸。最后将多个不同方向、不同参数的水面波合成为一个波即可。
在一种可选的实施例中,可以使用四个预先生成的Gerstner波作用于顶点位移,具体代码如下:
float3 wave_offset=0;
float4 pos_x_modify=float4(water_depth,pos_world.x,water_depth,pos_world.x);
float4 pos_z_modify=float4(water_depth,water_depth,pos_world.z,pos_world.z);
float4 wavelenth=max(_L,0.00001);
float4 w=2*PI/wavelenth;
float4 psi=_S*w;
float4 phase=w*_Dx*pos_x_modify+w*_Dz*pos_z_modify+psi*u_frame_time;
结合上述代码,将pos_world.x中的第一和第三个元素更改为water_depth,并将pos_world.z中第一和第二个元素更改为water_depth,混合后得到pos_x_modify、pos_z_modify,使用pos_x_modify、pos_z_modify进行相位的运算。
作为一种可选的实施例,基于多个水面波的参数、正弦值和余弦值确定第一维度的偏移量、第二维度的偏移量和第三维度的偏移量,包括:获取多个水面波的波峰陡峭参数、多个水面波的振幅参数以及多个水面波在第一维度上的第一坐标的第五乘积;获取多个水面波的波峰陡峭参数、多个水面波的振幅参数以及多个水面波在第二维度上的第二坐标的第六乘积;确定第五乘积与余弦值点乘得到第一维度的偏移量,确定第六乘积与余弦值点乘得到第三维度的偏移量,并确定多个水面波的振幅参数与正弦值点乘得到第二维度的偏移量。
在一种可选的实施例中,在上一段代码之后,可以使用下述代码确定多个维度的偏移量:
float4 sinp=float4(0,0,0,0);
float4 cosp=float4(0,0,0,0);
sincos(phase,sinp,cosp);
wave_offset.x=dot(_Q*_A*_Dx,cosp);
wave_offset.z=dot(_Q*_A*_Dz,cosp);
wave_offset.y=dot(_A,sinp);
其中_L是波长,_Q是波峰的陡峭程度,_A是振幅,_S是频率,_Dx和_Dz是波形沿x轴和z轴的移动速度,这些参数均是多个Gerstner波的对应参数构成的参数向量。sinp表示相位的正弦值,cosp表示相位余弦值,wave_offset.x表示第一维度的偏移量,wave_offset.z表示第三维度的偏移量,wave_offset.y表示第二维度的偏移量。
由于该示例中使用了四个Gerstner波,因此上述参数都是float4,即包含4个波的参数分量,最后的dot计算即用于将四个波形的结果相加得出各轴向的偏移值以作用于顶点之上。
可选的,还可以在上述方案的基础上增加浪尖白沫,具体方案是思路是将一个预先创建的白沫纹理在高于某一高度H0的顶点上进行混合:
foam.a=saturate((H-H0)/(Hmax-H0));其中,foam.a就是白沫纹理的遮罩,用于控制哪些区域具有白沫的一个变量,Hmax是泡沫最大时的高度,H0是基准高度,H是当前高度。
白沫纹理可以做成序列帧来表示白沫的产生和消失的演变过程。此动画序列帧既可以由美术师进行制作,也可以采用程序化生成。将上述结果和噪声图进行合理的结合,可以得到更真实的泡沫表现。
作为一种可选的实施例,在基于平铺材质渲染海面模型的过程中,上述方法还包括:基于第三维度的偏移量确定波峰区域以及波峰区域的基础透射参数;基于主光源方向和虚拟摄像机的视线方向的夹角确定透射强度系数;基于基础透射参数、透射强度系数、以及预设的主光源颜色确定散射颜色;将散射颜色与海面纹理的颜色相乘,以调整海面纹理的颜色。
半透明的材质受到光源的透射,物体本身就会受到材质的厚度影响而显示出不同的透光性。由于缺少额外的厚度数据信息,本实施例根据如下三个假设进行透射效果的生成:1、对着光源方向看时散射越明显;2、浪尖部分水体最薄;3、视角越垂直于水面水体越厚实。所以根据视线方向、光源方向和波峰mask的组合即可得到透射强度,将深水颜色和次表面散射水体颜色之间进行混合,得到次表面散射颜色。透射效果代码如下:
half sssIndensity=smoothstep(-2.0,3.0,wave_offset.y);
sssIndensity=pow(sssIndensity,2.0);
half3 l_dir=u_dir_direction.xyz;
half3 l_color=u_dir_color.rgb;
float v=abs(view_vec.y);
half towardsSun=pow(max(0.0,dot(l_dir,view_vec)),_SubSurfaceSunFallOff);
subsurface=(_SubSurfaceBase+_SubSurfaceSun*towardsSun)*WaterColorDeep.rgb*WaterColorDeep.rgb*l_color;
subsurface*=(1.0-v*v)*sssIndensity;
其中,l_dir用于表示主光源方向,l_color用于表示主光源颜色,float v用于表示视线方向的y轴分量,视线方向即为摄像机中心点到每个像素的向量;half towardsSun即为视线方向和光源方向的重合程度。
wave_offset.y即为上述的第二维度的偏移量,首先用smoothstep(-2.0,3.0,wave_offset.y)筛选出波峰区域。再根据光源方向和视线方向夹角得出透射强度系数towardsSun,即越看向光源透射现象越明显。最后考虑视线越垂直于水面水越深,效果越弱。
根据本发明实施例,提供了一种海面模型的渲染装置的实施例,如图6所示,该装置包括:
获取模块60,用于获取材质信息,其中,材质信息包括海面纹理,海面纹理具有基础颜色;
调整模块62,用于通过视线深度调整基础颜色,得到海面纹理的目标颜色;
渲染模块64,用于基于海面纹理的目标颜色对海面模型进行渲染。
作为一种可选的实施例,调整模块包括:第一获取子模块,用于获取海面纹理中,每个顶点的视线深度;映射子模块,用于将每个顶点的视线深度映射至基础颜色,以在每个顶点处对基础颜色进行调整,得到海面纹理中每个顶点的目标颜色。
作为一种可选的实施例,第一获取子模块包括:第一获取单元,用于基于屏幕深度图获取海面模型所处的场景与虚拟摄像机的第一距离,其中,虚拟摄像机用于确定显示于屏幕上的场景图像;第二获取单元,用于获取当前顶点与虚拟摄像机的第二距离;第一确定单元,用于确定第一距离与第二距离之差为当前顶点的视线深度。
作为一种可选的实施例,映射子模块包括:处理单元,用于对当前顶点的视线深度按照预设的深度区间进行归一化处理,得到深度信息;第三获取单元,用于获取深度区间的最小深度对应的第一颜色和深度区间的最大深度对应的第二颜色;插值单元,用于基于深度信息在第一颜色和第二颜色之间进行插值,得到当前顶点的目标颜色,其中,第一颜色对应于深度区间的最小深度,第二颜色对应于深度区间的最大深度。
作为一种可选的实施例,上述装置还包括:第一确定模块,用于通过视线深度确定海面纹理的目标透明度;第二渲染模块,用于基于海面纹理的目标透明度渲染海面模型的透明度。
作为一种可选的实施例,上述装置还包括:第二获取模块,用于获取预设的焦散时间参数以及预设的焦散矩阵;第二确定模块,用于基于海面纹理的贴图坐标、焦散时间参数以及焦散矩阵,确定三个滚动贴图;第三确定模块,用于根据三个滚动贴图确定焦散掩膜;第一叠加模块,用于将焦散掩膜叠加在海面纹理的顶点颜色上。
作为一种可选的实施例,第二确定模块包括:第一确定子模块,用于基于贴图坐标和焦散时间参数确定中间贴图;第二确定子模块,用于确定中间贴图与焦散矩阵的第一乘积为第一滚动贴图;第三确定子模块,用于确定第一滚动贴图与焦散矩阵的第二乘积为第二滚动贴图;第四确定子模块,用于确定第二滚动贴图与焦散矩阵的第三乘积为第三滚动贴图。
作为一种可选的实施例,每个滚动贴图包括三个通道的参数,第三确定模块包括:第二获取子模块,用于获取每个滚动贴图在三个通道上的三个波浪条纹;相加子模块,用于分别将每个滚动贴图在三个通道上的三个波浪条纹相加,得到三个滚动贴图对应的三个滚动条纹;选择子模块,用于从三个滚动条纹中选择最小的滚动条纹,得到焦散掩膜。
作为一种可选的实施例,第一叠加模块包括:第三获取子模块,用于获取海面纹理中预设的浅海区;叠加子模块,用于将焦散掩膜叠加在浅海区的顶点上。
作为一种可选的实施例,上述装置还包括:第一生成模块,用于基于海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,其中,顶点的水深为顶点在垂直方向的深度;第二生成模块,用于将第一波形和第二波形相乘,生成用于表示海浪的第三波形;第二叠加模块将第三波形与海面纹理的顶点坐标进行叠加,以生成海面模型中的海浪模型。
作为一种可选的实施例,第一生成模块包括:第四获取子模块,用于获取波峰的对应的第一水深,其中,波峰根据波浪时间参数变化而变化,波浪时间参数由0增加至1后跳变回0;第五获取子模块,用于获取预设的第二水深和第三水深,其中,第二水深用于确定第一波形的起始位置对应的深度,第三水深用于确定第一波形的波峰位置对应的深度;第五确定子模块,用于确定第一水深和第二水深之差为第一平滑阶梯函数的第一参数,确定第一水深和第三水深之差为第一平滑阶梯函数的第二参数,确定当前顶点的水深为第一平滑阶梯函数的第三参数;第一生成子模块,用于基于第一平滑阶梯函数的第一参数、第二参数和第三参数确定初始第一波形,并将第一平滑阶梯函数中的第一参数和第二参数相互替换后生成初始第二波形;第六确定子模块,用于基于波浪时间参数确定第一波形和第二波形的透明度;第七确定子模块,用于确定透明度与初始第一波形相乘得到第一波形,并确定确定透明度与初始第二波形相乘得到第二波形。
作为一种可选的实施例,上述装置还包括:第三获取模块,用于在将第三波形与海面纹理的顶点坐标进行叠加之后,获取预设的泡沫贴图;第四获取模块,用于获取预设的海浪淡出距离与泡沫贴图的第四乘积;第四确定模块,用于确定第一水深和第四乘积之和为第二平滑阶梯函数的第一参数,确定第一水深为第二平滑阶梯函数的第二参数,确定当前顶点的水深为第二平滑阶梯函数的第三参数;第五确定模块,用于基于第二平滑阶梯函数的第一参数、第二参数和第三参数确定第三波形的颜色衰减;第四获取模块,用于获取海面纹理中属于预设区域的部分顶点;第一相乘模块,用于将第三波形的颜色衰减与部分顶点的顶点颜色值相乘,以对海面模型的预设区域进行颜色衰减。
作为一种可选的实施例,上述装置还包括:第五获取模块,用于获取根据参数不同的多个水面波函数生成的多个水面波,其中,参数包括如下至少一项:水面波函数的波矢量、水面波函数的振幅、水面波函数的频率以及水面波函数的相位;第三生成模块,用于基于多个水面波的参数生成相位参数,其中,将至少一个水面波在第一维度的第一向量替换为海面纹理的顶点的水深,将至少一个水面波在第二维度的第二向量被替换为海面纹理的顶点的水深,顶点的水深为顶点在垂直方向的深度;第五确定模块,用于确定相位参数对应的正弦值和相位参数对应的余弦值;第六确定模块,用于基于多个水面波的参数、正弦值和余弦值确定第一维度的偏移量、第二维度的偏移量和第三维度的偏移量,其中,第三维度垂直于第一维度和第二维度构成的平面;偏移模块,用于将海面纹理的顶点坐标按照第一维度的偏移量、第二维度的偏移量和第三维度的偏移量进行偏移。
作为一种可选的实施例,第三生成模块包括:第二生成子模块,用于将多个水面波在第一维度上的第一坐标构成的第一向量,并将多个水面波在第二维度上的第二坐标构成的第二向量;替换子模块,用于将第一向量的至少一个第一坐标替换为顶点的水深得到第三向量,并将第二向量的至少一个第二坐标替换为顶点的水深得到第四向量;第三生成子模块,用于基于第三向量、第四向量、水面波的频率以及多个预设的波浪时间参数生成相位参数。
作为一种可选的实施例,第三生成子模块包括:第四获取单元,用于获取多个水面波的波峰陡峭参数、多个水面波的振幅参数以及多个水面波在第一维度上的第一坐标的第五乘积;第五获取单元,用于获取多个水面波的波峰陡峭参数、多个水面波的振幅参数以及多个水面波在第二维度上的第二坐标的第六乘积;第二确定单元,用于确定第五乘积与余弦值点乘得到第一维度的偏移量,确定第六乘积与余弦值点乘得到第三维度的偏移量,并确定多个水面波的振幅参数与正弦值点乘得到第二维度的偏移量。
作为一种可选的实施例,上述装置还包括:第七确定模块,用于基于第三维度的偏移量确定波峰区域以及波峰区域的基础透射参数;第八确定模块,用于基于主光源方向和虚拟摄像机的视线方向的夹角确定透射强度系数;第九确定模块,用于基于基础透射参数、透射强度系数、以及主光源颜色确定散射颜色;第二相乘模块,用于将散射颜色与海面纹理的颜色相乘,以调整海面纹理的颜色。
根据本发明实施例,提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行实施例1中的海面模型的渲染方法。
根据本发明实施例,提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行上述的海面模型的渲染方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取计算机可读存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个计算机可读存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的计算机可读存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (18)
1.一种海面模型的渲染方法,其特征在于,包括:
获取材质信息,其中,所述材质信息包括海面纹理,所述海面纹理具有基础颜色;
通过视线深度调整所述基础颜色,得到所述海面纹理的目标颜色;
基于所述海面纹理的目标颜色对所述海面模型进行渲染;
其中,所述方法还包括:获取预设的焦散时间参数以及预设的焦散矩阵;基于所述海面纹理的贴图坐标、所述焦散时间参数以及所述焦散矩阵,确定三个滚动贴图;根据所述三个滚动贴图确定焦散掩膜;将所述焦散掩膜叠加在所述海面纹理的顶点颜色上。
2.根据权利要求1所述的方法,其特征在于,通过视线深度调整所述基础颜色,得到所述海面纹理的目标颜色,包括:
获取所述海面纹理中,每个顶点的视线深度;
将所述每个顶点的视线深度映射至所述基础颜色,以在所述每个顶点处对所述基础颜色进行调整,得到所述海面纹理中每个顶点的目标颜色。
3.根据权利要求2所述的方法,其特征在于,获取所述海面纹理中,每个顶点的视线深度,包括:
基于屏幕深度图获取所述海面模型所处的场景与虚拟摄像机的第一距离,其中,所述虚拟摄像机用于确定显示于屏幕上的场景图像;
获取当前顶点与所述虚拟摄像机的第二距离;
确定所述第一距离与所述第二距离之差为所述当前顶点的视线深度。
4.根据权利要求2所述的方法,其特征在于,将所述每个顶点的视线深度映射至所述基础颜色,以在所述每个顶点处对所述基础颜色进行调整,得到所述海面纹理中每个顶点的目标颜色,包括:
对当前顶点的视线深度按照预设的深度区间进行归一化处理,得到深度信息;
获取所述深度区间的最小深度对应的第一颜色和所述深度区间的最大深度对应的第二颜色;
基于所述深度信息在所述第一颜色和所述第二颜色之间进行插值,得到所述当前顶点的目标颜色,其中,所述第一颜色对应于所述深度区间的最小深度,所述第二颜色对应于所述深度区间的最大深度。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
通过视线深度确定所述海面纹理的目标透明度;
基于所述海面纹理的目标透明度渲染所述海面模型的透明度。
6.根据权利要求1所述的方法,其特征在于,基于所述贴图坐标、所述焦散时间参数以及所述焦散矩阵,确定三个滚动贴图,包括:
基于所述贴图坐标和所述焦散时间参数确定中间贴图;
确定所述中间贴图与所述焦散矩阵的第一乘积为第一滚动贴图;
确定所述第一滚动贴图与所述焦散矩阵的第二乘积为第二滚动贴图;
确定所述第二滚动贴图与所述焦散矩阵的第三乘积为第三滚动贴图。
7.根据权利要求1所述的方法,其特征在于,每个滚动贴图包括三个通道的参数,根据所述三个滚动贴图确定焦散掩膜,包括:
获取每个滚动贴图在三个通道上的三个波浪条纹;
分别将所述每个滚动贴图在所述三个通道上的三个波浪条纹相加,得到所述三个滚动贴图对应的三个滚动条纹;
从所述三个滚动条纹中选择最小的滚动条纹,得到所述焦散掩膜。
8.根据权利要求1所述的方法,其特征在于,将所述焦散掩膜叠加在所述海面纹理的顶点坐标上,包括:
获取所述海面纹理中预设的浅海区;
将所述焦散掩膜叠加在所述浅海区的顶点上。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
基于所述海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,其中,所述顶点的水深为所述顶点在垂直方向的深度;
将所述第一波形和所述第二波形相乘,生成用于表示海浪的第三波形;
将所述第三波形与所述海面纹理的顶点坐标进行叠加,以生成所述海面模型中的海浪模型。
10.根据权利要求9所述的方法,其特征在于,基于所述海面纹理的顶点处水深和波浪时间参数生成两个波形相反的第一波形和第二波形,包括:
获取波峰的对应的第一水深,其中,所述波峰根据所述波浪时间参数变化而变化,所述波浪时间参数由0增加至1后跳变回0;
获取预设的第二水深和第三水深,其中,所述第二水深用于确定第一波形的起始位置对应的深度,所述第三水深用于确定所述第一波形的波峰位置对应的深度;
确定所述第一水深和所述第二水深之差为第一平滑阶梯函数的第一参数,确定所述第一水深和所述第三水深之差为所述第一平滑阶梯函数的第二参数,确定当前顶点的水深为所述第一平滑阶梯函数的第三参数;
基于所述第一平滑阶梯函数的所述第一参数、所述第二参数和所述第三参数确定初始第一波形,并将所述第一平滑阶梯函数中的所述第一参数和所述第二参数相互替换后生成初始第二波形;
基于所述波浪时间参数确定所述第一波形和所述第二波形的透明度;
确定所述透明度与所述初始第一波形相乘得到所述第一波形,并确定所述透明度与所述初始第二波形相乘得到所述第二波形。
11.根据权利要求10所述的方法,其特征在于,在将所述第三波形与所述海面纹理的顶点坐标进行叠加之后,所述方法还包括:
获取预设的泡沫贴图;
获取预设的海浪淡出距离与所述泡沫贴图的第四乘积;
确定所述第一水深和所述第四乘积之和为第二平滑阶梯函数的第一参数,确定所述第一水深为所述第二平滑阶梯函数的第二参数,确定当前顶点的水深为所述第二平滑阶梯函数的第三参数;
基于所述第二平滑阶梯函数的所述第一参数、所述第二参数和所述第三参数确定所述第三波形的颜色衰减;
获取所述海面纹理中属于预设区域的部分顶点;
将所述第三波形的颜色衰减与所述部分顶点的顶点颜色值相乘,以对所述海面模型的预设区域进行颜色衰减。
12.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取根据参数不同的多个水面波函数生成的多个水面波,其中,所述参数包括如下至少一项:所述水面波函数的波矢量、所述水面波函数的振幅、所述水面波函数的频率以及所述水面波函数的相位;
基于所述多个水面波的参数生成相位参数,其中,将至少一个水面波在第一维度的第一向量替换为海面纹理的顶点的水深,将至少一个水面波在第二维度的第二向量被替换为海面纹理的顶点的水深,所述顶点的水深为所述顶点在垂直方向的深度;
确定所述相位参数对应的正弦值和所述相位参数对应的余弦值;
基于所述多个水面波的参数、所述正弦值和所述余弦值确定所述第一维度的偏移量、所述第二维度的偏移量和第三维度的偏移量,其中,所述第三维度垂直于所述第一维度和所述第二维度构成的平面;
将所述海面纹理的顶点坐标按照所述第一维度的偏移量、所述第二维度的偏移量和所述第三维度的偏移量进行偏移。
13.根据权利要求12所述的方法,其特征在于,基于所述多个水面波的参数生成相位参数,包括:
将多个所述水面波在所述第一维度上的第一坐标构成的第一向量,并将多个所述水面波在所述第二维度上的第二坐标构成的第二向量;
将所述第一向量的至少一个第一坐标替换为顶点的水深得到第三向量,并将所述第二向量的至少一个第二坐标替换为顶点的水深得到第四向量;
基于所述第三向量、所述第四向量、所述水面波的频率以及多个预设的波浪时间参数生成相位参数。
14.根据权利要求12所述的方法,其特征在于,基于所述多个水面波的参数、所述正弦值和所述余弦值确定所述第一维度的偏移量、所述第二维度的偏移量和第三维度的偏移量,包括:
获取多个所述水面波的波峰陡峭参数、多个所述水面波的振幅参数以及多个所述水面波在所述第一维度上的第一坐标的第五乘积;
获取多个所述水面波的波峰陡峭参数、多个所述水面波的振幅参数以及多个所述水面波在所述第二维度上的第二坐标的第六乘积;
确定所述第五乘积与所述余弦值点乘得到第一维度的偏移量,确定所述第六乘积与所述余弦值点乘得到第三维度的偏移量,并确定多个所述水面波的振幅参数与所述正弦值点乘得到第二维度的偏移量。
15.根据权利要求12所述的方法,其特征在于,所述方法还包括:
基于所述第三维度的偏移量确定波峰区域以及所述波峰区域的基础透射参数;
基于主光源方向和虚拟摄像机的视线方向的夹角确定透射强度系数;
基于所述基础透射参数、所述透射强度系数、以及主光源颜色确定散射颜色;
将所述散射颜色与所述海面纹理的颜色相乘,以调整所述海面纹理的颜色。
16.一种海面模型的渲染装置,其特征在于,包括:
获取模块,用于获取材质信息,其中,所述材质信息包括海面纹理,所述海面纹理具有基础颜色;
调整模块,用于通过视线深度调整所述基础颜色,得到所述海面纹理的目标颜色;
渲染模块,用于基于所述海面纹理的目标颜色对所述海面模型进行渲染;
其中,所述获取模块还用于获取预设的焦散时间参数以及预设的焦散矩阵;所述海面模型的渲染装置还包括:确定模块,用于基于所述海面纹理的贴图坐标、所述焦散时间参数以及所述焦散矩阵,确定三个滚动贴图;所述确定模块还用于根据所述三个滚动贴图确定焦散掩膜;叠加模块,用于将所述焦散掩膜叠加在所述海面纹理的顶点颜色上。
17.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括存储的程序,其中,在所述程序运行时控制所述计算机可读存储介质所在设备执行权利要求1至15中任意一项所述的海面模型的渲染方法。
18.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行所述权利要求1至15任一项中所述的海面模型的渲染方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110774748.7A CN113450443B (zh) | 2021-07-08 | 2021-07-08 | 海面模型的渲染方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110774748.7A CN113450443B (zh) | 2021-07-08 | 2021-07-08 | 海面模型的渲染方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113450443A CN113450443A (zh) | 2021-09-28 |
CN113450443B true CN113450443B (zh) | 2023-03-24 |
Family
ID=77815503
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110774748.7A Active CN113450443B (zh) | 2021-07-08 | 2021-07-08 | 海面模型的渲染方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113450443B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117292038B (zh) * | 2023-10-23 | 2024-07-09 | 上海臻图信息技术有限公司 | 一种用于海面模型的渲染方法、系统、设备及存储介质 |
CN117437362B (zh) * | 2023-11-17 | 2024-06-21 | 深圳市坤腾动漫有限公司 | 一种三维动漫模型生成方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111127576A (zh) * | 2019-12-18 | 2020-05-08 | 北京像素软件科技股份有限公司 | 游戏画面的渲染方法、装置及电子设备 |
CN112785674A (zh) * | 2021-01-22 | 2021-05-11 | 北京百度网讯科技有限公司 | 纹理贴图的生成方法、渲染方法、装置、设备及存储介质 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4950410B2 (ja) * | 2003-02-07 | 2012-06-13 | 株式会社バンダイナムコゲームス | プログラム、情報記憶媒体及びゲーム装置 |
JP4717624B2 (ja) * | 2005-12-16 | 2011-07-06 | 株式会社バンダイナムコゲームス | 画像生成システム、プログラム及び情報記憶媒体 |
KR20170045809A (ko) * | 2015-10-20 | 2017-04-28 | 삼성전자주식회사 | 커스틱을 표현하는 방법 및 장치 |
CN107886562B (zh) * | 2017-12-05 | 2021-08-31 | 北京像素软件科技股份有限公司 | 水面渲染方法、装置及可读存储介质 |
CN109598777B (zh) * | 2018-12-07 | 2022-12-23 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、设备及存储介质 |
CN110866967B (zh) * | 2019-11-15 | 2023-06-13 | 深圳市瑞立视多媒体科技有限公司 | 水波纹渲染方法、装置、设备及存储介质 |
CN111415400B (zh) * | 2020-03-25 | 2023-07-18 | 网易(杭州)网络有限公司 | 一种模型渲染的方法及装置、电子设备、存储介质 |
CN111986303B (zh) * | 2020-09-09 | 2024-07-16 | 网易(杭州)网络有限公司 | 流体渲染方法、装置、存储介质及终端设备 |
CN112819941B (zh) * | 2021-03-05 | 2023-09-12 | 网易(杭州)网络有限公司 | 渲染水体面的方法、装置、设备和计算机可读存储介质 |
CN112967367B (zh) * | 2021-03-19 | 2022-04-08 | 完美世界(北京)软件科技发展有限公司 | 水波特效生成方法及装置、存储介质、计算机设备 |
-
2021
- 2021-07-08 CN CN202110774748.7A patent/CN113450443B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111127576A (zh) * | 2019-12-18 | 2020-05-08 | 北京像素软件科技股份有限公司 | 游戏画面的渲染方法、装置及电子设备 |
CN112785674A (zh) * | 2021-01-22 | 2021-05-11 | 北京百度网讯科技有限公司 | 纹理贴图的生成方法、渲染方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113450443A (zh) | 2021-09-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113450443B (zh) | 海面模型的渲染方法和装置 | |
Treavett et al. | Pen-and-ink rendering in volume visualisation | |
Takayama et al. | Volumetric modeling with diffusion surfaces | |
Lu et al. | Illustrative interactive stipple rendering | |
TWI406186B (zh) | 3d圖形的2d編輯隱喻 | |
Šoltészová et al. | Chromatic shadows for improved perception | |
US20070139408A1 (en) | Reflective image objects | |
CN112316420A (zh) | 模型渲染方法、装置、设备及存储介质 | |
CN110115841B (zh) | 一种游戏场景中植被对象的渲染方法和装置 | |
CN110400372A (zh) | 一种图像处理的方法及装置、电子设备、存储介质 | |
US7327364B2 (en) | Method and apparatus for rendering three-dimensional images of objects with hand-drawn appearance in real time | |
Winnemöller | NPR in the Wild | |
CN114529650A (zh) | 一种游戏场景的渲染方法及装置 | |
EP2051211B1 (en) | Shading of translucent objects | |
Tateosian et al. | Engaging viewers through nonphotorealistic visualizations | |
Bratkova et al. | Artistic rendering of mountainous terrain. | |
Gooch | Interactive non-photorealistic technical illustration | |
Kowalski et al. | User-guided composition effects for art-based rendering | |
Jobst et al. | Mechanisms on graphical core variables in the design of cartographic 3D city presentations | |
Chen et al. | Real-time artistic silhouettes rendering for 3D models | |
Vilanova | Non-photorealistic rendering | |
WO2018013373A1 (en) | Preserving scene lighting effects across viewing perspectives | |
Curtis et al. | Real-time non-photorealistic animation for immersive storytelling in “Age of Sail” | |
Roden et al. | Clouds and stars: efficient real-time procedural sky rendering using 3d hardware | |
Rivotti et al. | Composition Principles for Quality Depiction and Aesthetics. |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |