PROJET AUTOBLOG


blog.fevrierdorian.com

source: blog.fevrierdorian.com

⇐ retour index

Personnaliser ses AOV dans Guerilla

dimanche 28 mai 2017 à 18:20

Ça fait un moment que je n’ai pas fais de tutoriel. En voici un tout petit principalement à destination des étudiants utilisant ou voulant (les biens inspirés :P ) utiliser Guerilla pour leur projet de fin d’année.

L’idée étant de faire un tuto pour sortir une aov personnalisé assignant une couleur suivant les objets. Nous allons ici utiliser des simples couleurs (rouge et bleu dans le cas d’un masque) mais sachez que vous pouvez remplacer cette couleur par une texture, de l’occlusion ou pleins d’autres choses.

En avant ! :enerve:

Ouvrez Guerilla. La première chose à faire c’est une petite scène de test. Un plan, une sphère c’est parfait :

Avec ça, Votre projet de fin d’étude semble bien partis. Encore un peu de boulot et Pixar pleurera devant vos rendus. :gniarkgniark:

Ouvrez le rendergraph par défaut, glissez-déposer la sphère et le plan depuis la Node List pour créer un path puis créez un material override (Ctrl+Espace dans le rendergraph, tapez « mat », puis Entrer). Enfin connectez-moi tout ça sous cette forme :

Je traduis le graph ci-dessus : L’objet Sphere va se faire overrider un paramètre par le nœud MaterialOverride. Cette opération est ensuite fusionnée aux modifications de la branche principale via un nœud union. Il en va de même pour l’objet Plane. :zinzin:

Ensuite, on clique sur MaterialOverride, on tape le nom de l’override que l’on souhaite créer. Ici (par exemple) « MyMask1 » de type Color. On assigne la couleur rouge. On fait de même pour le MaterialOverride du Plane mais de couleur bleu :

Information intéressante a cette étape : Si vous cliquez sur le petit « M » a droite, vous pourrez sélectionner un sous-shader, notamment Texture, Occlusion et Cloud. Si vous êtes joueur et que vous souhaitez rendre des attributs présents dans vos alembic vous pouvez regarder du côté de PrimVar :hehe: ).

Maintenant nous avons des overrides sur des objets. Il faut pouvoir les rendre ! :grenadelauncher:

Créez un nouvel aov (Cliquez sur le + à cote de l’aov de Beauty). Renommez-le comme vous le voulez (je l’ai appelé « MyMask1 » mais en fait ce n’est pas important ici):

Cliquez dessus puis, dans le champ Shader Color, mettez « MyMask1 » (c’est là qu’il faut mettre le même nom que les noms des overrides créés précédemment):

Faites un rendu (Ctrl+R) puis sélectionnez l’aov « MyMask1 » (dans le menu déroulant en bas à gauche de la RenderView) :

Et une petite image finale pour avoir une vision d'ensemble. :popcorn:

En espérant que ça vous mette le pied à l’étrier, n’hésitez pas à creuser un peu et à expérimenter. :joue:

A bientôt!

Dorian

:marioCours:

Construire un clavier mécanique pour le fun

samedi 27 mai 2017 à 22:24

Cela faisait un moment que je voulais construire un truc. En fait, quand je ne code pas, j’ai toujours envi de faire des trucs. En fait, quand je fais des trucs j’ai toujours envi de faire d’autres trucs. Je ne voyais rien qui puisse me motiver à aller jusqu’au bout. Puis l’idée d’un projet qui mélangeait électronique et bois passa: Un clavier mécanique fait maison. « Haha » me dis-je, « Faut vraiment rien avoir à faire de sa vie pour se lancer dans un truc aussi con ».

Je partais donc là dessus avec entrain. :dentcasse:

L’inception

Ce qui me donne envi de commencer un projet est souvent le fruit d’une maturation qui peut parfois commencer des années plus tôt.

