首页> 中国专利> 实时海洋系统的模拟和渲染方法

实时海洋系统的模拟和渲染方法

摘要

实时海洋系统的模拟和渲染方法。一种把屏幕空间平分成多个网格,并投影到世界坐标系空间中的海平面上,获取海水在世界坐标系空间中的表面网格;获取当前网格点相对于海平面的坐标偏移值,得到该网格点最终坐标值;获取当前网格点的法线值,实现可控海水波纹效果;获取当前网格点所在位置的涟漪的法线值,得到当前网格点最终法线值,实现下雨时的海面涟漪效果;获取当前网格点带有泡沫效果的海水颜色值,得到该网格点海面位置的最终颜色值,实现岸边动态冲击的泡沫效果;获取刻蚀后当前网格点的水下场景颜色值,得到该网格点水下场景的最终颜色值,实现水下动态刻蚀效果以及带光线衰减的水下扭曲效果。

著录项

  • 公开/公告号CN105279782A

    专利类型发明专利

  • 公开/公告日2016-01-27

    原文格式PDF

  • 申请/专利权人 苏州蜗牛数字科技股份有限公司;

    申请/专利号CN201510380885.7

  • 发明设计人 刘建国;

    申请日2015-07-02

  • 分类号G06T15/00(20110101);

  • 代理机构北京德崇智捷知识产权代理有限公司;

  • 代理人王金双

  • 地址 215000 江苏省苏州市工业园区中新大道西171号

  • 入库时间 2023-12-18 13:57:21

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-12-07

    授权

    授权

  • 2016-02-24

    实质审查的生效 IPC(主分类):G06T15/00 申请日:20150702

    实质审查的生效

  • 2016-01-27

    公开

    公开

说明书

技术领域

本发明涉及视频图像处理技术,尤其涉及一种视频图像中实时海洋系统的 模拟和渲染方法。

背景技术

现有3D游戏的视频图像处理中,在水体的模拟和渲染上或多或少的存在着 问题:水面比较平坦,只是通过法线来模拟水纹,在高度方向上基本没有任何 真实的波动;岸边不能产生泡沫,或有的游戏即使有泡沫也是静止的,不会随 着波浪动态的往岸边冲刷;水面不会对天气做出反应,比如下雨天,水面不会 对雨点做出任何的反应;水下效果比较粗糙,甚至有些游戏根本就没法走到水 里甚至到水下去。

上述技术缺陷,使得3D游戏没有完全体现真实的自然场景,不能为游戏者 提供很好的视觉体验。

发明内容

为了解决现有技术存在的不足,本发明的目的在于提供一种实时海洋系统 的模拟和渲染方法,可供美术制作人员控制的海水波形、无限宽广的海水范围、 岸边动态冲击的泡沫效果、水下动态刻蚀效果、带光线衰减的水下扭曲效果, 以及下雨时的海面涟漪效果,供3D游戏直接使用。

为实现上述目的,本发明提供的实时海洋系统的模拟和渲染方法,包括以 下步骤:

1)把屏幕空间平分成多个网格,并投影到世界坐标系空间中的海平面上, 获取海水在世界坐标系空间中的表面网格;

2)获取当前网格点相对于海平面的坐标偏移值,得到该网格点最终坐标值;

3)获取当前网格点的法线值,实现可控海水波纹效果;

4)获取当前网格点所在位置的涟漪的法线值,得到当前网格点最终法线值, 实现下雨时的海面涟漪效果;

5)获取当前网格点带有泡沫效果的海水颜色值,得到该网格点海面位置的 最终颜色值,实现岸边动态冲击的泡沫效果;

6)获取刻蚀后当前网格点的水下场景颜色值,得到该网格点水下场景的最 终颜色值,实现水下动态刻蚀效果以及带光线衰减的水下扭曲效果。

其中,所述步骤2)进一步包括以下步骤:

使用世界坐标系空间中的海水表面网格点的坐标值对美术预先做好的波形 高度图进行采样以获取当前海水表面网格点在高度方向上的坐标偏移值;

