Shader "Hidden/Twist Effect" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}

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

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest

#include "UnityCG.cginc"

uniform sampler2D _MainTex;

uniform float4 _MainTex_ST;

uniform float4 _MainTex_TexelSize;
uniform float _Angle;
uniform float4 _CenterRadius;

inline float TriWave(float x)
{
return abs(frac(x) * 2-1 )-0.5;

}
struct v2f {
float4 pos : POSITION;
float2 uv : TEXCOORD0;
float2 uvOrig : TEXCOORD1;
};

v2f vert (appdata_img v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
float2 uv = v.texcoord.xy - _CenterRadius.xy;
o.uv = TRANSFORM_TEX(uv, _MainTex); //MultiplyUV (UNITY_MATRIX_TEXTURE0, uv);
o.uvOrig = uv;
return o;
}

float4 frag (v2f i) : COLOR
{
float2 offset = i.uvOrig;
float t = TriWave(_Time.y * 0.05);
float angle = 1.0 - length(offset / (_CenterRadius.zw*t ));
angle = max (0, angle);
angle = angle * _Angle * t;
float cosLength, sinLength;
sincos (angle, sinLength, cosLength);

float2 uv;
uv.x = cosLength * offset[0] - sinLength * offset[1];
uv.y = sinLength * offset[0] + cosLength * offset[1];
uv += _CenterRadius.xy;

return tex2D(_MainTex, uv) * (1 - abs(angle * 0.5));
}
ENDCG

}
}

Fallback off

}

Shader "Hidden/Twist Effect" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader
{
Pass
{
ZTest Always Cull Off ZWrite Off
Fog { Mode off }
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float4 _MainTex_ST;
uniform float4 _MainTex_TexelSize;
uniform float _Angle;
uniform float4 _CenterRadius;
inline float TriWave(float x)
{
return abs(frac(x) * 2-1 )-0.5;
}
struct v2f {
float4 pos : POSITION;
float2 uv : TEXCOORD0;
float2 uvOrig : TEXCOORD1;
};
v2f vert (appdata_img v)
{
v2f o;
o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
float2 uv = v.texcoord.xy - _CenterRadius.xy;
o.uv = TRANSFORM_TEX(uv, _MainTex); //MultiplyUV (UNITY_MATRIX_TEXTURE0, uv);
o.uvOrig = uv;
return o;
}
float4 frag (v2f i) : COLOR
{

float t = clamp(TriWave(_Time.y * 0.05), 0.3, 0.8);
float2 offset = i.uvOrig;
float angle = 1.0 - length(offset / (_CenterRadius.zw *t));
float a = angle;
angle += _Time.y;
angle = max (0, angle);
angle = angle * _Angle;
float cosLength, sinLength;
sincos (angle, sinLength, cosLength);

float2 uv;
uv.x = cosLength * offset[0] - sinLength * offset[1];
uv.y = sinLength * offset[0] + cosLength * offset[1];
uv += _CenterRadius.xy;

return tex2D(_MainTex, uv) * (1 - abs(a * 0.5));//(abs(a * 0.5)-1) //black hole
}
ENDCG
}
}
Fallback off
}

Combine with NeoOcean in vertex shader

inline void Vortex(inout half3 localSpaceVertex)
{
half3 vortexC = mul(_World2Object, half4(_LocalVortex.x, 0, _LocalVortex.z,1)).xyz;
half2 offset = localSpaceVertex.xz - vortexC.xz;
half angle = max(0,1.0 - length(offset / (_LocalVortex.ww)));
half rot = -angle * 6.28;
half rotcos, rotsin;
sincos (rot, rotsin, rotcos);
localSpaceVertex.x = vortexC.x + rotcos * offset.x - rotsin * offset.y;
localSpaceVertex.y += _LocalVortex.y * angle;
localSpaceVertex.z = vortexC.z + rotsin * offset.x + rotcos * offset.y;
}

