Unity Shader

练习项目链接

1. Shader 介绍

Shader其实就是专门用来渲染图形的一段代码,通过shader,可以自定义显卡渲染画面的算法,使画面达到我们想要的效果。小到每一个像素点,大到整个屏幕,比如下面这个比较常见的效果。

2. Shader Graph介绍

Shader Graph 能够帮助直观地构建着色器,可以在图形框架中创建并连接节点,而不必手写代码。Shader Graph 提供了能反映所作更改的即时反馈,对于不熟悉着色器创建的用户来说非常简单。

创建新的 Shader Graph 资源。右键单击 Project 窗口,在上下文菜单中找到 Create > Shader,然后选择所需的 Shader Graph 类型。

2.1 Shader Graph 窗口

Shader Graph 窗口包含 Master Stack(主栈)、Preview 窗口、Blackboard 和 Graph Inspector。

主栈

主栈是 Shader Graph 的终点,用于定义着色器的最终表面外观。Shader Graph 应始终包含一个且仅包含一个主栈。 主栈包含两个上下文:Vertex 和 Fragment。分别代表着色器的两个阶段。连接到 Vertex Context 中的 Block 的任何节点都将成为最终着色器的顶点函数的一部分。连接到 Fragment Context 中的 Block 的任何节点都将成为最终着色器的片元(或像素)函数的一部分。如果您将任何节点连接到两个上下文,它们将被执行两次,一次在顶点函数中,然后在片元函数中再次执行。上下文不能剪切、复制或粘贴。

Preview 窗口

预览当前着色器输出的区域。在这里,您可以旋转对象,并放大和缩小。您还可以更改预览着色器的基本网格。

Blackboard

该区域在单个视图中汇总所有着色器属性。使用 Blackboard 可对属性进行添加、删除、重命名和重新排序

Internal Inspector

包含与用户当前单击的任何内容关联的信息的区域。这是一个默认情况下自动隐藏的窗口,仅在用户选择可以编辑的内容时才会出现。使用 Internal Inspector 来显示和修改属性、节点选项和图形设置。

2.2 窗口实例

练习在图表中移动:
  • 平移:单击鼠标中键并拖动,或者按住 Alt (Windows) 或 Option (macOS) 并单击并拖动。
  • 缩放:旋转滚轮或使用触控板缩放。
  • 聚焦并放大:选择一个元素并按 F键。
  • 适合窗口:A键。

3. 练习项目 - 程序噪声图Shader

生成程序噪声图(Procedure Noise)shader图像,使得噪声贴图的程序纹理提供闪烁效果的变化

3.1 新建一个shader graph

1. Project窗口,在Assets目录下点击ShaderGraphs目录,在右侧的窗口中点击鼠标右键,弹出的菜单中选择 Create > Shader Graph > URP > Lit Shader Graph,新建一个机遇URP的 lite shader graph,取名 newShimmer

2. 双击newShimmer,打开Shader Graph窗口,里面工作区空间只有上述2.1中介绍的4个窗口内容

 3. 在空的工作区域内,按空格键或者点击鼠标右键,在弹出菜单中选择 Create Node

4. 在顶部的搜索输入输入“Gradient Noise“,梯度噪声节点将出现在结果中。双击将其选中

  

5. 在空的工作区域内,按空格键或者点击鼠标右键,在弹出菜单中选择 Create Node,顶部的搜索输入输入“Tiling And Offset“,双击将其选中该节点,在工作区中新建了该节点,将该节点的Out(2)连接 Gradient Noise 节点的 UV(2),即平铺和偏移中输入的值将影响渐变噪声。

6. 将Gradient Noise 节点的 Out(1)连接 主栈的Fragment中Base Color(3), 可以在Main Preview中看到噪声的平铺和偏移效果图。但是该效果图是静止图案,不是移动的,需要让图案随着时间而变换,产生闪烁的效果

7.仿照步骤 5, 在工作区内新建一个 Time 节点,允许随时间更新值,“Time”节点的“Time(1)”输出拖动到“Tilling And Offset”节点上的“Offset(2)”输入, 这时Main Preview中噪声纹理现在已动画化!

3.2 设置速度变量

8. 为了方便更改shader,需要在Blackboard中创建参,例如更新上述时间节点的取值,使得动画效果可以更快或更慢。 选择Blackboard上的 加号 ( + ) 按钮,然后选择“Float”以创建新的 float(浮点值)输入节点。将其命名为“ScrollSpeed”。使用此输入节点,艺术家可以通过在材质中输入浮点数来调整速度。

9. 将“ScrollSpeed”节点拖到工作区中,同时仿照步骤 5 在工作区新建一个Multiply 节点。新建该节点的原因是Time 节点上没有输入槽,因此需要采用不同的方式来组合 Time 和 ScrollSpeed 值。为此,创建一个Multiply 节点,组合两个值的简单方法。它需要两个值,将它们相乘,然后输出结果

10. 通过选择连接器并将其删除,断开Time、Tiling And Offset节点的连接, 将 Time 和 ScrollSpeed 节点的输出连接到 Multiply 节点的输入,再将乘法输出连接到Tiling And Offset输入.

