Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Version 1.0.2 (2023 - 03 - 10)
- //This assumes you have the full piano width visible on camera, and are using the stock Automatic visual layout settings in Keysight
- //Requires obs-shaderfilter (note: not ShaderFilter Plus!)
- uniform bool setup_mode = true;
- uniform float guideline_width = 0.0;
- uniform float4 guideline_colour;
- uniform float key_top = 400.0;
- uniform float key_bottom = 0.0;
- uniform float B7_C8_position = 0.0;
- uniform float C8_edge_position = 0.0;
- uniform float bottom_right_corner_bend = 0.0;
- uniform float B6_C7_position = 0.0;
- uniform float B5_C6_position = 0.0;
- uniform float B4_C5_position = 0.0;
- uniform float B3_C4_position = 0.0;
- uniform float B2_C3_position = 0.0;
- uniform float B1_C2_position = 0.0;
- uniform float B0_C1_position = 0.0;
- uniform float A0_edge_position = 0.0;
- uniform float bottom_left_corner_bend = 0.0;
- //Do... the thing?
- float4 mainImage( VertData v_in ) : TARGET
- {
- //Make it nicer to call these variables
- float width = 0.001 * ((guideline_width+1000.0)/2000.0);
- float pinY = ((1000.0+(-1.0*key_top))/2000.0);
- float pinYmin = ((1000.0+(-1.0*key_bottom))/2000.0);
- float pinL = ((bottom_left_corner_bend)/50000.0);
- float pinR = ((bottom_right_corner_bend)/50000.0);
- float A0_raw = 0.0;
- float B0_raw = 0.03854167;
- float B1_raw = 0.17291667;
- float B2_raw = 0.3078125;
- float B3_raw = 0.4421875;
- float B4_raw = 0.57708333;
- float B5_raw = 0.71145833;
- float B6_raw = 0.84583333;
- float B7_raw = 0.98072917;
- float C8_raw = 1.0;
- float A0 = A0_raw+(A0_edge_position*-0.0001);
- float B0 = B0_raw+(B0_C1_position*-0.0001);
- float B1 = B1_raw+(B1_C2_position*-0.0001);
- float B2 = B2_raw+(B2_C3_position*-0.0001);
- float B3 = B3_raw+(B3_C4_position*-0.0001);
- float B4 = B4_raw+(B4_C5_position*-0.0001);
- float B5 = B5_raw+(B5_C6_position*-0.0001);
- float B6 = B6_raw+(B6_C7_position*-0.0001);
- float B7 = B7_raw+(B7_C8_position*-0.0001);
- float C8 = C8_raw+(C8_edge_position*-0.0001);
- //No idea what this v-in-uv business is, just copying shit
- float2 uv = v_in.uv;
- float remappedX;
- float range;
- //Disable warping in setup mode
- if(setup_mode == true)
- remappedX = uv.x;
- else
- //Warp based on ranges
- if(uv.x <= A0)
- remappedX = 0.0;
- else
- if(uv.x <= B0)
- remappedX = (((B0_raw - A0_raw) * (uv.x - A0) * (1 / (B0 - A0))) + A0_raw);
- else
- if(uv.x <= B1)
- remappedX = (((B1_raw - B0_raw) * (uv.x - B1) * (1 / (B1 - B0))) + B1_raw);
- else
- if(uv.x <= B2)
- remappedX = (((B2_raw - B1_raw) * (uv.x - B2) * (1 / (B2 - B1))) + B2_raw);
- else
- if(uv.x <= B3)
- remappedX = (((B3_raw - B2_raw) * (uv.x - B3) * (1 / (B3 - B2))) + B3_raw);
- else
- if(uv.x <= B4)
- remappedX = (((B4_raw - B3_raw) * (uv.x - B4) * (1 / (B4 - B3))) + B4_raw);
- else
- if(uv.x <= B5)
- remappedX = (((B5_raw - B4_raw) * (uv.x - B5) * (1 / (B5 - B4))) + B5_raw);
- else
- if(uv.x <= B6)
- remappedX = (((B6_raw - B5_raw) * (uv.x - B6) * (1 / (B6 - B5))) + B6_raw);
- else
- if(uv.x <= B7)
- remappedX = (((B7_raw - B6_raw) * (uv.x - B7) * (1 / (B7 - B6))) + B7_raw);
- else
- if(uv.x <= C8)
- remappedX = (((C8_raw - B7_raw) * (uv.x - C8) * (1 / (C8 - B7))) + C8_raw);
- else
- remappedX = 1.0;
- //Left corner pin warping
- if(uv.y < pinYmin && uv.y >= pinY && remappedX <= 0.5)
- remappedX = (remappedX - ( ((uv.y-pinY)*(1/(pinYmin-pinY))) * (1.0-(remappedX*2.0)) * pinL));
- if(uv.y >= pinYmin && remappedX <= 0.5)
- remappedX = (remappedX - ((1.0-(remappedX*2.0)) * pinL));
- //Right corner pin warping
- if(uv.y < pinYmin && uv.y >= pinY && remappedX > 0.5)
- remappedX = (remappedX - ( ((uv.y-pinY)*(1/(pinYmin-pinY))) * ((remappedX-0.5)*2.0) * pinR));
- if(uv.y >= pinYmin && remappedX > 0.5)
- remappedX = (remappedX - (((remappedX-0.5)*2.0) * pinR));
- //Get warped image to work with
- float2 baseUV = float2(remappedX, uv.y);
- float4 base = image.Sample(textureSampler, baseUV);
- //Show guidelines if in setup mode
- if(uv.x >= ((A0+(2*(A0_raw-A0)))-width) && uv.x < ((A0+(2*(A0_raw-A0)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B0+(2*(B0_raw-B0)))-width) && uv.x < ((B0+(2*(B0_raw-B0)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B1+(2*(B1_raw-B1)))-width) && uv.x < ((B1+(2*(B1_raw-B1)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B2+(2*(B2_raw-B2)))-width) && uv.x < ((B2+(2*(B2_raw-B2)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B3+(2*(B3_raw-B3)))-width) && uv.x < ((B3+(2*(B3_raw-B3)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B4+(2*(B4_raw-B4)))-width) && uv.x < ((B4+(2*(B4_raw-B4)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B5+(2*(B5_raw-B5)))-width) && uv.x < ((B5+(2*(B5_raw-B5)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B6+(2*(B6_raw-B6)))-width) && uv.x < ((B6+(2*(B6_raw-B6)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((B7+(2*(B7_raw-B7)))-width) && uv.x < ((B7+(2*(B7_raw-B7)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.x >= ((C8+(2*(C8_raw-C8)))-width) && uv.x < ((C8+(2*(C8_raw-C8)))+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.y >= (pinY-width) && uv.y < (pinY+width) && (setup_mode == true))
- base = guideline_colour;
- if(uv.y >= (pinYmin-width) && uv.y < (pinYmin+width) && (setup_mode == true))
- base = guideline_colour;
- return float4(base);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement