Salut,
quelques nouvelles
et bien finalement et contre toute attente, j'ai été contacté pour une distribution commerciale de ce petit setup xpresso.
Je n'avais pas du tout fais ce truc dans une optique de vente. Étonné d'abord , enthousiaste ensuite, j'ai décidé de tenter l'aventure et de saisir cette opportunité pour changer un peu d'air , bref ...
PXL+DIRT est maintenant disponible a l'achat sur le site de PIXELLAB >> ici
un grand merci a tout ceux passés par là et tout particulièrement
Gr4ph0s pour son aide sur les scripts Python entre autre.
Ciao
-----------------------------------------------------------------------------------
Changelog:
-----Version 1.3-190930-----R21 / 2019.1.1
+ Fix compatibility issues with Cinema 4d R21
-----Version 1.1-190930-----R21 / 4.05 , 2018.1.3
+ Fix compatibility issues with Cinema 4d R21
-----Version 1.2-190708-----R19-R20 / 2019.1.1
+ Fix compatibility issues with version 2019+
+ Enhanced Round Edges feature
-----Version 1.1-181205-----R19-R20 / 4.05 , 2018.1.3
+ Fix compatibility issues with version 4.00+
+ Fix Low Coat* "Power Slider" interactivity
+ Fix High Coat* "Power Slider" interactivity
+ Fix High Coat* "Amount Slider" interactivity
+ Add drop-down menu to choose Textures preview size
-----Version 1.1-180330-----
+ Octane version 3.08 or above required +
+ Fix compatibility issues with version 3.08
-----Version 1.1-171103-----
+ Octane version 3.07-r2 or above required +
+ displace feature improvements+
+ general setup enhancement+
--------------------------------------------------------------------------------------------
------------------update--13/06/2017---------------------------------------------------
------------------update--27/05/2017---------------------------------------------------
Salut,
Apres une petite latence, voici donc une version un poil plus aboutie.
>>Plus d'info<<
un petit gif ainsi q'une vidéo pour montrer les principales fonctionnalités du setup.
Pour le reste il y a pas mal de choses décrites plus bas...
Displacement Feature update(novembre 2017)(Avril 2018)
------------------update--27/05/2017---------------------------------------------------
Salut,
je suis en train de faire un petit "helper" pour salir , vieillir ou créer plus facilement des matériaux abîmés et d'autres...
rien de bien compliqué vu mon niveau d'xpresso (pourtant j'avais fais la formation d'Aurety... il ya qq lustres...)
ici c'est Octane qui est utilisé mais j'ai commencé qq essais avec vray (shader curvature ).
Le tout est procédural, en gros ce sont les noeuds Noise et Dirt du pluggin d'octane qui sont dirigés via xpresso et les données utilisateurs.
J'ai arbitrairement divisé le le processus en 3 zones de l'objet
- les aretes de l'objet
- le corps de l'objet
- les coulures griffures (qui partent des aretes et s’étendent sur les corps de l'objet)
les paramètres sont encore a affinés/etoffés/simplifiés pour un usage +/- passe partout...
voila un petit .gif de principe
l'avantage du procédural c'est la légèreté de manipulation pas de bitmap a trimbaler et pourtant beaucoup de solutions de maps en jouant avec le détail et les diverses transformations a dispo..etc
mais avec Octane le gros désavantages est que tu ne peux pas attribuer un Nœud procédural(type Noise) en entrée du Displacement ni du Scatter Object d'ailleurs il bouffe que du bitmap
Pas de bol j'aimerais les utiliser pour faire du "dirt" un peu plus en volume en utilisant le noeud displacement du MixMaterial et le Scatter object pour faire des petits pâtés pour les soudures par exemples..
Donc je suis aussi en train de faire un version avec des bitmaps en entrée au lieu du noise procédural...
(Octane bake a la volée le Bruit etc.. natif de C4D mais ça bouffe une blinde de ressources pour une bonne qualité...donc ce n'est pas une solution)
encore un peu de recherche pour avoir une solution raisonnable et assez transversale entre les moteurs (vray/Octane)...
Ceci dit j'ai deux questions concernant xpresso et les données utilisateurs :
1) Je voudrais savoir si il est possible de contrôler l'affichage d'un groupe de Données Utilisateurs ?
un interrupteur (vert) ici contrôlerait aussi l'affichage ou non du groupe de données utilisateurs (rouge)
pour n'avoir d'affiché uniquement les paramètres des l'effets Actifs
comme sur le gif si dessus
j'ai vu que les groupes de données utilisateurs possèdent des ID mais je ne sais pas si c'est de la que je dois partir?
2) J'aimerais aussi savoir si a partir d'une donnée"Liste d'Objets" ( donnée Liens .. ) en bleu sur le gif au dessus je peux affecter un matériaux a un Objet comme si je le glissais dans la zone réservée de l'onglet Affectation du Matériaux ?
alors je ne sais pas trop mais peut être en utilisant via xpresso un mouvement dans la hiérarchie de l'object manager vers un neutre possédant un tag de texture du matériaux ou peut être mettant en connexion via xpresso ma "liste" d'objets et la zone d'affectation du matériaux ... mais je n'ai pas réussi a trouver le noeud correspondant dans xpresso ?
en tout cas merci de m'avoir lu, je ne sais pas si mes questions sont claires mais merci d'avance pour toute piste ou remarques etc...
++
ps/je posterais bien entendu ce truc si ça botte qq'un ?
pss/
exemples d'autres styles d'utilisation
ou bien des écorces/ peaux de bêtes..
Dernière modification par pxlntwrk ; 10/10/2019 à 11h34. Motif: mse a jour de la version
::::::::::::::
pxlntwrk.net
Salut,
ça pête !
GG
Expert en l'art de ne jamais finir mes WIPs persos
Ça en jette et c'est prometteur.
Mais est-ce applicable sur C4D directement, sans passer par les moteurs vray/Octane ? Comme vieillir des polygones vers le bord des arêtes, à l'instar de Substance Painter, un peu "métal / peinture " usée, abimée ?
My Blog □ Accepter une possibilité, c'est lui permettre de se réaliser ...
Salut,
@ Rudy je pense que tu peux gérer ca avec le moteur de C4d avec un Noeud "Occlusion Ambiante" dans les 2 sens (inversion de direction en produit) pour les concaves et convexes. Ensuite tu lui met un Bruit en Alpha que tu triture pour avoir un aspect "grunge".
Si tu veux Il y aussi le pluggin GrungeShader qui fait ça très bien...
personne pour mes lacunes en xpresso ?
ps/un début très sommaire avec les shader de AR R18 (mise en place rapide du principe sans contrôleurs)
http://www.cjoint.com/doc/17_02/GBlm..._dirtc4dAR.zip
Dernière modification par pxlntwrk ; 11/02/2017 à 21h36.
::::::::::::::
pxlntwrk.net
Merci pxlntwrk de ta réponse rapide et fournie, je vais éplucher tes infos
My Blog □ Accepter une possibilité, c'est lui permettre de se réaliser ...
En gros le principe est de gérer l'aspect du " grunge " en jouant sur les paramètres (echelle, octaves etc...) du bruit et la propagation est dirigée par la force et la distance de l'AO...
::::::::::::::
pxlntwrk.net
En "pure" xpresso je craint que ça sois impossible cependant voici une version qui fait les deux choses que tu veux mais via des noeud python.
Le noeud hide il te suffit de redéfinir les variables suivantes avec les id que tu souhaites cacher
Pour le second malheureusement tu ne peux ajouter/supprimer des objets via xpresso donc la je suis sur que la solution est uniquement pythonique et elle sera un peu plus dur à expliquer mais si tu veux que je t'explique je le ferais.Code:first_id_to_hide = [7, 8] second_id_to_hide = [1, 2, 3] third_id_to_hide = [4, 5]
Voici le fichier
pxlntwrk.c4d
Si tu veux voir en action http://recordit.co/J2BSWt99ee
Bon par contre il ne met pas à jour si le mat change mais cela peux être fait si tu veux que ça le fasse just say it
Dernière modification par gr4ph0s ; 11/02/2017 à 15h18.
SDK Specialist
MAXON Computer GmbH
yes c'est ça
T'es vraiment un tueur
merci beaucoup !!!
faut vraiment que je me mette a tes formations du serpent!!!
::::::::::::::
pxlntwrk.net
Tien une version modifié de mon code de mat_assignement maintenant si tu mets a jour le liens du mat et qu'un objet qui été dans la liste n'avais pas de mat alors il le rajoute automatiquement. Et si tu change de mat sa le change sur tout les objets
pxlntwrk_update2.c4d
A vrai dire fraudais que je reprenne le temps de faire mes vidéos... Mais pas facile en ce moment. D'ailleurs je pense que lorsque je reprendrais je traiterais ton sujet car c'est un très bon exemple des possibilité qu'offre python couplé à xpresso (notamment la possibilité de rajouter des objets/ tag / mat ce qui est impossible via xpresso)
EDIT: une autre version, si tu supprimes/ rajoutais le null cela recrais les mats. Du coup j'ai limité la possiblité au tag de rajouter 2 mats. En gros chaque tag que j'ajoute je les marques avec un ID unique
Du coup ceci me permet lorsque je supprime d'être sur que je supprime le mat créer via le xpresso et non un autre texturetag. Mais du coup avec ma limitation tu ne peux créer(via ton xpresso) qu'un seul matériaux sur chaque objet, même si tu as 2 xpresso avec le même objet dedans mais deux mat différent. A voir si cela pose problème et surtout je suis pas sur que ça sois bien compréhensible :pCode:bc = textag.GetDataInstance() bc.SetBool(1037123, True)
Dernière modification par gr4ph0s ; 11/02/2017 à 15h53.
SDK Specialist
MAXON Computer GmbH
a priori le materiaux est imposé car c'est le "sujet" des modifs (salissures...) donc pour l'instant j'ai supprimé "le lien" mat et remplacé par mon Mixmat directement. je me suis même permis de changer la projection par défaut en " TEXTURETAG_PROJECTION_CUBIC ".
après je vais voir aussi comment réagi tout ça avec copie, suppression... en tout cas merci encore
Dernière modification par pxlntwrk ; 11/02/2017 à 16h40.
::::::::::::::
pxlntwrk.net
@Graph0s,
l' affectation de materiaux marche bien,
mais il y a encore un truc que je n'arrive pas a faire avec ton noeud.
quand je supprime l'objet de la liste (DU) le tag de texture disparaît (Object Manager) = parfait
par contre quand je retire le tag de texture (OM) l'objet reste lui dans la liste (DU)= moins bien
désolé de te solliciter encore, merci d'avance
::::::::::::::
pxlntwrk.net
Juste un point qui va décevoir Rudy : L'occlusion ambiante n'est possible dans les deux sens qu'à partir de la R18. Avant, elle ne peut s'appliquer que sur les zones "concaves".
Pour des objets pas trop complexes, il y a peut-être aussi moyen de faire quelque-chose avec proximal.
Salut,
effectivement sur ma R17 il n' y a pas d'inversion mais cela fait un bail que je n'utilise plus les shader de AR, du coup je ne suis pas trop au fait des changements...
merci pour la précision Bru
::::::::::::::
pxlntwrk.net
Voila c'est good ! J'ai commenté ce que j'ai modifié dans le code histoire que ça sois plus simple pour toi à merger avec ce que tu as déjà modifié.
pxlntwrk_update3.c4d
SDK Specialist
MAXON Computer GmbH
Franchement t'es au top
si je puisse ...
par coquetterie je voudrais donner une couleur ( le top serait une icone perso ) a mon object Null qui me sert de "controler"
j'ai trouver un script ici que j'ai adapté pour pouvoir créer un objet neutre Nommé avec la couleur de mon choix.
ca marche tres bien ,mais en fait je n'ai besoin que de mon null déjà coloré de base car j'aimerai le charger depuis une lib4d par exempleCode:import c4dfrom c4d import documents from c4d import gui usrInput = "pxl DIRT" #Input dialog to name myobject def main(): #create the xpressoNULL myobject = c4d.BaseObject(c4d.Onull) #create a null object (myobject) doc.InsertObject(myobject) #Insert the object into the documents object manager myobject.MakeTag(1001149) #Add xpresso tag to myobject myobject[c4d.ID_BASELIST_NAME] = usrInput #Give myobject a name (comes from the input dialog) myobject[c4d.NULLOBJECT_ICONCOL] = True #Set "Icon Color" on in basic tab myobject[c4d.ID_BASEOBJECT_USECOLOR] = True #Set " Use Color" on automatic in basic tab myobject[c4d.ID_BASEOBJECT_COLOR] = c4d.Vector(0,1,0) #set "Display Color" in basic tab #Refresh the managers to show the new object c4d.EventAdd() main()
donc a priori un noeud python avec une de ces qq lignes (variables adaptées) connecté a mon null object dans xpresso ?
Dernière modification par pxlntwrk ; 11/02/2017 à 22h37.
::::::::::::::
pxlntwrk.net
Pour le logo je ne pense pas que ça sois possible (ou tu modifie aussi l'icon de tout les null) par contre si tu veux absolument ton truc custom, une solution est de créer un objet via un plugin et la tu pourras rajouter son icon personnalisé.. Mais bon c'est assez lourd et surtout ça surcharge de plugin.
Sinon voici avec le changement de couleur.
pxlntwrk_update4.c4d
SDK Specialist
MAXON Computer GmbH
cool merci encore x1000
et j'ai regardé un peu pour un truc un peu plus Custom on rentre dans de la grossesse artillerie non nécessaire ici...
::::::::::::::
pxlntwrk.net
Impossible de le dl, il me mets que je dois me loguer au forum, chose qui est faite
*Résolu*
Dernière modification par miroof ; 13/02/2017 à 11h39.
Expert en l'art de ne jamais finir mes WIPs persos
Salut Miroof
je n'ai pas encore mis de lien pour dl le contrôleur.
je fais ça dès que j'ai réglé mon histoire de choix entre procédural ou bitmap...
::::::::::::::
pxlntwrk.net
Ouais, je m en suis vite rendu compte ^
Expert en l'art de ne jamais finir mes WIPs persos
ce sujet m'intéresse particulièrement, mais étant en R15 sans autre moteur de rendu que AR...
Cependant, comme le demandait Rudy, il y a une soluce en Xpresso qui s'appelle GrungFX que j'avais chopé sur le fofo il y a quelques temps mais impossible de retrouver le thread ni le lien où j'avais téléchargé le bouzin...
Dernière modification par leBigYO ; 13/02/2017 à 22h39.
La chance sourit aux audacieux : pourvu qu’elle n’ait pas de caries.
http://yoniverse.jimdo.com/
Pour les ARistes: j'envisageais il y a quelque temps d'acheter un plugin de "grunge" que m'avais renseigné Floc... Mais j'ai tardé, est arrivée la R18 et je n'en ai ainsi plus eu besoin.
Je n'ai donc aucune idée de ce qu'il vaut, mais voici le lien: https://cinemaplugins.com/c4d-plugins/grunge-shader/#tab-id-1
Dernière modification par bru ; 20/02/2017 à 20h43.
Salut,
J'en parlais un peu ( plus haut ), utilisé avec Vray et ça marche assez bien , quoiqu' il faut quand même bien manipuler la map de noise pour obtenir l'effet souhaité...
de mon coté pas beaucoup d'avancement, je me suis un peu perdu dans
les videos d'introduction a python pour c4d de Graph0s ( un grand merci a lui pour l'ouverture de portes )
je ne m'en suis servi ici que pour la partie "GUI" (fonctionnement) donc rien de très folichon...(de ma part !)
j'ai donc
-plus ou moins calé le coté fonctionnement Données Utilisateurs
-commencé a rajouté une 4ème "couche" en amont sorte de "patine", avec du "micro-relief".
-esquissé une icone qui sert de bouton pour appeler l'objet Null controleur.
Un petit gif de WIP:
apercu de l'expresso contrôleur
et l'Octane MixMat contrôlé
le python utilisé ( pour correction si possible)
Noeuds xpresso:
>gestion du null controleur
>gestion du calque contenant les objets controlésCode:# Many Thanks!!! Graph0s## http://graphos.xyz/ import c4d def main(): obj[c4d.ID_BASELIST_NAME] = "PXL+DIRT" obj[c4d.NULLOBJECT_ICONCOL] = True obj[c4d.ID_BASEOBJECT_USECOLOR] = True obj[c4d.ID_BASEOBJECT_COLOR] = color
>exemple de gestion de l'affichage ou non des groupes de Données UtilisateursCode:# Copyright (C) 2013, Niklas Rosenstein# All rights reserved. # # Free for private and commercial use. # # This node can set the states if a Layer object, which is prohibited # by Cinema 4D's default 'Object' node. It will only set a state if a # port is actually connected with that state. import c4d def assoc_inports(node): r""" Creates a dictionary which associates the names of the node's input ports as the keys with the actual GvPorts' as the values. """ inports = node.GetInPorts() result = {} for inport in inports: name = inport.GetName(node) result[name] = inport return result name_to_id = { 'Solo': c4d.ID_LAYER_SOLO, 'Visible_in_Editor_View': c4d.ID_LAYER_VIEW, 'Visible_in_Render_View': c4d.ID_LAYER_RENDER, 'Visible_in_Managers': c4d.ID_LAYER_MANAGER, 'Animation': c4d.ID_LAYER_ANIMATION, 'Generators': c4d.ID_LAYER_GENERATORS, 'Deformers': c4d.ID_LAYER_DEFORMERS, 'Expressions': c4d.ID_LAYER_EXPRESSIONS, 'Locked': c4d.ID_LAYER_LOCKED, 'XRef': c4d.ID_LAYER_XREF, } def main(): if not Layer: return ports = assoc_inports(op) globals_ = globals() for name, id_ in name_to_id.iteritems(): port = ports[name] value = globals_[name] if port.IsIncomingConnected(): Layer[id_] = value Layer.Message(c4d.MSG_CHANGE)
Code:# Many Thanks!!! Graph0s## http://graphos.xyz/ import c4d def main(): zero_id_to_hide = [68] first_id_to_hide = [5] second_id_to_hide = [13] third_id_to_hide = [10] UD = link.GetUserDataContainer() for descId, container in UD: if descId[1].id in zero_id_to_hide: container[c4d.DESC_HIDE] = not(zero_bool) link.SetUserDataContainer(descId, container) if descId[1].id in first_id_to_hide: container[c4d.DESC_HIDE] = not(first_bool) link.SetUserDataContainer(descId, container) if descId[1].id in second_id_to_hide: container[c4d.DESC_HIDE] = not(second_bool) link.SetUserDataContainer(descId, container) if descId[1].id in third_id_to_hide: container[c4d.DESC_HIDE] = not(third_bool) link.SetUserDataContainer(descId, container)
Tags:
>Revenir au paramètres par défaut
Code:# " BaseList2D.AddEventNotification()" shared by Niklas Rosenstein on plugincafe.com## http://www.plugincafe.com/forum/forum_posts.asp?TID=11042 ### " Here's an example scene: " #### https://dl.dropboxusercontent.com/u/99829745/stuff/2015-01-23-AddEventNotification_Example.c4d # bh_resetRig shared by Horganovski on cgsociety.org forum ## http://forums.cgsociety.org/showthread.php?t=1241344 ### File Type: zip bh_resetRig.zip #### http://forums.cgsociety.org/attachment.php?attachmentid=176592 import c4d from c4d import gui def message(msg_type, data): if msg_type == c4d.MSG_NOTIFY_EVENT: event_data = data['event_data'] if event_data['msg_id'] == c4d.MSG_DESCRIPTION_COMMAND: desc_id = event_data['msg_data']['id'] if desc_id[1].id == 39: objList=doc.GetActiveObjects(True) for obj in objList: obj.SetRelPos(c4d.Vector(0,0,0)) obj.SetRelRot(c4d.Vector(0,0,0)) for id, bc in obj.GetUserDataContainer(): # Loop through each user data if bc.GetId()==c4d.DTYPE_REAL: # Test if it's a float user data val = bc.GetReal(c4d.DESC_DEFAULT) obj[id] = val def main(): obj = op.GetObject() bc = c4d.BaseContainer() obj.AddEventNotification(op, c4d.NOTIFY_EVENT_MESSAGE, 0, bc)
>Utilisation du bouton pour actionner des données utilisateur
>Utilisation du bouton pour appeler des commandes (ici supprimer les matériaux et calques inutiliseés)Code:# bh_resetRig shared by Horganovski on cgsociety.org forum## http://forums.cgsociety.org/showthread.php?t=1241344 ### File Type: zip bh_resetRig.zip #### http://forums.cgsociety.org/attachment.php?attachmentid=176592 import c4d from c4d import documents, plugins def message(msg_type, data): if msg_type == c4d.MSG_NOTIFY_EVENT: event_data = data['event_data'] if event_data['msg_id'] == c4d.MSG_DESCRIPTION_COMMAND: desc_id = event_data['msg_data']['id'] if desc_id[1].id == 42: def tool(): return plugins.FindPlugin(doc.GetAction(), c4d.PLUGINTYPE_TOOL) def object(): return doc.GetActiveObject() def tag(): return doc.GetActiveTag() def renderdata(): return doc.GetActiveRenderData() def prefs(id): return plugins.FindPlugin(id, c4d.PLUGINTYPE_PREFS) object()[c4d.ID_USERDATA,27]=True object()[c4d.ID_USERDATA,19]=True object()[c4d.ID_USERDATA,4]=True object()[c4d.ID_USERDATA,67]=True def main(): obj = op.GetObject() bc = c4d.BaseContainer() obj.AddEventNotification(op, c4d.NOTIFY_EVENT_MESSAGE, 0, bc)et le script qui sert a charger le toutCode:# bh_resetRig shared by Horganovski on cgsociety.org forum## http://forums.cgsociety.org/showthread.php?t=1241344 ### File Type: zip bh_resetRig.zip #### http://forums.cgsociety.org/attachment.php?attachmentid=176592 import c4d def message(msg_type, data): if msg_type == c4d.MSG_NOTIFY_EVENT: event_data = data['event_data'] if event_data['msg_id'] == c4d.MSG_DESCRIPTION_COMMAND: desc_id = event_data['msg_data']['id'] if desc_id[1].id == 38: c4d.CallCommand(1035351, 1035351) # Remove Unused Materials c4d.CallCommand(100004760, 100004760) # Supprimer les calques inutilisés def main(): obj = op.GetObject() bc = c4d.BaseContainer() obj.AddEventNotification(op, c4d.NOTIFY_EVENT_MESSAGE, 0, bc)
Code:## import c4d import os fn = os.path.join(os.path.dirname(__file__), 'PXL+DIRT') def main(): c4d.documents.MergeDocument(doc, fn, c4d.SCENEFILTER_MATERIALS | c4d.SCENEFILTER_OBJECTS) c4d.EventAdd() if __name__=='__main__': main()
Dernière modification par pxlntwrk ; 21/02/2017 à 01h51.
::::::::::::::
pxlntwrk.net
un petit up ..
rajout d'une couche "Sticker", un bitmap avec une couche alpha en entrée. Un peu gadget mais bon . Tout le reste reste ;-) procédural (only Octane nodes ).
utilisation du nouveau noeud "ADD" proposé par la version 3.06 d'Octane.
un .gif peut être un peu lourd a charger
Dernière modification par pxlntwrk ; 24/02/2017 à 00h58.
::::::::::::::
pxlntwrk.net
Ça a l'air assez mortel ton truc
Bravo !!
"One cross each." (Monty Python, The life of Brian)
C4D 21 - Octane C4D plug - 3 x GTX980, 2 x RTX2070 - Intel i7 6850
Yes, merci! je ne sais pas si cela sera tres util,mais je m'amuse bien,et surtout je comble pas mal de lacunes dans mes bases de cinema4d.
Introduction d'une fonction "Pattern", basée sur le shader "carrelage" de c4d.
Je passe du coté obscur ;-) en utilisant un shader c4d natif, mais c'est la condition pour utilser le displacement d'Octane tout en restant procédural.
un petit gif
::::::::::::::
pxlntwrk.net
Super cool ton truc !
SDK Specialist
MAXON Computer GmbH
::::::::::::::
pxlntwrk.net
Salut,
Un poil d'avancement.
avec en gros, réorganisation des rubriques et rajout d'entrées bitmap optionnelles pour driver la fonction "Coat".
l'état en video
Lien Vimeo >>
il faut encore que je test en détail qq autres situations ( murs, statues , route , trottoirs etc..) pour affiner les valeurs de bases.
Je mets le lien du bousin en l’état (testé actuellement uniquement sur C4DR18.041 et Octane Render 3.06)
L'archive contient la scène utilisée dans la vidéo ainsi que pour test un dossier a mettre dans le dossier script pour pouvoir appeler le rigg via une commande ou icone.Je ne sais pas du tout si cela marche autre part que sur mon Ordi.
Je suis preneur de tout retours, merci d'avance.
Lien archive PXL+DIRT wip
Dernière modification par pxlntwrk ; 01/03/2017 à 03h52.
::::::::::::::
pxlntwrk.net
C'est télécharger, je test ça des que je peux
Merci !
Expert en l'art de ne jamais finir mes WIPs persos