เทคโนโลยีการจำลองของไหล ไฟ และควันแบบเรียลไทม์
(andrewkchan.dev)- โน้ตและซอร์สโค้ด (GitHub) เกี่ยวกับคณิตศาสตร์ อัลกอริทึม และวิธีการที่ใช้ในการจำลองของไหลอย่างไฟและควันแบบเรียลไทม์
1. การจำลองของไหล
- ก่อนจะจำลองไฟได้ ต้องจำลองของไหลก่อน
- หากสมมติว่าของไหลไม่อัดตัวและไม่มีความหนืด ปัญหาจะง่ายขึ้นมาก
1.1 พลศาสตร์ของไหลพื้นฐาน
- ของไหลเติมเต็มอยู่ในบริเวณ DDD ของอวกาศ และที่เวลา ttt ความเร็วของของไหลคือ u(x,t)
- สามารถแทนสนามความเร็ว 2D u ด้วยกริดขนาด N×N ได้
- ถ้าหยดสีย้อมหนึ่งหยดลงในของไหลจะเกิดอะไรขึ้น?
- กำหนดสนามสเกลาร์ ψ(x,t) ที่แทนความหนาแน่นของสีย้อม และการที่มันเคลื่อนที่ไปตามความเร็วของของไหลเรียกว่า advection
- Naive Method สำหรับคำนวณ advection คือย้ายแต่ละจุดบนกริดแล้วอัปเดตจุดกริดที่ใกล้ที่สุด แต่ทำให้ขนานได้ยากและไม่เสถียร
สมการเชิงอนุพันธ์ย่อยสำหรับ Advection
- เพื่ออนุมาน advection อย่างมีเสถียรภาพ จำเป็นต้องมีนิพจน์ PDE แบบชัดเจน
- มวลรวมของสีย้อมภายในบริเวณคงที่ WWW คือ ∫WψdV และการเปลี่ยนแปลงของมวลตามเวลาคือ ddt∫Wψ(x,t)dV
- ตามกฎอนุรักษ์มวล จะได้ว่า ddt∫WψdV=−∫Sψu⋅ndA
- เมื่อนำทฤษฎีบทไดเวอร์เจนซ์มาใช้ จะได้ ∫W[∂ψ∂t+∇⋅(ψu)]dV=0 และสำหรับปริมาตรย่อยหน่วย W=dV จะได้ ∂ψ∂t+∇⋅(ψu)=0
- สิ่งนี้ให้ PDE แบบชัดเจนที่เราต้องแก้
วิธีที่เสถียรสำหรับ Advection
- หากดู eqn. (1) อย่างละเอียด จะพบว่าด้านขวาเป็น directional derivative ในทิศทาง −u
- วิธีนี้เรียกว่า Semi-Lagrangian advection และถูกคิดค้นโดย Jos Stam ในปี 1999
- เพราะอัปเดตแต่ละจุดกริดเพียงครั้งเดียว จึงทำให้ขนานได้ง่ายมากและเสถียรแบบไม่มีเงื่อนไข
1.2 สมการนาวิแยร์-สโตกส์
- เราพบโมเดลสำหรับอธิบายว่าคุณสมบัติแบบสเกลาร์ของของไหลเปลี่ยนแปลงไปตามเวลาอย่างไรแล้ว แล้วการไหลของของไหลเองล่ะ?
- สมการนาวิแยร์-สโตกส์นิยามว่าสนามความเร็ว u ณ จุดใดจุดหนึ่งในของไหลจะเปลี่ยนไปตามเวลาอย่างไร
- เราสมมติว่าของไหลไม่มีความหนืด ดังนั้น μ=0 และยังสามารถละแรงภายนอกไปก่อนได้
- ดังนั้นจึงเหลือเพียงสองพจน์คือ self-advection และความดัน
- หากคำนวณเชิงตัวเลขของพจน์เหล่านี้ในแต่ละไทม์สเต็ปแล้วรวมกัน ก็สามารถจำลองของไหลได้
การแก้ความดัน
- เราไม่อาจทราบได้ว่าสนามความเร็วใหม่เป็นไปตามข้อจำกัดความไม่อัดตัวหรือไม่ ดังนั้นพจน์ความดัน p ต้องเข้ามาแก้ไขส่วนนี้
- เพื่อทำเช่นนั้น ต้องแก้สมการปัวซง
- ในการแก้สมการปัวซง เราสามารถใช้อัลกอริทึมแบบวนซ้ำ เช่น วิธี Jacobi
- วิธี Jacobi สามารถรันแบบขนานบน GPU ได้ ทำให้ติดตั้งใช้งานได้ง่ายมาก
สรุป: การจำลองนาวิแยร์-สโตกส์
- คณิตศาสตร์ของนาวิแยร์-สโตกส์อาจซับซ้อนเล็กน้อย แต่การแก้สมการเพื่อจำลองของไหลสามารถสรุปเป็นขั้นตอนอัปเดตหลักไม่กี่ขั้นตอนได้
1.3 การคุมความหมุนวน (Vorticity Confinement)
- การใช้กริดเพื่อเก็บสนามความเร็วนั้นสะดวกมาก แต่เมื่ออินเตอร์โพเลตค่าระหว่างจุดกริด จะเกิดการทำให้เรียบเชิงตัวเลขที่ไม่ต้องการ
- ผลคือกระแสวนปั่นป่วนของการไหลหายไป ทำให้การไหลของของไหลดูนุ่มเกินไปและ "น่าเบื่อ"
- การคุมความหมุนวนคือกระบวนการขยายความหมุนวนที่สูญหายเหล่านี้
- การคุมความหมุนวนถูกออกแบบมาเพื่อแก้สนามการไหลที่ซับซ้อนมากของใบพัดเฮลิคอปเตอร์
- ความหมุนวนคำนวณได้จากการหา curl ของ u ในแต่ละจุด และเพื่อขยายความหมุนวน จะมีการเพิ่มการไหลแบบวงกลมในแต่ละจุด
Curl-Noise Turbulence
- Curl noise เป็นวิธีที่คล้ายกับการคุมความหมุนวน แต่แทนที่จะวัดและขยายความหมุนวนของสนามความเร็ว จะใช้ฟังก์ชัน noise เพื่อสร้างสนามความหมุนวนแบบสเกลาร์ขึ้นมาตั้งแต่ต้น
- ของไหลที่เคลื่อนที่เร็วและปั่นป่วนมากจะได้ประโยชน์จากการคุมความหมุนวนและ curl noise มากที่สุด
2. การจำลองไฟ
- ในการจำลองไฟและควัน จำเป็นต้องเพิ่มแชนเนลที่แทนเชื้อเพลิงและอุณหภูมิ และต้องสร้างแบบจำลองการเผาไหม้ของเชื้อเพลิงเพื่อก่อให้เกิดความร้อน
- นอกจากนี้ยังต้องจัดการกับส่วนของของไหลที่มีความร้อนสูงให้ลอยตัวขึ้นตามโมเดลแรงลอยตัวจากความร้อน และเรนเดอร์เปลวไฟให้ถูกต้อง
2.1 โมเดลการเผาไหม้พื้นฐาน
- ในเชิงเคมี ไฟเกิดจากปฏิกิริยาออกซิเดชันของวัสดุเชื้อเพลิง ซึ่งปล่อยทั้งความร้อนและแสง
- กำหนดสนามสเกลาร์ ρ ที่แทนความหนาแน่นของเชื้อเพลิง และสนามสเกลาร์ T ที่แทนอุณหภูมิ
- เชื้อเพลิงจะเผาไหม้และเพิ่มอุณหภูมิให้ระบบ ขณะที่อุณหภูมิจะแพร่จากบริเวณร้อนไปยังบริเวณเย็น
- การพาความร้อนนิยามได้จากการรวมกันของสองกระบวนการนี้ และเรามีโมเดลทางคณิตศาสตร์สำหรับอธิบายมันอยู่แล้ว - advection!
ความเห็นของ GN⁺:
- บทความนี้อธิบายกระบวนการซับซ้อนของการจำลองของไหลอย่างไฟและควันแบบเรียลไทม์ ซึ่งเป็นหัวข้อที่สำคัญมากในคอมพิวเตอร์กราฟิกส์และการพัฒนาเกม
- ความก้าวหน้าของ GPU ในช่วงหลังทำให้สามารถประมวลผลการจำลองของไหลที่ซับซ้อนได้แบบเรียลไทม์ และสิ่งนี้ช่วยสร้างเกมและเอฟเฟกต์พิเศษในภาพยนตร์ที่ดึงดูดสายตา
- บทความนี้ครอบคลุมแนวคิดคณิตศาสตร์ขั้นสูง เช่น สมการนาวิแยร์-สโตกส์ และการคุมความหมุนวน จึงให้ข้อมูลที่เป็นประโยชน์แก่ซอฟต์แวร์เอนจิเนียร์ระดับเริ่มต้นที่สนใจด้านนี้
1 ความคิดเห็น
ความเห็นจาก Hacker News