Shader "Hidden/Post FX/Monitors/Parade Render" { SubShader { ZTest Always Cull Off ZWrite Off Fog { Mode off } CGINCLUDE #pragma fragmentoption ARB_precision_hint_fastest #pragma target 5.0 #include "UnityCG.cginc" StructuredBuffer _Waveform; float4 _Size; float _Exposure; float3 Tonemap(float3 x, float exposure) { const float a = 6.2; const float b = 0.5; const float c = 1.7; const float d = 0.06; x *= exposure; x = max((0.0).xxx, x - (0.004).xxx); x = (x * (a * x + b)) / (x * (a * x + c) + d); return x * x; } float4 FragParade(v2f_img i) : SV_Target { const float3 red = float3(1.8, 0.03, 0.02); const float3 green = float3(0.02, 1.3, 0.05); const float3 blue = float3(0.0, 0.45, 1.75); float3 color = float3(0.0, 0.0, 0.0); const uint limitR = _Size.x / 3; const uint limitG = limitR * 2; if (i.pos.x < (float)limitR) { uint2 uvI = i.pos.xy; color = _Waveform[uvI.y + uvI.x * _Size.y].r * red; } else if (i.pos.x < (float)limitG) { uint2 uvI = uint2(i.pos.x - limitR, i.pos.y); color = _Waveform[uvI.y + uvI.x * _Size.y].g * green; } else { uint2 uvI = uint2(i.pos.x - limitG, i.pos.y); color = _Waveform[uvI.y + uvI.x * _Size.y].b * blue; } color = Tonemap(color, _Exposure); color += (0.1).xxx; return float4(saturate(color), 1.0); } ENDCG // (0) Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment FragParade ENDCG } } FallBack off }