Shader "Hidden/Post FX/Monitors/Waveform 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; float2 _Size; float4 _Channels; 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 FragWaveform(v2f_img i) : SV_Target { const float3 red = float3(1.4, 0.03, 0.02); const float3 green = float3(0.02, 1.1, 0.05); const float3 blue = float3(0.0, 0.25, 1.5); float3 color = float3(0.0, 0.0, 0.0); uint2 uvI = i.pos.xy; float4 w = _Waveform[uvI.y + uvI.x * _Size.y]; // Waveform data is stored in columns instead of rows color += red * w.r * _Channels.r; color += green * w.g * _Channels.g; color += blue * w.b * _Channels.b; color += w.aaa * _Channels.a * 1.5; color = Tonemap(color, _Exposure); color += (0.1).xxx; return float4(saturate(color), 1.0); } ENDCG // (0) Pass { CGPROGRAM #pragma vertex vert_img #pragma fragment FragWaveform ENDCG } } FallBack off }