Puoi importare mesh personalizzate per creare tutto, dagli NPC a un tessuto animato di una barca a vela. Abbiamo utilizzato l'impostazione personalizzata dell'Importatore per portare in gioco personaggi personalizzati più esotici, come le misteriose creature a buco nero e i droidi di servizio amichevoli, sebbene inconsapevoli.
Le seguenti sezioni trattano di come abbiamo utilizzato rigging e skinning, PBR (aspetto superficiale) e VFX per costruire uno dei nostri personaggi più complicati che abbiamo chiamato "Creatura". Volevamo che brillasse, emettesse luce, avesse scie di fumi di particelle e un movimento fluido che coinvolgesse lo skinning di un rig con abbastanza giunture per creare le onde convincenti dei suoi tentacoli.

Rig
Quando stavamo riggando la Creatura, abbiamo scoperto che era meglio modellare il personaggio in una posa neutra, perché quella posa è la più adatta a piegarsi in più direzioni. Se avessimo modellato la Creatura con i suoi tentacoli già arricciati, ciò avrebbe portato a stiramenti se avessimo animato i tentacoli per piegarsi nella direzione opposta. Gli screenshot seguenti mostrano la Creatura nel suo stato naturale:


Da una posa neutra, abbiamo aggiunto giunture in modo economico, concentrandoci sulle aree che necessitavano del maggior movimento. Meno giunture ci sono, meglio è, perché dovrai gestirle quando skinni il tuo personaggio, e avrai meno da controllare quando le animali. Negli screenshot precedenti, la Creatura sembra avere molte giunture al centro, ma il corpo principale ha solo una giuntura.
La maggior parte delle altre giunture si trova verso i tentacoli e le mandibole. Con i tentacoli, volevamo un sacco di movimento secondario, o movimento stratificato, per creare un effetto convincente che si muovessero tutti da soli. Tuttavia, la massa centrale dei tentacoli era così vicina che sembrava uno spreco creare giunture per tutti, sia in termini di prestazioni che di sforzo per animarli. Così, invece, abbiamo trattato la massa centrale come un singolo grande tentacolo con "code" più piccole dove le punte lasciavano la massa centrale.

Abbiamo trovato utili le seguenti linee guida, affinché la mesh del personaggio venga importata correttamente in Studio:
- Le giunture e le ossa individuali devono avere nomi unici.
- Le mesh non devono avere lo stesso nome delle giunture e delle ossa.
- Le mesh non dovrebbero avere trasformazioni prima dello skinning/legame; in altre parole, le trasformazioni dovrebbero essere 0 e le scale dovrebbero essere 1.
- Le normali delle mesh dovrebbero essere rivolte verso l'esterno (il modello non dovrebbe sembrare dentro-fuori).
- Gli scheletri non dovrebbero avere alcun fattore di scala; tutte le giunture dovrebbero essere [1, 1, 1].
Skin
Quando abbiamo finito lo scheletro della Creatura, il passo successivo è stato skinning della mesh. Lo skinning può essere un compito arduo, quindi per semplificare le cose, è meglio essere familiari con le diverse impostazioni iniziali di skinning della tua applicazione DCC per trovare quella che ti piace. Poiché questo è un personaggio organico, lo abbiamo skinato con molta sfumatura su ogni giuntura e sovrapposizione tra di esse. In questo modo, la piegatura sembra fluida e non netta. Gli screenshot seguenti mostrano rispettivamente un cattivo skinning e uno skinning fluido:


Abbiamo trovato che le seguenti linee guida producono i migliori risultati per lo skinning:
- Le influenze dello skinning (cioè quelle che influenzano una parte del modello quando si muovono) dovrebbero essere un massimo di 4 influenze per vertice.
- I nomi delle giunture e delle mesh devono essere unici, sia tra di loro che all'interno di ciascuno.
- Qualsiasi giuntura che desideri importare in Studio deve avere qualche influenza sullo skinning del modello, altrimenti il motore non la importa. Ogni volta che è possibile, skinna il tuo modello nella sua posa originale o di "legame".
Importa la mesh in Studio
Importare i tuoi personaggi personalizzati in Studio è una delle parti più emozionanti del processo, perché puoi vedere le tue creazioni nel gioco che stai costruendo!
Per importare la mesh in Studio:
Esporta il personaggio dall'applicazione DCC e assicurati che quanto segue:
- Tutte le normali, le scale e i nomi siano corretti.
- Il personaggio ha tutta la gerarchia di giunture e ossa e tutte le mesh.
- Le mesh sono tutte sotto 10.000 triangoli per ogni parte della mesh.
- La dimensione totale della mesh non supera i 2000 unità su nessun asse.
- Vedi Requisiti della Mesh per un elenco completo delle specifiche del modello.

