คุณสามารถนำเข้าขนาดรูปแบบที่กำหนดเองเพื่อสร้างทุกอย่างตั้งแต่ NPC ไปจนถึงผ้าใบที่มีการเคลื่อนไหวของเรือใบ เราใช้การตั้งค่าที่กำหนดเองของ Importer เพื่อนำเข้าตัวละครที่กำหนดเองที่แปลกประหลาดมากขึ้น เช่น สัตว์ประหลาดหลุมดำลึกลับและหุ่นยนต์บริการที่เป็นมิตร หากไม่ทราบ
ส่วนถัดไปจะพูดถึงวิธีที่เราใช้ rigging และ skinning, PBR (ผิว ลักษณะ) และ VFX ในการสร้างหนึ่งในตัวละครที่ซับซ้อนกว่าที่เราเรียกว่า "Creature" เราต้องการให้มันส่องแสง, แผ่แสงบางอย่าง, มีเส้นทางของควันอนุภาค, และการเคลื่อนไหวที่หน่วยเหลือในการทำให้มีการเคลื่อนไหวที่คล่องแคล่วที่เกี่ยวข้องกับการทำผิวด้วยร่างกายที่มีข้อต่อเพียงพอในการสร้างคลื่นที่น่าเชื่อถือของหนวดของมัน

Rig
เมื่อเราได้ทำการจัดระเบียบ Creature แล้ว เราพบว่าการสร้างตัวละครในท่าตรวจสอบที่เป็นกลางดีที่สุด เพราะท่านั้นเหมาะสมที่สุดในการงอในหลายทิศทาง หากเราโมเดล Creature ด้วยหนวดของมันที่ม้วนแล้ว มันจะทำให้เกิดการยืดออกหากเราทำการเคลื่อนไหวของหนวดเป็นทิศทางตรงกันข้าม สกรีนช็อตต่อไปนี้แสดงให้เห็น Creature ในสภาพธรรมชาติของมัน:


จากท่าตรวจสอบที่เป็นกลาง เราได้เพิ่มข้อต่ออย่างประหยัด โดยมุ่งเน้นไปที่พื้นที่ที่ต้องการการเคลื่อนไหวมากที่สุด ข้อต่อน้อยลงยิ่งดี เพราะคุณจะต้องจัดการกับพวกเขาเมื่อทำผิวตัวละครของคุณ และคุณจะมีน้อยลงในการควบคุมเมื่อคุณทำให้พวกเขาเคลื่อนไหว ในสกรีนช็อตก่อนหน้านี้ Creature ดูเหมือนมีข้อต่อมากมายอยู่ที่กลาง แต่ร่างกายหลักมีเพียงข้อต่อเดียวเท่านั้น
ส่วนใหญ่ของข้อต่ออื่นๆ อยู่ที่หนวดและกราม สำหรับหนวด เราต้องการให้มีการเคลื่อนไหวรองมากมายหรือการเคลื่อนไหวที่ชั้นเพื่อสร้างเอฟเฟกต์ที่น่าเชื่อถือว่าพวกมันเคลื่อนไหวเป็นอิสระ อย่างไรก็ตาม มวลกลางของหนวดอยู่ใกล้กันมากจึงรู้สึกเหมือนฟุ่มเฟือยหากทำข้อต่อสำหรับพวกมันทั้งหมด ทั้งในด้านประสิทธิภาพและความพยายามในการทำให้เคลื่อนไหว ดังนั้นแทนที่จะทำเช่นนั้น เราจึงเห็นว่ามวลกลางเหมือนหนวดใหญ่ขนาดใหญ่อันหนึ่งที่มี "หาง" เล็กที่ปลายออกจากศูนย์กลางของมัน

