Sie können benutzerdefinierte Meshes importieren, um alles von NPCs bis zu einem animierten Segeltuch eines Segelboots zu erstellen. Wir haben die benutzerdefinierte Einstellung des Importers verwendet, um exotischere benutzerdefinierte Charaktere zu importieren, wie die mysteriösen schwarzen Loch-Kreaturen und die freundlichen, wenn auch unaufmerksamen, Servicedroiden.
Die folgenden Abschnitte erläutern, wie wir Rigging und Skinning, PBR (Oberflächenerscheinung) und VFX verwendet haben, um einen unserer komplizierteren Charaktere zu erstellen, den wir "Kreatur" genannt haben. Wir wollten, dass sie leuchtet, Licht ausstrahlt, Rauchpartikel hinterlässt und eine flüssige Bewegung hat, die das Skinning eines Rigs mit genügend Gelenken erforderte, um die überzeugenden Wellen ihrer Tentakel zu erzeugen.

Rig
Als wir die Kreatur riggten, fanden wir es am besten, den Charakter in einer neutralen Pose zu modellieren, da diese Pose am besten geeignet ist, um in mehrere Richtungen zu biegen. Wenn wir die Kreatur mit bereits gekrümmten Tentakeln modelliert hätten, hätte dies zu Dehnungen geführt, wenn wir die Tentakel in die entgegengesetzte Richtung animiert hätten. Die folgenden Screenshots zeigen die Kreatur in ihrem natürlichen Zustand:


Von einer neutralen Pose aus haben wir Gelenke wirtschaftlich hinzugefügt und uns auf die Bereiche konzentriert, die die meiste Bewegung benötigten. Je weniger Gelenke, desto besser, denn Sie müssen sie beim Skinning Ihres Charakters verwalten, und Sie haben weniger zu steuern, wenn Sie sie animieren. In den vorherigen Screenshots sieht die Kreatur so aus, als hätte sie viele Gelenke in der Mitte, aber der Hauptkörper hat nur ein Gelenk.
Die meisten anderen Gelenke befinden sich in Richtung der Tentakel und Mandibeln. Bei den Tentakeln wollten wir viel sekundäre Bewegung oder geschichtete Bewegung, um einen überzeugenden Effekt zu erzeugen, dass sie sich alle von selbst bewegen. Allerdings waren die mittleren Tentakel so nah beieinander, dass es verschwenderisch erschien, für alle Gelenke zu erstellen, sowohl in Bezug auf die Leistung als auch auf den Aufwand, sie zu animieren. Stattdessen behandelten wir die mittlere Masse als einen einzigen großen Tentakel mit kleineren "Schwänzen", wo die Spitzen die mittlere Masse verließen.

Wir fanden die folgenden Richtlinien nützlich, damit das Charakter-Mesh korrekt in Studio importiert wird:
- Einzelne Gelenke und Knochen müssen eindeutige Namen haben.
- Meshes dürfen nicht denselben Namen wie Gelenke und Knochen haben.
- Meshes sollten vor dem Skinning/Binden keine Transformationen haben; mit anderen Worten, Transformationen sollten 0 und Skalierungen sollten 1 sein.
- Mesh-Normalen sollten nach außen zeigen (das Modell sollte nicht innen nach außen aussehen).
- Skelette sollten keinen Skalierungsfaktor haben; alle Gelenke sollten [1, 1, 1] sein.
Skin
Als wir das Skelett der Kreatur fertiggestellt hatten, war der nächste Schritt, das Mesh zu skinnen. Skinning kann eine mühsame Aufgabe sein, daher ist es am besten, sich mit den verschiedenen anfänglichen Skinning-Einstellungen Ihrer DCC-Anwendung vertraut zu machen, um diejenige zu finden, die Ihnen gefällt. Da dies ein organischer Charakter ist, haben wir es mit viel Abfall an jedem Gelenk und Überlappungen zwischen ihnen geskinnt. Auf diese Weise fühlt sich das Biegen glatt und nicht scharf an. Die folgenden Screenshots zeigen schlechtes Skinning und glattes Skinning:


Wir fanden die folgenden Richtlinien führten zu den besten Ergebnissen beim Skinning:
- Skinning-Einflüsse (das bedeutet, sie beeinflussen einen Teil des Modells, wenn sie bewegt werden) sollten maximal 4 Einflüsse pro Vertex haben.
- Gelenk- und Mesh-Namen müssen einzigartig sein, sowohl innerhalb als auch zwischen einander.
- Jedes Gelenk, das Sie in Studio importieren möchten, muss einen Einfluss auf das Skinning des Modells haben, andernfalls importiert die Engine es nicht. Wann immer möglich, skinn Ihr Modell in seiner ursprünglichen oder "Bind"-Pose.
Importieren des Meshes in Studio
Das Importieren Ihrer benutzerdefinierten Charaktere in Studio ist einer der aufregenderen Teile des Prozesses, da Sie Ihre Kreationen im Spiel sehen können, das Sie erstellen!
Um das Mesh in Studio zu importieren:
Exportieren Sie den Charakter aus der DCC-Anwendung und stellen Sie sicher, dass Folgendes zutrifft:
- Alle Normalen, Skalierungen und Namen sind korrekt.
- Der Charakter hat alle Gelenk- und Knochenhierarchien sowie alle Meshes.
- Meshes haben alle weniger als 10.000 Dreiecke für jeden Teil des Meshes.
- Die Gesamtgröße des Meshes überschreitet in keiner Achse 2000 Einheiten.
- Siehe Mesh-Anforderungen für eine vollständige Liste der Modellspezifikationen.

Im Importer das benutzerdefinierte .fbx oder .obj-Dateiformat importieren.

Lassen Sie die Kreatur leuchten
Sobald das Modell der Kreatur stabil war und keine sofortigen Importe mehr in Studio erforderte, begannen wir, die SurfaceAppearance-Objekte, Lichter und visuellen Effekte zusammenzustellen. Wir taten dies, um sicherzustellen, dass die Qualität des Modells gut genug war, bevor wir einen Aspekt davon platzieren und bearbeiten.

Wir wussten, dass wir die Kreatur dunkel haben wollten, und die Brennpunkte sollten die Augen und ihre "greifenden" Tentakel sein. Hohe Kontrastpunkte ziehen tendenziell Aufmerksamkeit an, daher stellen einige starke sicher, dass der Betrachter weiß, worauf er sich konzentrieren soll. Studio unterstützt Neonmaterialien, die selbstleuchtend sind, daher haben wir frühzeitig die Augen getrennt, damit sie ein eigenes Material vom Rest des Charakters haben konnten. Wir haben etwas Ähnliches für die Tentakel gemacht, damit sie nur an den Spitzen leuchten.

Neonmaterial emittiert kein tatsächliches Licht, also haben wir nach einigen Tests separate Teile hinzugefügt, um die Platzierung und Richtung der Lichtemission zu steuern. Dies stellte sicher, dass das Licht so gerichtet war, dass es das Leuchten der Augen verstärkt und auch eine eigene Lichtquelle projiziert.

Beachten Sie, dass die SpotLights visuelle Akzente auf die Kreatur in der Nähe anderer Oberflächen oder eines Spielers setzen.

Darüber hinaus wollten wir, dass die Tentakel der Kreatur einige Partikel emittieren, damit sie beim Bewegen eine Rauchspur hinterlassen. Da die Tentakel sehr lang sind, würde das Hinzufügen des ParticleEmitter zur gesamten Tentakel dazu führen, dass die Partikel von der gesamten Tentakel und nicht von der Spitze emittiert werden. Um dem entgegenzuwirken, verwendeten wir ein kleines Teil, das nahe dem Ende der Tentakel positioniert war, damit wir die Emissionsgröße, Platzierung und Richtung der Partikel steuern konnten.

