Maths et KungFu

J’ai enfin pris le temps de remplir deux pages concernant les mathématiques et le KungFu:

Vous y trouverez des cours de maths, ainsi qu’une petite video d’entrainement de KungFu. Je vais alimenter ces pages régulièrement (et quand j’ai le temps!)

Le ravissant Unravel

Un jeu qui me donne envie de sortir des billets du portefeuille.

Ce jeu est beau et doux. Techniquement, on a beaucoup de choses à dire aussi. Mais c’est la direction artistique qui est fabuleuse, car le jeu semble homogène de bout en bout.

J’ai hâte de le tester !

Site officiel

Découverte : Kim Jung Gi

Rien à voir avec la Corée du Nord !

Il s’agit d’un dessinateur extrêmement talentueux que j’ai tardivement découvert.

Quelques dessins pour donner une idée

Ces images sont gracieusement empruntées sur le web (Google image) pour vous donner un aperçu de son talent.

C’est magnifique. Les détails sont incroyablement subtils : regardez comme il trace un visage expressif avec quelques lignes seulement, sans rajouter de détails ou d’ombres. Un coup de pinceau et l’image devient vivante. C’est très rare de voir autant de talent chez un dessinateur, et c’est surtout bluffant de voir sa vitesse de travail (vidéo ci-dessous).

Un dessin en live

Impressionnant par sa vitesse d’execution. Sans aucune erreur.

Quelques liens

Voici quelques liens pour les intéressés:

Une GUI simple et efficace

Après de longues investigations le mois dernier, j’ai enfin porté mon choix sur une API de GUI simple et efficace : ImGUI.

Ce qui a guidé mon choix

J’ai décidé de conserver Cocoa pour l'éditeur, car il est déjà développé et requiert peu d’entretien (sauf quand Apple casse la compatibilité, mais c’est marginal). Pas de raison particulière de recoder l'éditeur, il fonctionne très bien comme ça.

Mais comme mon éditeur n’est accessible que sur OSX (pas sur iOS), il me fallait une solution de debug efficace sur les devices mobiles.

Première option : LibNUI

J’ai d’abord pensé à utiliser LibNUI, une belle librairie graphique créée par mon pote Sébastien Métrot.

Sa librairie est complête et embarque plein de tools intéressants. Elle permet de réaliser n’importe quelle application 2D, aussi complexe soit elle. L’intégralité du rendu est effectué en 3D. Elle est totalement cross-platform.

Mais elle est plutôt adaptée à des applications complexes et puissantes. Dans mon cas, je veux juste pouvoir debugger efficacement sur iOS, pas besoin de fioriture.

Seconde option : NanoGUI

Puis, j’ai testé NanoGUI basé sur NanoVG.

Un rendu vraiment très sexy !

Cette librairie est compacte (peu de fichiers à embarquer) et moins complexe à intégrer dans un moteur existant que LibNUI. Ça se rapprochait déjà plus de ce que je recherche.

J’ai commencé l’intégration de NanoGUI dans mon moteur, et j’ai déprimé sur le couplage avec OpenGL… Le coût de portage de librairie sur METAL n’est pas négligeable si on veut faire ça bien. Et je n’ai malheureusement pas de temps à consacrer à ça pour le moment.

Autre point négatif, c’est son emprunte CPU et GPU. Pour une librairie que j’utiliserai en debug, c’est cher payé.

Donc je la garde dans un coin de ma tête, pour plus tard.

Troisième option : ImGUI

Finalement, j’ai découvert ImGUI.

Je vais être très franc et peser mes mots :

  • le rendu est vraiment spartiate (certains diront moche),

Mais cette lib est :

  • tellement simple à utiliser,
  • tellement facile à intégrer dans un moteur existant,
  • tellement compacte dans son design et dans son implémentation,
  • tellement légère en CPU et GPU,
  • tellement lisible et modifiable

Qu’il est impossible d’y rester insensible !

Ça m’a pris une heure de l’intégrer dans mon moteur en METAL :

  • quelques buffers GPU à créer,
  • une seule texture,
  • un seul shader,
  • et une redirection d’input iOS/OSX.

Hop le tour est joué.
Et le rendu est parfaitement identique sur OSX et iOS.
Jouissif.

Voici quelques captures d'écran sur OSX avec un layout 3D d’iPhone 5. On y voit mes scènes de benchmark, la fenêtre de démo d’ImGUI, et une petite fenêtre de profiling créée en quelques minutes.

Et voici le shader ImGUI, vraiment gratos.
À gauche la version classique, et à droite la version préprocessée.

Enfantin.

Comme je le disais, certain peuvent rester bloquer sur l’aspect spartiate de la GUI. Mais n’oublions pas les objectifs initiaux : le debug et la perf.

Et qu’on se rassure, une nouvelle version poindra probablement bientôt le bout de son nez avec un design plus moderne. Espérons qu’elle conservera sa faible emprunte et restera aussi simple à utiliser.

