【Unity3D】水面特效

news2024/11/23 21:44:33

1 前言

        水波特效 中通过屏幕后处理实现了环形水波效果,本文通过 Shader Graph 实现了模拟水面特效,包含以下特效细节。

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

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

2 水面特效实现

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

2.1 场景搭建及环境配置

        1)场景搭建

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

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

        2)配置 Universal Render Pipeline Asset

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

        3)主图配置

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

2.2  水面 Shader Graph

        1)主图

        Water.shadergraph

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

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

        2)WaterDepth 子图

        WaterDepth.shadersubgraph

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

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

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

        3)FinalWaterColor 子图

        FinalWaterColor.shadersubgraph

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

        4)WaterColor 子图

        WaterColor.shadersubgraph

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

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

        5)BubbleColor 子图

        BubbleColor.shadersubgraph

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

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

        6)WaterNormal 子图

        WaterNormal.shadersubgraph

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

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

        7)WaterPosition 子图

        WaterPosition.shadersubgraph

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

        8)WaterRefraction 子图

        WaterRefraction.shadersubgraph

        说明:WaterRefraction 子图用于计算背景折射颜色,RefractionStrength 用于调整折射偏移强度,Screen Position 节点用于获取屏幕顶点的 uv 坐标,Scene Color 节点用于获取颜色缓冲区纹理(仅在 URP 或 HDRP 管线下才能正常工作),详见→Shader Graph节点。

2.3 运行效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/914050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《数字图像处理-OpenCV/Python》连载(1)前言

《数字图像处理-OpenCV/Python》连载(1)前言 本书京东优惠购书链接:https://item.jd.com/14098452.html 写作背景 编写本书的初衷,源自作者学习数字图像处理的经历。 在创新实验班开设的专业创新教育课程中,我选择的…

基于springboot灾区物资管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

RestFul API 详解

目录 一、RestFul API 概述1.1 API1.2 RestFul API 二、REST概述三、RestFul API 规范3.1 动作3.2 路径(接口命名)3.3 过滤信息(Filtering)3.4 状态码(Status Codes) 四、RESTful 的极致 HATEOAS 一、RestF…

Node.JS教程

文章目录 Node.JSNode.js学习指南一、Node.js基础1.认识Node.js2.开发环境搭建3. 模块、包、commonJS3.1、为什么要有模块化开发?3.2、CommonJS规范3.3、 modules模块化规范写法 总结 Node.JS Node.js学习指南 服务端开发底层平台周边生态 学习前提 JavaScript、E…

2023年菏泽市中职学校技能大赛“网络安全”赛项规程

2023年菏泽市中职学校技能大赛 “网络安全”赛项规程 一、赛项名称 赛项名称:网络安全 赛项所属专业大类:信息技术类 二、竞赛目的 通过竞赛,检验参赛选手对网络、服务器系统等网络空间中各个信息系统的安全防护能力,以及分析…

第二篇论文写作启发点V5

第二篇论文写作启发点V5 2.LLFLow模型的缺陷,这是先验,如果先验出现错误,那么后面这个模型都会错误。而我们使用了学习的方式去解决 3. 参考文献和实验时的对照模型最好使用最新的,就是没有被引用过的,这样可以降低论文…

【大数据】Linkis 简述

Linkis 简述 1.引言2.背景3.设计初衷4.技术架构5.业务架构6.处理流程7.如何支撑高并发8.用户级隔离度和调度时效性9.总结 Linkis 是微众银行开源的一款 数据中间件,用于解决前台各种工具、应用,和后台各种计算存储引擎间的连接、访问和复用问题。 1.引言…

ImportError: cannot import name ‘SQLDatabaseChain‘ from ‘langchain‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

使用IDEA把Java程序打包成jar

点击左上角File,选择Project Structure 左侧选中Artifacts,点击右侧的号 选择JAR->From modules with dependencies 选择你要运行的main方法所在的类,选好了点击OK Artifacts添加完成后点击右下角OK 在工具栏中找到Build,选择Build Artifacts 刚才创建好的Artifacts,选择Bui…

食品饮料制造行业如何实现数字化转型和工业4.0

随着科技的不断进步和全球产业的不断发展,食品饮料制造行业也正迎来数字化转型和工业4.0的浪潮。这一转型不仅提升了生产效率和质量,还满足了消费者对更健康、更可持续产品的需求。本文将深入探讨食品饮料制造行业在数字化转型和工业4.0方面的趋势、挑战…

文心一言测评,满足你的生活工作方方面面

出品| 大力财经 文 | 魏力 随着国产大模型如雨后春笋般爆发,百度文心一言在多个中文任务中已经超越了ChatGPT。 文心一言的逻辑性强,能够满足提问者的各种需求,并在各个领域都有出色的表现。在多个领域,人工智能需要更准确地回…

SQL - Navicat查看SQL执行计划

我们在工作中肯定写过sql语句,也会进行一下sql语句的优化,在优化sql语句里看过相应的explain 在进行sql语句优化的时候,理解执行计划中各个参数的意思,弄明白执行的顺序,对sql优化有很大的帮助。 1、通过 Explain 命令…

编程的成就感到底在哪里?

一个好的开发人员如何成为一个伟大的开发人员? 暂时忘记伟大:一个体面的开发人员如何成为一个好的开发人员? 从步骤 1 到步骤 n 没有明确的路径。 哎呀,甚至不清楚步骤n是什么。 作为具有逻辑思维的开发人员类型,缺乏…

计算机视觉 -- 图像分割

文章目录 1. 图像分割2. FCN2.1 语义分割– FCN (Fully Convolutional Networks)2.2 FCN--deconv2.3 Unpool2.4 拓展–DeconvNet 3. 实例分割3.1 实例分割--Mask R-CNN3.2 Mask R-CNN3.3 Faster R-CNN与 Mask R-CNN3.4 Mask R-CNN:Resnet1013…

Gateway简述

前言 ​ 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端调用多个微服务接口的地址。另外微服务架构的请求中,90%的都携带认证信息/用户登录信息,都需要做相关的限制管理,API网关由此应允而生。 这样的架构会存…

解决github上http克隆代码问题(SSH方式)centos

常见报错如下: fatal: unable to access https://github.com/cnych/demo_service/: Failed connect to 127.0.0.1:1080; Connection refused 代理问题报错 fatal: unable to access https://github.com/cnych/emo_service/: TCP connection reset by peer https…

BLE4.2 ch582 TMOS使用

需要注意的是,TMOS(任务管理系统)的时基是625us。每个Take任务最多能有15个事件; 创建一个TMOS任务,需要分五步: 1.创建任务TakeID static uint8_t LEDTaskId INVALID_TASK_ID;2.定义一个事件标志 #define LEDTas…

【附安装包】SolidWorks2023安装教程

软件下载 软件:Solidowrks版本:2023语言:简体中文大小:15.76G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU3.0GHz 内存8G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.ba…

测试驱动开发(TDD)

测试驱动开发(TDD) 本篇文章简单叙述一下什么是测试驱动开发,以及怎么进行测试驱动开发! TDD (Test Driven Development):(源于极限编程(XP))在不…

树莓派时间更新为中国区时间

一、测试环境为:树莓派3B piraspberrypi:~/workfile/lorawan/lorawan-gw $ uname -a Linux raspberrypi 6.1.21-v7 #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l GNU/Linux 测试过程中,请确保树莓派连接网络 ; 二、安装ntp相关命令&…