Mobile From Advance

16 January 2008

จอที่ให้สีมากกว่า จะต้องดีกว่าหรือเปล่า

จอภาพของ Pocket PC (และ PDA หรือ Smartphone อื่นๆ) เราจะเห็นว่าส่วนใหญ่จะแสดงผลจำนวนสีได้ 65,536 สี และมีบางแบบที่บอกว่าแสดงผลได้ถึง 262,144 หรือมากกว่ากันถึง 4 เท่า


จำนวนสีที่มากกว่า หมายถึงความ "เนียน" คือไล่จากสีหนึ่งไปอีกสีหนึ่งได้เรียบกว่า
สมัยก่อน Pocket PC อย่าง iPAQ รุ่นแรก กับ Jornada รุ่นแรก ใช้จอที่ให้สีเพียง 4,096 สี ซึ่งสมัยนั้น Cassiopeia นำหน้าไปโดยใช้จอ 65,536 สี ซึ่งไล่สีได้เนียนกว่าเห็นๆ และต่อมาได้กลายเป็นมาตรฐานของ Pocket PC ว่าจะต้องใช้จอ 65,536 สี


แล้วถ้างั้น จอ 262,144 สี ก็น่าจะดีกว่าจอ 65,536 สี


ถ้าดูกันแต่ตัวเลขก็ต้องตอบว่า ใช่ครับ แต่ตัวเลขไม่ใช่สาระทั้งหมด เหมือนกับพวกกล้องถ่ายรูปนั่นแหละ ที่ชอบคุยเรื่องความะเอียดกัน แต่สาระจริงๆไมได้อยู่ที่ตัวเลขตรงนี้ทั้งหมดครับ


นักการตลาดเขาหาทางโม้จนได้แหละ มีสาระหรือเปล่า ตัวใครตัวมัน


เรามาดูกันครับ ว่าเราได้อะไรจากตัวเลขเหล่านี้บ้าง และคุ้มกันหรือเปล่า


บทความนี้เรียบเรียงจาก Having More Colors Is A Good Thing, Isn't It? ของ Mike Calligaro ซึ่งเขียนบทความดีๆให้เราได้อ่านมาหลายบทความแล้วครับ


การแสดงผลให้เป็นสีของจอ


มาเริ่มกันที่ตัวเลข 65,536 กันก่อนครับ ตัวเลขนี้คือ 2 ยกกำลัง 16 หรือเรียกว่า เป็นจำนวนเลข 16 บิตนั่นเองครับ เราใช้จำนวนเลข 16 บิตเนี่ย มาแทนสีแต่ละสี


จอภาพที่เป็นสีนั้น แต่ละเม็ดสี (Pixel) จะประกอบด้วยจุดสีย่อย 3 จุดครับ คือจุดสีแดง เขียว และน้ำเงิน หากจุดย่อยๆสามสีนี้เขาเปล่งแสงสว่างเท่าๆกัน เราจะเห็นจุดนั้นเป็นสีขาวจุดเดียว


แต่หากเขาสว่างต่างๆกันไป ก็จะกลายเป็นสีต่างๆให้เราเห็น


Frame Buffer


ในการทำงาน แต่ละเม็ดสีจะมี RAM กำกับอยู่ เราอยากให้เม็ดสีนั้นเป็นสีอะไร เราก็เอาข้อมูล 16 บิตนี้ใส่เข้าไปใน RAM ที่กำกับเม็ดสีนั้น ตรง RAM ส่วนนี้เราเรียกว่า Frame Buffer ครับ (สมัยที่ผมยังใช้คอมพิวเตอร์รุ่นเก่าๆ ตรงนี้เรียกกันว่า Video RAM คือไปเอา RAM ของในเครื่องนี่แหละมาใช้ แต่สมัยนี้เขาใช้ RAM ของ Video Adaptor ครับ)


แต่ละเม็ดสีใช้ข้อมูล 16 บิต หรือ 2 ไบต์ ดังนั้นจอภาพ 240 x 320 เม็ดสี ก็จะใช้ Frame Buffer ขนาด 153,600 ไบต์ หรือเรียกง่ายๆว่า 150 kByte


18 บิต ลงตัวกว่า


ความที่มี 3 จุดย่อย ข้อมูลขนาด 16 บิต ก็จะแบ่งออกเป็นสามส่วน แต่ 16 หาร 3 ไม่ลงตัวนะครับ ดังนั้นเขาจึงแบ่งให้สีแดงไป 5 บิต ให้สีเขียวไป 6 บิต และให้สีน้ำเงอนไป 5 บิตที่เหลือ หรือเรียกวิธีแสดงสีแบบนี้ว่า RGB 565


