float3 hexColor(float r, float g, float b) { return float3(r, g, b) / 255.0; } float3 smpteTop(float x) { if (x < 240.0) return hexColor(102.0, 102.0, 102.0); if (x < 445.0) return hexColor(191.0, 191.0, 191.0); if (x < 651.0) return hexColor(191.0, 191.0, 0.0); if (x < 857.0) return hexColor(0.0, 191.0, 191.0); if (x < 1063.0) return hexColor(0.0, 191.0, 0.0); if (x < 1269.0) return hexColor(191.0, 0.0, 191.0); if (x < 1475.0) return hexColor(191.0, 0.0, 0.0); if (x < 1680.0) return hexColor(0.0, 0.0, 191.0); return hexColor(102.0, 102.0, 102.0); } float3 smpteMiddleA(float x) { if (x < 240.0) return hexColor(0.0, 255.0, 255.0); if (x < 445.0) return hexColor(0.0, 63.0, 105.0); if (x < 1680.0) return hexColor(191.0, 191.0, 191.0); return hexColor(0.0, 0.0, 255.0); } float3 smpteMiddleB(float x) { if (x < 240.0) return hexColor(255.0, 255.0, 0.0); if (x < 445.0) return hexColor(65.0, 0.0, 119.0); if (x < 1475.0) { float ramp = saturate((x - 445.0) / (1475.0 - 445.0)); return float3(ramp, ramp, ramp); } if (x < 1680.0) return float3(1.0, 1.0, 1.0); return hexColor(255.0, 0.0, 0.0); } float3 smpteBottom(float x) { if (x < 240.0) return hexColor(38.0, 38.0, 38.0); if (x < 549.0) return float3(0.0, 0.0, 0.0); if (x < 960.0) return float3(1.0, 1.0, 1.0); if (x < 1268.0) return float3(0.0, 0.0, 0.0); if (x < 1337.0) return hexColor(5.0, 5.0, 5.0); if (x < 1405.0) return float3(0.0, 0.0, 0.0); if (x < 1474.0) return hexColor(10.0, 10.0, 10.0); if (x < 1680.0) return float3(0.0, 0.0, 0.0); return hexColor(38.0, 38.0, 38.0); } float4 shadeVideo(ShaderContext context) { float2 uv = saturate(context.uv); float2 pixel = float2(uv.x, 1.0 - uv.y) * float2(1920.0, 1080.0); if (pixel.y < 630.0) return float4(smpteTop(pixel.x), 1.0); if (pixel.y < 720.0) return float4(smpteMiddleA(pixel.x), 1.0); if (pixel.y < 810.0) return float4(smpteMiddleB(pixel.x), 1.0); return float4(smpteBottom(pixel.x), 1.0); }