1 คะแนน โดย GN⁺ 2024-07-30 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • วิดีโอของ SNES ถูกออกแบบให้ทำงานภายใต้ข้อจำกัดของ CRT TV และสัญญาณ NTSC ในช่วงต้นทศวรรษ 1990 โดยใช้หน้าจอ 256x224, อัตราเฟรม 60.098Hz และช่วง blanking ที่เหมาะสม
  • CRT ไม่ได้ทำงานด้วยตารางพิกเซล แต่ใช้ปืนอิเล็กตรอน สัญญาณ RGB และ HSYNC/VSYNC เพื่อวาดเส้นสแกน และความต่างระหว่าง progressive กับ interlace ก็แยกกันที่ตำแหน่งของสัญญาณซิงก์
  • เนื่องจาก SNES ไม่สามารถมีวิดีโอออสซิลเลเตอร์แยกได้ จึงนำ มาสเตอร์คล็อก 21.47727MHz มาแบ่งเพื่อสร้างดอตคล็อก 5.3693175MHz และด้วยชุดค่า 262 เส้น·341 ดอต จึงได้ความถี่ 60.098Hz ซึ่งต่างจากมาตรฐาน NTSC 59.94Hz
  • โหมดพื้นฐานประกอบด้วย แสดงผล 224 เส้น และ VBLANK 38 เส้น จากทั้งหมด 262 เส้น พร้อมพื้นที่แสดงผล 256 ดอต และ HBLANK 85 ดอต จากทั้งหมด 341 ดอต เพื่อให้ PPU มีเวลาทำงานกับ sprite line buffer
  • PAL SNES ปรับใช้ออสซิลเลเตอร์อีกแบบและมีโหมด overscan 240 เส้นให้เหมาะกับสภาพแวดล้อม 50Hz·312.5 เส้น แต่เกมส่วนใหญ่ยึดตาม 224 เส้น จึงมักเกิดแถบดำและ การทำงานช้าลง 17%

จุดที่ CRT TV จำกัดการออกแบบ

  • เป้าหมายหลักของการแสดงผลจาก SNES คือ CRT TV มาตรฐาน และในเวลานั้นทีวีจะรับสัญญาณผ่านเสาอากาศแบบ NTSC อนาล็อก หรือรับภาพภายนอกผ่านอินพุต AUX
  • อินพุตเสริมของทีวีทั่วไปประกอบด้วยขั้ว คอมโพสิตวิดีโอ สีเหลือง และขั้วสเตอริโอเสียงสีขาว·สีแดง
  • CRT อาจมองได้ว่าเป็นอุปกรณ์วาดเส้นระดับ 15kHz ที่สามารถวาดเส้นได้ประมาณ 15,000 เส้นต่อวินาที

CRT ไม่ได้ทำงานด้วยพิกเซล แต่ทำงานด้วยเส้นสแกนและสัญญาณ

  • ภายใน CRT มีปืนอิเล็กตรอนสามกระบอก และอิเล็กตรอนจะถูกหักเหขึ้นลงและซ้ายขวาด้วยแม่เหล็กแนวตั้งและแนวนอน
  • ตัวอิเล็กตรอนเองไม่มีสี โดยหน้ากากจะทำให้อิเล็กตรอนจากแต่ละปืนไปตกบนแถบสารเรืองแสงสีที่ถูกต้อง
  • CRT ไม่มี พิกเซล และช่องสล็อตก็ไม่ใช่พิกเซล
    • ทีวีความละเอียดสูงจะมีสล็อตเล็กลง ทำให้แสดงสัญญาณสีเดียวกันในแนวนอนได้เที่ยงตรงกว่า
  • CRT รับสัญญาณ 5 แบบผ่านสาย 4 เส้น
    • สัญญาณ Red, Green, Blue เชื่อมตรงไปยังปืนอิเล็กตรอนแต่ละกระบอก
    • หากไม่มีสัญญาณบนสาย RGB ทั้งสาม ก็จะไม่มีการยิงอิเล็กตรอนและแสดงเป็นสีดำ
    • สายสีขาวคือ Composite Sync(CSYNC) ซึ่งรวม HSYNC และ VSYNC ไว้ด้วยกัน
  • CRT ไม่ได้สร้าง VSYNC เอง แต่รับสัญญาณซิงก์จากระบบภายนอกเพื่อตั้งตำแหน่งของปืนอิเล็กตรอน

