【Godot4自学手册】第三十九节利用shader(着色器)给游戏添加一层雾气效果

devtools/2024/9/22 13:27:46/

今天,主要是利用shader游戏给地宫场景添加一层雾气效果,增加一下气氛,先看一下效果:
请添加图片描述

一、新建ParallaxBackground根节点

新建场景,根节点选择ParallaxBackground,命名为Fog,然后将该场景保存到Component文件夹下。ParallaxBackground 使用一个或多个 ParallaxLayer 子节点来创建视差效果。每个 ParallaxLayer 可以使用 ParallaxLayer.motion_offset 以不同的速度移动。这在 2D 游戏中可以创造一种深度错觉。如果没有与 Camera2D 一起使用,你必须手动计算 scroll_offset。
请添加图片描述

在其检查器面板中Scroll -> Ignore Camera Zoom属性勾选,表示该节点的子元素不受相机缩放的影响。Layer->Layer设置为2,表示该节点浮于其他节点之上。
请添加图片描述

二、添加ParallaxLayer子节点。

ParallaxLayer 必须是 ParallaxBackground 节点的子节点。每个 ParallaxLayer 都可以设置为相对于相机移动或 ParallaxBackground.scroll_offset 值。该节点的子节点将受其滚动偏移量的影响。
请添加图片描述

在其检查器窗口,将Motion->Mirroring设置为(320,180)。
给节点添加ColorRect子节点。
请添加图片描述

添加完该子节点后,主编辑器中会出现四个白色的矩形,如下的样子:
请添加图片描述

在ColorRect节点的检查器中,将size属性设置为(320,180),这样就会铺满整个屏幕,如下:
请添加图片描述

shader_23">三、给ColorRect节点添加shader材质。

在ColorRect节点属性面板中,找到CanvasItem -> Material->Material属性,单击后方的下拉菜单小箭头选择新建ShaderMaterial。
请添加图片描述

选中刚才新建的ShaderMaterial,然后单击其Shader属性后方的下拉菜单小箭头选择新建新建着色器
请添加图片描述

在弹出的创建着色器对话框中,类型选择Shader;模式选择Canvas Item(表示2D游戏着色器);路径选择Component文件夹下,其他不变,单击创建。
请添加图片描述

这样就可以在着色器编辑器中编辑代码了。
请添加图片描述

四、编写着色器(Shader)代码

shader_type canvas_item;
//噪声纹理
//uniform用于逻辑语言(GDScript/C#等)和着色器之间传递数据。
//注意:这个传递是单向的,即只能由逻辑语言传给着色器,反之不行。
uniform sampler2D noise_teture:repeat_enable,filter_nearest;
//设置云层透明度,值越接近1越不透明
uniform float density:hint_range(0.0, 1.0, 0.1)=0.25;
//云层移动速度
uniform vec2 speed = vec2(0.02,0.01);
void fragment() {//设置云层移动vec2 uv = UV + speed * TIME;//从噪声纹理采样float noise = texture(noise_teture,uv).r;//将噪声的范围(0.0,1.0)范围调整到(-1.0,1.0)float fog = noise*2.0-1.0;//将范围在调整回(0.0,1.0)目的是不是云层的地方变为透明fog = clamp(fog,0.0,1.0);//应用薄雾效果COLOR.a *=fog*density;
}

uniform的定义表示传递给着色器参数,定义的noise_teture为传入的纹理,定义完成后会在检查器面板出现该参数
请添加图片描述

单击noise_teture后方的下拉按钮选择新建NoiseTexture2D选项。
请添加图片描述

对其属性进行设置:width:320;Hieght:180;Seamless启用,表示该纹理可以无缝衔接;seamless_blend_skirt设置为0.75,表示接缝混合的距离;Noise选择新建FastNoiseLite。
请添加图片描述

FastNoiseLite的Frequeny属性设置为0.0075,表示噪声的频率,值越大产出的噪声越粗糙,颗粒越大。
请添加图片描述

这样就完成了。

五、underground引入薄雾

进入underground场景,单击实例化子场景,将我们刚才新建的场景实例化到underground场景。
请添加图片描述

这样我们的地宫就有了雾气效果。如下:
请添加图片描述


http://www.ppmy.cn/devtools/7387.html

相关文章

初识ansible变量及实例配置

目录 1、为什么要使用变量 2、变量分类 3、 变量详解 3.1 vars,vars_files , group_vars 3.1 .1 vars 剧本中定义变量 3.1.2 vars_file 将变量存放到一个文件中,并在剧本中引用 3.1.3 group_vars 创建一个变量文件给某个组使用 实例1-根据不同的主机…

Cyber Weekly #3

赛博新闻 1、Meta发布最强开源模型Llama3[1] 4月19日凌晨,Meta Llama 3发布,模型包含8B和70B两种参数规模(400B还在训练中),Llama 3使用了超过 15T token的训练数据,8B版本数据更新截止至2023年3月&#…

SpringBoot3 + Kotlin + mybatis-plus + Swagger3后端开发样例

前言: Kotlin 是一种在 JVM(Java 虚拟机)、Android 和浏览器端运行的静态类型编程语言。以下是关于 Kotlin 的总结介绍: 1、语言特性: 简洁性:Kotlin 旨在提供简洁且安全的代码,同时保持与 Jav…

Json三方库介绍

目录 Json是干什么的Json序列化代码Json反序列化代码 Json是干什么的 Json是一种轻量级的数据交换格式,也叫做数据序列化方式。Json完全独立于编程语言的文本格式来存储和表述数据。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升…

逆向IDA中Dword,数据提取

我们可以看见数据是这样的&#xff0c;第一个是1cc 但是我们shifte就是 这个因为他的数据太大了&#xff0c;导致高位跑后面去了 这个时候&#xff0c;我们右键——convert——dword 这样就可以提取到争取的数据了 比如第一个数据 0x1cc a0xcc b0x1 print(hex((b<<8…

java设计模式之策略模式实操

一、背景 临床服务项目流向规则匹配&#xff0c;比如说医生开一个“CT”检查&#xff0c;该检查应该由哪个科室来执行&#xff0c;是通过流向规则配置来决定的&#xff0c;具体配置如下图&#xff1a; 通过相关的条件匹配&#xff0c;最终找到流向科室。 二、设计思路 有几个注…

【PyTorch】1-基础知识(张量、导数、CUDA)

PyTorch&#xff1a;1-基础知识 注&#xff1a;所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/)&#xff0c;下文仅为学习记录 1.1&#xff1a;张量 神经网络核心包&#xff1a;autograd&#xff08;自动微分&#xff09; 张量…

在线拍卖系统,基于SpringBoot+Vue+MySql开发的在线拍卖系统设计和实现

目录 一. 系统介绍 二. 功能模块 2.1. 管理员功能模块 2.2. 用户功能模块 2.3. 前台首页功能模块 2.4. 部分代码实现 一. 系统介绍 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系…