Shader Graph学习各种特效案例(持续更新)

文章目录

  • 前言
  • 案例 unity 2019.4.10
    • 外发光
    • 进阶 带方向的外发光
    • 裁剪
    • 进阶 带边缘色的裁剪
    • 溶解
    • 进阶 带边缘色溶解
    • 卡通阴影
    • 水波纹
    • 积雪效果
    • 不锈钢效果
    • UV抖动
    • 水波纹
    • 红旗飘飘
    • 马赛克
    • 无贴图水球
    • 无贴图火焰
    • 无贴图旋涡
    • 无贴图闪电
    • 全息效果
    • 水面波动
    • 物体靠近局部溶解
  • 案例unity 2021.3.6
    • 发光线框
    • 能量罩
    • 激光光束
    • 管道液体流动
    • 水瓶液体
    • 星体
  • 借鉴链接

前言

打开unity的PackgeManager 安装ShaderGraph 和 UniversalRP ,如果使用高清渲染管线 需要安装HighDefinitionRP, 都安装完后 通过菜单 Assets–Create --Rendering创建渲染管线配置
注:如果没有Rendering 是因为没有安装UniversalRP
ShaderGraph基本介绍
所有节点详解大全
Shader Graph学习各种特效案例(持续更新)_第1张图片
然后设置渲染管线配置文件 Editor - Project Setting - Graphics中的Scriptable Render Pipeline Settings
Shader Graph学习各种特效案例(持续更新)_第2张图片
然后就可以创建ShaderGraph
Shader Graph学习各种特效案例(持续更新)_第3张图片
编写好自己的Shader后 创建 一个材质球,然后把shader拖到材质球上,
Shader Graph学习各种特效案例(持续更新)_第4张图片
然后就可以使用材质球了,如果材质球没有效果,有可能自己的shader没有保存
Shader Graph学习各种特效案例(持续更新)_第5张图片

案例 unity 2019.4.10

注:如果在MainPreview 预览上没有效果,请看一下 所有的参数是否都和截图上一样,
Unity工程

外发光

主要节点:FresnelEffect,
原理:Fresnel Effect,菲涅耳效应,根据观察角度产生不同反射率从而对表面效果产生影响,当你靠近时,会反射更多的光。菲涅耳效应节点通过计算表面法线与视线方向的夹角来近似。这个角度越大,返回值越大。这种效果经常被用来实现边缘照明,这在很多艺术风格中都很常见
Shader Graph学习各种特效案例(持续更新)_第6张图片

进阶 带方向的外发光

Shader Graph学习各种特效案例(持续更新)_第7张图片

裁剪

主要节点:Position 、AlphaClip
原理:AlphaClip的值如果比Alpha的值大,则会不显示
注意:一定要调PBR Master面板的Alpha参数,否者不会显示出来效果
Shader Graph学习各种特效案例(持续更新)_第8张图片

进阶 带边缘色的裁剪

进阶:在裁剪的基础上添加裁剪边缘光
首先利用Smoothstep做出一个边缘渐变
Smoothstep:如果输入In的值分别在输入Edge1和Edge2的值之间,则返回0和1之间的平滑Hermite插值的结果。如果输入In的值小于输入Step1的值,则返回0;如果大于输入Step2的值,则返回1

Shader Graph学习各种特效案例(持续更新)_第9张图片

溶解

主要节点 SimpleNoise
注意:一定要调PBR Master面板的Alpha参数,否者不会显示出来效果
Shader Graph学习各种特效案例(持续更新)_第10张图片

进阶 带边缘色溶解

溶解边缘添加发光,原理就是对Noise噪声做两个Step,然后相减,再乘个颜色,连到Emission发光节点上
Shader Graph学习各种特效案例(持续更新)_第11张图片

卡通阴影

主要节点NormalVector、DotProduct、SampleGradient
原理:使用Sample Gradient设置几个阴影色块颜色
Shader Graph学习各种特效案例(持续更新)_第12张图片

水波纹

主要节点 TillingAndOffset 、Lerp
原理:通过Tilling And Offset节点的Offset来控制水纹的UV偏移,然后再使用Lerp将水纹和主贴图做一个线性差值
Shader Graph学习各种特效案例(持续更新)_第13张图片

积雪效果

主要节点 NomalVector 、DotProduct
原理:使用一个向上的 Vector3和 模型的 Normal Vertor(法线向量) 点乘,得到的是 一个标量,表示模型法线向量和垂直向量的夹角(方向的相似度),然后通过 Step过滤得到要显示白色的部分,将要显示的 白色部分再和一个噪声相乘后输入到Master的Emission发光槽中。
Shader Graph学习各种特效案例(持续更新)_第14张图片

不锈钢效果

主要节点 ViewDirection.、TillingAndOffset、SimpleNoise
原理:由View Direction视角移动, 引发Tilling And Offset 节点 移动 贴图,产生的效果。注意View Direction使用Tangent切线空间。该效果也可用于冰晶效果。
Shader Graph学习各种特效案例(持续更新)_第15张图片

UV抖动

主要节点:UV、Simple Noise、Split
原理,使用Split将UV分开成x和y两个分类,对x分类做一个噪音抖动,最后和y再合并作用到主贴图的UV上。

Shader Graph学习各种特效案例(持续更新)_第16张图片

水波纹

原理:通过UV和Sine构造一个圆心向外扩散的效果,再作用到贴图的UV上。
Shader Graph学习各种特效案例(持续更新)_第17张图片

红旗飘飘

