Intégration de PhysX et GameWorks dans Unreal Engine 4

Depuis Unreal Engine 3 et UDK, Epic utilise le moteur physique PhysX, développé par NVIDIA. Unreal Engine 4 en utilise d’ailleurs la dernière mouture (la série 3.x). Depuis lors, NVIDIA a lancé une série de nouvelles briques logicielles dans le domaine de la simulation physique sous l’ombrelle GameWorks.

L’une de ces briques est une réflexion de fond sur la manière d’exploiter les GPU pour la simulation multiphysique en temps réel, avec des couplages entre tous les types de simulation : des interactions entre solides (déformables ou non), liquides et tissus, chaque type d’objet étant régi par des systèmes d’équations différents. NVIDIA FleX unifie toutes ces problématiques en considérant chaque objet comme un ensemble de particules. Après quelques années de développement et des démonstrations dont les principaux intérêts sont techniques (couplages en temps réel), la version 0.25 dispose maintenant d’une intégration (certes encore expérimentale et incomplète) dans Unreal Engine 4.

Les sources de l’intégration sont disponibles sur un dépôt Git, accessible sous les mêmes conditions que les sources d’Unreal Engine 4. D’autres modules de GameWorks sont en cours d’intégration : HBAO+, VXGI, Vehicles et WaveWorks sont d’ores et déjà disponibles, toujours en tant qu’intégrations expérimentales, toujours uniquement pour Windows.

Il est prévu d’ajouter d’autres modules dans les mois à venir, comme HairWorks ou Turf Effects. Certains modules ont besoin d’un GPU NVIDIA, d’autres se satisfont d’un GPU DirectX 11.

Source : NVIDIA GameWorks Integration, le clone NVIDIA du dépôt Unreal Engine.

Les sources de PhysX disponibles gratuitement

Peu après Unreal Engine 4, voici que son moteur physique, PhysX, développé par NVIDIA, se met à la même mode : son code source est gratuitement disponible. Bien évidemment, le projet ne devient pas libre pour autant : il est nécessaire de s’enregistrer sur le site de NVIDIA avant d’avoir accès aux sources.

Ce moteur physique est disponible pour les plateformes Windows, Linux, OS X et Android (en plus des consoles de jeux, mais elles sont exclues de cette ouverture) et est utilisé dans plus de cinq cents jeux. Il était déjà gratuit pour des utilisations, commerciales ou non.

L’ouverture concerne principalement le moteur physique, mais également le débogueur visuel (PVD) et quelques modules APEX : Clothing, Destructible et Emitter. Il s’agit de la version 3.3.3 (PhysX) et 1.3.3 (APEX), c’est-à-dire la prochaine version. Parmi les fonctionnalités disponibles, on compte les corps rigides, les collisions, la gestion des personnages, des particules et des véhicules, en plus des tissus et objets déformables, notamment.

Le dépôt GitHub n’est cependant pas celui de développement : il ne contient que huit commits depuis fin janvier. Le code CUDA, qui déporte une partie des calculs sur le GPU, est bien évidemment de la partie.

Sources : https://developer.nvidia.com/content/latest-physx-source-code-now-available-free-github, http://physxinfo.com/.

Aperçu des nouvelles fonctionnalités prévues pour Qt 5.5

Bien que la liste ne soit pas complètement figée, Qt 5.5 devrait venir avec une série de nouvelles fonctionnalités. La principale est l’ajout du module Qt 3D, sans être finalisé (technology preview), un ambitieux projet remontant à l’époque Qt Mobility et Qt 4.8, qui facilite l’intégration de contenu 3D dans des applications Qt, tout en gardant des API C++ et Qt Quick. Il s’agit d’un moteur de rendu 3D prévu pour l’extensibilité : son architecture devrait s’accommoder de tout besoin au niveau du rendu de scènes 3D.

Un autre morceau de Qt Mobility, Qt Location, fait son retour dans Qt 5. Là où Qt Positionning fournit la position de l’utilisateur, Qt Location en facilitera l’exploitation, comme la gestion des itinéraires, la navigation, la recherche de lieux, etc.

L’édition commerciale fournit le module Qt Quick Entreprise Controls, avec des composants bien utiles comme des jauges (verticales ou circulaires), des cadrans, des indicateurs de statut ou encore des boutons à bascule. Toutes ces fonctionnalités (et d’autres encore, comme une vue en arbre) seront ajoutées au module Qt Quick Controls de l’édition libre, sous le nom de Qt Quick Extras.

