2 คะแนน โดย GN⁺ 2025-05-19 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความนี้อธิบายเทคนิคแสงแบบอิงพาเลตและการทำ normal mapping ที่นำไปใช้ระหว่างการพัฒนาเดโมสำหรับ Nintendo 64
  • แทนที่จะ คำนวณแสงลงบนเท็กซ์เจอร์โดยตรงแบบทันที บทความนี้แนะนำวิธีสร้างเอฟเฟกต์แสงให้ทั้งเท็กซ์เจอร์ด้วยการเปลี่ยนเฉพาะพาเลต
  • ใช้เทคนิคเพิ่มประสิทธิภาพหลายอย่าง เช่น การบีบอัดพาเลต diffuse/normal และ normal mapping ใน object space
  • วิธีนี้มีประสิทธิภาพเฉพาะกับ แสงแบบมีทิศทาง และมีข้อเสียอย่าง ความไม่ต่อเนื่องของการแรเงา
  • ในเดโม มีการผสมผสานองค์ประกอบหลายอย่างอย่างสร้างสรรค์ เช่น แสงสะท้อน/แสงตรง/แสงแวดล้อม เพื่อสร้างภาพที่น่าประทับใจภายใต้ข้อจำกัดของ N64

บทนำและเป้าหมาย

  • บทความนี้เป็นภาคต่อของ เธรด ที่เริ่มบน Bluesky โดยแบ่งปันเทคนิคแสงขั้นสูงที่ใช้ในเดโมสำหรับ Nintendo 64 (Revision 2025)
  • เดโมมีเอฟเฟกต์หลากหลาย เช่น normal mapping พร้อมแสงสะท้อน และแสงสะท้อนแบบเรียลไทม์ โดยเพลงแต่งโดย noby และ Moloko เล่นกีตาร์

ความเป็นไปได้ของ normal mapping บน Nintendo 64

  • ผู้เขียนตรวจสอบความเป็นไปได้ในการทำ normal mapping บน N64 โดยอ้างอิงการทดลองของนักพัฒนาโฮมบรูอย่าง WadeTyhon และ Spooky Iluha
  • วิธีพื้นฐานคือ ให้ CPU คำนวณแสงลงบนเท็กซ์เจอร์โดยตรงขณะรันไทม์
  • แม้จะสามารถรันโค้ดแรเงาแบบกำหนดเองด้วย CPU ได้โดยไม่ต้องพึ่งการรองรับจากฮาร์ดแวร์ แต่ปัญหาใหญ่คือความเร็วที่ลดลงมาก

การแรเงาแบบอิงพาเลต

  • แทนที่จะใช้การแรเงาใน texture space โดยตรง หากอัปเดตเฉพาะข้อมูลพาเลตของ เท็กซ์เจอร์แบบพาเลต ทั้งเท็กซ์เจอร์ก็จะสะท้อนการเปลี่ยนแปลงความสว่างแบบเรียลไทม์
  • N64 ใช้งานเท็กซ์เจอร์แบบพาเลตกันทั่วไป จึงนำวิธีนี้ไปใช้ได้ง่าย
  • เพียงอัปเดตพาเลต ก็จะเกิดผลลัพธ์ราวกับมีการคำนวณแสงจริงกับแต่ละ texel ในทันที
  • แนวทางคือแทนที่พาเลตเดิมด้วยพาเลตที่ผ่านการแรเงา แล้วแมปเท็กซ์เจอร์แบบพาเลตเดิมลงบนวัตถุเป็นเท็กซ์เจอร์ปกติ
  • แม้ใช้เพียงแสงแบบ diffuse (dot(N,L)) ก็ให้ผลลัพธ์ที่ดีมากแล้ว

normal mapping ใน object space

  • โดยทั่วไป normal mapping มักทำใน tangent space ซึ่งเหมาะกับการรองรับเท็กซ์เจอร์แบบทำซ้ำและการแก้ผิวอย่างเป็นธรรมชาติ
  • ส่วน normal map แบบ object space ทำให้แต่ละ texel มีข้อมูล surface normal ที่แม่นยำ จึงคำนวณง่ายกว่า แต่ใช้งานกับเท็กซ์เจอร์แบบทำซ้ำได้ยาก
  • แม้จะบีบอัด normal map ความละเอียดสูงลงเป็นพาเลต 32 สี ก็ยังรักษาคุณลักษณะใกล้เคียงต้นฉบับได้