11. 此时Main Preview中显示的噪声还没有运动起来,是因为ScrollSpeed的默认值是 0. 点击ScrollSpeed节点,在右侧的 Graph Inspector窗口将Defult值从 0 改为 0.4,这是Main Preview中显示的噪声图就闪烁起来了。

3.3 设置两个噪声图

12. 在工作区中选择Multiply, Tiling And Offset, Gradient Noise三个节点,右击鼠标,在弹出菜单中选择 Duplicate 选项,将三个节点复制,该三个新复制节点之间会自动连接,同时新的 Mulitplay 节点与原先的 ScrollSpeed 和 Time 节点也保持连接。此时点击左上角的 Save Asset,保存所有的操作。

13. 仿照步骤 5 新建一个 Divide 节点,该节点将时间减半,控制新的Gradient Noise中的图像闪烁速度减半,按照下图连接Time 与 Divide 与 Multiply 的节点

14. 仿照步骤 5 新建一个 Multiply 节点,将两个Gradient Noise的图像组合后在输入到 Fragment的 Base Color中,实现两个噪声图的融合。

15. 选择如下图中的节点,再点击鼠标右键,在弹出菜单中选择Group Selection,新建一个组,命名为 “Changing Offset over Time”.

3.4 设置放缩变量

16. 点击左侧blackboard中的 “+”,新建一个“GradientScales” 的 float 变量,该变量用来改变噪声图的放缩变化,并在右侧 Graph Inspector 窗口将默认值从0 改为 10,然后将该变量拖到工作区

   

17. 为了对两幅噪声图的放缩不同比例,增添一个新的 Divide 节点,实现如下连接

3.5 设置噪声灰度对比变量

利用 Remap 节点将黑白色素强度对比从 0-1范围变为更小的范围(例如 0.2 - 0.6),是的图像中灰度点变多

18. 仿照步骤 16,在左侧blackboard 中增加一个 Vector2 变量 “RemapValues”,并将该变量拖到工作区中,并在右侧Graph Inspector中将Y值从 0 改为 1

     

19.仿照步骤 5,在工作区中新建一个 Remap 节点,将合并噪声图的 Multiply、RemapValues、Remap 实现下图连接,将 Remap 节点中的 In Min Max 设置为 0 和 1,这样与初始黑白色素强度对应,后续可以在unity editor界面改变这个范围,实现灰度的调控。

3.6 设置噪声颜色变量

自我练习

20. 仿照上述3.5步骤,新增一个 Color变量,取名“TintColor”,将其Mode 改为 HDR,选择一个鲜艳颜色,如红色。

21. 再新增一个 Multiply 节点,实现如下节点连接,连接完成后,将3.5 和 3.6 新增的节点组成一个组 group,设置名称为 “Intensity and Color”。

3.7 设置透明度

22. 连接上图中Multiply 的output到右侧 Fragment 的 Base Color 和 Emmission 输入

23. 选择 Fragment,在 Graph Inspector 的Graph Settings中,设置Surface Type为 Transparent,此时 Alpha 输入将会显示

24. 连接 Remap 的output 到这个新显示的 alpha

3.8 增加 Metallic 和 Smoothness 变量

25. 仿照步骤 16 在blackboard中新增两个 float 变量 Metallic 和 Smoothness,将其拖到工作区,直接连接 fragment 的Metalic 和 smoothness 输入

26. 点解左上角的 Save Asset,保存上述所有修改,退出 Shader Graph 窗口

3.9 应用 Shader材质

27. 在Unity Editor 界面的 Project 窗口,在 Assets > CreativeCore_Shaders > Materials 目录下,在右侧窗口右击鼠标,在弹出菜单中选择 Create > Material, 命名新的材质为 “Shimmer”.

28. 在右侧 Inspector窗口,设置其shader 为 Shader Graphs/newShimmer

29. 复制场景中的一个球 Sphere,将球放到中间的空桌子上,将新建的Shimmer材质代替原有的材质,如图所示

30. 可以通过改变shimmer材质的Surface Input,查看不同的材质效果,例如改变颜色等

shader graphs练习:Shader Graphs

Shader flag Make a Flag Wave with Shadergraph - Unity LearnIn this project, you will learn how to create a shader to make a flag wave utilizing the Time, Sine and UV nodes to give the flag a wave effect.icon-default.png?t=N7T8https://learn.unity.com/project/make-a-flag-move-with-shadergraph

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

javaSwing宿舍管理系统(三个角色)

一、 简介 宿舍管理系统是一个针对学校宿舍管理的软件系统,旨在方便学生、宿管和管理员进行宿舍信息管理、学生信息管理以及宿舍评比等操作。该系统使用 Java Swing 进行界面设计,分为三个角色:管理员、宿管和学生。 二、 功能模块 2.1 管…

RK3568平台 iperf3测试网络性能

一.iperf3简介 iperf是一款开源的网络性能测试工具,主要用于测量TCP和UDP带宽性能。它可以在不同的操作系统上运行,包括Windows、Linux、macOS等。iperf具有简单易用、功能强大、高度可配置等特点,广泛应用于网络性能测试、网络故障诊断和网…

