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

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


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

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


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

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

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

สังเกตว่า SpotLights เพิ่มเอฟเฟกต์ภาพเพื่อเพิ่มความโดดเด่นให้กับสิ่งมีชีวิตที่อยู่ใกล้กับพื้นผิวอื่นหรือผู้เล่น

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

ทำให้ VFX ติดตามตัวละคร
ตําแหน่งเมชของตัวละครผิวหนังไม่ได้รับการอัปเดตเมื่อสิ่งมีชีวิตเคลื่อนไหว ดังนั้นเราจึงต้องการวิธีการที่จะตรวจสอบให้แน่ใจว่า VFX, SFX และแสงทั้งหมดปฏิบัติตามสิ่งมีชีวิตอย่างถูกต้องเพื่อทําสําเร็จนี้เราได้สร้างสคริปต์ควบคุม VFX และใช้ CollectionService เพื่อแจ้งส่วนที่มี VFX ที่กระดูกของสิ่งมีชีวิตและติดตามพวกเขา
เราวางต่อไปนี้ LocalScript ใน StarterPlayer → StarterPlayerScripts ซึ่งจะทำงานอัปเดต VFX โดยพื้นฐาน
สคริปต์ท้องถิ่น-- เพิ่มส่วนนี้ไปยังสคริปต์ท้องถิ่นที่มีอยู่ที่ทำให้การจำลองก่อนหน้า-- การเชื่อมต่อlocal RunService = game:GetService("RunService")local vfx = require(workspace.VfxUpdateModule)RunService.PreSimulation:Connect(vfx.updateVfx)สคริปต์โมดูล-- โมดูลนี้แนบชิ้นส่วนไปยังแอนิเมชั่นเพื่อให้อัปเดตเป็น-- การเล่นแอนิเมชัน เป็นวิธีแก้ไขข้อจํากัดปัจจุบัน-- ด้วยข้อต่อและกระดูกและจะไม่จำเป็นเสมอไป---- ข้อกําหนดเบื้องต้น:-- เพื่อรวมโมเดลต้องมีแท็ก "AnimatedVfxModel" และไดเรกทอรี-- แอนิเมชันแต่ละส่วนต้องการ-- คุณสมบัติที่เรียกว่า "ชื่อกระดูกที่ติดอยู่" ซึ่งส่งถึงชื่อของ-- กระดูกที่คุณต้องการติดตั้ง ชิ้นส่วนควรอยู่ในแล้ว-- ตำแหน่งที่ถูกต้องเมื่อเทียบกับกระดูกที่ต้องการ---- เพื่อใช้:-- สคริปท้องถิ่นควรต้องการโมดูลนี้จากนั้นเชื่อมต่อ-- VfxUpdateModule.updateVfx ไปยังอีเวนต์ RunService.PreSimulationlocal VfxUpdateModule = {}local CollectionService = game:GetService("CollectionService")-- ตั้งค่า - ควรทำงานบนแต่ละไคลเอนต์เพียงครั้งเดียว-- รวบรวมโมเดลทั้งหมดที่มีแท็กlocal vfxModels = CollectionService:GetTagged("AnimatedVfxModel")local vfxTable = {} -- ที่เราจะเก็บชิ้นส่วนและค่าออฟเซ็ตทั้งหมด-- กำหนดโต๊ะให้แต่ละโมเดลที่จะบรรจุส่วน vfx ทั้งหมดและค่าออฟเซ็ตfor _, model in vfxModels dovfxTable[model] = {}local vfxParts = model:FindFirstChild("VFX"):GetChildren() -- ค้นหาโฟลเดอร์ theVFX-- ค้นหากระดูกผ่านคุณสมบัติและคำนวณค่าส่วนลบสำหรับแต่ละส่วน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 part refers to bone that could not be found.")endendendprint(vfxTable)-- อัปเดต - ควรเชื่อมโยงกับ RunService.PreSimulation ของลูกค้าทุกราย-- ผ่านไปทุกรุ่นแล้วอัปเดตส่วนทั้งหมดบนรุ่นเพื่อให้ตรงกับ bonecframefunction 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 โดยใช้ เครื่องมือแท็ก ซึ่งสามารถเข้าถึงได้จากแท็บ ดูการใช้แท็กช่วยให้ VFXUpdateModule รู้ว่าต้องมองหาวัตถุใดเป็นเด็ก VFX คนแรกและใช้การอัปเดต
ในที่สุดเราเพิ่มคุณสมบัติที่กําหนดเอง ชื่อกระดูกที่ติดอยู่ ติดตาม
เทกเจอร์สิ่งมีชีวิต
ต่อไป เราตั้งค่าแผนที่เทกเจอร์ PBR (Physically Based Rendered)แผนที่บิตที่ทรงพลังเหล่านี้ให้สิ่งมีชีวิตมีเอฟเฟกต์และการเปลี่ยนแปลงพื้นผิวที่หลากหลายเพื่อให้ดูเหมือนว่ามันมีจุดกระแทกและข้อบกพร่องเล็กๆ จำนวนมากเอฟเฟกต์ภาพนี้ช่วยให้ขายลักษณะของสิ่งมีชีวิตเมื่ออยู่ใกล้กับผู้เล่นมากขึ้น

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

หากใช้แอปพลิเคชัน DCC ภายนอกสำหรับการแอนิเมชั่น เราพบว่าคำแนะนำต่อไปนี้ทำงานได้ดีที่สุด:
- ตั้งอัตราเฟรมเป็นอย่างน้อย 30 ยิงมุมมองบุคคลที่หนึ่ง
- สร้างแอนิเมชันของคุณด้วยตัวละครเดียวกันที่คุณใช้กับมัน
- ส่งข้อมูลแอนิเมชันของคุณเป็นไฟล์แยก .fbx
เนื่องจากเราแอนิเมชั่นตัวละครนอกสตูดิโอ เราจึงต้องใช้เครื่องมือแอนิเมชั่นเพื่อนำไฟล์แอนิเมชั่น .fbx มาตัวแก้ไขช่วยให้คุณเลือกอวตารใดก็ได้ที่มีข้อต่อหรือมอเตอร์และขับเคลื่อนพวกเขาผ่านจุดในเวลาไลน์
เพื่อนำเข้าแอนิเมชัน:
ในแท็บ อวตาร ของแถบเครื่องมือ เปิด ตัวแก้ไขแอนิเมชัน
เลือกตัวละครที่ถูกติดตั้งที่คุณต้องการที่จะเคลื่อนไหวใน Roblox ตัวละครควรเป็นตัวเดียวกับที่คุณติดตั้งในแอปพลิเคชัน DCC ภายนอก
คลิกปุ่ม ⋯ ในส่วนด้านซ้ายบนของหน้าต่างเอเดอร์, เลือก นำเข้าจากแอนิเมชัน FBX , และค้นหาไฟล์อนิเมชัน .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)
ผลสรุปสุดท้าย
หลังจากปรับแต่งสีสัน ความสว่างของแสง และเอฟเฟกต์อนุภาคบางอย่างเพิ่มเติมเพื่อให้มันมีเอฟเฟกต์รัศมีที่แข็งแกร่งยิ่งขึ้นต่อหน้าหน้าต่างแล้ว นี่คือผลลัพธ์สุดท้ายในสถานีอวกาศ!
