Niestandardowe znaki

*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 zaimportować ulepszonych meszy, aby stworzyć wszystko od NPC do animowanej chusty łodzi żaglowej. Użyliśmy ustawień niestandardowych Avatar Importer (teraz 3D Importer ) do wniesienia więcej egzotycznych niestandardowych postaci, takich jak tajemnicze czarne dziury i przyjazne, jeśli nieświadomi, droidy usługowe.

Następne sekcje omówiają, jak używaliśmy rygli i skórki, PBR (wygląd powierzchni) i VFX, aby zbudować jednego z naszych bardziej skomplikowanych postaci, które nazwaliśmy „Creaturem”. Chcieliśmy, aby świeciły, emitowały trochę światła, miały ślady dymu cząsteczek i płynną animację

Creature Banner

Łączenie

Gdy rygaliśmy Zwierzę, znalazliśmy, że najlepiej modelować postać w neutralnej pozy, ponieważ ta pozy jest najlepiej nadająca się do bicia w różnych kierunkach. Jeśli modelowaliśmy Zwierzę z jego już skręconymi tentaklami, to prowadziłoby do rozciągania, jeśli animowaliśmy tentakle w kierunku przeciwnym. Poniższe zdjęcia pokazują Zwierzę w jego naturalnym st

Z neutralnej pozy dodaliśmy łączenia ekonomicznie, skupiając się na obszarach, które wymagały najwięcej ruchu. Im mniej łączeń, tym lepiej, ponieważ będziesz musiał je zarządzać, gdy skórkujesz swojego postaci, a będziesz miał mniej do kontroli, gdy animujesz go. W poprzednich screenach Kreatura wyglądała na to, że ma wiele łączeń w centrum,

Większość innych łączników jest w kierunku tentacles i mandibles. Z tentacles chcieliśmy dużo ruchu wtórnego lub ruchu, który jest warstwowy, aby stworzyć przekonujący efekt, że wszystkie z nich ruszają posiadać. Jnak, masa centrum tentacles była tak bliska, że czuło się marnotrawie, aby stwor

Creature Front, Maya

Znaleźliśmy, że następujące wytyczne są przydatne, aby charakterowa siatka importowały poprawnie do Studio:

  • Poszczególne stawy i kości muszą posiadać unikalne nazwy.
  • Mesze nie mogą mieć tej samej nazwy co stawy i kości.
  • Mesze nie powinny mieć transformacji przed użyciem skórki/związania; inaczej, transformacje powinny być 0, a skalowanie powinny być 1.
  • Normalny wysokowążny powinien spoglądać na zewnątrz (model nie powinien patrzeć w środek).
  • Skelety nie powinny mieć żadnego czynnika skalowania; wszystkie stawy powinny być [1, 1, 1].

Skórz

Gdy zakończyliśmy szkielet Kreatury, następnym krokiem było skórzenie siatki. Skórzenie może być trudne zadaniem, więc aby ułatwić rzecz, najlepiej jest być znajomym z różnymi ustawieniami skórzenia początkowego w aplikacji DCC, aby znaleźć ten, który lubisz. Ponieważ jest to

Zły Skinning
Gładkie Skinning

Znaleźliśmy następujące wytyczne, które wyprodukowały najlepsze wyniki dla skórki:

  • Kolorystyka wpływów (to znaczy, że wpływają one na część modelu, gdy jest poruszana) powinna wynosić maksymalnie 4 wpływy na każdy węzeł.
  • Imiona joint i mesh muszą być unikalne, zarówno wzajemnie, jak i wzajemnie.
  • Każde połączenie, które chcesz zaimportować do Studio, musi mieć pewną wpływ na skórkowanie modelu, w przeciwnym razie silnik nie będzie go importować. Zawsze, gdy to możliwe, skórz swoją model w jego oryginalnej lub "związanej" pozy.

Importowanie Mesh do Studio

Importowanie Twoich niestandardowych postaci do Studio jest jedną z najbardziej ekscytujących części procesu, ponieważ możesz zobaczyć swoje prace w doświadczeniu, które budowanie!

Aby zaimportować siatkę do Studio:

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

    • Wszystkie normalne, skali i nazwiska są poprawne.
    • Charakter ma wszystkie wspólne i kości hierarchia i wszystkie siatki.
    • Mesze są wszystkie poniżej 10 000 trójkąty dla każdej części mesza.
    • Rozmiar całkowity siatki nie przekracza 2000 jednostek w dowolnym wymiarze.
    • Zobacz Wymagania sieciowe dla kompletnego listu specyfikacji modelu.
    Creature in DCC Tool
  2. W Importerze 3D, importuj plik .fbx lub .obj.

    Creature Imported Into Studio

