Ổn định hóa quy trình dithering 1-bit của Obra Dinn (2017)
(forums.tigsource.com)-
Diễn đàn TIGSource
- TIGSource đã mở máy chủ Discord chính thức.
- Diễn đàn có nhiều chủ đề và thảo luận đa dạng, với sự tham gia của nhiều thành viên.
-
Return of the Obra Dinn
- Đang có thảo luận về phong cách đồ họa của trò chơi và vấn đề dithering.
- Có những thử nghiệm nhằm giải quyết hiện tượng nhấp nháy bằng cách render ở độ phân giải cao rồi downscale.
- Cũng bàn về cách cố định mẫu dithering để tạo sự ổn định khi chuyển động.
-
Quy trình dithering
- Obra Dinn được render ở thang độ xám 8-bit rồi chuyển đổi sang 1-bit.
- Trò chơi sử dụng hai mẫu dithering để tạo ra nhiều hiệu ứng thị giác khác nhau.
- Với hình ảnh chuyển động, mẫu dithering có thể gây ra vấn đề.
-
Ổn định hóa dithering
- Đã có nghiên cứu về cách cố định mẫu dithering vào hình học để tăng độ ổn định.
- Nhiều phương pháp ánh xạ đã được thử nghiệm nhằm tìm ra kết quả tối ưu.
-
Kết luận
- Việc giải quyết vấn đề dithering tốn khá nhiều thời gian, nhưng cuối cùng đã khắc phục được mà vẫn giữ nguyên phong cách hình ảnh của trò chơi.
- Phiên bản game cuối cùng sẽ cung cấp hai chế độ hiển thị.
1 bình luận
Ý kiến trên Hacker News
Tôi đã làm lập trình đồ họa hơn 10 năm mà vẫn không nhận ra điều đó khi chơi game. Xét về ngôn ngữ thị giác tổng thể của game, tôi nghĩ 100 giờ đó đã được dùng rất xứng đáng
Cỡ này thì có lẽ đã có thể gửi lên SIGGRAPH với chủ đề tính nhất quán theo thời gian trong kết xuất phi hiện thực
Nói thêm cho ai chưa biết, Return of the Obra Dinn và Papers, Please đều là game của Lucas Pope, và được xem là những tác phẩm kinh điển thực thụ, đã giành nhiều giải thưởng
Ngay cả nếu bình thường bạn không hay chơi game, chúng vẫn rất đáng thử. Cả hai đều không phải kiểu game điển hình
Không có nhiều game khiến tôi làm đến mức đó. Tôi chưa chơi Obra Dinn vì không bị phong cách mỹ thuật của nó thu hút, nhưng nếu thích game suy luận thì Curse of the Golden Idol cũng đáng xem qua. Về mặt sáng tạo, nó khá gần với những game này và cũng khá thú vị
Dù vậy tôi vẫn phá đảo
Dithering 1-bit mạnh là một chủ đề thật sự thú vị. Ngay cả trong 2D cũng có nhiều cách làm, mỗi cách có ưu nhược điểm và đánh đổi riêng
Thật đáng ngạc nhiên là thứ từng là cốt lõi của trải nghiệm máy tính thập niên 80 lại trở nên khá khó nhằn trên phần cứng hiện đại. Trong dự án của tôi[0], tôi nhận ra gần như không thể ánh xạ 1:1 giữa pixel offscreen và canvas do trình duyệt cung cấp
[0] https://sheep.horse/2023/1/improved_web_component_for_pixel-...
Một game đơn giản tôi từng làm dùng hiển thị màu độ phân giải thấp cho 3/4 màn hình, còn phần dưới dùng 4 màu với độ phân giải ngang gấp đôi để nhét được nhiều chữ hơn. Vì vậy nó đổi độ phân giải 120 lần mỗi giây mà CPU cũng không bị chậm đi đáng kể
Có vẻ không cách tiếp cận nào được đề xuất hoạt động tốt, và vấn đề này trông phức tạp hơn nhiều so với vẻ ngoài
Những thứ có khả năng hoạt động đúng có lẽ là dùng mẫu dithering “fractal” để việc phóng to/thu nhỏ mượt và bất biến theo tỉ lệ, xử lý trong không gian texel để cả chuyển động camera lẫn chuyển động vật thể đều đúng, hoặc dùng lọc song tuyến hay render siêu mẫu mẫu dithering rồi chạy một pass kiểu khuếch tán lỗi bằng compute shader trong không gian màn hình
Tuy nhiên tôi không chắc thực tế có chạy tốt không. Nếu vẫn chưa đủ, có thể có một phương án khác: xử lý đơn giản trong không gian màn hình, rồi ánh xạ ngược kết quả về không gian texel theo cách bảo toàn độ phân giải; ở khung hình tiếp theo dùng thông tin không gian texel để tạo một nghiệm không gian màn hình tương thích rồi lại ánh xạ về không gian texel, từ đó dần xây dựng mẫu fractal theo từng texel lúc runtime. Đây có thể là cách tốt nhất, nhưng có vẻ rất đắt về bộ nhớ, khối lượng tính toán và độ phức tạp
https://x.com/dgant/status/1851840125065453894
https://x.com/dgant/status/1851835968342446576?t=kCUSWCtJEc_...
Cách hoạt động là dùng dithering trong không gian thế giới, áp dụng dithering 2D lên bề mặt được ánh xạ tam phẳng, chọn tỉ lệ tọa độ theo độ sâu để mẫu dithering nằm trong khoảng [1px, 2px), và tô các bề mặt đủ xa bằng tọa độ cầu. Ở các ngưỡng độ sâu có một số phần bị tô lại, nhưng thực tế không quá khó chịu
Đào sâu thêm cho những ai quan tâm, tôi tìm thấy các devlog trước đây của ông ấy về chủ đề này [1] [2]
Đặc biệt phần nói về thuật toán upscale tên Scale2X rất đáng chú ý và khá hay [3]
[1] https://forums.tigsource.com/index.php?topic=40832.260
[2] https://forums.tigsource.com/index.php?topic=40832.msg121719...
[3] https://www.scale2x.it
Tôi thật sự thích việc người này chia sẻ mọi thứ trên diễn đàn
Tôi nhớ mình từng xem những công việc ban đầu của Papers, Please; có điều gì đó rất hay ở việc chia sẻ quá trình làm và để nó tiếp xúc với phản hồi
Thảo luận khi đó: https://news.ycombinator.com/item?id=15766249
Đây là một trong những bài viết về dithering hay nhất tôi từng thấy. Tôi từng làm phần dithering đen trắng cho Return to Dark Castle
Tôi muốn dùng Atkinson dithering, nhưng do cách các giá trị pixel lân cận lan sang nhau nên khó triển khai trong shader, và lúc đó tôi cũng rất căng thẳng, mệt mỏi. Tôi nghĩ mình đã không nghĩ đến ý tưởng cố định mẫu theo offset của cảnh, nên ở các màn cuộn như hầm mộ hay gói trực thăng chắc sẽ có hiện tượng nhấp nháy. Có thể tôi đã làm rồi cũng nên, nhưng không nhớ. Dù sao thì cũng rất tuyệt
Gần đây tôi tải từ GOG và thử chơi trên 5K Studio Display, nhưng không thể có được kết quả mà các pixel đẹp đẽ không bị mờ. Thật đáng tiếc
Tôi đã vào hết mọi mục trong menu cài đặt
Nói thêm cho vui, soundtrack của game này ở đây
https://www.youtube.com/watch?v=8qvdAWLcPyU