Shader Graph(一)基本使用

news2025/1/10 16:41:38

一、如何使用Shader Graph

1.1 新建项目

通过创建URP或HDRP模板项目,可以自动配置好Shader Graph。

1.2 已有项目

在「Package Manager」中安装「Shader Graph」及URP或HDRP组件。然后在弹出的渲染管线向导面板中点击「Fix All」即可。如果项目中存在已经创建好的材质,则需要在向导面板最下方将项目的材质升级到对应的渲染管线。

二、创建第一个Shader Graph

下面来编写我们的第一个Shader Graph。首先在目录中右键「Create -> Shader Graph -> HDRP -> Lit Shader Graph」创建一个新的Shader Graph。

然后双击打开,就可以看到Shader Graph的编辑界面

接下来在空白处右键「Create Node」创建一个节点,并选择「Input -> Basic -> Color」。

创建完成后会出现如下所示的节点

我们需要将它的输出连接到片元着色器的输入上

然后点击左上角的「Save Asset」,第一个Shader Graph就编写好了。接下来创建一个材质球,并应用我们刚才创建的Shader Graph。然后把材质挂载到场景中的物体上,效果如下

如果我们想改变物体的颜色,需要在Shader Graph编辑器中手动修改Color节点

这样显然很不方便。为了能直接在Inspector面板中随时更改物体的颜色,我们需要在左侧的面板中新建一个Color类型的变量,然后拖拽到编辑器中,并将其连接到片元着色器的输入端

保存Shader Graph。然后我们就能在材质的Inspector面板上手动调整颜色了

三、顶点着色器

3.1 改变顶点位置

我们知道顶点着色器的作用之一是将本地坐标下的顶点变换到裁剪空间。所以如果在顶点着色器中,对其位置信息进行修改,那么最终渲染出的顶点位置也会相应的发生变化。

比如我们在Shader Graph中创建一个「Position」节点用来接收物体本地坐标下的顶点坐标,然后再添加一个「Add」节点,对顶点坐标的Z轴进行修改,最后再将结果传入Vertex

就可以看到如下效果。渲染的物体在Z轴上产生了偏移。

3.2 动态改变顶点位置

上面这种偏移是固定的,如果我们想让物体随时间动态地进行偏移又该如何实现呢?其实Unity在Shader Graph中提供了「Time」这种节点

它的输出值就是自场景加载开始经过的时间,以及该时间的一系列三角函数值。这里我们要使用到「Sine Time」。因为正弦函数值是相对原点往复变化的,所以通过正弦值改变物体的偏移值正好能够实现往复运动的效果。接下来就是将「Time」的输出值加到顶点的位置信息中。这里仍然是加到Z轴上

效果如下

如果在编译器模式下看不到运动效果,可以打开编译器模式下的「Always Refresh」选项

接下来加大难度。虽然我们在前面实现了顶点的动态移动效果,但只是整体上对所有的顶点进行移动。如果让所有的顶点错开进行移动,就可以更加柔软的效果。

为了实现这一效果,我们就不能对所有的顶点增加同样的偏移值,而是根据顶点的位置确定不同的偏移值。具体的做法是将顶点位置的X值与时间值相加后再取正弦值,然后再增加到Z轴上。

效果如下

四、片元着色器

4.1 改变片元颜色

片元着色器主要的作用是计算片元的颜色值。我们可以通过改变Fragment下的Base Color来改变物体最终渲染的颜色

效果如下

如果想让颜色多一些变化,可以根据法线的方向来决定最终的颜色值

效果如下

可以发现有一部分区域是黑色,这是因为法线各分量的取值范围为[-1,1],而颜色各分量的取值范围为[0,1],小于0的部分按0取值。所以法线的各个分量都小于0时,就会取到黑色。解决方法也很简单,只需要对法线向量n*0.5+0.5,即可将法线向量的取值范围映射到[0,1]。

效果如下

4.2 光照模型

接下来我们尝试使用Shader Graph实现一个之前学过的光照模型——半兰伯特模型的效果。