在海平面高度上叠加所述坐标偏移值,得到当前海水表面网格点在世界坐 标系空间中的最终坐标值。

其中,步骤3)所述获取当前网格点的法线值是使用海水表面网格点的在世 界坐标系空间中的最终坐标值对海水波形法线图进行采样获取当前海水表面网 格点的法线值。

其中,所述步骤4)进一步包括以下步骤:

使用海水表面网格点在世界坐标系空间中的最终坐标值对动态涟漪法线图 进行采样,获取当前海水表面网格点所在位置的涟漪的法线值;

对所述当前海水表面网格点所在位置的涟漪的法线值进行叠加和归一化, 获得当前海水表面网格点的最终法线值,。

其中,所述步骤5)进一步包括以下步骤:

采样海水泡沫纹理贴图获取当前海水表面网格点的泡沫颜色值,根据当前 海水表面网格高度同地面高度之间的高度差对泡沫颜色值和海水颜色值进行插 值获取带有泡沫效果的海水颜色值;

使用当前海水表面网格点的最终法线值、带泡沫效果的海水颜色值、当前 海水表面网格点的坐标值、摄像机位置,以及海水反射贴图上的颜色值进行海 水光照计算、雾效计算和菲涅尔效应的计算,得到当前海水表面网格点的海面 位置的最终的颜色值。

其中,所述步骤6)进一步包括以下步骤:

首先根据当前海水表面网格点的世界坐标采样3D动态刻蚀贴图,获取当前 位置刻蚀的颜色和强度;

根据刻蚀强度对当前位置刻蚀颜色和水下场景颜色进行叠加,获取刻蚀后 的水下场景颜色值;

根据当前海水表面网格点与摄像机的距离进行雾效处理;

根据当前海水表面网格点水下位置所在的深度对水下的场景颜色进行衰 减,得到当前点的最终颜色值。

本发明的实时海洋系统的模拟和渲染方法,把屏幕空间网格投影到世界坐 标系空间的海平面上,得到海水在世界坐标系空间中的表面网格;海水波形通 过预先做好的波形图来控制,自由灵活;岸边有泡沫效果,泡沫会不断的由深 海方向往岸边动态冲刷;海面会对下雨做出反馈,在海面上产生动态扩散的涟 漪效果;水下有动态刻蚀效果;水下有光线衰减效果。

本发明使用了顶点纹理和移位映射技术,使海水在顶点层面上实现了真实 复杂的动态波动,解决了水面比较平坦的问题。使用屏幕空间网格技术,实际 参加渲染的三角形面数是固定的,不会因为海水面积的增大而增加。用高效的 方式实现了无限宽广和高细节度的海水水体。实现了对下雨天的反馈,在海面 产生了动态扩散的涟漪效果,使海面更真实。实现了水下光线衰减及动态刻蚀 的效果,使水下效果更多样。用高效的方式实现了可供3D游戏直接使用的实时 的海洋系统的模拟和渲染,改变了之前水面比较平坦没法做出复杂波浪的缺点。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明 书中变得显而易见,或者通过实施本发明而了解。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本 发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:

图1为根据本发明的实时海洋系统的模拟和渲染方法流程图;

图2为根据本发明的实时海洋系统模拟海面效果图;

图3为根据本发明的实时海洋系统模拟岸边动态泡沫效果图一;

图4为根据本发明的实时海洋系统模拟岸边动态泡沫效果图二;

图5为根据本发明的实时海洋系统模拟海面动态涟漪效果图一;

图6为根据本发明的实时海洋系统模拟海面动态涟漪效果图二;

图7为根据本发明的实时海洋系统模拟水下刻蚀效果图;

图8为根据本发明的实时海洋系统模拟水下蓝色衰减效果图;

图9为根据本发明的实时海洋系统模拟水下红色衰减效果图;

图10为根据本发明的实时海洋系统模拟水下黑色衰减效果图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的 优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1为根据本发明的实时海洋系统的模拟和渲染方法流程图,下面将参考 图1,对本发明的实时海洋系统的模拟和渲染方法流程图进行详细描述。

首先,在步骤101,在显卡的顶点着色器中,按如下公式把屏幕空间平分成 若干个网格。

float3PosIn=float3(vPos.x*WidthScale,vPos.y*HeightScale,1.0f);

float4PosScreen=float4(PosIn,1.0f);

在步骤102,把屏幕空间的网格投影到世界坐标系空间的海平面上,得到海 水在世界坐标系空间中的表面网格。

按照如下公式根据观察投影矩阵的逆矩阵反算出屏幕空间网格中每一点 Sij在世界坐标系中的坐标点Aij,下式中,PosWorld即为Aij的坐标值。

float4PosWorld=mul(PosScreen,g_matWVPInv);

PosWorld/=PosWorld.w;

按照下述公式,在世界坐标系中计算出从摄像机出发经过Aij的射线与海 平面的交点Bij。点Bij即为点Sij在世界坐标系中所对应的海水网格的初步坐 标值。下式中,g_CameraPos为摄像机的位置;g_BaseHeight为海平面的高度。

在步骤103,使用世界坐标系空间中的表面网格点的坐标值对美术预先做好 的波形高度图进行采样以获取当前网格相对于海平面在高度方向上的坐标偏 移。

使用点Bij的x轴和z轴上的坐标值对美术预先制作好的海水波形的高度 图进行采样获取海水网格中当前点相对于海平面在高度方向上的偏移值。

在步骤104,在海平面高度上叠加上述计算出来的坐标偏移值,得到海水表 面网格点在世界坐标系空间中的最终坐标值。

采用下述公式,使用点Bij的坐标点加上上述偏移值得出当前海水表面网 格点最终的坐标点Lij。下式中,WaterNormal的w通道存储的海水偏移高度、 xyz通道存储的法线,为了让波浪产生尖峰的效果,沿法线反方向对海水坐标进 行挤压,PosWorld即为Lij的坐标值。

float4WaterNormal=CombineWaterNormal(PosWorld.xz/TEXT_SCALE);

WaterNormal.xyz=lerp(float3(0,1,0),normalize(WaterNormal.xyz), 0.4f+0.6f*0.7f);

PosWorld.y+=WaterNormal.w*2.0f*(0.4f+0.6f*0.7f)*BlendFactor;

PosWorld.xz-=(WaterNormal.xz)*3.2f*(0.4f+0.6f*0.7f)* BlendFactor*g_SharpPow;

Output.WorldPos=PosWorld.xyz;

Output.Position=mul(PosWorld,g_matWVP);

在步骤105,使用海水表面网格点在世界坐标系空间中的最终坐标值对海水 波形法线图进行采样获取当前海水表面网格点的法线值。

把PosWorld作为输出值传到显卡的像素着色器中,使用PosWorld的坐标 值对美术预先制作好的海水波形的法线图tex_Displacement进行采样获取海水 表面网格点的法线值WaterNormal,实现海水波形的效果。

在步骤106,如果当前处于下雨状态,则用上述海水表面网格点对动态涟漪 法线图进行采样以获取当前海水表面网格点所在位置的涟漪的法线值,将上述 涟漪的法线值进行归一化得到当前海水表面网格点的最终法线值,实现海面动 态涟漪的效果。

该步骤中,使用显卡的像素着色器中的PosWorld的坐标值对动态涟漪法线 图tex_Ripple进行采样获取当前海水表面网格点(像素)的涟漪的法线值 vecRippleNormal。

把WaterNormal和vecRippleNormal相加并且进行归一化得到当前海水表 面网格点的最终法线值N。

N=returnfloat4(normalize(WaterNormal.xyz),WaterNormal.w);

在步骤107,采样海水泡沫纹理贴图获取当前海水表面网格点的泡沫颜色 值,根据当前海水表面网格高度同地面高度之间的高度差对泡沫颜色值和海水 颜色值进行插值获取带有泡沫效果的海水颜色值。

