CiNcH Posted November 26, 2009 Share Posted November 26, 2009 (edited) Ich wollte hier mal einen Thread öffnen, in dem wir diverse Bildverbesserer diskutieren. Es soll zwar primär um die Möglichkeiten über die Shader gehen, dennoch sind auch generelle Diskussionen über Video-PostProcessing erwünscht. Evtl. sind ja ein paar AviSynth-Experten anwesend? YV12 Chroma Upsampling Viele wirklich sinnvolle Shader gibt es ja noch nicht. Einen möchte ich aber definitiv nicht mehr missen.. den 'YV12 Chroma Upsampling' Shader. Dieser löst das Problem der schlechten YUV-RGB-Konvertierung durch den Renderer oder die GPU. Hier der direkte Vergleich: Man muss das Bild nicht krass hochskalieren um das Problem sichtbar zu machen. Obige Screenshots wurden nicht weiter vergrößert bzw. entsprechen dem durch die Grafikkarte auf die native Auflösung des TFT (1680x1050) hochskalierten Bild. Dieser Shader lässt sich auch im DVBViewer einbinden (obige Screenshots stammen aus selbigem). Sharpen Complex 2 Diesen Shader habe ich in MPC getestet. Aktuell kann dieser nicht mit der öffentlichen Beta des DVBViewer benutzt werden, da dieser aktuell nur Shader Model/Profil ps_2_0 unterstützt (Sharpen Complex 2 nutzt bereits Model/Profil ps_2_a). Außerdem wollte ich den Effekt 'schärfen vor und nach der Skalierung' testen, was in MPC mit den da genannten 'Screen Space Shaders' möglich ist. Im DVBViewer werden die Shader prinzipiell vor der Skalierung angewendet. Den 'Sharpen Complex 2' Filter (bzw. Schärfefilter generell) vor dem Skalieren/Resizen anzuwenden ist von der Theorie her schon eine eher schlechte Idee, da durch die Schärfung erzeugte Artefakte ebenfalls skaliert werden und das Bild evtl. noch mehr verfälschen. In MPC vor der Skalierung angewendet wirkt das Bild stark überschärft. Ringing ist sehr deutlich sichtbar. Über die Parameter 'CoefFlou' und 'Sharpen_val0' kann man die Schärfung generell bzw. an Kanten etwas zurückfahren. Unbedingt sollte man vorher den 'YV12 Chroma Upsampling' Shader anwenden (MPC unterstützt das Verketten von Shadern), sonst werden die Artefakte durch die schlechte YUV-RGB-Konvertierung sehr stöhrend verstärkt. Wendet man den Filter auf das hochskalierte Bild an, ist die GPU-Auslastung wesentlich höher, weil natürlich sehr viel mehr Pixel vom Filter angefasst werden müssen und es wird eine durchaus potente GPU benötigt. Mit den Default-Parametern ist der Effekt des Filters sehr viel dezenter als wenn man ihn vor der Skalierung anwendet. Fiese Artefakte sind mir dabei nicht aufgefallen. Auch hier könnte man mit den Parametern spielen, aber in diesem Fall könnte man den Schärfeeffekt versuchen zu verstärken. Ich werde noch etwas damit spielen und hier evtl. einen detaillierteren Vergleich mit Screenshots posten. Spatial vs. Temporal Der Shader-Ansatz in MPC ist natürlich sehr interessant und es ist schön, dass das auch im DVBViewer angedacht ist, wenngleich man im Moment noch nicht so viel machen kann wie mit MPC. Aber auch in MPC könnte man das Konzept noch erweitern. Momentan kann man Shader nur auf ein Einzelbild ansetzen. Shader können also nur spatial und nicht temporal arbeiten. Ob theoretisch mehr möglich wäre, kann ich nicht beurteilen. Dann müsste der Renderer wohl mehr Bilder zwischenspeichern, was dann z.B. Algorithmen wie Motion Estimation ermöglichen könnte. Damit könnte man dann Sachen anstellen wie hochwertiges Deinterlacing, das auch temporal arbeitet oder Zwischenbildberechnung. Edited November 27, 2009 by CiNcH Quote Link to comment
nuts Posted November 26, 2009 Share Posted November 26, 2009 Wie bereits festgestellt ist es bei den verschiedenen Filtern wichtig an welcher Stelle sie einsetzen. Das Upsampling, Denoise vor dem Scaling, Schärfen anschließend. Künstlich bedeutet, das eine Texture mehrmals umgeformt wird, bevor sie in der (Darstellungs)Renderpipline landet. Sowas kann eine sehr spezialisierte App wie MPC machen, aber sobald man noch mehr vorhat, als nur eine datei wiederzugeben und ein bisserl text anzuzeigen, ist sowas schon aus resourcen gründen nicht möglich... Also nochmal zum besseren Verständnis: MPC-HC geht schon mit der Zielauflösung in die Renderpipline? Das Postprocessing kommt vor dem Scaling (MPC-HC intern) und die "gewöhnlichen" Shader (wie im DVBViewer) werden zu beginn der Renderpipline abgearbeitet (es sei denn der Pixelshader gibt selbst die Position vor). Vielleicht könnten wir das nochmal kurz klären. MPC-HC Scaliert praktisch auch über Shader? Weil dann könnten wir diese ja einfach in den DVBViewer einbinden und gehen auch mit der Zielauflösung in den Renderer. P.S. Was für einen Syntax verwenden eigentlich die Shader? Quote Link to comment
CiNcH Posted November 26, 2009 Author Share Posted November 26, 2009 (edited) Was Lars da mit künstlich genau meint, ist mir auch nach seiner Erklärung nicht klar. Im MPC-Code sieht das für mich (als kompletter DirectX und Custom Presenter Laie wohlgemerkt ) recht sauber aus. Da werden zuerst die normalen Pixelshader in einer Schleifen auf die Textur angewendet, dann wird die Textur skaliert und schlussendlich werden in einer weiteren Schleife die 'Screen Space Shaders' angewendet. Inwiefern das im DVBViewer-Kontext anders gemacht werden müsste oder evtl. nicht möglich ist, kann ich nicht beurteilen. P.S. Was für einen Syntax verwenden eigentlich die Shader? LSHL (High Level Shading Language) Edited November 26, 2009 by CiNcH Quote Link to comment
*ZX81* Posted November 29, 2009 Share Posted November 29, 2009 Habe eine Zwischenfrage zu MPC HC und der PixelShader Anwendung. Verwende auch den sharpen complex 2 bei DVD-Wiedergabe nach ffdshow lanczos Hochskalierung auf full HD. Habe nun die Parameter in sharpen complex 2 nach meinem Geschmack etwas angepasst und sehe, dass nach jedem Neustart diese Werte beibehalten bleiben - kann aber unter Win7Ulti nirgendswo eine Konfigdatei oder sowas ähnliches finden. Weiss wer, wo diese Parameter abgelegt sind? Quote Link to comment
gwr Posted November 29, 2009 Share Posted November 29, 2009 (edited) Also unter Windows XP habe ich vor kurzen gesuch wo der MPC seine Einstellungen speichert. Fündig geworden bin ich in der Registry unter: HKEY_CURRENT_USER\Software\Gabest\Media Player Classic da gibt es auch einen Schlüssel mit Shaders habe ich gesehen. Win 7 hmm... vielleicht auch so Edited November 29, 2009 by gwr Quote Link to comment
nuts Posted December 3, 2009 Share Posted December 3, 2009 Hey, also ich hab heute bissle mit dem Editor gespielt. Meint ihr es wäre möglich 2 Methode in einem Shader zu vereinen? Geklappt hats noch nicht, aber der Syntax ist mir auch noch sehr fremd. Dadurch könnte man nämlich eigene Live-TV Shader schreiben und die Verknüpfung der Shader außerhalb des DVBViewers lösen. Quote Link to comment
CiNcH Posted December 4, 2009 Author Share Posted December 4, 2009 Meint ihr es wäre möglich 2 Methode in einem Shader zu vereinen? Diese Idee hatte ich auch schon, war aber zu faul bis jetzt mich ernsthaft damit zu beschäftigen. Quote Link to comment
ZappoB Posted December 10, 2009 Share Posted December 10, 2009 Kann man einen Shader eigentlich mit einer Aktionsnummer versehen, damit man ihn mit der Fernbedienung de/aktivieren kann? Sharpen2 sieht bei DVDs echt toll aus, beim normalen TV-Bild wird aber oft nur das Grieseln verstärkt und ständig zur Maus zu greifen ist auch umständlich. Quote Link to comment
nuts Posted December 10, 2009 Share Posted December 10, 2009 Bis jetzt geht das wohl nicht. Wäre aber wikrlich super wenn man das einbauen könnte. Mit den Sahdern live zur Wiedergabe mit der Fernbedienung spielen ist wichtig. Settings müssen je Disc angepasst werden Quote Link to comment
bernix88 Posted December 31, 2009 Share Posted December 31, 2009 Hy, kenn mich noch nicht so mit den Video-PostProcessing aus aber wie binde ich den YV12 Chroma Upsampling in DVBViewer ein? Quote Link to comment
getilus Posted January 1, 2010 Share Posted January 1, 2010 Ganz einfach: - die aktuelle Beta des DVBViewers benutzen, - einer der Custom-Renderer auswählen, - dann unter Ansicht / Shaders den gewünschten Shader auswählen.... Gruß Quote Link to comment
bernix88 Posted January 1, 2010 Share Posted January 1, 2010 ah so einfach!, DAnke =) Quote Link to comment
Mojo Posted January 3, 2010 Share Posted January 3, 2010 Kann man einen Shader eigentlich mit einer Aktionsnummer versehen, damit man ihn mit der Fernbedienung de/aktivieren kann?[...] Mal ein Gedanke in eine andere Richtung... Kennt jemand von Euch einen Shader, der den Effekt "Gaußsches Weichzeichnen" bzw. "gaussian blur" simuliert? Interessant wäre das z.B. für das OSD: Wenn ein Kontextmenü aufgerufen wird, wird das Bild bzw. vielleicht sogar eine OSD Seite im Hintergrund mit dem Effekt dargestellt! Ich hab schon ein paar Codeschnippel gefunden, jedoch kenne ich mich mit Shadern überhaupt nicht aus und die, die ich bis jetzt probiert habe funktionierten nicht! Warum auch immer... Also wäre super, wenn jemand vielleicht einen Tipp für mich hat. Grüße Mojo Quote Link to comment
sw4y Posted January 3, 2010 Share Posted January 3, 2010 (edited) Auch mal eine Frage dazu: Habe die Shader bisher nicht wirklich benutzt, obwohl das Chroma-Upsampling auf dem Bild wirklich gut aussieht. Ist damit denn der Chroma-Shader im DVBViewer gemeint? Im MPC-HC ist der Shader ja auch als YV12-Chroma-Upsampling vorhanden - nur wo finde ich den Shader da (also als Datei), um ihn im DVBViewer zu integrieren? Ist das irgendwie machbar? *edit* Hat sich soeben erledigt - was ein Texteditor nicht alles zu Tage bringt... Bleibt nur noch die Frage unten. *edit* Desweiteren muss die Ausgabe ja zwingend als YV12 vorliegen. Wo finde ich eine Info darüber, wie der Viewer das Bild letztendlich ausgibt bzw. was sind die Voraussetzungen, um eine solche Ausgabe zu ermöglichen? Wäre nett, wenn da jemand Licht ins Dunkel bringen könnte. Edited January 3, 2010 by sw4y Quote Link to comment
nuts Posted January 3, 2010 Share Posted January 3, 2010 (edited) Unter Windows wird grundsätzlich mit RGB gearbeitet. D.h. auch die "erzwungene" YCbCr Ausgabe (Ati & Nvidia Controlcenter) ist nur nochmal (bei YCbCr Quelle) eine Rückwandlung (YCbCr -> RGB -> YCbCr). Daher ist es meist auch besser bei RGB zu bleiben (vorausgesetzt dein Display kommt damit zurecht). Trotzdem kann der Shader eingesetzt werden. Edited January 3, 2010 by nuts Quote Link to comment
sw4y Posted January 3, 2010 Share Posted January 3, 2010 Ok, mein Display sollte das können. Allerdings gibts im aktuellen Catalyst die Einstellungen für den Farbraum irgendwie nicht mehr... Lassen die sich irgendwie wieder einblenden? Quote Link to comment
nuts Posted January 3, 2010 Share Posted January 3, 2010 Die gibts noch Sind nur ziemlich versteckt (und ich hab gerade eine Nvidia verbaut und kann nicht nachsehen). Quote Link to comment
sw4y Posted January 3, 2010 Share Posted January 3, 2010 Es ist echt zum heulen ... Ich find die nicht Quote Link to comment
ZappoB Posted January 3, 2010 Share Posted January 3, 2010 Unter Desktops&Displays und unten links auf den virtuellen Bildschirm einen Rechtsklick, oder den kleinen schwarzen Pfeil anklicken. Wirklich saublöd, das alte CCC fand ich deutlich übersichtlicher! Quote Link to comment
sw4y Posted January 3, 2010 Share Posted January 3, 2010 Unter Desktops&Displays und unten links auf den virtuellen Bildschirm einen Rechtsklick, oder den kleinen schwarzen Pfeil anklicken. Wirklich saublöd, das alte CCC fand ich deutlich übersichtlicher! Danke für deine Hilfe - hatte es dann aber doch noch gerade selbst gefunden. Wirklich saublöd versteckt Quote Link to comment
CiNcH Posted April 11, 2010 Author Share Posted April 11, 2010 (edited) Ich habe heute mal einen Vergleich diverser Scaler in madVR gemacht. Diese Scaler arbeiten in den Pixelshadern der GPU. GPU: ATi Radeon HD 3650 Shader: 24 vec5 (120 Stream Processors) Quelle: TWILIGHT DVD VTS_01_2.vob Frame 5878 Player: MPC-HC Dekoder: Gabest MPEG-2 (Weave Deinterlacer) Renderer: madVR 0.11 Scaler: Nearest Neighbour/Bilinear/Bicubic60/Lanczos 3-Tap/Lanczos 8-Tap Screenshots: Der Test wurde mit einem 1680x1050 TFT durchgeführt, der Scaler musste also nicht mit voller HD-Auflösung arbeiten. Die Screenshots wurden nachträglich natürlich nicht mehr skaliert, sondern lediglich noch nach JPG mit niedriger Kompression gewandelt. Wenn ihr euch die Bilder ansehen wollt, dann stellt sicher, dass sie der Viewer selbige nicht skaliert. Wenn man die Bilder nicht in Originalgröße ansieht, macht das natürlich keinen Sinn.. Scaler GPU-Usage: Nearest Neighbour: 25-30% @ 300 MHz Bilinear: 30-35% @ 300 MHz Bicubic60: 35-45% @ 725 MHz Lanczos 3-Tap: 60-70% @ 725 MHz Lanczos 8-Tap: 100% @ 725 MHz Scaler Bildqualität: Nearest Neighbour: Bilinear: Bicubic60: Lanczos 3-Tap: Lanczos 8-Tap: Fazit: Der Lanczos 8-Tap ist nur unbedeutend schärfer wie der 3-Tap. Ohne die Frames direkt zu vergleichen sieht man da niemals einen Unterschied. Lanczos ist definitiv schärfer als Bicubic und Bicubic schärfer als Bilinear. Recht deutlich ist der Unterschied aber nur zwischen Lanczos und Bilinear. Den Preis zahlt man mit einer sehr hohen GPU-Belastung. Edited April 11, 2010 by CiNcH Quote Link to comment
CiNcH Posted April 11, 2010 Author Share Posted April 11, 2010 Hier noch ein Bild, das den Lanczos in Punkte Schärfe übertrifft: Es handelt sich dabei um den MPC-HC Bicubic Scaler mit Sharpen Complex v2 NACHGESCHALTEN. Quote Link to comment
Tüftler Posted April 11, 2010 Share Posted April 11, 2010 Wie mache ich letzteren denn, das Bild sieht echt Klasse aus. Wäre sowas mit den Customs jetzt schon machbar (Natürlich auf der HD4650 Mobility auf Vista, nicht der HD4550)? Quote Link to comment
CiNcH Posted April 11, 2010 Author Share Posted April 11, 2010 (edited) Wie mache ich letzteren denn, das Bild sieht echt Klasse aus. Wäre sowas mit den Customs jetzt schon machbar (Natürlich auf der HD4650 Mobility auf Vista, nicht der HD4550)? Man kann im DVBViewer die Shader nur vor das Scaling schalten, den Effekt beim Schärfen muss jeder selber beurteilen... Außerdem wird ein gewählter Shader immer angewendet. Für HD-Material braucht man Sharpening nicht unbedingt. Bei ATi macht der YV12 Chroma Upsampling Shader viel Sinn und da mehrere Shader nicht hintereinander geschalten werden können... Das Maximum mit dem DVBViewer ist schärfen (e.g. 'sharpen complex v2') mit anschließendem bilinearen Skalieren. Mit einer 4550 dürfte man da recht schnell an die Performancegrenzen stoßen. Edited April 11, 2010 by CiNcH Quote Link to comment
CiNcH Posted April 11, 2010 Author Share Posted April 11, 2010 (edited) Außerdem wird ein gewählter Shader immer angewendet. Für HD-Material braucht man Sharpening nicht unbedingt. Ich habe hier noch einen Shader (BT.601 -> BT.709) mit einer interessanten Codestelle gefunden: sampler s0 : register(s0); float4 p0 : register(c0); #define height (p0[1]) float4 main(float2 tex : TEXCOORD0) : COLOR { // original pixel float4 c0 = tex2D(s0,tex); // uncomment to activate for HD only /* if(height > 719) { return c0; } */ // r=c0[0], g=c0[1], b=c0[2] // RGB [16,235] to YUV: 601 mode (128 is not added to Cb and Cr) float y=0.299*c0[0] + 0.587*c0[1] + 0.114*c0[2]; float Cb=-0.172*c0[0] -0.339*c0[1] +0.511*c0[2]; float Cr=0.511*c0[0] -0.428*c0[1] -0.083*c0[2]; // YUV to RGB [16,235]: 709 mode (Cb and Cr are 128 less) float r=y+1.540*Cr; float g=y-0.459*Cr-0.183*Cb; float b=y+1.816*Cb; return float4(r,g,b,0); } Mit... if(height > 719) { return c0; } ... könnte man Schärfe Shader nur auf SD ansetzen ohne Untersützung durch die Applikation. Muss ich mir bei Gelegenheit mal durchüberlegen. Der Overhead bei HD dürfte minimal sein. Edited April 12, 2010 by CiNcH Quote Link to comment
nuts Posted April 11, 2010 Share Posted April 11, 2010 (edited) Gut zusammengestellt. Lanczos bringt bei mir auch das beste Ergebnis. Hast du die Peter Finzel DVD daheim? Der Vergleich mit dem dort enthaltenen Siemensstern (Aliasing) und den Burst' s (Ringing) sind auch interessant. "Schärfe" ist schließlich nicht alles P.S. Leider (noch?) ein sehr theoretisches Thema im DVBViewer, madVR ist auch noch nicht produktiv einzusetzen oder? Edited April 11, 2010 by nuts Quote Link to comment
CiNcH Posted April 12, 2010 Author Share Posted April 12, 2010 (edited) Hast du die Peter Finzel DVD daheim? Der Vergleich mit dem dort enthaltenen Siemensstern (Aliasing) und den Burst' s (Ringing) sind auch interessant. Nein, ich steh auch nicht so auf künstliche Tests. Aber ihr könnt da gerne auch was machen. MPC-HC mit framegenauem Stepping und madVR stehen jedem zur freien Verfügung. Ich habe lange nach einem geeigneten Testobjekt gesucht und das gewählte hat doch einige feine Details. Wichtig war mir nur eine progressive SD Quelle, damit ich auch ohne Deinterlacer auskommen kann. Interlaced Material progressiv machen ist immer mit Detailverlust verbunden. Außerdem pfuscht mir so kein DXVA hinein. Man weiß ja nie, was da alles über das Bild läuft. Im CCC habe ich sämtliche Bildverbesserer ausgeschaltet (die laufen glaub im Allokator-Kontext der Renderer über das Bild). P.S. Leider (noch?) ein sehr theoretisches Thema im DVBViewer Shader mittels API's für Bildnachbearbeitung einzusetzen ist generell noch eher theoretisch. Das VirtualDub-Projekt ist diesbezüglich wohl am aktivsten. Ich nehme aber an, dass sich in diesem Bereich noch einiges tun wird. madVR ist auch noch nicht produktiv einzusetzen oder? Macht keinen so schlechten Eindruck. Für interlaced dürfte der aber weniger gut geeignet sein. DXVA kann man damit vergessen. Und in den DVBViewer lässt er sich nicht einbinden. Wie gesagt kosten die hochwertigen Scaler einiges an GPU-Performance. Auch bei madVR wird man mit den meisten GPU's einen guten Kompromiss finden müssen. Vor allem weil alle denken, dass Shader in einem HTPC nichts bringen .. Mit einer 5670 dürfte aber eine hochwertige Pipeline kein Problem sein. Spline werde ich auch noch probieren.. Edited April 12, 2010 by CiNcH Quote Link to comment
CiNcH Posted April 12, 2010 Author Share Posted April 12, 2010 (edited) Hmm, versteh ich noch nicht. Ich wollte gerade den 'sharpen complex v2' so anpassen, damit er nur bei SD greift. Ich habe dazu auf ORF 1 HD (720p) getestet. Kein Shader: 20-30% @ 600 MHz 'sharpen complex v2': 50-60% @ 600 MHz (Schärfung klar sichtbar) Anschließend habe ich den Shader modifiziert: //////////////////////////////////////////////////// // Sharpen complex v2 (nécessite ps >=2a) //////////////////////////////////////////////////// sampler s0 : register(s0); float4 p0 : register(c0); float4 p1 : register(c1); // résolution de l'image #define width (p0[0]) #define height (p0[1]) // "largeur" d'un pixel #define px (p1[0]) #define py (p1[1]) //////////////////////////////////////////////////// // Paramètres //////////////////////////////////////////////////// // pour le calcul du flou #define moyenne 0.6 #define dx (moyenne*px) #define dy (moyenne*py) #define CoefFlou 2 #define CoefOri (1+ CoefFlou) // pour le sharpen #define SharpenEdge 0.2 #define Sharpen_val0 2 #define Sharpen_val1 ((Sharpen_val0-1) / 8.0) //////////////////////////////////////////////////// float4 main( float2 tex : TEXCOORD0 ) : COLOR { // recup du pixel original float4 ori = tex2D(s0, tex);; if(height > 719) { return ori; } //////////////////////////////////////////////////// // calcul image floue (filtre gaussien) //////////////////////////////////////////////////// float4 c1 = tex2D(s0, tex + float2(-dx,-dy)); float4 c2 = tex2D(s0, tex + float2(0,-dy)); float4 c3 = tex2D(s0, tex + float2(dx,-dy)); float4 c4 = tex2D(s0, tex + float2(-dx,0)); float4 c5 = tex2D(s0, tex + float2(dx,0)); float4 c6 = tex2D(s0, tex + float2(-dx,dy)); float4 c7 = tex2D(s0, tex + float2(0,dy)); float4 c8 = tex2D(s0, tex + float2(dx,dy)); // filtre gaussien // [ 1, 2 , 1 ] // [ 2, 4 , 2 ] // [ 1, 2 , 1 ] // pour normaliser les valeurs, il faut diviser par la somme des coef // 1 / (1+2+1+2+4+2+1+2+1) = 1 / 16 = .0625 float4 flou = (c1+c3+c6+c8 + 2*(c2+c4+c5+c7)+ 4*ori)*0.0625; // soustraction de l'image flou à l'image originale float4 cori = CoefOri*ori - CoefFlou*flou; //////////////////////////////////////////////////// // détection des contours //////////////////////////////////////////////////// // récuppération des 9 voisins // [ c1, c2 , c3 ] // [ c4,ori , c5 ] // [ c6, c7 , c8 ] c1 = tex2D(s0, tex + float2(-px,-py)); c2 = tex2D(s0, tex + float2(0,-py)); c3 = tex2D(s0, tex + float2(px,-py)); c4 = tex2D(s0, tex + float2(-px,0)); c5 = tex2D(s0, tex + float2(px,0)); c6 = tex2D(s0, tex + float2(-px,py)); c7 = tex2D(s0, tex + float2(0,py)); c8 = tex2D(s0, tex + float2(px,py)); // par filtre de sobel // Gradient horizontal // [ -1, 0 ,1 ] // [ -2, 0, 2 ] // [ -1, 0 ,1 ] float delta1 = (c3 + 2*c5 + c8)-(c1 + 2*c4 + c6); // Gradient vertical // [ -1,- 2,-1 ] // [ 0, 0, 0 ] // [ 1, 2, 1 ] float delta2 = (c6 + 2*c7 + c8)-(c1 + 2*c2 + c3); // calcul if( sqrt( mul(delta1,delta1) + mul(delta2,delta2) ) >SharpenEdge ) { //////////////////////////////////////////////////// // si contour, sharpen // return float4(1,0,0,0); return ori*Sharpen_val0 - (c1 + c2 + c3 + c4 + c5 + c6 + c7 + c8 ) * Sharpen_val1; } else { //////////////////////////////////////////////////// // sinon, image corrigée return cori; } } Man sieht anhand des Bildes deutlich, dass der Shader bei HD nichts mehr macht. Die GPU-Last ist aber weiterhin 50-60%. Scheint so, als ob er trotz des returns bei 'if(height > 719)' komplett abgearbeitet wird. sampler s0 : register(s0); #define height (p0[1]) //////////////////////////////////////////////////// float4 main( float2 tex : TEXCOORD0 ) : COLOR { // recup du pixel original float4 ori = tex2D(s0, tex);; if(height > 719) { return ori; } } Mit diesem Code ist die Shader-Auslastung auch nur noch bei 20-30%. Mehr sollte aber der komplette Shader auf Grund des Returns auch nicht machen. Edited April 12, 2010 by CiNcH Quote Link to comment
CiNcH Posted April 13, 2010 Author Share Posted April 13, 2010 (edited) OK, dynamisches Branching kann man mit HLSL bzw. Shader Model 2 wohl vergessen. Da wird immer alles abgearbeitet, d.h. man kann den Schärfeeffekt für HD im Shader mit dem if-Statement zwar abschalten, dennoch wird immer der gesamte Shader abgearbeitet. Am Ende wird dann entschieden, welches Ergebnis effektiv verwendet wird. Es wäre also doch vorteilhaft, wenn man auf Applikationsebene separate Shader für HD und SD definieren könnte. Man kann nur statisches Branching machen, d.h. Entscheidungen anhand einer Konstanten zu treffen, die vor dem kompilieren des Shaders bekannt ist. Dann wird nur der gewünschte Branch kompiliert. Ab Shader Model 3 wird dynamisches Branching unterstützt. Ich werde mal versuchen, den Shader als 'ps_3_0' kompilieren zu lassen, mal sehen, ob der DVBViewer das macht. Nachteil ist dann, dass "ältere" GPU's den Shader nicht unterstützen. Edited April 13, 2010 by CiNcH Quote Link to comment
vonMengen Posted April 13, 2010 Share Posted April 13, 2010 interessantes thema , das mich auch schon seit ein paar jahren beschäftigt , obwohl ich bei bildverbesserern eher absoluter purist bin , vor allem bei jeder art von electronic enhancern wie sharpenern in jeder inkarnation , die mich nicht sonderlich interessieren, weil nach meiner meinung meistens die nachteile die vorteile auch bei sd überwiegen. den yv 12 chroma mag ich allerdings sehr gern und gegen skalierung mit lanczos algorithmen hätt ich wirklich gar nichts . diese woche kommt noch ne 5770 , diese avs gerüchte über bessere interne skalierung der 5xxx serie möchte ich doch mal gerne in der praxis sehen. danke an cinch für die interessanten beiträge. best vm Quote Link to comment
CiNcH Posted April 13, 2010 Author Share Posted April 13, 2010 (edited) diese woche kommt noch ne 5770 , diese avs gerüchte über bessere interne skalierung der 5xxx serie möchte ich doch mal gerne in der praxis sehen. Also mit dem DVBViewer Custom Presenter wirst du da kein Glück haben. Der triggert stur das DirectX Bilinear. Ich denke, Standard EVR macht das auch nicht anders. Wenn ein Renderer was anderes macht, arbeitet er wahrscheinlich mit einem internen Pixelshader, der dann aber bis auf die Unterstützung des entsprechenden Shader Models von der GPU unabhängig ist. Die GPU hat da keinen Einfluss darauf außer sie bietet etwas spezielles an, was der Renderer dann aber erst nutzen muss. Und das, womit ATi ab der HD 4000 Serie wirbt... Enhanced DVD up-conversion to HD ... ist Augenwischerei. Damit ist lediglich gemeint, dass die Shaderleistung zusammen mit einem "hochwertigen" Scaler wie SimHD (was immer der auch macht, ich gehe mehr von einem Schärfen als wirklich von einem hochwertigen Scaler aus) dazu in der Lage ist, siehe hier. Ohne entsprechenden Software/Renderer-Support geht also nichts. Edited April 13, 2010 by CiNcH Quote Link to comment
vonMengen Posted April 13, 2010 Share Posted April 13, 2010 Also mit dem DVBViewer Custom Presenter wirst du da kein Glück haben. Der triggert stur das DirectX Bilinear. Ich denke, Standard EVR macht das auch nicht anders. Wenn ein Renderer was anderes macht, arbeitet er wahrscheinlich mit einem internen Pixelshader, der dann aber bis auf die Unterstützung des entsprechenden Shader Models von der GPU unabhängig ist. ja..bin fast überzeugt, dass das gerüchte sind ... aber ein neues spielzeug (5770) macht ja auch spass übrigens nicht uninteressant : der sweetspot bei meiner ati 3870 liegt beim ram bei 900 MHz (bei sd/ 1100 bei hd) ..drunter fängt sie minimal an zu ruckeln ab 920 Mhz ist das dann vorbei. Quote Link to comment
CiNcH Posted April 13, 2010 Author Share Posted April 13, 2010 übrigens nicht uninteressant : der sweetspot bei meiner ati 3870 liegt beim ram bei 900 MHz D.h. 1800 MHz, wenn man DDR berücksichtigt? Der DDR2 auf meiner HD 3650 läuft bei 500 bzw. 1000 MHz. Quote Link to comment
vonMengen Posted April 13, 2010 Share Posted April 13, 2010 D.h. 1800 MHz, wenn man DDR berücksichtigt? Der DDR2 auf meiner HD 3650 läuft bei 500 bzw. 1000 MHz. hi cinch ich hab ne gdddr4 3870 standardtakt ist 775/1125 also ein wenig höher wie bei der 3650 im biosmod uvd läuft sie sie bei : sd 300/950 1,1 V hd 600/1100 1,2V automatisch damit hab ich den lüfter halt bei 0 % Quote Link to comment
CiNcH Posted April 13, 2010 Author Share Posted April 13, 2010 (edited) standardtakt ist 775/1125 also ein wenig höher wie bei der 3650 500 MHz (bei 128 Bit) vs. 1125 MHz (bei 256-Bit) ist nicht nur ein wenig . Das ist eine Speicherbandbreite von 16 GB/s vs. 72 GB/s. Also wenn bei mir nichts ruckelt, dann sollte bei dir auf Grund der doppelten Busbreite selbst mit einem Speichertakt von 250 MHz immer noch nichts ruckeln... Edited April 13, 2010 by CiNcH Quote Link to comment
vonMengen Posted April 13, 2010 Share Posted April 13, 2010 (edited) 500 MHz (bei 128 Bit) vs. 1125 MHz (bei 256-Bit) ist nicht nur ein wenig . Das ist eine Speicherbandbreite von 16 GB/s vs. 72 GB/s. Also wenn bei mir nichts ruckelt, dann sollte bei dir auf Grund der doppelten Busbreite selbst mit einem Speichertakt von 250 MHz immer noch nichts ruckeln... tut sie aber definitiv unterhalb 900 , da liegt der sweetspot. drüber kann ich aktivieren was ich will ,von shader bis aeros und es läuft perfekt. ich schiebs mal auf den 2 monitorbetrieb mit 2 x 1920 er displays , und vll. die unterschiedlichen refreshs von 50/60hz. Edited April 13, 2010 by vonMengen Quote Link to comment
CiNcH Posted April 13, 2010 Author Share Posted April 13, 2010 (edited) Bist du dir sicher, dass nicht 1800 MHz deine DDR-Taktrate ist? Das was CCC anzeigt wird verdoppelt, nicht halbiert... Ja, Dual-Display bei dieser Auflösung braucht wohl eine hohe Speicherbandbreite. Da wäre ich mit meiner Karte definitv am Arsch... Edited April 13, 2010 by CiNcH Quote Link to comment
vonMengen Posted April 13, 2010 Share Posted April 13, 2010 (edited) Bist du dir sicher, dass nicht 1800 MHz deine DDR-Taktrate ist? Das was CCC anzeigt wird verdoppelt, nicht halbiert... Ja, Dual-Display bei dieser Auflösung braucht wohl eine hohe Speicherbandbreite. Da wäre ich mit meiner Karte definitv am Arsch... nee ist schon 900, mit eff. 1125 ist sie spezifiziert und apropos multimonitorbetrieb mit hochauflösenden monitoren : das treibt mich schon seit jahren in den wahnsinn.. da läuft alles perfekt auf einem und schwups..alles wieder am arsch bei zuschalten des 2. monitors (daher setz ich ja immer auf die etwas leistungfähigeren graka versionen) und auch apple bekleckert sich da überhaupt nicht mit ruhm nicht mal hi-end apps wie finalcut schaffen irgendwelche hwa auf dem 2.monitor. (über hwa beim os 10.6 schweigen wir mal). mit opencl und quicktime x solls besser werden. Edited April 13, 2010 by vonMengen Quote Link to comment
vonMengen Posted April 15, 2010 Share Posted April 15, 2010 hab mir gerade mal das bios der HD 5770/1024MB GDDDR 5 angeschaut die taktet mit 400/900 im UVD Betrieb VGPU ist unter 1V (0,95) das sieht schon mal gut aus bau sie morgen mal ein. Quote Link to comment
CiNcH Posted April 16, 2010 Author Share Posted April 16, 2010 Hier noch der Scaler-Vergleich mit Standard EVR: Eindeutig Bilinear... Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.