您当前所在位置: > 爆料站 > 君子堂

再加亿点点细节!Cocos 基于平面着色的 3D 水面渲染方案

时间:2022-03-28 21:42:34  来源:  作者:网络转载
赛文:旧日不再加强版

赛文:旧日不再加强版

大小:4.82GB更新:2019-07-02

分类:冒险,RPG,潜行



但该项目基于 Cocos Creator 延迟渲染管线,对项目和设备要求较高,所以麒麟子专门准备了这个独立的水面效果分享,希望能够对大家有所帮助。

二、水面渲染流程

水面渲染技术非常多,不同段位的产品,对水面的要求不同。

毛星云的《真实感水体渲染技术总结》这篇文章中,通过对一些 3A 大作的水面渲染进行分析,列出了非常多的技术要点,有兴趣的朋友可以拜读。

水面渲染技术从简单到复杂来排序,可以分为以下三类:

平面着色



顶点动画



流体模拟



本文实现的是基于平面着色的水面效果,虽然它并非高端效果,但却是大部分 3D 项目中采用的方案。

基于平面着色的水面渲染主要涉及以下几个部分:

反射

折射

水深效果

水岸柔边

动态天空盒

法线图与光照

岸边浪花

由于时间关系,法线图与光照与岸边浪花暂未实现。

标准的渲染流程如下所示:



可以看出,如果要实现所有效果,至少需要绘制场景4次。

由于这里的深度图只是和折射搭配使用,8位精度足够用了,我们可以考虑借用折射图中的 Alpha 通道来存储深度信息。

优化后的流程图如下:



三、反射贴图渲染

麒麟子在《用实时反射 Shader 增强画面颜值》中已经完整地剖析了实时反射相关原理,在此就不再敷述,有需要了解的读者可直接点击查看。

这里主要讲一讲本 DEMO 中的实现步骤。

步骤1:使用代码新建一个 RenderTexture。

步骤2:创建一个节点,添加摄像机组件,并将 clearFlags、clearColor、visibility 属性与主摄像机同步。

步骤3:设置反射摄像机的渲染优先级,确保比主摄像机先渲染。

步骤4:将新创建的 RenderTexture 赋值给此摄像机的 targetTexture 属性。

以上步骤的代码在 WaterPlane.ts 中,如下图所示:



步骤5:在 lateUpdate 中同步主摄像机参数。



步骤6:在 lateUpdate 中根据实时反射原理,动态计算摄像机关于主摄像机的镜像位置和旋转。

最终,渲染得到的 RenderTexture 如下:



麒麟小贴士:

所有物体的材质,需要加入自定义裁剪面,裁剪掉水面以下的部分。

可以明显看到,上图中绿色物体的倒影,水面以下的部分是被裁剪掉了的。

四、折射贴图渲染

折射渲染的原理非常简单:

渲染水平面以下的部分到 RenderTexture

在水面渲染阶段使用噪声图进行扰动,以模拟出水面折射效果

折射渲染的流程与反射渲染大致相同,只有两个细小的差别:

用于折射渲染的摄像机所有参数均与主摄像保持一致即可

折射渲染阶段,物体被裁剪掉的是水面以上的部分

下面我们来看看,本 DEMO 中关于折射的实现步骤。

步骤1:使用代码新建一个 RenderTexture。

步骤2:创建一个节点,添加摄像机组件,并将 clearFlags、clearColor、visibility 属性与主摄像机同步。

步骤3:设置反射摄像机的渲染优先级,确保比主摄像机先渲染。

步骤4:将新创建的 RenderTexture 赋值给此摄像机的 targetTexture 属性。

以上步骤的代码在 WaterPlane.ts 中,如下图所示:



麒麟小贴士: 注意红色线框部分,本 DEMO 中折射贴图的 Alpha 通道用于标记深度信息,所以需要确保 Alpha 通道的值为 255。

步骤5:在 lateUpdate 中同步主摄像机参数、位置、旋转等信息。

最终,渲染得到的 RenderTexture 如下:



五、水面渲染

水面渲染主要利用了投影纹理技术,将顶点的投影坐标转化为 UV,对折射和反射贴图进行采样。