Nell'Importatore, importa il file .fbx o .obj personalizzato.

Fai brillare la creatura
Una volta che il modello della Creatura era stabile e non richiedeva ulteriori importazioni immediate in Studio, abbiamo iniziato a mettere insieme gli oggetti SurfaceAppearance, le luci e gli effetti visivi. Abbiamo fatto questo per assicurarci che la qualità del modello fosse sufficientemente buona prima di procedere a posizionare e modificare qualsiasi aspetto di esso.

Sapevamo di voler che la Creatura fosse scura, e i punti focali fossero gli occhi e i suoi tentacoli "afferranti". I punti di alto contrasto tendono ad attirare l'attenzione, quindi avere alcuni forti assicura che lo spettatore sappia su cosa concentrarsi. Studio supporta materiali neon che si auto-illuminano, quindi all'inizio abbiamo separato gli occhi in modo che potessero essere il loro materiale rispetto al resto del personaggio. Abbiamo fatto qualcosa di simile per i tentacoli, in modo che brillassero solo sulle punte.

Il materiale neon non emette luce reale, quindi dopo alcuni test, abbiamo aggiunto parti separate per controllare il posizionamento e la direzione dell'emissione della luce. Questo ha assicurato che l'illuminazione fosse diretta in modo da migliorare il bagliore degli occhi e anche proiettare la propria fonte di luce.

Nota che i SpotLights aggiungono un tocco visivo alla Creatura vicino ad altre superfici o a un giocatore.

Inoltre, volevamo che i tentacoli della Creatura emettessero alcune particelle, in modo da lasciare dietro di sé una scia di fumo quando si muoveva. Poiché i tentacoli sono molto lunghi, aggiungere il ParticleEmitter all'intero tentacolo avrebbe fatto sì che le particelle emettessero dall'intero tentacolo invece che dalla punta. Per combattere questo, abbiamo utilizzato una piccola parte posizionata vicino alla fine del tentacolo, in modo da poter controllare la dimensione, il posizionamento e la direzione dell'emissione delle particelle.

Fai seguire gli effetti visivi al personaggio
Le posizioni della mesh del personaggio skinato non vengono aggiornate quando la Creatura anima, quindi avevamo bisogno di un metodo per assicurarci che gli effetti visivi, gli effetti sonori e le luci seguissero correttamente la Creatura. Per raggiungere questo obiettivo, abbiamo creato uno script di controllo VFX e utilizzato CollectionService per informare le parti che contenevano gli effetti visivi dove si trovavano le ossa della creatura e per seguirle.
Abbiamo posizionato il seguente LocalScript in StarterPlayer → StarterPlayerScripts. Questo esegue essenzialmente la funzione di aggiornamento VFX.
Script Locale-- Aggiungi questo frammento a uno script locale esistente che crea connessioni PreSimulationlocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)Modulo Script-- Questo modulo collega le parti alle animazioni in modo che vengano aggiornate mentre-- l'animazione viene riprodotta. È una soluzione per le attuali limitazioni-- con Giunture e Ossa e non sarà sempre necessario.---- Prerequisiti:-- Per essere inclusi, i modelli devono avere il tag "AnimatedVfxModel", e una cartella-- di tutte le parti che desideri sincronizzare con l'animazione. Ogni parte deve-- avere un attributo chiamato "AttachedBoneName" che si riferisce al nome dell'-- osso a cui desideri attaccarti. Le parti dovrebbero anche essere già nelle loro-- posizioni corrette rispetto all'osso desiderato.---- Per Usare:-- Uno ScriptLocale dovrebbe richiedere questo modulo, quindi collegare-- VfxUpdateModule.updateVfx all'evento RunService.PreSimulation.local VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- CONFIGURAZIONE - questo dovrebbe essere eseguito una volta su ogni client.-- Raccogli tutti i modelli con il taglocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- dove memorizzeremo tutte le parti e gli offset-- Assegna una tabella a ciascun modello che conterrà tutte le parti vfx e offsetfor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Trova la cartella VFX-- Trova l'osso tramite attributo e calcola l'offset per ogni parte.for _,part in vfxParts dolocal name = part:GetAttribute("AttachedBoneName")local bone = model:FindFirstChild(name, true)if bone thenlocal offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)vfxTable[model][part] = {bone, offset}elsewarn("La parte Vfx si riferisce a un osso che non è stato trovato.")endendendprint(vfxTable)-- AGGIORNAMENTO - Questo dovrebbe essere collegato a ogni RunService.PreSimulation-- Scorri tutti i modelli, quindi aggiorna tutte le parti del modello per corrispondere al bonecframe.function VfxUpdateModule.updateVfx()for model, vfxParts in vfxTable dofor part, bone in vfxParts dopart.CFrame = bone[1].TransformedWorldCFrame * bone[2]endendendreturn VfxUpdateModuleAbbiamo creato un VFXUpdateModule ModuleScript per dire a qualsiasi oggetto contrassegnato appropriatamente con AnimatedVfxModel di aggiornarsi durante un evento di riproduzione.
Abbiamo contrassegnato i gruppi di modelli necessari con AnimatedVfxModel utilizzando la sezione Tag delle sue proprietà. Utilizzare i tag consente al VFXUpdateModule di sapere quale oggetto cercare come primo figlio VFX e di applicare l'aggiornamento.

