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 zu einem animierten Stoff eines Segelboots zu erstellen. Wir haben die benutzerdefinierte Einstellung des Avatar-Importers (jetzt der 3D-Importer ) verwendet, um mehr exotische Benutzer角, wie die mysteriösen schwarzen Löcher-Kreaturen und die freundlichen, wenn unbewussten Service-Droids, zu bringen.

Die folgenden Abschnitte gehen über, wie wir Rigging und Skinning verwendet haben, PBR (Aussehen) und VFX, um einen unserer kompliziertesten Charaktere zu bauen, den wir "Creature" genannt haben. Wir wollten, dass er glüht, Emits einige Lichter, hat Spuren von Partikelrauch und einen flüssigen Bewegung, der ein Rig mit genug Gelenken erstellt, um seine überzeugenden Wellen zu erzeug

Creature Banner

Rigging

Als wir die Kreatur ausrüsteten, fanden wir es am besten, den Charakter in einer neutralen Pose zu modellieren, da diese Pose am besten geeignet ist, in mehrere Richtungen zu biegen. Wenn wir die Kreatur mit ihren Tentakel bereits gekräuselt hätten, hätte das Strecken, wenn wir die Tentakel in die andere Richtung animierten. Die folgenden Schnappschüsse zeigen die Kreatur in ihrem natürlichen Zustand:

Von einer neutralen Position aus fügten wir Joints wirtschaftlich hinzu, indem wir uns auf die Bereiche konzentrierten, die die meiste Bewegung benötigten. Die weniger Joints sind besser, da Sie sie verwalten müssen, wenn Sie Ihren Charakter skinen, und Sie weniger haben, um sie zu steuern, wenn Sie sie animieren. In den vorherigen Screenshots sieht die Kreatur so aus, als hätte sie viele Joints im Zentrum, aber der Hauptkörper hat nur einen Verbindung.

Die meisten anderen Gelenke sind in Richtung der Tentakel und der Mandibeln. Mit den Tentakeln wollten wir viel Sekundärbewegung, oder Bewegung, die in mehreren Schichten übereinander ist, um einen überzeugenden Effekt zu erzeugen, dass sie alle auf besitzenWeise bewegen. Die Zentrumsmasse der Tentakel war jedoch so nahe beieinander, dass es vergeblich war, für alle zu erstellen

Creature Front, Maya

Wir fanden die folgenden Richtlinien nützlich, damit die Charakter-Maschine richtig in Studio importiert wird:

  • Individuelle Gelenke und Knochen müssen einzigartige Namen haben.
  • Meshes müssen keinen Namen haben, der mit Gelenken und Knochen übereinstimmt.
  • Meshes sollten keine Transformationen vor dem Skinning/Binden haben; mit anderen Worten, Transformationen sollten 0 sein und Skalierung sollte 1 sein.
  • Mesh-Normale sollten nach außen zugeschnitten (das Modell sollte nicht von innen nach außen schauen).
  • Skelette sollten keinen Skalierungsfaktor haben; alle Gelenke sollten [1, 1, 1] sein.

Skinnend

Wenn wir das Skelett der Kreatur fertiggestellt hatten, war der nächste Schritt, das Mesh zu skinen. Skinning kann eine herausfordernde Aufgabe sein, also um die Dinge einfacher zu machen, ist es am besten, mit den verschiedenen Skin-Einstellungen deiner DCC-Anwendung vertraut zu sein, um dasjenige zu finden, das dir gefällt. Da dies ein organischer Charakter ist, skinn

Schlechtes Skinning
Glattes Skinning

Wir fanden die folgenden Richtlinien produzierten die besten Ergebnisse für Skinning:

  • Skinning-Einflüsse (d.h. sie beeinflussen einen Teil des Modells, wenn sie bewegt werden) sollten ein Maximum von 4 Einflüssen pro Verzeichen sein.
  • Joint und Mesh-Namen müssen einzigartig sein, sowohl innerhalb als auch zwischen einander.
  • Jede Verbindung, die du in Studio importieren möchtest, muss eine bestimmte Auswirkung auf die Skinning-Logik des Modells haben, sonst importiert der Motor sie nicht. Wenn möglich, skin dein Modell in seiner ursprünglichen oder "binden"-Position.

Importiere das Mesh in Studio

Die Importierung Ihrer benutzerdefinierten Charaktere in Studio ist einer der spannendsten Aspekte des Prozesses, denn Sie können Ihre Kreationen in der Erfahrung sehen, die Sie Bauen!

Um das Mesh in Studio zu importieren:

  1. Exportieren Sie den Charakter aus der DCC-Anwendung und stellen Sie sicher, dass die gefolgte ProfileOptionen eingehalten werden:

    • Alle Normale, Skalierungen und Namen sind korrekt.
    • Der Charakter hat alle gemeinsame und Knochen Hierarchie und alle Meshes.
    • Meshes sind alle unter 10.000 Dreieck für jeden Teil des Meshes.
    • Die Gesamtgröße des Meshes liegt nicht über 2000 Einheiten in einer beliebigen Achse.
    • Siehe Mesh Requirements für eine vollständige Liste von Modell-Spezifikationen.
    Creature in DCC Tool
  2. In dem 3D-Importeur importieren Sie die benutzerdefinierte .fbx oder .obj Datei.

    Creature Imported Into Studio

