Hôm nay chúng tôi đang giải quyết một trong những câu hỏi thường gặp nhất mà chúng tôi thấy về chơi game trên PC: bạn cần bao nhiêu khung hình mỗi giây? Bạn có nên chạy ở cùng tốc độ khung hình với tốc độ làm mới tối đa của màn hình, chẳng hạn như 60 FPS trên màn hình 60 Hz hoặc có lợi ích gì khi chạy trò chơi ở tốc độ khung hình cao hơn nhiều so với màn hình của bạn có thể hiển thị, chẳng hạn như 500 FPS ?
Để trả lời câu hỏi này, chúng ta phải nói một chút về cách GPU và màn hình hoạt động cùng nhau để gửi khung hình đến nhãn cầu của bạn và cách các công nghệ như Vsync hoạt động.
Nhưng điểm mấu chốt là, chạy trò chơi ở tốc độ khung hình cực cao, cao hơn nhiều so với tốc độ làm mới màn hình của bạn, sẽ mang lại trải nghiệm trò chơi nhạy hơn với độ trễ đầu vào được cảm nhận thấp hơn. Đó là câu trả lời cho câu hỏi dành cho những người không muốn đợi cho đến khi kết thúc. Bây giờ hãy nói về lý do tại sao.

Lưu ý của biên tập viên: Tính năng này ban đầu được xuất bản vào ngày 2 tháng 8 năm 2018. Tính năng này vẫn phù hợp và hiện hành cho đến ngày hôm nay cũng như thời điểm đó, vì vậy chúng tôi đã giới thiệu tính năng này như một phần của sáng kiến #ThrowbackThursday của mình.
Giả sử chúng ta có một màn hình có tốc độ làm mới cố định là 60 Hz. Nói cách khác, màn hình đang cập nhật màn hình của nó cứ sau 1/60 giây hoặc cứ sau 16,7 mili giây. Khi chạy trò chơi, không có gì đảm bảo rằng GPU có thể hiển thị mọi khung hình trong chính xác 16,7 mili giây. Đôi khi có thể mất 20ms, đôi khi có thể mất 15ms, đôi khi có thể mất 8ms. Đó là bản chất khác nhau của việc hiển thị trò chơi trên GPU.
Với tốc độ kết xuất khác nhau này, có thể lựa chọn cách mỗi khung hình kết xuất được chuyển đến màn hình. Nó có thể chuyển khung hình mới tới màn hình ngay khi nó được hiển thị hoàn toàn, thường được gọi là chạy trò chơi với “Vsync” hoặc tắt đồng bộ hóa dọc hoặc có thể đợi cho đến khi màn hình sẵn sàng làm mới trước khi gửi khung hình mới, đã biết là “Bật Vsync”.

Sử dụng phương pháp đầu tiên, tắt Vsync, gây xé hình. Điều này là do màn hình không thể cập nhật toàn bộ hình ảnh ngay lập tức, thay vào đó, nó cập nhật từng dòng một, thường là từ trên cùng xuống dưới cùng của màn hình. Trong quá trình này, một khung hình mới có thể sẵn sàng từ GPU và vì chúng tôi không sử dụng Vsync nên khung hình sẽ được gửi đến màn hình ngay lập tức. Kết quả là giữa quá trình làm mới, màn hình đang nhận dữ liệu mới và cập nhật phần còn lại của các dòng trên màn hình với dữ liệu mới này. Sau đó, bạn sẽ có một hình ảnh trong đó nửa trên màn hình là từ khung trước đó và nửa dưới là từ khung mới, mới có sẵn.

Tùy thuộc vào nội dung được hiển thị, sự phân chia này giữa các khung hình mới và cũ trong một lần làm mới sẽ tự biểu hiện dưới dạng một vết rách hoặc đường có thể nhìn thấy giữa các khung hình cũ và mới. Thông thường, điều này dễ nhận thấy nhất trong các cảnh chuyển động nhanh, nơi có sự khác biệt lớn giữa khung hình này và khung hình tiếp theo.
Mặc dù tắt Vsync dẫn đến xé hình, nhưng nó có lợi thế là gửi khung hình đến màn hình ngay sau khi kết xuất xong, để có độ trễ thấp giữa GPU và màn hình. Hãy ghi nhớ điều đó cho sau này.

