Tutoriel – Ajout de LUT sur Table VPX

Tutoriel – Ajout de LUT sur Table VPX

Hugh Berney 30 mai 2021
Print Friendly, PDF & Email

Salut,

Voici un petit tuto pour LUTer une Table.

Regardez avant le tutoriel video sur Youtube qui vous donnera un bon apercu

Tutoriel video sur le LUT

1. Avant toutes choses, ca sert a quoi?

LUT ca permet de changer l’apparence (les couleurs) d’une table existante, un peu comme le POV (Point Of View – Angle de Vue) mais sur les couleurs.

Des Tables comme Tales Of The Arabian Night (TOTAN) et Mars Attack de Dozer CP Mod (bon c’est un peu plus que LUT sur celle là) ou encore Goldeneye l’utilise et permettre d’en changer via les MagmaSaves.

Lorsque vous jouez à ces Tables, si vous appuyez sur les magna cela change (en temps réel) les couleurs de la Table! Tout cela, gràce à LUT!

Donc ce Tuto est sur comment ajouter cette fonctionnalitées sur vos tables preferées (et avec l’accord de l’auteur les repartager ^^)

Exemple de rendu de table lutée:

Table Batman d’origine
Table Batman LUTé en niveau de gris
Table Batman LUTé en Ultra-violet / Neon

2. Un peu de théorie, qu’est-ce que LUT?

LookUp Table: C’est à dire un tableau d’équivalence..
Bon vous me direz ca veut pas dire grand chose, mais si je vous dis un tableau d’équivalence de couleurs, peut-être ca commence à gratter? (non toujours pas, merde…)

Un LUT c’est une image (128×16 pixels pour VPX) qui permet de changer les couleurs (ou plutot degradé) d’une autre image. On peut le voir comme mettre une feuille plastique transparente de couleur sur notre table ^^ (le mec me prends pour un con ou quoi?), mais une feuille magique ou la couleur modifiée dépend de la couleur à modifiée (putain la phrase..!)

La version 10 de VP a introduit la gestion de LUT (voilà un extrait du changelog — liste des changements de chaque version de VP)

- new (optional) color grading step
like in movies or photography, one can now add an (almost) artificial color grading step at the very end of the rendering process
(see https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/ColorGrading/index.html
and skip to 'Color Correction' to learn more about how this is supposed to work and for a clean 1:1 mapped 256x16 LUT texture to start with, the default table also includes one as ColorGradeLUT256x16_1to1.png)
you can load the 256x16 LUT texture via the Image Manager like any other image, and then select it in the Backdrop->Colors&Formatting options
(it can also be changed dynamically via the ColorGradeImage variable of the table in the script,
for example to change the look of a table completely (invert colors, make everything red/blue/whatever, etc))"

Traduction:

"- nouvelle (optionnelle) étape de degradé des couleurs comme dans les films et photo, on peut maintenant ajouter une étape (presque) artificiel de dégradé des couleurs à la fin du processus de rendu (voir see https://docs.unrealengine.com/latest/INT/Engine/Rendering/PostProcessEffects/ColorGrading/index.html et aller à "Color Correction" pour en apprendre plus sur comment cela fonctionne et pour obtenir une texture LUT de depart 1:1 de 256x16, un fichier LUT de départ ColorGradeLUT256x16_1to1.png est aussi inclut dans la table par défaut de VPX)
Vous pouvez charger un fichier LUT de 256x16 via le Image Manger comme tout autres images, et après le selectionner dans les options Backdrop->Colors&Formatting options
(il peut aussi être changer dynamiquement via la variable ColorGradeImage de la table dans le script VBS, pour changer, par exemple, complétement l'aspect de la table (inversion des couleurs, mettre tout en rouge/bleu/n'importe quoi, etc))"

En savoir plus:

Bon je vois que j’en ai perdu quelque-uns, donc revenons à nous moutons, comment le faire pour nous!

3. Comment LUTer?

On va voir deux méthodes, la statique (en changant un paramètre de la table), la dynamique (via les magna saves)

A. LUT Statique (Débutant volontaire ^^)

Super facile et à la portée de (presque) tout le monde!

D’abord on clone une table qui n’a pas de LUT (Lethal Weapon), donc duplique le fichier et on la renomme “Lethal Weapon – LUT”.

