| | |
| | | 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<uint4> _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 |
| | | } |
| | | 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<uint4> _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
|
| | | }
|