Cách khác để hiển thị hình ảnh là bật Vsync. Ở đây, thay vì GPU gửi khung hình mới ngay lập tức đến màn hình, nó sẽ xáo trộn từng khung hình được hiển thị vào bộ đệm. Bộ đệm đầu tiên được sử dụng để lưu trữ khung hình đang được làm việc và bộ đệm thứ hai được sử dụng để lưu trữ khung hình mà màn hình hiện đang hiển thị. Không có thời điểm nào trong quá trình làm mới bộ đệm thứ hai được cập nhật, vì vậy màn hình chỉ hiển thị dữ liệu từ một khung hình được hiển thị đầy đủ và kết quả là bạn không bị xé hình khi cập nhật giữa chừng trong quá trình làm mới.

Điểm duy nhất mà bộ đệm thứ hai được cập nhật là giữa các lần làm mới. Để đảm bảo điều đó xảy ra, GPU sẽ đợi sau khi nó hoàn thành kết xuất một khung hình, cho đến khi màn hình chuẩn bị làm mới. Sau đó, nó xáo trộn các bộ đệm, bắt đầu hiển thị một khung hình mới và quá trình này lặp lại. Đôi khi quá trình này có thể liên quan đến nhiều bộ đệm trước khi một khung đến màn hình nhưng đây là ý chính chung về cách hoạt động của Vsync.

Có hai vấn đề với Vsync. Đầu tiên, nếu tốc độ kết xuất GPU của bạn quá chậm để theo kịp tốc độ làm mới của màn hình – giả sử rằng nó chỉ có khả năng kết xuất ở 40 FPS trên màn hình 60 Hz – thì GPU sẽ không kết xuất toàn khung hình kịp thời để bắt đầu làm mới màn hình, do đó, một khung hình được lặp lại. Điều này gây ra giật hình vì một số khung hình chỉ được hiển thị một lần, trong khi những khung hình khác được hiển thị hai lần.

Vấn đề thứ hai xảy ra khi GPU của bạn rất nhanh và có thể dễ dàng hiển thị khung hình trong khoảng thời gian tốc độ làm mới. Giả sử, nó có thể hiển thị ở tốc độ 200 FPS, tạo ra một khung hình mới sau mỗi 5 mili giây, trừ khi bạn đang sử dụng màn hình 60 Hz với cửa sổ làm mới 16,7 mili giây.
Khi bật Vsync, GPU của bạn sẽ hoàn thành khung tiếp theo để hiển thị trong 5 mili giây, sau đó nó sẽ đợi 11,7 mili giây trước khi gửi khung đến bộ đệm thứ hai để hiển thị trên màn hình và bắt đầu ở khung tiếp theo. Đây là lý do tại sao khi bật Vsync, tốc độ khung hình cao nhất bạn sẽ nhận được khớp với tốc độ làm mới màn hình của bạn, vì GPU về cơ bản bị ‘khóa’ để kết xuất không nhanh hơn tốc độ làm mới.
Bây giờ đến thời điểm này có rất nhiều nhầm lẫn.
Chúng tôi thường nghe những điều như “khóa GPU để làm mới màn hình của tôi bằng Vsync là điều tuyệt vời, bởi vì nếu nó hiển thị nhanh hơn tốc độ làm mới, những khung hình đó sẽ bị lãng phí vì màn hình không thể hiển thị chúng và tất cả những gì tôi nhận được là xé hình”. Rất nhiều người chỉ ra tiết kiệm năng lượng từ việc sử dụng Vsync; GPU của bạn không cần phải làm việc hết sức, không có lợi gì khi chạy ở tốc độ khung hình cao hơn tốc độ làm mới của màn hình, vì vậy hãy chạy ở FPS bị khóa và tiết kiệm điện năng.
Chúng ta có thể thấy tại sao mọi người lại đi đến kết luận này và có một số sự thật ở đó, nhưng nhìn chung nó không chính xác. Và lý do cho điều này là bạn không tính đến thời gian đầu vào được xử lý và mất bao lâu để các đầu vào đó hiển thị trên màn hình.

