[Ray Tracing in one weekend SS1 EP.00] — ปฐมบท

Poom Yimyuean
4 min readFeb 1, 2024

--

สวัสดีครับ หลังจากที่ผมตัดสินใจคัมแบ็คเข้าสู่วงการเขียน Blog จริงจังอีกครั้ง เลยมานั่งคิดว่าอยากจะเขียนอะไรลงดีนะ แล้วก็พลันนึกขึ้นได้ว่าช่วงนี้ตัวเองกำลังกลับมาสนใจ Computer Graphics อีกครั้ง เพราะเราไม่ค่อยอยากทิ้ง Math Skill ซึ่งเป็นสิ่งที่เราชอบ และพอเดินทางกับมันมาได้อย่างค่อนข้างจะสวยงามตั้งแต่สมัยเรียน พอตัดสินใจจะมาต่อสาย Computer Science แม้ว่าเพื่อการประกอบอาชีพ ผมจะเน้นตัวเองไปศึกษาที่ฝั่ง Software Engineering, Application Development หรือช่วงหลังๆก็ DevOps Culture หรือ Cloud Computing ซะเยอะ แต่ก็ยังอยากจะใช้เวลาว่างๆ ในการกลับมาศึกษาวิชานี้ที่มันพอได้แตะคณิตศาสตร์ประมาณนึงบ้าง อีกทั้งศาสตร์ของ Computer Graphics มันก็สามารถต่อยอดไปถึง Computer Animation, Digital Game / Video Game ซึ่งก็ถือเป็นสื่อประสม (Multimedia) ประเภทนึงที่ผมชอบมากๆ และยังอยากหาเวลามาทำโปรเจค มาลองผิดลองถูกกับพวกนี้บ้าง

โอเค พอเกริ่นมาว่าผมสนใจเรื่อง Computer Graphics ก็เลยนึกว่าอยากจะลองเขียนบทความเกี่ยวกับหนึ่งในสิ่งที่ตัวเองทำอยู่ในการศึกษาวิชานี้ คือ การกลับมาจริงจังกับศาสตร์ Ray Tracing จาก E-Book ตระกูล Ray Tracing in … ทั้งหลาย เอาให้พอเข้าใจคอนเซปต์ว่าอะไร ยังไง

Disclaimer !!

ซึ่งก่อนอื่นผมต้องขอวาง Disclaimer ให้กับบทความนี้ไว้ก่อนจะเริ่มเข้าเนื้อหาว่า ตัวผมเองนั้นจัดตัวเองอยู่ในผู้ที่มีความสนใจใน Computer Graphics ไม่ใช่ผู้เชี่ยวชาญ และ ผมอยากจะเขียน Blog นี้ออกมาให้ตัวเอง (และคนอื่น ?) อ่านแล้วเข้าใจได้ไม่ยากให้มากที่สุด ดังนั้นผมจึงไม่สามารถรับประกันในรายละเอียด หรือ ความถูกต้องอย่างถี่ถ้วนภายในบทความได้ วิธีที่ดีที่สุดในการที่คุณจะทำความเข้าใจมันคือ ให้คุณลองเอา Keyword หรือบางอย่างที่ผมเขียนใน Blog นี้ไปค้นหา ศึกษาต่อ หรือ ถ้าใครที่พอมีความรู้ ความเข้าใจมาอ่าน หากมีตรงไหนที่ขาดตกบกพร่อง หรือ อยากเสริม ก็สามารถเข้ามาคอมเมนต์ใน Blog นี้ได้อย่างสะดวก ขออย่างเดียวคือขอให้เราแลกเปลี่ยนกันอย่างเป็นมิตรที่ดีต่อกันก็พอ และผมแนะนำคนที่มาอ่านว่าถ้าหากคุณอ่าน Blog นี้แล้วเจอว่ามันมีคอมเมนต์ ก็แนะนำให้ลองไปอ่านในคอมเมนต์ด้วยเผื่อจะมีคนมาเมนต์ตามที่บอกไปข้างต้น จะได้ทำให้พวกท่านได้รับข้อมูล ความรู้ที่หลากหลาย ครอบคลุมมากขึ้นนะครับ :)

Ray Tracing in one weekend