Ici, suite à une augmentation du syndrome de canal carpien j’ai commencé à m’intéresser à l’ergonomie autour des claviers. J’ai découvert (et enfin compris) que les claviers chiclet (clavier plat d’Apple et d’ordinateurs portables) sont très mauvais pour le poignet, car ils stoppent le mouvement du doigt sur la touche très (trop) tôt et usent le muscle. Je suis rapidement tombé sur les claviers Ergodox puis mécaniques en général, les différents types d’interrupteurs et j’ai profité d’une offre intéressante sur le site Massdrop (un site pour riche voulant devenir pauvre) pour m’en offrir un.

Mais ce qui me fascinait c’était les gars qui construisaient leur clavier eux-mêmes… Il faut savoir que les kits à faire soi-même sont assez chers. Et c’est ainsi que je tombe sur le clavier Atreus dont je le me suis laissé aller à la lecture des différents journaux de construction disponible sur le dépôt. Celui-ci fut d’ailleurs ma référence principale.

Le résultât

Et sans plus attendre, la bête :

OK, j’avoue, ce n’est pas si impressionnant que ça. Mais c’est du bois qui brille et qui sent le bois tu vois… :sauteJoie:

Pour être honnête, je me suis foiré sur pas mal de points (ponçage et surtout traitement). Un bon prétexte pour en refaire un, un jour. :grenadelauncher:

L’Atreus

L’Atreus est un clavier dit 40 % (utilisant 40 % du nombre de touche classique) crée par Phil Hagelberg qui était fan de son clavier Ergodox mais voulait une version plus petite pour pouvoir s’en servir dans les cafés où il avait l’habitude d’aller. Le bonhomme a donc créé son clavier (design, conception et tout le tintouin), proposé un kit à l’achat et a mis l’ensemble en ligne pour que chacun puisse faire le sien (franchement, c’est la classe :bravo: ).

C’est donc un clavier portable open source assez simple à monter et bidouiller qui est resté dans ma tête longtemps et que j’ai décidé de commencer comme un projet à long terme, sans trop savoir dans quoi je me lançais.

Prix

Je commence directement par le prix, sans trop de contexte, j’expliquerais après. :seSentCon:

J’ai compris assez vite que, comparé à ce qu’on pourrait imaginer, les coûts allaient être importants. Les claviers mécaniques sont souvent chers. Ceux à faire soi-même n’y échappe pas, surtout au démarrage, quand on a pas le matériel. Il faut savoir que pour tout ce qui est électronique, ebay.com (avec la case Free Shipping coché) est votre ami. :siffle:

Voici ce que j’ai payé :

Description Site Prix
Découpe laser du boîtier sculpteo.fr 41.03 €
120 Interrupteurs Gateron marrons massdrop.com $32.99
Teensy 2.0 ebay.com $14.00
100 Diodes 1N4148 ebay.com $1.00
100 fils de soudure en étain double tête ebay.com $2.30
61 touches en plastique PBT noir ebay.com $18.00
10 vis et leur écrou Castorama 4.00 €
Pistolet à colle Castorama 10.00 €

Soit un total d’environs 116 €.

Notez que c’est une estimation grossière (pour les interrupteurs j’ai pris un paquet de 120 alors que seul 42 étaient nécessaires), mais ça vous donne une idée.

Viennent ensuite les frais annexes :

Description Site Prix
Fer à souder amazon.fr 20.00 €
Fil d’étain amazon.fr 5.00 €
Pince électronique Castorama 2.00 €
Multimètre (franchement ça aide) Castorama 10.00 €
1L d’acétone Castorama 8.00 €
500 ml d’huile de lin Castorama 8.00 €
Pot de cire Castorama 15.00 €
Convertisseur Micro-USB vers Mini-USB ebay.com $1.00
Câble Mini-USB vers USB (3 mètres) ebay.com $6.55

Je possédais déjà un certain nombre de ces objets (fer à souder, fil, multimètre).

Vous comprenez que ça revient cher. Si votre but est de faire des économies ce n’est pas la bonne voie. :nannan:

Découpe du boîtier via Sculpteo