原理:通过噪声的UV移动,形成一个动态移动的噪声,作用到Position上,为了让旗的根部所以在通过一个UV的x分量来限制根部的噪音
Shader Graph学习各种特效案例(持续更新)_第18张图片

马赛克

原理:Posterize的作用是色调分离
Shader Graph学习各种特效案例(持续更新)_第19张图片

无贴图水球

原理:通过UV的y方向构造一个垂直渐变的UV,作为噪声的Step边缘,形成一条波浪,最后差值两个颜色,再用形状做裁切。
Shader Graph学习各种特效案例(持续更新)_第20张图片

无贴图火焰

原理:通过两个Voronoi的融合,得到类似火焰向上燃烧的形状,再通过UV和一个Vector 2的Distance制造两个圆形区域,分别作为火焰内心和外围的区域,再合火焰形状相乘,最后再乘上颜色。
Shader Graph学习各种特效案例(持续更新)_第21张图片

无贴图旋涡

原理:使用Twirl对Voronoi产生一个旋涡形状。
Shader Graph学习各种特效案例(持续更新)_第22张图片

无贴图闪电

原理:噪声通过Rectangle后,可以形成类似闪电的形状
一个UV向下移动的噪声和一个UV向上移动的噪声相加,再通过Rectangle,则可以形成动态闪电效果。
Shader Graph学习各种特效案例(持续更新)_第23张图片

全息效果

原理:通过Fraction获取Position的y分量得到一个条纹效果,再通过UV移动得到一个扫描的效果,最后和菲涅尔效果叠加。
Shader Graph学习各种特效案例(持续更新)_第24张图片

水面波动

原理:使用Gradient Noise随机噪声,再通过一个 Normal Vector结点,代表垂直于物体的法向量,接着,对Position进行一个叠加。
注意Normal Vector和Position的Space都选择Object空间
在这里插入图片描述

物体靠近局部溶解

Shader Graph学习各种特效案例(持续更新)_第25张图片


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// 
/// 脚本挂在到 需要溶解的物体上
/// 
public class Main : MonoBehaviour
{

    /// 
    /// 材质球
    /// 
    public Material mat;
/// 
/// 要靠近的物体
/// 
    public Transform m_targetObj;
    void Start()
    {
        
    }

    
    void Update()
    {
        mat.SetVector("Vector3_B7D1FB9C",m_targetObj.position);
    }
}


案例unity 2021.3.6

发光线框

Shader Graph学习各种特效案例(持续更新)_第26张图片
Shader Graph学习各种特效案例(持续更新)_第27张图片

创建URP工程 或者吧工程转换为URP(不知道的可以百度),如果工程直接转换为URP的话,材质有可能会丢失,
解决方法:打开 Edit --> Render Pipeline --> Universal RenderPipeline --> Upgrade Project Materials to UniversalRP Materials
然后删除项目的Library文件夹,重新打开项目
首先设置相机
在这里插入图片描述
Shader Graph学习各种特效案例(持续更新)_第28张图片

先准备一个cube模型,然后导入到unity

Shader Graph学习各种特效案例(持续更新)_第29张图片

Shader Graph学习各种特效案例(持续更新)_第30张图片

能量罩

Shader Graph学习各种特效案例(持续更新)_第31张图片
Shader Graph学习各种特效案例(持续更新)_第32张图片

激光光束

Shader Graph学习各种特效案例(持续更新)_第33张图片
Shader Graph学习各种特效案例(持续更新)_第34张图片

Shader Graph学习各种特效案例(持续更新)_第35张图片

管道液体流动

Shader Graph学习各种特效案例(持续更新)_第36张图片
Shader Graph学习各种特效案例(持续更新)_第37张图片
Shader Graph学习各种特效案例(持续更新)_第38张图片

Shader Graph学习各种特效案例(持续更新)_第39张图片

水瓶液体

Shader Graph学习各种特效案例(持续更新)_第40张图片

Shader Graph学习各种特效案例(持续更新)_第41张图片
脚本挂载到使用材质的物体上

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;
    }



}

我用了三个胶囊体,最外面的胶囊体用的能量罩的材质球(能量罩shader在上面),然后第二个胶囊体比第一个小一些当内壁用也用的能量罩材质,第三个用的液体材质,

水瓶

星体

Shader Graph学习各种特效案例(持续更新)_第42张图片
Shader Graph学习各种特效案例(持续更新)_第43张图片
Shader Graph学习各种特效案例(持续更新)_第44张图片
Shader Graph学习各种特效案例(持续更新)_第45张图片
Shader Graph学习各种特效案例(持续更新)_第46张图片

Shader Graph学习各种特效案例(持续更新)_第47张图片

Shader Graph学习各种特效案例(持续更新)_第48张图片
使用涅菲尔效果实现边缘发光,然后使用时间控制噪声节点偏移,就出现类似星星闪烁的感觉,

然后最重要的是需要做后处理设置,
首先需要安装PostProcessing包
然后需要设置相机
然后再Hierarchy面板右键Volume–Global Voume
这是会有一个Global Volume物体,首先设置Volume组件上Profule,点击New即可
然后点AddOverride,添加Tonemapping和Bloom,
设置Bloom上的Intensity和Tint即可,调整数字和颜色,

Shader Graph学习各种特效案例(持续更新)_第49张图片
Shader Graph学习各种特效案例(持续更新)_第50张图片
Shader Graph学习各种特效案例(持续更新)_第51张图片
效果展示:

星体

借鉴链接

https://blog.csdn.net/m0_46378049/article/details/115000628
https://blog.csdn.net/linxinfa/article/details/108049048

你可能感兴趣的:(Shaser,Graph,学习,unity,游戏引擎)