Page 3 of 5

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 4:15 pm
by emmanuel piat
Voici un 1er jet de post-traitements adaptés aux TV et aux moniteurs PC observés en vision proche, et éventuellement pour les mono DLP à fort ANSI disposant d'une optique de compétition (à tester). J'ai mis au point ces post-traitements sur un moniteur 24" observé avec environ 50 cm de recul car je n'ai pas d'autres imageurs pour le moment.

Avertissement : si vous aimez les sharpness poussés, ces réglages ne sont pas fait pour vous. J'ai été biberonné la moitié de ma vie au kodachrome et au "naturel" analogique de la projection de diapositives et ce sont là les sensations que j'aime retrouver. Par conséquent, ces réglages essayent de gommer le rendu numérique des images 2K en sacrifiant le moins possible la résolution et en poussant le piqué. Ce n'est pas spectaculaire mais le gain est réel, sans ajout d'artificialité numérique.

Ces réglages ont été mis au point avec des mires de luminance 1, 2 et 3 pixels affichées par dessus l'image du film, au centre. On peut le faire via un script avisynth que j'ai donné sur homecinema-fr ou via le filtre de Bitmap overlay de ffdshow (qui marche très bien et permet de mettre la mire ou on veut ds l'image). L'idée conductrice est d'obtenir des réglages qui respectent la géométrie de ces mires tout en ayant un profil de MTF de type passe-bas classique sur des optiques qui adoucit progressivement la montée des hautes fréquences. Les moyennes fréquences sont gonflées par le sharpen pour renforcer la sensation de piqué.

Les mires 1 2 et 3 pixels permettent de choisir le bon combo upscaling-downscaling qui doit respecter leur structure géométrique sans ajouter d'artefact (bordures altérées sur les mires 2 et 3 pixels, luminance du point/ligne centrale noir sur les mires 3 pixels modifié, mires 1 pixels détruites, ringing présent sur les bords de la mire au centre de l'image). Les combos qui remplissent ce CdC sont peu nombreux, et parmi ceux-ci beaucoup font trop perdre en résolution (MTF en berne). J'ai fini par choisir le compromis suivant qui m'a semblé intéressant car il permet ensuite de bien moduler les algos de sharpness : lanczos 4 en upscaling et lanczos 3 + AR en downscaling. L'AR est nécessaire pour corriger de petites altérations sur les mires 3 pixels.

Il y a 3 algos de sharpness insérés entre l'up et le downscaling, dans l'ordre :

1. un algo pour renforcer les moyennes fréquences sans créer d'artefact : LSFHC
LimitedSharpenFasterHC(strength=20)
Comme il y a 2 autres algos de sharpen derrière, je reste léger au niveau des réglages pour garder le naturel de l'image

2. un algo pour renforcer l'effet 3D : unsharp mask.
UnsharpHQ(THRESHOLD=25,SHARPSTR=0.3,SHOW=false)
Concernant l'effet 3D, je ne suis pas trop fan. Ca me rappelle les gadgets de mon enfance avec les disques qui comprenaient une image G et D et qu'on mettait dans une petite visionneuse à l'allure de jumelles. Les personnages étaient effectivement répartis sur différents plans mais on avait tjrs l'impression qu'ils étaient sans réelle épaisseur. Comme une image 2D n'a pas d'épaisseur, le unsharp mask me fait tjrs cet effet. Je l'utilise donc à dose homéopathique.

3. un algo pour compenser la perte de MTF sur certaines fréquences : swscaler de ffdshow
Luminance sharpening: 0.38
Chroma sharpening: 0
Si on pousse le réglage au delà de 1.0 environ, les mires commencent à s'altérer. Au delà de 0.4, je trouve que l'image perd en naturel...

Je sors de ffdshow en RGB32 (bizarrement le AYUV 4:4:4 altère les mires 2 pixels...). Il n'y a aucun gain à sortir en YV12 et laisser madVR faire la conv RGB avec le GPU du fait du combo up puis downsampling...

Au final ça donne :

