Unity arrive en version 2018.2

Unity est un moteur de jeu très utilisé dans l’industrie. Il peut fonctionner tant en 2D qu’en 3D, sur les vingt-sept plateformes gérées (PC de bureau, consoles de jeu, téléphones portables, sans oublier la réalité virtuelle ou augmentée). Il a l’avantage d’être gratuit pour une utilisation personnelle (avec une limite de cent mille dollars de revenus annuels).

La version 2018.2 vient de sortir et construit sur les fondations déposées par la 2018.1 : le pipeline de rendu scriptable (SRP) et le graphe des shaders. Ces nouveautés ne sont pas encore assez finalisées pour être recommandables en production, mais cet objectif se rapproche. Cette nouvelle itération du moteur de jeu améliore la performance du pipeline léger (LWRP), principalement prévu pour le matériel moins performant (comme les téléphones portables), en jouant sur le chargement des données en mémoire. Les opérations sur les lumières sont aussi effectuées par lot plutôt qu’indépendamment.

Une autre variante du pipeline est orientée vers un rendu de plus haute qualité (HDRP), principalement pour les ordinateurs puissants et les consoles de dernière génération. De nouveaux effets ont été implémentés dans ce pipeline :

  • le brouillard volumétrique, contrôlable en densité localement, qui diffuse toutes les lumières qu’il reçoit (à l’exception des lumières en surface) ;
  • la réflexion planaire brillante, qui prend en compte l’aspect lisse des matériaux ;
  • l’anticrénelage par géométrie spéculaire, pour réduire les problèmes qui apparaissent avec des triangles trop denses ;
  • le masque d’ombrage, qui peut maintenant être utilisé en parallèle des textures d’illumination.

En outre, le graphe de shaders peut être utilisé en parallèle du HDRP. La compatibilité entre les deux est toutefois limitée pour le moment (le pavage et les matériaux avancés ne sont pas disponibles).

Unity est aussi utilisé pour créer des jeux en 2D. La version 2018.2 offre notamment des fonctionnalités pour un rendu plus précis des jeux en art du pixel peu importe la taille de l’écran.

Les cartes peuvent aussi être construites à partir de carreaux hexagonaux (plutôt qu’uniquement carrés).

Vulkan continue à s’infiltrer dans Unity : dès maintenant, l’éditeur peut utiliser cette API pour son rendu tant sous Windows que Linux (même si cette fonctionnalité est toujours considérée comme expérimentale).

Pour mieux profiter des systèmes multicœurs, Unity 2018.1 avait apporté un nouveau système de gestion des fils d’exécution. Il est maintenant mis à profit dans l’implémentation des systèmes à entités, grâce à une implémentation réactive.

Ceci n’est qu’un très bref aperçu des nouveautés disponibles, toutes les nouveautés sont détaillées dans le billet de blog officiel.

Télécharger Unity 2018.2. Télécharger l’éditeur pour Linux.

Advertisements

Sortie de Qt 3D Studio 2.0

L’éditeur d’interfaces graphiques tridimensionnelles Qt 3D Studio arrive maintenant en version 2.0, après un cycle de développement relativement court. Cette version s’est focalisée sur un nouveau moteur de rendu entièrement basé sur Qt 3D (au lieu d’un moteur spécifique, hérité de NVIDIA), mais en a profité pour améliorer l’utilisabilité de l’environnement.

Tout d’abord, l’éditeur a vu quelques changements d’ordre cosmétique, afin d’améliorer la facilité d’utilisation de l’outil. Par exemple, le fond d’écran est maintenant un dégradé, ce qui permet de représenter facilement l’orientation de la vue. Les caméras et lumières sont aussi mieux affichées, toujours afin d’améliorer la visibilité de leurs effets. Les outils de manipulation 3D ont été revus pour en augmenter la précision, ceux de sélection d’items sont plus intuitifs.