Les amateurs de vidéos pourront se réjouir de la gestion de GStreamer 1.0 : jusqu’à présent, seules les versions 0.10 étaient prises en charge (plus aucune mise à jour n’a été réalisée depuis 2012). Ainsi, le décodage de vidéos pourra être accéléré sur le GPU, par exemple. Ces améliorations de performances n’ont pu se faire que par des modifications importantes au niveau de la structure du code de GStreamer, causant des difficultés pour la mise à jour côté Qt. Cependant, la version utilisée par défaut lors de la compilation est toujours la 0.10.

D’autres modules devraient être dépréciés, comme Qt WebKit (en cours de remplacement par Qt WebEngine), Qt Declarative (remplacé par Qt Quick 2) et Qt Script (remplacé par le moteur de script de Qt Quick2 ). Ils pourraient ne plus être inclus dans les paquets binaires dès Qt 5.6.

Comme pour Qt 5.4, ces nouveaux modules sont disponibles sous les licences GPL2 et LGPL3, en plus d’une offre commerciale.

Sources : Licensing of new modules in Qt 5.5, Qt3D: wip/newapi branch is dead. Long live dev!, Qt 5.5 Is Packing On New Features, Going Into Feature Freeze Soon, What is new in Qt 5.5, Deprecating modules with 5.5.

CUDA 7 RC

CUDA 7, dont la RC vient de sortir, est présentée par NVIDIA comme une « mise à jour importante de la plateforme ». Outre les habituelles améliorations de performances, du côté des plateformes, l’architecture IBM POWER sera maintenant gérée dans toutes les versions du SDK (seule la version 5.5 était disponible) — ce qui n’est pas étonnant, NVIDIA étant membre de la fondation OpenPOWER.

Lire la suite

Sortie de Gurobi 6.0

Gurobi est l’un des meilleurs solveurs en programmation mathématique existants, ce qui le rend très intéressant pour la recherche opérationnelle. Il se montre également versatile : il gère les problèmes avec des variables continues et discrètes, avec une structure linéaire ou quadratique. Il est notamment utilisé pour assigner les vols aux comptoirs d’enregistrement et aux portes d’embarquement à l’aéroport de Copenhague, mais aussi pour des recherches sur l’équilibre entre la demande en électricité et la production renouvelable.

Sa version 6.0 apporte bien évidemment des améliorations de performances intéressantes (jusqu’une trentaine de pour cent de temps économisé pour des problèmes linéaires en nombres entiers — MIP — difficiles), mais aussi de nouvelles fonctionnalités algorithmiques : les objectifs linéaires par morceaux peuvent être indiqués directement au solveur, ce qui conduit à d’importantes améliorations de performances par rapport à une modélisation plus classique.

Le solveur distribué est également amélioré : pour résoudre un MIP, il était possible d’exploiter plusieurs machines en lançant la résolution avec des paramètres différents sur chaque machine (concurrent optimiser) ; désormais, ces machines pourront également collaborer sur une même instance du problème (distributed MIP solver). Selon les problèmes à résoudre, cette technique pourrait être plus rapide.

Parmi les autres améliorations, on peut noter que les matrices des contraintes pourront contenir plus de deux milliards d’éléments non nuls. De nouvelles méthodes permettent également l’optimisation asynchrone, afin de lancer d’autres tâches pendant que le solveur travaille. Les fonctions de retour pourront également ajouter des contraintes retardées (lazy), une indication supplémentaire par rapport aux plans sécants déjà disponibles.

Source : http://www.gurobi.com/products/gurobi-optimizer/what%27s-new-in-v6.0

Qt 5.4 : vérification de la syntaxe QML

En QML, une erreur des plus fréquentes concerne la syntaxe des fichiers QML et JavaScript — y compris dans des applications en production, principalement pour des composants chargés de manière asynchrone. La plupart de ces erreurs ne sont que des typos, mais elles restent fort ennuyantes et facilement évitables.

Pour éviter ce genre d’erreurs, Qt 5.4 proposera un outil en ligne de commande pour vérifier la syntaxe des fichiers QML. Il est prévu notamment pour s’intégrer facilement aux outils d’intégration continue, tout comme xmllint et json_verify sont utilisés pour les fichiers XML et JSON, respectivement :

$ qmllint ClickableImage.qml
ClickableImage.qml:17 : Expected token `numeric literal'

$ find -type f -name \*qml -exec qmllint \{\} +
./qml/SettingsPage.qml:35: Unexpected token `if'
./qml/AboutPage.qml:35: Expected a qualified name id

