Originally posted by best0032001
View Post
Announcement
Collapse
No announcement yet.
AMD Radeon Enabled Enhanced Sync มาเงียบ ๆ แต่ฟาดเรียบ นะค๊าบ ๆ ๆ จบปัญหา STUTTER
Collapse
X
-
Originally posted by good11 View Postคล้ายๆ Fast sync ของเขียวป่ะ
คือไอ้พวกนี้มันเหมือนเป็นส่วนเสริมอ่ะ แต่พวก adaptive sync(variable refresh rate) เช่น freesync, gsync เป็นส่วนหลัก
อยากเห็นความต่างจริงๆจากจอปกติ ยังไงก็ต้องไป variable refresh rate ของ freesync ไม่รู้นะบัคเบิ้คอะไร แต่ gsync นี่จับบ่อย x34 ของเพื่อน สบายๆไร้ tearing, input lag
Comment
-
Originally posted by THEFOOL View Post.
ใช้ Fastsync มาหลายเกม มันกำจัด tearing ภาพขาดๆได้ชะงัดจริง
ไปหาคลิปที่ไม่มั่วมาให้ดู เปิดให้เห็นกันจะๆ
เลือก Speed ของคลิปซัก 0.5 จะเห็นอาการภาพขาดไม่ขาดชัดเจน
0:48 Sync OFF มีภาพขาด
1:50 FastSync On ไม่มีภาพขาด
Last edited by Evermind; 22 Aug 2017, 16:28:37.
Comment
-
Fast Sync มันก็คือ Triple Buffering นั่นแหละ
บัฟเฟอร์แรกไว้เก็บภาพที่จะออกจอ
บัฟเฟอร์ที่สองไว้เก็บภาพที่กำลังเรนเดอร์
บัฟเฟอร์ที่สามไว้เก็บภาพที่เรนเดอร์เสร็จแล้วอันล่าสุด
หลักการทำงานคือ ทำยังไงก็ได้ ไม่ต้องให้ gpu มันทำงานได้เต็มที่ที่สุด ไม่ต้องมาชะงักเพราะต้องคอย sync แบบ vsync
ก็คือให้ gpu เรนเดอร์ลงไปที่บัฟเฟอร์ที่สองเรื่อยๆเลย ถ้าหากเรนเดอร์เสร็จก็จะก็อปเอาเฟรมนั้นไปเก็บไว้ที่บัฟเฟอร์ที่สาม(การทำงานจริงๆเห็นว่าแค่สลับชื่อตัวบัฟเฟอร์ระหว่างตัวที่สองกับตัวที่สามเอาเลย ไม่ได้ก็อปภาพมา ไม่งั้นเจอภาพ 4k,8k นี่ตาย)
แล้วก็ปล่อยให้ gpu เรนเดอร์เฟรมใหม่ลงบัฟเฟอร์ที่สองต่อไป
ถ้าหากว่าถึงรอบ refresh จอแล้ว ก็จะเอาภาพที่อยู่ในบัฟเฟอร์ที่สามที่มีภาพที่เรนเดอร์เสร็จอันล่าสุดแล้ว ไปในบัฟเฟอร์ตัวแรกเพื่อแสดงผลจะไม่เข้าไปยุ่งเกี่ยวกับบัฟเฟอร์ที่สอง,ที่สามโดยเด็ดขาด(ไม่ไปขัด gpu)
จะเห็นว่ามันก็จะอาจจะมี micro stutter, input lag บ้าง เพราะในกรณีที่เฟรมจริงๆที่กำลังเรนเดอร์อยู่ในบัฟเฟอร์ที่สองยังไม่เสร็จ ก็จะไม่ถูกแสดง(คล้ายๆ vsync on มั๊ย) แต่ตรงนี้ของ amd(enhanced sync) จะยอมให้แสดงผลไปเลย เพื่อไม่ให้เจอ micro stutter, input lag (คล้ายกับ vsync off) ซึ่งก็จะไปเจอ screen tearing อยู่ดี ก็ต้องเลือกอ่ะนะ ว่าจะเอาอะไร screen tearinf หรือ micro stuttering
ถ้าดูจริงๆมันไม่ต้องขนาดเรนเดอร์ภาพเร็วกว่า refresh cycle สองเท่าสามเท่าก็ได้ เช่น จอ 60hz(refresh cycle time = every 16.67ms) ถ้าหากเปิด fast sync แล้ว gpu เรนเดอร์ทุกเฟรมใช้เวลา 16.67ms(ทัน refresh cycle) มันก็จะแสดง 60fps(unique frame) ตามปกติ แต่ถ้าหาก gpu กล้ามโต เรนเดอร์เสร็จเร็วมาก ใช้เวลาแค่ 8.34(ครึ่งเดียวของ refresh cycle) แสดงว่ากว่าจะถึง refresh cycle เนี่ยมันเรนเดอร์ออกมาได้ถึง 2 เฟรม แต่ก็นั่นแหละ ในเมื่อมันจะเก็บเฉพาะเฟรมที่เรนเดอร์เสร็จแล้วอันล่าสุด สุดท้ายมันก็จะแสดงแค่ 60fps(unique frame) ที่เกินมาถูกทับหายหมดอยู่ดี
สรุป ขอแค่แต่ละเฟรมมันเรนเดอร์เสร็จทัน refresh cycle ก็พอละ แต่ โลกจริงมันไม่ใช่ เพราะโลกจริงแต่ละเฟรมใช้เวลาเรนเดอร์ไม่เท่ากัน เช่น กรณี 60fps เฟรมทั้ง 60 เฟรมนี้ จะไม่ได้เรนเดอร์ทันภายในเวลา 16.67ms ทุกเฟรม แต่อาจจะมีบางเฟรมใช้เวลา 15.67ms อีกเฟรมอาจจะใช้เวลา 17.67ms ถัวๆเฉลี่ยๆกันไปจนครบ 60เฟรมในหนึ่งวินาที(60fps ไง) ซึ่งทางที่ดีที่สุดที่พอจะการันตี(แต่ก็ไม่เสมอไป)ได้ว่า ทุกเฟรมจะเสร็จทัน refresh cycle ก็คือ ต้องได้ fps สองเท่าขึ้นไป(เพราะพอจะสามารถมโนได้ว่า มันเรนเดอร์ไวขนาดได้สองเฟรมภายใน หนึ่งรอบ refresh cycle ถึงจะไม่ทันสักเฟรมนึง ปต่อีกเฟรมนึงน่าจะทันแน่นอนอะไรงี้) ซึ่งปัญหานี้จะหมดไป ถ้าไปเจอ dev ดีๆ พัฒนาเกมออกมาแบบ lock fps แล้วจัดการกับ frame pacing ดีๆ เช่น เกมล็อคที่ 60fps แล้ว dev ใส่ใจมาก สามารถทำให้ทุกเฟรมเรนเดอร์ภายใน 16.67ms ได้ แต่ก็นั่นแหละ พอมาอยู่บน pc ตัว hw มันหลากหลายมั่วไปหมด ยังไงก็ทำให้ 100% ไม่ได้
Comment
Comment