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

前言

打开unity的PackgeManager 安装ShaderGraph 和 UniversalRP ,如果使用高清渲染管线 需要安装HighDefinitionRP, 都安装完后 通过菜单 Assets–Create --Rendering创建渲染管线配置
注:如果没有Rendering 是因为没有安装UniversalRP
ShaderGraph基本介绍
所有节点详解大全
在这里插入图片描述
然后设置渲染管线配置文件 Editor - Project Setting - Graphics中的Scriptable Render Pipeline Settings
在这里插入图片描述
然后就可以创建ShaderGraph
在这里插入图片描述
编写好自己的Shader后 创建 一个材质球,然后把shader拖到材质球上,
在这里插入图片描述
然后就可以使用材质球了,如果材质球没有效果,有可能自己的shader没有保存
在这里插入图片描述

案例 unity 2019.4.10

注:如果在MainPreview 预览上没有效果,请看一下 所有的参数是否都和截图上一样,
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上。

在这里插入图片描述

水波纹

原理:通过UV和Sine构造一个圆心向外扩散的效果,再作用到贴图的UV上。
在这里插入图片描述

红旗飘飘

原理:通过噪声的UV移动,形成一个动态移动的噪声,作用到Position上,为了让旗的根部所以在通过一个UV的x分量来限制根部的噪音
在这里插入图片描述

马赛克

原理:Posterize的作用是色调分离
在这里插入图片描述

无贴图水球

原理:通过UV的y方向构造一个垂直渐变的UV,作为噪声的Step边缘,形成一条波浪,最后差值两个颜色,再用形状做裁切。
在这里插入图片描述

无贴图火焰

原理:通过两个Voronoi的融合,得到类似火焰向上燃烧的形状,再通过UV和一个Vector 2的Distance制造两个圆形区域,分别作为火焰内心和外围的区域,再合火焰形状相乘,最后再乘上颜色。
在这里插入图片描述

无贴图旋涡

原理:使用Twirl对Voronoi产生一个旋涡形状。
在这里插入图片描述

无贴图闪电

原理:噪声通过Rectangle后,可以形成类似闪电的形状
一个UV向下移动的噪声和一个UV向上移动的噪声相加,再通过Rectangle,则可以形成动态闪电效果。
在这里插入图片描述

全息效果

原理:通过Fraction获取Position的y分量得到一个条纹效果,再通过UV移动得到一个扫描的效果,最后和菲涅尔效果叠加。
在这里插入图片描述

水面波动

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

物体靠近局部溶解

在这里插入图片描述


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


案例unity 2021.3.6

发光线框

在这里插入图片描述
在这里插入图片描述

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

先准备一个cube模型,然后导入到unity
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

能量罩

在这里插入图片描述
在这里插入图片描述

激光光束

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

管道液体流动

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

水瓶液体

在这里插入图片描述

在这里插入图片描述
脚本挂载到使用材质的物体上

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在上面),然后第二个胶囊体比第一个小一些当内壁用也用的能量罩材质,第三个用的液体材质,

水瓶

星体

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
使用涅菲尔效果实现边缘发光,然后使用时间控制噪声节点偏移,就出现类似星星闪烁的感觉,

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果展示:

星体

借鉴链接

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

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值