Cet outil ne fait que de la vérification syntaxique, pas sémantique : en cas d’erreur dans un nom de variable, par exemple, l’outil sera incapable de le détecter. La vérification de ce genre d’erreur est bien plus difficile, car la sémantique dépend également du contexte de l’application en cours d’exécution.

Bar.qml:1 TypeFoo is not a type
Bar.qml:2 module "QtQuickControls" is not installed
Bar.qml:6:9: QML Rectangle: Cannot anchor to an item that isn't a parent or
sibling.

Source : KDAB contributions to Qt 5.4: qmllint

Sortie de PhysX 3.3.2 et d’APEX 1.3.2

De nouvelles versions de PhysX et APEX sont sorties (respectivement le moteur physique de NVIDIA, notamment utilisé dans l’Unreal Engine, et une série d’extensions adaptées aux artistes, utilisables indépendamment de PhysX). Outre les habituelles améliorations de performances et corrections de défauts, parmi les principales nouveautés côté PhysX, de nouvelles plateformes sont prises en charge : l’accélération GPU est désormais disponible pour Linux, tandis que le moteur fonctionnera sur les périphériques Android avec un processeur x86 (les processeurs ARM étant déjà gérés depuis la 3.3.0). Également, la documentation a été fortement restructurée et modifiée.

Le module APEX Destruction, qui gère la destruction d’objets, peut désormais employer la fracturation de Voronoï en temps réel (il fallait précédemment utiliser un modul de précalcul). Par contre, la simulation des corps rigides n’est plus possible sur le GPU (il semblerait que ce solveur avait des limitations et que ce mouvement est la première étape d’une migration vers FLEX, l’architecture unifiée de solveur GPU prévue pour PhysX 3.4).

Pour la simulation de tissus de APEX Clothing, le niveau de détail sera, dès la prochaine version, entièrement géré par l’utilisateur : le niveau de détail physique, qui utilisait un budget maximal pour tous les tissus afin d’adapter le niveau de détail de la simulation à l’impact sur l’image affichée, est désormais déprécié, le moteur de jeu sera chargé de ces détails.

Côté APEX Particles et Turbulence, la principale modification est que les GPU de génération antérieure à Fermi ne permettront plus l’accélération.

En plus de ces modifications, les ingénieurs de NVIDIA ont également travaillé sur la simulation de brins d’herbe avec NVIDIA Turf Effects, une technologie prévue pour la simulation de grandes étendues d’herbe avec des interactions physiques (avec des formes aussi simples que des cubes ou bien nettement plus complexes). Les brins peuvent être représentés avec trois triangles chacun, jusqu’à plusieurs centaines pour un plus haut niveau de détail, ce qui permet de gérer plusieurs millions de brins avec une haute fidélité (y compris pour l’éclairage et les ombres). L’intérêt pourrait être de visualiser, dans un jeu vidéo, les emplacements où une bataille a eu lieu. Ce module devrait être disponible début 2015 pour PC (DirectX 11).

Sources : PhysX SDK 3.3.2 arrives, adds GPU acceleration support on Linux, APEX SDK 1.3.2 is available, NVIDIA Turf Effects.

Mise à jour (3 novembre) : les extensions pour Autodesk Maya et 3ds Max sont également mises à jour, avec principalement des corrections de défauts. Téléchargement : GameWorks Download Center. Source : New PhysX plug-ins offer support for 3ds Max and Maya 2015.

Sortie de Qt 5.4 Alpha

Le processus de peaufinage de Qt 5.4 est entamé avec la sortie de la première préversion, Qt 5.4 Alpha. Aucune nouvelle fonctionnalité ne devrait arriver d’ici à la version finale, juste des corrections de défauts. Cette version apporte son lot de nouveautés, avec un grand nombre de fonctionnalités mais également la finalisation du port vers Windows RT.

Plateformes mobiles

Après moult tests, la préversion du port pour Windows RT arrivée avec Qt 5.2, fin 2013, est devenue mature. Pour Windows Phone, seule la version 8.1 sera supportée : cette décision a été prise pour éliminer la dépendance envers le compilateur D3D, ce qui facilite le déploiement. La plupart des modules sont maintenant disponibles, il devient donc très facile de porter une application Qt vers Windows Phone, les tablettes sous Windows RT mais également vers l’interface moderne de Windows 8 – y compris la mise à disposition sur le Windows Store.