ความต่างระหว่าง progressive และ interlace

  • CRT วาดทีละบรรทัดจากซ้ายไปขวา และเมื่อได้รับ HSYNC ก็จะกลับไปยังด้านซ้ายของจอที่ X=0
  • เมื่อได้รับ VSYNC ก็จะกลับไปยังด้านบนของจอที่ Y=0
  • ระหว่างที่ปืนอิเล็กตรอนเคลื่อนไปทางขวา มันจะค่อย ๆ เอียงลงด้านล่างด้วย ทำให้บรรทัดถัดจาก HSYNC ถูกวาดใต้บรรทัดก่อนหน้า
  • ถ้า VSYNC เกิดขึ้นพร้อมกับ HSYNC สุดท้ายพอดี ก็จะได้การสแกนแบบ progressive ที่แต่ละฟิลด์วาดทับตำแหน่งเดิม
  • ถ้า VSYNC เกิดขึ้นระหว่าง HSYNC สองครั้ง เส้นของฟิลด์ถัดไปจะเข้าไปอยู่ระหว่างเส้นของฟิลด์ก่อนหน้า กลายเป็นการสแกนแบบ interlace
    • interlace ทำให้ความละเอียดแนวตั้งเพิ่มเป็นสองเท่า แต่ความถี่การรีเฟรชของแต่ละบรรทัดจะลดลงครึ่งหนึ่ง
  • NTSC ส่งออกสองฟิลด์ที่ราว 30Hz ดังนั้น CRT จึงเว้นระยะระหว่างเส้นไว้สำหรับ interlacing และเมื่อวาดแบบ progressive จะมองเห็นช่องว่างเป็นเส้นสแกนสีดำ

สเปก NTSC และข้อจำกัดของแบบออกแบบที่เรียบง่าย

  • การออกแบบของ SNES ต้องอยู่ใกล้ค่าที่ทีวี NTSC สามารถรองรับได้
    • อัตราส่วนภาพ: 4:3
    • จำนวนเส้นต่อฟิลด์: 262.5
    • จำนวนดอตต่อหนึ่งบรรทัด: 341.25
    • ความถี่ฟิลด์: 59.94Hz
  • เดิมที NTSC ขาวดำเป็น 60Hz แต่ NTSC สีลดความถี่ลง 0.1% เพื่อเพิ่มสีโดยยังคงความเข้ากันได้ย้อนหลังและหลีกเลี่ยงอาร์ติแฟกต์
  • หากคิดแบบง่าย ๆ อาจเลือกเป็น progressive 262 เส้น, 350 ดอต, 59.94Hz ซึ่งจะต้องใช้ดอตคล็อก 5,496,498Hz
  • แต่แบบนี้ไม่ตรงกับ SNES จริง
    • เนื่องจากข้อจำกัดด้านต้นทุน จึงไม่สามารถมีออสซิลเลเตอร์เฉพาะสำหรับระบบวิดีโอได้ และซับซิสเต็มต้องใช้การหารความถี่จาก มาสเตอร์ออสซิลเลเตอร์
    • CRT อาจยังยิงอิเล็กตรอนต่อระหว่างจอกำลังย้อนตำแหน่ง จึงต้องมีการจัดการ overscan และ blanking

Blanking และการเลือกความละเอียดแนวตั้ง

  • หากยังยิงอิเล็กตรอนต่อในขณะที่ตำแหน่งของปืนกำลังรีเซ็ตในแนวนอนหรือแนวตั้ง จะเกิดอาร์ติแฟกต์ที่มองเห็นได้
  • ทีวีจะทำ overscan โดยแสดงภาพที่ใหญ่กว่าพื้นที่จอเล็กน้อย และระดับของมันก็แตกต่างกันไปในแต่ละเครื่อง
  • หลัง VSYNC และ HSYNC ตำแหน่งของปืนอิเล็กตรอนจะยังสั่นอยู่เล็กน้อย จึงต้องมีช่วงหยุดยิงอิเล็กตรอนก่อนจะได้เส้นตรงที่นิ่ง
    • ช่วงหยุดยิงหลัง VSYNC คือ VBLANK
    • ช่วงหยุดยิงหลัง HSYNC คือ HBLANK
  • ระบบคู่แข่งในยุคนั้นก็ใช้ blanking เช่นกัน
    • Capcom CPS-1: 262 เส้น, VBLANK 38 เส้น, แสดงผล 224 เส้น, 59.6294fps
    • Sega Genesis: 262 เส้น, VBLANK 38 เส้น, แสดงผล 224 เส้น, 59.9227fps
    • Neo-Geo AES: 264 เส้น, VBLANK 40 เส้น, แสดงผล 224 เส้น, 59.18fps
  • SNES แบ่ง 262 เส้นออกเป็น 224 เส้นแสดงผล + 38 เส้น blank
    • ค่า 224 หารด้วย 16 ลงตัว จึงเข้ากันได้ดีกับกราฟิกไปป์ไลน์แบบไทล์ 16x16

