อัลกอริทึมสำหรับปริมาณน้ำฝน + การสร้างแม่น้ำในภูมิประเทศที่สร้างขึ้นแบบขั้นตอน


52

เมื่อไม่นานมานี้ฉันรู้สึกทึ่งกับสิ่งต่าง ๆ ที่สามารถทำได้กับภูมิประเทศแบบขั้นตอนและเริ่มทำการทดลองกับการสร้างโลกขึ้นมาเล็กน้อย ฉันต้องการที่จะทำให้โลกเป็นเหมือนป้อมปราการของคนแคระที่มีรายได้ที่สร้างขึ้นจากการผสานแผนที่ต่างๆเข้าด้วยกัน

ดังนั้นขั้นตอนแรกจึงถูกทำขึ้นมา การใช้อัลกอริทึม Diamond-Square ฉันได้สร้าง hieghtmaps ที่ดีบางอย่าง ขั้นต่อไปคือฉันต้องการที่จะเพิ่มคุณสมบัติของน้ำและสร้างพวกเขาค่อนข้างสมจริงกับปริมาณน้ำฝน ฉันได้อ่านเกี่ยวกับวิธีการที่แตกต่างกันสองสามอย่างเช่นเริ่มต้นที่จุดสูงสุดของแผนที่และ "ก้าว" ลงไปยังจุดต่ำสุดที่อยู่ใกล้เคียงกันการรวม / การเซาะเนื่องจากมันทำงานไปจนถึงระดับน้ำทะเล

มีอัลกอริทึมใด ๆ ที่มีเอกสารเกี่ยวกับสิ่งนี้หรือมากกว่าข้อมือ?

จะรักคำแนะนำ / ความคิดใด ๆ


ฉันใช้บิตและชิ้นส่วนจากอัลกอริทึมที่อธิบายไว้ในบทความนี้
chaosTechnician

คำตอบ:


39

Amit Patel ผู้ใช้เว็บไซต์นี้ได้สร้างแหล่งข้อมูลที่ยอดเยี่ยมเกี่ยวกับการสร้างโลกแบบสุ่มซึ่งจะเป็นประโยชน์ต่อคุณอย่างแน่นอน

นอกจากนี้ยังมีคำถาม / คำตอบที่ยอดเยี่ยมเกี่ยวกับการสร้างขั้นตอนในเว็บไซต์นี้

การสร้างถนน / แม่น้ำบนแผนที่กริด 2d

ขั้นตอนการสร้างโลกที่มุ่งเน้นไปที่คุณสมบัติการเล่นเกม

ฉันจะสร้างทะเลสาบและแม่น้ำสุ่มในเกมของฉันได้อย่างไร

การสร้างแผนที่แบบสุ่ม


35

ย้อนกลับไปเมื่อฉันทดลองสิ่งนี้ (ปลายปี 1990) ฉันอ่านเอกสารและหนังสือบางเล่มเพื่อเรียนรู้เกี่ยวกับการไหลของน้ำ แต่ฉันไม่ได้บันทึกสิ่งที่ฉันดู ฉันลงเอยทำสิ่งที่เป็นของตัวเองเพราะฉันต้องการจัดการกับการสึกกร่อน ฉันต้องการให้แม่น้ำสร้างหุบเขาและที่ราบน้ำท่วมถึง ฉันต้องการอ่างเก็บน้ำเขื่อนให้เต็มไปด้วยตะกอน ฉันต้องการให้แม่น้ำสร้างเอฟเฟกต์เช่นคดเคี้ยวและทะเลสาบ oxbow ฉันต้องการคลองเพื่อการชลประทานและการผันน้ำ ฉันต้องการน้ำท่วมเพื่อทำลายฟาร์มและบ้านเรือนในที่ราบน้ำท่วมถึง

ฉันเก็บบันทึกย่อ (ลิงก์) ไว้ในส่วนภูมิศาสตร์ของหน้านี้ มีกระดาษ Jos Stam ที่ต้องอ่าน น่าเสียดายที่ฉันไม่เคยจัดระเบียบบันทึก น่าเสียดายที่เกมนี้มีไว้สำหรับ OS / 2 ดังนั้นฉันจึงไม่สามารถให้คุณเล่นเกมที่รันได้อย่างง่ายดาย และน่าเสียดายที่รหัสของฉันแย่มาก แต่ถ้าคุณต้องการดูให้ดูwater.cpp ในซอร์สโค้ด (zip)

สิ่งที่ฉันเล่นด้วยในการจำลองของฉัน (ไม่เหมือนจริงทั้งหมด):

  • พื้นที่ใกล้แม่น้ำมีดินชื้น พื้นที่ที่อยู่ไกลจากแม่น้ำมีดินแห้ง พืชได้รับผลกระทบความชื้น พืชพรรณไหลช้าน้ำ
  • ฝนสร้างน้ำในทุกที่บางเวลา จากนั้นไหลลงเขา จากนั้นจะระเหยและถูกดูดซึมโดยพื้นดิน ฝนตกชุกแม่น้ำ
  • สปริงสร้างน้ำตลอดเวลา แต่มีเพียงไม่กี่แห่งเท่านั้น น้ำพุทำให้แม่น้ำเต็มไปด้วยช่อง ฉันไม่ได้จำลองชั้นหินหรือการไหลของน้ำใต้ดิน ฉันเพิ่งวางสปริงแบบสุ่มบนภูเขา
  • น้ำไหลมีโมเมนตัม ถ้าฉันจำได้ถูกต้องสิ่งนี้สำคัญมากที่ทำให้แม่น้ำคดเคี้ยว
  • น้ำที่เคลื่อนที่เร็วจะช่วยจับตะกอน ตะกอนที่เคลื่อนที่ช้าจะตกตะกอนก่อนหน้า แกะสลักหุบเขานี้ออกมาจากแม่น้ำ
  • ในระหว่างการสร้างแผนที่เริ่มต้นฉันเร่งการไหลของน้ำและการพังทลาย ระหว่างการเล่นเกมมันวิ่งด้วยความเร็วปกติ

โดยรวมแล้วประสบการณ์ของฉันคือทั้งหมดนี้ค่อนข้างสนุกกับการเล่น แต่มันต้องใช้การวิเคราะห์พฤติกรรมและการปรับแต่งมากมายเพื่อให้มันทำงาน ฉันไม่เคยมาถึงจุดที่ฉันสามารถพูดได้ว่าการสร้างแม่น้ำรู้สึกเป็นธรรมชาติและหลีกเลี่ยงไม่ได้โดยไม่ต้องปรับแต่ง มันสนุกมาก (ทั้งในฐานะโปรแกรมเมอร์และผู้เล่น) ที่ฉันใช้เวลาเป็นปี ๆ และไม่เคยจบเกมที่เหลือเลย :)


12
เพียงแค่พูดชื่อของเขาและเขาจะมาถึง
MichaelHouse

3
@ Byte56 เขาเหมือน Candlejack of stackexcha ....
DampeS8N

2
คุณเป็นแรงบันดาลใจให้ฉันเขียนการกระทำตามบทความตารางหกเหลี่ยมของคุณและตอนนี้คุณเป็นแรงบันดาลใจให้ฉันอีกครั้ง!
Adam Arold

1

การใช้งานส่วนใหญ่ที่ฉันเคยเห็นได้รับการรวม "แผนที่แม่น้ำ" (ใช้วงแคบจากเสียง Perlin หรือวิธีที่คล้ายกันบางอย่าง) หรือวิธี "น้ำฝน" ที่คุณพูดถึง

นี่คือจุดกระโดดออกมาไม่กี่:

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.