Qui dit Noël, dit BD !

Comme tous les ans, c’est le moment de lire des bandes-dessinées pendant les fêtes de fin d’année.

J’avais délaissé ma boutique favorite depuis un moment, donc la moisson fut excellente !

Le Tueur (tomes 11, 12, 13)

L’indétrônable thriller des fêtes. Toujours aussi bon à lire, une histoire palpitante avec des dessins magnifiques.
Les auteurs ne cessent de m'étonner car ils conservent un niveau d’excellence malgré les années qui passent.

Le Grand Mort (tome 6)

Je l’attendais depuis un an !

Pour Noël 2014, j’avais offert les cinq premiers tomes à mon père, et je me suis délecté de leur lecture pendant deux après-midi.

Loisel parvient à nous transporter dans un monde parallèle pendant plusieurs heures.
J’ai hâte de lire ce dernier tome !

Petite anecdote : Loisel a habité Enghien-les-bains pendant plus de 15 ans, et je l’ai su hier seulement ! Je comprends mieux pourquoi la librairie Impressions avait toujours ses albums en avant-première ;)

Le Cycle de Cyann (tome 6)

Une série dont les épisodes sortent au compte-goutte.
Ce n’est pas une BD mainstream, clairement pour Adultes car Bourgeon en est le créateur, avec des dessins très colorés. J’adore toujours autant.

Nouvel anime : Psycho-Pass

En fait, il n’est pas nouveau du tout ! Mais il l’est pour moi :)

Critiques du web

Les critiques sont variées, mais cet anime est célèbre et je n’ai rien à me mettre sous la dent en ce moment.
Disponible en 720p, il va combler quelques soirées de Noël, pendant que les enfants dorment !

Aperçu

Un petit aperçu sur Youtube. Mais mieux vaut regarder les épisodes en 720p chez soi.

Regressions de GUI sur OSX

Plus j’avance sur le développement de EaseSDK, plus je coince sur des limitations et des bugs de GUI sur OSX.
Les concepts des GUI native d’OSX sont véritablement étranges. On s’y fait, surtout au bout de plusieurs années. Mais ça reste vraiment propre à l’univers Apple et pas très bien testé..

Régression de GUI

Depuis 3 jours je bloque sur une regression des NSScrollView.
Après avoir épluché les forums officiels d’Apple, stackoverflow, et les forums de developpeurs OSX, je me résigne : la régression est bel est bien présente et impossible de la contourner.

Sans entrer dans le détail, le problème est simple : je veux juste faire mon rendu custom dans une NSView et pouvoir la scroller !
Tout fonctionnait parfaitement avec xcode 6, et depuis xcode 7 ça déconne totalement.

GUI qui fonctionne

Voici un rendu qui fonctionne : l'éditeur de TimeLines.
Les scrollbars fonctionnent, je peux me déplacer à ma guise.

GUI qui déconne

Et voici un rendu qui ne fonctionne plus du tout : l'éditeur de passes…
Impossible de faire fonctionner ces foutues scrollbars : elles n’apparaissent pas.
Pourtant tout fonctionnait avec xcode 6 !

C’est quand même incroyable de devoir me taper le debug des produits Apple.
C’est la société la plus riche au monde et elle n’est pas capable de s’offrir des tests de non-régression digne de ce nom…

Utiliser un système de GUI alternatif ?

Donc ce soir j’ai passé un peu de temps à examiner les GUI alternatives.

D’abord, j’ai été séduit par les GUI de Blender. C’est très joli, codé en C++, mais impossible de séparer le code de l'éditeur.

Ensuite, j’ai trouvé d’autres GUI cross-platform qui semblent mûres aujourd’hui :

  • Qt
    Cette librairie vieille de 20 ans s’est transformée à plusieurs reprises et a vraiment bien évolué. Elle est flexible, puissante, et elle tourne sur toutes les plateformes !
    Mais c’est une telle usine à gaz que les samples-codes m’ont vite fait fuir. Pas le temps d’apprendre à me servir d’un engine complet pour faire des GUIs.
  • NanoGUI
    Cette lib se désigne comme Minimalistic GUI library for OpenGL. C’est clairement prometeur, et certaines features me plaisent beaucoup telles que le support du C++11, l’utilisation de lambdas, et des widgets de tracé de graphes.
    Je vais la tester ce soir.
  • Game-GUI
    Mon coup de coeur. Très simple, et réalise la performance d'être codé en 2000 lignes de C++. Elle propose les features classique (skinning, widgets standards, etc), et cela fait d’elle un excellente candidate pour intégrer mon moteur en tant que module de GUI pour METAL. Cerise sur le gateau : elle est en licence MIT.

Et finalement…

Je vais poursuivre encore un peu avec Cocoa. Je laisse une chance à Apple de se rattrapper avec le mise à jour de xcode qui ne saura tarder.
Et en attendant, je vais tester NanoGUI et Game-GUI.
J’ai une longue nuit qui s’annonce !