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

今天,主要是利用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),这样就会铺满整个屏幕,如下:
请添加图片描述

三、给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.mzph.cn/bicheng/1253.shtml

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

相关文章

不要小看在线文档编辑工具,它才是提高工作效率的法宝

在数字化的今天,工作方式正变得越来越灵活,远程办公和团队协作已成日常。这个时候,传统的文档处理方式已经无法满足快速发展的业务需求。在线文档编辑工具,正逐渐成为提高团队工作效率的秘密武器。它能够让团队成员无论身处何地&a…

从预训练损失的角度,理解语言模型的涌现能力

原文:Understanding Emergent Abilities of Language Models from the Loss Perspective 摘要 本文从预训练损失的角度重新审视语言模型的涌现能力,挑战了以往以模型大小或训练计算量为标准的观念。通过实验,作者发现预训练损失是预测下游任…

【剪映专业版】15绿幕抠图:应用技巧、注意事项

视频课程:B站有知公开课【剪映电脑版教程】 1.绿幕抠图 背景为绿色的素材(其他颜色也可以扣取,只是绿色背景更普遍、抠图效果更好) 选择色度抠图,通过取色器选取背景颜色,调整强度实现抠图 剪映的色度抠…

使用Python Tkinter创建文件生成工具

我们将使用Python的Tkinter模块创建一个简单的文件生成工具。这个工具可以用来创建Excel、文本、Python脚本和Word文档等不同类型的文件。 1、准备工作 首先,确保你已经安装了Python和所需的第三方库:Tkinter、openpyxl和python-docx。你可以使用pip来…

python项目练习——30.俄罗斯方块

游戏初始化: 设置游戏窗口的大小和标题。创建游戏区域和方块的初始状态。初始化游戏得分和级别。游戏主循环: 不断监听用户的输入,控制方块的移动、旋转和下落。在游戏区域中逐帧显示方块的位置和状态。检测方块是否触底或与其他方块重叠,如果是,则生成新的方块。方块的移…

【软件测试】通过决策表例题学会使用决策表

【软件测试】通过决策表例题学会使用决策表 例题1答案 例题2答案 例题1 有一个程序可以计算某年某月有多少天,请依照决策表测试技术产生测试用例。 要求: 1.每个条件的取值有多种选择,而不再是简单的Yes/No。 2. 需要写出合并后的决策表 3.…

“我舍不得”用英语怎么说?柯桥日常英语口语培训

“我舍不得”用英语怎么说? “舍不得”的英文表达是:Cant bear to 不忍心,不舍得 例句: Time flies. I cant bear to leave you. 时间过的好快啊,我真舍不得离开你。 I cant bear to see you cry. 我真舍不得你…

《QT实用小工具·三十四》Qt/QML使用WebEngine展示的百度ECharts图表Demo

1、概述 源码放在文章末尾 该项目实现了百度ECharts图表的样式&#xff0c;效果demo如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QtWebEngine>int main(int argc, ch…

小成本搏大流量:微信/支付宝小程序搜索排名优化

随着移动互联网的快速发展&#xff0c;小程序已成为企业和个人开发者重要的流量入口和业务承载平台。而小程序搜索排名则是影响小程序曝光量、用户获取及业务转化的关键因素。小柚在本文和大家探讨如何制定有效的优化方案&#xff0c;提升小程序在搜索结果中的排名。 首先跟我…

基于docker的Jenkin的服务平台搭建

项目拓扑图 项目环境: jenkins-2.440 sonarqube-9.9.4 apache-maven-3.9.6 gitlab-ce-12.4.2 java17 docker20 harbor.v2.6.0 centos7.9 项目目的: 模拟企业构建一个流行的持续集成和持续部署环境,可以更轻松地创建和管理构建环境&#xff0c;实现自动化构建和部署应用程序的…

Week7-LeetCode

2923.找到冠军(简单) 法1&#xff1a; class Solution:def findChampion(self, grid: List[List[int]]) -> int:Winner 0n len(grid)loser [0 for _ in range(n)] for i in range(n):for j in range(n):if grid[i][j] 1 and i ! j:loser[j] 1for index in range(n):i…

Ubuntu 微调训练ChatGLM3大语言模型

Ubuntu 微调训练ChatGLM3大语言模型 LLaMA Factory 的 LoRA 微调提供了 3.7 倍的加速比&#xff0c;同时在广告文案生成任务上取得了更高的 Rouge 分数。结合 4 比特量化技术&#xff0c;LLaMA Factory 的 QLoRA 微调进一步降低了 GPU 显存消耗。 https://github.com/hiyouga…

累加(C语言)

一、题目&#xff1b; 二、N-S流程图&#xff1b; 三、运行结果&#xff1b; 四、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;int j 0;int n 5;int result 0;int sum 0;//运算&#…

在 AOSP / Android 类原生系统上解决 Wifi 连接警告问题

自 Android 5.0 起&#xff0c;谷歌引入了Captive Portal的机制&#xff0c;用于检测 WiFi网络认证是否正常。由于众所周知的原因&#xff0c;我们在中国大陆并无法访问谷歌的网络&#xff0c;这在某些情况下会导致一些问题&#xff0c;例如&#xff1a;在中国大陆使用一些类原…

数据挖掘与数据分析

目录 数据挖掘与数据分析 一&#xff0e;数据的本质 二&#xff0e;什么是数据挖掘和数据分析 三&#xff0e;数据挖掘和数据分析有什么区别 案例及应用 1. 基于分类模型的案例 2. 基于预测模型的案例 3. 基于关联分析的案例 4. 基于聚类分析的案例 5. 基于异常值分析…

牛客-小乐乐与欧几里得

目录 题目 描述 输入描述&#xff1a; 输出描述&#xff1a; 示例1 示例2 解题 题目 描述 小乐乐最近在课上学习了如何求两个正整数的最大公约数与最小公倍数&#xff0c;但是他竟然不会求两个正整数的最大公约数与最小公倍数之和&#xff0c;请你帮助他解决这个问题。 …

进程控制第二弹(进程程序替换)

文章目录 代码现象基本原理多进程版本实例基本原理 使用所有的替换方法&#xff0c;并且认识函数的参数含义execlexecvexeclp、execvpexecvpe 总结 代码现象 #include<stdio.h> #include<unistd.h> int main() { printf("testexec begin! ...\…

数据安全全面防护

what 通过采用各种有效技术和管理措施来保护网络系统的正常运行&#xff0c;从而保证数据的可用性&#xff0c;机密性&#xff0c;完整性。 ---网络安全防护体系建设三同步--规划 建设 运行 数据安全的三大基本特征 可用性 数据在需要时可用且可访问&#xff0c;为实现可用…

学习JavaEE的日子 Day39 注解,反射

Day39 注解 1.什么是注解 理解&#xff1a;给程序员和程序解释代码信息 2.注解与注释的区别 注释&#xff1a;对程序员解释代码信息 注解&#xff1a;对程序和程序员解释代码信息 3.注解的所用 可以作用于包、类、方法、属性上&#xff0c;给他们添加额外的信息&#xff0c;可…

Fastadmin解决异步高并发大并发阻塞超时问题

官方连接​​​​​​https://guzzle-cn.readthedocs.io/zh_CN/latest/quickstart.html?highlightgetasync 使用guzzle 实现&#xff0c;需要先引用。安装请自行解决。 use GuzzleHttp\Client; use GuzzleHttp\Promise; /*** 异步高并发请求*/public function asyncRequests…