Konvergenzkorrektur mit HTPC und PixelShader bei JEDEM Projektor !

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Konvergenzkorrektur mit HTPC und PixelShader bei JEDEM Projektor !

      Hallo,
      ich bin wirklich ganz frisch hier und möchte mich als Erstes für all die Tipps, Kniffe und Problemlösungen bedanken, die hier im Laufe der Zeit zusammengetragen wurden!
      Ganz großes Tennis...

      Nun mein Beitrag:

      Auf homecinema-fr.com bin ich über einen sehr interessanten Thread gestolpert!
      Mit dem dort beschriebenen Script lässt sich z.B. bei MPC-HC ein Pixel Shader einrichten,
      der die RGB Kanäle auf zwei Achsen versetzt und somit eine überaus gute Konvergenzkorrektur bei quasi jedem Beamer zulässt.

      Dies geschieht in sechs einzeln anpassbaren Bildzonen (siehe Skizze), in beliebigen Schritten (ab 0,01 Pixel)

      -------------------------------------------------------------------
      |..........................|....................... ..|..........................|
      |............A.......... .|............B...........|............C............|
      |..........................|..........................|..........................|
      -------------------------------------------------------------------
      |..........................|....................... ..|..........................|
      |............D.......... .|............E...........|............F............|
      |..........................|..........................|..........................|
      -------------------------------------------------------------------

      Bin mit meinem TW4400 zu erstaunlichen Ergebnissen gekommen!

      Hier also der übersetzte Link zum Script, daß man einfach als Pixel Shader in MPC-HC nutzen kann:

      http://translate.googleusercontent.com/translate_c?hl=de&prev=/search%3Fq%3Dconvergence%2Bshader%2B%2522mpc-hc%2522%26hl%3Dde%26client%3Dfirefox-a%26rls%3Dorg.mozilla:de:official%26biw%3D1123%26bih%3D493%26prmd%3Divnsfd&rurl=translate.google.de&sl=fr&twu=1&u=http://www.homecinema-fr.com/forum/viewtopic.php%3Ff%3D1195%26t%3D29814317%26p%3D172727110&usg=ALkJrhjEGMTUdpXThA6Mw_oDnFAPz14HGA#p172727110

      Eure Meinug dazu würde mich wirklich interessieren, kann ja auch sein, daß es schon ain alter Hut für euch ist!
    • Update, hab es heute morgen an einem anderen PC zum laufen gebracht, ergo konnte ich es jetzt ausprobieren…
      Mein Win764 mag wohl kein DirectX9.
      Die Bedienung ist ja wirklich zum Kot…, aber es tut was es soll!
      Was super blöd ist, man kann minimal nur 0,5Pixel verschieben, dann aber in sehr feinen Schritten, also 0,6Pixel ;0,7Pixel; ect.
      Genau so frag ich mich, was passiert wenn das Alphabet erschöpft ist, die Zonen sind in A,B,C,D eingeteilt, das muss ich noch ausprobieren, hatte noch nicht genügend Zeit.
      Hat jemand damit schon praktische Erfahrung gemacht, hab ihr eine Idee wie man die 0,5Pixel Minimalgrenze drücken kann? :bier:


      Gruß

      Georg
    • pizzamampf schrieb:

      Gibts ne Möglichkeit das Script auf 9 Zonen aufzubohren



      klar, vermute mal so:


      Brainfuck-Quellcode

      1. //----------------------------
      2. //pixel shader: 6blocks
      3. //edit: res.b tex2D = (S0, Tex + float2 (B_Offset.y * dx, dy B_Offset.y *)) b.;
      4. //durch
      5. //res.b tex2D = (S0, Tex + float2 (B_Offset.x * dx, dy B_Offset.y *)) b.;
      6. //
      7. sampler s0 : register(s0);
      8. float4 p0 : register(c0);
      9. float4 p1 : register(c1);
      10. #define dx (p1[0])
      11. #define dy (p1[1])
      12. // ABC
      13. // DEF
      14. // GHI
      15. #define A_R_Offset_X 1.0
      16. #define A_R_Offset_Y 1.0
      17. #define A_G_Offset_X 0.0
      18. #define A_G_Offset_Y 0.0
      19. #define A_B_Offset_X 0.0
      20. #define A_B_Offset_Y 0.0
      21. #define B_R_Offset_X 0.0
      22. #define B_R_Offset_Y 0.0
      23. #define B_G_Offset_X 0.0
      24. #define B_G_Offset_Y 0.0
      25. #define B_B_Offset_X 0.0
      26. #define B_B_Offset_Y 0.0
      27. #define C_R_Offset_X 0.0
      28. #define C_R_Offset_Y 0.0
      29. #define C_G_Offset_X 0.0
      30. #define C_G_Offset_Y 0.0
      31. #define C_B_Offset_X 0.0
      32. #define C_B_Offset_Y 0.0
      33. #define D_R_Offset_X 0.0
      34. #define D_R_Offset_Y 0.0
      35. #define D_G_Offset_X 0.0
      36. #define D_G_Offset_Y 0.0
      37. #define D_B_Offset_X 0.0
      38. #define D_B_Offset_Y 0.0
      39. #define E_R_Offset_X 0.0
      40. #define E_R_Offset_Y 0.0
      41. #define E_G_Offset_X 0.0
      42. #define E_G_Offset_Y 0.0
      43. #define E_B_Offset_X 0.0
      44. #define E_B_Offset_Y 0.0
      45. #define F_R_Offset_X 0.0
      46. #define F_R_Offset_Y 0.0
      47. #define F_G_Offset_X 0.0
      48. #define F_G_Offset_Y 0.0
      49. #define F_B_Offset_X 0.0
      50. #define F_B_Offset_Y 0.0
      51. #define G_R_Offset_X 0.0
      52. #define G_R_Offset_Y 0.0
      53. #define G_G_Offset_X 0.0
      54. #define G_G_Offset_Y 0.0
      55. #define G_B_Offset_X 0.0
      56. #define G_B_Offset_Y 0.0
      57. #define H_R_Offset_X 0.0
      58. #define H_R_Offset_Y 0.0
      59. #define H_G_Offset_X 0.0
      60. #define H_G_Offset_Y 0.0
      61. #define H_B_Offset_X 0.0
      62. #define H_B_Offset_Y 0.0
      63. #define I_R_Offset_X 0.0
      64. #define I_R_Offset_Y 0.0
      65. #define I_G_Offset_X 0.0
      66. #define I_G_Offset_Y 0.0
      67. #define I_B_Offset_X 0.0
      68. #define I_B_Offset_Y 0.0
      69. float4 RGBOffset(float2 tex, float2 R_Offset, float2 G_Offset, float2 B_Offset){
      70. float4 res = 0;
      71. res.r = tex2D(s0,tex+float2(R_Offset.x*dx,R_Offset.y*dy)).r;
      72. res.g = tex2D(s0,tex+float2(G_Offset.x*dx,G_Offset.y*dy)).g;
      73. res.b = tex2D(s0,tex+float2(B_Offset.x*dx,B_Offset.y*dy)).b;
      74. return( res );
      75. }
      76. float4 main(float2 tex : TEXCOORD0) : COLOR
      77. {
      78. float4 res;
      79. if (tex.y < 0.5){
      80. if (tex.x < 0.33){
      81. //res=float4(1,0,0,0);
      82. res=RGBOffset(tex,float2(A_R_Offset_X,A_R_Offset_Y),float2(A_G_Offset_X,A_G_Offset_Y),float2(A_B_Offset_X,A_B_Offset_Y));
      83. }
      84. if (tex.x >= 0.33 && tex.x < 0.66){
      85. //res=float4(0,1,0,0);
      86. res=RGBOffset(tex,float2(B_R_Offset_X,B_R_Offset_Y),float2(B_G_Offset_X,B_G_Offset_Y),float2(B_B_Offset_X,B_B_Offset_Y));
      87. }
      88. if (tex.x >= 0.66){
      89. //res=float4(0,0,1,0);
      90. res=RGBOffset(tex,float2(C_R_Offset_X,C_R_Offset_Y),float2(C_G_Offset_X,C_G_Offset_Y),float2(C_B_Offset_X,C_B_Offset_Y));
      91. }
      92. } else {
      93. if (tex.x < 0.33){
      94. //res=float4(0.5,0,0,0);
      95. res=RGBOffset(tex,float2(D_R_Offset_X,D_R_Offset_Y),float2(D_G_Offset_X,D_G_Offset_Y),float2(D_B_Offset_X,D_B_Offset_Y));
      96. }
      97. if (tex.x >= 0.33 && tex.x < 0.66){
      98. //res=float4(0,0.5,0,0);
      99. res=RGBOffset(tex,float2(E_R_Offset_X,E_R_Offset_Y),float2(E_G_Offset_X,E_G_Offset_Y),float2(E_B_Offset_X,E_B_Offset_Y));
      100. }
      101. if (tex.x >= 0.66){
      102. //res=float4(0,0,0.5,0);
      103. res=RGBOffset(tex,float2(F_R_Offset_X,F_R_Offset_Y),float2(F_G_Offset_X,F_G_Offset_Y),float2(F_B_Offset_X,F_B_Offset_Y));
      104. }
      105. }
      106. return res;
      107. }
      Alles anzeigen
    • Naja in der Praxis schon arg enttäuschent, außer die Konvergenz ist komplett verschoben. Man kann halt nur um einen Pixel verschieben und bei mir ist grün/lila nen halben Pixel weg. Kommt im Endeffekt auf das gleiche raus. Eventuell kann man die Pixel farblich zusammenmischen. Aber ob es das so richtig bringt glaube ich trotzdem nicht.

      Achso für wer 3x3 möchte: Die Variablen sind schon richtig deklariert, aber der Algorithmus macht damit noch nicht:


      Statt 2 einfach das Bild auf der Höhe auch durch 3 trennen
      if (tex.y < 0.5){

      } else {


      ->

      if (tex.y < 0.33){
      abc
      } elseif (tex.y < 0.66) {
      def
      } else {
      ghi
      }
    Abonnement verwalten