Sur Android, les applications Qt Quick auront un style natif par défaut – précédemment, il était nécessaire d’utiliser Ministro (une installation globale de Qt pour Android, au lieu de fournir le cadriciel sous forme de bibliothèques pour chaque application).

Également, le module Qt Bluetooth pourra utiliser Bluez5, une implémentation de la pile de protocoles Bluetooth pour Linux. Également, ce module dispose d’une préversion du standard Bluetooth Low Energy (aussi dit LE ou Smart), qui devrait diminuer considérablement la consommation d’énergie lors de communications Bluetooth.

Amélioration de la gestion d’OpenGL

Qt 5.3 apportait QQuickWidget, une classe facilitant l’introduction de contenu Qt Quick dans une application traditionnelle, par là facilitant l’adoption des interfaces déclaratives en QML. Qt 5.4 amène QOpenGLWidget, qui ambitionne de faire la même chose avec le contenu OpenGL, en remplacement de la vieillissante classe QGLWidget. Par conséquent, le module Qt OpenGL est déprécié : toutes ses fonctionnalités sont reprises à d’autres endroits.

Une nouvelle API fait d’ailleurs son apparition, QQuickRenderControl, grâce à laquelle le rendu de scènes Qt Quick 2 dans des tampons OpenGL sera plus efficace. Ces images pourront alors être utilisées ailleurs, dans du code utilisant Qt ou totalement dissocié. QOpenGLContext fait le lien avec des contextes OpenGL, ce qui facilite l’utilisation du contenu Qt dans d’autres moteurs de rendu.

Sous Windows, il est désormais possible de choisir d’utiliser directement l’implémentation d’OpenGL fournie (souvent par le pilote graphique) soit ANGLE (une implémentation d’OpenGL par-dessus DirectX). Avant, il était nécessaire de compiler plusieurs fois Qt pour choisir son implémentation – plusieurs téléchargements sont d’ailleurs disponibles pour une même version de Qt, ce qui brouille les pistes pour les débutants.

Contenu Web

La plus grande nouveauté de Qt 5.4 est le module Qt WebEngine, qui intègre Chromium dans Qt (le moteur de rendu Web utilisé par Chrome, notamment). L’API proposée est voulue facile à utiliser mais toujours facilement extensible. L’intégration à la pile graphique a notamment été particulièrement travaillée, les textures de Chromium étant directement affichées dans le graphe de scène OpenGL de Qt Quick. Ce module est désormais disponible pour Windows, Linux et OS X, en plus des plateformes embarquées.

Le module Qt WebKit continue à être distribué avec Qt 5.4, mais ne verra plus de nouvelles fonctionnalités arriver : les défauts seront toujours corrigés, mais il est envisagé de le déprécier dans les versions à venir, puisque ses fonctionnalités sont reprises et augmentées par Qt WebEngine.

Un deuxième nouveau module fait son apparition : Qt WebChannel propose d’intégrer le code C++ et QML avec des applications Web en HTML et JavaScript, en exposant des fonctionnalités du modèle de métaobjets QObject au code JavaScript exécuté par Qt WebEngine ou Qt WebKit. Il s’agissait d’une limitation des versions précédentes de Qt WebEngine par rapport à Qt WebKit.

Divers

Qt Location, apparu avec Qt Mobility 1.0 il y a quelques années, suit son cours, mais n’est pas encore prêt pour Qt 5.4. Le même sort atteint Qt 3D, également annoncé depuis longtemps et souvent repoussé.

Cette nouvelle version de Qt vient également avec une nouvelle licence, la LGPL 3, mais également le souhait d’unifier l’écosystème entre versions libres et commerciales.

Source : Qt 5.4 Alpha Available

KDE Frameworks 5

Les bibliothèques KDE, utilisées pour construire les applications KDE, se modernisent avec la sortie de KDE Frameworks 5.0 début juillet et 5.1 début août. La principale différence par rapport à KDE Platform 4/kdelibs est la modularisation : les composants sont désormais découplés, les dépendances réduites au maximum, de telle sorte qu’il n’est plus nécessaire de lancer une artillerie KDE complète pour lancer une application qui en utilise seulement une fraction. La première version proposait déjà une cinquantaine de composants, apportant des fonctionnalités bienvenues et manquantes dans Qt (bien qu’une partie a déjà été intégrée dans Qt 5), avec très peu de dépendances en dehors de Qt lui-même ; KDE Frameworks 5.1 porte le compte à une soixantaine. L’objectif est de ne plus faire de différence entre une application Qt et une application KDE.

