Unity Shader实现黑幕过场效果
作者:Hello Bug. 发布时间:2022-01-13 00:18:10
标签:Unity,黑幕过场
本文实例为大家分享了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);
}
}
}
——设置属性
来源:https://liuhaowen.blog.csdn.net/article/details/109529957
0
投稿
猜你喜欢
- Guava Cache:⾕歌开源缓存框架Guava Cache是在内存中缓存数据,相比较于数据库或redis存储,访问内存中的数据会更加高效
- 1、switch支持String做参数/*** * switch支持字符串做参数 jdk7 * @author huangjiawei */
- Java代码package com.zzx.controller;import com.zzx.model.User;import org.
- 一、事务的基本原理Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的。对于纯JDBC操
- Map的存储结构式Key/Value形式,Key 和 Value可以是普通类型,也可以是自己写的JavaBean(本文),还可以是带有泛型的
- 一.概述在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条
- 一、原理1、不变模式(不可变对象)在并行软件开发过程中,同步操作似乎是必不可少的。当多线程对同一个对象进行读写操作时,为了保证对象数据的一致
- HashMap的原理 HashMap的数据结构为数组+链表,以key,value的形式存值,通过调用put与get方法来存值与取值。它内部维
- Java 序列化和反序列化实例详解在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列
- 引言备忘录模式经常可以遇到,譬如下面这些场景:浏览器回退:浏览器一般有浏览记录,当我们在一个网页上点击几次链接之后,可在左上角点击左箭头回退
- Android基础教程数据存储之文件存储将数据存储到文件中并读取数据1、新建FilePersistenceTest项目,并修改activit
- 一、Monkey 是什么?Monkey 就是SDK中附带的一个工具。二、Monkey 测试的目的?:该工具用于进行压力测试。 然后开发人员结
- shiro是一个权限框架,具体的使用可以查看其官网 http://shiro.apache.org/ 它提供了很方便的权限认证和
- 前言记得前段时间的文章么?redis使用位图法记录在线用户的状态,还是需要自己实现一个IM在线用户状态的记录,今天来讲讲另一方案,布隆过滤器
- 如何使用union多表分页条件查询当前项目有一个全局搜索的功能,需要涉及到7-8张主表,由于当前项目使用的是Jpa,所以我决定使用原生sql
- 一、ArrayList是什么ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元
- 一、算法描述波雷费密码是一种对称式密码,是首种双字母取代的加密法。下面描述算法步骤:1、从1号二维码M05,提取明文信息和密文,M05格式:
- 这篇文章主要介绍了Java使用Collections工具类对List集合进行排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一
- 网上的操作方式是我没有进行尝试,感兴趣的可以试试nohup java -Dserver.port=8848 -Dlogging.level.
- 本博文将为您提供自Java 7以来增加的很棒的新功能的示例。我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java