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

ops/2024/9/22 13:27:42/

今天,主要是利用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/ops/7599.html

相关文章

第一章Hadoop概述

1. Hadoop是什么 Hadoop是一个由Apache基金会所开发的分布式系统基础架构。主要解决,海量数据的存储和海量数据的分析计算问题。广义上来说,Hadoop通常是指一个更广泛的概念--Hadoop生态圈 2. Hadoop发展历史(了解) Hadoop创始人…

Hive笔记

HIVE介绍 Hive是什么 Hive 是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL ),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询…

for循环的用法

for循环的用法 for 循环是一种在 Python 中用于迭代序列(如列表、元组或字符串)或其他可迭代对象的循环结构。下面是一些常见的 for 循环用法: 遍历列表:使用 for 循环遍历列表中的元素。 fruits ["apple", "b…

【讲解下Spring Boot单元测试】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

nlp(6)--构建找规律模型任务

前言 仅记录学习过程,有问题欢迎讨论 包含了两个例子 第一个为5分类任务 第二个为2分类任务 Demo1比Demo2难一点,放上边方便以后看。 练习顺序为 Demo2—>Demo1 代码 DEMO1: """ 自定义一个模型 解决 5分类问题 问题如下&#xf…

Git merge的版本冲突实验

实验目的 发现 两个分支的 相同文件 怎样被修改 才会发生冲突? 实验过程 1.初始状态 现在目前有1.py、2.py两个文件,已经被git管理。现在我想制造冲突,看怎样的修改会发生冲突,先看怎么不会发生冲突。 目前仓库里的版本是这样…

Spark---RDD的创建分类和基础操作算子详解

一、RDD的创建 原生api提供了两种创建方式,一种就是读取文件textFile,还有一种就是加载一个scala集合parallelize。当然,也可以通过transformation算子来创建的RDD。 //创建RDD//加载数据,textFile(参数1,…

开发语言漫谈-SQL

SQL是另一个门类的开发语言,是专用于结构化数据库操作的专用语言。SQL不可能单独开发系统,但是做数据库方面的系统不懂SQL也不行。市面上很大部分开发岗位(后台)都是要和数据库打交道的,所以SQL必须掌握。 好消息是&am…