คณิตศาสตร์ในงานคอมพิวเตอร์กราฟิกส์เพื่อแสดงพื้นผิว 3 มิติ

บทความนี้เขียนโดย อ.ดร. ธนาสัย สุคนธ์พันธุ์ เผยแพร่ครั้งแรก ที่นี่ เมื่อ 4 มกราคม 2015 โดยคอลัมน์ Intelligence and Information ของ Manager Online


นอกจากการแสดงผลของภาพวาดและภาพถ่ายที่เป็น 2 มิติ แล้ว ความสามารถที่สำคัญอีกอย่างของ คอมพิวเตอร์กราฟิกส์ ก็คือการแสดงภาพของวัตถุ 3 มิติ ที่เรามักเห็น ในเกมส์ หรือในภาพยนตร์แอนิเมชั่น ในปัจจุบัน ตามตัวอย่างในรูปที่ 1

1

รูปที่ 1 การแสดงภาพของวัตถุ 3 มิติ ในเกมส์และภาพยนตร์แอนิเมชั่น (ที่มา: EA Sports และ Disney/Pixar)

นักพัฒนาทางด้านคอมพิวเตอร์กราฟิกส์ จึงได้คิดค้นวิธีการแสดงพื้นผิว 3 มิติขึ้นมา ซึ่งวิธีที่นิยมนั้นก็คือการใช้ Polygon สามมิติ เนื่องจากความคล่องตัว และง่ายต่อการแสดงผล ซึ่ง Polygon นั้นก็คือ พื้นผิวราบรูปทรงต่างๆ โดยรูปทรงที่นิยมที่สุดก็คือ สามเหลี่ยม เนื่องจากความง่ายต่อการใช้งานของสามเหลี่ยมนั้นเอง โดยที่วัตถุ 3 มิติใดๆ ก็ตาม สามารถสร้างได้จาก การนำสามเหลี่ยมหลายๆอันมาต่อกันเป็นรูปทรงตามที่ต้องการ ตามตัวอย่างในรูปที่ 2

Dolphin_triangle_meshรูปที่ 2 ตัวอย่าง Polygon ที่เป็น สามเหลี่ยม หลายๆอันมาต่อกันเพื่อให้ได้เป็นรูปทรงตามที่ต้องการ (ที่มา: en.wikipedia.org/wiki/Polygon_mesh)

การแสดงพื้นผิวสามเหลี่ยมสามมิตินั้น ก็คือการลงสี (การกำหนดค่าของ R,G,B: สีแดง สีเขียว และสีน้ำเงิน) ในแต่ละ Pixel ภายในสามเหลี่ยมแต่ละอัน ให้เหมาะสมกับสีและสภาพพื้นผิวของวัสดุ โดยวิธีการลงสีในระบบคอมพิวเตอร์กราฟิกส์ นั้นก็จำลองมาจากการสะท้อนของแสง (Reflection) ของวัตถุในธรรมชาติ ซึ่งทำได้โดยการใช้สมการคณิตศาสตร์ในการคำนวณการสะท้อนของแสง หลักการคำนวณแสงสะท้อนจะใช้ ทิศทางการหันของสามเหลี่ยม และ แหล่งกำเนิดแสง (เช่น ดวงอาทิตย์) ที่มีในฉาก เป็นสำคัญ

หลักการคำนวณแสงสะท้อนที่นิยมนั้น มีชื่อว่า Phong reflection model (ที่พัฒนาโดย Bùi Tường Phong ซึ่งเป็นคนเวียดนาม ที่ไปศึกษาต่อระดับปริญญาเอก ณ University of Utah สหรัฐอเมริกา) ซึ่งเป็นการแยกการสะท้อนของแสงบนวัตถุออกเป็น 3 ชนิด ได้แก่ แสงล้อมรอบ (Ambient), แสงพร่า (Diffuse), และ แสงสะท้อนผิวเงา (Specular) โดยเราสามารถคำนวณแสงสะท้อนในแต่ละชนิดแยกจากกัน แล้วจึงรวมแสงสะท้อนเหล่านี้เข้าด้วยกัน ก็จะได้แสงสะท้อนของวัตถุที่สมจริง ดังที่แสดงในรูปที่ 3

phong

รูปที่ 3 องค์ประกอบหลักของ Phong reflection model โดยในรูปนี้ แหล่งกำเนิดแสงจะอยู่ที่ด้านขวาของวัตถุ (ที่มา: en.wikipedia.org/wiki/Phong_reflection_model)

โดยแสงสะท้อนที่คำนวณง่ายที่สุด คือ แสงล้อมรอบ (Ambient) เนื่องจาก มันคือการประมาณแสงโดยรอบของวัตถุคร่าวๆ โดยไม่ขึ้นกับทิศทางของแหล่งกำเนิดแสงเลย ฉะนั้นแสงสะท้อนชนิดนี้ สามารถสร้างโดยการใส่สีที่ต้องการลงไปที่วัตถุได้โดยตรง

แสงพร่า (Diffuse) คือแสงที่กระจายออกจากพื้นผิววัตถุเมื่อแสงไฟจากแหล่งกำเนิดแสงตกสะท้อน เช่น เมื่อแสงสีขาวตกสะท้อนที่โต๊ะผิวเรียบสีแดง แสงก็จะสะท้อนออกจากพื้นผิวโต๊ะเป็นสีแดง โดยแสงสะท้อนจะแดงมากแดงน้อย ก็ขึ้นกับวัสดุของพื้นผิว และมุมที่แสงตกกระทบบนพื้นผิว ตัวอย่างเช่น ถ้าวัสดุเป็นไม้แสงสะท้อนก็จะน้อยกว่าวัสดุที่เป็นโลหะเป็นต้น ส่วนถ้าโต๊ะนั้นหันออกจากต้นกำเนิดแสง แสงสะท้อนก็จะน้อยกว่าโต๊ะที่หันเข้าหาต้นกำเนิดแสงตรงๆ โดยตัวอย่างในรูปที่ 3 ในส่วนของแสงสะท้อนชนิด Diffuse นั้นจะเห็นได้ว่า พื้นผิว ในส่วนที่หันเข้าหาแหล่งกำเนิดแสง จะสว่างกว่า พื้นผิว ในส่วนที่หันออกจากแหล่งกำเนิดแสง

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

spec

รูปที่ 4 แสดงความแตกต่างของแสงสะท้อนแบบผิวเงาตามชนิดของวัสดุ โดย วัสดดุซ้ายสุดเป็นวัสดุที่หยาบที่สุด และ วัสดุขวาสุดเป็นวัสดุที่เกลี้ยงเกลาที่สุด (ที่มา: http://www.luxrender.net/wiki/User:Projekt-43)

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

rt

รูปที่ 5 การแสดงพื้นผิว ด้วยเทคนิค Ray Tracing (ที่มา: www.mikeychen.net/cuda-ray-tracer)

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

หากท่านใดสนใจอ่านรายละเอียดในเชิงเทคนิคของบทความนี้อย่างละเอียดลึกซึ้งขึ้นสามารถติดตามได้จาก “คณิตศาสตร์กับเทคโนโลยีในการสร้างงานศิลปะ” ใน วารสาร คณิตศาสตร์ ของ สมาคมคณิตศาสตร์แห่งประเทศไทย ปี 2558