由于使用了折射贴图,我们的水面材质不需要开启 Alpha 混合。

折射渲染

步骤1:根据投影坐标计算出屏幕 UV。如下所示:

vec2 screenUV = v_screenPos.xy / v_screenPos.w * 0.5 + 0.5;

步骤2:采样折射贴图,可以得到如下渲染效果:



左边为正常渲染效果,右边为标记了折射内容的效果

步骤3:使用噪声图对折射进行扰动,可得到如下效果:



反射渲染

步骤1:与折射渲染一样,根据投影坐标计算出屏幕 UV。

步骤2:采样反射贴图,可以得到如下渲染效果:



步骤3:使用噪声图对反射进行扰动,可得到如下效果:



菲涅尔混合

菲涅尔的计算公式从玉兔的边缘光教程开始,到实时反射等场合,已经出现过很多次了。下面是核心代码:



折射可以视为水体本色,利用菲涅尔因子与反射内容混合,即可实现一个带折射和反射的水体效果。

伪代码如下:

finalColor = mix(refractionColor,reflectionColor,fresnel)

最终可以得到如下显示效果:



完整代码代码请查看项目中的 effect-water.effect 文件。

六、水深效果

从上面的动画中可以看出,虽然折射和反射效果都有了。但画风有些奇怪,完全没有水面的感觉。

这是水面没有深浅效果导致的。

我们来看看,如何获取深度信息,并根据深度信息实现水深效果。

获取深度信息



从上图中,我们可以清晰地看到,靠近岸边的海水的颜色比远处海水的颜色透明得多。

产生这种现象的主要原因,就是基于视线方向的水体厚度不同。

什么叫基于视线方向的水体厚度,请看下图:



我们通常说的水体深度,是指在忽略视线因素的情况,水面到水底的高度差。

在不追究细节的情况下,我们可以简单地使用高度差来作为水的深度。

一种可能的伪代码如下:

depth = clamp((g_waterLevel - v_position.y) * depthScale,0.0,1.0);

其中 depthScale 是我们的深度缩放因子,可以用来调节比例尺问题,以及水体能见度线性衰减速率。

而基于视线方向的水体厚度,是指视线方向与水平面和水底交点的距离差。即图中 点 P1 到 点 P2 的距离。

下面我们来推导一下,使用基于视线方向水体的厚度来作为深度因子的公式。

许多朋友第一反应是解直线方程,但用空间向量的特性来求解会更容易。

为方便对照理解,再贴一次上面的图:



设观察方向为 viewDir,厚度为 depth 则有:

P1 + viewDir * depth = P2

分拆为分量运算可得:

P1.x + viewDir.x * depth = P2.x

P1.y + viewDir.y * depth = P2.y

P1.z + viewDir.z * depth = P2.z

可推导出:

depth = (P2.y - P1.y) / viewDir.y

由此可得如下计算公式:

vec3 viewDir = normalize(v_position.xyz - cc_cameraPos.xyz);

float depth = (v_position.y - g_waterLevel) / viewDir.y

depth = clamp(depth * depthScale,0.0,1.0);

比起直接使用水体深度来说,多了一次求 viewDir 单位向量的运算,以及一次除以 viewDir.y 运算。

在非极端情况下,多出的这一点纯逻辑运算在 GPU 上是可以忽略不计的,可以放心使用。

将上述公式添加到渲染对象的 Shader 中,并在折射渲染阶段启用,将结果存入 Alpha 通道即可。

项目中的 Shader 代码如下图所示:



最终得到的深度信息如下:



深度混合

有了上面的深度信息,我们只需要在计算出折射颜色后,再用深度信息与水底颜色混合即可。Shader 代码如下图所示:



由于水体的可见度是非线性的,所以对 diffDepth 使用了 pow 函数,这个 power 参数默认是 2.0。

最终可以得到如下效果:



六、水岸柔边



当我们把摄像机拉近,观察水面与物体交接处的时候,可以明显看到一条清晰的边界。

这条边界在反射越强的时候越明显,使我们的水面效果大打折扣。

好在我们已经有了深度信息,可以根据深度来判断出哪里靠近岸边,并修改菲涅尔因子,使反射越靠近岸边的时候越弱即可。

