自訂角色

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

您可以導入自訂的網格來創建從 NPC 到帆船動畫布的一切。我們使用了 導入器 的自訂設置來引入更異國情調的自訂角色,例如神秘的黑洞生物和友好的、雖然無知的服務機器人。

以下部分介紹了我們如何使用 綁定和皮膚化PBR(表面外觀) 和 VFX 來構建我們稱之為“生物”的其中一個更複雜的角色。我們希望它會發光,發出一些光,有煙霧粒子拖尾,並且有流暢的運動,這涉及到為一個有足夠關節的綁架進行皮膚化,以創造出其觸手的逼真的波動。

生物橫幅

綁定

當我們對生物進行綁定時,我們發現最好在中性姿勢下建模角色,因為該姿勢最適合向多個方向彎曲。如果我們讓生物的觸手已經卷曲,那麼如果我們動畫化觸手向相反方向彎曲時就會出現拉伸。以下截圖展示了生物的自然狀態:

從中性姿勢出發,我們經濟地添加了關節,專注於需要最多運動的區域。關節越少越好,因為在為角色進行皮膚化時您需要管理它們,而且在動畫化時您需要控制的東西會更少。在之前的截圖中,生物的中心看起來有很多關節,但主要的身體只有一個關節。

其他大多數關節都位於觸手和下顎上。對於觸手,我們希望有很多二次運動,或者是會層疊的運動,以創造出一種令人信服的效果,讓它們看起來像是在自主運動。然而,觸手的中央質量如此接近,讓它覺得為所有觸手都製作關節是浪費的,無論是性能還是動畫化的努力。因此,我們將中央質量視為一條大觸手,並在末端處設置了小的“尾部”。

生物正面,Maya

我們發現以下指南很有用,以確保角色網格正確導入到 Studio 中:

  • 單獨的關節和骨骼必須有唯一的名稱。
  • 網格不得與關節和骨骼同名。
  • 網格在進行皮膚化/綁定之前應無變換;換句話說,變換應為 0,縮放應為 1。
  • 網格法線應面向外側(模型不應該是裡外顛倒的)。
  • 骨架不應有任何比例因子;所有關節應為 [1, 1, 1]。

皮膚化

當我們完成生物的骨架後,下一步是為網格進行皮膚化。皮膚化可能是一項繁瑣的任務,因此為了簡化過程,最好熟悉您 DCC 應用程式的不同初始皮膚化設置,以找到您喜歡的設置。由於這是一個有機角色,我們在每個關節上都進行了大量的減少,並在它們之間進行了重疊。這樣一來,彎曲感覺就會平滑,而不是尖銳。以下截圖顯示了糟糕的皮膚化與平滑的皮膚化:

糟糕的皮膚化
平滑的皮膚化

我們發現以下指南可產生最佳的皮膚化效果:

  • 皮膚化影響(意味著它們在移動時影響模型的一部分)每個頂點最多應有 4 個影響。
  • 關節和網格名稱需要是唯一的,彼此之間也應唯一。
  • 任何您希望導入到 Studio 的關節必須對模型的皮膚化有一些影響,否則引擎不會導入它。 盡可能在模型的原始或“綁定”姿勢下進行皮膚化。

將網格導入到 Studio

將您的自訂角色導入到 Studio 中是這個過程中更令人興奮的部分之一,因為您可以在您正在構建的體驗中看到您的創作!

要將網格導入到 Studio 中:

  1. 從 DCC 應用程式中導出角色,並確保以下事項:

    • 所有法線、縮放和名稱均正確。
    • 該角色擁有所有關節和骨骼層級以及所有網格。
    • 每個網格的三角形數量均低於 10,000。
    • 網格的總大小在任何軸上均不超過 2000 單位。
    • 請參見 網格要求 獲取模型規格的完整列表。
    生物在 DCC 工具中
  2. 導入器 中,導入自訂的 .fbx.obj 文件。

    生物導入到 Studio

使生物發光

一旦生物的模型穩定並且不再需要立即導入到 Studio,我們開始組裝 SurfaceAppearance 對象、燈光和視覺效果。我們這樣做是為了確保模型的質量足夠好,然後再進行任何一個方面的放置和編輯。

發光生物示例

我們知道我們希望生物呈現黑暗,而焦點將是眼睛和它的“抓臂”觸手。強對比的高點往往會吸引注意,因此擁有一些強對比的點確保觀眾知道應該集中注意力。Studio 支持自發光的霓虹材料,因此我們在初期將眼睛分開,使它們可以成為與角色其他部分不同的材料。對於觸手,我們也做了類似的事情,讓它們只在尖端發光。

生物眼睛在 Studio

霓虹材料不會發出實際光線,因此經過一些測試後,我們添加了單獨的部分以控制光照的放置和方向。這確保了光照以增強眼睛的光芒的方式進行指向,還能發出自身的光源。

Studio 中的點光源

請注意,SpotLights 在生物靠近其他表面或玩家時添加了視覺效果。

生物光源示例

此外,我們還希望生物的觸手發出一些粒子,這樣在移動時就會留下煙霧拖尾。由於觸手非常長,將 ParticleEmitter 添加到整個觸手會使粒子從整條觸手發出,而不是從尖端。因此,我們在觸手的末端附近放置了小部件,這樣我們就可以控制粒子的發射大小、位置和方向。

粒子示例

使視覺效果跟隨角色