Tworzenie światła stworzenia

Gdy model Stworzenia był stabilny i nie wymagał dalszego importowania do Studio, zaczęliśmy łączyć obiekty SurfaceShape, światła i efekty wizualne. Robiliśmy to, aby upewnić się, że jakość modelu jest wystarczająco dobra, zanim podejmujemy się umieszczenia i edytowania dowolnego aspektu modelu.

Glowing Creature Example

Wiedzieliśmy, że chcemy, aby stworzenie było ciemne, a fokalne punkty były oczy i jego "grabby" tentacles. Wysokie punkty kontrastu mają tendencję do przyciągania uwagi, więc posiadanie kilku silnych jest zapewnienie widzowi, aby skupić się na nim. Studio wspiera materiały neonowe, które samoświecą, więc na początku

Creature Eyes in Studio

Neonowy materiał nie emituje rzeczywistego światła, więc po kilku testach dodaliśmy osobne części do kontroli umieszczenia i kierunku emisji światła. To upewniło, że oświetlenie jest kierowane w taki sposób, aby poprawić świecenie oczu i również projektować własne źródło światła.

Point Light in Studio

Uwaga, że SpotLights dodaje wizualną migotanie do Kreatury w pobliżu innych powierzchni lub gracza.

Creature Light Example

Dodatkowo chcieliśmy, aby pokrywy różdżek Creature's uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej powierzchni uwierzytelnionej pow

Particle Example

Zrobić VFX Zgodnie z postacią

Pozycje siatki postaci z skórki nie są aktualizowane, gdy animacja postaci Creature, więc potrzebowaliśmy metody, aby upewnić się, że VFX, SFX i światła wszystko podążają za Creature poprawnie. Aby to osiągnąć, stworzyliśmy skrypt kontrolera VFX i użyliśmy CollectionService, aby poinformować części, które zawierały VFX, gdzie kości kręcą się i podążaj za nimi.

  1. Umieściliśmy następujące LocalScript w StarterPlayer → StarterPlayerScripts. To zasadniczo wykonuje funkcję aktualizacji VFX.

    Lokalny Skrypt

    -- Dodaj ten kawałek do istniejącego lokalnego skryptu, które umożliwia PreSimulation
    -- łączenia
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    Skrypt modułu

    -- Ten moduł łączy części z animacjami, aby były one aktualizowane jako
    -- Animacja odtwarza. Jest to workaround dla obecnych ograniczeń
    -- z łąkami i kościami i nie zawsze będzie to konieczne.
    --
    -- Wymagania wstępne:
    -- Aby być włączonym, modele muszą mieć tag "AnimatedVfxModel" i katalog
    -- wszystkich części, które chcesz zesynchronizować z animacja. Każda część wymaga
    -- atrybut nazyjący się "AttachedBoneName", który odnosi się do nazwy
    -- kości, do których chcesz załączyć. Części powinny być już w ich
    -- poprawne pozycje w stosunku do pożądanej kości.
    --
    -- Aby użyć:
    -- Lokalny skrypt powinien wymagać tego modułu, a następnie połączyć
    -- VfxUpdateModule.updateVfx do wydarzenia RunService.PreSimulation.
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- ZACHOWANIE - powinno to działać raz na każdym klencie.
    -- Zbierz wszystkie modele z tagiem
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- gdzie przechowamy wszystkie części i odchylenia
    -- Przydziel tabelę dla każdego modelu, który będzie zawierał wszystkie części vfx i kompensację
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- Znajdź katalog VFX
    -- Znajdź kości za pomocą atrybutu i oblicz odległość 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("Vfx part refers to bone that could not be found.")
    end
    end
    end
    print(vfxTable)
    -- AKTUALIZACJA - powinno być powiązane z każdym klientem's RunService.PreSimulation
    -- Przejди przez wszystkie modele, a następnie aktualizuj wszystkie części na modelu, aby dopasować ramę 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. Utworzyliśmy VFXUpdateModule ModuleScript aby powiadomić wszystkie obiekty oznaczone odpowiednio z AnimatedVfxModel aby zaktualizować na wydarzeniu gry.

  3. Tagowaliśmy niezbędne grupy modelowe za pomocą Tagowania Editora, dostępnego z zakładki Zobacz. Używanie tagów umożliwia VFXUpdateModule poznanie, którego obiekt szukać jako pierwsze dziecko VFX i zastosować aktualizacja.

    VFX In Studio Example
  4. W końcu dodaliśmy AttachedBoneName dostosowany attrybut do części, którą chcieliśmy animować, i dodaliśmy dokładną nazwę stawy, którą chcieliśmy, aby obserwować.

