Éditeur de modèles
Importer des modèles 3D avec leurs textures et animations, régler leur taille, leur physique, leurs collisions et leurs matériaux, puis les publier en pack sur le Workshop. Ils sont alors utilisables dans le menu de spawn et dans l'éditeur de map.
Les packs
Un pack est un addon local qui regroupe des modèles : un pack = un objet Workshop. Un modèle seul est simplement un pack d'un modèle.
- Créer → Modèles liste tes packs (les addons locaux qui ont un dossier
models/). - Nouveau pack crée l'addon
addons/<nom>/avec sonaddon.jsonet son dossiermodels/, puis ouvre l'éditeur. - Le nom et la description du pack (panneau de gauche) sont ceux affichés sur le Workshop.
Importer des modèles
Importer des modèles… ouvre l'explorateur Windows ; tu peux choisir plusieurs fichiers d'un coup. La copie, la conversion, la lecture et le calcul des collisions se font en arrière-plan derrière un écran de chargement : un gros modèle (plusieurs dizaines de Mo) ne fige plus le jeu. Il en va de même quand tu ouvres un modèle déjà importé.
| Format | Traitement |
|---|---|
.glb | Copié tel quel dans models/. |
.gltf (avec ses fichiers .bin et images) | Converti en un seul .glb (textures intégrées). |
.fbx (Mixamo, Unity…) | Converti en .glb, animations comprises. |
- Maillages, matériaux, textures intégrées et animations sont gardés.
- Un modèle de plus de 60 m (souvent un FBX exporté en centimètres) reçoit automatiquement l'échelle 0,01.
- Supprimer envoie le fichier à la corbeille de Windows.
Réglages d'un modèle
Choisis un modèle dans la liste de gauche, règle-le à droite et regarde le résultat dans l'aperçu 3D. Navigation : clic gauche ou droit + glisser pour tourner autour, molette pour zoomer, clic molette pour déplacer la vue. Pense à Enregistrer (Ctrl+S).
Infos
Nom affiché dans le menu de spawn, catégorie (onglet du menu de spawn, par défaut le nom du pack) mots-clés utilisés par la recherche, et Caché du menu de spawn : le modèle n'apparaît plus dans le menu de spawn (ni dans sa recherche), mais reste utilisable par son identifiant (maps, dupes, Lua, végétation du terrain, pièces d'autres modèles). L'identifiant du modèle (pour Lua, les dupes et les maps) est affiché ici. L'icône du menu de spawn est générée automatiquement.
Taille
- Échelle, rotation (pour remettre debout un modèle couché, par exemple) et décalage, qui place le pivot : c'est le point par lequel le physgun tient l'objet.
- Poser au sol met le bas du modèle à hauteur 0 ; Centrer le centre horizontalement.
- Les dimensions s'affichent en mètres, et un mannequin de 1,8 m (masquable) sert de repère.
Physique
| Réglage | Effet |
|---|---|
| Matériau physique | Friction, rebond et densité : bois (600 kg/m³), plastique (900), caoutchouc (1100), béton (2400), métal (7800). |
| Masse | En kg. 0 = estimée d'après la taille et la densité (la masse utilisée est affichée). |
| Densité | 0 = celle du matériau. Moins de 1000 : le prop flotte, plus : il coule. |
| Figé à l'apparition | Le prop apparaît immobile, comme s'il avait été figé au physgun. |
Collision
- Convexe automatique : une enveloppe par maillage, sans rien faire, réduite à 96 points au plus. Elle « remplit » les creux (une arche devient pleine).
- Formes simples : boîtes, sphères, capsules et cylindres placés à la main (position, rotation, taille ; pour sphère, capsule et cylindre, la taille X est le diamètre). En passant en formes simples, une boîte aux dimensions du modèle est créée pour démarrer.
- Les collisions s'affichent en bleu transparent dans l'aperçu (case Collisions en haut).
Matériaux
Chaque surface du modèle se règle séparément :
- couleur (multiplie la texture), rugosité et métal (-1 = valeur du fichier), émission (couleur et force ; avec une texture d'émission, la couleur la teinte : blanc = la texture telle quelle) ;
- textures couleur, normal map, rugosité, métal et émission : images PNG, JPG ou WebP copiées dans
models/textures/; - transparence (alpha de la texture) : Auto (celle du modèle, réglée à l'import), Opaque, Découpe (bords nets, les deux faces, ombres découpées : feuillage, grillage, cheveux) ou Transparent (verre, eau) ;
- teintable : si décoché, l'outil couleur du toolgun ne change pas cette surface (pratique pour garder des vitres ou un logo).
Textures automatiques
À l'import (modèles, véhicules, armes et playermodels), les textures qu'un FBX ou un glTF n'apporte pas sont cherchées à côté du fichier : même dossier, ses sous-dossiers et un dossier textures voisin. Une image est reconnue par son nom :
- un mot de canal :
diffuse,albedo,basecolor,color(couleur) ·normal,nrm·roughness,rough·metallic,metal·emissive,emission·opacity,alpha,mask·ao,occlusion(sans mot de canal, c'est la couleur) ; - et un nom qui ressemble à celui du matériau (ou du modèle) :
Leaves_Diffuse.pngva sur le matériau Leaves,bark_color.jpgsur Bark. Un modèle à un seul matériau prend aussi une texture seule de son type.
Seules les textures manquantes sont ajoutées ; elles sont enregistrées dans le .glb. Dans l'éditeur de modèles, elles sont aussi copiées dans models/textures/ et affichées dans l'onglet Matériaux de chaque surface (avec la transparence choisie), pour les voir et les changer. Une carte d'opacité est mise dans l'alpha de la texture couleur. Un matériau dont la texture couleur a des pixels transparents passe en découpe sur les deux faces (les feuilles ne sont plus noires), ou en transparence douce si son nom évoque du verre ou de l'eau.
Animation
La liste des animations du fichier ; un clic en joue un aperçu. Animation jouée en boucle lance une animation en continu dès que le prop apparaît (ventilateur, drapeau, machine). Les scripts peuvent aussi les contrôler :
-- Ouvre toutes les portes du pack quand un joueur tape /ouvrir.
concommand.Add("ouvrir", function(ply)
for _, prop in ipairs(ents.GetAll()) do
if prop:GetModel() == "addon:local_mon_pack/models/porte.glb" then
prop:PlayAnimation("Open", false) -- une fois, sans boucle
end
end
end)
Voir prop:GetAnimations, PlayAnimation et StopAnimation. Les animations sont synchronisées chez tous les joueurs.
Compresser les textures
Le bouton Compresser les textures… (barre du haut) allège les textures d'un modèle ou de tout le pack, au prix d'un peu de qualité : fichiers plus petits (téléchargement Workshop, FastDL) et moins de mémoire vidéo en jeu.
| Réglage | Effet |
|---|---|
| Textures de | Ce modèle (celui sélectionné) ou tout le pack. |
| Taille maximale | 256 à 4096 pixels (1024 par défaut) : une texture plus grande est réduite en gardant ses proportions ; une plus petite n'est jamais agrandie. |
| Format | JPEG (bien plus léger, avec un curseur de qualité de 40 à 100 %, 85 % par défaut), garder le format de chaque image ou PNG (sans perte, n'allège que par la taille). |
| Garder les normal maps en PNG | Coché par défaut : les blocs du JPEG abîment le relief. Les images avec de la transparence restent toujours en PNG ; une image déjà en JPEG reste en JPEG. |
- La fenêtre calcule d'abord le gain prévu, sans rien écrire (poids des fichiers et mémoire vidéo estimée, avant → après), puis Compresser l'applique. Le calcul tourne en arrière-plan sur plusieurs cœurs.
- Sont traitées : les images intégrées aux
.glb(le fichier est reconstruit autour des nouvelles images, le reste ne change pas), les fichiers d'images des.gltfet les textures choisies dans l'onglet Matériaux (props.json). Une image qui ne deviendrait pas plus légère est laissée telle quelle. - Une image PNG passée en JPEG change d'extension : les
.gltfdu pack etprops.jsonsont mis à jour tout seuls. - Les images d'un
.gltfsont souvent partagées par plusieurs modèles du pack : en ne compressant qu'un modèle, la fenêtre prévient qu'elles changent aussi pour les autres. - Les originaux sont gardés en dehors du pack (dossier
texture_backups/<pack>des données du jeu), donc ils ne partent pas sur le Workshop. Restaurer les originaux remet tous les fichiers du pack tels qu'avant la première compression, réglages des matériaux compris.
Pièces du modèle en Lua
Les objets nommés dans Blender (ou ton logiciel 3D) restent accessibles en Lua : on peut lire leur position, les cacher ou les faire briller. Donne-leur des noms clairs et uniques (Gyro_Rouge_1, Extra_Galerie…) : un nom désigne le premier objet qui le porte. ent:GetNodeNames() les liste.
-- Serveur : gyrophares qui clignotent rouge / bleu toutes les 0,4 s.
local function gyros(voiture)
local rouge = true
timer.Create("gyro_" .. voiture:EntIndex(), 0.4, 0, function()
if not IsValid(voiture) then return end
voiture:SetNodeEmission("Gyro_Rouge_1", rouge and Color(255, 30, 30) or nil, 6)
voiture:SetNodeEmission("Gyro_Bleu_1", (not rouge) and Color(40, 80, 255) or nil, 6)
rouge = not rouge
end)
end
-- Cacher un extra (galerie de toit) :
voiture:SetNodeVisible("Extra_Galerie", false)
- Appelées côté serveur, elles sont synchronisées chez tous les joueurs, y compris ceux qui arrivent après. Côté client, l'effet est local, par-dessus celui du serveur : idéal pour un clignotement rapide sans trafic réseau (voir l'exemple des gyrophares, avec de vraies lumières).
- L'émission s'ajoute au matériau de la pièce (sa texture est gardée) ; seul ce prop s'allume, pas les autres du même modèle. Les matériaux shader personnalisés ne sont pas modifiés.
- Cacher un objet cache aussi ses enfants, mais pas sa collision.
- Cet état vient du Lua : une dupe recrée le prop dans son état d'origine.
Publier et utiliser
- Publier… enregistre le pack puis ouvre l'outil de publication : choisis ton pack dans la liste. Il reçoit le tag
Props. Voir Publier un addon. - Miniature : bouton Photo Workshop (vue actuelle sans collisions ni mannequin, cadrage automatique ou image du PC). Sans photo, une photo automatique est prise à la publication. Voir Miniature.
- Les modèles des packs activés apparaissent dans le menu de spawn (onglet de leur catégorie) et dans l'onglet Props de l'éditeur de map (dans le dossier du pack, sous-dossier de leur catégorie ; les modèles cachés du menu de spawn y restent disponibles dans Cachés (décor)), où ils peuvent être posés comme props physiques ou comme décor (fixe, collision exacte).
- L'éditeur de map peut aussi créer un modèle d'un pack en fusionnant des décors et des blocs de la map (textures précalculées dans un atlas au choix) : voir Fusionner en un modèle.
- Dans l'éditeur de map, le bouton Workshop de l'onglet Props permet de s'abonner à des packs sans quitter l'éditeur.
Le fichier props.json
Tous les réglages sont enregistrés dans models/props.json, un objet par fichier de modèle. Toutes les clés sont facultatives (les anciens fichiers avec seulement name et mass restent valables) et chaque valeur est vérifiée au chargement.
{
"porte.glb": {
"name": "Porte de garage",
"category": "Bâtiment",
"keywords": "garage volet",
"hidden": false,
"mass": 0,
"physics": "metal",
"density": 0,
"frozen": true,
"scale": 1.0,
"rotation": [0, 90, 0],
"offset": [0, 0, 0],
"collision": "shapes",
"shapes": [
{ "type": "box", "pos": [0, 1.2, 0], "rot": [0, 0, 0], "size": [3, 2.4, 0.1] }
],
"materials": {
"0": { "color": "ffffffff", "albedo": "textures/porte.png", "normal": "textures/porte_n.png",
"roughness": 0.6, "metallic": -1, "emission": "000000ff", "emission_energy": 1,
"transparency": "auto", "tintable": true, "lightmap": "" }
},
"autoplay": ""
}
}
| Clé | Valeurs |
|---|---|
physics | wood, plastic, rubber, concrete, metal |
collision | convex ou shapes (32 formes au maximum) |
shapes[].type | box, sphere, capsule, cylinder |
materials | Clé = numéro de la surface (dans l'ordre de l'éditeur). Chemins de textures relatifs au dossier models/, sans ... |
materials[].transparency | "auto" (celle du modèle), "opaque", "cutout" (découpe, deux faces) ou "blend" (verre). Les anciens fichiers avec "transparent": true valent "blend". |
rotation, shapes[].rot | Degrés (ordre Y, X, Z) |
materials[].lightmap | Image d'éclairage précalculé (ombres, lampes) lue sur le 2e jeu d'UV du modèle (UV2, TEXCOORD_1 en glTF) et multipliée par la couleur : blanc = inchangé, noir = dans l'ombre. Le soleil et les lumières de la map éclairent toujours le modèle par-dessus. Réglable dans l'éditeur (Lightmap (UV2)) ; rempli automatiquement par l'import de maps Source. |
autoplay | Nom d'une animation du fichier, ou vide |
hidden | true : absent du menu de spawn (toujours utilisable par son identifiant) |