深度学习绘制热力图heatmap、使模型具有可解释性

思路 获取想要解释的那一层的特征图,然后根据特征图梯度计算出权重值,加在原图上面。 Demo 加上类激活(cam) 可以看到,cam将模型认为有利于分类的特征标注了出来。 下面以ResNet50为例: Trick: 使用 for i in model._modules.items():可以…

二十三 超级数据查看器 讲解稿 设置

二十三 超级数据查看器 讲解稿 设置 ​点击此处 以新页面 打开B站 播放当前教学视频 点击访问app下载页面 百度手机助手 下载地址 大家好,这节课我们讲一下,超级数据查看器的设置功能。 首先,我们打开超级数据查看器, 我…

2023年全国青少年信息素养大赛(python)初赛真题

选择题(每题5分,共20题,满分100分) 1、关于列表的索引,下列说法正确的是? A.列表的索引从0开始 B.列表的索引从1开始 C.列表中可能存在两个元素的索引一致 D&#xff0…

第四百一十九回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义标题栏"相关的内容,本章回中将介绍自定义Action菜单.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在这里提到的…

web自动化3-pytest前后置夹具

一、pytest前后置(夹具)-fixture 夹具的作用:在用例执行之前和之后,需要做的准备工作和收尾工作。 用于固定测试环境,以及清理回收资源。 举个例子:访问一个被测页面-登录页面,执行测试用例过…

SpringCloud-Gateway服务网关

一、网关介绍 1. 为什么需要网关 Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的核心功能特性: 请求路由 权限控制 限流 架构图: 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格&am…

算法-双指针

目录 1、双指针遍历分割:避免开空间,原地处理 2、快慢指针:循环条件下的判断 3、左右指针(对撞指针):分析具有单调性,避免重复计算 双指针又分为双指针遍历分割,快慢指针和左右指针 1、双指…

深度学习 tablent表格识别实践记录

下载代码:https://github.com/asagar60/TableNet-pytorch 下载模型:https://drive.usercontent.google.com/download?id13eDDMHbxHaeBbkIsQ7RSgyaf6DSx9io1&exportdownload&confirmt&uuid1bf2e85f-5a4f-4ce8-976c-395d865a3c37 原理&#…

C# 将 Word 转文本存储到数据库并进行管理

目录 功能需求 范例运行环境 设计数据表 关键代码 组件库引入 Word文件内容转文本 上传及保存举例 得到文件Byte[]数据方法 查询并下载Word文件 总结 功能需求 将 WORD 文件的二进制信息存储到数据库里,即方便了统一管理文件,又可以实行权限控…

查看文件内容的指令:cat,tac,nl,more,less,head,tail,写入文件:echo

目录 cat 介绍 输入重定向 选项 -b -n -s tac 介绍 输入重定向 nl 介绍 示例 more 介绍 选项 less 介绍 搜索文本 选项 head 介绍 示例 选项 -n tail 介绍 示例 选项 echo 介绍 输出重定向 追加重定向 cat 介绍 将标准输入(键盘输入)的内容打…

【微服务】Gateway服务网关

📝个人主页:五敷有你 🔥系列专栏:微服务 ⛺️稳中求进,晒太阳 Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响…

单目深度估计基础理论和论文学习总结

单目深度估计基础理论和论文学习总结 一、背景知识: 三维刚体运动的数学表示:旋转平移矩阵、旋转向量、欧拉角、四元数、轴角模型、齐次坐标、各种变换等 照相机模型:单目/双目模型,单目中的世界坐标系/相机坐标系/图像坐标系的…

MySQL表的增删改查---多表查询和联合查询

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

保研复习概率论1

1.什么是随机试验(random trial)? 如果一个试验满足试验可以在相同的条件下重复进行、试验所有可能结果明确可知(或者是可知这个范围)、每一次试验前会出现哪个结果事先并不确定,那么试验称为随机试验。 …

ssm+vue的消防物资存储系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频: ssmvue的消防物资存储系统(有报告)。Javaee项目,ssm vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

PyQT5学习--新建窗体模板

目录 1 Dialog 2 Main Window 3 Widget Dialog 模板,基于 QDialog 类的窗体,具有一般对话框的特性,如可以模态显示、具有返回值等。 Main Window 模板,基于 QMainWindow 类的窗体,具有主窗口的特性,窗口…

重生奇迹mu弓箭手技能

1、弓箭手职业技能:多重箭:同时射出三发弓箭,给予复数敌人伤害,根据弓的不同,射出的数量也不同。天堂之箭:弓箭垂直射向天际,准确的落在敌人的头顶上,造成严重的伤害。 2、连技技能…

动态规划之数字三角形模型

题目:1015. 摘花生 思路 很经典的动态规划问题。 定义:v[i][j]表示位置是i,j的花生数量,f[i][j]表示走到位置i,j所能获得的最大花生数量。初始状态:f[1][1],目标状态:f[n][m]状态转移:由于题目规定只能向…