Advertisement
Guest User

Camera-to-Midi-Visualiser-Sync OBS shaderfilter

a guest
Mar 10th, 2023
227
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.30 KB | Source Code | 0 0
  1. //Version 1.0.2 (2023 - 03 - 10)
  2. //This assumes you have the full piano width visible on camera, and are using the stock Automatic visual layout settings in Keysight
  3. //Requires obs-shaderfilter (note: not ShaderFilter Plus!)
  4.  
  5. uniform bool setup_mode = true;
  6. uniform float guideline_width = 0.0;
  7. uniform float4 guideline_colour;
  8. uniform float key_top = 400.0;
  9. uniform float key_bottom = 0.0;
  10. uniform float B7_C8_position = 0.0;
  11. uniform float C8_edge_position = 0.0;
  12. uniform float bottom_right_corner_bend = 0.0;
  13. uniform float B6_C7_position = 0.0;
  14. uniform float B5_C6_position = 0.0;
  15. uniform float B4_C5_position = 0.0;
  16. uniform float B3_C4_position = 0.0;
  17. uniform float B2_C3_position = 0.0;
  18. uniform float B1_C2_position = 0.0;
  19. uniform float B0_C1_position = 0.0;
  20. uniform float A0_edge_position = 0.0;
  21. uniform float bottom_left_corner_bend = 0.0;
  22.  
  23. //Do... the thing?
  24. float4 mainImage( VertData v_in ) : TARGET
  25. {
  26.  
  27. //Make it nicer to call these variables
  28. float width = 0.001 * ((guideline_width+1000.0)/2000.0);
  29. float pinY = ((1000.0+(-1.0*key_top))/2000.0);
  30. float pinYmin = ((1000.0+(-1.0*key_bottom))/2000.0);
  31. float pinL = ((bottom_left_corner_bend)/50000.0);
  32. float pinR = ((bottom_right_corner_bend)/50000.0);
  33.  
  34. float A0_raw = 0.0;
  35. float B0_raw = 0.03854167;
  36. float B1_raw = 0.17291667;
  37. float B2_raw = 0.3078125;
  38. float B3_raw = 0.4421875;
  39. float B4_raw = 0.57708333;
  40. float B5_raw = 0.71145833;
  41. float B6_raw = 0.84583333;
  42. float B7_raw = 0.98072917;
  43. float C8_raw = 1.0;
  44.  
  45. float A0 = A0_raw+(A0_edge_position*-0.0001);
  46. float B0 = B0_raw+(B0_C1_position*-0.0001);
  47. float B1 = B1_raw+(B1_C2_position*-0.0001);
  48. float B2 = B2_raw+(B2_C3_position*-0.0001);
  49. float B3 = B3_raw+(B3_C4_position*-0.0001);
  50. float B4 = B4_raw+(B4_C5_position*-0.0001);
  51. float B5 = B5_raw+(B5_C6_position*-0.0001);
  52. float B6 = B6_raw+(B6_C7_position*-0.0001);
  53. float B7 = B7_raw+(B7_C8_position*-0.0001);
  54. float C8 = C8_raw+(C8_edge_position*-0.0001);
  55.  
  56. //No idea what this v-in-uv business is, just copying shit
  57.  
  58. float2 uv = v_in.uv;
  59. float remappedX;
  60. float range;
  61.  
  62.  
  63. //Disable warping in setup mode
  64.  
  65. if(setup_mode == true)
  66. remappedX = uv.x;
  67. else
  68.  
  69.  
  70. //Warp based on ranges
  71.  
  72. if(uv.x <= A0)
  73. remappedX = 0.0;
  74. else
  75. if(uv.x <= B0)
  76. remappedX = (((B0_raw - A0_raw) * (uv.x - A0) * (1 / (B0 - A0))) + A0_raw);
  77. else
  78. if(uv.x <= B1)
  79. remappedX = (((B1_raw - B0_raw) * (uv.x - B1) * (1 / (B1 - B0))) + B1_raw);
  80. else
  81. if(uv.x <= B2)
  82. remappedX = (((B2_raw - B1_raw) * (uv.x - B2) * (1 / (B2 - B1))) + B2_raw);
  83. else
  84. if(uv.x <= B3)
  85. remappedX = (((B3_raw - B2_raw) * (uv.x - B3) * (1 / (B3 - B2))) + B3_raw);
  86. else
  87. if(uv.x <= B4)
  88. remappedX = (((B4_raw - B3_raw) * (uv.x - B4) * (1 / (B4 - B3))) + B4_raw);
  89. else
  90. if(uv.x <= B5)
  91. remappedX = (((B5_raw - B4_raw) * (uv.x - B5) * (1 / (B5 - B4))) + B5_raw);
  92. else
  93. if(uv.x <= B6)
  94. remappedX = (((B6_raw - B5_raw) * (uv.x - B6) * (1 / (B6 - B5))) + B6_raw);
  95. else
  96. if(uv.x <= B7)
  97. remappedX = (((B7_raw - B6_raw) * (uv.x - B7) * (1 / (B7 - B6))) + B7_raw);
  98. else
  99. if(uv.x <= C8)
  100. remappedX = (((C8_raw - B7_raw) * (uv.x - C8) * (1 / (C8 - B7))) + C8_raw);
  101. else
  102. remappedX = 1.0;
  103.  
  104. //Left corner pin warping
  105. if(uv.y < pinYmin && uv.y >= pinY && remappedX <= 0.5)
  106. remappedX = (remappedX - ( ((uv.y-pinY)*(1/(pinYmin-pinY))) * (1.0-(remappedX*2.0)) * pinL));
  107.  
  108. if(uv.y >= pinYmin && remappedX <= 0.5)
  109. remappedX = (remappedX - ((1.0-(remappedX*2.0)) * pinL));
  110.  
  111.  
  112. //Right corner pin warping
  113. if(uv.y < pinYmin && uv.y >= pinY && remappedX > 0.5)
  114. remappedX = (remappedX - ( ((uv.y-pinY)*(1/(pinYmin-pinY))) * ((remappedX-0.5)*2.0) * pinR));
  115.  
  116. if(uv.y >= pinYmin && remappedX > 0.5)
  117. remappedX = (remappedX - (((remappedX-0.5)*2.0) * pinR));
  118.  
  119. //Get warped image to work with
  120. float2 baseUV = float2(remappedX, uv.y);
  121. float4 base = image.Sample(textureSampler, baseUV);
  122.  
  123.  
  124. //Show guidelines if in setup mode
  125.  
  126. if(uv.x >= ((A0+(2*(A0_raw-A0)))-width) && uv.x < ((A0+(2*(A0_raw-A0)))+width) && (setup_mode == true))
  127. base = guideline_colour;
  128. if(uv.x >= ((B0+(2*(B0_raw-B0)))-width) && uv.x < ((B0+(2*(B0_raw-B0)))+width) && (setup_mode == true))
  129. base = guideline_colour;
  130. if(uv.x >= ((B1+(2*(B1_raw-B1)))-width) && uv.x < ((B1+(2*(B1_raw-B1)))+width) && (setup_mode == true))
  131. base = guideline_colour;
  132. if(uv.x >= ((B2+(2*(B2_raw-B2)))-width) && uv.x < ((B2+(2*(B2_raw-B2)))+width) && (setup_mode == true))
  133. base = guideline_colour;
  134. if(uv.x >= ((B3+(2*(B3_raw-B3)))-width) && uv.x < ((B3+(2*(B3_raw-B3)))+width) && (setup_mode == true))
  135. base = guideline_colour;
  136. if(uv.x >= ((B4+(2*(B4_raw-B4)))-width) && uv.x < ((B4+(2*(B4_raw-B4)))+width) && (setup_mode == true))
  137. base = guideline_colour;
  138. if(uv.x >= ((B5+(2*(B5_raw-B5)))-width) && uv.x < ((B5+(2*(B5_raw-B5)))+width) && (setup_mode == true))
  139. base = guideline_colour;
  140. if(uv.x >= ((B6+(2*(B6_raw-B6)))-width) && uv.x < ((B6+(2*(B6_raw-B6)))+width) && (setup_mode == true))
  141. base = guideline_colour;
  142. if(uv.x >= ((B7+(2*(B7_raw-B7)))-width) && uv.x < ((B7+(2*(B7_raw-B7)))+width) && (setup_mode == true))
  143. base = guideline_colour;
  144. if(uv.x >= ((C8+(2*(C8_raw-C8)))-width) && uv.x < ((C8+(2*(C8_raw-C8)))+width) && (setup_mode == true))
  145. base = guideline_colour;
  146.  
  147. if(uv.y >= (pinY-width) && uv.y < (pinY+width) && (setup_mode == true))
  148. base = guideline_colour;
  149. if(uv.y >= (pinYmin-width) && uv.y < (pinYmin+width) && (setup_mode == true))
  150. base = guideline_colour;
  151.  
  152. return float4(base);
  153.  
  154. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement