首页 > 其他分享 >【Unity3D】水面特效

【Unity3D】水面特效

时间:2023-10-17 22:15:31浏览次数:35  
标签:Unity3D 颜色 特效 子图 Shader WaterDepth 水面 节点

1 前言

水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节。Shader Graph 基础知识详见→Shader Graph简介Shader Graph节点程序纹理简单应用

  • 深水区和浅水区颜色差异;
  • 水面有波纹,并且在移动;
  • 水面起伏波动;
  • 水面边缘有水泡;
  • 水中物体因折射而扭动。

​ 本文完整资源详见→Unity3D水面特效

img

2 水面特效实现

​ 由于本文需要使用 Scene Color 节点的颜色缓冲区信息模拟水面折射现象,而 Scene Color 节点只能在 URP 或 HDRP 管线下才能正常工作(详见→Shader Graph节点),因此本文选择在 URP 管线下实现模拟水面特效。

2.1 场景搭建及环境配置

1)场景搭建

​ 在 URP 项目中搭建场景如下。

img

​ 说明:水面模型是一个长方形,并且网格不能太稀疏,否则对顶点的上下波动将不太自然。

2)配置 Universal Render Pipeline Asset

​ 由于实验中使用了 Scene Depth 和 Scene Color 节点获取深度缓冲区和颜色缓冲区信息,需要在 Universal Render Pipeline Asset 中勾选 Depth Texture 和 Opaque Texture,如下。

img

3)主图配置

​ 由于水面是透明的,需要在主图的 Graph Settings 中将 Surface Type 属性设置 Transparent,并且取消勾选 Cast Shadows(投射阴影)和 Receive Shadows(接受阴影)如下。

img

2.2 水面 Shader Graph

1)主图

​ Water.shadergraph

img

​ WaterDepth、FinalWaterColor、WaterNormal、WaterPosition 都是自定义节点,释义如下,Smoothness 用于调整水面光滑度。

  • WaterDepth 节点:水面到水底的深度计算;
  • FinalWaterColor 节点:水面最终的颜色(混合深浅水颜色、泡沫颜色、背景折射颜色);
  • WaterNormal 节点:水面法线;
  • WaterPosition 节点:水面坐标。

2)WaterDepth 子图

​ WaterDepth.shadersubgraph

img

​ 说明:WaterDepth 子图用于计算水面深度;Scene Depth 节点用于获取不透明物体的深度值(水底深度),Screen Position 节点输出的 w 分量是水面的深度,两者相减就是水面到水底的深度值。SubtractDepth、DepthStrength 释义如下。

  • SubtractDepth:深度减去的参数,其值越大浅水区越大;
  • DepthStrength:深度加强的参数,其值越大浅水区越小。

img

​ 如果将 Water Depth 子图的输出直接连到主图片元着色器的 Base Color 上,显示效果如下。从图中可以看到,Water Depth 节点能够较好得识别物体的边缘。

img

3)FinalWaterColor 子图

​ FinalWaterColor.shadersubgraph

img

​ 说明:FinalWarterColor 子图用于计算水面最终的颜色(混合深浅水颜色、泡沫颜色、背景折射颜色),WaterColor 节点用于计算水面颜色(混合深浅水颜色、泡沫颜色),WaterRefraction 节点用于计算背景折射颜色。

4)WaterColor 子图

​ WaterColor.shadersubgraph

img

​ 说明:WaterColor 子图用于计算水面颜色(混合深浅水颜色、泡沫颜色),BubbleColor 节点用于计算泡沫颜色,ShallowColor、DeepColor、WaterDepth 的释义如下。

  • ShallowColor:浅水区的颜色;
  • DeepColor:深水区的颜色;
  • WaterDepth:水面到水底的深度,用于混合深水区和浅水区的颜色。

5)BubbleColor 子图

​ BubbleColor.shadersubgraph

img

​ 说明:BubbleColor 子图用于计算泡沫颜色,BubbleSpeed、BubbleDensity、BubbleFilter1、BubbleFilter2、BubbleBrightness、WaterDepth 的释义如下。

  • BubbleSpeed:水泡移动的速度;
  • BubbleDensity:水泡的密度,其值越大水泡越小且越密集;
  • BubbleFilter1:水泡过滤参数,其值越大,水泡越稀疏;
  • BubbleFilter2:水泡过滤参数,其值越大,水泡越稀疏;
  • BubbleBrightness:水泡亮度;
  • WaterDepth:水面到水底的深度,用于过滤气泡,只有浅水区才有气泡。

6)WaterNormal 子图

​ WaterNormal.shadersubgraph

img

​ 说明:WaterNormal 子图用于计算水面法线,NormalStrength、WaterDepth 的释义如下。

  • NormalStrength:法线最大强度;
  • WaterDepth:水面到水底的深度,用于调整法线强度,深水区波纹较深,浅水区波纹较浅。

7)WaterPosition 子图

​ WaterPosition.shadersubgraph

img

