Unity Shader实现黑幕过场效果

本文实例为大家分享了Unity Shader实现黑幕过场效果的具体代码,供大家参考,具体内容如下

一、效果演示

二、实现

Shader:黑幕过场着色器

//黑幕过场着色器

Shader "Custom/BlackScreenSpread"
{
 Properties
 {
  _Color("Main Color", Color) = (1,1,1,1)
  _MainTex("Base (RGB)", 2D) = "white" {}
  _Radius("Radius",float)=1.5
  _Center_X("Center_X", float) =0.5
  _Center_Y("Center_Y", float) =0.5
  _Sharp("Sharp", float) = 100
 }

 SubShader
 {
  Pass
  {
   ZTest Always Cull Off ZWrite Off
   Fog{ Mode off
  }

  CGPROGRAM
  #pragma vertex vert_img
  #pragma fragment frag
  #include "UnityCG.cginc"  

  fixed4 _Color;
  sampler2D _MainTex;
  float _Radius;
  float _Center_X;
  float _Center_Y;
  float _Sharp;

  float _tanh(float x)
  {
   return 2.0f / (1.0f + exp(-2.0f * x)) - 1.0f;
  }

  float4 frag(v2f_img i) : COLOR
  {
   _Center_X=_Center_X*(_ScreenParams.x / _ScreenParams.y);
   float x = i.uv.x*(_ScreenParams.x / _ScreenParams.y);
   float y = i.uv.y;

   float dis = sqrt((x - _Center_X)*(x - _Center_X) + (y - _Center_Y)*(y - _Center_Y));
   float t = _Radius - dis;
   float rt = 0.5f + _tanh(t * _Sharp) * 0.5f;
   float col = float4(rt, rt, rt, rt);
   return tex2D(_MainTex, i.uv) * col * _Color;
  }
  ENDCG
 }
 }
 Fallback off
}

CS:后处理的基类

using UnityEngine;

/// <summary>
/// 后处理的基类
/// </summary>
[ExecuteInEditMode]
[RequireComponent(typeof(Camera))]
public class PostEffectBase : MonoBehaviour
{
    [Header("后处理着色器")]
    public Shader shader = null;

    private Material _material = null;

    public Material material
    {
        get
        {
            if (_material == null)
            {
                _material = GenerateMaterial(shader);
            }
            return _material;
        }
    }

    protected Material GenerateMaterial(Shader shader)
    {
        if (shader == null || shader.isSupported == false)
        {
            return null;
        }
        Material material = new Material(shader);
        material.hideFlags = HideFlags.DontSave;
        if (material)
        {
            return material;
        }
        return null;
    }
}

CS:黑幕过场效果(挂载到渲染的相机上)

using UnityEngine;

/// <summary>
/// 黑幕过场效果
/// </summary>
[RequireComponent(typeof(Camera))]
public class BlackScreenSpread : PostEffectBase
{
    [Header("黑幕半径")]
    [Space(25)]
    public float radius;

    [Header("黑幕中心")]
    public Vector2 center;

    [Header("使用边缘模糊")]
    public bool useEdgeBlur;
    [Header("边缘模糊值")]
    public float blur = 10;

    public void OnRenderImage(RenderTexture source, RenderTexture destination)
    {
        if (material)
        {
            material.SetFloat("_Center_X", center.x);
            material.SetFloat("_Center_Y", center.y);
            material.SetFloat("_Radius", radius);
            material.SetFloat("_Sharp", useEdgeBlur ? blur : 200);
            Graphics.Blit(source, destination, material);
        }
        else
        {
            Graphics.Blit(source, destination);
        }
    }
}