ผมได้มีโอกาสมารู้จักกับ E-Book เล่มนี้ เพราะได้มีโอกาสเข้าไปสุงสิงในห้อง Discord ที่เป็น Server ของนักพัฒนาเกม (Game Developer) คนไทย ที่รวมทั้งผู้ที่สนใจ และผู้ที่กำลังทำงานในสายนี้อยู่ ในช่วงนึงเมื่อประมาณ 2–3 ปีที่แล้ว ก็ได้มีโอกาสได้เข้าไปฟังผู้คนได้แชร์ความรู้ แชร์ประสบการณ์ต่างๆมากมาย ใน Voice Chat หรือใน Stage Channel (จำได้ว่าช่วงนั้น Discord เพิ่งเปิด Stage Channel Feature มาใหม่ๆเลย เพราะตอนนั้น Clubhouse กำลังมา) ซึ่งแน่นอนว่าผมผู้ซึ่งเป็นผู้ฟังที่ดี แต่ไม่ค่อยได้พูดกับเขาเท่าไหร่ เพราะเป็นคนต่อบทสนทนาไม่เก่ง และความรู้ ประสบการณ์ยังน้อยนิด ก็ได้เก็บวิชา เก็บข้อมูลต่างๆมาพอสมควร เกริ่นๆมาโคตรยาว แค่จะสื่อว่าใน Discord ห้องนั้นมันมีพี่คนนึง ซึ่งเป็นคนที่เก่ง และ มีประสบการณ์มากๆในสายงานคนนึงเขาได้แชร์ E-Book นี้เข้ามาในห้อง Discord มั้งนี่แหละ แล้วเหมือนเขาจะเคยบอกประมาณว่าถ้าจะเริ่มศึกษาเรื่องการ Rendering ในสาย Computer Graphics (Rendering อารมณ์มันคือการประมวลผลให้ออกมาเป็นชิ้นงาน รูปภาพ อะไรประมาณนั้นแหละ) ให้เริ่มจากการศึกษาผ่าน E-Book เล่มนี้จะไปได้สวยกว่าไปเริ่มจาก OpenGL (Open Graphics Library)

ซึ่งในฐานะที่ผมเคยผ่าน OpenGL มาก่อนทั้งจากในมหาลัย และ ลองเล่นเอง ผมบอกเลยว่ามันค่อนข้างที่จะใช้เวลาในการ Config กับ Editor ค่อนข้างนานมากๆ (ส่วนตัวผมใช้ Mac M1 เลยอาจจะใช้เวลานานเป็นพิเศษ) และต้องมีการวาง Code Structure ร่างตัว Shader (Shader คือ การคำนวณแสงสี แสงเงาต่างๆใน Graphics) และ Code อีกมากมายหลายบรรทัดกว่าจะได้สามเหลี่ยมสีแดงๆ พื้นหลังดำๆ มารูปนึง ถ้าเทียบกับสิ่งที่ E-Book เล่มนี้ทำคือ คุณแค่มีความรู้ในภาษาโปรแกรมมิ่งที่คุณถนัด และพอรู้จักการทำงานกับการจัดการไฟล์ (File System) พื้นฐานในภาษาโปรแกรมที่คุณใช้ คืออย่างน้อยเอาให้เขียนไฟล์ (File Writing) มาใหม่พร้อมข้อมูลได้ เพราะที่เหลือมันจะเป็นการเขียนให้สามารถออกมาอยู่ในรูปแบบ (Format) ของไฟล์ประเภท PPM (Portable PixMap format) ซึ่งจะสามารถ gen ออกมาเป็นรูปภาพได้ ซึ่งรายละเอียดของไฟล์ PPM ผมอาจจะขอยกไปพูดถึงใน EP. ถัดๆไป แต่หลักๆเลยคือค่อนข้างเหมาะกับมือใหม่ ผู้เริ่มต้น

หากใครสนใจอยากอ่าน E-Book เล่มนี้ ทางผู้จัดทำเขาได้ทำในรูปแบบให้เข้าไปอ่านผ่านเว็บได้เลยผ่านทางลิงก์นี้ -> จิ้มลิงก์นี้

Ray Tracing ?

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

ปกติเวลาเราพูดถึง Ray Tracing หลายคนอาจนึกถึงคำว่า RTX ที่มันห้อยตามมากับรุ่นของการ์ดจอ (Graphic Card) จากค่ายนึง ซึ่งจะตามมาด้วยมีม RTX Off / RTX On ที่แบบถ้าคุณปิดโหมด RTX มันก็จะเป็นภาพแบบปกติ แต่ถ้าคุณเปิด RTX ปั๊บ ภาพมันก็จะออกมาสมจริงจนแทบจะนึกว่าถ่ายรูป ถ่ายวิดีโอมาสดๆเองเลย อะไรประมาณนั้น ซึ่งเอาจริงๆมันก็ไม่ได้ว่าผิดอะไร เพราะจริงๆคำว่า RTX ที่ห้อยมากับชื่อรุ่นมันก็ตั้งใจที่จะสื่อถึงเรื่องของ Ray Tracing นั่นแหละ แต่เดี๋ยวค่อยลงรายละเอียดอีกที

ตัวอย่างมีม RTX Off / RTX On (1)
ตัวอย่างมีม RTX Off / RTX On (2)

การจะเข้าใจนิยามของ Ray Tracing เราลองแตกคำที่มาประกอบกันเป็นคำนี้อย่างคำว่า “Ray” กับ “Tracing” แล้วค่อยๆทำความเข้าใจกับมันก่อน

Ray

Ray (noun.) มีความหมายว่า “รังสี”

ถ้าหากใครเคยเรียนวิชาคณิตศาสตร์ เนื้อหาตั้งแต่สมัยประถม จะมีบทเรียนนึงที่มีชื่อประมาณว่า “จุด เส้นตรง ส่วนของเส้นตรง รังสี และ มุม” ซึ่งจะพูดถึงนิยามพื้นฐานที่จะต้องใช้ในการต่อบทไปยัง เรขาคณิต (Geometry), ภาคตัดกรวย (Conic Section), ตรีโกณมิติ (Trigonometry) และอีกมากมาย ซึ่งเนื้อหาเหล่านี้จะมีความจำเป็นอย่างมากในการทำความเข้าใจ Computer Graphics

จุด เส้นตรง ส่วนของเส้นตรง รังสี และมุม ที่เราอาจจะเคยผ่านตาในวิชาคณิตศาสตร์ ตอนประถม

ผมจะไม่ขอลงรายละเอียดส่วนตรงนี้เยอะ เพราะหลายท่านน่าจะรู้เรื่องพื้นฐานพวกนี้อยู่แล้ว แต่แค่จะมาโฟกัสตรงส่วนของรังสี ว่าถ้าหากดูดีๆ เราจะพบว่ารังสี มันคือเส้นที่มีหัวลูกศรทางเดียว เป็นเส้นที่มีจุดเริ่มต้น (Origin Point) มีขนาด (ความยาว; Length) และมีทิศทาง (Direction) ที่หัวลูกศรชี้ไปบอกว่ามันอยู่ตรงพิกัดไหน พูดง่ายๆมันก็คือเส้นเวกเตอร์ (Vector) ดีๆนี่แหละครับ

Tracing

Tracing (noun.) มาจาก Trace (verb.) มีความหมายว่า “ติดตาม” “ตามรอย” “แกะรอย” ประมาณนี้ พอเป็นคำว่า Tracing เลยมีความหมายว่า “การติดตาม” “การตามรอย”

Ray + Tracing -> Ray Tracing

พอเอาสองคำมารวมกัน Ray + Tracing -> Ray Tracing มันคือ การตามรอยรังสี ? อิหยังวะ ?

จริงๆนิยามของ Ray Tracing มันคือ การยิงรังสีจากกล้อง (Camera) ที่เราใช้เป็นจุดแทนสายตาที่มองเห็นภาพนั้นๆ เพื่อมาเช็คว่ารังสีเส้นนั้นผ่านวัตถุ (Object) หรือผ่านพื้นผิวแบบไหน ก่อนที่จะสะท้อนไปเรื่อยๆจนกระทั่งเข้าไปหาแหล่งกำเนิดแสง (Light Source; ในการ Rendering เราจะต้องมีการกำหนดแหล่งกำเนิดแสง อารมณ์เหมือนกับว่าเราต้องใช้แสงเพื่อที่จะได้มองเห็นวัตถุเป็นเฉดแสงเงาต่างๆ) เพื่อที่จะคำนวณ Pixel ออกมาได้ว่าจะให้โทนสีของแต่ละจุดในรูปมันออกมายังไง

รูปภาพอธิบายหลักการ Ray Tracing อย่างคร่าวๆ