Infine, abbiamo aggiunto un attributo personalizzato AttachedBoneName alla parte che volevamo animare e aggiunto il nome preciso della giuntura che volevamo seguire.
Texture la creatura
Successivamente, abbiamo impostato le mappe di texture PBR (Physically Based Rendered). Questi potenti bitmap danno alla creatura la lucentezza variata e le variazioni superficiali per farla sembrare avere molti piccoli rilievi e imperfezioni. Questo effetto visivo aiuta a vendere l'aspetto della Creatura quando è più vicina al giocatore.

Ecco come abbiamo creato le mappe di texture dell'aspetto superficiale:
Le mappe di texture per questo personaggio erano tutte su un'unica "tela" per mappa. Questo ha reso la creatura più efficiente e significava che dovevamo gestire meno mappe di texture o oggetti SurfaceAppearance.




Per le aree che dovevano brillare o essere auto-illuminate, come i "tentacoli afferranti", abbiamo anche utilizzato la trasparenza sul SurfaceAppearance per fondere con quelle parti.

Abbiamo trovato utile seguire queste linee guida quando creavamo le mappe di texture dell'aspetto superficiale:
- Assicurati che le tue mappe non siano più grandi di 1024×1024.
- Il tuo canale verde potrebbe dover essere capovolto a seconda dell'applicazione in cui hai lavorato.
Anima la creatura
L'animazione è molto soggettiva e ha uno stile personale. Le opzioni includono la cattura del movimento, l'animazione a mano "key frame" nella tua applicazione DCC, o l'utilizzo del potente Animation Editor di Studio.
Come abbiamo accennato in precedenza, volevamo assicurarci di avere abbastanza giunture per un movimento fluido e anche abbastanza arti, in modo che l'animazione della creatura sembrasse naturale e "stratificata". La stratificazione, nota anche come movimento secondario, è qualcosa che vedi nella vita quotidiana: quando lanci il braccio, ogni giuntura reagisce all'impulso iniziale del tuo braccio superiore, e ogni giuntura del tuo corpo non si muove o riposa allo stesso tempo.
Abbiamo utilizzato questa tecnica per animare la Creatura in modo che gli arti reagissero al movimento guidato dal suo corpo, come mostrato qui:

Se utilizzi un'applicazione DCC esterna per l'animazione, abbiamo trovato che le seguenti linee guida funzionano meglio:
- Imposta i frame rate ad almeno 30 FPS.
- Crea le tue animazioni con lo stesso personaggio a cui le stai applicando.
- Esporta i tuoi dati di animazione come file .fbx separato.
Poiché abbiamo animato il personaggio al di fuori di Studio, abbiamo dovuto utilizzare l'Animation Editor per importare il file di animazione .fbx. L'editor ti consente di selezionare qualsiasi avatar con giunture o motori e guidarli tramite punti nella timeline.
Per importare un'animazione:
Nella scheda Avatar della barra degli strumenti, fai clic su Clip Editor.
Seleziona il personaggio riggato che desideri animare in Roblox. Il personaggio dovrebbe essere lo stesso che stai riggando nella tua applicazione DCC esterna.
Fai clic sul pulsante ⋯ nella sezione superiore sinistra della finestra dell'editor, seleziona Importa da FBX Animation e individua il tuo file di animazione .fbx esportato.

Quando sei soddisfatto della tua animazione, puoi esportarla per scoprire l'ID dell'animazione, che puoi poi utilizzare negli script di Roblox per eseguirli. Ad esempio, puoi aggiungere un Script al gruppo di modelli del personaggio importato e utilizzare il seguente codice per eseguire l'animazione:
local animationId = "YOUR_ANIMATION_ID"local char = script.Parentlocal animController = char:FindFirstChildWhichIsA("Humanoid") or char:FindFirstChildOfClass("AnimationController")local animation = Instance.new("Animation")animation.AnimationId = "rbxassetid://" .. tostring(animationId)local animTrack = animController:LoadAnimation(animation)animTrack:Play(0, 1, 1)
Risultati finali
Dopo alcuni ritocchi finali ai colori, alla luminosità delle luci e ad alcuni effetti di particelle in più per dare un effetto alone più forte davanti alle finestre, ecco il risultato finale nella stazione spaziale!
