ฉันกำลังมองหาอินพุตใด ๆ เกี่ยวกับการจำลองน้ำในแบบ 2 มิติเทียบกับอาร์เรย์ที่มีขนาดใหญ่กว่า (เรียกว่า) ถูกบล็อก / ไม่ถูกบล็อก (ดูจากด้านข้าง) ฉันคิดตามแนวคิดต่อไปนี้:
Cell Automata
ทำแบบจำลอง parralel อย่างหนาแน่นบน CPU ที่ใช้ออโตเซลล์ ด้วยกฎที่ง่ายเหมือน:
- หากมีเซลล์เปิดอยู่ให้เลื่อนไปด้านล่างสุดไปเลย
- ตรวจสอบเซลล์ซ้ายและขวาเลือกสุ่มหนึ่งจากสองและย้ายไป
ข้อดี
- ใช้งานง่าย
- มีความหมาย / เสื่อมในระบบผู้เล่นหลายคน
จุดด้อย
- อาจช้าจริง ๆ
- ไม่น่าเชื่อ
Fluid Dynamics บน GPU
ทำการประมาณคร่าวๆของพลศาสตร์ของไหลบน GPU กับพื้นผิวดังนี้:
+------+-----+-----+-------+
|R |G |B |A |
+------+-----+-----+-------+
|vX |vY |NULL |Density|
+------+-----+-----+-------+
ข้อดี
- น่าจะเร็วจริงๆ
- อาจจะค่อนข้างน่าเชื่อ
- Pixel Shader เพิ่มเติมสามารถแสดงผลได้โดยตรง
จุดด้อย
- ใช้งานยาก
- ปรับแต่งได้ยาก
- ฉันไม่สามารถจัดสรรขนาดพื้นผิวในระดับเดียวได้
- ฉันสามารถซ้อนพื้นที่กริดได้ แต่สิ่งนี้จะเพิ่มความซับซ้อนมากขึ้น
อนุภาค
ใช้อนุภาคเพื่อจำลองน้ำ ในระหว่างการเรนเดอร์โดยใช้การผสมแบบเติมแต่งแล้วใช้ฟังก์ชั่นการคูณกับช่องอัลฟาเพื่อให้ขอบน้ำมีความคมชัด
ข้อดี
- อาจจะดูดี
- ใช้งานง่าย
- ง่ายต่อการแสดงผล
- มีความหมายในระบบผู้เล่นหลายคนแม้ว่าจะต้องใช้แบนด์วิธค่อนข้างน้อยในการถ่ายโอน
จุดด้อย
- ผลกระทบระหว่างอนุภาคอาจจะช้า (การค้นหาพื้นที่ใกล้เคียง)
- อาจนำไปสู่การ 'รั่ว' ของน้ำผ่านช่องว่างที่เป็นของแข็ง (เพราะพื้นที่ของแข็งมีขนาดเล็กเช่น 1px)
- อาจนำไปสู่หลุมแปลก ๆ ในน้ำขึ้นอยู่กับขนาดของอนุภาค
- ทั้งสองข้อสามารถบรรเทาได้โดยอนุญาตให้อนุภาคเข้ามาใกล้กันมากกว่าขนาดจริงอย่างไรก็ตามจะทำให้เกิดปัญหากับประสิทธิภาพของอนุภาคและแนวนอน / แนวนอน
มีความคิดเพิ่มเติมหรือไม่
หมายเหตุ:นี่คือการประมาณฉันไม่ได้มองหาน้ำที่ถูกต้องทางร่างกายที่นี่ - สิ่งที่ 'ดีพอ' (คะแนนโบนัสสำหรับรวดเร็วและสกปรก) เกมนี้เป็นแบบผู้เล่นหลายคนดังนั้นน่าเสียดายที่ทั้งระดับต้องได้รับการจำลองอย่างต่อเนื่อง