การออกแบบพาเลตร่วมสำหรับ diffuse และ normal

  • วัตถุมีทั้ง diffuse texture (basecolor * ao) และ normal map
  • ทั้งสองเท็กซ์เจอร์ถูกจัดให้ใช้ดัชนีพาเลตชุดเดียวกันที่สร้างด้วย อัลกอริทึมจัดกลุ่ม K-means
  • กระบวนการจัดกลุ่มจะมองภาพเป็นภาพ 6 แชนเนล
  • ในตัวอย่าง มีการบีบอัด RGB diffuse + normal map ลงเป็นพาเลต 16 สี ทำให้ข้อมูลภาพต้องบันทึกเพียง 4bpp
  • ตอนแรเงา ระบบจะใช้ดัชนีของแต่ละสีในพาเลตเพื่อดึงข้อมูล normal และสีผิว แล้วสร้างค่าสี RGB ใหม่
  • วิธีนี้รองรับได้ดีเฉพาะแสงแบบมีทิศทาง และทำเงาด้วยพาเลตเพียงอย่างเดียวได้ยาก

แสงแวดล้อม/แสงอาทิตย์แบบมีทิศทางที่ bake ไว้

  • เพื่อให้ได้ แสงที่สมจริง บนตัวอาคาร ผู้เขียนใช้ RGB ของ vertex color และช่อง alpha สำหรับแสงแวดล้อมกับแสงอาทิตย์ตามลำดับ

  • แสงแวดล้อม (ambient) แยกเป็น ความเข้มเชิงทิศทาง (environment map แบบ grayscale) และสี (RGB ที่เพิ่มความอิ่มสี)

  • แสงอาทิตย์ (direct) ถูกส่งผ่าน vertex alpha

  • สูตรแสงพื้นฐานมีดังนี้

    ambient = vertex_rgb      * grey_irradiance_map(N) 
    direct  = vertex_alpha    * sun_color * dot(N, sun_dir)
    color   = diffuse_texture * (ambient + direct)
    
  • แต่ละพจน์จะถูกรวมกันเป็นสีสุดท้าย

  • แสงแวดล้อมแบบมีทิศทางช่วยสร้างเอฟเฟกต์แสงธรรมชาติที่อิ่มแน่น และแม้จะอิงพาเลต ก็ยังให้พื้นผิวคุณภาพสูง

  • เพื่อความเรียบง่าย environment map ใช้การฉายแบบ equirectangular projection

การแรเงาโมเดลขนาดใหญ่ที่ใช้เท็กซ์เจอร์แบบทำซ้ำ

  • อัลกอริทึมแรกเริ่มออกแบบมาสำหรับวัตถุเดี่ยว แต่เมชปราสาทขนาดใหญ่มีปัญหาเพราะใช้เท็กซ์เจอร์แบบทำซ้ำ
  • เพื่อแก้ปัญหา ผู้เขียนใช้ Blender แยกเมชออกเป็นซับเมชตามทิศทางพื้นผิว/วัสดุแต่ละแบบ
  • จากนั้นคอมพิวเตอร์จะคำนวณเมทริกซ์ world-to-model ให้แต่ละกลุ่มโดยใช้ polygon normal (เป็น tangent space แบบประมาณค่า)
  • แต่ละกลุ่มใช้พาเลตร่วมกันหนึ่งชุด จึงรับประกันคุณภาพแสงโดยเฉลี่ยของทั้งฉาก
  • ข้อเสียคือไม่มีการอินเตอร์โพเลต tangent space ระหว่างรันไทม์ จึงเกิดลักษณะแสงแบบ เป็นเหลี่ยมตามหน้าโพลิกอน

การแรเงาแบบ specular

  • เนื่องจากหลายจุดบนพื้นผิวใช้สีพาเลตเดียวกันร่วมกัน จึงไม่สามารถทำการแรเงาแบบ point light/specular ที่แม่นยำได้
  • เทคนิคในพาเลตสเปซมีประสิทธิภาพเฉพาะกับ แสง diffuse แบบมีทิศทาง
  • ถึงอย่างนั้น ผู้เขียนก็ฝืนทำเอฟเฟกต์แสงสะท้อนแบบ specular โดยสมมติให้วัตถุเป็นทรงกลม และประมาณแต่ละจุดเป็น p = radius * normal
  • ผลลัพธ์อาจดูไม่ต่อเนื่องบ้าง แต่ระหว่างเล่นจริงกลับให้ความรู้สึกเป็นธรรมชาติพอสมควร