เราเห็นว่าคำแนะนำต่อไปนี้มีประโยชน์ เพื่อให้การนำเข้าขนาดของตัวละครถูกต้องใน Studio:
- ข้อต่อและกระดูกแต่ละตัวต้องมีชื่อที่ไม่ซ้ำใคร
- ขนาดรูปแบบต้องไม่มีชื่อเดียวกับข้อต่อและกระดูก
- ขนาดรูปแบบควรไม่มีการเปลี่ยนแปลงก่อนการทำผิว/การผูก; กล่าวอีกนัยหนึ่งการเปลี่ยนแปลงควรเป็น 0 และการปรับขนาดควรเป็น 1
- ปกติของขนาดรูปแบบควรหันออกไปข้างนอก (โมเดลไม่ควรดูภายใน)
- โครงกระดูกไม่ควรมีปัจจัยการปรับขนาด ข้อต่อทั้งหมดควรเป็น [1, 1, 1].
Skin
เมื่อเราเสร็จสิ้นโครงกระดูกของ Creature ขั้นตอนถัดไปคือการทำผิวให้กับขนาดรูปแบบ การทำผิวอาจเป็นงานที่ยุ่งยาก ดังนั้นเพื่อให้ง่ายขึ้นควรทำความคุ้นเคยกับการตั้งค่าการทำผิวเริ่มต้นที่แตกต่างกันของคุณ DCC แอปพลิเคชันเพื่อค้นหาค่าที่คุณชอบ เนื่องจากนี่เป็นตัวละครออร์แกนิก เราลงผิวให้มันด้วยการลดความรุนแรงที่มากมายบนแต่ละข้อต่อและการทับกันระหว่างกัน ด้วยวิธีนี้การงอจึงรู้สึกเรียบและไม่คม สกรีนช็อตต่อไปนี้แสดงการทำผิวที่ไม่ดีและการทำผิวที่เรียบตามลำดับ:


เราเห็นว่าคำแนะนำต่อไปนี้สร้างผลลัพธ์ที่ดีที่สุดสำหรับการทำผิว:
- อิทธิพลการทำผิว (หมายถึงพวกเขาได้รับผลกระทบจากส่วนหนึ่งของโมเดลเมื่อมีการเคลื่อนไหว) ควรมีสูงสุด 4 อิทธิพลต่อจุด
- ชื่อข้อต่อและขนาดรูปแบบต้องมีความไม่ซ้ำกันทั้งภายในและการแบ่งกัน
- ข้อต่อใดๆ ที่คุณต้องการนำเข้ามาใน Studio ต้องมีอิทธิพลต่อการทำผิวของโมเดล มิฉะนั้นเอนจินจะไม่ได้นำเข้ามา ทุกครั้งที่เป็นไปได้ ควรทำผิวโมเดลในท่าต้นฉบับหรือ "ผูก"
นำเข้าขนาดรูปแบบไปยัง Studio
การนำเข้าตัวละครที่กำหนดเองของคุณใน Studio เป็นหนึ่งในส่วนที่น่าตื่นเต้นที่สุดของกระบวนการ เพราะคุณได้เห็นการสร้างสรรค์ของคุณในประสบการณ์ที่คุณกำลังสร้าง!
เมื่อนำเข้าขนาดรูปแบบไปยัง Studio:
ส่งออกตัวละครจากแอปพลิเคชัน DCC และตรวจสอบสิ่งต่อไปนี้:
- ปกติทั้งหมด, ขนาด, และชื่อถูกต้อง
- ตัวละครมีลำดับชั้นของข้อต่อและกระดูกทั้งหมดและขนาดรูปแบบทั้งหมด
- ขนาดรูปแบบทั้งหมดต้องอยู่ใต้ 10,000 สามเหลี่ยมสำหรับแต่ละส่วนของขนาดรูปแบบ
- ขนาดรวมของขนาดรูปแบบไม่ควรเกิน 2000 หน่วยในแกนใดๆ
- ดู ข้อกำหนดของขนาดรูปแบบ สำหรับรายชื่อข้อกำหนดของโมเดลทั้งหมด

ใน Importer ให้นำเข้าขนาดไฟล์ .fbx หรือ .obj ที่กำหนดเอง

ทำให้สิ่งมีชีวิตส่องแสง
เมื่อโมเดลของ Creature มีความเสถียรและไม่ต้องการนำเข้าสู่ Studio อีกแล้ว เราเริ่มรวบรวมวัตถุ SurfaceAppearance, ไฟล์, และเอฟเฟกต์ภาพ. เราทำเช่นนี้เพื่อให้แน่ใจว่าคุณภาพของโมเดลดีพอที่จะดำเนินการต่อไปในการวางและแก้ไขอย่างหนึ่งเดียว

