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 introdurre personaggi personalizzati più esotici, come le misteriose creature del buco nero e i droidi di servizio amichevoli, sebbene ignari.
Le seguenti sezioni trattano di come abbiamo utilizzato il rigging e lo skinning, il PBR (aspetto superficiale) e gli effetti VFX per costruire uno dei nostri personaggi più complicati che abbiamo chiamato "Creatura". Volevamo che brillasse, emettesse luce, avesse tracce di fumi di particelle e un movimento fluido che coinvolgeva lo skinning di una struttura con abbastanza giunture da creare le onde convincenti dei suoi tentacoli.

Rig
Quando stavamo facendo il rigging della Creatura, abbiamo scoperto che era meglio modellare il personaggio in una posa neutra, poiché quella posa è la più adatta a piegarsi in più direzioni. Se avessimo modellato la Creatura con i suoi tentacoli già arricciati, sarebbe stato necessario un allungamento 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 giunti ci sono, meglio è, perché dovrai gestirli quando farai lo skinning del tuo personaggio e avrai meno da controllare durante l'animazione. 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 i mandibole. Con i tentacoli, volevamo un sacco di movimento secondario, o movimento stratificato, per creare un effetto convincente che stessero tutti muovendosi da soli. Tuttavia, la massa centrale dei tentacoli era così ravvicinata che sembrava uno spreco creare giunture per tutti, sia per le prestazioni che per lo sforzo di animarli. Così, invece, abbiamo trattato la massa centrale come un unico 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 di giunture e ossa.
- Le mesh non dovrebbero avere trasformazioni prima dello skinning / binding; in altre parole, le trasformazioni dovrebbero essere 0 e le scale dovrebbero essere 1.
- Le normali delle mesh dovrebbero rivolgersi verso l'esterno (il modello non dovrebbe apparire 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 fare lo skinning della mesh. Lo skinning può essere un compito arduo, quindi per rendere le cose più facili, è meglio essere familiari con le diverse impostazioni iniziali di skinning della tua applicazione DCC per trovare quella che ti piace. Essendo questo un personaggio organico, lo abbiamo fatto con parecchio falloff su ogni giuntura e sovrapposizioni tra di loro. In questo modo, la piegatura appare fluida e non brusca. Gli screenshot seguenti mostrano rispettivamente un cattivo skinning e un buon skinning:


Abbiamo trovato che le seguenti linee guida producono i migliori risultati per lo skinning:
- Le influenze dello skinning (significa che influiscono su una parte del modello quando vengono spostate) dovrebbero essere un massimo di 4 influenze per vertice.
- I nomi delle giunture e delle mesh devono essere unici, sia fra loro che tra di loro.
- Qualsiasi giuntura che vuoi importare in Studio deve avere qualche influenza sullo skinning del modello, altrimenti il motore non la importa. Ogni volta che è possibile, fai lo skinning del tuo modello nella sua posa originale o di "binding".
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 nell'esperienza 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 abbia tutta la gerarchia di giunture e ossa e tutte le mesh.
- Le mesh siano tutte sotto i 10.000 triangoli per ogni parte della mesh.
- La dimensione totale della mesh non superi i 2000 unità in nessun asse.
- Guarda i Requisiti delle Mesh per un elenco completo delle specifiche del modello.

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

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. L'abbiamo fatto per garantire che la qualità del modello fosse sufficiente 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 averne alcuni forti assicura che l'osservatore sappia su cosa focalizzarsi. Studio supporta materiali neon che si auto-illuminano, quindi all'inizio abbiamo separato gli occhi in modo che potessero essere il loro materiale distintivo 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 alcune prove, abbiamo aggiunto parti separate per controllare il posizionamento e la direzione dell'emissione luminosa. Questo garantiva che l'illuminazione fosse diretta in modo da esaltare il bagliore degli occhi e proiettare anche una propria fonte di luce.

Nota che i SpotLights aggiungono flare visivo alla Creatura in prossimità di altre superfici o di un giocatore.

Inoltre, volevamo che i tentacoli della Creatura emettessero delle particelle, quindi lasciassero dietro di sé una scia di fumi quando si muoveva. Poiché i tentacoli sono molto lunghi, aggiungere il ParticleEmitter all'intero tentacolo farebbe emettere le particelle dall'intero tentacolo anziché dalla punta. Per contrastare questo, abbiamo usato 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 VFX dal personaggio
Le posizioni della mesh del personaggio skinato non vengono aggiornate quando la Creatura si anima, quindi avevamo bisogno di un metodo per assicurarci che gli VFX, gli SFX e le luci seguissero tutti correttamente la Creatura. Per realizzarlo, abbiamo creato uno script di controllo VFX e utilizzato CollectionService per informare le parti che contenevano gli VFX dove si trovavano le ossa della creatura e di seguirle.
Abbiamo posizionato il seguente LocalScript in StarterPlayer → StarterPlayerScripts. Questo esegue essenzialmente la funzione di aggiornamento degli 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 alternativa alle 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 della-- giuntura che desideri collegare. Le parti dovrebbero già trovarsi nelle loro-- posizioni corrette rispetto alla giuntura desiderata.---- Per Utilizzare:-- 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 ogni modello che conterrà tutte le parti vfx e offsetfor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Trova la cartellaVFX-- 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 di ogni client-- Attraversa tutti i modelli, quindi aggiorna tutte le parti sul modello per corrispondere al frame di osso.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 a un evento di riproduzione.
Abbiamo contrassegnato i gruppi di modelli necessari con AnimatedVfxModel usando la sezione Tag delle sue proprietà. Utilizzando i tag, il VFXUpdateModule sa quale oggetto cercare come primo VFX child e applicare l'aggiornamento.

Infine, abbiamo aggiunto un attributo personalizzato AttachedBoneName alla parte che volevamo animare e aggiunto il nome preciso della giuntura alla quale volevamo che seguisse.
Texture la creatura
Successivamente, abbiamo impostato le texture PBR (Physically Based Rendered). Queste potenti bitmap conferiscono alla creatura il variopinto lucido e le variazioni superficiali per farla sembrare avere un sacco di piccole protuberanze e imperfezioni. Questo effetto visivo aiuta a vendere l'apparenza della Creatura quando si trova più vicino al giocatore.

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




Per le aree che necessitavano di 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 creiamo le mappe texture di 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
Animare è molto soggettivo e ha uno stile personale. Le opzioni includono motion capture, animazione manuale "key frame" nella tua applicazione DCC, o usare il potente Animation Editor di Studio.
Come abbiamo accennato in precedenza, volevamo assicurarci di avere abbastanza giunture per un movimento fluido così come abbastanza arti, così che l'animazione della creatura apparisse naturale e "stratificata". Il layering, noto anche come movimento secondario, è qualcosa che vedi nella vita quotidiana — quando lanci il braccio, ogni giuntura reagisce all'impulso iniziale proveniente dal tuo braccio superiore, e ogni giuntura del tuo corpo non si muove o si ferma nello stesso momento.
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 un file .fbx separato.
Poiché abbiamo animato il personaggio all'esterno di Studio, abbiamo dovuto utilizzare il 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 riggendo nella tua applicazione DCC esterna.
Fai clic sul pulsante ⋯ nella sezione in alto a sinistra della finestra dell'editor, seleziona Import From FBX Animation, e cerca il tuo file di animazione esportato .fbx.

Quando sei soddisfatto della tua animazione, puoi esportarla per scoprire l'ID dell'animazione, che puoi poi utilizzare negli script di Roblox per farla funzionare. 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 ulteriori effetti di particelle per dare un effetto di alone più forte davanti alle finestre, ecco il risultato finale nella stazione spaziale!