Unity Twist Effect Black Hole的更多相关文章

  1. Unity Image Effect

    1.工作原理 Image Effect是运用于一个Camera,将Camera视见体最终看到的二维图像内容作为一个2DTexture传递给一个Shader, 然后在Shader的Fragment渲染阶 ...

  2. Unity全屏模糊

    先上效果,左边模糊 其实用的是Unity Stard Effect里的资源,一个脚本一个shader //脚本代码 using UnityEngine; using System.Collection ...

  3. Unity Shader 基础(2) Image Effect

    Unity中 Image Effect 是Post Processing的一种方,Unity自身也提供很多Effect效果供使用.Image Effect的使用官方文档做了很多介绍,这里重点Post ...

  4. Unity Shader Graph(二)Dissolve Effect

    此篇文章记录Dissolve Effect(溶解特效)的制作过程 软件环境 Unity 2018.1.2f1 Packages: Lightweight Render Pipeline 1.1.11 ...

  5. unity, 在image effect shader中用_CameraDepthTexture重建世界坐标

    --------------更新 更简单的方法: //depth: raw depth, nonlinear, 0 at near plane, 1 at far plan   float4 scre ...

  6. Unity Shader入门精要之 screen post-processing effect

    本篇记录了学习Unity Shader入门精要的屏幕后处理的一些知识点. OnRenderImage(RenderTexture src, RenderTexture dest) 以上函数是Unity ...

  7. 转一篇关于Unity的PlayMaker

    这篇文章转自http://va.lent.in/should-you-use-playmaker-in-production/ 此文作者大概深受其苦,吐槽了playmaker的多个蛋疼的地方,这其实说 ...

  8. Unity Glossary

    https://docs.unity3d.com/2018.4/Documentation/Manual/Glossary.html 2D terms 2D Physics terms AI term ...

  9. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

随机推荐

  1. asp.net中WebForm.aspx与类文件分离使用

    第一步:新建一个web项目和类库,新建一个页面和映射类文件: 第二步:在页面中,删除默认映射类,添加服务器控件. 1.更改映射类命名空间: 原: <%@ Page Language=" ...

  2. /etc目录深入理解

    /etc This is the nerve center of your system, it contains all system related configuration files in ...

  3. CSS 链接

    不同的链接可以有不同的样式. 链接样式 链接的样式,可以用任何CSS属性(如颜色,字体,背景等). 特别的链接,可以有不同的样式,这取决于他们是什么状态. 这四个链接状态是: a:link - 正常, ...

  4. 数据库(学习整理)----1--如何彻底清除系统中Oracle的痕迹(重装Oracle时)

    1.关于重装Oracle数据库: 由于以前装过Oracle数据库,但是版本不怎么样,结果过了试用期之后,我就没有破解和再找合适的版本了!直接使用电脑管家卸载了!可想而知,肯定没清除Oracle痕迹啊! ...

  5. 百练_2409 Let it Bead(Polya定理)

    描述 "Let it Bead" company is located upstairs at 700 Cannery Row in Monterey, CA. As you ca ...

  6. C++类型转换总结 转

    一.前言: C风格的强制类型转换(Type Cast)很简单,不管什么类型的转换统统是: TYPE b = (TYPE)a. C++风格的类型转换提供了4种类型转换操作符来应对不同场合的应用. con ...

  7. oracle建立表空间

    //创建临时表空间 create temporary tablespace test_temp tempfile 'E:\oracle\product\10.2.0\oradata\testserve ...

  8. Dice (III) 概率dp

    #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> ...

  9. ajax只是一个称呼

    记得刚入行的时候,看到ajax,即异步的javascript和xml这样一个概念,一点感觉都没有.参加工作前的第一轮面试,被问到有没有自己实现过ajax,我觉得自己实现肯定很复杂吧. 从名字理解 从名 ...

  10. 自己使用Jquery封装各种功能分享

    自己使用Jquery封装各种功能分享: 左右滚动图片 瀑布流 流动显示列表 广告切换 头像切换And广告切换 获取搜索引擎的来源关键字 上面列表中展示的功能都是使用jquery进行封装实现的,希望大家 ...