ความละเอียดแนวนอนและ 60.098Hz

  • SNES แบ่งมาสเตอร์คล็อก 21.47727MHz ด้วย 4 เพื่อใช้เป็น ดอตคล็อก 5.3693175MHz
  • อัตราเฟรม จำนวนเส้น จำนวนดอตต่อบรรทัด และดอตคล็อก ล้วนเชื่อมโยงกัน
  • หากใส่อัตราเฟรมเป้าหมาย 59.94Hz และ 262 เส้น จะได้ประมาณ 342 ดอตต่อบรรทัด แต่เนื่องจาก carrier artifact ของเอาต์พุตคอมโพสิต วิศวกรของ Nintendo จึงต้องใช้ 341 ดอต
  • เมื่อใช้ค่าชุดนี้ อัตราเฟรมของ SNES จะเป็น 5.3693175MHz / (341 * 262) = 60.098Hz
  • แม้ 60.098Hz จะต่างจาก 59.94Hz ของ NTSC แต่ก็ยังอยู่ในช่วงที่ CRT ยอมรับได้

เหตุผลที่หน้าจอพื้นฐานกลายเป็น 256x224

  • ไม่สามารถใช้ 341 ดอตทั้งหมดของหนึ่งบรรทัดเป็นพื้นที่แสดงผลได้ เพราะต้องมี HBLANK เพื่อซ่อนอาการสั่น อาร์ติแฟกต์ และ overscan ของทีวี
  • สำหรับ 224 เส้น ความกว้างแสดงผลที่ใกล้เคียง 4:3 คือ 224 * 4/3 = 298 ดอต
  • ไปป์ไลน์ไทล์แมปใช้ไทล์ 16x16 ดังนั้นค่าที่เป็นไปได้จึงได้แก่ 304, 288, 272, 256, 240 เป็นต้น
    • 304 ดอตเป็นค่าที่ใกล้กับภาพที่แทบไม่บิดเบือน
  • ยังมีข้อจำกัดที่ PPU ต้องเติม sprite line buffer ระหว่าง HBLANK ด้วย
    • หากเลือกแสดงผล 304 ดอต HBLANK จะเหลือเพียง 37 ดอต หรือประมาณ 7µs
    • เป็นไปได้ว่านี่ยังไม่พอสำหรับดึงข้อมูล sprite ได้สูงสุด 128 ตัว
  • ทางเลือกสุดท้ายคือ แสดงผล 256 ดอต + HBLANK 85 ดอต
    • PPU จึงมีเวลาราว 16µs ระหว่าง HBLANK
    • อัตราส่วนภาพของพื้นที่แสดงผลไม่ใช่ 4:3 แต่เป็น 8:7 จึงเกิดการบิดเบือนเล็กน้อยเมื่อแสดงบน CRT

การประนีประนอมของโหมดความละเอียดสูง

  • โครงสร้างวิดีโอพื้นฐานของ SNES คือความละเอียด overscan 341x262, ความละเอียดแสดงผล 256x224, และอัตราเฟรม 60.098Hz
  • 99% ของเกมใช้โครงสร้างนี้ แต่ SNES ก็มีโหมดความละเอียดสูงที่เพิ่มความละเอียดแนวตั้งหรือแนวนอนเป็นสองเท่าด้วย
  • ความละเอียดแนวตั้ง 448 เส้นทำได้โดยส่ง VSYNC ที่ตำแหน่งครึ่งบรรทัดหลัง HSYNC สุดท้าย เพื่อสร้างเฟรมแบบ interlace
    • ในกรณีนี้แต่ละบรรทัดจะรีเฟรชที่ 60.098/2 = 30.049Hz
    • ภาพจะกะพริบและดูไม่สวยนัก แต่ได้ความละเอียดแนวตั้งเพิ่มขึ้น
  • การเพิ่มความละเอียดแนวนอนเป็นสองเท่ายากกว่า เพราะไม่มีดอตคล็อกที่ต้องการ
    • SNES จึงเลื่อนฟิลด์ที่สองในแนวนอนเล็กน้อย เพื่อให้จุดไปอยู่ระหว่างจุดของฟิลด์ก่อนหน้า
    • ผลลัพธ์คืออัตราเฟรมครึ่งหนึ่งและมีอาการสีฟุ้งมาก
  • fullsnes.txt รวบรวมตัวอย่างการใช้โหมดความละเอียดสูงในหลายเกม
    • โลโก้ Nintendo ใน Donkey Kong Country 1: 512x224, BgMode5
    • หน้าตั้งค่าใน Seiken Densetsu 2: 512x224, BgMode5
    • RPM Racing: อินโทรและระหว่างเกม 512x448, BgMode5+Interlace
    • กรณีของ Ranma 1/2 จริง ๆ เป็น 256x224 แต่มีการเปิด interlace โดยบังเอิญ ทำให้เกิดการกะพริบที่ไม่จำเป็น

