Mise à jour 26.09.15
La mise à jour apporte des améliorations au système de rendu, à la migration des hôtes et introduit de nouvelles fonctionnalités comme les cartes de survol.

Painteur
Painteur est une petite structure utilitaire qui remplace HudPainter et le système de rendu des panneaux. Il est désormais utilisé pour rendre l'ensemble du système de panneaux et vous pouvez l'utiliser pour rendre des éléments comme l'interface utilisateur, les HUD, les panneaux et les panneaux du monde manuellement en utilisant une API intuitive. Les formes sont généralement rendues en SDF, donc elles sont totalement antialiasées et esthétiques.
Nous avons la capacité de dessiner des arcs, des flèches, des lignes de Bézier, des capsules, des cercles, des croix, des cœurs, des lignes, des polylignes, des polygones, des quads, des rectangles, des anneaux, des étoiles, des ticks et des triangles..

Nous supportons plusieurs types de traits. Intérieur, centre et extérieur. Solide, en pointillé, en pointillé..

Et le remplissage peut être une couleur, une image, un dégradé radial, un dégradé linéaire ou un dégradé conique..

Le rendu des lignes supporte différents types de joints, y compris biseauté et rond, avec une limite de joint..

Tout cela utilise un système de regroupement en arrière-plan, donc les performances sont en réalité assez impressionnantes. Cette démo est entièrement rendue en un seul appel de dessin.
Voici à quoi ressemble le code, dans un composant..
void Update()
{
using var painter = Camera.BeginHud();
var color = Color.Green;
painter.Fill = Fill.LinearGradient( Color.Red, Color.White, 45.0f );
painter.Stroke = Stroke.Solid( color, 3 );
painter.Circle( new Vector2( 100, 100 ), 50 );
}
Ce changement rend également IPanelDraw désormais redondant, car vous pouvez simplement remplacer la fonction OnDraw( Painter painter ).
Rendu de texte GPU
Le rendu de texte a été le plus ancien composant de notre moteur, il fonctionnait bien, mais il avait ses inconvénients, notamment le fait qu'il soit généré par le CPU, ce qui le rendait flou lors de toute transformation.
Puisque nous allons nous concentrer sur l'utilisation de notre système d'interface utilisateur pour les outils, nous devrions rendre le rendu de texte génial.
Suite à mon travail d'il y a quelques hackweeks, j'ai entièrement implémenté le rendu de texte GPU basé sur l'algorithme de Lengyel dans le moteur tout en conservant toute l'API actuelle, les courbes sont envoyées au GPU et tout est dessiné sur le shader.
Vous n'avez rien à faire, cela fonctionne tout seul, supporte CJK, emojis, ombres, contours, et tout ce que le système précédent supportait, et a l'air incroyablement net même à un millimètre de distance.



Cela s'avère être significativement plus rapide que notre système précédent tout en ayant toujours l'air génial.



Tout est toujours rendu en utilisant notre moteur d'interface utilisateur en un seul appel de dessin.


Migrazione de l'hôte
Lorsque l'hôte quitte, son état de snapshot est désormais restauré sur le nouvel hôte, y compris les objets réservés à l'hôte. Si votre état survit à une entrée tardive, il devrait survivre à la migration de l'hôte.

Le code en cours d'exécution ne se transfère pas, donc tout ce qui est en vol doit être repris sur le nouvel hôte. Il existe des analyseurs pour vous aider à vérifier que votre état et votre comportement sont sûrs pour la migration.
Vous pouvez trouver plus d'informations détaillées dans la documentation.
Cartes de survol
Nous avons ajouté des cartes de survol au menu. Survolez un jeu et vous pouvez rapidement consulter les informations dont vous avez besoin pour décider si vous voulez jouer.
Nous avons également retravaillé les modales de jeu et les notifications ailleurs dans le menu, rendant les interactions de jeu comme les avis, favoris, cacher le jeu... plus visibles et cohérentes.



Paramètres de qualité de l'éditeur
Changer les paramètres graphiques dans l'éditeur signifiait auparavant lancer une scène et ouvrir le menu des paramètres en jeu.

Il y a maintenant un menu déroulant dans les contrôles de la vue pour changer directement les préréglages de qualité.
Block Party
Voici un nouveau jeu utilisant le système de sprites 2D que vous pouvez découvrir :
https://sbox.game/facepunch/blockparty/
Il dispose de classements avec replays, d'un éditeur de niveaux avec support de l'atelier, d'exportations GIF, et d'autres fonctionnalités amusantes.


Inversion de maillage de carte
Outil de bloc - Alignement à la face
Améliorations des performances de sérialisation
Le clonage de GameObject est maintenant ~2,6x plus rapide avec environ 38 % d'allocations en moins dans des tests synthétiques. Tout ce qui génère des prefabs à l'exécution en bénéficie.

Dans nos tests réels, c'est moins significatif car le principal goulet d'étranglement ici pour le clonage est le spawn des collisions de modèles, etc. la surcharge de sérialisation réelle du clonage était déjà assez basse.
Les snapshots réseau sont également moins coûteux pour l'hôte. L'état de la scène est toujours capturé sur le thread principal, mais l'encodage JSON, blob et paquet s'exécute désormais sur des workers, donc le coût pour l'hôte lors de l'entrée ou du chargement des joueurs est beaucoup moins élevé.
Améliorations pour Mac et Linux
Un certain nombre d'améliorations pour Mac et Linux :
- Les corrections pour Mac couvrent l'entrée de la vue de jeu, le redimensionnement DPI de l'éditeur, l'ouverture de dossiers Finder et la mise en scène de scènes.
- Les corrections de support de shader de géométrie corrigent les plantages du composant Highlight sur Mac ; les rappels de rendu procédural ont également une correction de durée de vie.
- La détection de l'éditeur de code et les contrôles de publication/exportation fonctionnent sur Mac et Linux.
- Les builds natifs Linux utilisent Steam Linux Runtime 4.0.
- Le fallback d'emoji couleur utilise Twemoji sur Mac et Linux.


Flux de travail open source
J'ai amélioré un peu plus le flux de travail open source, ajoutant un Setup.bat plus simple et maintenant un Setup.sh pour Linux & Mac.

Le Setup.bat a maintenant un rapport de progression, principalement pour les étapes de téléchargement car vous n'aviez aucune idée de combien ou combien de temps vous téléchargiez auparavant.
De plus, le setup installe maintenant des hooks Git - chaque fois que vous tirez ou changez de branche, l'étape de téléchargement est exécutée automatiquement, ce qui signifie que vous n'avez pas à exécuter Setup.bat à chaque fois.
Paramètres de stockage

Page des paramètres de stockage redessinée.
CSS : overscroll-behavior
J'ai implémenté la propriété CSS overscroll-behavior qui vous permet à la fois de désactiver le rebond des bords du défilement et également d'empêcher le défilement de se propager au panneau parent.
