自訂角色

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

您可以從 NPC 到船舶動畫布製作任何東西。 我們使用了 Avatar Importer 的自訂設定 (現在是 3D Importer) 來帶來更多異常的自訂角色,例如神秘的黑洞生物和友善的, 如果無知的服務機器人。

下面的部分介紹了我們如何使用 裝備和外觀PBR (表面外觀) 和 VFX 來建造我們名為“創造者”的其中一個最複雜的角色。我們想要讓它發光、散發一些光、有粒子煙霧的軌跡和一個液體動作,涉及裝備足

Creature Banner

鉆孔

當我們正在設定創生物時,我們發現最好將角色模型為中立姿勢,因為這個姿勢最適合用於彎曲在多個方向。如果我們模型創生物使用它的觸角已經彎曲,它會導致伸展,如果我們動畫觸角向向向彎曲。下列截圖顯示了創生物在自然狀態:

從中立姿勢,我們追加了聯接經濟學,專注於需要最多運動的區域。少於聯接的越多,就越好,因為你必須管理它們,當你購買角色時,你會發現它們的中心部分有很多聯接。在上一個截圖中,創作者看起來有很多聯接,但主體只有一個組合。

大多數其他關節都指向 tentacles 和 mandibles。 使用 tentacles ,我們想要一大量的副動作或動作,這是層次的動作,以創建一個說服效果,讓它們都在自擁有的速度上移動。 但中心 mass 的 tentacles 太接近了,因此感覺無法為所有人建立關節。 因此,我

Creature Front, Maya

我們發現以下指南有用,以便字符網格正確匯入到 Studio:

  • 個別關節和骨頭必須有獨特的名稱。
  • 網格不能與關節和骨骼相同的名稱。
  • 網格應該沒有變形在皮膚/綁定之前;即其他的話,變形應該是0,而縱梯應該是1。
  • 網格雕像應該面向外 (不應該看內部)。
  • 骨架不應該有任何比例因素;所有關節都應該是 [1, 1, 1]。

脫皮

我們完成創生物的骨架後,下一個步驟就是把網格處理好。網格處理可能是一件困難的任務,所以為了讓事情變得更輕鬆,我們建議您熟悉 DCC 應用程式的不同初始網格設定,以便找到您喜歡的網格。

錯誤處理
平滑膚層

我們找到了產生最佳蒙皮效果的指南:

  • 外觀效果 (意味著當移動時會影響模型的某個部分) 應該是最多 4 個效果 per 邊緣。
  • 共同和網格名稱需要獨一無二,在每個人和每個人之間。
  • 你想要匯入 Studio 的任何關節必須對模型的蒙皮造成一些影響,否則引擎才會匯入。當可能時,請將您的模型在原始或 "綁定" 姿勢中外觀。

將網格載入到 Studio

將自訂角色匯入 Studio 是過程中最令人興奮的部分之一,因為您可以在您正在構建造的體驗中查看您的作品!

要將網格匯入到 Studio:

  1. 從 DCC 應用程式輸出角色,並確認以追蹤中:

    • 所有的普通、縮放和名稱都正確。
    • 角色有所有共同和骨骼階層和所有網格。
    • 網格都在 10,000 個三角形以下,每個網格的每個部分。
    • 網格總尺寸不超過 2000 個單位。
    • 參閱網格要求以取得完整列出模型規格。
    Creature in DCC Tool
  2. 在 3D 匯入器 中,將自訂 .fbx.obj 檔案匯入。

    Creature Imported Into Studio

製作生物發光

創作物的模型已穩定,並且不再需要任何更直接的匯入到 Studio 中,我們開始把表面外觀對象、燈光和視覺效果結合起來。我們這麼做是為了確保模型的品質在放置和編輯任何一個方面之前都很好。

Glowing Creature Example

我們知道我們想讓生物黑暗,而焦點是眼睛和其「grabby」 tentacles。高對比度會吸引注意,因此有幾個強力的確保觀眾知道要重點放置在哪裡。 Studio 支援霓虹材料,因此在早期我們將眼睛分離,以便它們能成為其自己的材料從其他角色的

Creature Eyes in Studio

霓虹材料不會發出實際光,因此在一些測試後,我們添加了單獨的零件來控制燈光的方向和方向。這確保了照明是以一種方式方向燈光的發光,並且也為自己的光源提供了光。

