Benutzerdefinierte Charaktere

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Du kannst benutzerdefinierte Meshes importieren, um alles von NPCs bis zu einem animierten Segel eines Bootes zu erstellen. Wir haben die benutzerdefinierte Einstellung des Importers verwendet, um exotischere benutzerdefinierte Charaktere, wie die mysteriösen Black Hole-Kreaturen und die freundlichen, aber ahnungslosen Servicedroiden, einzuführen.

Die folgenden Abschnitte erläutern, wie wir Rigging und Skinning, PBR (Oberflächen- erscheinung) und VFX verwendet haben, um einen unserer komplizierteren Charaktere zu erstellen, den wir "Creature" genannt haben. Wir wollten, dass er leuchtet, Licht abgibt, Partikelrauch hinterlässt und eine flüssige Bewegung hat, die das Skinning eines Rigs mit ausreichend Gelenken beinhaltete, um die überzeugenden Wellen seiner Tentakeln zu erzeugen.

Creature Banner

Rig

Als wir das Rigging der Kreatur durchgeführt haben, 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. Hätten wir die Kreatur mit bereits gekrümmten Tentakeln modelliert, hätte das zu einer Dehnung geführt, wenn wir die Tentakeln animiert hätten, um sich in die entgegengesetzte Richtung zu beugen. Die folgenden Screenshots zeigen die Kreatur in ihrem natürlichen Zustand:

Von einer neutralen Pose aus haben wir die Gelenke wirtschaftlich hinzugefügt und uns auf die Bereiche konzentriert, die die meiste Bewegung benötigten. Je weniger Gelenke, desto besser, denn du musst sie beim Skinning deines Charakters verwalten, und du hast weniger zu steuern, wenn du sie animierst. In den vorherigen Screenshots sieht die Kreatur so aus, als hätte sie viele Gelenke im Zentrum, aber der Hauptkörper hat nur ein Gelenk.

Die meisten anderen Gelenke befinden sich in den Tentakeln und Mandibeln. Bei den Tentakeln wollten wir viel sekundäre Bewegung, oder geschichtete Bewegung, um einen überzeugenden Effekt zu erzielen, dass sie sich alle eigenständig bewegen. Das zentrale Mass der Tentakeln war jedoch so nah beieinander, dass es verschwenderisch erschien, für alle Gelenke zu machen, sowohl in Bezug auf die Leistung als auch auf den Aufwand für die Animation. Anstattdessen behandelten wir das zentrale Mass als einen großen Tentakel mit kleineren "Schwänzen", wo die Spitzen das zentrale Mass verließen.

Creature Front, Maya

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 tragen.
  • Meshes sollten vor dem Skinning/Binden keine Transformationen aufweisen; mit anderen Worten, Transformationen sollten 0 und Skalierungen 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 skinnieren. Skinning kann eine mühsame Aufgabe sein; um die Dinge zu erleichtern, ist es am besten, mit den verschiedenen anfänglichen Skinning-Einstellungen deiner DCC-Anwendung vertraut zu sein, um diejenige zu finden, die dir gefällt. Da dies ein organischer Charakter ist, haben wir ihn mit viel Falloff an jedem Gelenk und Überlappungen zwischen ihnen skiniert. So fühlt sich das Biegen sanft und nicht scharf an. Die folgenden Screenshots zeigen schlechtes Skinning und glattes Skinning jeweils:

Schlechtes Skinning
Glattes Skinning

Wir fanden, dass die folgenden Richtlinien die besten Ergebnisse für das Skinning lieferten:

  • Skinning-Einflüsse (das bedeutet, sie wirken sich auf einen Teil des Modells aus, wenn sie bewegt werden) sollten maximal 4 Einflüsse pro Vertex haben.
  • Gelenk- und Mesh-Namen müssen eindeutig sein, sowohl innerhalb voneinander als auch zwischen einander.
  • Jedes Gelenk, das du in Studio importieren möchtest, muss irgendeinen Einfluss auf das Skinning des Modells haben, andernfalls importiert die Engine es nicht. Skiniere dein Modell wann immer möglich in seiner ursprünglichen oder "Bind"-Pose.

Importiere das Mesh nach Studio

Das Importieren deiner benutzerdefinierten Charaktere in Studio ist ein aufregender Teil des Prozesses, da du deine Kreationen in der Erfahrung sehen kannst, die du aufbaust!

Um das Mesh in Studio zu importieren:

  1. Exportiere das Charaktermodell aus der DCC-Anwendung und stelle sicher, dass das 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 gesamte Mesh-Größe überschreitet in keiner Achse 2000 Einheiten.
    • Siehe Mesh-Anforderungen für eine vollständige Liste der Modell-Spezifikationen.
    Creature in DCC Tool
  2. Im Importer, importiere die benutzerdefinierte .fbx oder .obj-Datei.

    Creature Imported Into Studio