PAL, SECAM และปัญหาของ SNES เวอร์ชันยุโรป

  • ทีวียุโรปใช้ PAL แทน NTSC และในฝรั่งเศสยังมี SECAM ด้วย
  • สภาพแวดล้อม PAL คาดหวังค่าที่ 50Hz และ 312.5 เส้นต่อฟิลด์อย่างแม่นยำ
  • PAL SNES ติดตั้ง ออสซิลเลเตอร์ 17.7344750MHz แทน 21.4772700MHz ของ NTSC
    • ชิป S-CLK จะประมวลผลแบบ 6/5 แล้วหารด้วย 4 อีกครั้งเพื่อสร้างดอตคล็อก 5.32034250MHz
  • หากใช้กราฟิกเพียง 224 เส้น ก็จะเกิดแถบดำขนาดใหญ่ด้านบนและล่างของพื้นที่แสดงผล
  • เพื่อลดปัญหานี้ จึงมี โหมด overscan ที่เพิ่มเส้นแสดงผลเป็น 240 เส้น
    • 16 เส้นที่เพิ่มมามีความสูงเท่ากับหนึ่งไทล์
    • ในทางปฏิบัติ เกมส่วนใหญ่ถูกสร้างมาสำหรับ 224 เส้น จึงแทบไม่ใช้โหมดนี้
    • มีเพียง 12 เกมเท่านั้นที่ใช้
  • Super Mario World แก้ปัญหาใน PAL ด้วยการเพิ่มขอบเขตการมองเห็นในแนวตั้ง
  • ทั้ง NTSC และ PAL ใช้อัตราส่วนภาพ 4:3 เหมือนกัน ดังนั้นภาพ PAL จะถูกบีบในแนวตั้งเล็กน้อยมากกว่า NTSC
  • โค้ดเกมจำนวนมากไม่ได้คำนึงว่า VSYNC เกิดที่ 50.00697891Hz แทน 60.098Hz และผลคือเกมทำงานช้ากว่าที่ตั้งใจไว้ 17%

สัญญาณเอาต์พุตและขั้วต่อ AV

  • สัญญาณ RGB และซิงก์ที่กล่าวถึงก่อนหน้านี้เป็นสัญญาณดิบสำหรับขับ CRT โดยตรง แต่ในความเป็นจริงทีวีส่วนใหญ่ไม่สามารถรับสัญญาณเหล่านี้ตรง ๆ ได้
  • ทีวีจำนวนมากมีเพียงอินพุตคอมโพสิตสีเหลืองที่ด้านหลัง และบางรุ่นระดับสูงมีอินพุต S-Video
  • SNES จึงแปลงสัญญาณสำหรับ CRT ไปเป็นทั้งคอมโพสิตและ S-Video
  • ขั้วต่อ AV ให้เอาต์พุตหลายรูปแบบโดยไม่ทิ้งสัญญาณเดิม
    • Red, Green, Blue
    • C-Sync
    • S-Video แบบ Luminance และ Chrominance
    • Composite Video
    • +5V DC
    • Ground
    • Left Audio, Right Audio
  • ทีวียุโรป โดยเฉพาะในฝรั่งเศส มักมีขั้วต่อ SCART และวิธีนี้ทำให้สามารถทำสายที่ส่งสัญญาณเข้า CRT ได้โดยตรงมากขึ้น
  • ผลลัพธ์คือผู้ใช้ในยุโรปสามารถเล่นเกมที่ช้าลง 17% และมีแถบดำ แต่ได้คุณภาพภาพที่เที่ยงตรงสูง