Để giải thích lý do tại sao lại như vậy, chúng ta hãy xem sơ đồ Vsync on, nhưng phủ sơ đồ bằng đầu vào từ chuột và bàn phím của bạn, thường được thu thập cứ sau 1 mili giây. Hãy cũng sử dụng ví dụ tương tự nơi chúng ta có GPU có khả năng hiển thị ở tốc độ 200 FPS với màn hình 60 Hz.
Với Vsync và hệ thống đệm đơn giản, theo cách giải thích đơn giản này, GPU bắt đầu hiển thị khung tương ứng với đầu vào chuột của bạn ngay khi nhận được đầu vào đó, tại thời điểm 0. Sau đó, mất 5 mili giây để hiển thị khung và đợi thêm 11,7 ms trước khi gửi nó đến bộ đệm hiển thị.
Sau đó, màn hình sẽ mất một khoảng thời gian để nhận khung hình được hiển thị và cập nhật vật lý từng dòng hiển thị với thông tin này.

Ngay cả trong trường hợp tốt nhất, chúng tôi đang xem xét độ trễ ít nhất là 16,7 mili giây giữa đầu vào của bạn và khi màn hình có thể bắt đầu hiển thị kết quả của đầu vào đó cho bạn.
Khi tính đến độ trễ đầu vào màn hình, thời gian xử lý CPU, v.v., độ trễ giữa đầu vào và làm mới màn hình có thể dễ dàng hơn 50 mili giây.

Bây giờ hãy xem sơ đồ tắt Vsync. GPU liên tục hiển thị bất kể khi nào màn hình được làm mới, mất 5 mili giây để biến đầu vào của bạn thành một khung hình hoàn chỉnh. Sau đó, màn hình có thể bắt đầu hiển thị khung hình mới đó ngay lập tức, mặc dù nó có thể chỉ là một phần của khung hình đó. Kết quả là độ trễ giữa đầu vào trò chơi của bạn và khi màn hình có thể bắt đầu hiển thị kết quả của đầu vào đó, giảm từ 16,7 mili giây xuống chỉ còn 5 mili giây. Và sẽ không có bất kỳ bộ đệm bổ sung nào trong các triển khai trong thế giới thực; nó nhanh như vậy, cộng với độ trễ đầu vào của màn hình.
Và đó là nơi bạn có được lợi thế. Trong ví dụ này, chạy ở tốc độ 200 khung hình/giây khi tắt Vsync trên màn hình 60 Hz sẽ giảm độ trễ đầu vào xuống còn 5 mili giây, trong khi khi bật Vsync, độ trễ đó ít nhất là 16,7 mili giây, nếu không muốn nói là nhiều hơn.
Mặc dù màn hình không thể hiển thị toàn bộ 200 khung hình mỗi giây, nhưng những gì màn hình hiển thị cứ sau 1/60 giây được tạo ra từ đầu vào gần thời gian hơn với khung hình đó.
Tất nhiên, hiện tượng này cũng xảy ra với màn hình có độ tươi cao. Ví dụ: ở tần số 144 Hz, bạn sẽ có thể xem nhiều khung hình hơn mỗi giây, do đó bạn sẽ có được trải nghiệm mượt mà và nhạy bén hơn về tổng thể. Nhưng chạy ở tốc độ 200 FPS khi tắt Vsync thay vì 144 FPS khi bật Vsync sẽ vẫn cho bạn sự khác biệt giữa độ trễ đầu vào từ 5 mili giây trở lên đến 7 mili giây.

Bây giờ, khi chúng ta đang nói về sự khác biệt trong phần nghìn giây, có lẽ bạn đang tự hỏi liệu bạn có thực sự nhận thấy sự khác biệt này trong trò chơi hay không.
Tùy thuộc vào loại trò chơi bạn đang chơi, sự khác biệt có thể là bất cứ thứ gì từ rất đáng chú ý đến không có gì khác biệt. Một trò chơi có nhịp độ nhanh như CS:GO chạy ở 400 FPS trên màn hình 60 Hz, với độ trễ đầu vào tốt nhất là khoảng 2,5 mili giây, bạn sẽ cảm thấy phản ứng nhanh hơn đáng kể với chuyển động chuột của mình so với khi bạn chạy cùng một trò chơi ở tốc độ 60 FPS với 16,7 mili giây độ trễ (hoặc nhiều hơn).