Organisation des dépendances

Les modules des KDE Frameworks 5 se divisent en trois catégories, selon leurs dépendances à l’exécution :

  • les éléments fonctionnels n’ont aucune dépendance ;
  • les éléments d’intégration peuvent avoir des dépendances afin d’intégrer les éléments fonctionnels au système d’exploitation ou à la plateforme ;
  • les solutions, par contre, sont libres au niveau des dépendances.

De même, ils se répartissent en trois niveaux (tiers) selon leurs dépendances lors de la compilation : au premier niveau, les seules dépendances autorisées sont Qt et d’autres bibliothèques externes à KDE et à Qt ; au deuxième niveau, les modules ne peuvent dépendre que du premier niveau ; au troisième niveau, les dépendances peuvent être enregistrées envers tous les niveaux.

Ces deux hiérarchies ne sont pas orthogonales : une solution de troisième niveau peut dépendre d’autres solutions d’autres niveaux.

Dépendances autorisées

Fonctionnalités

Les modules fonctionnels proposent une série de fonctionnalités bien utiles à un grand nombre d’applications, comme :

  • KArchive gère les techniques de compression les plus populaires, comme ZIP, 7-Zip, TAR ou XZ : il peut compresser et décompresser tant des flux de données (GZip, BZip2, XZ) que des archives proprement dites (7Zip, Ar, TAR, ZIP) ;
  • KPlotting propose des fonctionnalités simples pour l’affichage de graphiques, en ce compris l’anticrénelage ou la superposition (en quelque sorte, il s’agit d’une version simplifiée de Qwt) ;
  • Threadweaver facilite l’écriture de code multifil grâce à la notion de travaux (jobs), avec une gestion des dépendances et une intégration au système de signaux et de slots de Qt ;
  • KConfig s’occupe de la configuration des applications, avec une génération de code pour la lecture et l’écriture de ces fichiers, mais également le lien entre les fichiers de configuration et l’interface graphique pour changer les paramètres.

Côté intégration, Sonnet fait le lien avec la correction orthographique (tant aspell, hspell, hunspell qu’enchant) et Solid fournit un accès aux données issues directement du matériel (niveau de batterie, état du réseau, etc.). Dans ce dernier cas, pour certaines fonctionnalités, certaines dépendances à l’exécution sont requises. KI18n intègre GNU gettext, une bibliothèque pour la gestion des traductions ; ce module facilite le travail avec d’autres flux de traduction, plus souvent basés sur gettext.

Jusqu’à présent, ces fonctionnalités sont du premier niveau. Au troisième, pour les solution, KIO propose une interface d’édition de fichiers identique, qu’ils soient stockés en local ou en distant. KService propose des fonctionnalités avancées de gestion des extensions, comme leur localisation sur le système de fichiers.

Sources

Frameworks 5 (dont l’image), First release of KDE Frameworks 5, Second release of KDE Frameworks 5

Sortie d’Inqlude 0.7

Après trois années de développement, l’idée d’Inqlude, soit un dépôt de bibliothèques, un gestionnaire de paquets centré sur Qt, arrive à un certain niveau de maturité : l’auteur considère le projet comme prêt pour les utilisateurs précoces. Notamment, l’outil est utilisé pour générer le site Web inqlude.org ; parmi les bibliothèques présentes, un grand nombre provient des KDE Frameworks 5. À terme, il se veut l’équivalent de Bower ou npm en JavaScript, de RubyGems ou encore de pip pour Python.

Les métadonnées sont gérées, comme d’autres avant lui, par des fichiers de manifeste, écrits en JSON. La gestion du téléchargement et de l’installation des paquets n’est pas encore prête : une implémentation simple est d’ores et déjà disponible, mais il manque encore des métadonnées pour rendre le processus utile.

Les prochaines versions sont déjà planifiées :

  • 0.8 : la documentation sera améliorée pour faciliter les contributions ;
  • 0.9 : les fichiers de manifeste ne pourront plus changer de structure
  • 1.0 : l’outil pourra gérer des paquets en local, ce qui le rendra effectivement utile pour les utilisateurs et développeurs d’applications Qt.

En l’état, le projet permet déjà d’avoir un aperçu de l’écosystème Qt, des diverses bibliothèques non inclues dans la distribution officielle de Qt mais néanmoins utiles.

Source : Announcing first Inqlude alpha release