當生物動畫化時,皮膚化角色的網格位置不會更新,因此我們需要一種方法來確保 VFX、SFX 和燈光能正確跟隨生物。為了實現這一點,我們創建了一個 VFX 控制器腳本,並使用 CollectionService 來告知包含 VFX 的部件生物的骨骼位置並讓其跟隨。

  1. 我們在 StarterPlayerStarterPlayerScripts 中放置了以下 LocalScript。這基本上運行 VFX 更新函數。

    本地腳本

    -- 將此代碼片段添加到現有的本地腳本中,使其進行 PreSimulation
    -- 連接
    local RunService = game:GetService("RunService")
    local vfx = require(workspace.VfxUpdateModule)
    RunService.PreSimulation:Connect(vfx.updateVfx)
    模組腳本

    -- 此模組將零件附加到動畫中,因此它們在
    -- 動畫播放時更新。這是針對當前限制的變通方法
    -- 關於關節和骨骼,並不總是必要的。
    --
    -- 前提條件:
    -- 要包含,模型需要標記為 "AnimatedVfxModel",並且需要有一個資料夾
    -- 存放所有要與動畫同步的部件。每個部件需要
    -- 有一個名為 "AttachedBoneName" 的屬性,指代要附加的
    -- 骨骼名稱。部件應該已經相對於所需骨骼在其正確位置進行定位。
    --
    -- 使用方法:
    -- 本地腳本應該引用此模組,然後連接
    -- VfxUpdateModule.updateVfx 到 RunService.PreSimulation 事件。
    local VfxUpdateModule = {}
    local CollectionService = game:GetService("CollectionService")
    -- 設置 - 這應該在每個客戶端上運行一次。
    -- 收集所有標記的模型
    local vfxModels = CollectionService:GetTagged("AnimatedVfxModel")
    local vfxTable = {} -- 我們將在此處存儲所有部件和偏移量
    -- 為每個模型分配一個表,該表將保存所有 vfx 部件和偏移量
    for _, model in vfxModels do
    vfxTable[model] = {}
    local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- 尋找 VFX 資料夾
    -- 通過屬性查找骨骼並計算每個部件的偏移量。
    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 部件提及了無法找到的骨骼。")
    end
    end
    end
    print(vfxTable)
    -- 更新 - 這應該連接到每個客戶端的 RunService.PreSimulation
    -- 遍歷所有模型,然後更新模型上的所有部件以匹配骨骼框架。
    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. 我們創建了一個 VFXUpdateModule ModuleScript,告訴任何標記為 AnimatedVfxModel 的對象在播放事件期間更新。

  3. 我們使用其屬性的 標籤 部分將必要的模型組標記為 AnimatedVfxModel。使用標籤允許 VFXUpdateModule 知道要查找哪個對象作為第一個 VFX 子項並應用更新。

    Studio 中的 VFX 示例
  4. 最後,我們為想要動畫化的部件添加了一個 AttachedBoneName 自定義屬性,並添加了我們希望它跟隨的關節的精確名稱。

為生物設置材質

接下來,我們設置了 PBR(物理基礎渲染)紋理圖。這些強大的位圖使生物具有不同的光澤和表面變化,使其看起來有許多小的顆粒和瑕疵。這種視覺效果有助於在生物接近玩家時,讓它的外觀更加真實。

生物材質比較

以下是我們創建表面外觀紋理圖的過程:

  1. 這個角色的紋理圖都在每張圖的一個“面板”上。這使得生物更高效,也意味著我們需要處理更少的紋理圖或 SurfaceAppearance 對象。

  2. 對於需要發光或自發光的區域,例如“抓臂觸手”,我們還在 SurfaceAppearance 上使用了透明度來與這些部件融合。

    照明示例

    在創建表面外觀紋理圖時,我們發現遵循以下指南很有幫助:

    • 確保您的圖不大於 1024×1024。
    • 根據您所使用的應用程序,您的綠色通道可能需要翻轉。

為生物動畫

動畫是非常主觀的,具有個人風格。選項包括動作捕捉、在您的 DCC 應用中手動“關鍵幀”動畫,或使用 Studio 強大的動畫編輯器

正如我們之前提到的,我們希望確保有足夠多的關節來實現流暢的運動,並且足夠的肢體,以便生物的動作感覺自然且“分層”。分層,也被稱為二次運動,是您在日常生活中看到的東西——當您伸出手臂時,每個關節都在對來自上臂的初始衝擊作出反應,而您身體的每個關節不會同時移動或休息。

我們使用這種技術來動畫化生物,讓肢體感覺像是對身體驅動的運動做出反應,如下所示:

生物動畫示例

如果使用外部 DCC 應用進行動畫,我們發現以下指南效果最佳:

  • 設置幀率至少為 30 FPS。
  • 使用與您應用於角色的同一角色創建動畫。
  • 將您的動畫數據導出為單獨的 .fbx 文件。

由於我們在 Studio 外部動畫化角色,我們需要使用 動畫編輯器 導入動畫 .fbx 文件。編輯器允許您選擇任何帶有關節或馬達的角色,並通過時間軸中的點驅動它們。

要導入動畫:

  1. 在工具欄的 Avatar 標籤中,單擊 Clip Editor

  2. 選擇您想要在 Roblox 中進行動畫的綁定角色。該角色應與您在外部 DCC 應用程式中綁定的角色相同。

  3. 在編輯器窗口的左上部分單擊 按鈕,選擇 從 FBX 動畫導入,然後找到您導出的 .fbx 動畫文件。

    動畫導入示例 2
  4. 當您對動畫滿意時,您可以導出它以獲得動畫 ID,然後您可以在 Roblox 腳本中使用它來運行動畫。例如,您可以將 Script 添加到導入角色的模型組中,並使用以下代碼運行動畫:

    動畫腳本示例

    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)

最終結果

在對顏色、光亮度和一些額外的粒子效果進行幾個調整,以在窗戶前呈現更強的光暈效果後,這是太空站中的最終結果!

最終生物渲染
©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。