——设置属性

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Unity Shader实现动态过场切换图片效果

    本文实例为大家分享了Unity Shader实现动态过场切换图片的具体代码,供大家参考,具体内容如下 一.简单介绍 Shader Language的发展方向是设计出在便携性方面可以和C++.Java等相比的高级语言,"赋予程序员灵活而方便的编程方式",并"尽可能的控制渲染过程"同时"利用图形硬件的并行性,提高算法效率". 本文介绍,如何使用 shader ,动态过场形式切换图片的一点简单效果. 二.实现原理 1.通过时间叠加判断,当 值小于 主图

  • Unity Shader实现黑幕过场效果

    本文实例为大家分享了Unity Shader实现黑幕过场效果的具体代码,供大家参考,具体内容如下 一.效果演示 二.实现 Shader:黑幕过场着色器 //黑幕过场着色器 Shader "Custom/BlackScreenSpread" { Properties { _Color("Main Color", Color) = (1,1,1,1) _MainTex("Base (RGB)", 2D) = "white" {}

  • Unity Shader实现描边OutLine效果

    本文实例为大家分享了Unity Shader实现描边OutLine效果的具体代码,供大家参考,具体内容如下 Shader实现描边流程大致为:对模型进行2遍(2个pass)绘制,第一遍(描边pass)在vertex shader中对模型沿顶点法线方向放大,fragment shader设置输出颜色为描边颜色:第二遍正常绘制模型,除被放大的部分外,其余被覆盖,这样就有了描边的效果. 实现代码如下: Shader "Custom/OutlineShader" { Properties { _

  • Unity Shader实现序列帧动画效果

    本文实例为大家分享了Unity Shader序列帧动画效果的具体代码,供大家参考,具体内容如下   实现原理 主要的思想是设置显示UV纹理的大小,并逐帧修改图片的UV坐标.(可分为以下四步) 1.我们首先把 _Time.y 和速度属性_Speed 相乘来得到模拟的时间,并使用CG 的floor 函数对结果值取整来得到整数时间time 2.然后,我们使用time 除以_HorizontalAmount 的结果值的商来作为当前对应的行索引,除法结果的余数则是列索引. 3.接下来,我们需要使用行列索引

  • Unity Shader实现翻书效果

    今天实现一个简单的翻书的效果,话不多说,先上一张效果图: 这里就随便用的一张纹理了,我们还是称为"翻木板"吧,哈哈. 实现过程: 其实这个效果实现起来还是挺简单的,大概思路其实就是 让所有顶点都绕Z轴旋转,并且通过正余弦使之带有一点弧度. 下面开始让我们一步一步的实现该效果. 首先打开Unity新建一个工程,场景,并且创建一个名为openBookEffect的Shader文件,删掉原本多余的代码. 第一步,我们先让它绕z轴旋转起来 这里就要用到一个旋转矩阵了,让顶点左乘该矩阵,就能得到

  • Unity Shader实现动态雾效果

    Unity Shader学习:动态雾,供大家参考,具体内容如下 先将相机近裁面四个角向量传给shader,再通过观察空间下的深度值和相机位置算出像素在世界坐标系的位置,通过世界空间高度值来设定雾的范围和浓度,然后通过噪声和uv偏移实现扰动效果.得到了类似寂静岭或恶灵附身1的效果. C#部分: using System.Collections; using System.Collections.Generic; using UnityEngine; [ExecuteInEditMode] publ

  • Unity Shader实现玻璃材质效果

    Unity Shader学习:玻璃材质,供大家参考. 主要是通过反射和折射来达到透明的效果,用菲涅尔来混叠. shader部分: Shader "Unlit/Crystal" { Properties { _Cube("Skybox",Cube)=""{} //折射角度 _EtaRatio("EtaRatio", Range(0, 1)) = 0 //菲涅尔系数 _FresnelBias("FresnelBias&q

  • Unity Shader实现水波纹效果

    本文实例为大家分享了Unity Shader实现水波纹的具体代码,供大家参考,具体内容如下 效果: Shader代码: Shader "Custom/shuibowen"{ Properties{ _MainTex("Base (RGB)",2D)="white"{} _distanceFactor("Distancefactor",float)=1 _timeFactor("time factor",fl

  • unity shader实现玻璃折射效果

    本文实例为大家分享了unity shader实现玻璃折射的具体代码,供大家参考,具体内容如下 Shader "Unlit/render_reflect" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags {"Queue" = "Transparent" "RenderType"="Op

  • Unity Shader实现纹理遮罩效果

    纹理遮罩用处很多,简单来讲就是允许我们可以保护模型中的某些区域不受某些因素的影响.例如我们有时希望模型表面某些区域的反光强烈一些,而某些区域弱一些.为了得到更加细腻的结果,我们需要用一张遮罩纹理来控制该光照.还有一些情况就是某些模型需要多张纹理混合时,此时使用遮罩纹理可以控制如何混合这些纹理. 具体流程为:通过采样得到遮罩纹理的纹素值,然后使用其中某个或者几个通道的值来与某种表面属性进行相乘.当该通道的值为0时,此时该表面属性不受遮罩纹理的影响. shader代码如下: Shader "Cust

随机推荐