核心代码如下:



最终可以实现在全反射的情况下,水面与岸边依然平滑过渡。效果如下图所示:



再来一张远视角的图:



七、动态天空盒



为了增强氛围感,DEMO 中使用了动态天空盒。

这是一个特别简单的高效的动态天空盒方案,仅使用了一个双层纹理混合的半球模型,调节两张纹理的水平方向流动速度即可。





八、关于DEMO

所有效果参数均可调节,如下图所示:




来源:COCOS
原文:https://mp.weixin.qq.com/s/yLEt3yHBj9lBNWm_xANvJw


资源转载网络,如有侵权联系删除。
相关下载

玩家评论

《原神》神里绫人技能再加强,角色定位再次发生改变!

  《原神》神里绫人技能再次得以调整,相当于V1版本,虽然幅度不大,但却在设定上做出了调整,侧边改变了神里绫人的定位。   普通攻击   普攻和重击两项技能并详情>>

阅读: 1
日期: 2022-02-23
又一三星可折叠手机专利曝光:GalaxyZFold3之外再加个滑动屏幕

  凭借着 Galaxy Z Fold 3 和 Galaxy Z Flip 3,三星俨然成为可折叠手机领域的主导者。这家韩国制造商对这些新的可折叠设备的未来充满信心。 随着时间的推移,三星还申请详情>>

阅读: 3
日期: 2021-11-26
UOL:对没有起各人的等待,心愿今天再加油吧

对没有起各人的等待,不甚么好说的,心愿今天再加油吧。 祝贺GS。 详情>>

阅读: 0
日期: 2021-10-06
竞早报:iG晋级季后赛无望,阿克尚热修再加强,LOL手游创收可观_比赛

原标题:竞早报:iG晋级季后赛无望,阿克尚热修再加强,LOL手游创收可观 撸圈新鲜事,需要《竞早报》 1、昨日赛场:iG不敌BLG,晋级季后赛无望 在昨天的LPL夏详情>>

阅读: 0
日期: 2021-07-29
《和平精英》X《哥斯拉大战金刚》联动再加码

  今日,《和平精英》与传奇影业怪兽宇宙系列电影作品《哥斯拉大战金刚》精彩联动内容再加码,“怪兽之王”军需套装高燃上线!特种兵可化身怪兽顶详情>>

阅读: 4
日期: 2021-06-11
炉石传说:时隔一年半梦境再加入?新橙卡效果其实早已告诉玩家

最近炉石传说即将上线新的迷你扩展包,也就是“哀嚎洞穴”。扩展包将于6月4日正式上线,本次扩展包和之前的迷你合集一样,都是4张橙卡外加一张紫卡,14张详情>>

阅读: 4
日期: 2021-06-02
EVE周年庆福利再加码!携手Alienware开启线下星战狂欢_宇宙

原标题:EVE周年庆福利再加码!携手Alienware开启线下星战狂欢 为了庆祝晨曦宇宙跃迁开启一周年,新伊甸中的各类线上福利活动轮番登场。漫游赛季已经吸详情>>

阅读: 3
日期: 2021-04-27
EVE周年庆福利再加码携手Alienware开启线下星战狂欢

为了庆祝晨曦宇宙跃迁开启一周年,新伊甸中的各类线上福利活动轮番登场。漫游赛季已经吸引了不少舰长们打卡游历新伊甸,在周年宝箱的加持下,相信不少舰长早已详情>>

阅读: 3
日期: 2021-04-27
EVE周年庆福利再加码!携手Alienware开启线下星战狂欢

为了庆祝晨曦宇宙跃迁开启一周年,新伊甸中的各类线上福利活动轮番登场。漫游赛季已经吸引了不少舰长们打卡游历新伊甸,在周年宝箱的加持下,相信不少舰长早已全幅武装,摩拳擦掌详情>>

阅读: 3
日期: 2021-04-27
微信删了别人再加上别人知道吗_微信删了别人再加上别人是否知道_快吧手游

微信删了别人再加上别人知道吗微信中把对方删除后再次添加,对方也不会发现。并且在添加新朋友之后跳出的那个打招呼的话对方也是看不见的,只会在我们自己这边的聊详情>>

