เคยเห็นฉากคลื่นยักษ์ซัดเรือ ฉากเลือดกระเซ็น หรือน้ำพุ่งจากก๊อกน้ำในหนังแล้วรู้สึกว่ามันสมจริงเหมือนของแท้ไหม? เบื้องหลังความสมจริงเหล่านั้นคือศาสตร์ของ Fluid Simulation ที่ต้องอาศัยทั้งฟิสิกส์ คณิตศาสตร์ และศิลปะในการควบคุม หลายคนเข้าใจผิดว่าการจำลองของเหลวคือการกดปุ่มแล้วรอ แต่มันคือการปรับแต่งพารามิเตอร์หลายสิบตัวเพื่อให้ได้ลุคที่ต้องการ
บทความนี้จะพาคุณไปเจาะลึกเทคนิคการสร้างเอฟเฟกต์ของเหลว ตั้งแต่หลักการพื้นฐานของ FLIP Solver ไปจนถึงการเพิ่มฟองและละอองน้ำแบบมืออาชีพ พร้อมอัปเดตเทคโนโลยีใหม่ๆ ที่กำลังเปลี่ยนวงการ
FLIP Solver: ราชาแห่งของเหลวในวงการ VFX
หัวใจสำคัญของการจำลองของเหลวในระดับโปรดักชันคือ FLIP (Fluid-Implicit Particle) Solver ซึ่งเป็นเทคนิคที่รวมข้อดีของการจำลองแบบอนุภาค (Particle-based) และแบบตาข่าย (Grid-based) เข้าด้วยกัน เพื่อให้ได้ทั้งรายละเอียดและความเร็ว
ซอฟต์แวร์หลักที่ใช้สำหรับงานนี้คือ Houdini ซึ่งเป็นมาตรฐานอุตสาหกรรมสำหรับเอฟเฟกต์ของเหลว หนึ่งในคอร์สเรียนยอดนิยมคือ Introduction to Houdini: Fluids โดย David Silberbauer ศิลปิน VFX จาก Sunrise Animation Studios ซึ่งสอนตั้งแต่การตั้งค่า FLIP ด้วย Shelf Tools ไปจนถึงการสร้างฉากคอมพลีทอย่างฉากฉลามกระโดดพ้นน้ำ
หลักการทำงานของ FLIP Solver:
- กำหนดโดเมน (Domain): สร้างกล่องหรือทรงปิดที่กำหนดขอบเขตของน้ำ เพื่อป้องกันไม่ให้น้ำไหลออกนอกพื้นที่ที่เราต้องการ
- กำหนดแหล่งกำเนิด (Emitter): ใช้ทรงกลม เรขาคณิต หรืออนิเมชันของวัตถุ (เช่น อนิเมชันฉลาม) เป็นตัวปล่อยอนุภาคน้ำ
- ปรับพารามิเตอร์ทางฟิสิกส์: ตั้งค่า Surface Tension (แรงตึงผิว), Viscosity (ความหนืด), และ Gravity (แรงโน้มถ่วง) เพื่อให้ได้พฤติกรรมของของเหลวตามต้องการ
- เพิ่ม Collision: กำหนดวัตถุที่น้ำจะชนกับ (เช่น พื้น, กำแพง, หรือตัวฉลาม) เพื่อสร้างฟองและละออง
จากของเหลวสู่ฉากสมบูรณ์: ขั้นตอนการทำงานแบบมืออาชีพ
การจำลองของเหลวในระดับโปรดักชันไม่ได้จบแค่การได้น้ำไหล ต้องมีขั้นตอนย่อยๆ ที่ทำให้ฉากดูสมบูรณ์
1. การจำลอง Whitewater (ฟองและละอองน้ำ)
นี่คือขั้นตอนที่เปลี่ยนจาก “น้ำธรรมดา” เป็น “น้ำในหนัง” การเพิ่มฟองและละอองน้ำ (Whitewater) ช่วยเพิ่มรายละเอียดและความสมจริงให้กับฉาก โดยเฉพาะในฉากคลื่นแรงหรือน้ำตก
เวิร์กโฟลว์พื้นฐาน:
- ใช้ Whitewater Source เพื่อกำหนดเงื่อนไขการเกิดฟอง เช่น บริเวณที่มีความเร็วสูง (Velocity) หรือบริเวณที่มีการหมุนวน (Vorticity)
- ใช้ Whitewater Solver เพื่อจำลองพฤติกรรมของฟอง โดยปรับพารามิเตอร์ต่างๆ เช่น อายุของฟอง, การจับตัวกัน (Clumping), และการละลาย (Erosion)
2. การสร้าง Mesh (ตาข่าย) สำหรับเรนเดอร์
อนุภาคของเหลวไม่สามารถเรนเดอร์ได้โดยตรง เราต้องแปลงอนุภาคเหล่านั้นให้เป็นพื้นผิว 3 มิติ (Polygon Mesh) เพื่อให้สามารถใส่แสงและวัสดุได้
ใน Houdini การสร้าง Mesh ทำได้โดยการปรับค่า Particle Separation (ระยะห่างระหว่างอนุภาค) ซึ่งกำหนดรายละเอียดของพื้นผิวน้ำ
3. การเพิ่มวัตถุโต้ตอบกับของเหลว (Fluid-Object Interaction)
ของเหลวในโลกจริงต้องโต้ตอบกับวัตถุรอบข้างได้ น้ำกระแทกหินแล้วกระเด็น หรือวัตถุตกลงไปในน้ำแล้วเกิดคลื่น
เทคนิคการทำ Fluid-Object Interaction:
- ใน Houdini หรือ RealFlow, กำหนดให้วัตถุเป็น Collider (ตัวชน) และเปิดใช้งาน Two-Way Interaction เพื่อให้แรงของของเหลวส่งผลต่อวัตถุ (เช่น วัตถุลอยน้ำ) และแรงของวัตถุส่งผลต่อของเหลว
- ใน 3ds Max ร่วมกับ FumeFX หรือ NodeWorks สามารถตั้งค่าให้ฟิสิกส์ของของไหลและวัตถุแข็งโต้ตอบกันแบบสองทางได้
อัปเดตเทคโนโลยีใหม่: GPU เร่งความเร็วและ Blender มาแรง
วงการ VFX กำลังเปลี่ยนแปลงเร็วมาก โดยเฉพาะเรื่องความเร็วในการทำงาน
Paradigm: GPU Liquid Solver สำหรับ Houdini
Theory Accelerated (ทีมเดียวกับผู้สร้าง Axiom) ได้เปิดตัว Paradigm ซึ่งเป็น GPU Liquid Solver สำหรับ Houdini ที่สามารถจำลองอนุภาคนับล้านได้เร็วกว่า CPU แบบเดิมหลายเท่า
ข้อควรรู้: Paradigm ยังอยู่ในช่วง Open Beta และยังขาดฟีเจอร์ Whitewater และ Ocean Spectra ที่สมบูรณ์ แต่ถือเป็นก้าวสำคัญของวงการ
Flow: ปลั๊กอิน Blender ที่มาพร้อมกับหนังดัง
ปลั๊กอินที่ใช้สร้างฉากน้ำในภาพยนตร์ Flow (ได้รับรางวัลออสการ์ 2025) ได้ถูกเผยแพร่ให้สาธารณชนใช้งานแล้ว เป็นปลั๊กอินที่ออกแบบมาเพื่อ Blender โดยเฉพาะ เหมาะกับงาน VFX และ CGI ระดับสูง
Fluid Flux 3.0: ของเหลวแบบ Real-Time ใน Unreal Engine
สำหรับสายเกมและ Virtual Production, Fluid Flux 3.0 อัปเดตใหญ่มาพร้อมระบบจำลองของเหลวแบบ Real-Time บน GPU, Glass Simulation (ระบบกระจก), และ Underwater Lighting (แสงใต้น้ำ) ที่แม่นยำขึ้น
สรุป: ปรับแต่งจนกว่าจะ “ใช่”
การทำงานกับของเหลวใน VFX คือการผสมผสานระหว่างฟิสิกส์และศิลปะ ไม่มีพารามิเตอร์ตายตัวที่ใช้ได้กับทุกฉาก แนวทางที่ดีที่สุดคือการเริ่มจากค่าพื้นฐาน ทดสอบ แล้วปรับแต่งซ้ำ (Iterate) จนกว่าจะได้ลุคที่ต้องการ
