ฟังก์ชั่นการผ่อนคลายคืออะไร?


15

ฉันพบเว็บไซต์เจ๋ง ๆนี้เพื่อการพัฒนาเกมและมันมีฟังก์ชั่นการทำให้สบาย ๆ :

ป้อนคำอธิบายรูปภาพที่นี่

แม้ว่าเว็บไซต์จะมีคำอธิบายว่ามีไว้เพื่ออะไร ฟังก์ชั่นการผ่อนคลายคืออะไรและใช้เพื่ออะไร

ปรับปรุง

ผมพบว่าตัวอย่างที่ดีของการทำงานตัวเองจากรหัสที่มาของ Phaser.io ฟังก์ชั่นเหล่านี้ง่ายกว่าคำตอบที่แนะนำ พวกเขาใช้พารามิเตอร์เดียวเท่านั้น, k. เป็นส่วนหนึ่งของคำตอบฉันต้องการทราบวิธีใช้สิ่งเหล่านี้


2
คำที่เกี่ยวข้องที่สำคัญคือการทวีคูณ ดูวิดีโอนี้youtube.com/watch?v=Fy0aCDmgnxgซึ่งคุณจะเห็นว่าเอฟเฟกต์การทวีตและการทำให้สบายขึ้นนั้นมีมหาศาลเพียงใด!
รอยต

คำตอบ:


13

ฟังก์ชั่นที่ทำให้สบายจะใช้สำหรับการแก้ไขโดยทั่วไป (แต่ไม่จำเป็น) ในการเคลื่อนไหว / การเคลื่อนไหวของภาพยนตร์ การแก้ไขเชิงเส้น (lerp) เป็นสิ่งที่คุณอาจเคยได้ยิน สมมติว่าคุณยิ้มใบหน้าที่ยิ้มแย้มจากมุมหนึ่งของหน้าจอไปยังอีกหน้าจอหนึ่ง (เหมือนกับรูปภาพของคุณ) ซึ่งหมายความว่ารอยยิ้มจะเคลื่อนที่ด้วยความเร็วคงที่จากจุด A ไปยังจุด B หากคุณต้องการใช้สิ่งนี้กับการเคลื่อนไหวของแขนขามันจะดูเป็นหุ่นยนต์และผิดธรรมชาติมาก - แอคทูเอเตอร์ / เซอร์โวที่หุ่นยนต์ใช้ทำงานด้วยวิธีนี้ เห็นได้ชัดว่าแขนขามนุษย์เคลื่อนไหวในวิธีที่แตกต่างกันมาก และการเคลื่อนไหวส่วนใหญ่ที่คุณจะเห็นในธรรมชาติจะมีเส้นโค้งการเคลื่อนไหวที่น่าสนใจมากกว่าความเร็วคงตัวและไม่เปลี่ยนแปลงที่เห็นในการแก้ไขเชิงเส้น

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

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

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


1
btw Easing เป็นสไลด์ที่สองในลิงค์ GreenSock ใช้เมนูแบบเลื่อนลงบนสไลด์เพื่อทดสอบฟังก์ชั่นการผ่อนคลายที่แตกต่างกัน
jhocking

8

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

สิ่งนี้สามารถอธิบายได้ดีที่สุดโดยดูที่ข้อมูลโค้ด:

// simple linear tweening - no easing, no acceleration


Math.linearTween = function (t, b, c, d) {
    return c*t/d + b;
};

@t คือเวลาปัจจุบัน (หรือตำแหน่ง) ของทวีต สิ่งนี้สามารถเป็นวินาทีหรือเฟรม, ขั้นตอน, วินาที, มิลลิวินาทีหรืออะไรก็ได้ - ตราบใดที่หน่วยยังเหมือนกับที่ใช้สำหรับเวลาทั้งหมด

@b เป็นค่าเริ่มต้นของคุณสมบัติ

@c คือการเปลี่ยนแปลงระหว่างค่าเริ่มต้นและค่าปลายทางของคุณสมบัติ

@d คือเวลาทั้งหมดของทวีต

ขอบคุณhttp://upshots.org/actionscript/jsas-understanding-easing

นี่คือคำจำกัดความของฟังก์ชั่นการผ่อนคลายเชิงเส้น กราฟนี้เมื่อเวลาผ่านไปในแง่ของ 't' เราจะได้รับกราฟเชิงเส้นเพียง

โอเคเยี่ยมเลย เราใช้อะไรได้บ้างเพื่อ?

เมื่อใดก็ตามที่คุณมีการเริ่มต้นและสิ้นสุดในใจและต้องการที่จะเคลื่อนไหวพวกเขาคุณสามารถใช้ "ทวีต" หรือ "ฟังก์ชั่นผ่อนคลาย"