阅读: 10
日期: 2021-02-24
镇魂街武神躯福利再加码 连续签到送镇魂街官方手办

镇魂街武神躯于1月26日10:00正式开启!一款新游戏为了吸引玩家,一定会准备各种福利好礼。下面跟小编看看都有什么惊喜吧! 【活动规则】 各位镇魂将在活详情>>

阅读: 2
日期: 2021-01-29
【CF】福利活动再加码,永久赛事纪念皮肤免费抽,就等这一波了

原标题:【CF】福利活动再加码,永久赛事纪念皮肤免费抽,就等这一波了 小伙伴们大家好,很高兴又和大家见面了,我是你们的灵狐姐。最近的福利活动一直都没有详情>>

阅读: 6
日期: 2020-12-10
大仙奇妙秀:马可自带真伤就已经很无情了,再加上打野刀更牛了

大仙奇妙秀:马可自带真伤就已经很无情了,再加上打野刀更牛了详情>>

阅读: 43
日期: 2020-10-21
香肠派对:毒圈的伤害再加上燃哥的火力压制,滋味不好受吧!

香肠派对:毒圈的伤害再加上燃哥的火力压制,滋味不好受吧!详情>>

阅读: 27
日期: 2020-10-19
叶童一身阔太太打扮,再加上这中老年发型,被袁嘉敏衬得像奶奶!_显得

原标题:叶童一身阔太太打扮,再加上这中老年发型,被袁嘉敏衬得像奶奶! 很多电视剧大家都是比较熟悉的,就像一些经典的电视剧《神雕侠侣》,《新白娘子传奇详情>>

阅读: 2
日期: 2020-09-23
逆战8周年庆典福利再加码8.8登录送永久

八月当属一年之中最为炎热的一个月,在这个热情如火的八月逆战迎来了8周年庆典,在8月2日的逆战8周年庆典仪式当天,小伙伴们为逆战送上了真挚的祝福,记录下过往的许多美好时刻,同详情>>

阅读: 45
日期: 2020-08-07
逆战8周年庆典福利再加码 8.8登录送永久

八月当属一年之中最为炎热的一个月,在这个热情如火的八月逆战迎来了8周年庆典,在8月2日的逆战8周年庆典仪式当天,小伙伴们为逆战送上了真挚的祝福,记录下过往的许多美好详情>>

阅读: 29
日期: 2020-08-07
邱淑贞脸饱满又没发福,看不出老了,再加上穿的衣服又很年轻!_显得

原标题:邱淑贞脸饱满又没发福,看不出老了,再加上穿的衣服又很年轻! 邱淑贞真的非常的有魅力的,而且她也是非常的有女人味的一个女明星了。她是比较的性详情>>

阅读: 6
日期: 2020-07-28
助推中国电竞发展 建立大型城市赛事中心京东星宇再加码

近些年中国电竞正处在高速发展之中,随着各项电竞赛事中国取得的成绩,世界的目光都在聚焦中国。伴随着电竞热潮,中国许多城市都喊出要努力打造电竞城市的口号,不同城市详情>>

阅读: 16
日期: 2020-07-28
助推中国电竞发展建立大型城市赛事中心京东星宇再加码

  近些年中国电竞正处在高速发展之中,随着各项电竞赛事中国取得的成绩,世界的目光都在聚焦中国。伴随着电竞热潮,中国许多城市都喊出要努力打造电竞城市的口号,不同城市也相继详情>>

阅读: 10
日期: 2020-07-28
【老王说农药】体验服阿古朵再加强马超被动削弱

周二一波常规更新到来,这周的活动都和皮肤体验卡有关,李信一念神魔将在7月15日正式上线。与此同时,体验服的一些英雄都迎来了改动:体验服阿古朵再加强 马超被动削弱 一起来看详情>>

阅读: 25
日期: 2020-07-14
刘晓庆气质确实不如林青霞,再加上刻意打扮年轻,没有她优雅!_感觉

原标题:刘晓庆气质确实不如林青霞,再加上刻意打扮年轻,没有她优雅! 爱美之心人皆有之,不仅是小仙女,就连娱乐圈中本来颜值就比较高的女神为了美丽也是付详情>>

