การทำให้กระบวนการ 1-bit dithering ของ Obra Dinn เสถียร (2017)
(forums.tigsource.com)-
ฟอรัม TIGSource
- TIGSource ได้เปิดเซิร์ฟเวอร์ Discord อย่างเป็นทางการ
- ในฟอรัมมีหัวข้อและการสนทนาหลากหลาย และมีสมาชิกจำนวนมากเข้าร่วมอยู่
-
Return of the Obra Dinn
- มีการพูดคุยเกี่ยวกับสไตล์กราฟิกของเกมและปัญหาเรื่อง dithering
- มีความพยายามแก้ปัญหาการกะพริบด้วยการเรนเดอร์ที่ความละเอียดสูงแล้วค่อย downscale
- มีการอภิปรายวิธีตรึงแพตเทิร์น dithering เพื่อเพิ่มความเสถียรให้กับการเคลื่อนไหว
-
กระบวนการ dithering
- Obra Dinn เรนเดอร์เป็น 8-bit grayscale ก่อน แล้วจึงแปลงเป็น 1-bit
- ใช้แพตเทิร์น dithering สองแบบเพื่อสร้างเอฟเฟกต์ภาพที่หลากหลาย
- ในภาพเคลื่อนไหว แพตเทิร์น dithering อาจก่อให้เกิดปัญหาได้
-
การทำให้ dithering เสถียร
- มีการศึกษาวิธีเพิ่มความเสถียรโดยตรึงแพตเทิร์น dithering ไว้กับ geometry
- มีความพยายามลองวิธี mapping หลายแบบเพื่อหาผลลัพธ์ที่ดีที่สุด
-
บทสรุป
- แม้จะใช้เวลามากในการแก้ปัญหา dithering แต่ท้ายที่สุดก็สามารถแก้ได้โดยยังคงสไตล์ภาพของเกมไว้
- ตัวเกมเวอร์ชันสุดท้ายมีกำหนดจะรองรับโหมดการแสดงผลสองแบบ
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
แม้จะทำงานด้านโปรแกรมมิงกราฟิกมามากกว่า 10 ปี แต่ตอนเล่นเกมก็ไม่ได้สังเกตเห็นเลย เมื่อคิดถึง ภาษาภาพ โดยรวมของเกมแล้ว ผมว่าการใช้เวลา 100 ชั่วโมงนั้นคุ้มค่ามากจริง ๆ
ระดับนี้น่าจะส่งเข้า SIGGRAPH ในหัวข้อ ความสอดคล้องเชิงเวลา ของการเรนเดอร์แบบไม่เน้นสมจริงได้เลย
เผื่อคนที่ยังไม่รู้ Return of the Obra Dinn และ Papers, Please ต่างก็เป็นเกมของ Lucas Pope และได้รับการยกย่องว่าเป็นคลาสสิกชั้นดีที่คว้ารางวัลมาหลายรายการ
แม้ปกติจะไม่ใช่คนเล่นเกม ก็ยังคุ้มค่าที่จะลองดู ทั้งสองเกมไม่ใช่เกมแบบทั่วไป
มีเกมไม่กี่เกมที่ทำให้ผมทุ่มขนาดนั้น Obra Dinn ผมยังไม่ได้ลองเพราะสไตล์ภาพไม่ดึงดูด แต่ถ้าชอบเกมสืบสวน Curse of the Golden Idol ก็น่าลองดูเหมือนกัน ในแง่ความสร้างสรรค์ถือว่าใกล้เคียงกับเกมเหล่านี้ และสนุกทีเดียว
ถึงอย่างนั้นก็ยังเล่นจนจบ
ดิเทอริง 1 บิต แบบเข้ม ๆ เป็นหัวข้อที่น่าสนใจมากจริง ๆ แม้ใน 2D ก็มีหลายวิธี แต่ละแบบมีข้อดี ข้อเสีย และจุดแลกเปลี่ยนต่างกัน
น่าประหลาดใจที่สิ่งซึ่งเคยเป็นหัวใจของประสบการณ์คอมพิวเตอร์ยุค 80 กลับค่อนข้างยุ่งยากบนฮาร์ดแวร์สมัยใหม่ ในโปรเจกต์ของผม[0] ผมพบว่าแทบเป็นไปไม่ได้เลยที่จะ แมปแบบ 1:1 ระหว่างพิกเซลออฟสกรีนกับแคนวาสที่เบราว์เซอร์จัดให้
[0] https://sheep.horse/2023/1/improved_web_component_for_pixel-...
เกมง่าย ๆ ที่เคยทำในอดีตใช้การแสดงผลสีความละเอียดต่ำสำหรับ 3/4 ของหน้าจอ ส่วนด้านล่างใช้ 4 สีพร้อมความละเอียดแนวนอน 2 เท่าเพื่อใส่ข้อความได้มากขึ้น ดังนั้นจึงสลับความละเอียด 120 ครั้งต่อวินาทีได้โดยที่ CPU แทบไม่ช้าลง
ดูเหมือนว่าแนวทางที่เสนอมาไม่มีวิธีไหนได้ผลดีนัก และปัญหานี้ดูซับซ้อนกว่าที่เห็นมาก
สิ่งที่น่าจะมีโอกาสทำงานได้จริงคือการใช้แพตเทิร์นดิเทอร์แบบ “แฟร็กทัล” เพื่อให้การซูมเข้าออกนุ่มนวลและไม่ขึ้นกับสเกล, ประมวลผลใน พื้นที่เท็กเซล เพื่อให้ทั้งการเคลื่อนกล้องและการเคลื่อนวัตถุทำงานได้ถูกต้อง, หรือเรนเดอร์ด้วย bilinear filtering หรือ supersampling ของแพตเทิร์นดิเทอร์ก่อน แล้วค่อยใช้ compute shader ใน screen space ทำพาสกระจายข้อผิดพลาดบางรูปแบบ
แต่ก็ยังไม่มั่นใจว่าในทางปฏิบัติจะได้ผลดีหรือไม่ ถ้ายังไม่พอ ทางเลือกหนึ่งที่เป็นไปได้คือทำแบบง่าย ๆ ใน screen space ก่อน แล้วแมปผลลัพธ์ย้อนกลับไปยังพื้นที่เท็กเซลแบบคงความละเอียดไว้ จากนั้นในเฟรมถัดไปใช้ข้อมูลในพื้นที่เท็กเซลเพื่อสร้างคำตอบใน screen space ที่เข้ากันได้ แล้วแมปกลับไปยังพื้นที่เท็กเซลอีกครั้ง เพื่อค่อย ๆ สะสมแพตเทิร์นแฟร็กทัลรายเท็กเซลขณะรันไทม์ วิธีนี้อาจดีที่สุด แต่ดูแพงมากทั้งด้านหน่วยความจำ ปริมาณการคำนวณ และความซับซ้อน
https://x.com/dgant/status/1851840125065453894
https://x.com/dgant/status/1851835968342446576?t=kCUSWCtJEc_...
วิธีทำงานคือใช้ดิเทอริงใน world space, ใช้ดิเทอริง 2D บนพื้นผิวที่ทำ triplanar mapping, เลือกสเกลพิกัดตามความลึกเพื่อให้แพตเทิร์นดิเทอร์อยู่ในช่วง [1px, 2px) และระบายพื้นผิวที่อยู่ไกลพอด้วยพิกัดทรงกลม ตรงเกณฑ์ความลึกจะมีบางส่วนถูกระบายใหม่ แต่ในทางปฏิบัติไม่ได้รบกวนมากนัก
สำหรับคนที่สนใจ ผมลองขุดต่ออีกหน่อยแล้วเจอ devlog เก่า ๆ ที่เขาเคยโพสต์เกี่ยวกับหัวข้อนี้ [1] [2]
โดยเฉพาะส่วนที่พูดถึงอัลกอริทึมอัปสเกลชื่อ Scale2X น่าสนใจและเจ๋งมาก [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
ชอบมากที่คนนี้แชร์ทุกอย่างลงฟอรัม
จำได้ว่าเคยเห็นงานช่วงแรก ๆ ของ Papers, Please มันมีอะไรบางอย่างที่ยอดเยี่ยมในการแชร์กระบวนการทำงานและเปิดรับ ฟีดแบ็ก
การอภิปรายในตอนนั้น: https://news.ycombinator.com/item?id=15766249
นี่เป็นหนึ่งในบทความเกี่ยวกับดิเทอริงที่ดีที่สุดเท่าที่เคยเห็นมา ผมเคยทำงานดิเทอริงขาวดำของ Return to Dark Castle
อยากใช้ Atkinson dithering แต่เพราะค่าพิกเซลข้างเคียงไหลส่งต่อกัน ทำให้ยากต่อการนำไปทำในเชดเดอร์ และตอนนั้นก็เครียดกับเหนื่อยมากด้วย ผมน่าจะไม่ได้นึกถึงแนวคิดการตรึงแพตเทิร์นไว้กับออฟเซ็ตของฉาก ดังนั้นในด่านที่เลื่อนอย่างสุสานใต้ดินหรือเฮลิคอปเตอร์แพ็กน่าจะมีอาการวูบวาบ บางทีอาจจะทำแล้วก็ได้ แต่จำไม่ได้แล้ว อย่างไรก็ดี ยอดเยี่ยมมาก
ล่าสุดลองรับมาจาก GOG แล้วเล่นบน 5K Studio Display แต่ไม่สามารถได้ผลลัพธ์ที่พิกเซลงดงามเหล่านั้นไม่ถูกทำให้เบลอได้เลย เสียดายจริง ๆ
ผมเข้าไปดูทุกอย่างในเมนูตั้งค่าแล้ว
เพิ่มเติมขำ ๆ ซาวด์แทร็กของเกมนี้อยู่ที่นี่
https://www.youtube.com/watch?v=8qvdAWLcPyU