ShaderGraph官方案例:github.com/UnityTechno…
一、前语
点重视不迷路,继续输出干货文章。
嗨,大家好,我是向宇。最近在玩ShaderGraph,决定把我自己实验的一切作用记录到这篇博客中,附带完好高清的连线动态图,期望对想要学习ShaderGraph的同学有所启发。后续有发现一些新的ShaderGraph我还会继续进行更新。
这儿我就不对ShaderGraph基础运用进行说明了,想了解的同学能够去看这篇文章: Shader Graph入门
工程源码见文章末尾。
二、ShaderGraph
1.什么是ShaderGraph
ShaderGraph是Unity中的一个可视化东西,用于创立和修正图形上色器。其含义在于简化编写杂乱上色器的过程,削减对详细编程言语的依靠,使艺术家和设计师能够更方便地创立各种美术作用。运用ShaderGraph能够经过图形界面设置上色器属性,包含色彩、纹路、光照等,并在视窗预览中即时显现成果,然后快速迭代和调整上色器。
运用ShaderGraph需求先装置Unity 2018.1或以上版本,并增加ShaderGraph插件。打开ShaderGraph面板后,能够经过拖放节点并衔接它们来创立上色器。ShaderGraph的节点包含输入输出、数学运算、纹路、光照、特殊作用等,用户能够依据需求选择相应的节点组合成自己的上色器。
2.在运用ShaderGraph时需求留意以下几点:
-
ShaderGraph的运用需求一定程度的图形学常识,比如了解极点、片段上色器的烘托流程、如何结合Unity的原料修正器等。
-
当图形作用非常杂乱时,ShaderGraph或许无法满足需求,需求手写代码完成。
-
ShaderGraph创立的上色器或许会对功能发生影响,需求在实际项目中评价并做出优化。
-
ShaderGraph尽管简化了编写上色器的过程,但关于一些高级的特殊作用,仍是需求一定的编程技术。
3.优势
相比于传统的手写上色器,ShaderGraph具有以下几个优势:
-
可视化修正。ShaderGraph采用可视化修正方法,经过拖放节点衔接来组合上色器,防止了繁琐的手写代码,并使上色器的结构更加明晰易懂。
-
更少的过错。ShaderGraph采用了强类型的节点更新机制,能够防止传统的手写上色器中常发生的过错,如拼写过错、语法过错和类型过错。
-
更好的可保护性。因为ShaderGraph采用了可视化修正方法,因而上色器更容易被了解和保护。此外,ShaderGraph还支撑版本控制,能够方便地将上色器与其他团队成员同享和同步。
-
更快的迭代。 ShaderGraph答应用户在视窗预览中实时检查更改后的上色器作用,这样能够更快地迭代和调试上色器,并提高开发效率。
-
更易扩展。ShaderGraph供给了很多的预制节点,包含数学、贴图、色彩、光照等节点,且支撑自定义节点,因而开发者能够自行扩展和增加节点。
综上所述,ShaderGraph具有可视化、易于了解和保护、快速迭代以及易于扩展等优势,特别适合那些不想深入学习编写杂乱上色器代码的设计师和艺术家。一起,尽管关于更高级的上色作用仍然会需求编程技术,但ShaderGraph能够协助开发者更快速的完成初步作用,完成杂乱上色作用需求的编程技术能够由技术人员来担任。
4.项目
其实之前我就对ShaderGrap有进行一些运用共享,不过没有进行体系的整理,有需求的能够去看看之前的,这儿我贴出链接地址:
人物移动到树后边,不被遮挡的作用
Shader Graph完成传送门作用
unity完成一个刮刮乐作用
三、实例作用
边际发光
首要节点:FresnelEffect, 原理:Fresnel Effect,菲涅耳效应,依据观察视点发生不同反射率然后对表面作用发生影响,当你接近时,会反射更多的光。菲涅耳效应节点经过计算表面法线与视线方向的夹角来近似。这个视点越大,回来值越大。这种作用经常被用来完成边际照明,这在很多艺术风格中都很常见
进阶:带方向的菲涅尔边际光作用
裁剪
首要节点:Position 、AlphaClip 原理:AlphaClip的值假如比Alpha的值大,则会不显现 留意:一定要调PBR Master面板的Alpha参数,否者不会显现出来作用
进阶 带边际色的裁剪
进阶:在裁剪的基础上增加裁剪边际光 首要利用Smoothstep做出一个边际突变 Smoothstep:假如输入In的值别离在输入Edge1和Edge2的值之间,则回来0和1之间的滑润Hermite插值的成果。假如输入In的值小于输入Step1的值,则回来0;假如大于输入Step2的值,则回来1
溶解
首要节点 SimpleNoise 留意:一定要调PBR Master面板的Alpha参数,否者不会显现出来作用
进阶 带边际色溶解
溶解边际增加发光,原理就是对Noise噪声做两个Step,然后相减,再乘个色彩,连到Emission发光节点上
卡通暗影
首要节点NormalVector、DotProduct、SampleGradient 原理:运用Sample Gradient设置几个暗影色块色彩
水波纹
首要节点 TillingAndOffset 、Lerp 原理:经过Tilling And Offset节点的Offset来控制水纹的UV偏移,然后再运用Lerp将水纹和主贴图做一个线性差值
积雪作用
首要节点 NomalVector 、DotProduct 原理:运用一个向上的 Vector3和 模型的 Normal Vertor(法线向量) 点乘,得到的是 一个标量,表明模型法线向量和笔直向量的夹角(方向的相似度),然后经过 Step过滤得到要显现白色的部分,即将显现的 白色部分再和一个噪声相乘后输入到Master的Emission发光槽中。
不锈钢作用、冰晶作用
首要节点 ViewDirection.、TillingAndOffset、SimpleNoise 原理:由View Direction视角移动, 引发Tilling And Offset 节点 移动 贴图,发生的作用。留意View Direction运用Tangent切线空间。该作用也可用于冰晶作用。
UV颤动
首要节点:UV、Simple Noise、Split 原理,运用Split将UV分开成x和y两个分类,对x分类做一个噪音颤动,最终和y再合并作用到主贴图的UV上。 完成相似老电视屏幕闪耀的作用
水面上下波动作用
首要节点:Gradient Noise、Position 原理:运用Gradient Noise随机噪声,再经过一个 Normal Vector结点,代表笔直于物体的法向量,接着,对Position进行一个叠加。 留意Normal Vector和Position的Space都选择Object空间
红旗飘飘
首要节点:Simple Noise、UV、Position 原理:经过噪声的UV移动,形成一个动态移动的噪声,作用到Position上,为了让旗的根部所以在经过一个UV的x重量来限制根部的噪音
马赛克
首要节点:UV、Posterize 原理:Posterize的作用是色调别离
无贴图水球
首要节点:UV、Ellipse、Step 原理:经过UV的y方向结构一个笔直突变的UV,作为噪声的Step边际,形成一条波浪,最终差值两个色彩,再用形状做裁切。
无贴图火焰
首要节点:Voronoi、Tiling And Offset、Blend 原理:经过两个Voronoi的融合,得到相似火焰向上焚烧的形状,再经过UV和一个Vector 2的Distance制造两个圆形区域,别离作为火焰内心和外围的区域,再合火焰形状相乘,最终再乘上色彩。
无贴图旋涡
首要节点:Twirl、Voronoi 原理:运用Twirl对Voronoi发生一个旋涡形状。 能够用于完成传送门的作用
无贴图闪电
首要节点:Simple Noise、Rectangle 原理:噪声经过Rectangle后,能够形成相似闪电的形状 一个UV向下移动的噪声和一个UV向上移动的噪声相加,再经过Rectangle,则能够形成动态闪电作用。
全息作用
首要节点:Position、Fraction、Time、Fresnel Effect 原理:经过Fraction获取Position的y重量得到一个条纹作用,再经过UV移动得到一个扫描的作用,最终和菲涅尔作用叠加。
水波纹效
首要节点:UV、Sine 原理:经过UV和Sine结构一个圆心向外扩散的作用,再作用到贴图的UV上。
高斯含糊
详细完成拜见这篇文章:Unity ShaderGraph完成图片的高斯含糊作用
自发光
1.我们先看下PBR ShaderGraph(Lit ShaderGraph)下的自发光作用。
运用自发光贴图,输入到Emmision,有了自发光作用:
2.Unlit ShaderGraph中的自发光
粒子体系溶解作用
详细完成拜见这篇文章:Unity ShaderGraph溶解作用运用到粒子体系中
物体接近部分溶解
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 脚本挂在到 需求溶解的物体上
/// </summary>
public class Main : MonoBehaviour
{
/// <summary>
/// 原料球
/// </summary>
public Material mat;
/// <summary>
/// 要接近的物体
/// </summary>
public Transform m_targetObj;
void Start()
{
}
void Update()
{
mat.SetVector("Vector3_B7D1FB9C",m_targetObj.position);
}
}
运转作用
物体接近部分显现
及与上面相反的作用,只需调整下如下几个当地 运转作用如下
2D描边作用
详细完成拜见这篇文章:Unity ShaderGraph 2D描边作用、不规则描边作用
子弹拖尾作用
详细完成拜见这篇文章:Unity运用ShaderGraph合作粒子体系,制造子弹拖尾特效
冰块作用,一只被冻住的鸡
工程地址:gitcode.net/linxinfa/un… 作用
曲折国际
这儿的曲折仅仅一种视觉作用,不影响磕碰盒子等物理物体。
黑洞吸收作用
能量罩
激光光束
管道液体流动
水瓶液体
脚本挂载到运用原料的物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Wobble : MonoBehaviour
{
Renderer rend;
Vector3 lastPos;
Vector3 velocity;
Vector3 lastRot;
Vector3 angularVelocity;
public float MaxWobble = 0.03f;
public float WobbleSpeed = 1f;
public float Recovery = 1f;
public float wobbleAmountX;
public float wobbleAmountZ;
float wobbleAmountToAddX;
float wobbleAmountToAddZ;
float pulse;
float time = 0.5f;
// Use this for initialization
void Start()
{
rend = GetComponent<Renderer>();
}
private void Update()
{
time += Time.deltaTime;
// 随着时刻的推移削减颤动
wobbleAmountToAddX = Mathf.Lerp(wobbleAmountToAddX, 0, Time.deltaTime * (Recovery));
wobbleAmountToAddZ = Mathf.Lerp(wobbleAmountToAddZ, 0, Time.deltaTime * (Recovery));
// 做一个减小摆动的正弦波
pulse = 2 * Mathf.PI * WobbleSpeed;
wobbleAmountX = wobbleAmountToAddX * Mathf.Sin(pulse * time);
wobbleAmountZ = wobbleAmountToAddZ * Mathf.Sin(pulse * time);
// 修正上色器参数
rend.material.SetFloat("_WobbleX", wobbleAmountX);
rend.material.SetFloat("_WobbleZ", wobbleAmountZ);
// 速率
velocity = (lastPos - transform.position) / Time.deltaTime;
angularVelocity = transform.rotation.eulerAngles - lastRot;
// 摆动
wobbleAmountToAddX += Mathf.Clamp((velocity.x + (angularVelocity.z * 0.2f)) * MaxWobble, -MaxWobble, MaxWobble);
wobbleAmountToAddZ += Mathf.Clamp((velocity.z + (angularVelocity.x * 0.2f)) * MaxWobble, -MaxWobble, MaxWobble);
// 保持最终的方位
lastPos = transform.position;
lastRot = transform.rotation.eulerAngles;
}
}
星体
运用涅菲尔作用完成边际发光,然后运用时刻控制噪声节点偏移,就呈现相似星星闪耀的感觉,
然后最重要的是需求做后处理设置, 首要需求装置PostProcessing包 然后需求设置相机 然后再Hierarchy面板右键Volume–Global Voume 这是会有一个Global Volume物体,首要设置Volume组件上Profule,点击New即可 然后点AddOverride,增加Tonemapping和Bloom, 设置Bloom上的Intensity和Tint即可,调整数字和色彩,
涟漪作用
这是一种图像作用,它扭曲烘托的图像,水面上的涟漪,源码方位 github.com/keijiro/Rip…
灰烬飘散(2023/7/5更新)
教你在Unity中完成模型融化化为灰烬飘散的作用
完成在模型上涂鸦的作用(2023/7/5更新)
运用Unity ShaderGraph完成在模型上涂鸦的作用,那么,纹个手吧
子弹拖尾特效(2023/7/5更新)
Unity运用ShaderGraph合作粒子体系,制造子弹拖尾特效
溶解、火灾、全息图、像素化、卡通化、简单旗帜(2023/7/5更新)
github.com/andydbc/uni…
弯路和国际曲折作用(2023/7/8更新)
blog.csdn.net/qq_36303853…
完成2d图片多种描边作用(2023/7/9更新)
blog.csdn.net/qq_36303853…
待续
源码
后边有空我会整理好放上来 gitee.com/qimingzhiha…
参考
【文章】:blog.csdn.net/m0_46378049… 【文章】:blog.csdn.net/linxinfa/ar…
结束
赠人玫瑰,手有余香!假如文章内容对你有所协助,请不要吝啬你的点赞谈论和重视
,以便我第一时刻收到反应,你的每一次支撑
都是我不断创造的最大动力。当然假如你发现了文章中存在过错
或者有更好的解决方法
,也欢迎谈论私信告诉我哦!
好了,我是向宇
,xiangyu.blog.csdn.net
一位在小公司静静奋斗的开发者,出于兴趣爱好,于是最近才开始自习unity。假如你遇到任何问题,也欢迎你谈论私信找我, 尽管有些问题我或许也不一定会,但是我会查阅各方材料,争取给出最好的主张,期望能够协助更多想学编程的人,共勉~