Lassen Sie die VFX der Kreatur folgen
Die Mesh-Positionen des skinned Charakters werden nicht aktualisiert, wenn die Kreatur animiert wird, daher benötigten wir eine Methode, um sicherzustellen, dass die VFX, SFX und Lichter der Kreatur ordnungsgemäß folgen. Um dies zu erreichen, erstellten wir ein VFX-Controller-Skript und verwendeten CollectionService, um den Teilen, die die VFX enthielten, mitzuteilen, wo die Knochen der Kreatur waren und ihnen zu folgen.
Wir platzierten das folgende LocalScript in StarterPlayer → StarterPlayerScripts. Dies führt im Wesentlichen die VFX-Aktualisierungsfunktion aus.
Lokales Skript-- Fügen Sie diesen Snippet zu einem bestehenden lokalen Skript hinzu, das PreSimulation-- Verbindungen herstelltlocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)Modulskript-- Dieses Modul verbindet Teile mit Animationen, sodass sie aktualisiert werden, während die-- Animation abgespielt wird. Es ist ein Workaround für die aktuellen Einschränkungen-- mit Gelenken und Knochen und wird nicht immer notwendig sein.---- Voraussetzungen:-- Um einbezogen zu werden, müssen Modelle das Tag "AnimatedVfxModel" haben und einen Ordner-- mit allen Teilen, die Sie mit der Animation synchronisieren möchten. Jedes Teil benötigt-- ein Attribut namens "AttachedBoneName", das auf den Namen des-- Knochens verweist, an den Sie es anhängen möchten. Teile sollten auch bereits in ihren-- korrekten Positionen relativ zum gewünschten Knochen sein.---- Verwendung:-- Ein LocalScript sollte dieses Modul anfordern und dann-- VfxUpdateModule.updateVfx mit dem RunService.PreSimulation-Ereignis verbinden.local VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- EINRICHTUNG - dies sollte einmal auf jedem Client ausgeführt werden.-- Alle Modelle mit dem Tag sammelnlocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- hier speichern wir alle Teile und Offsets-- Weisen Sie jedem Modell eine Tabelle zu, die alle vfx Teile und Offsets enthältfor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Finde den VFX-Ordner-- Finde den Knochen über das Attribut und berechne den Offset für jedes Teil.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("Vfx-Teil verweist auf einen Knochen, der nicht gefunden werden konnte.")endendendprint(vfxTable)-- AKTUALISIEREN - Dies sollte mit jedem Client's RunService.PreSimulation verknüpft werden-- Gehen Sie alle Modelle durch und aktualisieren Sie alle Teile des Modells, um mit dem Knochen-CFrame übereinzustimmen.function VfxUpdateModule.updateVfx()for model, vfxParts in vfxTable dofor part, bone in vfxParts dopart.CFrame = bone[1].TransformedWorldCFrame * bone[2]endendendreturn VfxUpdateModuleWir haben ein VFXUpdateModule ModuleScript erstellt, um alle Objekte, die entsprechend mit AnimatedVfxModel getaggt sind, zu informieren, dass sie sich bei einem Spielereignis aktualisieren sollen.
Wir haben die erforderlichen Modellgruppen mit AnimatedVfxModel unter Verwendung des Tags Abschnitts ihrer Eigenschaften getaggt. Die Verwendung von Tags ermöglicht es dem VFXUpdateModule, zu wissen, welches Objekt als erstes VFX-Kind gesucht werden soll und das Update anzuwenden.

Schließlich haben wir ein AttachedBoneName benutzerdefiniertes Attribut zu dem Teil hinzugefügt, das wir animieren wollten, und den genauen Namen des Gelenks hinzugefügt, dem es folgen sollte.
Texturieren der Kreatur
Als nächstes richteten wir die PBR (Physically Based Rendered) Texturkarten ein. Diese leistungsstarken Bitmaps verleihen der Kreatur den unterschiedlichen Glanz und die Oberflächenvariationen, um sie so aussehen zu lassen, als hätte sie viele kleine Beulen und Unvollkommenheiten. Dieser visuelle Effekt hilft, das Erscheinungsbild der Kreatur zu verkaufen, wenn sie näher am Spieler ist.

