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