กลับไป เครื่องมือ
เขียนโค้ด

Gaffer On Games: Fix Your Timestep!

โดย Glenn Fiedler

ทำความเข้าใจ fixed timestep, accumulator และ interpolation เพื่อแยกการจำลองออกจากอัตราวาดภาพ

guide
เวลาต่อเฟรมเรนเดอร์ที่ไม่เท่ากันสะสมใน accumulator เพื่อจำลองด้วยช่วงเวลาคงที่ โดยใช้ 16 มิลลิวินาทีเป็นตัวอย่าง
ภาพแนวคิดเวลาใหม่ ค่าที่แสดงเป็นตัวอย่าง ไม่ใช่ผลวัดจริง ต้องเผื่อเวลาประมวลผลหรือวางแผนจำกัดงานชดเชยเฟรม ภาพอธิบายต้นฉบับที่จัดทำสำหรับ GameSlash โดยมี AI ช่วยสร้าง ใช้เอกสารเป็นแหล่งข้อเท็จจริงเท่านั้น ไม่ได้นำภาพต้นฉบับมาใช้ และไม่ใช่ภาพหน้าจอทางการหรือเกมเพลย์ แหล่งแนวคิด

เหมาะกับ: การกระโดด สปริง หรือวัตถุเร็วที่ให้ผลต่างกันเมื่อเฟรมเรตเปลี่ยน

เริ่มทีละขั้น: 1) อ่านตัวอย่าง variable กับ fixed delta time 2) ใช้ accumulator สะสมเวลาแล้วจำลองทีละ dt คงที่ 3) อ่านส่วน interpolation ระหว่างสถานะก่อนหน้าและปัจจุบัน

ตำแหน่งที่เรนเดอร์ด้วยค่า alpha 0.4 อยู่ระหว่างตำแหน่งจำลองก่อนหน้าและปัจจุบันบนเส้นตรง
ตัวอย่างตำแหน่งเชิงเส้นที่สร้างใหม่ alpha แสดงสัดส่วนเวลาคงเหลือของหนึ่งก้าวจำลอง ข้อมูลชนิดอื่นต้องใช้วิธี interpolation ที่เหมาะสม ภาพอธิบายต้นฉบับที่จัดทำสำหรับ GameSlash โดยมี AI ช่วยสร้าง ใช้เอกสารเป็นแหล่งข้อเท็จจริงเท่านั้น ไม่ได้นำภาพต้นฉบับมาใช้ และไม่ใช่ภาพหน้าจอทางการหรือเกมเพลย์ แหล่งแนวคิด

ลองตรวจ: ใช้ฉากและ input เดิมที่ 30, 60 และ 144 FPS แล้วดูพฤติกรรมพร้อมเวลาคำนวณต่อเฟรม

ข้อควรรู้: ต้องเหลืองบประมวลผลหรือจำกัดจำนวนก้าวต่อเฟรมเพื่อเลี่ยง spiral of death การจำกัดก้าวอาจทำให้เกมช้าลงเมื่อโหลดหนัก หากเอนจินจัด physics loop ให้แล้ว ให้ปรับผ่านระบบของเอนจิน

อ่านต้นฉบับ: Author’s guide

ดูแหล่งที่มา