เรารู้ว่าเราต้องการให้ Creature มีสีเข้ม และจุดที่ให้ความสำคัญคือดวงตาและหนวด "ที่จับได้" ของมัน จุดที่มีการเปรียบเทียบสูงมักมีแนวโน้มดึงดูดความสนใจ ดังนั้นการมีจุดที่แข็งแรงบางจุดช่วยทำให้ผู้ชมรู้ว่าจะให้ความสำคัญกับอะไร Studio รองรับวัสดุเรืองแสงที่ส่องสว่างเองดังนั้นในระยะแรกเราจึงแยกดวงตาออกเพื่อให้เป็นวัสดุของตนเองจากตัวละครที่เหลือ เราทำสิ่งที่คล้ายกันสำหรับหนวดเพื่อให้พวกมันส่องแสงที่ปลายเท่านั้น

วัสดุเรืองแสงไม่ผลิตแสงจริง ดังนั้นหลังจากการทดลองบางอย่างเราจึงเพิ่มส่วนแยกเพื่อควบคุมการวางและทิศทางของการออกซึ่งอันดับนี้ช่วยให้แน่ใจว่าแสงมีการควบคุมในลักษณะที่ช่วยเพิ่มประกายของดวงตาและยังส่งแสงออกจากแหล่งที่มาของมันเอง

โปรดสังเกตว่า SpotLights เพิ่มความน่าสนใจให้กับ Creature ใกล้พื้นผิวอื่นๆ หรือผู้เล่น

นอกจากนี้เราอยากให้หนวดของ Creature ปล่อยอนุภาคออกมา ดังนั้นมันจึงทิ้งไว้เบื้องหลังเป็นเส้นทางควันที่มันเคลื่อนไหว เนื่องจากหนวดมีความยาวมาก การเพิ่ม ParticleEmitter ลงในหนวดทั้งหมดจะทำให้อนุภาคออกจากหนวดทั้งหมดแทนที่จะเป็นปลาย เพื่อจัดการกับสิ่งนี้ เราใช้ส่วนเล็กๆ ที่วางใกล้ปลายของหนวดเพื่อให้เราสามารถควบคุมขนาดการปล่อย, การวาง, และทิศทางของอนุภาคได้