1 ความคิดเห็น

 
GN⁺ 2024-07-30
ความคิดเห็นบน Hacker News
  • 224 ไม่น่าจะเป็นตัวเลขที่สุ่มเลือกมา เพราะหารด้วย 16 ลงตัว (224/16=14) จึงเข้ากับ tilemap ใน pipeline การเรนเดอร์กราฟิกได้ดี
    ตอนเด็ก ๆ ผมลองจับโน่นจับนี่เพื่อเรียนเขียนโปรแกรมเกม แล้วกว่าจะเข้าใจก็ผ่านไปนาน พอเข้าใจแล้วก็รู้สึกสมเหตุสมผลมาก สมัยนั้น CGA/EGA/VGA มักมีโหมด 320x200 ส่วน NES และ SNES เป็น 256x224 ซึ่งจริง ๆ แล้วใกล้เคียงกับข้อจำกัดของทีวี
    ในทางกลับกัน Pac-Man เวอร์ชันอาร์เคดเป็น 288x224 ดังนั้น Pac-Man clone บน PC จึงไม่มีทางดู “ถูกต้อง” ได้เลย แม้แต่ Pac-Man เวอร์ชัน NES ที่ Namco ทำเองก็ยังไม่พอดี tile ของแผนที่ถูกทำให้เล็กลงจนตัวละครดูใหญ่โต หรือกลายเป็นโลกที่ต้องเลื่อนหน้าจอแบบเวอร์ชัน Game Boy/Tengen หรือไม่ก็ต้องประนีประนอมด้วยความบิดเบี้ยวหรือแผนที่ที่ไม่ใช่ต้นฉบับ ทำให้เวลาจะเล่นเกม “อาร์เคด” ที่บ้านมันดูแปลกและอึดอัด
    พอได้เรียนรู้โครงสร้างของเครื่องและวิธีทำงานของ sprite แล้ว สุดท้ายก็ได้ข้อสรุปว่าไม่มีทางเลือกอื่นจริง ๆ และนั่นเป็นจุดที่ทำให้เข้าใจอย่างลึกซึ้ง ถ้ารวมเรื่องที่ว่า pixel ในความละเอียดนั้นของ PC ไม่ได้เป็นสี่เหลี่ยมจัตุรัสเข้าไปด้วย ก็ยิ่งซับซ้อนขึ้นไปอีก
    หลังจากนั้น ทุกครั้งที่เห็น Pac-Man เวอร์ชันพอร์ตหรือ clone ผมจะดูขนาดโลก ขนาด tile และขนาด sprite ทันที

    • จริง ๆ แล้ว NES คือ 256x240 และใช้ครบทั้ง 240 เส้นของฟิลด์ NTSC แต่ทีวีจำนวนมากตัดส่วนบนล่างออกไปบางส่วน ดังนั้นพื้นที่ “ใช้งานได้” ที่ปลอดภัยบนทีวีส่วนใหญ่จึงเป็น 256x224
      อย่างไรก็ตาม overscan นี้แตกต่างกันไปตามทีวีแต่ละเครื่อง และทีวีสมัยใหม่หรือ emulator มักแสดงครบทั้ง 240 เส้น
      ความละเอียดแนวตั้งของ SNES ตั้งค่าได้เป็น 224 เส้นหรือ 240 เส้นตามที่บทความกล่าวไว้ เกมส่วนใหญ่ใช้ 224 เส้น เพราะทำให้ช่วง vertical blanking ยาวขึ้น จึงมี เวลาส่งกราฟิกไปยัง PPU มากขึ้น
    • ผมรู้สึกมานานแล้วว่าหลายเวอร์ชันพอร์ตดูยืดกว่าเวอร์ชันอาร์เคด แต่ไม่เคยรู้เลยว่าทำไม เวอร์ชันเก่าสำหรับคอมพิวเตอร์ Atari 8-bit หรือหลายเวอร์ชันอย่าง Ms. Pac-Man และ Super Pac-Man ก็เป็นแบบเดียวกัน
  • บทความของ Rodrigo Copetti เกี่ยวกับโครงสร้าง SNES ก็น่าอ่านควบคู่กัน: https://www.copetti.org/writings/consoles/super-nintendo/

  • ที่บอกว่า 59.94Hz เป็นตัวเลขแปลกนั้นถูกต้อง แต่เท่าที่รู้ไม่มี โครงข่ายไฟฟ้า 30Hz อยู่เลย อเมริกาเหนือและบางภูมิภาคที่ NTSC ถูกออกแบบขึ้นใช้งานโครงข่ายไฟฟ้า 60Hz
    https://en.wikipedia.org/wiki/Mains_electricity_by_country

    • เดิมทีในทีวีขาวดำจะเป็น 60 ฟิลด์ต่อวินาที หรือก็คือเฟรม interlace 30 เฟรมต่อวินาที
      ความถี่สูงสุดที่สร้างขึ้นในทีวีขาวดำคืออัตราการสแกนแนวนอน ซึ่งเป็นพหุคูณของอัตราเฟรม เมื่อมีการเพิ่ม สัญญาณสี NTSC ที่ใช้คลื่นพาหะ 3.579545MHz เข้ามา ความถี่สูงสุดภายในทีวีก็สูงขึ้นมาก และเพื่อให้ฮาร์ดแวร์ยังคงเรียบง่าย ความถี่ต่ำ ๆ จึงยังถูกปรับให้เป็นตัวหารของความถี่สูงสุดนั้น หรือก็คือคลื่นพาหะสี ผลลัพธ์คืออัตราเฟรมกลายเป็น 59.94 ฟิลด์ ต่อวินาที
  • ส่วนที่บอกว่าเกมในภูมิภาค PAL ไม่ได้ถูกปรับให้เข้ากับ VSYNC 50.00697891Hz เลยรันช้ากว่ามาตรฐาน 60.098Hz อยู่ 17% นี่โดนใจมาก
    ไม่ใช่เรื่องเฉพาะของ Super Nintendo เท่านั้น แต่มันทำให้นึกถึงตอนที่ได้เห็นหรือเล่น Sonic the Hedgehog บน Mega Drive (Genesis) ครั้งแรก รู้สึกว่ามันหน่วงและช้ากว่าเวอร์ชัน Master System เลยไม่ค่อยประทับใจเท่าไร จนหลังจาก YouTube ดังขึ้นมา ถึงได้รู้ว่า ความต่างของความเร็วระหว่าง NTSC กับ PAL มันมหาศาล ไม่ใช่แค่ความเร็วเกมเท่านั้น เพลงใน PAL ก็ฟังแย่มากด้วย
    ในยุค 16 บิต ผมก็รู้เรื่อง PAL และความจำเป็นของ “กล่องดำ” อยู่แล้ว แต่ไม่รู้ว่าความต่างจะมากขนาดนั้น ตอนนั้นนิตยสารคอนโซลส่วนใหญ่ดูเหมือนจะบอกว่าความต่างในเกมส่วนใหญ่มีน้อย ยกเว้น DooM เวอร์ชัน SNES ที่หน้าจอของเวอร์ชัน NTSC ใหญ่กว่า
    ตอนเด็ก ๆ ผมเล่น Punch-Out เวอร์ชัน NES เก่งมากจนชนะ Mr. Dream หรือ Mike Tyson ได้ในยกแรก แต่คิดตอนนี้ก็คือผมคงเล่นเวอร์ชัน PAL อยู่ ถ้าไปแข่งที่สหรัฐฯ คงโดนอัดเละตั้งแต่ยกแรก และคงมั่นใจว่ามีใครวางกับดักผมแน่ ๆ

    • Super Metroid เป็นเกมที่ทีมพัฒนาปรับแก้ให้เล่นด้วยความเร็วที่ถูกต้องบนคอนโซล PAL ด้วย แต่การปรับแบบนั้นก็ยังสร้างความต่างในการเล่นจริง โดยเฉพาะในสปีดรัน เพราะค่าคงที่ทางฟิสิกส์และจังหวะแอนิเมชันมีความต่างเล็ก ๆ
      ตัวอย่างเช่น ที่เฟรมเรตต่ำกว่า Samus และกระสุนจะเคลื่อนที่ได้หลายพิกเซลขึ้นในหนึ่งเฟรม ทำให้ทะลุวัตถุได้ง่ายขึ้น กลิทช์ประตูนี้จึงทำได้เฉพาะบน PAL: https://www.youtube.com/watch?v=RvyIwtO_qgM
      ค่าคงที่ฟิสิกส์และจังหวะแอนิเมชันของ Samus ถูกปรับให้เข้ากับเฟรมเรตใหม่แล้ว แต่ศัตรู คัตซีน และองค์ประกอบสภาพแวดล้อมอื่น ๆ ไม่ได้ถูกปรับ ดังนั้นใน PAL Samus จะเคลื่อนที่ด้วยความเร็วเท่า NTSC แต่โลกที่เหลือจะเคลื่อนที่ช้ากว่า ด้วยเหตุนี้จึงสามารถเก็บ Bombs แล้วออกจากห้องก่อนประตูล็อกได้ทัน เพื่อข้ามมินิบอส: https://www.youtube.com/watch?v=R3t8TIIj7IM
      การสคิปแบบเดียวกันในเวอร์ชัน NTSC ต้องเตรียมการซับซ้อนและกดอินพุตระดับเฟรมต่อเนื่องกันหลายสิบครั้ง และจนถึงตอนนี้มีเพียงคนเดียวที่ทำสำเร็จ: https://www.youtube.com/watch?v=jcKUMk5g8Wk
      ยังมีการเปรียบเทียบสปีดรันแบบใช้เครื่องมือช่วยที่สั้นที่สุดของ NTSC (ซ้าย) กับ PAL (ขวา): https://www.youtube.com/watch?v=KD_-thqcB5s ทั้งสองรันใช้เส้นทางเดียวกันแทบจนถึงท้ายเกม และเวอร์ชัน NTSC เร็วกว่าในแทบทุกห้อง แต่การเตรียมการเพื่อรันโค้ดตามอำเภอใจต่างกันโดยสิ้นเชิง ทำให้ PAL จบก่อนในที่สุด รัน NTSC ต้องทำลำดับหยุด/ยกเลิกหยุดเกมที่ช้ามาก เพื่อผ่านประตูโดยไม่กระตุ้นให้ประตูทำงาน ออกนอกขอบเขต และทำให้หน่วยความจำเสียหาย ในขณะที่เวอร์ชัน PAL สามารถใช้ race condition ในระบบแอนิเมชันของเกมเพื่อรันโค้ดตามอำเภอใจได้ทั้งที่อยู่ในจอทั้งหมด เป็น race condition ระหว่างตัวจับเวลาการกระเด็นถอยหลังของหนามกับแอนิเมชันลงพื้นของ Samus โดยมีเฉพาะจังหวะของ Samus ที่ถูกแก้สำหรับ PAL แต่หนามไม่ได้แก้ จึงเกิดจังหวะที่นำมาใช้ประโยชน์ได้เฉพาะในบริบทนี้บน PAL
    • ที่ออสเตรเลีย เรารู้เรื่อง ความต่างของไทมิง เพราะนิตยสารอย่าง ‘Hyper’ แต่ก็ทำอะไรไม่ได้ บางทีถ้าไม่รู้แล้วใช้ชีวิตอย่างมีความสุขไปก็คงดีกว่า
      พอ Dreamcast ออกมา ก็เริ่มมีเกมที่สลับระหว่าง 50Hz กับ 60Hz ได้เป็นครั้งแรก ตราบใดที่ทีวีรองรับ และในเกมที่ไม่ได้สะท้อนความต่างนี้อย่างถูกต้อง ก็สามารถสลับกลับไป 50Hz เพื่อทำให้เกมง่ายขึ้นได้ด้วย จำได้ว่า Crazy Taxi ง่ายขึ้นมากที่ 50Hz
    • นี่อาจอธิบายได้ว่าทำไมทุกครั้งที่เล่นเกม SNES บนอีมูเลเตอร์ ไทมิงถึงรู้สึกเพี้ยน ผมโตมากับ เวอร์ชัน PAL ตอนเด็ก ๆ และจนถึงตอนนี้ก็คิดมาตลอดว่าเป็นเพราะความหน่วงของทีวีสมัยใหม่เท่านั้น
    • ผมโตมาในสหรัฐฯ และตกใจมากตอนที่ภายหลังได้ยินเรื่อง ความต่างของความเร็ว ระหว่าง PAL กับเวอร์ชันอเมริกาเป็นครั้งแรก
      มันรู้สึกแปลกที่เกมซึ่งต่างกันขนาดนั้นถูกขายไปทั้งอย่างนั้น แต่ก็เข้าใจเต็มที่ว่าทำไมถึงเลือกแบบนั้น ตอนเด็ก ๆ ผมคิดไปเองว่า Mario ก็คือ Mario เหมือนกันทุกที่ และ Sonic ก็เหมือนกันทุกที่
      สงสัยว่าความต่างแบบนี้จบลงในยุคคอนโซล 3D หรือเปล่า เพราะตั้งแต่นั้นมา การเรนเดอร์กับลอจิกเกมส่วนใหญ่ไม่ได้ผูกติดกันอย่างสมบูรณ์อีกต่อไปแล้ว
  • ดูเหมือนต้นฉบับจะมีพิมพ์ผิด เขียนว่าอัตราส่วนภาพเป็น 8:6 แต่นั่นเท่ากับ 4:3 และจากการคำนวณควรเป็น 8:7

    • ใช่แล้ว อัตราส่วนภาพภายในคือ 8:7 และอีมูเลเตอร์อย่าง Snes9x ก็ใช้ค่านี้เป็นค่าเริ่มต้นด้วย ผมเข้าใจว่าใน CRT ด้วยวิธีการทำงานของมัน พิกเซลสี่เหลี่ยมจัตุรัสที่สมบูรณ์จะถูกบีบให้เป็นสี่เหลี่ยมผืนผ้า ทำให้สุดท้าย แสดงผลใกล้เคียง 4:3
  • เหมือนจะขาดส่วนที่ความละเอียดเอาต์พุต 256x224 หรือ 8:7 ถูกยืดเป็นประมาณ 4:3 หรือถ้าพูดให้แม่นคือภาพ 64:49
    อัตราจุดของ SNES อยู่ที่ประมาณ 5.37MHz ซึ่งช้ากว่าอัตราพิกเซลสี่เหลี่ยมจัตุรัสประมาณ 6.13MHz ที่มาตรฐาน ATSC กำหนด ช้ากว่าอยู่พอดี 8/7 เท่า ดังนั้นพิกเซลจึงถูกยืดแนวนอน 8/7 และความละเอียด 8:7 ก็ถูกยืดเป็น (8/7)(8/7)=64/49 ซึ่งใกล้กับ 64:48=4:3
    การคำนวณที่ว่า “ถ้าจะให้ได้อัตราส่วนภาพใกล้ 4:3 ต้องมีจุดที่มองเห็นได้ 224
    (4/3)=298 จุด” เมื่อคำนึงถึงปัจจัยข้างต้นแล้ว ค่าสัมประสิทธิ์จะกลายเป็น (4/3)/(8/7)=7/6 ดังนั้นต้องมีจุดที่มองเห็นได้ 224*(7/6)=261.33... จุด ซึ่งใกล้กับ 256 ที่เลือกใช้จริงมากกว่าเยอะ

  • ผมต่อกล่องสวิตช์เข้ากับ เอาต์พุต RF เพื่อสลับเลือกระหว่าง SNES กับเสาอากาศทีวี

    • วิธีเดียวที่จะทำให้คุณภาพภาพแย่ลงและเพิ่มสัญญาณรบกวนยิ่งกว่านั้นได้ คือใส่อะแดปเตอร์ ขั้วสกรู UHF แบบ 2 สาย ระหว่างกล่องสวิตช์ RF กับทีวี แน่นอนว่าตอนเด็ก ๆ ผมใช้แบบนั้นเป๊ะกับเครื่องคอนโซลก๊อป Pong สไตล์ยุค 1970s ที่มีอยู่ ซื้อ Atari ของจริงไม่ไหว
      ภายหลังพอเป็นวิศวกรวิดีโอแล้วก็หัวเราะได้ แต่ตอนนั้นเด็กน้อยอย่างผมโชคดีที่ไม่รู้ว่าคุณภาพภาพมันเลวร้ายแค่ไหน
  • อัตราส่วนภาพอาร์ตเวิร์ก 8:7 พบได้ในพอร์ตไปแพลตฟอร์มอื่นของ SFC/SNES อย่าง ROCKMANX3 / Mega Man X3 ด้วย
    เวอร์ชัน PSX/Saturn/PC เลือกคงอาร์ตต้นฉบับไว้โดยไม่ยืด แต่เพิ่มขอบว่างแนวตั้งให้เหมาะกับแต่ละด่านเพื่อปรับ 8:7 ให้เข้ากับ 4:3 เพราะคุ้นกับเวอร์ชันดั้งเดิม พอเล่นแล้วจึงค่อนข้างรู้สึกขัดตา และถ้าดูภาพหน้าจอเวอร์ชัน Saturn จะเห็นได้ว่าทุกอย่างดูผอมเกินไปเล็กน้อย: https://segaretro.org/Mega_Man_X3

  • สงสัยว่า Fabien ใช้เวลานานแค่ไหนในการเขียนบทความแบบนี้ รายละเอียดเยอะมากและจัดระเบียบได้เรียบร้อยดีจริง ๆ

    • คร่าว ๆ ก็หนึ่งวันอาทิตย์ ตั้งแต่ 9 โมงเช้าถึง 3 ทุ่ม
  • สงสัยว่าในความละเอียดของ SNES มีส่วนมากแค่ไหนที่ถูก กำหนดตายตัว ไว้ในฮาร์ดแวร์คอนโซล และมีพื้นที่ให้คาร์ทริดจ์ควบคุมได้มากแค่ไหน
    ตัวอย่างเช่น ถ้าเป็นคาร์ทริดจ์ที่มีโปรเซสเซอร์เสริมของตัวเอง จึงไม่จำเป็นต้องโหลดสไปรต์ และมีสัญญาณนาฬิกาออนบอร์ดด้วย ในทางทฤษฎีจะสามารถส่งออกพิกเซลแนวนอนได้มากกว่า 256 พิกเซลต่อหนึ่งบรรทัดหรือไม่?

    • ผมมองว่าทั้งหมดถูกกำหนดตายตัวไว้ที่ PPU
      ถ้ามีโปรเซสเซอร์เสริม ก็สามารถเรนเดอร์เฟรมเองแล้วใส่ไว้ในตำแหน่งหน่วยความจำที่จะถูกอ่านเป็นไทล์ของบรรทัดถัดไปได้ ดูเหมือนว่า SuperFX ก็ทำประมาณนั้น
      แต่สุดท้ายแล้ว ตัวที่วาดพิกเซลจริง ๆ และจัดการจำนวนสีต่าง ๆ ก็คือ PPU ดังนั้นในท้ายที่สุดก็ยังถูกผูกไว้กับข้อจำกัดของ PPU