Les mécanismes de communication avec la logique de l’application, introduits avec la version 1.1, ont été revus pour couvrir de manière exhaustive les besoins ; ils sortent aussi de leur état de préversion technologique. Leur utilisation n’a pas beaucoup changé : le projet Qt 3D Studio définit les types de données que l’interface utilise, des items peuvent être ajoutés avec l’option Data Input (menu File). Ces entrées peuvent alors être liées à des propriétés ou à la ligne du temps afin de contrôler le comportement des animations.

Qt 3D Studio 2.0 arrive avec un nouveau moteur de rendu. Puisque entièrement écrit avec Qt 3D, il respecte désormais toutes les règles de codage avec Qt. Ce changement devrait fortement changer les pratiques de développement, notamment en facilitant les évolutions. Cette transition a déjà favorisé l’évolution de Qt 3D, maintenant bien plus efficace pour le rendu de ce genre de scène. Pour limiter le risque de régression, l’ancien moteur de rendu est toujours livré.

Voir aussi : la documentation, les exemples.

Source : Qt 3D Studio 2.0 released.

Optimisation du compilateur QML

Qt QML est le moteur d’exécution de Qt Quick. Ses responsabilités sont d’analyser et d’exécuter le code QML. Ce module n’a aucune dépendance envers la pile graphique (il n’a rien de spécifique pour le rendu). Il comprend également une implémentation de JavaScript (compatible avec la norme ECMAScript 5.1). Avec le développement de Qt, ce module est devenu de plus en plus compliqué, avec une série d’étapes utilisées pour améliorer petit à petit la performance du code : il commence par analyser le code QML et JavaScript pour en former un arbre syntaxique abstrait (AST), alors transformé en une représentation intermédiaire (IR) par une étape de génération de code. Ce code intermédiaire est optimisé (élimination du code mort, déduction de type, etc.), avant d’être exécuté par l’un des deux moteurs de sélection d’instruction (ISEL) : ils produisent soit directement de l’assembleur, soit un code binaire.

Cette manière de procéder est assez longue et complexe. De plus, le coût en temps pour compiler du code QML et JavaScript est non négligeable — ce qui a un impact sur les temps de démarrage des applications Qt Quick.

Les navigateurs Web ont dû faire face au même genre de problèmes avec leurs moteurs JavaScript. V8 et JavaScriptCore ont tous deux décidé d’utiliser une procédure bien plus plate pour effectuer la transformation du code QML/JS en assembleur : le code binaire est directement généré depuis le code source (ce qui est très rapide), sans passer par une représentation intermédiaire. Ce code binaire est ainsi entièrement indépendant de la plateforme, contrairement à la version précédente.

Avec des améliorations de performance dans l’interprétation de ce code binaire, il est déjà possible d’obtenir une performance proche de la solution précédente avec les optimisations !

Ces changements dans le code binaire ont été l’occasion de le rendre extrêmement compact. Ainsi, il prend très peu de place en mémoire et sur le disque (ce qui est important pour les plateformes embarquées). De plus, il a été optimisé pour en faciliter l’interprétation, de telle sorte que, à l’exécution, l’application soit aussi rapide que possible sans devoir utiliser de technique de compilation à la volée (JIT).

Néanmoins, un moteur de JIT peut être utilisé à l’exécution, afin de générer directement des instructions en assembleur pour les parties du code qui sont le plus souvent utilisées. Pour le moment, il ne permet pas encore de tracer précisément les suites d’opération fréquemment lancées (il ne fonctionne que par fonction), ce qui permettrait encore d’améliorer la performance (ce changement est prévu dans une prochaine version de Qt).

Ces modifications ont effectivement amélioré fortement la performance, même si les optimisations de code effectuées sont de moins bonne qualité que précédemment.

Une fois ceci en place, la compilation à l’avance (AoT) devient très facile à implémenter, il s’agit simplement de créer le cache lors de la compilation de l’application (le cache comprenant le code binaire). Les binaires ainsi générés peuvent être bien plus petits que précédemment. Cette compilation à l’avance n’est, pour le moment, pas finalisée : vu que le format du code binaire peut évoluer à toute version de Qt (mineure ou maintenance), il n’est pas généralisable à la moindre autre version de Qt.