ทำให้ VFX ตามตัวละคร
ตำแหน่งของขนาดรูปแบบที่ผิวอยู่ไม่ได้รับการอัปเดตเมื่อ Creature เคลื่อนไหว ดังนั้นเราจึงต้องการวิธีการที่จะทำให้แน่ใจว่า VFX, SFX, และไฟทั้งหมดตาม Creature อย่างถูกต้อง เพื่อให้บรรลุเรื่องนี้ เราสร้างสคริปต์ควบคุม VFX และใช้ CollectionService เพื่อแจ้งให้ส่วนที่มี VFX รู้ว่ากระดูกของ Creature อยู่ที่ไหนและตามกัน
เราได้วาง LocalScript ต่อไปนี้ใน StarterPlayer → StarterPlayerScripts ซึ่งมันถูกเริ่มใช้งานฟังก์ชันการอัปเดต VFX
Local Script-- เพิ่มโค้ดนี้ลงในสคริปต์ท้องถิ่นที่มีการเชื่อมต่อ PreSimulation อยู่แล้วlocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)Module Script-- โมดูลนี้แนบส่วนเข้ากับภาพเคลื่อนไหวเพื่อให้มีการอัปเดตตามเวลาที่-- การเคลื่อนไหวเล่น มันเป็นทางออกสำหรับข้อจำกัดปัจจุบัน-- กับข้อต่อและกระดูกและอาจไม่จำเป็นเสมอไป---- ข้อกำหนด:-- เพื่อรวม โมเดลต้องมีแท็ก "AnimatedVfxModel" และโฟลเดอร์-- ของส่วนทั้งหมดที่คุณต้องการซิงค์กับการเคลื่อนไหว ทุกส่วนต้องมี-- แอตทริบิวต์ชื่อ "AttachedBoneName" ที่อ้างถึงชื่อของ-- กระดูกที่คุณต้องการติดอยู่ ส่วนต้องอยู่ในตำแหน่งที่ถูกต้องสัมพันธ์กับกระดูกที่ต้องการ---- การใช้งาน:-- LocalScript ควรเรียกใช้โมดูลนี้ จากนั้นเชื่อมต่อ-- VfxUpdateModule.updateVfx กับเหตุการณ์ RunService.PreSimulation.local VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- SETUP - นี้ควรทำครั้งเดียวในแต่ละไคลเอนต์-- เก็บรวบรวมโมเดลทั้งหมดที่มีแท็กlocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- ที่เราจะเก็บส่วนพวกนี้และการเคลื่อนที่-- กำหนดตารางให้กับแต่ละโมเดลซึ่งจะเก็บส่วน VFX ทั้งหมดและการเคลื่อนที่for _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- ค้นหาโฟลเดอร์ VFX-- ค้นหากระดูกจากแอตทริบิวต์และคำนวณการเคลื่อนที่ของแต่ละส่วนfor _,part in vfxParts dolocal name = part:GetAttribute("AttachedBoneName")local bone = model:FindFirstChild(name, true)if bone thenlocal offset = (bone.TransformedWorldCFrame:inverse() * part.CFrame)vfxTable[model][part] = {bone, offset}elsewarn("ส่วน VFX อ้างถึงกระดูกที่ไม่สามารถพบได้.")endendendprint(vfxTable)-- UPDATE - นี้ควรเชื่อมโยงกับ RunService.PreSimulation ของแต่ละไคลเอนต์-- ผ่านโมเดลทั้งหมด จากนั้นอัปเดตทุกส่วนในโมเดลให้ตรงกับกระดูกfunction VfxUpdateModule.updateVfx()for model, vfxParts in vfxTable dofor part, bone in vfxParts dopart.CFrame = bone[1].TransformedWorldCFrame * bone[2]endendendreturn VfxUpdateModuleเราสร้าง VFXUpdateModule ModuleScript เพื่อตอบสนองต่อวัตถุที่ได้รับการติดแท็กอย่างเหมาะสมด้วย AnimatedVfxModel ให้ทำการอัปเดตทุกครั้งที่เกิดเหตุการณ์การเล่น
เราได้ติดแท็กกลุ่มโมเดลที่จำเป็นด้วย AnimatedVfxModel โดยใช้ส่วน Tags ในคุณสมบัติของมัน การใช้แท็กช่วยให้ VFXUpdateModule รู้ว่าควรมองหาโฟลเดอร์ VFX แรกที่ไหนและทำการอัปเดต

สุดท้ายเราได้เพิ่มแอตทริบิวต์ที่กำหนดเองชื่อ AttachedBoneName ให้กับส่วนที่เราต้องการให้อยู่กับการเคลื่อนไหว และเพิ่มชื่อที่แม่นยำของข้อต่อที่เราต้องการให้มันติดตาม
ทำให้สิ่งมีชีวิตมีพื้นผิว
ถัดไป เราจัดตั้งแผนที่พื้นผิว PBR (Physically Based Rendered) แผนที่ภาพที่มีพลังงานเหล่านี้ให้ความหลากหลายและความเงางามที่ทำให้สิ่งมีชีวิตดูเหมือนกับว่ามีรอยบุบและไม่สม่ำเสมอเล็กน้อย เอฟเฟกต์นี้ช่วยขายลักษณะของ Creature เมื่อมันใกล้กับผู้เล่น

นี่คือวิธีที่เราสร้างแผนที่พื้นผิว:
แผนที่พื้นผิวสำหรับตัวละครนี้ทั้งหมดอยู่ใน "แผ่น" เดียวต่อแผนที่ ซึ่งทำให้ Creature มีประสิทธิภาพมากขึ้นและหมายความว่าเรามีการจัดการกับแผนที่พื้นผิวน้อยลงหรือวัตถุ SurfaceAppearance




สำหรับพื้นที่ที่ต้องการส่องสว่างหรือให้แสงตัวเอง เช่น "หนวดที่จับได้" เรายังใช้ความโปร่งใสใน SurfaceAppearance เพื่อผสมผสานกับส่วนเหล่านั้น

เราพบว่ามันมีประโยชน์ที่จะปฏิบัติตามแนวทางต่อไปนี้เมื่อสร้างแผนที่พื้นผิว:
- ตรวจสอบให้แน่ใจว่าแผนที่ของคุณไม่ใหญ่กว่า 1024×1024
- ช่องสีเขียวของคุณอาจต้องกลับด้านขึ้นอยู่กับแอปพลิเคชันที่คุณทำงาน
ทำให้สิ่งมีชีวิตเคลื่อนไหว
การเคลื่อนไหวมีความคิดเฉพาะเจาะจงและมีรูปแบบส่วนตัว ซึ่งรวมถึงการจับการเคลื่อนไหว, การสร้างการเคลื่อนไหวด้วยมือในแอปพลิเคชัน DCC ของคุณ หรือการใช้ Animation Editor ที่ทรงพลังของ Studio
อย่างที่เรากล่าวถึงก่อนหน้านี้ เราต้องการให้แน่ใจว่าเรามีข้อต่อเพียงพอสำหรับการเคลื่อนไหวที่คล่องแคล่วและมีขาสำหรับการตรวจสอบการเคลื่อนไหว ของ Creature รู้สึกเป็นธรรมชาติและ "ชั้น" การจัดชั้นหรือการเคลื่อนไหวรองคือสิ่งที่คุณเห็นในชีวิตประจำวัน — เมื่อต้องโยนแขนออก ข้อต่อทุกข้อต้องตอบสนองต่อแรงกระตุ้นเริ่มต้นจากแขนบนของคุณ และข้อต่อทุกข้อตในร่างกายของคุณไม่ได้เคลื่อนไหวหรือพักอยู่ในเวลาเดียวกัน
เราใช้เทคนิคนี้ในการทำให้ Creature รู้สึกเหมือนขาตอบสนองต่อการเคลื่อนไหวที่ขับเคลื่อนโดยร่างกายของมันอย่างที่แสดงไว้ที่นี่:

หากคุณใช้แอปพลิเคชัน DCC ภายนอกสำหรับการเคลื่อนไหว เราพบว่าคำแนะนำต่อไปนี้จะทำงานได้ดีที่สุด:
- ตั้งอัตราฝากขั้นต่ำที่ 30 FPS
- สร้างอนิเมชันของคุณด้วยตัวละครเดียวกันกับที่คุณประยุกต์ใช้
- ส่งออกข้อมูลอนิเมชันของคุณเป็นไฟล์ .fbx แยก
เนื่องจากเราอนิเมทตัวละครนอกร้าน เราจึงต้องใช้ Animation Editor เพื่อนำเข้าไฟล์อนิเมชัน .fbx โปรแกรมแก้ไขจะช่วยให้คุณเลือกอวตารใดๆ ที่มีข้อต่อหรือมอเตอร์และขับเคลื่อนพวกเขาผ่านจุดในไทม์ไลน์
ในการนำเข้าสำหรับอนิเมชัน:
ในแท็บ Avatar ของแถบเครื่องมือ ให้คลิก Clip Editor
เลือกตัวละครที่จัดระเบียบที่คุณต้องการให้เคลื่อนไหวใน Roblox ตัวละครควรเป็นตัวเดียวกันกับที่คุณจัดระเบียบในแอปพลิเคชัน DCC ของคุณ
คลิกปุ่ม ⋯ ที่มุมซ้ายบนของหน้าต่างโปรแกรมแก้ไข เลือก Import From FBX Animation และค้นหาไฟล์อนิเมชัน .fbx ที่คุณส่งออกมา

เมื่อคุณพอใจกับอนิเมชันของคุณ คุณสามารถส่งออกเพื่อค้นหา ID ของอนิเมชัน จากนั้นคุณสามารถใช้ในสคริปต์ Roblox เพื่อเรียกใช้งานอนิเมชัน ตัวอย่างเช่น คุณสามารถเพิ่ม Script ลงในกลุ่มโมเดลของตัวละครที่นำเข้าและใช้โค้ดต่อไปนี้เพื่อเรียกใช้งานอนิเมชัน:
local animationId = "YOUR_ANIMATION_ID"local char = script.Parentlocal 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)
ผลลัพธ์สุดท้าย
หลังจากทำการปรับแต่งเล็กน้อยกับสี ความสว่างของไฟ และอนุภาคเพิ่มเติมเพื่อให้ได้เอฟเฟกต์ของฮาโลที่แข็งแรงขึ้นตรงหน้าต่าง นี่คือผลลัพธ์สุดท้ายในสถานีอวกาศ!