ตัวอย่างเช่นต่อไปนี้เป็น GIF ที่ฉันได้รับจาก Angry Birds:

ป้อนคำอธิบายรูปภาพที่นี่

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

เพลง?

แน่นอน! หากเรานำค่าของซาวด์แทร็กปัจจุบันของเราและทำการประมาณค่าระหว่างค่านั้นกับ 0 ในช่วงเวลาทั้งหมด 1 วินาทีเสียงของเราจะค่อยๆจางหายไปในช่วงเวลาหนึ่งวินาที

วัตถุที่ถูกผูกไว้

นอกจากนี้ยังมีฟังก์ชั่นที่อนุญาตให้ตีกลับ (ดู: http://easings.net/#easeOutBounce ) ซึ่งสามารถสร้างเอฟเฟกต์เช่นนี้บนสไปรต์โดยไม่มีระบบฟิสิกส์ใด ๆ :

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถค้นหาข้อมูลเพิ่มเติมบนเว็บได้โดยค้นหาการทวีต


@tieTYT ฉันได้เพิ่มคำอธิบายให้คุณ คุณกำลังมองหาตัวอย่างการใช้งานประเภทใด
Vaughan Hilts

ดูการปรับปรุงของฉัน หากคุณสามารถอธิบายวิธีการใช้ฟังก์ชั่นที่ใช้kเป็นพารามิเตอร์เท่านั้นฉันจะยอมรับคำตอบนี้ ขอบคุณ
Daniel Kaplan

ฟังก์ชั่นเหล่านี้ไม่เพียงแค่เอา k ฟังก์ชั่นเริ่มต้นใช้สิ่งเหล่านี้ซึ่งถูกส่งผ่านไปยังฟังก์ชันที่ซับซ้อนมากขึ้น คุณสนใจการติดตั้งเฟสเซอร์หรือไม่?
Vaughan Hilts

ดูเหมือนพวกเขาทั้งหมดจะkมาหาฉัน คุณเห็นเป็นอย่างอื่นอยู่ที่ไหน
Daniel Kaplan

ฟังก์ชั่นการผ่อนคลายทั้งหมด (ยกเว้น tweens สไตล์ 'สั่น' อาจต้องใช้พารามิเตอร์ขั้นต่ำสามตัว เวลา (โดยปกติจะเป็นอัตราส่วนระหว่าง 0 ถึง 1) ค่าเริ่มต้นและค่าสิ้นสุด บางครั้งเวลาแบ่งออกเป็นสองพารามิเตอร์เช่นเวลาปัจจุบันและความสะดวกในระยะเวลา หากมีการกำหนดค่าเริ่มต้นและสิ้นสุด (ขึ้นอยู่กับระบบ / ไลบรารีที่ทำให้สงบของคุณ) คุณอาจต้องผ่านช่วงเวลานี้ไป แต่ฉันไม่คุ้นเคยกับตัวเอง ตัวอย่างเช่นถ้าฉันต้องการค่าระหว่าง 10 และ 30 ที่ 75% ของวิธี (3 วินาทีในความสะดวก 4 วินาที) ฉันต้องผ่าน 10 และ 30 และ 75% (เวลา / dur)
Doug.McFarlane

2

ฟังก์ชั่นที่ทำให้สบายทำให้ใช้ในการเปลี่ยนค่าในช่วงเวลาจากจำนวนเริ่มต้นไปยังหมายเลขสิ้นสุด

คุณใช้ค่านั้นในการเคลื่อนไหวคุณสมบัติของวัตถุในเกมของคุณเช่นตำแหน่งการหมุนระดับการเปลี่ยนสีและคุณสมบัติอื่น ๆ ที่ใช้ค่า

ฟังก์ชั่นการผ่อนคลายที่แตกต่างกันจะกำหนด "ความรู้สึก" ของภาพเคลื่อนไหวหรือการเปลี่ยนแปลงของมูลค่าเมื่อเวลาผ่านไป

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


โอ้ดังนั้นตอนนี้คุณเปลี่ยนคำตอบของคุณเพื่อสะท้อนของฉัน! ดีมากที่เห็นว่าคุณกำลังเรียนรู้
วิศวกร

คำตอบนี้ดูเหมือนจะเป็นการอ้างอิงมากกว่าการสอน ฉันต้องการตัวอย่างเพื่อให้มีความเข้าใจที่ดีขึ้น
Daniel Kaplan

@NickWiggill ไม่ฉันยังไม่เห็นคำตอบของคุณจนกระทั่งตอนนี้
ino
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.