ไม่ลงตัว นะครับ


ตอนนี้มีผู้ผลิตจอภาพ เขาผลิตจอมาให้แสดงผลแบบ RGB 666 ครับ คือแบ่งลงตัวไปเลย นั่นคือใช้ข้อมุลขนาด 6 x 3 = 18 บิต ซึ่งก็จะแสดงจำนวนสีได้เท่ากับ 2 ยกกำลัง 18 เป็น 262,144 สี


แหม จอ 18 บิต สองแสนสีนี่น่าจะดีนะครับ ไหนจะลงตัว ไหนจะให้สีมากกว่ากันตั้งสี่เท่า


CPU เป็น 32 บิต


แต่ CPU ของ Pocket PC (รวมทั้งอุปกรณ์อื่นๆด้วย) สมัยใหม่นี้จะเป็น CPU ที่ใช้ขนาดข้อมูล 32 บิตครับ ดังนั้นเขาจะแฮปปี้ จัดการกับข้อมูลขนาด 32 บิตได้ดีที่สุด จะเอาไปใช้กับข้อมูลขนาด 16 บิต หรือครึ่งหนึ่ง ก็ยังจัดว่าดี หรือจะเอาไปใช้กับข้อมูลขนาด 8 บิตก็จัดว่าพอใช้ได้


แต่หากเอาไปใช้กับข้อมูลขนาดอื่น จะไม่ค่อยได้เรื่องเท่าไหร่ครับ รวมทั้งเจ้า 18 บิตด้วย


เวลาที่ CPU 32 บิตจะแสดงผลลงใน Frame Buffer ขนาด 16 บิต เขาก็จะโยนลงไปทีละ 2 เม็ดสีได้พอดีครับ แต่พอเป็น 18 บิตแล้ว เม็ดสีแรกก็ยังโอเค แต่เม็ดถัดไปนี่สิไม่ลงตัว ทำให้ CPU จะต้องมาจัดลำดับข้อมูลใหม่ ไม่ได้โยนลงไปตรงๆ


ข้อมูลจะกลับมาตรงพอดีก็เม็ดสีที่ 16 ครับ นั่นคือ 15 เม็ดสีจากทุกๆ 16 เม็ดสี จะต้องเป็นภาระของ CPU ที่มาจัดลำดับให้ใหม่


เป็นภาระที่ผู้ออกแบบไม่ต้องการให้มีครับ และเท่าที่ทราบ ไม่มีระบบปฏิบัติการไหน (ไม่ว่าจะเป็น Windows Mobile, XP, Mac OS, Linux, Palm OS หรือ Symbian) รองรับระบบ 18 บิต หรือ RGB 666 เลย


อ้าว ถ้าอย่างนั้นพวกที่ใช้จอ 262,144 สี เขาทำยังไงล่ะ ในเมื่อมันเป็นจอ 18 บิต


คำตอบคือ จอเขาเป็นจอ 24 บิตครับ แต่ละเม็ดสีจะแบ่งออก 3 ส่วน ส่วนละ 8 บิต หรือเรียกว่า RGB 888


แต่ฮาร์ดแวร์ของจอเอง ยังแสดงผลได้เพียง 18 บิต ดังนั้นพอรับข้อมูล 24 บิตเข้ามา ก็จับโยนทิ้งไป 6 บิต คือโยน 2 บิตสุดท้ายของแต่ละจุดย่อย RGB 888 ออกไป เหลือเพียง RGB 666 ที่เขาแสดงผลได้


เอาล่ะครับ ทีนี้หากเราเป็นผู้ผลิต Pocket PC เราอยากใช้จอ 18 บิต ซึ่งก็คือจอที่ใช้ข้อมูล 24 บิต แต่เราใช้ CPU 32 บิต เราจะจัดลำดับข้อมูลยังไงดี


มีสองวิธีครับคือ


วิธีแรกคือ โยนข้อมูลเข้าไปเลยทีละ 32 บิต แต่ให้จอจับโยนทิ้งไป 6 บิต ไปใช้จริงแค่ 24 บิตเอาเอง วิธีนี้ CPU ไม่ต้องทำอะไรเพิ่มมาก เพราะทำงานทีละ 32 บิตพอดี


แต่วิธีนี้ต้องใช้ Frame Buffer บานตะไทครับ คือหากเป็น 240 x 320 Pixel ก็ต้องปาเข้าไป 300 kByte