SetMTMode(3,8) # remplacer 8 par le nombre de threads disponibles sur le CPU
ffdshow_source()
SetMTMode(2)
#HistogramY(ratio=0,offset = 10,showline =false)
ss=1.333
lanczos4resize(round(ss * last.width /8)*8,last.height)
lanczos4resize(last.width,round(ss * last.height /8)*8)
LimitedSharpenFasterHC(strength=20)
UnsharpHQ(THRESHOLD=25,SHARPSTR=0.3,SHOW=false)
SetMTMode(1)
GetMTMode(false) > 0 ? distributor() : last

+ swscaler de ffdshow
Luminance sharpening: de 0.12 à 0.38
Chroma sharpening: 0

+ RGB32 HQ conv + dithering

Pour madVR normalement les settings suivants n'interviennent pas vu la sortie de ffdshow en RGB, je les mets au cas où :

Chroma upscaling : Lanczos 4 + AR
image upscaling : Lanczos 4

Et enfin, ce qui est important :
image downscaling : Lanczos 3 + AR

Au niveau conso CPU et GPU ça reste très très léger sur un 8 coeurs et n'importe quelle CG fera l'affaire.

Il ne reste plus qu'à donner un petit nom à ces réglages adaptés à des diffuseurs ayant un fort CR ANSI et une bonne MTF, typiquement un moniteur 24" : "SARAH Settings" me va bien (Sharp Analog Rendering for good mtf And High anSi) ;)

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 5:02 pm
by Kazuya
Merci Emmanuel.
Pourquoi upscaler en lanczos 4 dans madVR ? :sweat:

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 5:09 pm
by Yahoo MMCrawler [Bot]
Salut vous deux :hai:

Merci Emmanuel, je ne dis rien, mais te suis avec intérêt ;)

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 6:25 pm
by emmanuel piat
@Kaz : ces settings sont pour les sources 1080p. Donc l'upscale de madVR ne devrait pas être actif ds ce cas vu qu'on rentre dedans en 2560x1440 pour chaque plan RGB. Si ce n'est pas le cas alors il y a un truc que je ne pige pas ds la logique de madVR...

Pour swscaler, le réglage dépend pas mal des sources. Il m'est arrivé de le descendre jusqu'à 0.12 ... Je vais le préciser ds le post.

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 6:35 pm
by Kazuya
Heu excuse-moi, j'ai pensé avisynth et j'ai écris madVR !
Donc pourquoi lanczos4 dans avisynth ?

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 7:24 pm
by emmanuel piat
Alors là je ne me suis pas posé de questions, j'ai testé de manière brute le rendu sur les mires 1,2 et 3 pixels des différentes combinaisons up-down. C'est un peu fastidieux surtout que comme je n'ai pas de projo, j'étais obligé de faire un snap puis un resize x2 pour dupliquer chaque pixel en un bloc 2x2 histoire de bien voir sur mon 24" l'état de la mire après le processing...

Déjà, je me suis rendu compte que bcp donnaient des résultats vraiment similaires et que peu donnaient des bons résultats. Le combo up-down proposé marche plutôt pas mal (minimisation des artefacts de ringing sans trop perdre en piqué) mais d'autres à base de spline fonctionnent aussi avec un rendu similaire... L'important pour ce type de rendu est que les mires 1 et 2 3 pixels survivent au passage up-down avec une MTF qui s'adoucisse au fur et à mesure qu'on monte en fréq. La plupart des combinaisons échouent sur ce CdC et parmi celles qui réussissent, bcp produisent une image trop "molle" qu'on ne peut pas ensuite re-dynamiser efficacement via le sharpen.

Re: Post-traitement pour diffuseurs 2K

Posted: Wed Feb 26, 2014 11:04 pm
by emmanuel piat
En pratique, le fait d'avoir une grande plage de variation pour le swcaler n'est pas très satisfaisant.
Pour l'éviter la solution est simple : il faut le régler ds la plage basse, par exemple à 0.12 et compenser avec autre chose en aval. Le seul truc qui vient après est le downscaling. Il faut donc renforcer ce dernier. Par ordre de renforcement progressif, on a les choix suivants :

bicubic 100 + AR
lanczos 4 + AR
lanczos 8 + AR