Ces opérations ont été l’occasion de simplifier et de nettoyer le code, notamment au niveau des conventions d’appel de méthodes et des piles d’appel de fonctions JavaScript et QML. Dès Qt 5.12, ce travail pourra continuer, avec notamment un moteur de JIT qui trace les séquences d’opérations et une implémentation des fonctionnalités les plus récentes de JavaScript (ECMAScript 7).

Source : Optimizing the QML compiler pipeline.

Qt 5.10 apporte la méthode QThread::create

QThread est une ancienne classe de Qt : elle date de la version 2.2, sortie en septembre 2000. Elle sert à lancer du code dans un fil d’exécution séparé, par exemple pour éviter de geler l’interface graphique quand un code plus lourd est lancé. Depuis un certain temps, on dispose de deux manières d’utiliser QThread : soit créer une classe dérivée dans le seul objectif de surcharger la méthode run(), soit créer une classe ouvrière connectée aux signaux de QThread.

Cependant, Qt 5.10 apporte une nouvelle manière de créer un fil d’exécution avec QThread, en profitant des derniers ajouts de C++11 : QThread::create() prend en argument une fonction anonyme qui sera lancée dans le fil d’exécution. Cette API ressemble très fortement à la bibliothèque standard, en particulier la classe bien nommée std::thread. L’un des avantages principaux de cette manière de procéder est qu’elle évite de générer une sous-classe de QThread uniquement pour en réimplémenter une méthode. Contrairement à std::thread (mais de manière similaire aux autres utilisations de QThread), il faudra lancer le fil d’exécution manuellement par la suite. Cela laisse la possibilité de définir une priorité, de connecter des signaux, etc., avant l’exécution.

QThread *thread = QThread::create(myFunction);
 
thread->setObjectName("WorkerThread"); // name to appear in ps, task manager, etc.
connect(thread, &QThread::started, gui, &Gui::threadHasStarted);
 
thread->start();

Avec un compilateur C++17, il est aussi possible de passer plus d’un argument à QThread::create() : ils seront automatiquement passés à la fonction dans le fil d’exécution, tout comme avec std::thread.

Si cette fonction n’est implémentée que depuis Qt 5.10, ce n’est pas parce qu’elle est particulièrement dure à implémenter, plutôt grâce à un changement de politique au niveau de Qt. En effet, avant Qt 5, le code de Qt ne pouvait pas obliger à disposer de la STL (pour des raisons historiques). Depuis Qt 5.0, ce choix a été revu : il existe bien plus d’implémentations raisonnables de la STL. Ainsi, elle peut être utilisée pour implémenter des fonctionnalités de Qt, mais sans être visible à l’utilisateur. L’objectif est d’obtenir des binaires indépendants de la bibliothèque standard utilisée par Qt, de telle sorte qu’aucune contrainte n’est imposée sur les applications Qt — avec l’inconvénient que Qt doit recoder une partie de la STL.

Après moult débats, la décision a été prise pour Qt 5.10 d’abandonner cette politique : Qt peut maintenant exposer des types de la STL. Cela devrait permettre d’en simplifier largement le code (dès que les changements d’API seront autorisés, c’est-à-dire pour Qt 6 au plus tôt). L’inconvénient est que les utilisateurs ne pourront plus mélanger les implémentations de la STL. Par contre, cela a permis d’implémenter la méthode QThread::create sans devoir proposer d’implémentation de std::future dans Qt.

Source : New in Qt 5.10: QThread::create.

Polémique en Belgique : un logiciel Microsoft utilisé pour consulter des données publiques