对当前场景地形的高度图进行采样获得当前网格点位置的地形高度Depth。

按下述公式计算出当前海水高度同Depth的高度差并乘上一个比例系数得 到值Off。

floatOff=(In.WorldPos.y-Depth)*300.0f;

根据Off以及动态的正弦函数值来计算岸边泡沫的权重。

从下列公式可以看出,一共有2层泡沫,泡沫1的权重为PowWhiteDynmic, 泡沫2的权重为PowWhiteDynmic2。

使用PosWorld的坐标值对泡沫图进行采样获取当前海水表面网格点泡沫颜 色值。

根据当前海水表面网格点同地面的深度差对海水颜色和海水折射图颜色进 行插值获得颜色值RefractionColor,高度差越大说明水体越深,水下物体被海 水折射后传到人眼的比重就越小。

RefractionColor=tex2D(tex_SceneRefract,TexUV+Normal.xz*0.02f*DepthRefra);

RefractionColorOld=RefractionColor;

RefractionColor=lerp(WaterColor,RefractionColor,min(1,1.0f* exp(-WaterDepth/(32.0f*g_AlphaPow))));

在步骤108,使用当前海水表面网格点的最终法线值、带泡沫效果的海水颜 色值、当前海水表面网格点的坐标值、摄像机位置以及海水反射贴图上的颜色 值等进行海水光照计算、雾效计算和菲涅尔效应的计算得到当前海面位置的最 终的颜色值。

根据泡沫的混合权重对泡沫颜色和折射图颜色RefractionColor进行差值 得到混合后的颜色值RefractionColor。

RefractionColor.rgb=lerp(RefractionColor.rgb,g_SpecularAndWhiteParam.y*WhiteBright, PowWhite*PowWhiteDynmic*WhiteDistanceLerp);

