Cách hiển thị hình ảnh trong game
I. Tiền đề Giới Gaming ngày nay hay nhắc đến thuật ngữ "fps" (frame per second) hay còn gọi là "frame rate". Đây là một tiêu chí...
I. Tiền đề
Giới Gaming ngày nay hay nhắc đến thuật ngữ "fps" (frame per second) hay còn gọi là "frame rate". Đây là một tiêu chí quan trọng để đánh giá độ mượt hiển thị của game. Vì có khá nhiều bài giải thích chi tiết về fps trên Internet nên ở đây không đề cập đến, mà chỉ nói một cách nôm na đó là số lượng khung hình được cập nhật mới trong 1 giây hiển thị. Điều này liên quan tới tính chất lưu ảnh trên võng mạc của mắt người.
Năm 1829, nhà vật lý Joseph Plateau phát hiện ra rằng dù "thực tượng" đã không còn tồn tại ngay khoảnh khắc đó nữa, nhưng trong khoảng 0.1 giây thì mắt người vẫn còn nhìn thấy hình ảnh của "thực tượng" đó. Phát hiện này được ứng dụng trong điện ảnh, làm phim hoạt hình, làm TV, làm game,...
Trong điện ảnh, sau 0.04 giây (hay 1/24 giây) thì người ta cập nhật một hình ảnh mới. Do vậy ta hay nghe nói cụm từ "24 hình/giây" trong phim ảnh, và dù cả cuốn phim chỉ là một tập hợp những khung hình rời rạc, nhưng trong mắt người thì đó là những chuyển động liên tục.
![](https://media2.giphy.com/media/fV5JOavSTe63K/giphy.gif)
Nguyên tắc của phim hoạt hình, lợi dụng tính lưu ảnh của mắt
II. Nhìn về cách hiển thị hình ảnh của hệ máy game cổ
Ngày nay, khi đánh giá độ mượt của một game, lựa chọn TV, người ta hay nói nhiều đến yếu tố fps/tần số quét của màn hình, mặc dù mắt người là một sinh thể phức tạp, cảm giác mượt phụ thuộc vào nhiều yếu tố khác nhau của từng cá nhân. Tựu trung, tần số càng cao thì càng dễ cho cảm giác hình ảnh mượt mà. Tốc độ khung hình lý tưởng hiện nay trong giới Gaming là 60 fps, và trong những giai đoạn trước đó là 30 fps, 24 fps. Dù vậy, khá nhiều tựa game cho máy chơi game đương đại như Sony PlayStation 4 cũng không chạy ở mức lý tưởng là 60 fps. Vậy còn những máy chơi game thời kỳ đầu như NES/SNES thì sao?
Mặc dù ra đời vào năm 1990, so với công nghệ đương đại thì SNES là chiếc máy cổ lổ, nhưng về lý thuyết thì nó vẫn có khả năng hiển thị hình ảnh 60 fps. Máy SNES được thiết kế để hiển thị hình ảnh trên màn hình Tivi CRT (Cathod Ray Tube /ống tia âm cực) và hầu hết Tivi CRT chỉ cập nhật được hình ảnh ở tần số 30 fps nên thực tế là hầu hết game cổ, bao gồm cả SNES, đều chỉ chạy ở 30 fps trở xuống. Tuy vậy thì đối với các game 2D ở các thế hệ máy chơi game đời kỳ đầu thì chỉ số fps không mấy quan trọng. Lý do cũng là do nguyên nhân kỹ thuật như đề cập dưới đây.
Hình ảnh nguyên khối mà ta thấy trên màn hình, thực chất chỉ là những điểm ảnh rời rạc được "tô" theo từng tia quét (scanline). Độ phân giải chuẩn của game SNES hệ NTSC là 256x224, tức 256 điểm ảnh theo chiều ngang và 224 điểm ảnh theo chiều đứng. Cách mà hình ảnh được hiển thị như dưới đây. Cách mà máy chơi game của một thời kỳ hiển thị hình ảnh phụ thuộc vào công nghệ Tivi của thời kỳ đó.
- Tia quét bắt đầu từ gốc tọa độ là phía trên, bên trái của màn hình. Tia này quét từ trái sang phải, khi gặp điểm ảnh có dữ liệu (hiển thị) thì nó sẽ tô màu lên điểm ảnh đó. Khi quét hết điểm ảnh thứ 256 của 1 đường quét thì màn hình sẽ tạm tắt. Khoảng thời gian này gọi là H-blank (Horizontal blank), hiểu nôm na là tắt màn hình khi quét hết đường ngang.
- Sau khi quét hết 1 đường, tia quét trở về gốc xuất phát ở phía ngoài cùng bên tay trái, nhưng lần này là ở hàng dọc bên dưới và lặp lại chu trình tô điểm ảnh và H-blank như trên.
- Khi quét hết đường thứ 224 thì màn hình sẽ tắt để tia laser trở về gốc tọa độ ngoài cùng bên trái, bên trên cùng như ban đầu. Khoảng thời gian tắt màn hình này được gọi là V-blank (Vertical blank). Thực chất là sau khi quét hết đường thứ 224, tia laser vẫn tiếp tục quét đến đường thứ 225, sau đó quét đến đường thứ 260 trong trạng thái overflow và trở về đường số 0. Từ đường 224 trở đi thì màn hình ở trạng thái tắt.
![](https://i.imgur.com/Ae293ng.png)
Như vậy, trong 1 chu trình quét thì có 1 lần V-blank và 224 lần H-blank. Trong 1 giây có 60 lần lặp lại chu trình như trên, tức là có 60 lần V-blank và 224 x 60 = 13440 lần H-blank.
Khoảng thời gian tắt màn hình H-blank và V-blank chính là khoảng thời gian để cập nhật mới hình ảnh trên màn hình. Ví dụ, tọa độ của hình ảnh nhân vật đang ở (1, 3) được di chuyển sang (1, 4) chính là trong thời gian này. Nhưng vì khoảng thời gian H-blank quá ngắn nên thường thì lập trình viên chọn V-blank để cập nhật hình ảnh. Nói cách khác, SNES có thể thay đổi, cập nhật hình ảnh trong 1 giây.
Máy SNES ra đời năm 1990, có thể xem là cỗ máy khá mạnh tại thời điểm đó (CPU 3.58 Mhz, nhanh hơn máy tính Apple IIGS 2.8 Mhz cũng sử dụng CPU 65816) nhưng không thể so sánh với những cỗ máy ngày nay. Nguyên tắc xử lý hình ảnh của máy SNES như sau:
- Thực hiện các tính toán liên quan đến hình ảnh và âm thanh trong khoảng thời gian màn hình không tắt.
- Dựa vào kết quả tính toán mà cập nhật hình ảnh trong khoảng thời gian màn hình tắt (chủ yếu là V-blank).
Nhưng vì càng có nhiều hình ảnh hiển thị, càng có nhiều tính toán thì thời gian tính toán càng kéo dài, do đó sẽ bỏ lỡ mất khoảng thời gian V-blank của 1 chu trình. Do vậy, rất nhiều game đã chọn giải pháp tính toán trong 1/nhiều chu trình và cập nhật hình hình ảnh trong khoảng V-blank của những chu trình sau. Đó là lý do mà đa số game SNES không chạy ở 60 fps. Và điều này vẫn đúng với nhiều hệ máy chơi game đương đại khác. Để khắc phục điều này thì chỉ có cách nâng cấp phần cứng, để các tính toán diễn ra nhanh hơn, bắt kịp V-blank trong 1 chu trình, hoặc tối ưu hóa thuật toán, giảm bớt lượng tính toán để bắt kịp V-blank.
III. Quay màn hình game bằng máy quay Super Slow
Như đề cập bên trên, cơ chế tạo hình ảnh chuyển động của Tivi là liên tục thay đổi hình ảnh trong một khoảng thời gian rất ngắn. Với tần suất cập nhật trong 1 giây lên đến 24 lần, 30 lần, và Tv hiện đại trên 60 lần thì mắt người không thể phát hiện ra khoảng "khựng" giữa những lần đổi hình ảnh. Nhưng với mắt của sinh vật khác, chẳng hạn như ruồi thì chúng vẫn thấy đó là những hình ảnh rời rạc. Cũng giống như khi ta quay lại màn hình Tv bằng máy quay siêu cao tốc, 380.000 khung hình/giây, như chủ nhân của kênh Youtube "The Slow Mo Guys" đã làm.
![](https://i.imgur.com/xzWPcJP.jpg)
Anh ta quay màn hình game Super Mario (NES) được hiển thị trên chiếc Tv CRT bằng máy quay có tốc độ màng trập siêu cao tốc. Tivi này có tần suất quét từ trên xuống là 30 lần/giây.
![](https://i.imgur.com/tK1jvk5.jpg)
Với tốc độ quay 1,600 khung hình/giây (1,600 fps) thì màn hình sạn của Tv trước khi bật game trông như thế này.
![](https://i.imgur.com/quFPtqc.jpg)
Với tốc độ 2,500 fps thì màn hình Mario như thế này. Chỉ thấy một dải sáng, chung quanh tối nhưng vẫn nhận được phần đầu của Mario.
![](https://i.imgur.com/yaXDxe0.jpg)
Khi tăng tốc lên 28,500 fps thì có thể nhận thấy đường quét chạy từ phía trái sang phải. Xem video sẽ thấy rõ điều này.
![](https://i.imgur.com/hKYYHks.png)
Và khi tăng tốc lên 380,117 fps thì thấy rõ đường quét "tô vẽ" từng điểm ảnh.
Xem video dưới đây thì thấy rõ cách hiển thị hình ảnh của máy NES, phiên bản tiền bối của SNES.
Đối với màn hình tinh thể lỏng và cách hiển thị hình ảnh của các hệ máy chơi game sau này như Xbox 360, thì không có tia quét chạy từng hàng như đối với Tv CRT, mà toàn bộ hình ảnh (khung hình) được hiển thị trong một khoảng thời gian. Đây là điểm khác biệt lớn so với Tv CRT. Tuy nhiên, khi cập nhật hình ảnh thì cũng thực hiện lần lượt từ trên xuống, không khác với thời CRT. Cách mà màn hình smartphone ngày nay hiển thị, cập nhật hình ảnh cũng tương tự.
IV. Dư đàm
Mãi đến thời gian gần đây, người ta mới để ý đến khái niệm thời gian cực nhỏ. Trong khi đó thì từ rất sớm, kinh điển Phật giáo đã đề cập đến khái niệm này. Phật giáo có khái niệm "sát na" (kṣaṇa) chỉ khoảng thời gian cực ngắn. Theo kinh "A Tỳ Đạt Ma Đại Tỳ Bà Sa Luận" (Abhidharma-mahāvibhāṣā-śāstra) thì 1 sát na = 1/75 giây, khoảng thời gian còn nhỏ hơn 1 chu kỳ quét của máy SNES.
Đối với người thời cổ mà nói thì khoảng thời gian cực ngắn như vậy quả là một điều rất khó hình dung, khó tưởng tượng.
![hubspot-banner](../../../assets/images/banner/hubspot-banner-mobile.png)
Game
/game
Bài viết nổi bật khác
- Hot nhất
- Mới nhất