La Belgique poursuit ses efforts d’informatisation et de maintenance de ses plateformes. Pour le grand public, le grand bond a eu lieu en 2002, avec le début de la délivrance de cartes d’identité électroniques, avec une puce mémorisant toute une série d’informations. Celle-ci est utilisable pour accéder à une grande partie des services en ligne (plusieurs certificats RSA sont générés et stockés sur chaque carte), mais aussi pour le système de soins, par exemple.

Cependant, cette informatisation ne se fait pas toujours dans les meilleures conditions. Récemment, le portail d’accès aux données fiscales, FisconetPlus, a entièrement fait peau neuve. Officiellement, cela a permis d’améliorer fortement le site : une interface plus conviviale, une recherche plus performante, etc. Le problème ? Le système est réalisé avec Sharepoint, un outil de Microsoft. De fait, bon nombre de services fédéraux belges disposent de licences pour les logiciels Microsoft : le SPF Finances a utilisé la sienne pour réaliser ce site. Il semblerait qu’il n’y ait pas eu de réelle réflexion à ce sujet : pas de vraie mise en compétition des solutions possibles, notamment les logiciels libres.

D’autres problèmes se posent. Pour accéder au site, il faut se créer un compte : selon le ministre de tutelle, c’est une contrainte technique imposée par Microsoft. Le site précédent était au contraire en libre accès. Il s’agit évidemment… d’un compte Microsoft, c’est-à-dire que la société américaine peut récupérer une bonne quantité de données sans grand problème. Le site belge ne contient pas vraiment d’informations à ce sujet, renvoyant uniquement vers la déclaration de Microsoft. L’avis de Marco Van Hees, député PTB, est que Microsoft a le beurre (l’argent des licences) et l’argent du beurre (les données des visiteurs). Cette création ne semble de plus pas si simple, tant pour des journalistes que des politiciens.

Sources : Quand le SPF Finances se lie à Microsoft (accès payant, dont photo), Overheidswebsite met fiscale regelgeving enkel toegankelijk via Microsoft-account, Fallait-il privatiser l’accès à la base de données fiscales du SPF Finances ? (PTB, parti politique belge à tendance communiste).

Sortie de Qt Creator 4.5

En même temps que Qt 5.10 sort la nouvelle itération de Qt Creator, numérotée 4.5. Les variables CMake sont mieux intégrées à l’interface, étant groupées par préfixe, avec un éditeur spécifique pour chaque variable selon son type (en cas d’erreur, on peut évidemment en changer le type). Les changements effectués à l’extérieur de Qt Creator sont maintenant affichés dans une notification.

Depuis la version 25.3.0 du SDK Android, il n’y a plus d’interface pour gérer les différentes versions. Elle a maintenant été ajoutée à Qt Creator, en utilisant la nouvelle interface en ligne de commande, avec laquelle est partage quelques limitations pour le moment (pas de mise à jour possible sous Windows, pas de Java 9).

Le panneaux de navigation dans le système de fichiers a été rendu plus utile : il montre maintenant une racine que l’on peut choisir, entre la racine de l’ordinateur, du dossier utilisateur ou du projet. De nouvelles améliorations sont prévues pour les prochaines versions.

Source : Qt Creator 4.5.0 released.

Sortie de Qt Visual Studio Tools 2.1.2 Beta

L’intégration de Qt à Visual Studio poursuit son bonhomme de chemin avec la version 2.1.2. Celle-ci est la première à être compatible avec Visual Studio 2017.

Depuis la 2.0, l’extension gère la coloration syntaxique pour QML. L’importation des projets QMake de grande taille est plus rapide. La variable d’environnement $(QTDIR) est mieux gérée, ce qui réduit le risque d’erreur.

Cette version n’a qu’un problème connu : elle force à utiliser le SDK Windows en version 8.1, ce qui cause des problèmes s’il n’est pas installé. Il est cependant possible de contourner ce défaut.

Voir aussi : Qt Visual Studio Tools Version 2.1.2 Beta, la liste des changements.

Télécharger le paquet VSIX directement ou depuis Visual Studio Marketplace (version 2.1.1 pour le moment).