ข้อจำกัดและอนาคต

  • ในเดโม ผู้เขียนพยายามซ่อนข้อจำกัดอย่าง ความไม่ต่อเนื่องของการแรเงา, รองรับเฉพาะเท็กซ์เจอร์ขาวดำ, และไม่รองรับ point light ให้มากที่สุด

  • จำเป็นต้องมี elaborate preprocessing (การประมวลผลล่วงหน้าที่ซับซ้อน)

  • วิธีที่รองรับทั้งแสง ambient/direct โดยไม่มีความไม่ต่อเนื่องของการแรเงายังคงเป็นโจทย์ท้าทาย

  • ผู้เขียนย้ำว่าผลการทดลองนี้เปิดโอกาสและแนวคิดใหม่ ๆ ที่น่าสนใจ

  • มีการเผยแพร่ ไฟล์ PAL-compatible N64 ROM ด้วย แต่ยังไม่เสถียรและล่มบ่อย

อื่น ๆ

  • ผู้เขียนกำลังพิจารณาเขียนหนังสือด้วย และหากสนใจสามารถติดตามข่าวสารได้ที่ ที่นี่

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

 
GN⁺ 2025-05-19
ความคิดเห็นจาก Hacker News
  • มีความเห็นว่าการได้เห็นกราฟิกที่ดู "สมจริง" บน N64 เป็นประสบการณ์ที่น่าประทับใจมาก และเดโมนี้ก็ให้ความรู้สึกชวนให้นึกถึง "ICO" บน PS2 พร้อมทั้งสงสัยว่าเป็นไปได้ไหมที่จะสร้าง SDK ที่ช่วยแอบสแตรกต์ฮาร์ดแวร์กราฟิกของ N64 และมอบเครื่องมือสมัยใหม่อย่าง primitive, lighting, shading และ baked lighting โดยกล่าวถึงด้วยว่าฮาร์ดแวร์ของ N64 มีโครงสร้างเฉพาะตัวแบบคนละยุค และให้ลิงก์ข้อมูลฮาร์ดแวร์แบบละเอียด

    • มีการกล่าวถึงว่า N64 ถูกออกแบบโดย SGI และ SGI มีอิทธิพลต่อกราฟิก 3D มากเพียงใด จึงคาดว่า N64 อาจกลับเป็นฮาร์ดแวร์ที่มีความเป็นมาตรฐานที่สุดของเจเนอเรชันนั้นด้วยซ้ำ และถ้าไม่มีไลบรารี OpenGL ก็น่าจะน่าแปลกใจมาก ข้อเสียคือควรมองคอนโซลนี้เหมือนการเอา CPU ไปติดกับกราฟิกการ์ด และระบบกราฟิกถูกเปิดเผยออกมาอย่างตรงไปตรงมา สถาปัตยกรรมชิปกราฟิกแต่ละเจ้าก็เข้ากันไม่ได้ ผู้ผลิตจึงมักหลีกเลี่ยงการเปิดเผยโครงสร้างภายในแบบนี้และให้เพียง API (เช่น OpenGL, DirectX) เพื่อเปิดทางให้เกิดการออกแบบอย่างสร้างสรรค์ แต่การเข้าถึงฮาร์ดแวร์โดยตรงนั้นยากมาก พร้อมเสริมข้อมูลว่า OpenGL มีต้นกำเนิดจาก SGI และ nvidia ก็ถูกก่อตั้งโดยคนที่มาจาก SGI

    • มีการพูดถึง "Shadow of the Colossus..." พร้อมแชร์ลิงก์ YouTube ที่เกี่ยวข้อง

  • มีคนบอกว่าชอบที่บทความต้นทางเกี่ยวกับเทคนิคกราฟิกของ N64 ปิดท้ายด้วยคำถามว่า "นี่คืออนาคตหรือเปล่า?"

    • มีการอธิบายว่าตอนนี้วงการอินดี้พัฒนาเกมบน N64 กำลังคึกคักอย่างมาก เกมดังหลายสิบเกมถูก decompile จนเผยแพร่เป็นซอร์สโค้ด ทำให้พอร์ตลง PC ได้ง่ายขึ้น และยังมีม็อดหลายแบบที่รันบนฮาร์ดแวร์จริงได้ด้วย มีทั้งแฟนรีเมกของ Zelda และเกมสมบูรณ์ที่มีดันเจียนกับเนื้อเรื่องใหม่ ชุมชน Mario 64 ก็เคลื่อนไหวมากในด้านการปรับแต่งเชิงเทคนิค Kaze ก็พัฒนาเอนจินของตัวเองและสร้างภาคต่อขึ้นมาเอง มีการแนะนำวิดีโอเชิงลึกด้านเทคนิคด้วย รวมถึงเดโมสุดพิสดารอย่าง Portal และเรื่องที่ Valve ถึงกับให้ความสนใจทางกฎหมาย หลังจากผลงานที่ไม่เคยวางขายของ Rare อย่าง Dinosaur Planet หลุดออกมา ก็มีการ decompile และฟื้นฟูมันขึ้นใหม่ ก่อนจะกลับมาเฟื่องฟูอีกครั้งในวงการอินดี้ ทั้งหมดนี้ถูกเล่าอย่างมีชีวิตชีวาพร้อมลิงก์รายละเอียดมากมาย
  • มีการแสดงความทึ่งในอัจฉริยภาพของวิศวกรเกมที่คิดวิธีแก้ปัญหาอย่างสร้างสรรค์บนฮาร์ดแวร์ที่มีข้อจำกัด

    • มีการแบ่งปันหลักการว่าความคิดสร้างสรรค์ระดับสูงสุดมักเกิดขึ้นเมื่อมีข้อจำกัด และนั่นคือเคล็ดลับของ pico8, Animal Well และเกมน่าประทับใจอีกหลายเกม พร้อมบ่นเสียดายว่าช่วงสุดสัปดาห์นี้ตัวเองเพิ่งนึกไอเดียใหญ่เพื่อปรับปรุงสถาปัตยกรรมของ 2d-pixel-art-game-maker-maker ที่ทำอยู่ จนดูเหมือนการเปิดตัวจะต้องเลื่อนออกไปอีกหนึ่งเดือน

    • มีการชี้ว่าของที่นำมาเล่าในครั้งนี้ไม่ใช่ผลงานจากยุครุ่งเรืองของ N64 แต่เป็นงานใหม่ที่เพิ่งทำขึ้นไม่นานนี้

    • มีการย้ำว่าไม่ใช่ผลงานของนักพัฒนา N64 ในยุคนั้น แต่เป็นเทคโนโลยีใหม่ที่เกี่ยวข้องกับ demoscene ในปี 2025

  • มีการรำลึกว่าทุกวันนี้ระบบเร็วกว่าย่อมดีก็จริง แต่ความสนุกของการเอาชนะข้อจำกัดในเกมยุคก่อน และความพอใจเมื่อทำมันสำเร็จนั้นพิเศษมาก พร้อมอธิบายว่าใครที่เล่น Hacker News น่าจะคุ้นกับแนวคิดอย่าง 'raster interrupts' และ 'racing the beam' จากนั้นเล่าเกร็ดว่าบน Atari 800 เคยใช้เทคนิคพวกนี้ทำสิ่งที่เดิมทำไม่ได้ให้เกิดขึ้นจริง เพิ่งมารู้ในช่วงหลังว่าหลายเกมบน Atari 2600 ก็ได้รับอิทธิพลจากวิธีบ้าระห่ำแบบนี้มาก พร้อมแชร์วิดีโอ YouTube และปิดท้ายด้วยความมั่นใจว่าต่อให้พัฒนาการฮาร์ดแวร์จะหยุดลงในอนาคต เราก็ยังค้นพบลูกเล่นใหม่ ๆ ที่น่าสนใจได้ต่อไปอีกหลายสิบปี

  • มีคนย้อนความว่าในยุค 90 เคยใช้เทคนิค lighting แบบอิงพาเลตต์ในเกม shareware ของตัวเอง โดยจัดพาเลตต์ VGA 256 สีให้แต่ละสีมีการไล่ระดับความมืดสว่างไว้ล่วงหน้า ทำให้สามารถเพิ่มหรือลดดัชนีสีเพื่อสร้างเอฟเฟกต์ความสว่างได้อย่างง่ายดาย

  • มีความเห็นว่าวงการ demoscene และงานลักษณะนี้น่าทึ่งมาก แต่ก็มักโน้มไปทางฉากที่เรียบง่ายและโล่งเสียเป็นส่วนใหญ่ พร้อมวิเคราะห์ว่าเทคนิคเหล่านี้มักเหมาะกับฉากหลังหรือฟีเจอร์เกมที่จำกัดมากกว่า ในทางกลับกัน งานอย่าง FastDoom หรือโปรเจกต์ปรับแต่ง Mario-64 ที่รีดประสิทธิภาพจากฮาร์ดแวร์เก่าได้มากขึ้นและยังเพิ่มคอนเทนต์กับฟีเจอร์เข้าไปอีก กลับน่าประทับใจกว่ามาก และอาจมีความเชื่อมโยงบางอย่างระหว่าง demoscene กับโปรเจกต์ที่สมบูรณ์แบบกว่าเหล่านี้

  • มีการบอกว่าคิดถึงเทคนิคการปรับแต่งประสิทธิภาพในยุค PS1 และ PS2 โดยรู้สึกว่าแม้อัปสเกลผ่านอีมูเลชันเป็น 1080p หรือ 4k ขึ้นไป ภาพก็ยังดูดีมาก มองว่ากราฟิกของ Halo 2 ระดับ 4k ก็เพียงพอแล้ว และยกตัวอย่างเดโมเอฟเฟกต์ 'คลื่นความร้อน' ที่ทำขึ้นจริงใน GT3 พร้อมอ้างคำพูดผู้สร้างที่บอกว่าบน PS3 จะทำแบบนั้นได้ไม่เร็วเท่า PS2 ไม่ใช่เอฟเฟกต์คลื่นความร้อนสมจริงแบบ UE5 ทุกวันนี้ แต่เป็นลูกเล่นที่กินประสิทธิภาพน้อยซึ่งกลับดูดีกว่าเสียอีก เจ้าตัวยังบอกว่าถ้าต้องเจอเฟรมเรตตกเพราะ RTX ก็ขอใช้เทคนิคแบบเก่าดีกว่า พร้อมไล่รายชื่อเกมมหาศาลที่รันอยู่บน CPU MIPS 299MHz ได้อย่าง Shadow of the Colossus, GoW2, FFXII, GT4, Black, Valkyrie Profile 2, Rouge Galaxy, Burnout 3, Jak and Daxter, Ratchet รวมถึง RE4, Metroid และ Zelda บน GameCube ก่อนปิดท้ายด้วยความทึ่งและความเคารพต่อฝีมือของนักพัฒนาเกมสายดั้งเดิม

    • มีคนชี้ว่าวิดีโอ GoW2 นั้นจับภาพมาจากอีมูเลเตอร์ PCSX2 และน่าจะมีทั้งการอัปสเกลกับเอฟเฟกต์เสริมอื่น ๆ อยู่ด้วย ถึงอย่างนั้นก็ยังมองว่า GoW2 บน PS2 เป็นความสำเร็จอันยิ่งใหญ่มาก

    • มีความเห็นว่าในส่วนของ PS2 นั้นเห็นด้วย แต่ PS1 ประสิทธิภาพไม่ได้เด่นขนาดนั้น โดยมองว่า PSX มีพลังประมาณ Pentium 90~100 แต่ถ้าเป็น Pentium รุ่น MMX จับคู่กับ 3DFX ก็จะใกล้เคียงหรืออาจเหนือกว่า N64 พร้อมยก PSP, SGI Irix และ PS2 เป็นตัวอย่างของ CPU MIPS ที่ให้ประสิทธิภาพดีมากที่ความถี่ต่ำ และอธิบายว่า GPU ของ PS2 แยกจาก CPU R4k พร้อมแชร์ประสบการณ์ตรงว่า Deus Ex เวอร์ชัน PS2 ด้อยกว่าเวอร์ชัน PC และไม่สามารถรองรับ Unreal Engine ได้เต็มที่ แม้ PS2 จะมีเอฟเฟกต์พิเศษน่าทึ่ง แต่ในพอร์ตอย่าง Deus Ex ก็ต้องแลกด้วยขนาดแผนที่ที่เล็กมาก

    • มีคนยืนยันความเห็นส่วนตัวว่ากราฟิกของ Halo 3 ดูดีกว่าเกมสมัยใหม่หลายเกมเสียอีก โดยมองว่าเอฟเฟกต์อย่าง blur, bloom รวมถึงหญ้าหรือใบไม้ที่กระเด็นไปมา เป็นสิ่งที่ถูกเพิ่มเข้ามาแล้วกลับทำให้ประสบการณ์ภาพแย่ลง สำหรับเกม FPS ที่เล่นกันเร็ว ๆ จำนวนโพลิกอนเล็กน้อยแทบไม่มีความหมาย และความละเอียดเท็กซ์เจอร์ก็แค่พอใช้ได้ก็พอ สิ่งที่รู้สึกได้จริงมีแต่ความต้องการฮาร์ดแวร์ที่สูงขึ้นเท่านั้น ตามประสบการณ์ของตนเอง