ตอนที่ 14: Translation Matrix: เวทมนตร์ย้ายมวลสาร และการตื่นขึ้นของมิติที่ 4

1. 🎯 ตอนที่ 14: Translation Matrix: การย้ายมวลสาร
2. 📖 เปิดฉาก (The Hook)
สวัสดีครับนักสร้างโลกจินตนาการทุกคน! กลับมาเปิดโรงงานผลิตภาพกันต่อในซีรีส์ ปูพื้นฐานคณิตศาสตร์สู่โลกคอมพิวเตอร์กราฟิก ครับ
ในตอนที่แล้ว เราได้รู้จักกับคัมภีร์เวทมนตร์อย่าง Matrix ที่สามารถแปลงรูปร่างเรขาคณิต (Transformation) ได้อย่างน่าทึ่ง แต่เชื่อไหมครับว่า ถ้าเราใช้แค่ตารางตัวเลขขนาด $3 \times 3$ ทั่วไป เราจะสามารถสั่งให้โมเดล 3 มิติของเรา หมุนตีลังกา (Rotation) หรือย่อขยายขนาด (Scale) ได้อย่างอิสระ… แต่เราจะไม่สามารถสั่งให้มัน “เดินไปข้างหน้า” ได้เลยแม้แต่ก้าวเดียว!
ทำไมน่ะหรือครับ? เพราะเวทมนตร์ระดับ $3 \times 3$ นั้นถูกจองจำด้วยคำสาปที่เรียกว่า “The Curse of the Origin” (คำสาปแห่งจุดกำเนิด) วันนี้พี่จะพาไปดูว่าเหล่านักพัฒนาเกมและนักคณิตศาสตร์ แหกกฎฟิสิกส์เพื่อทำลายคำสาปนี้ และสร้างเวทมนตร์ “ย้ายมวลสาร (Translation)” ด้วยการอัญเชิญพลังจากมิติที่ 4 (Homogeneous Coordinates) มาได้อย่างไร! เตรียมสมองให้พร้อม แล้วพุ่งทะยานข้ามมิติไปด้วยกันครับ!
3. 🧮 จากตัวเลขสู่กราฟิก (Math to Graphics Foundation)
สาเหตุที่เมทริกซ์ $3 \times 3$ ไม่สามารถเลื่อนตำแหน่งวัตถุได้ เป็นเพราะกฎของพีชคณิตเชิงเส้น (Linear Algebra) ครับ เมทริกซ์ $3 \times 3$ ถือเป็นตัวแทนของ Linear Transformation (การแปลงเชิงเส้น) ซึ่งมีกฎเหล็กระดับจักรวาลอยู่ข้อหนึ่งคือ: “จุดกำเนิด (Origin) ห้ามขยับเด็ดขาด”
ลองพิสูจน์ด้วยสมการดูสิครับ สมมติเรามีจุดกำเนิดที่พิกัด $$ แล้วเราเอาเมทริกซ์ $3 \times 3$ อะไรก็ไม่รู้มาคูณ:
$$ \begin{bmatrix} m_{11} & m_{12} & m_{13} \ m_{21} & m_{22} & m_{23} \ m_{31} & m_{32} & m_{33} \end{bmatrix} \begin{bmatrix} 0 \ 0 \ 0 \end{bmatrix} = \begin{bmatrix} 0 \ 0 \ 0 \end{bmatrix} $$
เห็นไหมครับ! เอาศูนย์ไปคูณอะไรก็ย่อมได้ศูนย์ จุดกำเนิดไม่มีวันหนีไปไหนได้เลย ดังนั้นการพยายามเลื่อนตำแหน่ง (Translation) ด้วยการคูณเมทริกซ์ $3 \times 3$ จึงเป็นเรื่องที่เป็นไปไม่ได้ในทางคณิตศาสตร์!
4. 📐 เจาะลึกเรขาคณิตและการประมวลผลภาพ (Geometry & Image Processing)
เพื่อแก้ปัญหานี้ นักคณิตศาสตร์กราฟิกจึงได้คิดค้นเทคนิคที่เปรียบเสมือนการ “แฮ็ก” ระบบมิติ สิ่งนั้นเรียกว่า Homogeneous Coordinates (พิกัดเอกพันธุ์)
หลักการคือ เราจะจับโลก 3 มิติของเรา โยนเข้าไปอยู่ในโลก 4 มิติ! โดยการเติมแกนปริศนาเพิ่มเข้ามาอีก 1 แกน เรียกว่าแกน $w$ พิกัด $(x, y, z)$ ของเราจะกลายร่างเป็น $(x, y, z, w)$ เมื่อเราอัปเกรดพิกัดเป็น 4 มิติแล้ว เมทริกซ์แปลงร่างของเราก็ต้องขยายขนาดเป็น $4 \times 4 Matrix$ ด้วยเช่นกันครับ!
ความมหัศจรรย์เกิดขึ้นตรงนี้ครับ… ถ้าเราอยากสร้างเวทมนตร์ย้ายมวลสาร (Translation Matrix) เพื่อเลื่อนตำแหน่งไปตามแกน x, y, z เป็นระยะทาง $t_x, t_y, t_z$ เราจะกำหนดค่าคงที่ $w = 1$ ให้กับจุด (Point) ของเรา แล้วยัดระยะทางเหล่านั้นลงไปที่ “คอลัมน์ขวาสุด” (หรือแถวล่างสุด ขึ้นอยู่กับ Engine) ของเมทริกซ์ $4 \times 4$ แบบนี้ครับ: $$ \begin{bmatrix} x’ \ y’ \ z’ \ 1 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & t_x \ 0 & 1 & 0 & t_y \ 0 & 0 & 1 & t_z \ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \ y \ z \ 1 \end{bmatrix} $$
ลองคูณแบบแถวคูณหลักดูสิครับ:
- $x’ = (1 \cdot x) + (0 \cdot y) + (0 \cdot z) + (t_x \cdot 1) = x + t_x$
- $y’ = (0 \cdot x) + (1 \cdot y) + (0 \cdot z) + (t_y \cdot 1) = y + t_y$
- $z’ = (0 \cdot x) + (0 \cdot y) + (1 \cdot z) + (t_z \cdot 1) = z + t_z$
ทาดา! ด้วยการอาศัยตัวเลข 1 จากแกน $w$ เข้ามาช่วยบวก เราสามารถเปลี่ยนการ “คูณ” เมทริกซ์ ให้กลายเป็นการ “บวก” ระยะทางได้สำเร็จ! ในทางเรขาคณิต 4 มิติ สิ่งที่เราเพิ่งทำลงไปคือการเฉือน (Shear) อวกาศ 4D ซึ่งส่งผลให้เงาที่ตกลงมาบนโลก 3D ของเราเกิดการ “เลื่อนตำแหน่ง” นั่นเองครับ!
5. 🎮 เวทมนตร์นี้ในโลกความจริง (Real-World Game Applications)
เทคนิค $4 \times 4$ Matrix และ Homogeneous Coordinates ไม่ได้มีไว้แค่ย้ายมวลสารเท่านั้น แต่มันยังเป็น “เครื่องกรองวิเศษ” ที่ช่วยให้ Game Engine แยกแยะความแตกต่างระหว่าง Point (จุดตำแหน่ง) และ Vector (ทิศทาง) ได้อย่างสมบูรณ์แบบครับ! (จำตอนที่ 2 เรื่อง Point vs Vector ได้ไหมครับ?)
- ถ้าเป็น Point (จุดบอกตำแหน่ง): เราจะกำหนดให้ $w = 1$ เช่นพิกัดของตัวละคร เมื่อโดนเมทริกซ์ Translation คูณ มันก็จะโดนย้ายตำแหน่งไปตามที่ตกลงกันไว้
- ถ้าเป็น Vector (ทิศทางแสง หรือความเร็ว): เราจะกำหนดให้ $w = 0$ เช่น $[x, y, z, 0]$ ลองนึกภาพตามนะครับ ถ้าเราเอาเมทริกซ์เลื่อนตำแหน่งไปคูณ Vector ตัว $w=0$ จะไปเจอกับ $t_x, t_y, t_z$ ทำให้เทอมการบวกระยะทางกลายเป็น 0 ทั้งหมด! ($t_x \cdot 0 = 0$)
ผลก็คือ ลูกศร Vector จะไม่ถูกขยับเขยื้อนเลยแม้แต่นิดเดียว! ซึ่งถูกต้องตามกฎของฟิสิกส์เป๊ะๆ เพราะทิศทางของแรงโน้มถ่วง หรือทิศทางของแสงแดด ไม่ควรจะเปลี่ยนไปเพียงเพราะเราเดินตัวละครขยับไปทางซ้าย 2 เมตร ถูกต้องไหมล่ะครับ!
6. 🏭 เปิดโรงงานผลิตภาพ (The Graphics Pipeline)
เมื่อเราเจาะเข้าไปดูหัวใจหลักของ Graphics Pipeline ในขั้นตอน Vertex Shader ทุกๆ โพลิกอนของตัวละคร โมเดล ต้นไม้ อาคาร จะถูกส่งผ่านท่อประมวลผลนี้ในรูปแบบพิกัด 4 มิติ (Homogeneous Coordinates) ทั้งสิ้นครับ
ฮาร์ดแวร์การ์ดจอ (GPU) อย่าง NVIDIA หรือ AMD ถูกออกแบบโครงสร้างทรานซิสเตอร์มาเพื่อให้คูณเมทริกซ์ $4 \times 4$ ได้เร็วปานสายฟ้าแลบแบบขนาน (Parallel) ตัวแปรระดับโลกใน Shader อย่าง Model Matrix (บาง Engine เรียก World Matrix) ก็คือเมทริกซ์ $4 \times 4$ ตัวนี้นี่แหละครับ ที่เก็บข้อมูลสะสมทั้งคำสั่ง ย่อขยาย (Scale), หมุน (Rotation) และ ย้ายตำแหน่ง (Translation) รวบยอดไว้ในตารางเดียว
เพียงแค่เอาตารางเวทมนตร์นี้ไปคูณกับพิกัด $[x,y,z,1]$ ของแต่ละจุด Vertex บ้านที่เคยวาดไว้ตรงกลางจุดกำเนิดในโปรแกรม Maya หรือ Blender ก็จะถูกเทเลพอร์ต (Teleport) ไปตั้งตระหง่านอยู่บนภูเขาในแผนที่ของเกมคุณได้อย่างแม่นยำ!
7. 🏁 บทสรุป (Level Cleared!)
เคลียร์อีกหนึ่งด่านสำคัญครับ! ตอนนี้เราได้รู้แล้วว่าทำไมเราถึงต้องใช้เมทริกซ์ $4 \times 4$ และแกน W แทนที่จะเป็นแค่ 3 มิติธรรมดาๆ ทั้งหมดก็เพื่อทำลายคำสาปของ Linear Transformation ให้เราสามารถร่ายเวทมนตร์ “เลื่อนตำแหน่ง” แบบคูณรวบยอดได้รวดเดียวจบ นี่คือโครงสร้างพื้นฐานระดับรากฐานที่ขับเคลื่อนเกม 3D ทุกเกมบนโลกใบนี้ครับ!
ในตอนหน้า เราจะมาสกัดพลังของ Transformation Matrix ตัวถัดไป นั่นคือการ “หมุน (Rotation) และ ย่อขยาย (Scale)” ว่าตารางตัวเลขเหล่านี้ควบคุมทิศทางการตะแคงของหน้าจอหรือโมเดลได้อย่างไร เตรียมเปิดสมองให้กว้างๆ แล้วพบกันใหม่ Level Cleared!
สนใจพูดคุยแลกเปลี่ยนเทคนิคการพัฒนาเกม คอมพิวเตอร์กราฟิก หรือออกแบบระบบซอฟต์แวร์? ทีมงาน WP Solution พร้อมให้บริการออกแบบและพัฒนาซอฟต์แวร์แบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p