Mise à jour 26.07.08
Cette mise à jour introduit des addons ciblant des jeux, un serveur MCP, et des améliorations visuelles comme le bloom et les ombres.

Addons
Auparavant, vous pouviez publier un seul actif dans notre atelier, ajouter du code et utiliser vos propres composants. Cependant, vous ne pouviez pas utiliser le code du jeu, seulement des éléments du moteur.
Cette semaine, nous avons ajouté la prise en charge de ces addons pour cibler des jeux. Dans votre addon, vous devez définir le champ "Jeu cible/parent" dans les paramètres du projet pour en profiter. Cela devrait vraiment augmenter les capacités des addons communautaires et nous espérons le voir avec Sandbox Game dans les semaines à venir.

MCP Server
Le éditeur s&box a maintenant un serveur MCP. Le serveur permet à des éléments comme Claude de communiquer directement avec l'éditeur. Cela n'ajoute pas une boîte de dialogue d'assistant IA ennuyeuse à l'éditeur. C'est totalement invisible à moins que vous n'utilisiez déjà l'IA et que vous souhaitiez qu'elle puisse communiquer avec l'éditeur.
Je sais qu'il y aura une partie de la communauté qui s'opposera à cela. Je pense que l'impression est généralement erronée à ce sujet. Cela est là pour gagner du temps et rendre les tâches répétitives ennuyeuses plus rapides et plus faciles.
Ce que c'est
- ✅ Découvrez pourquoi mes modèles ne se compilent pas
- ✅ Diagnostiquer et corriger les chemins cassés sur mes prefabs
- ✅ Changer tous les modèles d'arbres dans cette scène en oak_06 au lieu de oak_07
- ✅ Donner à tous les actifs publiés dans le dossier models/rust/ de jolis titres descriptifs
- ✅ Pouvez-vous repérer quelque chose de faux dans ma scène ? L'éclairage est complètement cassé.
Ce que ce n'est pas
- ❌ Générer un jeu qui ressemble à Matrix contre Rollercoaster Tycoon
- ❌ Générer un modèle de Shrek
- ❌ Générer une image pixel art d'un plombier à utiliser comme personnage de jeu
Bloomin Bloom
Notre bloom était difficile à équilibrer. Il était facile d'atterrir dans un territoire trop exagéré. Cette semaine, nous avons fait en sorte que le paramètre de seuil fonctionne comme un véritable seuil.
Il y avait aussi un problème sous-jacent où la lumière contribuait de manière exponentielle en descendant la chaîne mip.
Le paramètre de seuil prend également en compte l'adaptation de l'œil. Ainsi, passer d'une scène sombre à une scène lumineuse devrait conserver la même quantité de bloom. Cela devrait faciliter l'équilibre pour tout le monde, peu importe la scène.


The Deck
Essayez notre nouveau jeu sur s&box maintenant !
Nous publions encore un autre titre sur la plateforme. Cette fois, c'est une suite de jeux de cartes que vous pouvez jouer seul ou avec des amis. Tous les jeux utilisent de nouvelles capacités du système d'addon, vous pouvez donc soumettre vos propres jeux de cartes/plateaux communautaires et y jouer.

Breakout
Breakout !
Avec The Deck, nous vous apportons également Breakout. Un remake d'un ancien jeu classique avec quelques rebondissements, il propose 3 modes : Classique, Arcade et Défi hebdomadaire. Chacun a ses propres classements et façons de jouer.
Viewport Orientation Gizmo
Nous avons ajouté un Gizmo d'orientation en haut à droite du Viewport.
Ainsi, vous pouvez rapidement et facilement passer d'une vue 2D/orthographique à n'importe quel axe.
(Aussi légèrement modifié le bouton des options de vue en haut à droite pour faire de la place pour le nouveau widget)
Fur Shader Rewrite

Notre moteur a un shader de fourrure intégré qui permet d'obtenir des visuels pelucheux assez jolis en utilisant la technique de la coquille. Il est utilisé par certains cosmétiques, comme le chapeau de Noël, et probablement utilisé dans certains contenus communautaires également. Il était utilisable, mais son code était à peine lisible car il a été créé avec Shadergraph il y a longtemps. Il avait aussi d'autres problèmes, comme l'absence de regroupement de textures, un espace colorimétrique mal assorti sur les textures, et des groupes d'UI manquants.
Ce n'est pas très bon, étant donné qu'une grande partie de notre code de shader est open source - tout le monde devrait pouvoir jeter un œil à la façon dont ces shaders sont fabriqués et apprendre quelque chose de nouveau. J'ai donc réécrit le shader de fourrure avec pour objectif de garder les visuels 100 % intacts. Réécriture complète à l'intérieur, sans changements à l'extérieur :
- Correction des groupes d'UI manquants, tous les entrées devraient maintenant être correctement catégorisées dans l'éditeur de matériaux
- Correction de l'espace colorimétrique sRGB sur certaines entrées de texture (bruit de fourrure et carte normale)
- Ajout d'un regroupement de textures approprié pour les textures compilées. Auparavant, chaque matériau écrivait 6 textures séparées sur le disque, maintenant il n'y en a que 3
- Réécriture du code de déplacement du vent, au lieu de calculer le bruit simplex à l'exécution, il suffit d'échantillonner une texture de bruit bleu
- Simplification des mathématiques lorsque cela est approprié
- Ajout d'une option pour convertir la couleur des vertex de sRGB à l'espace colorimétrique linéaire
- Ajout d'une option pour basculer entre les normales transformées/géométriques pour l'éclairage de contour
Matt a également ajouté un outil pratique qui permet maintenant de mettre à jour en toute sécurité le code de shader sensible sans casser les matériaux existants, il s'appelle FeatureUpgrade.
FeatureUpgrade est un utilitaire spécial dans le bloc FEATURES qui marque une fonctionnalité déjà déclarée comme un commutateur de mise à niveau interne. De nouveaux matériaux seront automatiquement créés avec une nouvelle valeur de fonctionnalité assignée, tout en gardant les anciens matériaux inchangés. Vous pouvez utiliser cela pour envelopper le code mis à niveau dans une combinaison statique, et il sera toujours activé par défaut dans tous les nouveaux matériaux, tandis que les anciens continueront à exécuter l'ancien code.
J'ai écrit une explication détaillée avec un exemple d'utilisation dans la documentation s&box ici. Vous pouvez voir comment exactement cette chose est utilisée dans le code source du shader de fourrure.
En même temps, j'ai également corrigé un bug de longue date avec l'éditeur de matériaux, où certains shaders personnalisés avec des variables identiques définies dans plusieurs combinaisons statiques/dynamiques réinitialisaient les propriétés affectées aux valeurs par défaut chaque fois que vous cliquiez sur une fonctionnalité. Cela était plus susceptible de se produire avec des mises à niveau de code comme dans le shader de fourrure, mais maintenant vous pouvez définir en toute sécurité des variables sous le même nom dans plusieurs chemins de code.
Mapping Texture Lock
Ajout de la prise en charge du verrouillage de texturage.
Mapping Icons
Pour la plupart des outils s&box, nous utilisons des icônes de matériaux, qui fonctionnent pour la plupart des choses, mais pour les outils de cartographie, nous avons atteint un point où il n'y en a pas qui correspondent à la fonction ou une icône est utilisée pour plusieurs fonctions, ce qui cause de la confusion. Cela devrait également faciliter la visualisation des fonctions d'un coup d'œil maintenant.


Clutter GPU Culling
Notre moteur de désordre était rudimentaire. Nous avons instancié les modèles, mais c'était à peu près tout. Il n'y avait pas de culling du tout pour les modèles instanciés, et la sélection LOD se faisait entièrement sur le CPU. Cela fonctionnait, mais ne se développait pas lorsque nous essayions de disperser une grande quantité de désordre.
Cette semaine, nous avons retravaillé le moteur de désordre :
- La sélection LOD se fait maintenant sur le GPU
- Le culling se fait également maintenant sur le GPU dans le même passage
- La collision pour les instances peintes fonctionne comme prévu
Vous devriez voir un gain de performance dans l'ensemble. Sur notre scène de référence avec beaucoup de désordre dispersé, nous sommes passés de 60 ms à 8 ms.

Nous avons également unifié le chemin de rendu pour chaque type d'instance, donc tout désordre, qu'il soit peint, procédural ou basé sur le volume, bénéficiera des mêmes améliorations.
GPU Profiler Improvements
Nous avons nettoyé le profileur GPU :
- Les temps qui étaient faux en raison du travail réparti sur plusieurs threads sont maintenant précis et ne sont plus gonflés.
- Nous avons également ajouté une hiérarchie, donc les listes de commandes se nichent sous leur étape parente, ce qui facilite la visualisation de la partie d'une étape qui vous coûte réellement.
30_12-52-LightgrayCoelacanth.png 610.32 Ko

