2 คะแนน โดย GN⁺ 2023-12-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • โน้ตและซอร์สโค้ด (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⁺:

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

1 ความคิดเห็น

 
GN⁺ 2023-12-20
ความเห็นจาก Hacker News
  • ในฐานะคนที่จบดุษฎีบัณฑิตด้าน CFD (พลศาสตร์ของไหลเชิงคำนวณ) ยอมรับว่าไม่เคยเจอวิธี vorticity confinement หรือความปั่นป่วนแบบ curl-noise มาก่อน ทำให้รู้สึกได้เลยว่าเราเรียนรู้อะไรใหม่ ๆ ทุกวัน
    • ใน CFD ภาคอุตสาหกรรม เราจัดการกับค่า Reynolds number สูง ดังนั้นการใส่ noise เพื่อชดเชย numerical dissipation ที่เกิดจากวิธีเชิงตัวเลขจึงไม่ใช่สิ่งที่พึงประสงค์ ที่จริงแล้วหลายคนต้องการ artificial dissipation เพื่อทำให้การจำลองที่ค่า Reynolds number สูงมีเสถียรภาพมากขึ้น ความต้องการของวงการคอมพิวเตอร์กราฟิกส์ให้ความสำคัญกับการทำให้ภาพ "ดูถูกต้อง" มากกว่าความถูกต้องทางฟิสิกส์
  • มีการพูดถึงการจำลองไฟและควันสำหรับเกม รวมถึงการจำลองของไหลบน GPU ทำให้สงสัยว่าถ้าต้องรันเอฟเฟ็กต์พวกนี้ในเกม GPU จะไม่ยุ่งอยู่แล้วหรือ การแก้ปัญหา CFD ไปพร้อมกับการเรนเดอร์ดูเป็นงานหนักมาก
    • มีคำถามว่าสามารถรันการจำลองเหล่านี้บน iGPU แล้วปล่อยให้ dGPU รับงานเรนเดอร์มากขึ้นได้หรือไม่ หรือว่า iGPU อ่อนเกินไปจนสู้ย้ายไปใช้ CPU จะดีกว่า
  • มีคนบอกว่าอีกคนหนึ่งชื่อ "10 Minute Physics" อธิบายหัวข้อพวกนี้ได้ดีมาก
  • มีความเห็นจากคนที่เปลี่ยนสายจากนักคณิตศาสตร์มาเป็นวิศวกรซอฟต์แวร์ ซึ่งสนใจการจำลอง CFD และอยากเรียนรู้ด้านนี้ แม้ว่าทักษะคณิตศาสตร์อย่างเวกเตอร์แคลคูลัสหรือสมการเชิงอนุพันธ์ย่อยจะขึ้นสนิมไปมากแล้วเพราะไม่ได้ใช้มานาน
  • เพิ่งดูวิดีโอการทำ fluid simulation แบบง่าย ๆ มาเมื่อไม่นานนี้ และรู้สึกว่าน่าสนใจมาก
  • EmberGen เป็นซอฟต์แวร์ที่น่าทึ่งสำหรับการจำลองไฟและควันแบบเรียลไทม์บน consumer GPU และรองรับ workflow แบบ node-based ทำให้สร้างเอฟเฟ็กต์ใหม่ ๆ ได้ง่าย
    • workflow ได้รับการปรับปรุงจนงานที่เคยใช้เวลาหลายชั่วโมงเสร็จได้ภายในไม่กี่นาที
    • มีการแสดงความผิดหวังเล็กน้อยที่ EmberGen ไม่ได้รับความสนใจมากนักบน Hacker News (เป็นความเห็นจากลูกค้าที่พึงพอใจซึ่งไม่เกี่ยวข้องกับ EmberGen/JangaFX)
  • แม้จะไม่ใช่ประเด็นหลักของบทความ แต่มีความเห็นว่าบทนำที่บอกว่าการเลือกใช้ simulation คือการยอมเสีย artistic control และต้องไปต่อรองกับชุดคอนโทรลจำนวนมหาศาลที่ชวนให้ปวดหัวนั้นค่อนข้างไม่ถูกต้อง
    • สำหรับฉากสำคัญอย่าง Balrog คงไม่เลือกใช้ simulation แต่จะเลือกควบคุมทุกเฟรมอย่างสมบูรณ์แทน
    • แต่ถ้าเป็นตัวอย่างแฟนตาซีแบบ Tolkien อย่างฉากวิวที่มีแม่น้ำคดเคี้ยวหลายโค้ง มีโขดหินอยู่บ้าง และมีปลากระโดดขึ้นมาบางครั้ง แบบนี้เหมาะกับ simulation มากกว่า
  • แม้จะมี RAM 64GB ก็ยังเจอปัญหาว่าหน้านี้ทำให้แท็บปิดตัวลงไปเลย
  • มีลิงก์วิดีโอที่อธิบายได้ดีว่าทำไมเอฟเฟ็กต์ระเบิดในคอมพิวเตอร์กราฟิกส์ถึงดูแย่
  • รู้สึกประทับใจกับเอาต์พุตของเทมเพลตและระบบสร้างหน้าเว็บของ distill.pub มาก และเสียดายที่มันถูกยุติในปี 2021 จึงไม่มีการดูแลต่อแล้ว