阅读: 9
日期: 2020-06-20
6.2版本更新,8名英雄被调整,吕布再加强

昨天,除了上线了新英雄蒙恬之外,还调整了8名英雄,包括大家所熟悉的孙膑,白起和吕布都在此次改动的队列当中。 ①程咬金【看法】程咬金提升了释放技详情>>

阅读: 7
日期: 2020-06-03
京东沃尔玛再加持,达达募资3亿美元如何应战即时配送?

原标题:京东沃尔玛再加持,达达募资3亿美元如何应战即时配送? 北京时间6月1日晚间,达达集团向美国证券交易委员会(SEC)提交了更新后的招股书,IPO发行价格详情>>

阅读: 9
日期: 2020-06-02
促投资扩消费多“箭”齐发地方稳经济再加码

“一季报”悉数出炉 多地密集开会研判经济形势促投资扩消费多“箭”齐发 地方稳经济再加码31省份经济“一季报”近日悉详情>>

阅读: 8
日期: 2020-05-07
海底捞再加码方便速食,颐海国际推冲泡粉丝和米饭

原标题:海底捞再加码方便速食,颐海国际推冲泡粉丝和米饭 新京报讯(记者 张晓荣)继2月初推出方便菜之后,海底捞又在速食领域有了新动作。4月3日,新京报记详情>>

阅读: 18
日期: 2020-04-03
Epic喜再加一!《Drawful2》免费领取地址

本周原本是Epic喜加三,现在再加一,变成喜加四!本周原先免费赠送的游戏为《僵尸世界大战》《虚构》《折磨X惩罚者》,在今天新加一款免费领取游戏《Drawfu详情>>

阅读: 14
日期: 2020-03-28
微信小程序商业化再加速:推交易保障功能,微盟已完成接入

原标题:微信小程序商业化再加速:推交易保障功能,微盟已完成接入 在去年完成8000亿交易额后,微信小程序商业化再提速。 在上线小程序直播组件,下场直播详情>>

阅读: 12
日期: 2020-03-26
收官之年,脱贫攻坚再加把劲

原标题:收官之年,脱贫攻坚再加把劲 光明日报记者 李慧 今年是脱贫攻坚收官之年,疫情影响下,脱贫攻坚工作面临一些困难,但对确保如期全面打赢脱贫攻坚战详情>>

阅读: 13
日期: 2020-03-20
幽默笑话:想要娶我女儿容易,但是,必须再加一个!_女孩

【幽默笑话】女孩可能是被气急了,上来就甩了男孩一个耳光。男孩也没生气,伸手摸了摸女孩的头发,然后把女孩的头贴到自己胸前,女孩一直在哭,并不停的打着男孩儿。男详情>>

阅读: 10
日期: 2020-03-14
外资继续看好中国债券连续9个月增持后或再加码

原标题:外资继续看好中国债券 连续9个月增持后或再加码 外资继续看好中国债券连续9个月增持后或再加码 ■本报见习记者 宓 迪 9月5日,记者从中国债详情>>

阅读: 23
日期: 2019-09-06
新闻观察:优化融资环境稳增长政策再加码

原标题:新闻观察:优化融资环境 稳增长政策再加码   央视网消息:9月4日,国务院常务会议部署精准施策,加大力度做好“六稳”工作,会议指出,加快落实降低详情>>

阅读: 37
日期: 2019-09-05
神州数码郭为:云战略再加速_数字化

原标题:神州数码郭为:云战略再加速 文/杨松 编辑/鄢子为 随着云计算、大数据、人工智能等新技术的发展,云服务已经成为企业进行数字化转型的标配。 详情>>

阅读: 15
日期: 2019-08-28
冲击云计算100亿收入“小目标”,神州数码云战略再加速|钛快讯_数字化

原标题:冲击云计算100亿收入“小目标”,神州数码云战略再加速 | 钛快讯 8月26日,神州数码在吉林长春举行2019全球合作伙伴峰会。IDC中国副总裁兼首详情>>

阅读: 11
日期: 2019-08-27
精彩推荐