Die Kreatur zum Glühen bringen

Als das Modell der Kreatur stabil war und keine weitere sofortige Import in Studio erforderlich war, begannen wir mit dem Zusammensetzen der Oberflächen-Formen-Objekte, Lichter und visuelle Effekte. Wir taten dies, um sicherzustellen, dass die Qualität des Modells gut genug war, bevor wir mit dem Platzieren und Bearbeiten eines beliebigen Aspekts davon fortfahren.

Glowing Creature Example

Wir wussten, wir wollten, dass die Kreatur dunkel ist, und die Fokuspunkte ihre Augen und ihre "grabby" -Tentakel sind. Hohe Punkte des Kontrasts neigen dazu, Aufmerksamkeit zu ziehen, so dass wir einige starke haben, um den Viewer darauf aufmerksam zu machen. Studio unterstützt Neon-Materialien, die sich selbst beleuchten, also trennten wir die Augen früh, damit sie ihre e

Creature Eyes in Studio

Neon-Materialien emittieren keine reelle Beleuchtung, so nach einigen Tests haben wir separate Teile hinzugefügt, um die Platzierung und Richtung der Beleuchtungsemission zu steuern. Dies hat dafür gesorgt, dass die Beleuchtung in eine Richtung gerichtet ist, um die Glühen der Augen zu verbessern und auch ihre eigene Quelle des Lichts zu projizieren.

Point Light in Studio

Beachten Sie, dass die SpotLights visuelle Fackeln auf die Kreatur in der Nähe anderer Oberflächen oder eines Spieler:inhinzufügen.

Creature Light Example

Darüber hinaus wollten wir, dass die Tentakel der Kreatur einige Partikel emittieren, sodass sie beim Bewegen einen Rauchschweif hinterlassen würden. Da die Tentakel sehr lang sind, würde das Hinzufügen des ParticleEmitter zu der gesamten Tentakel einen Rauchschweif emittieren, anstatt des Spitzen. Um dies zu bekämpfen, verwendeten wir ein kle

Particle Example

VFX folgt dem Charakter

Die Mesh-Positionen des skinierten Charakters werden nicht aktualisiert, wenn die VFX-Animationen ausgeführt werden, daher benötigten wir eine Methode, um sicherzustellen, dass die VFX, SFX und Lichter alle dem Skin folgen. Um dies zu erreichen, haben wir ein VFX-Controller-Skript erstellt und verwendet CollectionService, um die Teile zu informieren, die die VFX enthalten, wo die Knochen der Kreatur sind und folgen.

  1. Wir haben die folgenden LocalScript in StarterPlayer → StarterPlayerScripts platziert. Dies führt im Wesentlichen die VFX-Update-Funktion aus.

    Lokales Skript

    -- Fügen Sie dieses Snippet an ein bestehendes lokales Skript hinzu, das PreSimulation macht
    -- verbindungen
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    Modul-Script

    -- Dieses Modul hat Animationen mit Anlehnungen an die Modelle, so dass sie aktualisiert werden, wenn die
    -- Animation spielt. Es ist ein Workaround für die aktuellen Einschränkungen
    -- mit Gelenken und Knochen und wird nicht immer notwendig sein.
    --
    -- Voraussetzungen:
    -- Um enthalten zu werden, benötigen Modelle das "AnimatedVfxModel"-Tag und einen Ordner
    -- von allen Teilen, mit denen Sie die Animationensynchronisieren möchten. Jeder Teil benötigt
    -- ein Attribut namens "AttachedBoneName", das den Namen des
    -- Knochen, den du anfügen möchtest. Teile sollten auch bereits in ihrem
    -- korrekte positionen im verhältnis zu dem gewünschten knochen.
    --
    -- Um zu verwenden:
    -- Ein LocalScript sollte dieses Modul erfordern, dann verbinden
    -- VFXUpdateModule.updateVFX zum RunService.PreSimulation-Ereignis.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- SETUP - das sollte einmal auf jedem Client ausgeführt werden.
    -- Sammle alle Modelle mit dem Tag
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- wo wir alle teile und offsets speichern
    -- Weisen Sie jedem Modell einen Tisch zu, auf dem alle VFX-Teile und Versatzgespeichert sind
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Finden Sie den VFX-Ordner
    -- Finden Sie den Knochen über das Attribut und berechnen Sie 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 part refers to bone that could not be found.")
    end
    end
    end
    print(vfxTable)
    -- UPDATE - Dies sollte mit jedem Client's RunService.PreSimulation verbunden sein
    -- Gehe durch alle Modelle und aktualisiere dann alle Teile auf dem Modell, um die Knochenlampe 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 jedes Objekt, das mit AnimatedVfxModel auf einem Spielereignis aktualisiert werden soll, auf dem Spiel zu aktualisieren.

  3. Wir haben die notwendigen Modell-Gruppen mit dem AnimatedVFXModel , der von dem Tag-Editor aus zugänglich ist, mit dem Tag-Editor gekennzeichnet. Mit Tags kann der 1> VFXUpdateModule1> wissen, welches Objekt als erstes VFX-Kind gesucht wird, und das Update anwenden.

    VFX In Studio Example
  4. Schließlich haben wir ein AttachedBoneName an das Teil angenommen, das wir animieren wollten, und den genauen Namen der Gruppe hinzugefügt, zu der wir es folgen wollten.