So haben wir die Oberflächenerscheinung Texturkarten erstellt:
Die Texturkarten für diesen Charakter waren alle auf einem "Blatt" pro Karte. Dies machte die Kreatur effizienter und bedeutete, dass wir mit weniger Texturkarten oder SurfaceAppearance Objekten umgehen mussten.




Für Bereiche, die leuchten oder selbstleuchtend sein sollten, wie die "greifenden Tentakel", verwendeten wir auch Transparenz auf dem SurfaceAppearance, um mit diesen Teilen zu verschmelzen.

Wir fanden es hilfreich, die folgenden Richtlinien beim Erstellen von Oberflächenerscheinung Texturkarten zu befolgen:
- Stellen Sie sicher, dass Ihre Karten nicht größer als 1024×1024 sind.
- Ihr grüner Kanal muss möglicherweise je nach der Anwendung, in der Sie gearbeitet haben, umgekehrt werden.
Animieren der Kreatur
Das Animieren ist sehr subjektiv und hat einen persönlichen Stil. Optionen umfassen Motion-Capture, handgefertigtes "Keyframe"-Animieren in Ihrer DCC-Anwendung oder die Verwendung von Studios leistungsstarkem Animation Editor.
Wie bereits erwähnt, wollten wir sicherstellen, dass wir genügend Gelenke für flüssige Bewegungen sowie genügend Gliedmaßen hatten, damit die Kreaturenanimation natürlich und "geschichtet" wirkt. Schichtung, auch bekannt als sekundäre Bewegung, ist etwas, das Sie im Alltag sehen — wenn Sie Ihren Arm auswerfen, reagiert jedes Gelenk auf den anfänglichen Impuls Ihres Oberarms, und jedes Gelenk in Ihrem Körper bewegt sich nicht oder ruht gleichzeitig.
Wir verwendeten diese Technik, um die Kreatur so zu animieren, dass es sich anfühlte, als würden die Gliedmaßen auf die Bewegung reagieren, die durch ihren Körper angetrieben wird, wie hier gezeigt:

Wenn Sie eine externe DCC-Anwendung für die Animation verwenden, fanden wir die folgenden Richtlinien am besten:
- Stellen Sie die Bildraten auf mindestens 30 FPS ein.
- Erstellen Sie Ihre Animationen mit demselben Charakter, auf den Sie sie anwenden.
- Exportieren Sie Ihre Animationsdaten als separate .fbx-Datei.
Da wir den Charakter außerhalb von Studio animiert haben, mussten wir den Animation Editor verwenden, um die Animations-.fbx-Datei zu importieren. Der Editor ermöglicht es Ihnen, jeden Avatar mit Gelenken oder Motoren auszuwählen und sie über Punkte in der Zeitleiste zu steuern.
Um eine Animation zu importieren:
Klicken Sie im Avatar-Tab der Symbolleiste auf Clip Editor.
Wählen Sie den riggten Charakter aus, den Sie in Roblox animieren möchten. Der Charakter sollte derselbe sein, den Sie in Ihrer externen DCC-Anwendung riggen.
Klicken Sie auf die ⋯-Schaltfläche im oberen linken Bereich des Editorfensters, wählen Sie Import From FBX Animation und suchen Sie Ihre exportierte .fbx Animationsdatei.

Wenn Sie mit Ihrer Animation zufrieden sind, können Sie sie exportieren, um die Animations-ID zu entdecken, die Sie dann in Roblox-Skripten verwenden können, um sie auszuführen. Zum Beispiel können Sie ein Script zur Modellgruppe des importierten Charakters hinzufügen und den folgenden Code verwenden, um die Animation auszuführen:
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)
Endergebnisse
Nach einigen letzten Anpassungen der Farben, Lichthelligkeiten und einigen weiteren Partikeleffekten, um einen stärkeren Halo-Effekt vor Fenstern zu erzeugen, hier das Endergebnis in der Raumstation!