RefractionColor.rgb=lerp(RefractionColor.rgb,g_SpecularAndWhiteParam.y*WhiteBright/ (1+(PowWhite*PowWhiteDynmic)/2.0F), (PowWhite2*PowWhiteDynmic2*WhiteDistanceLerp);

使用当前像素的位置信息In.WorldPosition、颜色值RefractionColor、 太阳高度角、摄像机位置以及海水反射贴图上的颜色值等进行海水光照计算、 雾效计算和菲涅尔效应计算得到当前海面位置的最终的颜色值Color。

float4Color=float4(0.1f,0.1f,0.6f,1);

Color.rgb=lerp(RefractionColor.rgb,ReflectionColor.rgb, FresnelFactor*g_ReflectPow*RefractPow);

Color.rgb=Color.rgb+350.0f*SpecularFactor*g_ColorRGBASpecular.rgb* FresnelFactor*g_BrightParam.z;

在步骤109,根据当前点的世界坐标采样3D动态刻蚀贴图获取当前位置刻 蚀的颜色和强度,根据刻蚀强度对当前位置刻蚀颜色和水下场景颜色进行叠加 计算出刻蚀后的水下场景颜色值。

在显卡的像素着色器中根据当前屏幕空间的坐标信息、深度信息以及观察 投影矩阵的逆矩阵,计算出当前像素在世界坐标系中的坐标WorldPos。

oPos=float4(iPos.xy,0.0F,1.0F);

oTexBkg.x=(1.0F+iPos.x)*0.5F;

oTexBkg.y=(1.0F-iPos.y)*0.5F;

oTexBkg+=0.5F*c_fInverseViewportDimensions;

oViewScale=mul(oPos,c_mtxProjInverse);

oPosScreen=float4(iPos.xy,0.0F,1.0F);

float3ViewPos=iViewScale.xyz*DepthR/3.0f/iViewScale.z;

float4WorldPos=mul(float4(ViewPos,1.0F),c_mtxViewInverse);

float4CaustUV=float4(WorldPos.xz*0.07f*g_CausticScale, g_Time*20.0f*g_CausticSpeed,0.0F);

使用WorldPos对3D的动态水下刻蚀图进行采样获得颜色值 CaustColor.rgb及刻蚀强度值CaustColor.a。

float4CaustColor=tex3Dlod(tex_Cautic,CaustUV);

CaustColor.rgb*=g_CausticColor.rgb;

使用刻蚀强度CaustColor.a对水下场景颜色和刻蚀颜色进行叠加获得颜色 BKColor。

BKColor.rgb+=CaustColor.rgb*Brightness*CaustColor.a* CaustColor.a*CaustColor.a/3.0f;

在步骤110,通过计算水下场景当前海水表面网格点海水高度与地面高度的 差值,把水下场景的颜色往目标颜色进行衰变,差值越大说明水越深,水下场 景颜色就越往目标颜色接近,最终实现水下场景颜色衰减的效果。

根据当前海水表面网格点(像素)离摄像机的距离及颜色值BKColor进行 水下场景的雾效计算得到颜色值Color。

Color.rgb=lerp(BKColor.rgb,g_RGBAFog.rgb, saturate((DepthR-g_FogParam.x)*g_FogParam.y)*LerpPow);

计算出当前海水表面网格点的高度值同当前位置水面高度的差。

根据上述的高度差对颜色值Color进行衰减计算出当前海水表面网格点最 终的颜色值。

g_DeepOceanColor为颜色衰减的目标色,由美术制作人员根据需要预先指 定。

Color.rgb=lerp(lerp(g_DeepOceanColor.rgb,Color.rgb,min(1, exp(-max(WaterHeight-WorldPosScreen.y,0.0f)/102.0f))), Color.rgb,saturate((DepthR2D-100.0f)/100.0f));|

图2为根据本发明的实时海洋系统模拟海面效果图,如图2所示,在海面 效果截图的顶点层面上实现了海水的波动起伏。

图3为根据本发明的实时海洋系统模拟岸边动态泡沫效果图一,图4为根 据本发明的实时海洋系统模拟岸边动态泡沫效果图二,如图3和4所示,岸边 的白色泡沫并不是静止不动的,会从深水往浅水方向(即往岸边方向)不断冲刷。

图5为根据本发明的实时海洋系统模拟海面动态涟漪效果图一,图6为根 据本发明的实时海洋系统模拟海面动态涟漪效果图二,如图5和6所示,可以 看出雨点落到海面时的一圈圈涟漪的扩散效果。

图7为根据本发明的实时海洋系统模拟水下刻蚀效果图,如图7所示,本 发明的实时海洋系统可以形象地模拟完成水下刻蚀效果。

图8为根据本发明的实时海洋系统模拟水下蓝色衰减效果图,如图8所示, 水下颜色随着深度不断往预先指定的蓝色衰减。

图9为根据本发明的实时海洋系统模拟水下红色衰减效果图,如图9所示, 水下颜色随着深度不断往预先指定的红色衰减。

图10为根据本发明的实时海洋系统模拟水下黑色衰减效果图,如图10所 示,水下颜色随着深度不断往预先指定的黑色衰减。

本发明的实时海洋系统的模拟和渲染方法,海水波形由美术制作波形图来 控制,比较灵活,同时使用了顶点纹理和移位映射技术,使海水在顶点层面上 实现了真实复杂的动态波动,解决了水面比较平坦的问题;使用屏幕空间网格 技术,实际参加渲染的三角形面数是固定的,不会因为海水面积的增大而增加; 用高效的方式实现了无限宽广和高细节度的海水水体;实现了对下雨天的反馈, 在海面产生了动态扩散的涟漪效果,使海面更真实;实现了水下光线衰减及动 态刻蚀的效果,使水下效果更多样。用高效的方式实现了可供3D游戏直接使用 的实时的海洋系统的模拟和渲染,改变了之前水面比较平坦没法做出复杂波浪 的缺点。

本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已, 并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于 本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改, 或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作 的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号