首先创建一个「Unlit Shader Graph」,这是一种不考虑场景光照的Shader。我们可以通过自己定义的变量模拟光照效果。创建如下变量:DiffuseColor(材质颜色)、DIrectionLightVector(平行光方向)、DirectionLightColor(平行光颜色)、DirectionLightIntensity(平行光强度)。然后根据半兰伯特模型的公式
c d i f f u s e = ( c l i g h t ⋅ m d i f f u s e ) ( 0.5 ( n ⋅ l ) + 0.5 ) c_{diffuse}=(c_{light}·m_{diffuse})(0.5(n·l)+0.5) cdiffuse=(clightmdiffuse)(0.5(nl)+0.5)
形成如下连线

效果如下

五、参考资料

[1]. https://www.sikiedu.com/course/907/

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

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

相关文章

three.js实战-Sprite实现标签效果

1. demo效果 2 .什么是精灵(Sprite) 按照Three.js官网的解释是:精灵是一个总是面朝着摄像机的平面,通常含有使用一个半透明的纹理。精灵不会投射任何阴影,即使设置了也将不会有任何效果。 3. 代码大致逻辑 创建一个canvas对象,首先调用ctx…

密码学_DES加密算法

目录 DES(Data Encryption Standard) IP置换: E盒扩展 S盒压缩 P盒置换 K密钥生成 PC-1置换表(通常用此表): PC-2置换表(通常用此表): IP-1逆置换表 DES&#x…

MyBatis的SQL执行结果和客户端执行结果不一致问题排查

MyBatis的SQL执行结果和客户端执行结果不一致问题排查问题引入测试表、测试数据问题介绍排查问题调试 MyBatis源码JDBC 执行 SQL解决问题待解决问题最近遇到一个调试很久的问题,MyBatis 查询 Oracle 数据库查询结果与在客户端查询结果不一致。 问题引入 测试表、测…

自动化审批流程有哪些?使用中的优点是什么

自动化审批对HR管理有多重要呢?相信每一位HR都会希望让审批流程实现自动化,从而释放更多的时间去处理更加复杂的工作。 在人力资源管理过程中,自动化审批可以有效帮助HR提高流程效率。当管理人员每天收到很多审批请求之后,如果不…

AVS3中的AMVR和EMVR

在AVS2中运动预测中使用的MV都是1/4像素精度,通过在整像素间插值能显著提升非整像素运动预测的精度,同时带来的问题是随着MV精度的提高编码MVD所需的比特数也会增加。 AMVR AMVR支持的MVD编码5种精度的MVR{1/4,1/2,1,2,4},索引为0到4&#x…

IU5706 外置MOS、33V输出大功率同步升压芯片产品介绍

概要 IU5706E是高性能宽输入范围(4.5V~24V)同步升压控制器,支持高达33V的输出电压。输出电压采用恒定频率电流模式脉宽调制(PWM)控制来实现调节。 芯片通过外部定时电阻器或通过与外部时钟信号同步来设置开关频率。在电…

PGL 系列(五)DeepWalk

DeepWalk 通过随机游走(truncated random walk)学习出一个网络的表示,在网络标注顶点很少的情况也能得到比较好的效果。随机游走起始于选定的节点,然后从当前节点移至随机邻居,并执行一定的步数,该方法大致可分为四个步骤: (a) 展示了原始的用户行为序列。(b) 基于这些用…

Redis架构 - Sentinel哨兵模式

简介 Redis Sentinel是Redis官方提供的一个高可用方案。是一种用于监控、提醒和自动故障转移的系统。它可以监控多个Redis实例,并在主服务器出现故障时执行故障转移,将从服务器升级为主服务器。 在Sentinel模式下,可以设置多个Sentinel实例…

6.1 函数基础

文章目录编写函数调用函数形参和实参函数的形参列表函数的返回类型局部对象自动对象局部静态对象函数声明在头文件中进行函数的声明分离式编译编译和链接多个源文件一个典型的函数 定义包括以下部分:返回类型、函数名字、由0个或多个形参组成的 列表以及函数体。其中&#xff0…