Point Light in Studio

注意,SpotLights 會在創物靠近其他表面或玩家時增加視覺效果。

Creature Light Example

此外,我們想要讓海洋生物的 tentacles 發出一些粒子,因此當它移動時會留下煙霧軌跡。因為 tentacles 很長,將 ParticleEmitter 添加到整個 tentacle 將使粒子從整個 tentacle 而不是尖端發出。為了戰鬥此問題,我們使用了一個位

Particle Example

讓 VFX 跟隨角色

當創作者動畫時,會員徵集到大量動畫資料,這些資料包含動畫、特效和燈光,但問題是要確認這些資料是否正確傳輸給 VFX、SFX 和燈光。為了解決此問題,我們創建了一個 VFX 控制器指令碼,並使用 CollectionService 跟隨所有包含動畫的零件。

  1. 我們將以下 LocalScript 放置在 StarterPlayerStarterPlayerScripts 。這樣一來,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 part refers to bone that could not be found.")
    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. 我們使用 Tag 編輯器 ,可以從 檢視 標籤頁面來存取必要的模型群組,並使用 VFXUpdateModule 來知道哪些對象是第一個 VFX 兒童,並應用更新。

    VFX In Studio Example
  4. 最後,我們新增了一個 附加骨頭名稱 自訂屬性於零件,想要動畫的零件,並添加了關節的準確名稱。

處理創作者

接下來,我們設置了 PBR (物理基礎渲染) 材質地圖。這些強大的 bitmaps 為創造物提供了各種不同的表面和光澤變化,讓它看起來像有很多小擊和瑕疵。這個視覺效果幫助出售創造物在玩家最接近時的外觀。

Creature Texturing Comparison

這裡是我們創建地面外觀 texture 的方法:

  1. 這個角色的材質地圖都在一張地圖上。這使得創造物更有效率,並且我們必須處理的材質地圖或 SurfaceAppearance 對象數量減少。

  2. 對於需要發光或自行發光的區域,例如「grabby tentacles」,我們也在 SurfaceAppearance 上使用了透明度,以與那些零件結合。

    Illumination Example

    我們發現有幫助跟隨這些指導方針,當創建表面外觀時量身打造地圖:

    • 請確保您的地圖不大於 1024×1024。
    • 您的綠色頻道可能需要翻轉,這取決於您工作的應用程式。

動畫創物

動畫是非常主觀的,並且有個人風格。選項包括動作捕擷取、手動 "key 框" 動畫在您的 DCC 應用程序中,或使用 Studio 的強大動畫編輯器。

就像我們之前提到的,我們想確認我們有足夠的關節可以讓液體運動,以及足夠的手臂,因此動物動畫感覺自然和「層次」。層次,也就是次要動作,是您在日常生活中看到的一種事情 — 當您從手臂扔出時,每個關節都在反應初始 impulse 從上方手臂,而

我們使用此技術來動畫創造物像身體反應所示:

Creature Animation Example

如果使用外部 DCC 應用程序為動畫,我們發現以下指南最適合:

  • 將框架速率設為至少 30 每射擊幀數。
  • 使用您應用此動畫的角色來創建您的動畫。
  • 將您的動畫資料輸出為 .fbx 個單獨的檔案。

因為我們在 Studio 外動畫角色,因此我們需要使用動畫編輯器來匯入動畫 .fbx 檔案。編輯器讓您選擇任何具有關節或馬達的虛擬人偶並將它們駕駛通過點在時間線上。

要匯入動畫:

  1. 在 Plugins 標籤中選擇動畫編輯器。

    Animation Editor In Studio
  2. 選擇你想要在 Roblox 動畫的貼件角色。 角色應該和您在外部 DCC 應用程式上蓋起的角色相同。

  3. 點擊編輯器窗口的左上角按鈕,選擇從 FBX 動畫匯入,並找到您輸出的 .fbx 動畫文件。

    Animation Import Example 1 Animation Import Example 2
  4. 您對您的動畫滿意後,您可以將其導出來,以發現動畫 ID,並且在 Roblox 指令碼中使用。例如,您可以將 Script 添加到匯入的角色的模型群中,並使用以下代碼來執行動畫:

    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)

最終結果

在幾個最終調整顏色、光澤和一些粒子效果後,這裡是宇宙站前方窗戶前的最終結果!

Final Creature Rendering