คัตซีนกล้องแบบไม่ต้องใช้ม็อด: คีย์เฟรม การอินเทอร์โพเลต และเทคนิคสเปกเตเตอร์
วานิลลาเลื่อนกล้องได้แบบเดียว — ฟังก์ชันเทเลพอร์ตที่ทำงานทุกติ๊ก — ส่วนรีจิสทรีไทม์ไลน์ช่วยกำหนดอารมณ์รอบ ๆ ตัวมัน แต่ละวิธีเหมาะกับอะไร และการปรับให้เนียนที่ทำให้ไม่ดูเป็นหุ่นยนต์
ในวานิลลาไม่มีออบเจ็กต์กล้อง ดังนั้นคัตซีนจึงเป็นภาพลวงตาที่สร้างจากการเทเลพอร์ต โดยมีไทม์ไลน์คอยเปลี่ยนโลกไปรอบ ๆ
วิธีที่ 1: เทเลพอร์ตผู้เล่นทุกติ๊ก
วิธีเก่าแก่ที่ใช้ได้ทั่วไป ใส่ผู้เล่นเข้าโหมดสเปกเตเตอร์ แล้วเลื่อนไปตามเส้นทาง:
gamemode spectator @s
tp @s 100.0 70.0 200.0 -90.0 10.0
หนึ่ง tp ต่อติ๊กจากเชนฟังก์ชัน ใช้ได้กับทุกเวอร์ชันและไม่ต้องมีอะไรพิเศษ ปัญหาทั้งหมดอยู่ที่ความเนียน:
- 20 คีย์เฟรมต่อวินาที ช็อตสิบวินาทีคือ 200 บรรทัด
tp - การเดินแบบเชิงเส้นดูเป็นกลไก การเคลื่อนกล้องจริงจะค่อย ๆ เร่งและผ่อน
- การหมุนวนกลับผิดพลาดง่าย จาก yaw 170 ไป -170 คือการหัน 20 องศา แต่การอินเทอร์โพเลตแบบตรง ๆ จะหมุน 340 องศาไปผิดทาง ต้องนอร์มัลไลซ์ผลต่างมุมให้อยู่ในช่วง -180…180 ก่อนเดินทีละขั้น
การสร้างบรรทัดเหล่านั้นคือหน้าที่ของเครื่องมือคีย์เฟรม — คุณวางตำแหน่งแค่ไม่กี่จุด แล้วมันจะสร้างฟังก์ชันรายติ๊กพร้อมการ easing ให้
การ Easing
สิ่งที่แยกงานมือสมัครเล่นออกจากงานที่ดูได้ คือเส้นโค้งการอินเทอร์โพเลต ระหว่างสองคีย์เฟรม โดยมี t จาก 0 ถึง 1:
linear t
ease-in-out t < 0.5 ? 2t² : 1 − 2(1−t)²
smoothstep t² × (3 − 2t)
smoothstep เป็นค่าปลอดภัยที่ใช้ได้ทั่วไป ใช้กับตำแหน่งและการหมุนพร้อมกัน ไม่งั้นกล้องจะไปถึงก่อนหันเสร็จ
วิธีที่ 2: ไทม์ไลน์ สำหรับทุกอย่างยกเว้นกล้อง
เวอร์ชันใหม่ ๆ เพิ่มรีจิสทรี timeline เข้ามา และมันชวนให้อ่านว่าเป็นแทร็กกล้อง:
data/<namespace>/timeline/intro.json
มันไม่ใช่ ไทม์ไลน์ทำงานกับนาฬิกาของโลก และคีย์เฟรม แอตทริบิวต์ของสภาพแวดล้อม — สีท้องฟ้าและหมอก เสียงบรรยากาศและเพลง บล็อกแสง — พร้อมการอินเทอร์โพเลตแบบเนทีฟ มันเลื่อนผู้เล่นไม่ได้ ดังนั้นตัวกล้องยังต้องใช้วิธีที่ 1 สิ่งที่ไทม์ไลน์ทำได้ดีคือ อารมณ์ ของคัตซีน: เฟดท้องฟ้า เปลี่ยนหมอก และสลับเพลงให้ตรงจังหวะกับการเทเลพอร์ต โดยไม่ต้องมีคำสั่งรายติ๊กสำหรับแต่ละอย่าง
ข้อเสียคือมันมีแค่ในเวอร์ชันใหม่ ๆ ดังนั้นแผนที่ที่รองรับไคลเอนต์เก่าต้องจำลองอารมณ์ด้วย /time และ /weather
ทำให้ผู้เล่นอยู่กับที่
เส้นทางเทเลพอร์ตต้องสู้กับสองอย่าง:
- อินพุตของผู้เล่น สเปกเตเตอร์เปิดให้ผู้เล่นบินหนีกลางช็อตได้ การเทเลพอร์ตซ้ำทุกติ๊กจะเขียนทับมัน ซึ่งเป็นเหตุผลหนึ่งที่วิธี brute-force ยังคงอยู่
- การโหลดชังก์ กล้องที่บินไปยังพื้นที่ที่ยังไม่โหลดจะเห็นความว่างเปล่า ให้
/forceloadเส้นทางก่อนถ่ายและลบออกทีหลัง
ซ่อน HUD
โหมดสเปกเตเตอร์และ F1 พาไปได้เกือบสุดทาง สำหรับเฟรมที่สะอาด รีซอร์สแพ็กที่ลบสไปรต์ HUD จะกำจัดเป้าเล็งและฮอตบาร์ โดยผู้เล่นไม่ต้องกดอะไร — ดูคู่มือ HUD
วางคีย์เฟรมบนเส้นทางแล้วเอ็กซ์พอร์ตฟังก์ชันรายติ๊ก และสร้างไทม์ไลน์ที่กำหนดฉากรอบ ๆ มัน ด้วย Cutscene & Timeline Builders