Modelowanie Zmian

Następnie ustawiamy mapy tekstur PBR (Physically Based Rendered). Te potężne bitмы dają kreaturze różnorodne odcienie i warstwy, aby wyglądać jakby miała wiele małych zadrapań i niedoskonałości. Ten efekt wizualny pomaga sprzedać wygląd Kreatury, gdy jest bliżej gracza.

Creature Texturing Comparison

Oto jak stworzyliśmy mapy tekstury powierzchni:

  1. Wszystkie mapy tekstur dla tej postaci były na jednej "szklepie" za mapą. To sprawiło, że stworzenie było bardziej wydajne i oznaczało, że musimy się zająć mniej mapami tekstur lub obiektami SurfaceAppearance.

  2. Dla obszarów, które musiały się świecić lub być samo-świecące, takich jak "grabby tentacles", użyliśmy również przejrzystości na SurfaceAppearance, aby wtopić się w te części.

    Illumination Example

    Uważamy, że pomocne było podążanie za tymi wytycznymi podczas tworzenia mapy wyglądu powierzchni:

    • Upewnij się, że twoje mapy nie są większe niż 1024×1024.
    • Zielony kanał może być konieczny do obrócenia w zależności od aplikacji, w której pracowaliście.

Animowanie stworzenia

Animacja jest bardzo subiektywna i ma osobisty styl. Opcje obejmują przechwytywaćkamerą ruchu, animację ręcznego "key frame" w aplikacji DCC lub używanie potężnego Edytora Animacji Studio.

Jak wspomnieliśmy wcześniej, chcieliśmy upewnić się, że mamy wystarczająco dużo połączeń dla ruchu płynnego, a także wystarczająco dużo łączeń, aby animacja postaci czuła się naturalna i "layered". Layering, czyli drugoruch ruchu, jest czymś, co widzisz w życiu codziennym, gdy rzucasz ręką na boku, każdy łączenie reag

Użyliśmy tej techniki, aby animować Kreaturę, aby czuć, że kończyny reagują na ruch kierowany przez jej ciało, jak pokazano tutaj:

Creature Animation Example

Jeśli używamy zewnętrznego aplikacji DCC do animacja, znaleźliśmy, że następujące zasady działania najlepiej odpowiadają:

  • Ustaw wskaźniki klatki na co najmniej 30 strzelanki FPS.
  • Twórz swoje animacje z tego samego postaci, do której zastosowujesz go.
  • エクスポート swoje dane animacji jako odrębny .fbx plik.

Ponieważ animowaliśmy postać poza Studio, musieliśmy użyć Edytora Animacji, aby zaimportować plik animacji .fbx. Editor umożliwia wybór dowolnej postaci z łącznikami lub silnikami i importowanie jej poprzez punkty w czasie.

Aby zaimportować animacja:

  1. W zakładce Plugins wybierz Animatora.

    Animation Editor In Studio
  2. Wybierz postać zaciętą, którą chcesz animować w Roblox. Postać ta powinna być taka sama, jak postać, którą animujesz w swoim zewnętrznym aplikacie DCC.

  3. Kliknij przycisk w górnej lewej sekcji okna편집器owego, wybierz Importuj z animacji FBX i lokalizuj swoje eksportowane animacje .fbx .

    Animation Import Example 1 Animation Import Example 2
  4. Gdy jesteś zadowolony z animacja, możesz ją eksportować, aby odkryć ID animacji, które możesz potem użyć w skryptach Roblox do uruchomienia ich. Na przykład możesz dodać Script do grupy modelowej importowanego postaci i użyć następującego kodu, aby uruchomić animacja:

    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)

Ostateczne wyniki

Po kilku końcowych ulepszeniach kolorów, jasności światła i kilku efektach cząsteczek, aby dać mu bardziej zauważalny efekt halo przed oknami, oto rezultat w stacji kosmicznej!

Final Creature Rendering