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