数据库,计算机网络、操作系统刷题笔记20

数据库,计算机网络、操作系统刷题笔记20 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle…

第三十章 数论——扩展中国剩余定理

第三十章 数论——扩展中国剩余定理一、中国剩余定理的弊端二、扩展中国剩余定理1、作用2、内容3、问题4、代码一、中国剩余定理的弊端 在第二十九章中,作者详细地讲解了中国剩余定理的使用,在开始本章节的讲解之前,建议读者先去看上一章节的…

Tensorflow2 图像分类-Flowers数据深度学习模型保存、读取、参数查看和图像预测

目录 1.原文完整代码 1.1 模型运行参数总结 1.2模型训练效果 ​编辑2.模型的保存 3.读取模型model 4.使用模型进行图片预测 5.补充 如何查看保存模型参数 5.1 model_weights 5.2 optimizer_weights 使用之前一篇代码: 原文链接:Tensorflow2 图像分…

English Learning - L1-7 介词 2022.12.26 周一

English Learning - L1-7 介词 2022.12.26 周一7 介词7.1 介词功能 1 - 表示动作的方向,范围和程度7.2 介词功能 2 - 胶水词,链接不同的名词7.3 介词功能 3 - 与 be 动词连用代替动词7.4 江南四大介词on核心意义:在。。。上; 在(某…

融云 x OHLA:「社交+游戏」双轮驱动,逐鹿中东陌生人社交

完整报告,关注公众号文章限免下载 走过十多年的出海历程,中国创业者面临的机遇和挑战正在发生根本性变化。TikTok、SHEIN 在全球大获全胜的背后,不仅有中国产业链成熟、工程师红利的厚积薄发,也有一代代出海人布局全球商业路径的思…

Ubuntu20.04部署KVM并安装Ubuntu Server 20.04

kvm虚拟化技术 KVM介绍 KVM是Linux开源社区大力支持的虚拟化技术,基于Intel和AMD的硬件虚拟化技术。KVM(Kernel-bashdVirtual Machine,即基于内核的虚拟机),它是用于Linux内核中的虚拟化环境设施,是Linux…

python:什么?你听MP3居然还要付费?看我一键......

前言 大家早好、午好、晚好吖 ❤ ~ 在我们上班空闲\游玩\散步的时候,总会习惯的拿出手机放首音乐来听一听 但是吧,有时候我们听一首歌起劲的时候,它会你提醒你 这时候怎么办呢?通常我们是下一首,或者充值 但是手头不宽裕但又想听怎么办? …

JavaEE-Spring(IoC控制反转,DI依赖注入,Spring项目创建和基本使用,ApplicationContext和BeanFactory的区别)

文章目录1. IoCDI2. Spring项目创建和使用ApplicationContext和BeanFactory的区别1. IoC Spring是一个包含多个工具方法的IoC容器 tomcat是web容器 List/Map是数据存储容器 IoC:Inversion of Control(控制反转) 将对象的控制权交给Spring&…

RK3399+PCIe+FPGA 在高速AD采样中的应用

一、需求 要实现高速AD/DA的数据采集,并发送到高性能arm核进行数据处理; 方案RK3399pcieFPGAAD/DA。 二、器件介绍 一、RK3399 RK3399是一款低功耗、高性能处理器,用于计算、个人移动互联网设备和其他智能设备应用。基于Big.Little架构&…

计算机发展史之查尔斯·巴贝奇

查尔斯巴贝奇(Charles Babbage,1791年12月26日—1871年10月18日)是一名英国数学家、发明家、科学家,科学管理的先驱者,出生于一个富有的银行家的家庭,曾就读于剑桥大学三一学院。 他在24岁时就被选为英国皇…

智慧医院数据可视化(数据大屏)

本次分享的作品是用软件Axure8.0(兼容9和10)制作的针对智慧医院设计的数据可视化大屏,其作品内容主要是对医院的运营情况、门诊、住院、手术、药品、医务、医疗设备、卫生耗材以及医疗质量数据进行综合可视分析。 运营情况:对医院的整体数据…