การตามรอยรังสี ตามคำแปลตรงตัว ก็หมายถึงการใช้รังสีมาตามรอยจุดต่างๆภายในฉาก (Scene) นั่นเอง

Ray Tracing ทำให้ภาพสมจริงมากขึ้น ?

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

จริงๆต้องบอกว่าการทำให้ภาพสมจริงมากขึ้น (Photorealistic Rendering) เป็น Use Case หรือ การนำไปประยุกต์ใช้แบบหนึ่งที่ค่อนข้างเป็นที่นิยม แต่ก็มีการนำ Ray Tracing ไปใช้ประโยชน์อย่างอื่นได้เช่นกัน ยกตัวอย่างเช่น Raycasts ในโปรแกรม Unity (Game Engine) ที่เป็นการนำ Ray Tracing มาใช้ในการทำ Physics ให้กับวัตถุ (Object) ที่เราสร้างภายในฉาก (Scene)

RTX == Ray Tracing ?

เมื่อกี้ผมบอกว่าจริงๆแล้วคำว่า RTX ที่ห้อยอยู่กับรุ่นของการ์ดจอค่ายนึงเดี๋ยวนี้ ก็มีความเกี่ยวข้องกับ Ray Tracing หลายคนเข้าใจว่า RTX ก็คือ Ray Tracing หรือเปล่า ?

จริงๆแล้วคำว่า RTX มันย่อมาจาก “Ray Tracing Texel eXtreme” ให้เข้าใจว่ามันเป็นการ์ดจอที่มีการ concern ในเรื่องของ Real-Time Ray Tracing (Ray Tracing ตามช่วงเวลา เช่นงานที่เป็นภาพเคลื่อนไหว วิดิโอ อนิเมชั่น เกม) นั่นหมายความว่าต่อให้ไม่ใช่การ์ดจอที่ห้อยท้ายว่า RTX หรือ คอมพิวเตอร์ที่มีสเปคโดยทั่วไปที่ไม่ได้สูงมากนักก็สามารถประยุกต์ใช้ Ray Tracing ได้ เพียงแค่การ์ดจอ RTX มันแค่เพิ่ม concern บางอย่างเกี่ยวกับ Ray Tracing เข้าในผลิตภัณฑ์รุ่นนั้นๆเฉยๆ

ปิดท้าย

จริงๆแล้วผมตั้งใจจะเขียนบทความซีรีส์นี้ไว้เป็น Note ความเข้าใจของตัวเองในแต่ละบทของ E-Book ตระกูล Ray Tracing in … ที่ผมได้ศึกษาในช่วงนี้เฉยๆ แต่ตรงไหนที่พอจะเพิ่มเติม ก็อาจจะมีเพิ่มเติมบ้าง แต่อาจจะไม่ได้ลงรายละเอียดมากนัก เพราะถ้าหากจะให้ลงรายละเอียดจริงๆ อาจจะต้องมีการพูดถึง Rasterization ซึ่งถือเป็นวิธีมาตรฐานหนึ่งในการ Render รูปภาพ แล้วนำมาเปรียบเทียบ ใครที่อ่านมาถึงตรงนี้ ผมก็ขอบคุณมา ณ ที่นี้มากๆ ถ้ามีรายละเอียดส่วนไหนที่ผมเข้าใจคลาดเคลื่อน หรือ มีจุดที่อยากเพิ่มเติม คิดว่ามันน่าจะมีการอธิบายที่ดีกว่านี้ ก็สามารถเข้ามาแลกเปลี่ยนในคอมเมนต์ ตามที่บอกไปใน Disclaimer ช่วงต้น Blog ได้เลยครับ EP. หน้า เราจะมาลงรายละเอียดเกี่ยวกับไฟล์ PPM เนื่องจากเราจะต้องใช้ไฟล์ตระกูลนี้เป็น Output หลักให้กับโปรเจคในแต่ละบทของซีรีส์นี้กันครับ :)

ขอบคุณที่ติดตามอ่านมาจนถึงส่วนนี้มากเลยครับ

--

--

Poom Yimyuean
Poom Yimyuean

Written by Poom Yimyuean

I’m Poom, He / Him, From Thailand. Interested in Math, Web & Game Dev, Computer Graphics, Functional Programming, Web Automation, Data Science, AI, ACG Culture.

No responses yet