​ 说明:WaterPosition 子图用于模拟水面起伏效果,通过调整顶点坐标的 y 分量实现,WaveHeight 用于调整水面起伏的最大高度。由于 WaterPosition 子图的输出连在顶点着色器上,而 WaterDepth 是在片元着色器中计算的,因此不能使用 WaterDepth 对 WaveHeight 进行混合(即深水区水面起伏大,浅水区水面起伏小)。

8)WaterRefraction 子图

​ WaterRefraction.shadersubgraph

img

​ 说明:WaterRefraction 子图用于计算背景折射颜色,通过对颜色缓冲区的纹理进行随机偏移采样实现,折射的 Shader 实现详见→反射和折射。RefractionStrength 用于调整折射偏移强度,Screen Position 节点用于获取屏幕顶点的 uv 坐标,Scene Color 节点(类似于 Shader 中的 GrabPass)用于获取颜色缓冲区纹理(仅在 URP 或 HDRP 管线下才能正常工作),节点详见→Shader Graph节点

2.3 运行效果

img

img

​ 声明:本文转自【Unity3D】水面特效

标签:Unity3D,颜色,特效,子图,Shader,WaterDepth,水面,节点
From: https://www.cnblogs.com/zhyan8/p/17760974.html

相关文章

  • Unity3D学习记录02——PloyBrush场景搭建
    首先在Window->PackageManager里面搜索PolyBrush,下载后将URP的Shader样例导入 导入后Asset文件夹下会有Sample的文件夹,在菜单栏Tools->PolyBrush->PolyBrushWindow打开窗口这个窗口最上面的五个,第一个是用来调整地形高低的,第二个是进行柔化场景的,第三个是调整颜色的,第四个......
  • Unity3D学习记录01:URP渲染管线以及3D游戏场景设置
    以下内容所使用的版本均为Unity2022.3先在Window->PackageManager->UnityRegistry里面搜索添加UniversalRP Unity中,创建渲染管线的方式为Asset文件夹下右键Create->Readering->URPAsset(withUniversalAsset)会创建以下两个Pipeline: 接着在图中的设置里添加这两个渲......
  • 【Unity3D】Renderer Feature简介
    13D项目迁移到URP项目后出现的问题​3D项目迁移至URP项目后,会出现很多渲染问题,如:材质显示异常、GL渲染不显示、多Pass渲染异常、屏幕后处理异常等问题。下面将针对这些问题给出一些简单的解决方案。​URP官方教程和API详见→UniversalRP文档、Universal......
  • 【Unity3D】花瓣特效
    1花瓣绘制原理​如下图是实现的花瓣特效效果,为方便描述,我们将每个红色的扁状长条称为花瓣,每个花瓣中心的绿点称为花蕊,花朵的正中心称为花心。​我们在xOz平面上绘制花朵,假设花心为O点,其世界坐标为_Center,花瓣个数为_PetalNum,花瓣半长度和半宽度分别为_PetalLe......
  • 【Unity3D】消融特效
    1前言​选中物体消融特效中基于Shader实现了消融特效,本文将基于ShaderGraph实现消融特效,两者原理一样,只是表达方式不同,另外,选中物体消融特效中通过discard丢弃片元,本文通过alpha测试丢弃片元。​ShaderGraph环境搭建、简单应用详见→ShaderGraph简介。​......
  • 【Unity3D】Shader Graph简介
    1ShaderGraph简介​ShaderGraph是Unity官方在2018年推出的Shader制作插件,是图形化的Shader制作工具,类似于Blender中的ShaderEditor和UE中的MaterialEditor,它使用流程图的形式表达顶点变换和片元着色的流程,通过节点(Node)的连接实现各种复杂的特效,关于节......
  • 水面和水下效果Shader全解析
    本课程对水面效果以及水下效果都做了深入分析。 对于一款游戏来说,大世界场景中,湖泊,河流,池塘等都或多或少会做进游戏中作为场景中的一个元素,水面效果制作的逼真会给游戏带来很高的体验感,水面特效包含很多物理性质的计算,反射,折射,菲涅尔反射,等等;有的游戏还需要游戏玩家潜入水下......
  • AR人脸美颜特效解决方案,打造全方位美颜美妆新时代
    随着科技的不断发展,人们对美的追求也日益增长。在这个看脸的时代,一张完美的脸庞无疑是吸引眼球的最佳法宝。为了满足广大用户对美颜的需求,美摄AR人脸美颜特效解决方案应运而生,凭借其强大的功能,为用户带来全新的美颜美妆体验。一、美颜美妆,打造完美肌肤美摄AR人脸美颜特效解决方案......
  • unity3d-控件 Controls
    ControlTypes控件类型ThereareanumberofdifferentGUIControlsthatyoucancreate.ThissectionlistsalloftheavailabledisplayandinteractiveControls.ThereareotherGUIfunctionsthataffectlayoutofControls,whicharedescribedintheLayout......
  • 视频剪辑中生成花字特效的代码案例详述
    本文为阿里云智能媒体服务IMS「云端智能剪辑」实践指南第四期,通过运用官方提供的花字模版或自定义设计花字,完成丰富、精美的花字特效视频剪辑。昱尘|作者在视频后期剪辑中,“花字”是一种特别的存在。通过使用适合视频的花字,不仅可以丰富视频内容,还可以让视频传达的信息更加容......