É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.

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é.

FormatTraitement
.glbCopié 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.

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

Physique

RéglageEffet
Matériau physiqueFriction, rebond et densité : bois (600 kg/m³), plastique (900), caoutchouc (1100), béton (2400), métal (7800).
MasseEn 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'apparitionLe prop apparaît immobile, comme s'il avait été figé au physgun.

Collision

Personnages animésL'enveloppe automatique d'un modèle riggé est calculée dans sa pose de repos. Utilise plutôt une capsule.

Matériaux

Chaque surface du modèle se règle séparément :

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 :

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.

Modèle déjà importéPour un arbre importé avant cette version, choisis Découpe dans la transparence du matériau des feuilles, ou réimporte-le.

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églageEffet
Textures deCe modèle (celui sélectionné) ou tout le pack.
Taille maximale256 à 4096 pixels (1024 par défaut) : une texture plus grande est réduite en gardant ses proportions ; une plus petite n'est jamais agrandie.
FormatJPEG (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 PNGCoché 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.

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)

Publier et utiliser

  1. 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.
  2. 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.
  3. 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).
  4. 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.
  5. 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
physicswood, plastic, rubber, concrete, metal
collisionconvex ou shapes (32 formes au maximum)
shapes[].typebox, sphere, capsule, cylinder
materialsClé = 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[].rotDegrés (ordre Y, X, Z)
materials[].lightmapImage 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.
autoplayNom d'une animation du fichier, ou vide
hiddentrue : absent du menu de spawn (toujours utilisable par son identifiant)