Trong cả hai trường hợp, màn hình chỉ hiển thị cho bạn một khung hình mới 60 lần một giây nên sẽ không cho cảm giác mượt mà như trên màn hình 144 Hz hoặc 240 Hz. Nhưng sự khác biệt về độ trễ đầu vào là rất lớn; chạy ở tốc độ 400 FPS cho phép bạn đưa thông tin đầu vào của mình lên màn hình nhanh hơn gần 7 lần, nếu không muốn nói là hơn. Hãy tự mình dùng thử và bạn nhất định sẽ cảm nhận được sự khác biệt về khả năng phản hồi.
Và chúng tôi không tự nhiên rút ra lời giải thích này, trên thực tế, Nvidia biết những hạn chế của Vsync về độ trễ đầu vào, đó là lý do tại sao họ cung cấp một giải pháp thay thế có tên là Fast Sync (giải pháp thay thế của AMD có tên là Đồng bộ hóa nâng cao). Kỹ thuật đồng bộ hóa hiển thị này giống như sự kết hợp giữa bật và tắt Vsync, tạo ra kết quả tốt nhất của cả hai thế giới.
Đồng bộ hóa nhanh hoạt động bằng cách giới thiệu một bộ đệm bổ sung vào Vsync trên đường ống được gọi là bộ đệm được kết xuất cuối cùng. Điều này cho phép GPU tiếp tục hiển thị các khung hình mới vào bộ đệm phía sau, chuyển sang bộ đệm được hiển thị cuối cùng khi hoàn tất. Sau đó, khi làm mới màn hình, bộ đệm được hiển thị cuối cùng được đẩy lên bộ đệm phía trước mà màn hình truy cập.

Ưu điểm mà điều này tạo ra là GPU không còn đợi sau khi hoàn thành một khung hình để quá trình làm mới màn hình diễn ra, giống như trường hợp bật Vsync. Thay vào đó, GPU tiếp tục hiển thị các khung hình để khi màn hình truy cập vào một khung hình khi bắt đầu giai đoạn làm mới, khung hình đó sẽ được hiển thị gần hơn với cửa sổ làm mới. Điều này làm giảm độ trễ đầu vào. Tuy nhiên, không giống như khi tắt Vsync, Fast Sync cung cấp khung hình hoàn chỉnh cho màn hình vào đầu mỗi lần làm mới, thay vì chỉ đẩy khung hình lên màn hình ngay lập tức và chính kỹ thuật này giúp loại bỏ hiện tượng xé hình.
Đồng bộ hóa nhanh chỉ hoạt động khi tốc độ khung hình cao hơn tốc độ làm mới của màn hình, nhưng tính năng này thành công trong việc mang lại trải nghiệm trò chơi nhạy hơn mà không bị xé hình. Và tất nhiên, AMD có một tính năng tương đương được gọi là Đồng bộ hóa nâng cao.
Hy vọng rằng phần giải thích này sẽ giải đáp một số câu hỏi của bạn về lý do tại sao chạy trò chơi trên tốc độ làm mới tối đa của màn hình lại mang lại trải nghiệm trò chơi nhạy hơn và tại sao khả năng chạy trò chơi ở tốc độ khung hình cao hơn luôn là một lợi thế ngay cả khi nó có vẻ như vậy màn hình của bạn không thể tận dụng lợi thế của nó.
Một lưu ý cuối cùng: chúng tôi chưa thảo luận về các công nghệ đồng bộ hóa thích ứng như G-Sync và FreeSync ở đây và đó là bởi vì chúng tôi chủ yếu nói về việc chạy trò chơi trên mức làm mới tối đa, trong đó đồng bộ hóa thích ứng không áp dụng. Có rất nhiều phương pháp đồng bộ hóa khác nhau, nhưng đồng bộ hóa thích ứng rất khác với Vsync và Fast Sync mà chúng ta đã nói đến, và ít nhất là đối với cuộc thảo luận này, không thực sự phù hợp.
Tín dụng tiêu đề: Ảnh của Jakob Owens