Unity Shader – 故障艺术之 – Glitch Art – ImageBlock + Split RGB (区块强度 + 分离通道颜色的故障效果)

Unity Shader – 故障艺术之 – Glitch Art – ImageBlock + Split RGB (区块强度 + 分离通道颜色的故障效果)文章目录思路 Shader 运行效果 BackProjectR 参考 高品质后处理 十种故障艺术 GlitchArt 算法的总结与实现 错位图块故障 ImageBlockGl ImageBlock SplitRGB 通道只是其一一种效果思路基于前一篇的 SplitRGBGlit SplitRGB 还是比较简单的现有类似 noise 的抖动函数使用 noise 得到的值作为 R B 通道的偏移采样那么这一篇就是在 SplitRG


参考:- 高品质后处理:十种故障艺术(Glitch Art)算法的总结与实现 – 错位图块故障(Image Block Glitch)

Image Block + Split RGB 通道只是其一一种效果


思路

  • 现有类似 noise 的 抖动函数
  • 使用 noise 得到的值作为 R, B 通道的偏移采样

那么这一篇就是在 Unity Shader – 故障艺术之 – Glitch Art – Split RGB (分离通道颜色的故障效果) 的基础上 添加一个 ImageBlock 的强度控制即可:

float ImageBlockIntensity(v2f i) { 
      float2 size = lerp(1, _MainTex_TexelSize.xy, 1 - _BlockSize); size = floor((i.uv) / size); float noiseBlock = randomNoise(size); float displaceNoise = pow(noiseBlock.x, _BlockPow.x) * pow(noiseBlock.x, _BlockPow.y); return displaceNoise; } 

ImageBlockIntensity() 函数的值返回可以看到效果:
在这里插入图片描述

但是有与该 noise 过于白噪

所以可以使用一个 1 维 noise 来改变整体强弱:

R 通道我们可以使用:

return randomNoise(13.0); 

B 通道我们可以使用:

return randomNoise(123.0); 

然后两者结合:

return ImageBlockIntensity(v2f i) * randomNoise(123.0); 

然后,R,B 通道分别使用该 noise 强度来控制 Split RGB 即可得到比较好的效果


Shader

// jave.lin 2021/06/09 // 测试 图像块 故障后效 // References : 高品质后处理:十种故障艺术(Glitch Art)算法的总结与实现 // https://qianmo.blog.csdn.net/article/details/ Shader "Test/PP/Glitch/ImageBlock" { 
       Properties { 
       _MainTex ("Texture", 2D) = "white" { 
      } _Amplitude ("Amplitude", Range(-1, 0)) = -0.15 _Amount ("Amount", Range(-5, 5)) = 0.5 _BlockSize ("Block Size", Range(0, 1)) = 0.05 _Speed ("Speed", Range(0, 100)) = 10 _BlockPow ("Block Size Pow", Vector) = (3, 3, 0, 0) } SubShader { 
       // No culling or depth Cull Off ZWrite Off ZTest Always Pass { 
       CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { 
       float4 vertex : POSITION; float2 uv : TEXCOORD0; }; struct v2f { 
       float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; v2f vert (appdata v) { 
       v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = v.uv; return o; } sampler2D _MainTex; float4 _MainTex_TexelSize; float _Amplitude; float _Amount; float _BlockSize; float _Speed; float4 _BlockPow; //inline float rand(float n) //{ 
       // return frac(sin(n) * 13758. * 0.01); //} //inline float randomNoise(float seed) //{ 
       // return rand(float2(seed, 1.0)); //} //inline float randomNoise(float x, float y) //{ 
       // return frac(sin(dot(float2(x, y), float2(12.9898, 78.233))) * 43758.5453); //} inline float randomNoise(float2 seed) { 
       return frac(sin(dot(seed * floor(_Time.y * _Speed), float2(17.13, 3.71))) * 43758.); } float Noise() { 
       float _TimeX = _Time.y; float splitAmout = (1.0 + sin(_TimeX * 6.0)) * 0.5; splitAmout *= 1.0 + sin(_TimeX * 16.0) * 0.5; splitAmout *= 1.0 + sin(_TimeX * 19.0) * 0.5; splitAmout *= 1.0 + sin(_TimeX * 27.0) * 0.5; splitAmout = pow(splitAmout, _Amplitude); splitAmout *= (0.05 * _Amount); return splitAmout; } float ImageBlockIntensity(v2f i) { 
       //float2 block = randomNoise(floor(i.uv * _BlockSize * 100)); //return (block.x); float2 size = lerp(1, _MainTex_TexelSize.xy, 1 - _BlockSize); size = floor((i.uv) / size); float noiseBlock = randomNoise(size); float displaceNoise = pow(noiseBlock.x, _BlockPow.x) * pow(noiseBlock.x, _BlockPow.y); return displaceNoise; } half4 SplitRGB(v2f i) { 
       float splitAmout = Noise() * ImageBlockIntensity(i); half3 finalColor; finalColor.r = tex2D(_MainTex, fixed2(i.uv.x + splitAmout * randomNoise(13.0), i.uv.y)).r; finalColor.g = tex2D(_MainTex, i.uv).g; finalColor.b = tex2D(_MainTex, fixed2(i.uv.x - splitAmout * randomNoise(123.0), i.uv.y)).b; return half4(finalColor, 1.0); } fixed4 frag(v2f i) : SV_Target { 
       return SplitRGB(i); } ENDCG } } } 

运行效果

在这里插入图片描述


Back Project

不公开项目(因设置以前公司使用的资源,就自己备份学习、回顾用)

TestingImageBlockGlitch_unity 2019.4.0f1


References

  • 高品质后处理:十种故障艺术(Glitch Art)算法的总结与实现 – 错位图块故障(Image Block Glitch)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/222562.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午3:30
下一篇 2026年3月17日 下午3:31


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号