Le bicubic 100 + AR est celui qui fournit les mires les plus propres et aura le rendu le plus analogique. Les autres vont un peu plus loin en sharpness au prix d'une légère dégradation des mires 1 pixels. Le lanczos4 + AR est un bon compromis.

Re: Post-traitement pour diffuseurs 2K

Posted: Thu Feb 27, 2014 4:46 pm
by emmanuel piat
J'ai revu les réglages de sharpness à la baisse pour avoir quelque chose de vraiment propre sur moniteur à partir d'une base lanczos up et down. La même chose en base spline up et down (qui permet également de garder une bonne qualité de mire) sera plus doux et nécessitera de remonter les valeurs de sharpen. Bon évidemment le résultat n'est pas spectaculaire mais le but recherché n'est pas là...

SetMTMode(3,8) # remplacer 8 par le nombre de threads disponibles sur le CPU
ffdshow_source()
SetMTMode(2)
#HistogramY(ratio=0,offset=10,showline=false)
ss=1.333
lanczos4resize(round(ss * last.width /8)*8,last.height)
lanczos4resize(last.width,round(ss * last.height /8)*8)
LimitedSharpenFasterHC(strength=16.5)
UnsharpHQ(THRESHOLD=25,SHARPSTR=0.3,SHOW=false)
SetMTMode(1)
GetMTMode(false) > 0 ? distributor() : last

+ swscaler de ffdshow
Luminance sharpening: 0.11
Chroma sharpening: 0

+ RGB32 HQ conv + dithering

+ madVR image downscaling : Lanczos 4 + AR ou Bicubic 100 + AR

Re: Post-traitement pour diffuseurs 2K

Posted: Thu Feb 27, 2014 7:21 pm
by emmanuel piat
Pour aller plus loin que la base précédente en terme d'accutance sans rompre la propreté obtenue, il suffit de pousser le nombre de taps des resize (on peut le faire car on utilise le même algo en up et down, sinon on ne pourrait pas), ce qui donne le script suivant :

SetMTMode(3,8) # remplacer 8 par le nombre de threads disponibles sur le CPU
ffdshow_source()
SetMTMode(2)
#HistogramY(ratio=0,offset=10,showline=false)
ss=1.333
LanczosResize(taps=8,round(ss * last.width /8)*8,last.height)
LanczosResize(taps=8,last.width,round(ss * last.height /8)*8)
LimitedSharpenFasterHC(strength=16.5)
UnsharpHQ(THRESHOLD=25,SHARPSTR=0.3,SHOW=false)
SetMTMode(1)
GetMTMode(false) > 0 ? distributor() : last

+ swscaler de ffdshow
Luminance sharpening: 0.11
Chroma sharpening: 0

+ RGB32 HQ conv + dithering

+ madVR image downscaling : Lanczos 8 taps

Ca commence à marcher pas mal...

Et j'ai enfin tranché la question de savoir s'il faut ou pas du AR dans le downsize. Vu qu'on utilise le même algorithme d'up et downscaling, il ne faut surtout pas en mettre pour inverser correctement le upscaling. D'ailleurs ça se vérifie via une mire 1 pixel : si on met du AR, la mire 1 pixel n'est pas correctement reconstruite après downscaling. Pour une fois, c'est la solution qui nécessite le moins de GPU qui est la bonne, donc on ne va pas se plaindre...

Au niveau des trucs rigolos : si on met ss=1.33 au lieu de 1.333 les mires sont ruinées, ce qui montre que les algo de resize fonctionnent mieux pour certains ratios. Si on sort de ffdshow en YV12 au lieu de RGB32, les mires 2 pixels sont massacrées alors qu'elles sont nickelles en RGB... ce qui montre qu'il y a un pb de conv dans madVR (en tout cas avec ma CG ATI HD 4770)...

Re: Post-traitement pour diffuseurs 2K

Posted: Thu Feb 27, 2014 7:47 pm
by Kazuya
Et 1.5 en ss ça donne quoi ?
T'as d'autres multiples qui fonctionnent bien ?

T'as essayé le Spline144 à la place du lanczos dans avisynth ?

(bon si je suis ta logique, ça marchera pas car il n'y a pas de spline 144 dans madVR)