【Godot4自学手册】第四十五节用着色器(shader)制作水中效果

news2024/11/13 23:09:47

本节内容,主要学习利用着色器制作水波纹效果,效果如下:
请添加图片描述

一、搭建新的场景

首先我们新建场景,根节点选择Node2D,命名为Water,给根节点添加两个Tilemap节点,一个命名为Background主要用于绘制地形图,和水中物品;另一个命名为Water,主要用于绘制水波纹。目录结构如下:
请添加图片描述

Background绘制效果如下:
请添加图片描述

Water绘制水波纹,将水覆盖的部分全部填满,效果如下:
请添加图片描述

需要素材的可以在头部点击下载源代码。

二、制作水波纹

1.新建着色器。 选择Water节点,在属性检查器中中找到CanvasItem属性,并在Material->Material后方选择下拉按钮选择新建ShaderMaterial。然后选中新建的材质球,在Shader属性选择新建着色器,如下:
请添加图片描述

2.编写代码。 在着色器内编写如下代码:

shader_type canvas_item;

uniform sampler2D screen_texture:hint_screen_texture;
uniform sampler2D noise_texture:filter_nearest,repeat_enable;
uniform float distortion =0.01;
uniform vec2 speed = vec2(.5,.2);
uniform float wave_strength =0.1;

void vertex() {
	VERTEX.y += sin(TIME);
}

void fragment() {
	vec2 uv = UV+speed*TIME;
	vec2 noise =2.0 * texture(noise_texture,uv).rg - vec2(1,0);
	COLOR = texture(TEXTURE,UV + noise * wave_strength);
	COLOR *= texture(screen_texture,SCREEN_UV+noise * distortion);
}

3.配置参数。 编写完成代码保存后,检查器中会出现一些参数,noise_texture表示水波纹噪声纹理;distortion表示波动距离;speed表示波动速度;wave_strength表示波动强度。我们主要设置noise_texture,其它默认值。
Noise Texturen 选择新建NoiseTexure2D,展开属性勾选Seamless启用,表示纹理无缝连接;Noise属性选择新建FastNoiseLite,在其属性中将frequency设置为)0.001,数值越小产生的噪声越平滑。
请添加图片描述

这样配置,我们的效果就实现了,如下:
请添加图片描述

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

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

相关文章

JUC介绍

一、并发与并行 1.并发 早期计算机CPU是单核的,为了提高CPU的利用率,减少等待时间,使用到了并发工作的理论 并发就是将CPU资源合理分配给多个任务,当一个任务执行I/O操作时,转去执行其他任务 2.并行 针对多核CPU&…

25届科大讯飞飞星计划 AI研究算法工程师 面经

目录 一面/技术面 2024/08/15 📋 总结: 本来应该是在7月底面试的,但因为有事就拖到了现在,或许是飞星计划里最晚面试的一批?面试官很和蔼,问的问题不算难,总体体验还算不错。 一面/技术面 2024/…

MySQL基础--逻辑存储结构,架构

逻辑存储结构 表空间(ibd 文件):一个 mysql 实例可以对应多个表空间,用于存储记录,索引等数据。 段:分为数据段,索引段,回滚段,InnoDB 是索引组织表,数据段就…

Unity引擎基础知识

目录 Unity基础知识概要 1. 创建工程 2. 工程目录介绍 3. Unity界面和五大面板 4. 游戏物体创建与操作 5. 场景和层管理 6. 组件系统 7. 脚本语言C# 8. 物理引擎和UI系统 学习资源推荐 Unity引擎中如何优化大型游戏项目的性能? Unity C#脚本语言的高级编…

修复 iPad 卡在准备更新或正在进行更新的问题

为什么iPad 更新卡住了?原因很难确定,因为 iPad 的许多故障和状况都可能导致 iPad 无法更新 iOS 和应用程序。此外,很难弄清楚这种情况持续了多长时间。但是,您不必太担心,因为这只是一个小案例,您可以阅读…

Java入门(上)

day01 - Java基础语法 1. 人机交互 1.1 什么是cmd? 就是在windows操作系统中,利用命令行的方式去操作计算机。 我们可以利用cmd命令去操作计算机,比如:打开文件,打开文件夹,创建文件夹等。 1.2 如何打…

单元训练13:串行接口的进阶应用

蓝桥杯,小蜜蜂,单元训练13:串行接口的进阶应用 /** Description:* Author: fdzhang* Email: zfdcqq.com* Date: 2024-08-17 15:41:34* LastEditTime: 2024-08-17 19:48:35* LastEditors: fdzhang*/ #include "stc15f2k60s2.h"#defi…

算法工程师第四十天(647. 回文子串 516.最长回文子序列 动态规划总结篇 )

参考文献 代码随想录 一、回文子串 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1: 输入:s "abc"…

MySQL 异步主从复制流程解析

前言: 首先MySQL主从复制方式有多种,包括 binlog、GTID等,这里基于 binlog 的形式,解析异步主从复制流程 首先通过下面命令查看全部 binlog 日志文件 show binary logs; binlog 日志文件如下: 然后查看其中一个文件…

ECMAScript6语法:默认参数和rest参数

1、默认参数 默认参数即在定义函数的参数列表中指定了默认值的参数。在 ES5 中,并没有提供在参数列表中指定参数默认值的语法,要想为函数的参数指定默认值,只能在函数体中实现,示例代码如下: function table(width, …

MBR10200FCT-ASEMI智能AI专用MBR10200FCT

编辑:ll MBR10200FCT-ASEMI智能AI专用MBR10200FCT 型号:MBR10200FCT 品牌:ASEMI 封装:TO-220F 批号:最新 最大平均正向电流(IF):10A 最大循环峰值反向电压(VRRM&a…

西安旅游系统--论文pf

TOC springboot383西安旅游系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现,改变了几千年以来人们的生活,不仅仅是生活物资的丰富,还有精神层次的丰富。在互联网诞生之前,地域位置往往是人们思想上不可跨域的鸿…

YOLOv8侦测任务更换主干网络成MobileNetV3

目录 1. 添加主干网络模块 ​编辑1.1 在init.py中添加模块名 1.2 主体代码中添加调用语句块 2. 配置yaml文件 3. 修改成功 1. 添加主干网络模块 1.1 在init.py中添加模块名 1.2 主体代码中添加调用语句块 2. 配置yaml文件 3. 修改成功 自己随便找一个程序跑一跑验证…

微电网控制器是什么?微电网中央控制器|微电网协调控制器|微电网控制系统图|Micon2505微网中央控制器方案介绍

微电网控制器是什么?微电网中央控制器|微电网协调控制器|微电网控制系统图|Micon2505微网中央控制器方案介绍及其在油田采油机场景中的应用。微电网控制器广泛应用于具备光伏,储能,V2G,充电桩,风电,柴油发电…

图解内存分配算法 -- 小内存分配算法

图解内存分配算法 – 小内存分配算法 文章目录 图解内存分配算法 -- 小内存分配算法1. 算法介绍2. 算法图解2.1 约定2.2 数据结构介绍2.3 初始化2.4 第一次 malloc 40字节2.5 第二次 malloc 18 字节2.6 第三次 malloc 20字节2.7 第四次 malloc 40字节2.8 第一次 free2.9 第二次…

LINUX服务器部署准备

文章目录 配置环境变量NODE下载解压安装 NGINX下载NGINX下载GCC并安装解压安装启动NGINX MAVEN下载解压安装配置环境 TOMCAT下载兼容版本解压安装开启远程访问 REDIS下载解压安装配置远程使用关闭保护模式 配置环境变量 vi /etc/profile source /etc/profile解压成功之后、运行…

安装IDEA2021.2.1(含安装包)及其扩展设置

一、下载 通过百度网盘分享的文件:ideaIU-2021.2.1.exe 链接:https://pan.baidu.com/s/1cCUHNm0dpWlfkxf5RCEgfw 提取码:v62e 二、安装 安装视频网址:Java基础概念-12-idea的概述和下载安装_哔哩哔哩_bilibili 三、idea中的第一…

Postman内置动态参数和自定义动态参数

业务场景 现在有两个接口,接口1:获取接口统一鉴权码token接口,接口2:创建标签接口,标签接口的创建依赖接口1返回的鉴权码,即需要获取access_token的值,替换ACCESS_TOKEN。且接口2中标签名不能和…

【计算机硬件内存】

内存插槽中间通常有个突起物将整个插槽稍微切分成为两个不等长的距离, 这样的设计可以让使用 者在安装内存时,不至于前后脚位安插错误,是一种防呆的设计喔。 前面提到CPU所使用的数据都是来自于内存(main memory)&…

Java流程控制04:while循环结构

教学视频链接:https://www.bilibili.com/video/BV12J41137hu?p38&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p38&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 在Java中,while 结构是一个…