ปัญหาของน้ำ
- เกมส่วนใหญ่ไม่สามารถปรับเปลี่ยนภูมิประเทศได้ ซึ่งก็สมเหตุสมผล เพราะไม่ใช่ทุกเกมที่ต้องการสิ่งนี้
- ในเกมที่มีน้ำ ต้องคิดว่าจะจัดการการไหลของน้ำอย่างไร
- โมเดลง่าย ๆ ที่มีอยู่เดิมยังไม่น่าพอใจ จึงต้องมีการศึกษาค้นคว้าเพื่อหาโมเดลที่ดีกว่า
การตั้งค่า
- การจำลองต้องทำงานบนกริด และควรใช้กริดเดียวกับภูมิประเทศ
- ขนาดเฉลี่ยของการจำลองควรอยู่ที่ประมาณ 1 เมตร
- สามารถสมมติน้ำเป็นฟิลด์ความสูงบนภูมิประเทศได้ และน้ำจะไม่ไหลในแนวดิ่ง
- น้ำต้องสามารถไหลได้ และต้องไม่หายไปอย่างน่าอัศจรรย์เพราะความผิดพลาดของการจำลอง
- การจำลองควรมีเสถียรภาพที่ควบคุมได้ และต้องทำงานได้รวดเร็ว
สิ่งที่ไม่ใช่คำตอบ
- Smoothed Particle Hydrodynamics ให้ผลลัพธ์ที่น่าประทับใจมาก แต่แก้ปัญหาคนละแบบ
- Stable Fluids ของ Jos Stam จัดการกับปริมาตรของไหลทั้งหมด และทำงานได้ไม่เร็ว
สมการน้ำตื้น
- สมการน้ำตื้นทำการเฉลี่ยในแนวดิ่ง ทำให้เหลือสมการแบบ 2D
- ส่วนที่ว่า "ตื้น" หมายถึงการสมมติว่าขนาดในแนวดิ่งโดยทั่วไปของคอลัมน์น้ำนั้นเล็กกว่ามาตราส่วนในแนวนอนมาก
กริด
- ในพลศาสตร์ของไหล กริดมีความสำคัญ และโดยทั่วไปจะใช้ staggered grids
- staggered grids จะเก็บความสูง/ความหนาแน่นของน้ำไว้ในเซลล์สี่เหลี่ยม และเก็บความเร็วไว้ที่ขอบระหว่างเซลล์
วิธีท่อเสมือน
- จำลองการไหลของน้ำโดยสมมติว่าเซลล์น้ำเชื่อมต่อกันด้วยท่อเสมือน
- ประกอบด้วยสามขั้นตอน: การเร่งการไหล, การสเกลการไหลออก, และการอัปเดตคอลัมน์น้ำ
การเร่งการไหล
- เร่งการไหลตามความต่างของระดับน้ำระหว่างเซลล์น้ำที่อยู่ติดกัน
- เพิ่มแรงเสียดทานเพื่อให้การจำลองลู่เข้าสู่สภาวะที่เสถียร
การอัปเดตคอลัมน์น้ำ
- สำหรับแต่ละเซลล์น้ำ ให้เพิ่มหรือลดน้ำตามการไหลที่อยู่ติดกัน
การสเกลการไหลออก
- ปรับการไหลออกเพื่อไม่ให้ปริมาณน้ำในเซลล์กลายเป็นค่าติดลบ
ระดับความสูงของภูมิประเทศ
- เพิ่มระดับความสูงของภูมิประเทศเพื่อให้น้ำเคลื่อนที่ไปบนภูมิประเทศ
เงื่อนไขขอบเขต
- ต้องพิจารณาว่าเกิดอะไรขึ้นที่ขอบของการจำลอง
- กำหนดค่าการไหลที่ขอบเขตเพื่อระบุเงื่อนไขอย่างกำแพง การไหลเข้า การไหลออก เป็นต้น
ความหนืด
- เพิ่มความหนืดเพื่อให้ชั้นน้ำที่บางมากเคลื่อนที่ได้ยากขึ้น
โค้ดการจำลองทั้งหมด
- โค้ดการจำลองประกอบด้วยลูป
for 4 ชุดที่ทำงานกับอาร์เรย์ 2D ไม่กี่ชุด
ข้อเสียของโมเดล
- ไม่มีความเฉื่อยและการแพร่ของความเร็ว ดังนั้นเมื่อน้ำที่ไหลเร็วไหลเข้าสู่ทะเลสาบ มันจะกระจายออกไปทุกทิศทาง
โบนัส: กริดหกเหลี่ยม/สามเหลี่ยม
- สามารถใช้งานกริดสามเหลี่ยมเพื่อจำลองน้ำได้ ซึ่งมองได้ว่าเป็น dual ของกริดหกเหลี่ยม
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
กล่าวถึงปัญหาในงานจำลองของไหลที่น้ำสะสมและส่งผลต่อเซลล์ข้างเคียง ซึ่งเป็นหนึ่งในเหตุผลที่ทำให้การทำงานแบบขนานในเกมที่สร้างแบบ procedural ทำได้ยาก
กล่าวถึงความเสี่ยงที่จะเสียเวลาไปกับการนั่งดูผลลัพธ์ที่สวยงามระหว่างพัฒนางานจำลองของไหล
กล่าวถึงวิธีเก็บทรัพยากรใน Animal Crossing ว่ามีประสิทธิภาพโดยไม่ต้องปรับเปลี่ยนภูมิประเทศ
กล่าวถึงว่า physics ของน้ำในเกม Timberborn เป็นองค์ประกอบสำคัญของเกม และแนะนำเกมนี้
แบ่งปันประสบการณ์ทดลองอัลกอริทึมที่นำไปทำเป็น 3D โดยใช้ o3-mini-high
แนะนำงานจำลองน้ำท่วมเพื่อการศึกษา โดยใช้ WebGL คำนวณค่าของแต่ละเซลล์จากเซลล์ข้างเคียง
เสนอวิธีแก้ปัญหาการขาด inertia และการแพร่ของความเร็วในการจำลองน้ำ
แบ่งปันความสนใจเกี่ยวกับงานจำลองการกัดเซาะที่เริ่มต้นจากโปรเจกต์ส่วนตัว
กล่าวถึงไอเดียจำลองน้ำในเกม Creeper World แล้วค่อยทิ้งระเบิดหลังจากนั้น