Une fois la nouvelle Table ouverte, on commence par ouvrir le menu Table / Image Manager (F3) (Image Manager permet de gérer TOUTES les images utilisées par la table ^^), on importe le fichier LUT qu’on veut appliquer sur la Table (une liste de fichier LUTs un peu plus bas), par exemple “LUTgrayscale.png”.

Super, on a fait la moitié du taf!

Après on va dans les proprietés (Properties) de la Table (le menu de droite),on doit eventuellement être sur qu’on a selectionné la table avec le menu View / Backglass/POV (Ctrl + Space), et on peut changer la proprieté / attribut “Color Grading LookUpTable(256×16)”, ce menu affiche les images du Image Manager, donc on selectionne son fichier “LUTgrayscale” (il n’y a pas d’extension — .png — dans cette liste, juste le nom).

Et voilà on lance sa Table et magie!

Si on est content, on l’ajoute dans notre front (Pinball X, Pinup, ..) et voila!

PS:
Il se peut que la Table se charge avec notre nouvel effet puis revienne à son état d’origine direct après ou pendant le jeu, dans ce cas, cela signifie que la Table utilise deja LUT et “écrase” notre LUT chargée manuellement, on peut se demerder, mais il faut passer par du script (VBS) dans ce cas.

Quelques LUTs (click droit / enregistrez sous pour les enregistrer)

B. LUT Dynamique (Avancé)

Pre-réquis:

  1. savoir éditer (sans forcément le comprendre) le script d’une Table
  2. la table choisie n’utilise PAS les MagnaSave (après on peut utiliser un autre bouton pour changer les LUT, mais pas décrit ici)

Bon maintenant c’est cool notre Table est en niveau de gris, mais c’est un peu con, car on a maintenant deux tables et en plus quand on joue avec notre pote Pierre-Etienne-Mathieu, ce con aime pas la table en gris et nous on kiffe, alors on peut pas jouer ensemble sur la meme Table.

Mais voici la solution (alternative on dégage Pierre-Etienne-Mathieu), le LUT dynamique!

En gros, on va pouvoir avoir plusieurs LUT sur une même Table et en changer via les Magnasaves!

En premier, on fait une copie de sa table, ou on copie le script. Comme ca, au cas ou on fait une boulette, on ne crit pas: putain, quel connard le mec, il m’a fait buggé ma table préféré et maintenant j’ai arreté le flipper et repris ma vie en main!

Ensuite, on s’assure que la table n’utilise pas déjà LUT pour une autre raison (Batman – Data East 1991 l’utilise pour un effet visuel sur les lampes (GI) dans le je), on va dans le script et on cherche “ColorGradeImage” si on trouve un truc, soit:

  1. on est pas un aventurier (booh!) et on change de table
  2. on est un fou et on s’en bat les steaks (et on parle pas comme ca d’abord), et on accepte que notre effet LUT “saute” de temps en temps (et qu’on doive le re-changer en cours de partie avec les Magnasaves)
  3. on assume comme un homme (ou une femme d’ailleurs) et on dé-active cette ligne (on la commente avec une apostrophe — c’est un ou une apostrophe?) et on perd cette fonction de la table (on aura plus cet effet visuel dans le jeu) — donc sur Batman, plus d’effet sur les lampes lorsqu’on fait la rampe de la Batcave (moi j’aime pas alors je l’ai dé-activé)
  4. on est un ninja et on adapte chaque LUT utilisés (et deja on comprend cette phrase :P), donc en gros on fonction du LUT en cours, on aura aussi un LUT spécifique pour cet effet! (note de votre humble rédacteur, faut être un peu taré pour faire ca!)

Note: il peut avoir plusieurs utilisation de “ColorGradeImage” dans la table, donc on continue de chercher si on en trouve une.

Bon, on va considérer qu’on est sur une table qui n’a aucune réference à “ColorGradeImage”, parceque faut aller bouffer après et le temps presse.

Alors c’est “assez simple”, on commence par importer les LUTs qu’on veut utiliser via Image Manager.

Apres on édite le script et on ajoute les variables dont on aura besoin juste avant le “Table1_Init” (la ou les autres variables / constantes sont définies).