อีกวิธีหนึ่งคือ CPU จัดเรียงใหม่ให้ลง 24 บิตต่อๆกัน ซึ่ง 24 กับ 32 จะลงตัวกันทุกๆ 4 เม็ดสีครับ ซึ่งแม้จะเป็นภาระมากกว่าวิธีแรก แต่ก็ยังดีกว่าให้มาลงตัวกันทุกๆ 16 เม็ดสีอย่างของ 18 บิตชนิดคนละเรื่องเลย


และวิธีนี้ทำให้ใช้ Frame Buffer ขนาด 24 บิต ซึ่งเล็กกว่า 32 บิต คือมีขนาด 225 kByte ครับ


ผลสุดท้ายก็คือ


ไม่ว่าจะใช้ Frame Buffer ขนาด 300 k หรือ 225 k ทั้งคู่เป็นต้องโดนจอที่แสดงผลได้จริง 18 บิต โยนข้อมูลทิ้งทั้งนั้น ต่างกันที่จะโยนทิ้งมากหรือน้อย


Frame Buffer ที่ใหญ่กว่าเดิม 50% หรือ 100% นี้ ก็จะต้องกินไฟ และใช้เวลาในการ Refresh มากขึ้นกว่าเดิม ทำให้เวลาไปใช้กับภาพเคลื่อนไหว เช่นดูวิดิโอ หรือเล่นเกมได้ช้าลง หรือเล่นไมได้เอาครับ


เกมรุ่นเก่าๆที่พัฒนาด้วย Game API จะทำงานช้าลงหรือเล่นไมได้เลย ส่วนเกมรุ่นใหม่ๆที่พัฒนาด้วย DirectDraw ยังเล่นได้ แต่จะต้องช้าลงแน่ๆครับ


เอาล่ะครับ ยังไงๆจอสองแสนสีต้องช้ากว่าจอหกหมื่นสีอยู่แล้ว ว่างั้นเถอะ ถ้ายังงั้น เรามาดูกันว่า ภาพจากจอสองแสนสี จะสวยคุ้มกับที่มันช้าลงหรือเปล่า


มีโปรแกรมสำหรับแสดงความแตกต่างนี้ครับ Download ได้ที่นี่ แต่โปรแกรมนี้จะใช้กับเครื่องคอมพิวเตอร์ (ไม่ได้ใช้กับ Pocket PC นะครับ) ที่ใช้ .NET Frame Work 2.0 ด้วยนะครับ


โปรแกรมนี้จะแสดงให้เห็นชัดๆเลยว่า ภาพ 18 บิต ดีกว่า 16 บิตนิดหนึ่ง แต่ภาพ 24 บิตจะเห็นว่าดีกว่า 16 บิตอย่างชัดเจน


ที่เราเห็นภาพแตกต่างกันได้ ก็เพราะจอคอมพิวเตอร์ของเราแสดงจำนวนสี 24 บิตได้นะครับ


ก็ลองพิจารณาดูครับ ว่าจะคุ้มกับสิ่งที่เราต้องแลกมาหรือเปล่า


แต่ในอนาคตสิ่งที่เราคาดหวังได้เลยก็คือ


จอภาพที่แสดงจำนวนสีได้ 24 บิตจริงๆ และ


CPU ที่เร็วพอจะทำให้ภาระของ 24 บิต ไม่มีผลต่อความเร็วในการแสดงผล ซึ่งในวันนี้ CPU ของคอมพิวเตอร์ได้มาถึงจุดนี้แล้ว แต่ CPU ของ Pocket PC (ซึ่งเป็นอุปกรณ์พกพาที่มีสมรรถนะสูงที่สุดแล้วนะครับ พวกที่ใช้ OS อื่นยิ่งไม่ต้องพูดถึง) ยังไม่ถึงจุดนี้


ก็คือต้องรออนาคตอีกหน่อย


สำหรับในปัจจุบัน เป็นไปได้ว่าเราจะได้ใช้ Pocket PC ที่แสดงผล 18 บิตโดยไม่เสียความเร็ว, คือภาพสวยด้วย และยังไม่ช้าด้วย, โดยผู้ผลิตอาจออกแบบ Controller ที่รับข้อมูล 16 บิต มาเกลี่ยสีเข้าไปให้เป็น 18 บิต แล้วส่งให้จอ


แต่ข่าวร้ายคือ ยังไม่มีผู้ผลิตรายไหนที่ใช้เทคนิคนี้ และจากแนวโน้มการพัฒนา จะเห็นว่าแนวทางของจอ 24 บิตจริงๆ กับ CPU ที่เร็วขึ้น น่าจะเป็นทางเลือกที่ดีกว่า


นั่นคือ จอที่ให้สีมากกว่านั้น ดีกว่าแน่


แต่ยังไม่ใช่สำหรับวันนี้ครับ

No comments: