Niestandardowe postacie

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Możesz importować niestandardowe siatki, aby stworzyć wszystko, od NPC po animowany żagiel łodzi. Użyliśmy niestandardowego ustawienia Importera, aby wprowadzić bardziej egzotyczne niestandardowe postacie, takie jak tajemnicze stworzenia z czarną dziurą i przyjazne, choć nieświadome, droidy serwisowe.

Poniższe sekcje opisują, jak użyliśmy riggowania i skinowania, PBR (wygląd powierzchni) i efektów VFX, aby zbudować jedną z naszych bardziej skomplikowanych postaci, którą nazwaliśmy "Stworzenie". Chcieliśmy, aby świeciła, emitowała światło, miała smugę cząsteczkowego dymu i płynny ruch, który wymagał skinowania riggu z wystarczającą ilością stawów, aby stworzyć przekonujące fale jej macki.

Baner Stworzenia

Rig

Kiedy riggowaliśmy Stworzenie, stwierdziliśmy, że najlepiej jest modelować postać w neutralnej pozycji, ponieważ ta pozycja najlepiej nadaje się do zginania w wielu kierunkach. Gdybyśmy wymodelowali Stworzenie z już zwiniętymi mackami, prowadziłoby to do rozciągania, jeśli animowalibyśmy macki do zgięcia w przeciwnym kierunku. Poniższe zrzuty ekranu pokazują Stworzenie w jego naturalnym stanie:

Z neutralnej pozycji dodaliśmy stawy oszczędnie, koncentrując się na obszarach, które potrzebowały najwięcej ruchu. Im mniej stawów, tym lepiej, ponieważ będziesz musiał nimi zarządzać podczas skinowania swojej postaci, a ty będziesz miał mniej do kontrolowania podczas animowania. Na wcześniejszych zrzutach ekranu Stworzenie wygląda, jakby miało dużo stawów w środku, ale główne ciało ma tylko jeden staw.

Większość innych stawów znajduje się w kierunku macki i szczęk. W przypadku macki chcieliśmy, aby miały wiele ruchów wtórnych, czyli ruchów warstwowych, aby stworzyć przekonujący efekt, że poruszają się one same. Jednak masa centralna macki była tak blisko siebie, że wydawało się to nieefektywne, aby robić stawy dla wszystkich, zarówno pod względem wydajności, jak i wysiłku, by je animować. Zamiast tego potraktowaliśmy masę centralną jako jedną dużą mackę z mniejszymi "ogonami", gdzie końcówki opuszczały masę centralną.

Stworzenie Front, Maya

Uznaliśmy, że następujące wytyczne były przydatne, aby siatka postaci poprawnie importowała się do Studio:

  • Poszczególne stawy i kości muszą mieć unikalne nazwy.
  • Siatki nie mogą mieć tej samej nazwy co stawy i kości.
  • Siatki powinny nie mieć transformacji przed skinowaniem/przywiązywaniem; innymi słowy, transformacje powinny wynosić 0, a skale powinny wynosić 1.
  • Normale siatki powinny być skierowane na zewnątrz (model nie powinien wyglądać na wywrócony na lewą stronę).
  • Szkielety nie powinny mieć żadnego współczynnika skali; wszystkie stawy powinny być [1, 1, 1].

Skin

Gdy skończyliśmy szkieletem Stworzenia, następnym krokiem było skinowanie siatki. Skinowanie może być uciążliwym zadaniem, więc aby ułatwić sobie sprawę, najlepiej jest zapoznać się z różnymi początkowymi ustawieniami skinowania w swojej aplikacji DCC, aby znaleźć to, które najbardziej Ci odpowiada. Ponieważ jest to postać organiczna, skinnowaliśmy ją z dużą ilością współczynników spadku na każdym stawie i nakładających się między nimi. W ten sposób zginanie staje się płynne, a nie ostre. Poniższe zrzuty ekranu pokazują złe skinowanie i płynne skinowanie odpowiednio:

Złe skinowanie
Płynne skinowanie

Uznaliśmy, że następujące wytyczne przyniosły najlepsze efekty przy skinowaniu:

  • Wpływy skinowania (co oznacza, że wpływają na część modelu podczas ruchu) powinny mieć maksymalnie 4 wpływy na wierzchołek.
  • Nazwy stawów i siatek muszą być unikalne, zarówno względem siebie, jak i pomiędzy sobą.
  • Każdy staw, który chcesz zaimportować do Studio, musi mieć jakiś wpływ na skinowanie modelu, w przeciwnym razie silnik go nie zaimportuje. W miarę możliwości skinuj swój model w jego oryginalnej lub pozycji "bind".

Importowanie siatki do Studio

Importowanie niestandardowych postaci do Studio to jedna z bardziej ekscytujących części procesu, ponieważ możesz zobaczyć swoje dzieła w doświadczeniu, które budujesz!

Aby zaimportować siatkę do Studio:

  1. Eksportuj postać z aplikacji DCC i upewnij się, że:

    • Wszystkie normy, skale i nazwy są poprawne.
    • Postać ma całą hierarchię stawów i kości oraz wszystkie siatki.
    • Siatki mają mniej niż 10 000 trójkątów dla każdej części siatki.
    • Całkowity rozmiar siatki nie przekracza 2000 jednostek w żadnej osi.
    • Zobacz Wymagania dotyczące siatek w celu uzyskania pełnej listy specyfikacji modelu.
    Stworzenie w narzędziu DCC
  2. W Importerze zaimportuj niestandardowy plik .fbx lub .obj.

    Stworzenie zaimportowane do Studio

Spraw, aby stworzenie świeciło

Gdy model Stworzenia był stabilny i nie wymagał już żadnego natychmiastowego importu do Studio, zaczęliśmy składać obiekty SurfaceAppearance, światła i efekty wizualne. Zrobiliśmy to, aby upewnić się, że jakość modelu była wystarczająco dobra przed przystąpieniem do umieszczania i edytowania jakiegoś aspektu.

Przykład świecącego stworzenia

Wiedzieliśmy, że chcemy, aby Stworzenie było ciemne, a punkty centralne to oczy i jego "chwytliwe" macki. Wysokie punkty kontrastu przyciągają uwagę, więc posiadanie kilku mocnych zapewnia, że widz wie, na czym się skupić. Studio obsługuje materiały neonowe, które emitują samoświetlność, więc na początku rozdzieliliśmy oczy, aby mogły być swoim własnym materiałem w porównaniu do reszty postaci. Zrobiliśmy coś podobnego dla macki, aby świeciły tylko na końcach.

Oczy stworzenia w Studio

Materiał neonowy nie emituje rzeczywistego światła, więc po pewnych testach dodaliśmy oddzielne części do kontrolowania umiejscowienia i kierunku emisji światła. Umożliwiło to kierowanie oświetlenia w sposób, który podkreślał blask oczu i również projektował własne źródło światła.

Światło punktowe w Studio

Zauważ, że SpotLights dodają wizualny efekt Stworzenia blisko innych powierzchni lub gracza.

Przykład światła stworzenia

Ponadto chcieliśmy, aby macki Stworzenia emitowały pewne cząsteczki, aby zostawiały smugę dymu, gdy się poruszały. Ponieważ macki są bardzo długie, dodanie ParticleEmitter do całej macki spowodowałoby, że cząsteczki emitowałyby się z całej macki zamiast z końcówki. Aby temu zaradzić, użyliśmy małej części umiejscowionej blisko końca macki, abyśmy mogli kontrolować rozmiar emisji, umiejscowienie i kierunek cząsteczek.

Przykład cząsteczek

Spraw, by VFX podążały za postacią

Pozycje siatki postaci z skinowaniem nie aktualizują się, gdy Stworzenie animuje, więc potrzebowaliśmy metody, aby upewnić się, że efekty VFX, SFX i światła podążały właściwie za Stworzeniem. W tym celu stworzyliśmy skrypt kontrolera VFX i użyliśmy CollectionService, aby poinformować części zawierające VFX, gdzie były kości stworzenia i aby je naśladowały.

  1. Umieściliśmy poniższy LocalScript w StarterPlayerStarterPlayerScripts. To zasadniczo uruchamia funkcję aktualizacji VFX.

    Skrypt lokalny

    -- Dodaj ten fragment do istniejącego skryptu lokalnego, który wykonuje połączenia przed symulacją
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    Skrypt modułowy

    -- Ten moduł łączy części z animacjami, aby były aktualizowane, gdy
    -- animacja się odtwarza. Jest to obejście obecnych ograniczeń
    -- dotyczących stawów i kości i nie zawsze będzie konieczne.
    --
    -- Wymagania wstępne:
    -- Aby być uwzględnionym, modele muszą mieć tag "AnimatedVfxModel" oraz folder
    -- z wszystkimi częściami, które chcesz zsynchronizować z animacją. Każda część musi mieć
    -- atrybut o nazwie "AttachedBoneName", który odnosi się do nazwy
    -- kości, do której chcesz ją przypiąć. Części powinny być również już
    -- w poprawnych pozycjach odpowiednio do pożądanej kości.
    --
    -- Do użycia:
    -- Skrypt lokalny powinien wymagać tego modułu, a następnie połączyć
    -- VfxUpdateModule.updateVfx z wydarzeniem RunService.PreSimulation.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- OBSŁUGA - to powinno być uruchamiane raz na każdy klient.
    -- Zbieranie wszystkich modeli z tagiem
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- gdzie będziemy przechowywać wszystkie części i przesunięcia
    -- Przypisywanie tabeli do każdego modelu, która będzie zawierać wszystkie części vfx i przesunięcie
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Znajdź folder VFX
    -- Znajdź kość za pomocą atrybutu i oblicz przesunięcie dla każdej części.
    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("Część Vfx odnosi się do kości, która nie mogła być znaleziona.")
    end
    end
    end
    print(vfxTable)
    -- AKTUALIZACJA - To powinno być powiązane z każdym klientem RunService.PreSimulation
    -- Przejdź przez wszystkie modele, a następnie zaktualizuj wszystkie części modelu, aby odpowiadały ramkom kości.
    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. Stworzyliśmy VFXUpdateModule ModuleScript, aby poinformować wszelkie obiekty odpowiednio oznaczone AnimatedVfxModel o aktualizacji podczas zdarzenia odtwarzania.

  3. Oznaczyliśmy niezbędne grupy modeli tagiem AnimatedVfxModel z użyciem sekcji Tagi ich właściwości. Używanie tagów pozwala VFXUpdateModule wiedzieć, który obiekt ma szukać jako pierwszego dziecka VFX i zastosować aktualizację.

    VFX w przykładzie Studio
  4. Na koniec dodaliśmy atrybut niestandardowy AttachedBoneName do części, którą chcieliśmy animować i dodaliśmy dokładną nazwę stawu, który chcieliśmy, aby podążał.

Teksturuj stworzenie

Następnie skonfigurowaliśmy tekstury PBR (Physically Based Rendered). Te potężne bitmapy dają stworzeniu zróżnicowany połysk i odchylenia powierzchni, aby wyglądało na to, że ma dużo małych guzków i niedoskonałości. Ten efekt wizualny pomaga sprzedać wygląd Stworzenia, gdy jest bliżej gracza.

Porównanie teksturowania stworzenia

Oto jak stworzyliśmy mapy tekstur powierzchni:

  1. Mapy tekstur dla tej postaci były wszystkie na jednym "arkuszu" na mapę. To sprawiło, że stworzenie było bardziej efektywne i oznaczało, że mieliśmy do czynienia z mniejszą ilością map tekstur lub obiektów SurfaceAppearance.

  2. Dla obszarów, które miały świecić lub być samoświetlone, takich jak "chwytliwe macki", użyliśmy również przezroczystości na SurfaceAppearance, aby zintegrować je z tymi częściami.

    Przykład iluminacji

    Uznaliśmy, że pomocne jest przestrzeganie następujących wytycznych podczas tworzenia map tekstur powierzchni:

    • Upewnij się, że Twoje mapy nie są większe niż 1024×1024.
    • Twój zielony kanał może wymagać odwrócenia w zależności od aplikacji, w której pracowałeś.

Animuj stworzenie

Animowanie jest bardzo subiektywne i ma osobisty styl. Opcje obejmują ruch zespołowy, ręczne "klatkowe" animowanie w Twojej aplikacji DCC lub korzystanie z potężnego Edytora Animacji w Studio.

Jak już wspomnieliśmy, chcieliśmy upewnić się, że mamy wystarczającą ilość stawów dla płynnego ruchu, jak również wystarczającą ilość kończyn, aby animacja stwora wydawała się naturalna i "wielowarstwowa". Warstwowanie, znane również jako ruch wtórny, to coś, co widzisz w codziennym życiu — gdy wysuwasz ramię, każdy staw reaguje na początkowy impuls z górnej części ramienia, a każdy staw w ciele nie porusza się lub nie odpoczywa w tym samym czasie.

Użyliśmy tej techniki, aby animować Stworzenie, aby poczuć, że kończyny reagują na ruch napędzany przez jego ciało, jak pokazano tutaj:

Przykład animacji stworzenia

Jeśli używasz zewnętrznej aplikacji DCC do animacji, odkryliśmy, że następujące wytyczne najlepiej działają:

  • Ustaw częstotliwości klatek na co najmniej 30 FPS.
  • Twórz animacje z tą samą postacią, do której je stosujesz.
  • Eksportuj dane animacji jako oddzielny plik .fbx.

Ponieważ animowaliśmy postać poza Studio, musieliśmy użyć Edytora Animacji, aby zaimportować plik animacji .fbx. Edytor pozwala na wybranie dowolnego awatara z stawami lub silnikami i sterowanie nimi za pomocą punktów w osi czasu.

Aby zaimportować animację:

  1. W zakładce Awatar na pasku narzędzi kliknij Edytor Klipów.

  2. Wybierz riggowaną postać, którą chcesz animować w Roblox. Postać powinna być tą samą, którą rigujesz w swojej zewnętrznej aplikacji DCC.

  3. Kliknij przycisk w górnej lewej sekcji okna edytora, wybierz Importuj z FBX Animation i zlokalizuj wyeksportowany plik animacji .fbx.

    Przykład importu animacji 2
  4. Gdy będziesz zadowolony ze swojej animacji, możesz ją wyeksportować, aby odkryć identyfikator animacji, który możesz następnie wykorzystać w skryptach Roblox do ich uruchomienia. Na przykład, możesz dodać Script do grupy modelu zaimportowanej postaci i użyć następującego kodu do uruchomienia animacji:

    Przykład skryptu animacji

    local animationId = "TWÓJ_IDENTYFIKATOR_ANIMACJI"
    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)

Ostateczne wyniki

Po kilku ostatnich korektach kolorów, jasności światła i kilku dodatkowych efektów cząsteczkowych, aby uzyskać silniejszy efekt aureoli przed oknami, oto ostateczny rezultat w stacji kosmicznej!

Ostateczne renderowanie stworzenia
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.