Lass die Kreatur leuchten

Sobald das Modell der Kreatur stabil war und keine weitere sofortige Importierung nach Studio erforderte, fingen wir an, 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 platzierten und bearbeiteten.

Glowing Creature Example

Wir wussten, dass wir die Kreatur dunkel gestalten wollten und die Brennpunkte die Augen und ihre "greifenden" Tentakeln sein sollten. Hohe Kontraste ziehen meist die Aufmerksamkeit an, daher sorgen einige starke für den Fokus des Betrachters. Studio unterstützt Neonmaterialien, die sich selbst beleuchten, also trennten wir die Augen zu Beginn, damit sie ein eigenes Material von dem Rest des Charakters haben konnten. Für die Tentakeln taten wir etwas Ähnliches, sodass sie nur an ihren Spitzen leuchten würden.

Creature Eyes in Studio

Neonmaterial emittiert kein tatsächliches Licht. Nach einigen Tests fügten wir separate Teile hinzu, 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 seine eigene Lichtquelle projiziert.

Point Light in Studio

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

Creature Light Example

Darüber hinaus wollten wir, dass die Tentakeln der Kreatur einige Partikel abgeben, sodass sie beim Bewegen eine Rauchspur hinterlassen würden. Da die Tentakeln sehr lang sind, würde das Hinzufügen des ParticleEmitter zum gesamten Tentakel die Partikel von der gesamten Tentakelspitze anstelle der Spitze abgeben. Um dem entgegenzuwirken, verwendeten wir ein kleines Teil, das nahe dem Ende des Tentakels positioniert wurde, damit wir die Emissionsgröße, Platzierung und Richtung der Partikel steuern konnten.

Particle Example

Lass die VFX dem Charakter folgen

Die Positionen des skinierten Charakter-Meshes werden nicht aktualisiert, wenn die Kreatur animiert wird, daher benötigten wir eine Methode, um sicherzustellen, dass die VFX, SFX und Lichter der Kreatur richtig folgen. Um dies zu erreichen, haben wir ein VFX-Controller-Skript erstellt und den CollectionService verwendet, um die Teile, die die VFX enthielten, darüber zu informieren, wo sich die Knochen der Kreatur befanden und ihnen zu folgen.

  1. Wir platzierten das folgende LocalScript in StarterPlayerStarterPlayerScripts. Dies führt im Wesentlichen die VFX-Update-Funktion aus.

    Local Script

    -- Füge diesen Snippet zu einem bestehenden lokalen Skript hinzu, das PreSimulation
    -- Verbindungen herstellt
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    Module Script

    -- Dieses Modul fügt Teile Animationen an, 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.
    --
    -- Voraussetzung:
    -- Um einbezogen zu werden, müssen Modelle das "AnimatedVfxModel"-Tag haben und einen Ordner
    -- aller Teile, die du mit der Animation synchronisieren möchtest. Jedes Teil benötigt
    -- ein Attribut namens "AttachedBoneName", das sich auf den Namen des
    -- Knochens bezieht, an den du es anheften möchtest. Teile sollten sich auch bereits in ihrer
    -- korrekten Position in Bezug auf den gewünschten Knochen befinden.
    --
    -- Verwendung:
    -- Ein LocalScript sollte dieses Modul laden und dann
    -- VfxUpdateModule.updateVfx mit dem RunService.PreSimulation-Ereignis verbinden.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- EINRICHUNG - dies sollte einmal auf jedem Client ausgeführt werden.
    -- Alle Modelle mit dem Tag sammeln
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- wo wir alle Teile und Offset speichern
    -- Weise jeder Modell einen Tisch zu, der alle vfx Teile und Offset halten wird
    for _, model in vfxModels do
    vfxTable[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 do
    local name = part:GetAttribute("AttachedBoneName")
    local bone = model:FindFirstChild(name, true)
    if bone then
    local offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)
    vfxTable[model][part] = {bone, offset}
    else
    warn("Vfx-Teil verweist auf einen Knochen, der nicht gefunden werden konnte.")
    end
    end
    end
    print(vfxTable)
    -- UPDATE - Das sollte an das PreSimulation-Ereignis von jedem Client gekoppelt werden
    -- Gehe durch alle Modelle, dann aktualisiere alle Teile im Modell, um dem Knochen-Cframe zu entsprechen.
    function VfxUpdateModule.updateVfx()
    for model, vfxParts in vfxTable do
    for part, bone in vfxParts do
    part.CFrame = bone[1].TransformedWorldCFrame * bone[2]
    end
    end
    end
    return VfxUpdateModule
  2. Wir haben ein VFXUpdateModule ModuleScript erstellt, um allen Objekten, die entsprechend mit AnimatedVfxModel gekennzeichnet sind, zu sagen, dass sie bei einem Spielevent aktualisiert werden sollen.

  3. Wir haben die erforderlichen Modellgruppen mit AnimatedVfxModel unter Verwendung des Tags-Abschnitts ihrer Eigenschaften gekennzeichnet. Durch die Verwendung von Tags kann das VFXUpdateModule wissen, welches Objekt als erstes VFX-Kind gesucht und das Update angewendet werden soll.

    VFX In Studio Example
  4. Schließlich haben wir ein AttachedBoneName-Benutzerattribut zu dem Teil hinzugefügt, das wir animieren wollten, und den genauen Namen des Gelenks, dem wir folgen wollten, hinzugefügt.

Texturiere die Kreatur

Als Nächstes haben wir die PBR (Physically Based Rendered) Texturen eingerichtet. Diese leistungsstarken Bitmaps verleihen der Kreatur die unterschiedlichen Glanz- und Oberflächenvariationen, um sie wie viele kleine Beulen und Unregelmäßigkeiten aussehen zu lassen. Dieser visuelle Effekt hilft, das Aussehen der Kreatur beim Näherkommen an den Spieler zu unterstützen.

Creature Texturing Comparison

So haben wir die Oberfläche des Erscheinungsbildes Texturen erstellt:

  1. Die Texturen für diesen Charakter waren alle auf einem "Blatt" pro Karte. Dies machte die Kreatur effizienter und bedeutete, dass wir es mit weniger Texturen oder SurfaceAppearance Objekten zu tun hatten.

  2. Für Bereiche, die leuchten oder selbstbeleuchtet sein mussten, wie die "greifenden Tentakeln", haben wir auch Transparenz in der SurfaceAppearance verwendet, um mit diesen Teilen zu verschmelzen.

    Illumination Example

    Wir fanden es hilfreich, die folgenden Richtlinien beim Erstellen von Oberflächen- Erscheinungsbild Texturen zu befolgen:

    • Stelle sicher, dass deine Karten nicht größer als 1024×1024 sind.
    • Dein grüner Kanal muss möglicherweise je nach der Anwendung, in der du gearbeitet hast, umgekehrt werden.

Animieren der Kreatur

Animieren ist sehr subjektiv und hat einen persönlichen Stil. Optionen sind Motion Capture, Hand-"Keyframe"-Animation in deiner DCC-Anwendung oder die Verwendung von Studios leistungsstarkem Animationseditor.

Wie bereits erwähnt, wollten wir sicherstellen, dass wir genug Gelenke für eine flüssige Bewegung und genügend Gliedmaßen hatten, damit die Animation der Kreatur natürlich und "geschichtet" erschien. Schichtung, auch bekannt als sekundäre Bewegung, ist etwas, das du im Alltag siehst — wenn du deinen Arm auswirfst, reagiert jedes Gelenk auf den ersten Impuls deines Oberarms, und jedes Gelenk in deinem 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 durch den Körper verursachte Bewegung reagieren, wie hier gezeigt:

Creature Animation Example

Wenn du eine externe DCC-Anwendung für die Animation verwendest, fanden wir, dass die folgenden Richtlinien am besten funktionieren:

  • Stelle die Bildraten auf mindestens 30 FPS ein.
  • Erstelle deine Animationen mit demselben Charakter, auf den du sie anwendest.
  • Exportiere deine Animationsdaten als separate .fbx-Datei.

Da wir den Charakter außerhalb von Studio animiert haben, mussten wir den Animationseditor verwenden, um die Animations-.fbx-Datei zu importieren. Der Editor erlaubt dir, einen Avatar mit Gelenken oder Motoren auszuwählen und sie über Punkte in der Zeitleiste zu steuern.

Um eine Animation zu importieren:

  1. Klicke im Avatar-Tab der Werkzeugleiste auf Clip-Editor.

  2. Wähle den riggierten Charakter, den du in Roblox animieren möchtest. Der Charakter sollte derselbe sein, den du in deiner externen DCC-Anwendung rigst.

  3. Klicke auf die -Schaltfläche in der oberen linken Ecke des Editorfensters, wähle Import From FBX Animation und finde deine exportierte .fbx-Animationsdatei.

    Animation Import Example 2
  4. Wenn du mit deiner Animation zufrieden bist, kannst du sie exportieren, um die Animations-ID zu entdecken, die du dann in Roblox-Skripten verwenden kannst, um sie auszuführen. Zum Beispiel kannst du eine Script zu der Modellgruppe des importierten Charakters hinzufügen und den folgenden Code verwenden, um die Animation auszuführen:

    Animation Script Example

    local animationId = "DEINE_ANIMATION_ID"
    local char = script.Parent
    local 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, Helligkeiten des Lichts und einigen weiteren Partikeleffekten, um einen stärkeren Halo-Effekt vor Fenstern zu erzeugen, hier das Endergebnis in der Raumstation!

Final Creature Rendering
©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.