Inventory + Weapons
Nous avons eu du mal à définir la frontière entre le moteur et le code du jeu dans s&box.
Dans GMod, le moteur avait un contrôleur de joueur, un inventaire, des armes, et tous les effets et l'UI de soutien autour de cela intégrés. Nous avons ajouté le contrôleur de joueur natif dans s&box, mais les armes et l'inventaire ont toujours été quelque chose que vous deviez entièrement implémenter vous-même.
Eh bien, cette semaine nous ajoutons un système d'inventaire et d'armes natif. Cela contient tous les composants dont vous avez besoin pour fournir un système d'armes fonctionnel dans votre jeu, y compris des éléments comme des éclats de bouche, des effets d'impact, des traçeurs et l'éjection de douilles.
Des précautions ont été prises pour servir une grande variété de jeux avec ce système. Vous pouvez dériver et implémenter une version personnalisée de InventoryComponent pour le faire faire ce que vous voulez tout en utilisant la même base. Il en va de même pour BaseWeapon et BaseCarriable.
L'idée est que les composants devraient offrir 90 % de la fonctionnalité requise nativement, puis vous pouvez ajouter les 10 % restants vous-même en remplaçant, si nécessaire.
Contact Shadows
Les cartes d'ombre rasterisées ont une limitation : leur détail est seulement aussi fin que la résolution de l'ombre elle-même, car lorsque vous doublez son détail, le travail à effectuer sur le rasteriseur augmente de 4x.
Nous voulons être en mesure de prendre en charge des détails d'ombre fins partout sans exploser le budget, nous avons mis en œuvre des ombres de contact qui fonctionnent en espace écran pour chaque pixel, cela remplit chaque espace où il y aurait une discontinuité sur les cartes d'ombre, que ce soit la résolution de la carte d'ombre ou son biais.
Cela est basé sur l'incroyable mise en œuvre de Bend Studio, tous les tests de raycasting sont effectués en parallèle sur le GPU et cela rend le tout ridiculement performant, prenant seulement 0.00006s à calculer sur un RTX 3080

Les mises en œuvre traditionnelles des ombres de contact peuvent avoir ce problème : il y a une discontinuité entre la géométrie réelle et la carte d'ombre, en particulier sur les cartes d'ombre plus douces, la façon dont nous le faisons permet d'avoir des pénombres très fines qui se transforment avec précision

En bonus, nos modifications à ce sujet nous permettent d'avoir des ombres de modèles de vue très détaillées sans coût supplémentaire par rapport au passage d'ombres de contact que nous exécutons déjà.
Cette mise en œuvre dans le moteur ouvre la voie à la prise en charge des masques de lumière dans le moteur, vous permettant de calculer tout type d'ombre à l'aide de shaders de calcul, par exemple des ombres de nuages, des ombres RT, etc. Le backend de cela peut également être appliqué aux lumières normales, mais nous voulons itérer lentement.
Overlay Prepass Stencils
Nous n'avons jamais géré les modèles de vue de manière élégante, surtout lorsque vous les enfoncez dans le mur, maintenant ils sont gérés correctement.
Auparavant, nous les dessinions comme un objet normal et les coupions lorsque vous entriez dans la géométrie, ce qui causait des effets comme SSR ou SSAO à dessiner sur l'effet de superposition réel, ce qui le rendait horrible
Nous utilisons maintenant des masques de stencil sur les choses rendues comme des superpositions, comme les modèles de vue, cela sépare les choses gracieusement et les effets qui utilisent la profondeur ou les normales sont composés correctement, même avec leur profondeur réelle plus profonde que le mur.
Static GameObjects
Vous pouvez maintenant marquer des GameObjects entiers comme statiques

Un GameObject statique est celui qui ne bouge pas à l'exécution, nous permettant de donner des informations précalculées à son sujet pour améliorer les performances. Cela est utile pour optimiser les calculs liés à l'éclairage, à l'occlusion et à la navigation.
C'est un prérequis pour pouvoir prendre en charge la mise en cache des ombres statiques, permettant de rendre les objets statiques une seule fois dans les lumières.