Sur le dépôt officiel du projet il existe une version prête à être envoyé à un service de coupe laser à la demande : Pokono.

Le service n’est pas très cher mais étant placé aux États-Unis, les frais de port atteignaient, de mémoire, 50 $ pour, toujours de mémoire, 27 $ de coupe…

J’ai donc cherché un service similaire pour la France sans trop y croire et je suis tombé sur Scultpeo qui est beaucoup plus acceptable (même s’il force à utiliser l’envoie express, assez cher, ce qui est franchement dommage). Le site est plutôt bien fait et permet d’expérimenter les prix des matériaux assez facilement. J’ai donc modifié le fichier svg de Pokono pour Sculpteo.

Je suis parti sur un matériau en contre-plaqué (Plywood), qui permet de garder les rainures originales du bois, en peuplier (poplar):

J’ai retrouvé la facture finale (mais leurs tarifs ont un peu changés depuis):

Coût de fabrication 22,53 €
Envois express 11,66 €
Total HT 34,19 €
TVA 6,84 €
Total 41,03 €

Il n’y a pas d’autres choix que l’envoie express et c’est franchement dommage vu le prix… Mais bon…

Comme c’est de la découpe laser, le profile de la partie coupe est toute noir, il faut donc poncer. Je l’ai fais à la main puis je me suis dit que c’était un bon prétexte pour acheter un Dremel en promotion…

Traitement du bois

Allons-y tout de go : J’ai raté le traitement de mon bois (Avouez que c’est con sachant que c’était le principal intérêt du projet… :septic: )

J’ai d’abords poncé les bords de chacune des pièces pour retirer la brulure de la coupe laser (jusqu’ici ça va) puis j’ai voulu poncer la surface des pièces ce qui a eu pour effet de casser un certain nombre de fibres du bois.

Puis vient le traitement à l’huile de lin. Je suis parti sur un mélange térébenthine/huile de lin (la térébenthine servant à diluer l’huile de lin en vu de la faire pénétrer dans le bois) en augmentant le pourcentage d’huile de lin sur trois couche (70/30, 50/50, 30/70).

Pour ma première couche, je décide d’utiliser du brou de noix pour foncer le bois et accentuer les rainures. Premier fail, sans vraiment comprendre pourquoi, le brou de noix ne s’est pas dilué dans le mélange ce qui formait des petites gouttes sombres plutôt qu’un aplat uniforme.

Bon, ce n’est pas si grave me dis-je… :ideenoire:

J’ai ensuite fini avec une dernière couche 100 % huile de lin. Et bien il ne fallait mieux pas… Cette couche fit des gruaux (que vous pouvez constater dans les photos qui suivent). Je pense qu’une petite dilution 10/90 n’aurait pas fait de mal. :nervous:

C’est à ce moment-là que je décide d’acheter de la cire à bois pour sauver les meubles ( :jdicajdirien: ). Il faut bien avouer que l’efficacité de la cire n’a d’égale que la longueur de la liste des produits chimiques qui la compose…

Les interrupteurs

Je ne vais pas faire un énième guide des différents interrupteurs de clavier mécanique, il en existe des dizaines pour peu qu’on sache se servir de Google.

Comme je vous disais précédemment, j’avais déjà en ma possession un Keycool Hero 84 blanc (acheté sur Massdrop) avec des interrupteurs Kaihua Kailh bleu. J’ai fait une partie de Ballerina et tout Croc-Blanc dessus. Ils sont super mais un peu bruyant. J’ai eu l’occasion de tester des interrupteurs de la marque Gateron bleu et marron. Franchement ils sont vraiment géniaux. Du-coup je me suis fixé sur le Gateron marron. Puis une offre intéressante passa sur Massdrop et j’en pris un pack (120 pour n’en utiliser que 42 (coïncidence, je ne crois pas :pasClasse: ), le prix plus haut est donc un peu biaisé)…

J’ai “soudé” les interrupteurs au pistolet à colle. C’est assez efficace, bien que les trous de la planche maintiennent déjà bien les interrupteurs :

Les soudures

C’est mon moment préféré. Je faisais ça le soir après une journée de boulot en écoutant de la musique.

Vous l’aurez compris, on construit une matrice en soudant les LED horizontalement les unes aux autres. Il faut bien faire attention à la polarité des différents composants. Pour ça, la lecture du guide d’assemblage en amont est fondamentale et on y revient souvent, d’où l’intérêt de l’avoir à coté.

Puis vient la partie verticale, un peu plus complexe. L’idée est de dénuder les fils à l’endroit ou ils vont être en contact (et uniquement là pour éviter les faux contacts).

Puis on connecte chaque ligne de la matrice au microcontrôleur :

Notez que j’ai utilise des couleurs différentes suivant qu’on soude la ligne horizontale ou verticale.

Le Teensy 2.0 est un peu vicieux, car les numéros des broches ne se suivent pas. Jugez par vous-même :

Il faut donc faire attention si on ne souhaite pas se payer une resoudure intégrale. :baffed:

Une autre astuce consiste à utiliser des fils mâles/femelle pour éviter les bêtises et simplifier le montage. Sur un premier montage je trouve l’idée très intéressante. Et forcement, je n’ai découvert ça qu’à la fin de l’étape de soudure.

Les touches

Je voulais un profil SP SA (que je trouve super classe et vintage) mais la seule entreprise en fabriquant encore se situe aux États-Unis, est constamment en rupture de stock et les frais de port sont délirants. J’ai donc dû me rabattre sur un ensemble de touche sur ebay.com. J’ai simplement inversé la dernière rangée (celle du haut) avec la rangée du bas pour que les touches soient orientées vers mes pouces… Au final je suis assez content du résultat.

Le microcontrôleur

Les différents journaux de construction que j’avais lu m’avaient donnés envi de faire les soudures moi-même, sans circuit imprimé. J’optais donc pour le microcontrôleur Teensy 2.0, une petite planche de développement USB pas cher, compatible Arduino embarquant une puce ATmega32U4.

Le firmware

C’est souvent là qu’on panique. Je n’ai pas échappé à la règle. Je ne suis pas un habitué du développement sur microcontrôleur. J’ai donc fait quelques erreurs qui m’ont amené à dessouder et ressouder un certain nombre de choses alors que j’avais simplement compile avec les mauvaises options… Au lieu de ne rien faire quand j’appuyais sur les touches, le clavier renvoyait des lettres de manière bizarre (mais toujours logique).

La dernière chose bizarre que j’avais était que les touches Ctrl et Alt étaient inversées. Que voila un bon prétexte pour aller modifier le code de l’agencement des touches. :gniarkgniark:

Au passage, le code du firmware de l’Atreus s’appuie sur le firmware TMK (un firmware très connu après des bidouilleurs de clavier).

Montage final

Comme vous allez le voir, je n’ai pas trouvé de vis pile poil adapte à la hauteur du boîtier :

Si j’avais cherché un peu, j’aurais vu que qu’ebay regorge de ce type de vis (cherchez « m2 flat head » pour vous en convaincre). Qu’a cela ne tienne, il suffit donc de scier les bouts de vis avec une scie à métaux !

Après un combat sans pitié contre les probabilités, je conservais mes doigts et pouvais enfin fermer mon clavier :

Enfin, on branche son clavier pour commencer à écrire ses premières phrases et se familiariser avec l’agencement des touches. Puis, comme tout projet DIY, on le pose dans un coin pour ne plus jamais y toucher. :trollface:

Peut mieux faire ?

A peine…

En fouillant dans le depot, je suis tombé sur un script OpenSCAD :

De que quoi ? :bete:

Ctrl+T, openscad<enter>, OpenSCAD :

OpenSCAD is not an interactive modeller. Instead it is something like a 3D-compiler that reads in a script file that describes the object and renders the 3D model from this script file. This gives you (the designer) full control over the modelling process and enables you to easily change any step in the modelling process or make designs that are defined by configurable parameters.

:reflechi:

it is something like a 3D-compiler

:idee:

Un truc de TD en manque de sensation ! Génial !

J’installe OpenSCAD, j’ouvre le script et :

On dirait un truc fait pour moi ! :laClasse:

Mais regardons ce script de plus près :

// -*- mode: c -*-
/* All distances are in mm. */

/* set output quality */
$fn = 50;

/* Distance between key centers. */
column_spacing   = 19;
row_spacing      = column_spacing;

/* This number should exceed row_spacing and column_spacing. The
 default gives a 1mm = (20mm - 19mm) gap between keycaps and cuts in
 the top plate.*/
key_hole_size = 20;

/* rotation angle; the angle between the halves is twice this
   number */
angle = 10;

/* The radius of screw holes. Holes will be slightly bigger due
   to the cut width. */
screw_hole_radius = 1.5;
/* Each screw hole is a hole in a "washer". How big these "washers"
   should be depends on the material used: this parameter and the
   `switch_hole_size` determine the spacer wall thickness. */
washer_radius     = 4 * screw_hole_radius;

/* This constant allows tweaking the location of the screw holes near
   the USB cable. Only useful with small `angle` values. Try the value
   of 10 with angle=0. */
back_screw_hole_offset = 0;

/* Distance between halves. */
hand_separation        = 0;

/* The approximate size of switch holes. Used to determine how
   thick walls can be, i.e. how much room around each switch hole to
   leave. See spacer(). */
switch_hole_size = 14;

/* Sets whether the case should use notched holes. As far as I can
   tell these notches are not all that useful... */
use_notched_holes = true;

/* Number of rows and columns in the matrix. You need to update
   staggering_offsets if you change n_cols. */
n_rows = 4;
n_cols = 5;

Mhhh… On dirait un script avec des variables globales pour générer la structure du clavier… Si j’essayais de modifier deux trois variables, comme ça, juste pour voir… Après tout c’est vrai que l’Atreus n’a pas beaucoup de touches, une rangée supplémentaire de chaque coté ne ferait pas de mal… Et puis l’alignement des touches est un peu fort, sans parler de l’épaisseur… Qu’est ce qui se passe si je…

Quelques heures plus tard…

Il semble que les interrupteurs restant vont finalement trouver une utilité. :siffle:

A bientôt !

:marioCours:

Lister les channels d'un fichier OpenVDB avec Guerilla

samedi 20 mai 2017 à 18:56

Si vous utilisez Guerilla et que vous devez rendre des fichiers OpenVDB, vous devez connaitre les noms des channels afin de les utiliser dans vos shaders de volumétrique.

Il y a plusieurs façons d’introspecter un fichier OpenVDB (plugin Maya, ligne de commande officielle, etc.) mais toute ne sont pas forcement disponible sur votre machine.

Je vous propose une petite méthode qui s’appuie sur les informations que Guerilla donne quand il rend. :aupoil: )

Vous devriez obtenir un retour de la forme suivante:

Starting render: 1 jobs
05/12/2017 15:26:38  SHAP DIA: loaded shape 'C:\Users\narann\Downloads\fire.vdb\fire.vdb' 'fire.RenderGeometry'
05/12/2017 15:26:38  SHAP DIA: Voxel shape
05/12/2017 15:26:38  SHAP DIA: density - 1 float(s) - 4458790 voxels
05/12/2017 15:26:38  SHAP DIA: temperature - 1 float(s) - 4139727 voxels
Render RenderPass RenderPass: 1.08s
Total render: 1.08s

On peut voir que ce .vdb (disponible sur le site officiel) contient deux channels: density et temperature.

Si vous relancez le rendu, vous remarquerez que ça ne réaffichera pas. C’est dû au fait que le cache Guerilla ne recharge pas ce qu’il a déjà en mémoire (pas bête la guêpe :siffle: ).

Il faut donc faire un Clear cache avant de relancer le rendu.

A bientôt!

Dorian

:marioCours:

Pourquoi les instances Maya sont si lourdes?

samedi 25 mars 2017 à 23:52

Comme vous le savez sûrement, Maya propose un moyen de faire des instances.

Comme vous vous en doutez peut-être, ce n’est pas si simple.

Et ce que vous ne savez peut-être pas c’est qu’en pratique (plus de 1000 instances) ça ne fonctionne pas des masses

Essayons de comprendre pourquoi. :redface:

Grossièrement une instance c’est ça:

Ainsi, on ne stock la géométrie qu’une seule fois en mémoire, tout le reste étant des position+rotation+scale (un transform) qui y font référence.

C’est très pratique dans le cas, par exemple, d’une forêt ou l’arbre est la géométrie et les milliers de points, des instances.

La monté en charge

Jusqu’ici c’est plutôt pas mal. Sauf que vous allez voir que la collision de deux choix d'architecture ont littéralement claqué la porte a toute possibilité de monté en charge du système.

Le premier est dû a la manière dont Maya fonctionne: Tout est connexion.

Le second est dû à un problème d’expérience utilisateur: Comme il est tout à fait légitime pour un utilisateur de vouloir assigner un material différent à chaque instance, quand Maya créé une instance, cette dernière dispose de son propre slot de material. Ce qui nous donne ceci (voir le bonhomme énervé):

Comme vous pouvez le constater, la shape (en mauve car c'est une instance) possède autant de connexion au shading group qu'il y a d'instance:

shape.instObjGroup[0].initialShadingGroup.dagSetMembers[0]
shape.instObjGroup[1].initialShadingGroup.dagSetMembers[1]
…
shape.instObjGroup[999].initialShadingGroup.dagSetMembers[999]

L'objectif étant, encore une fois, pour Maya, de garder la possibilité d'assigner un material différent à chaque instance.

Ce choix, bien que légitime, porte un gros préjudice aux performances. Vers 1000 instances, il faut plus d’une seconde, quand vous sélectionnez un objet, pour afficher l’Attribut Editor. La plupart des interfaces se mettent à ramer, le delete all by history pédale, le temps de sauvegarde est énorme et je ne parle même pas de certaines opérations en script qui deviennent très lente (parent par exemple).

Il aurait été intéressant de pouvoir forcer un material unique par shape d’instance. Évitant ainsi des milliers de connexions qui, bien souvent, pointent vers le même material.

Des solutions?

Disons que ça dépend de ce que vous faites dans Maya. Si vous voulez faire du rendu, je suppose que ça dépend du moteur mais naïvement je dirais que c’est mort et que vous allez souvent devoir bricoler pour utiliser le système d’instance du-dis moteur. Ce dernier se chargeant d’interpréter le bricolage qu’il vous impose (ah le bon vieux locator avec une connexion message vers un groupe :hehe: ).

Si vous ne faites que de la manipulation de transform (des forets!), une solution consiste à briser toutes les connections de material de votre shape:

Vous vous retrouverez donc sans material (mesh transparent/vert):

Vous pouvez toujours passer en use default material:

Notez que lors de mes tests (Maya 2016), ceci ne marchait pas en Viewport 2.0. Il fallait repasser en Legacy Default Viewport. :aupoil:

Conclusion

Les instances dans Maya restent assez complexe à mettre en place. Le vrai problème vient du fait qu’on ne peut pas travailler avec des milliers d’objets (ce qui est quand même un comble).

:marioCours:

Est-ce que glTexSubImage2D est asynchrone?

mardi 15 novembre 2016 à 21:24
OpenGL_logo_tn150.png

Je traduis une réponse claire trouvée sur reddit:

Si le paramètre data de la fonction n’est pas un buffer object, alors glTextSubImage2D doit bloquer pendant que le pilote OpenGL copie les données sur la mémoire du GPU (à la manière d’un memcpy). C'est nécessaire car OpenGL n’a aucun moyen de vous forcer à conserver les données en mémoire en attendant que la fonction se termine.

Les buffer objects permettent un transfert asynchrone (à la discrétion du pilote), car le pilote peut les conserver jusqu’à ce que les données soient transférés.