' permet de dé-activer le changement de LUT avec les magna saves (True -> activer, False -> dé-activer) -- en gros si ca te fait chier un jour tu pourras changer ca et ta table n'aura plus la fonction des LUTs
Const LUT_Enable = True
Dim luts, lutpos
' Une liste d'images (importer via l'Image Manager) LUT possible sur la table
luts = array("LUT1on1", "LUTblacklight", "LUTGrayScale" )
' lutpos: index (position dans notre liste de LUT) du LUT en cours, on met 0 par défaut, donc le "LUT1on1", donc par défaut (quand on lance la table) on aura l'aspect d'origine de la Table
lutpos = 0

à, on prend une pause et on se dit, est-ce que je veux vraiment m’imposer ca?
Oui, cool!
Non, bah t’inquiète, je comprends!

Après on cherche pour la réfèrence “Table1_KeyDown”, en gros c’est une fonction (Sub) qui est appellée lorsque le joueur appuie sur un bouton (flipper, MagnaSave, …), ca devrait ressembler à ca:

Sub Table1_KeyDown(ByVal Keycode)
    If keycode = PlungerKey Then Plunger.Pullback
    If keycode = LeftTiltKey Then Nudge 90, 5:PlaySound SoundFX("fx_nudge", 0), 0, 1, -0.1, 0.25
    If keycode = RightTiltKey Then Nudge 270, 5:PlaySound SoundFX("fx_nudge", 0), 0, 1, 0.1, 0.25
    If keycode = CenterTiltKey Then Nudge 0, 6:PlaySound SoundFX("fx_nudge", 0), 0, 1, 0, 0.25

    If vpmKeyDown(keycode) Then Exit Sub
End Sub

Et nous, on veut ajouter le code de gestion des LUT de notre table via les MagmaSaves juste avant la ligne: “If vpmKeyDown(keycode) Then Exit Sub”, si on a pas cette ligne juste avant le “End Sub” (fin de la fonction!)

 ' Si le joueur appuie sur le MagnaSave de droite (keycode = RightMagnaSave) et que la gestion des LUT est activé (LUT_Enable = True)
 ' alors augmente l'index du LUT (lutpos = lutpos + 1) en cours, au lancement c'était 0, donc on ajoute 1, ca donne 0 + 1 = 1 (le mec me prend vraiment pour un con ou quoi?)
 ' après on a que trois LUT, donc on veut pas aller jusqu'a 171222119 (et puis ca fait beaucoup d'appuie sur les MagnaSave...), donc dès que notre "lutpos" est supérieur à notre nombre de LUT on revient au premier (mais pour un ordi, le premier, c'est 0, va comprendre..), donc en gros on boucle sur notre liste de LUT (un peu comme quand t'as fini une bière, bah t'en reprend une) (If lutpos > ubound(luts) Then lutpos = 0 : end if)
 ' et enfin on prend le nom du LUT qui est à notre nouvelle position (lutpos) dans notre liste de LUTs (luts) et on le met comme effet LUT sur notre table
 ' et boom la table passe en noir et blanc au premier appuie sur magma de droite, puis en ultra violet au second appuie, puis elle redevient sans effet au troisieme appuie, et rebelote si on continue (mais c'est pas vrai le mec me prend vraiment pour une bille!)
 If keycode = RightMagnaSave And LUT_Enable = True then
   lutpos = lutpos + 1 : If lutpos > ubound(luts) Then lutpos = 0 : end if
   table1.ColorGradeImage = luts(lutpos)
 End if
 ' pareil mais dans l'autre sens si on appuie sur le magna de gauche (si si, tu sais comme quand tu te regardes dans un mirroir, c'est pareil mais dans l'autre sens!)
 If keycode = LeftMagnaSave And LUT_Enable = True then
   lutpos = lutpos - 1 : If lutpos < 0 Then lutpos = ubound(luts) : end if
   table1.ColorGradeImage = luts(lutpos)
 End if

Donc avec le code qu’il y avait avant ca donne (sans commentaires ^^):

Sub Table1_KeyDown(ByVal Keycode)
  If keycode = PlungerKey Then Plunger.Pullback
  If keycode = LeftTiltKey Then Nudge 90, 5:PlaySound SoundFX("fx_nudge", 0), 0, 1, -0.1, 0.25
  If keycode = RightTiltKey Then Nudge 270, 5:PlaySound SoundFX("fx_nudge", 0), 0, 1, 0.1, 0.25
  If keycode = CenterTiltKey Then Nudge 0, 6:PlaySound SoundFX("fx_nudge", 0), 0, 1, 0, 0.25

  If keycode = RightMagnaSave And LUT_Enable = True then
    lutpos = lutpos + 1 : If lutpos > ubound(luts) Then lutpos = 0 : end if
    table1.ColorGradeImage = luts(lutpos)
  End if
  If keycode = LeftMagnaSave And LUT_Enable = True then
    lutpos = lutpos - 1 : If lutpos < 0 Then lutpos = ubound(luts) : end if
    table1.ColorGradeImage = luts(lutpos)
  End if

  If vpmKeyDown(keycode) Then Exit Sub
End Sub

Et tada, on lance la Table, on appuie sur les MagnaSave et… suspens…
Ca marche pas! bah ouai on fait une connerie, on relit, on recommence et on appuie sur les MagnaSave et ca marche pas! Bah c’est pas grave, c’est comme ca la vie, t’as toujours un pincab, alors soit heureux. Ou sinon, CA MARCHE BORDEL! yeah on est vraiment trop bon sur MTC!

Et voila, maintenant la question qui brule les levres de certains, c’est cool ton niveau de gris et l’ultra violet, mais je suis un artiste moi, j’ai besoin de plus que ca pour vivre (ou comment je fais de nouveaux fichiers LUTs!!)

Comment crée ses LUTs

Pré-requis: une âme d’artiste, un cerveau de Photoshoper (c’est bien beau de savoir peindre mais là, ca va pas être assez mon pote), Photoshop!
Avertissement: je suis pas graphiste moi alors c’est l’idée en gros, si tu veux en savoir plus, demande et je te dirais ^^

Si on parle anglais bah on lit le post de Flutter1 (https://www.vpforums.org/index.php?showtopic=40894&page=15#entry432876)
Sinon (à part apprendre l’anglais, au lieu de jouer tout le temps sur ton cab!) voilà mes explications.

Comme on a vu (si si, relis, je l’ai dit), VPX fournit un LUT sans aucun effet (un 1on1), donc ce qu’on cherche à faire c’est appliquer l’effet qu’on veut sur une table à ce LUT 1on1 (putain le mec a pris des trucs avant d’écrire ce tuto, c’est pas possible!)

Il y’a deux types de LUTs, les gros LUT bourrins qui marcheront sur toutes les tables (le niveau de gris, l’ultra violet) et les LUTs subtiles (tel un vol de colombes, un doux matin de printemps) qui affineront les details très spécifiques à une table (par exemple sur la table Goldeneye) et donc ne seront que de bien peu d’utilité sur une autre table (un peu comme les clefs de ta micra sur une BMW), mais la technique est la même.

On commence par ouvrir un screenshot de la Table sur laquelle on voudrait mettre en effet de ouf sur Photoshop, on ajoute une nouvelle couche/layer, on applique tout les effets (en gros on jongle avec la saturation des couleurs et autres) de ouf à cette nouvelle layer jusqu’à ce que le resultat qu’on obtienne sur l’image nous fasse dire: “Woa! C’est super beau ce que j’ai fait”, et on cherche une confirmation rapide dans notre entourage (bah ouai, en général c’est pas vraiment beau ce que t’as fait, c’est une notion très subjective la beauté…)

Après, on ouvre notre LUT 1on1 (le LUT sans effet) et on importe notre layer/couche de malade!, on devrait donc voir un effet similaire appliqué sur notre LUT (après dépendant de la subtilité ou pas de l’effet, ca saute pas au yeux sur notre LUT, résumé tu vois pas la différence de suite..), on exporte sous un autre nom notre LUT modifie “LUT-DEOUF.png”, et on relit le tuto pour l’utiliser sur notre Table.

Tadaaa!

Note: Si on est cool et qu’on a fait du bon taf, on partage!

5. Conclusion (on était bien à 5?)

Et voilà tu es maintenant un expert en (tur)LUT, fais en profitez les autres (hum, hum..)

Merci à tous et toutes pour leur travail et bon flip!

(Clin d’oeil à Nico Kara pour m’avoir mis sur le droit chemin!)


Sources :

Rédacteur : rompelstilchen

Permalien de la publication Facebook |ICI|

Afin de poursuivre l’agrément de ce document nous comptons sur vos retours, vos expériences propres, vos idées et informations sur le groupe facebook « Monte ton Cab » ! Nous pourrons alors l’améliorer et mieux le documenter.

N’hésitez pas à nous signaler toutes erreurs que l’on aurait pu glisser dans le document ou retour de liens qui ne fonctionneraient plus !

En espérant que ce document vous soit utile, vous en souhaitant bonne lecture….

Laisser un commentaire



Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.