Die Kreatur teksturieren

Nun konfigurieren wir die PBR-Texture-Karten. Diese mächtigen Bitmap-Karten geben der Kreatur den unterschiedlichen Glanz und Oberflächenvariationen, um ihr aussehen zu lassen, als hätte sie viele kleine stolper und imperfektionen. Dieser visuelle Effekt hilft, den Aspekt der Kreatur zu verkaufen, wenn sie näher an den Spieler:inist.

Creature Texturing Comparison

Hier ist, wie wir die Oberflächen-Texturen-Karten erstellt haben:

  1. Die Texturen für diesen Charakter waren alle auf einer "Tafel" pro Karte. Dies machte die Kreatur effizienter und bedeutete, dass wir weniger Texturenkarten oder SurfaceAppearance Objekte zu behandeln hatten.

  2. Für Bereiche, die leuchten oder selbstbeleuchtet sein sollten, wie die "grabby Tentakel", verwendeten wir auch Transparenz auf der SurfaceAppearance, um sich mit diesen Teilen zu verbinden.

    Illumination Example

    Wir fanden es hilfreich, diese Richtlinien zu befolgen, wenn wir die Oberflächen-Textur-Karten erstellen:

    • Stellen Sie sicher, dass Ihre Karten nicht größer als 1024 × 1024 sind.
    • Ihr grüner Kanal muss möglicherweise umgedreht werden, abhängig von der Anwendung, in der Sie gearbeitet haben.

Animiere die Kreatur

Animating ist sehr subjektiv und hat einen persönlichen Stil. Optionen umfassen die erfassen, die Hand-"Schlüsselrahmen"-Animierung in deiner DCC-Anwendung oder die Verwendung des Studio's mächtigen AnimationsEditors.

Wie wir früher erwähnt haben, wollten wir sicherstellen, dass wir genug Gelenke für Flüssigbewegungen sowie genug Gliedmaßen haben, sodass die Kreaturen-Animation natürlich und "lagig" fühlt. Lagern, auch bekannt als zweitere Bewegung, ist etwas, das Sie im täglichen Leben sehen - wenn Sie Ihren Arm auswerfen, reagiert jedes Gelenk auf den ursprünglichen Impuls von Ihrem oberen Arm und jedes Gelenk in Ihrem Körper beweg

Wir haben diese Technik verwendet, um die Kreatur so zu animieren, dass die Gliedmaßen reagieren, wie die Bewegung, die von ihrem Körper getrieben wird, hier gezeigt:

Creature Animation Example

Wenn wir eine externe DCC-Anwendung für die Animationenverwenden, haben wir die folgenden Richtlinien als beste funktionieren gefunden:

  • Setzen Sie die Bildrate auf mindestens 30 Ego-Shooter.
  • Erstellen Sie Ihre Animationen mit dem selben Charakter, zu dem Sie sie anwenden.
  • Exportieren Sie Ihre Animationsdaten als separate .fbx Datei.

Da wir den Charakter außerhalb von Studio animierten, mussten wir den Animations-Editor verwenden, um die Animation .fbx Datei zu importieren. Der Editor ermöglicht es Ihnen, jeden Avatar mit Verbindungen oder Motoren auszuwählen und ihn über Punkte in der Zeitachse zu führen.

Um eine Animationenzu importieren:

  1. Wählen Sie in der Registerkarte Plugins den Animations-Editor.

    Animation Editor In Studio
  2. Wählen Sie den konfigurierten Charakter aus, den Sie in Roblox animieren möchten. Der Charakter sollte derjenige sein, den Sie in Ihrer externen DCC-Anwendung konfigurieren.

  3. Klicken Sie auf die Schaltfläche in der oberen linken Ecke des Editor-Fensters, wählen Sie Importieren von FBX-Animation und suchen Sie Ihre exportierte .fbx Animation-Datei.

    Animation Import Example 1 Animation Import Example 2
  4. Wenn Sie mit Ihrer Animationenzufrieden sind, können Sie sie exportieren, um die Animations-ID zu entdecken, die Sie dann in Roblox-Skripts verwenden können, um sie auszuführen. Zum Beispiel können Sie ein Script zu der Modellgruppe des importierten Charakters hinzufügen und den folgenden Code verwenden, um die Animationenauszuführen:

    Animation Script Example

    local animationId = "YOUR_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)

Endgültige Ergebnisse

Nach ein paar finalen Anpassungen an Farben, Licht hellen und ein paar Partikeleffekten, um ihn ein stärkeren Halo-Effekt vor den Fenstern zu geben, ist das endgültige Ergebnis in der Raumstation!

Final Creature Rendering