จะลบภูมิประเทศลอยเมื่อสร้างด้วย 3D Perlin Noise ได้อย่างไร


10

ขณะนี้ฉันกำลังใช้ 3D Perlin Noise เพื่อสร้างภูมิประเทศแบบสุ่มร่วมกับ Marching Cubes

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

ฉันอาจจะพลาดอะไรบางอย่าง แต่ด้วยการใช้ลูกบาศก์เดินกับเสียงเพอร์ลิน 3 มิติฉันจึงได้รับภูมิประเทศที่ลอยอยู่เป็นประจำ

ความคิดเห็นใด ๆ เกี่ยวกับวิธีที่ฉันสามารถแก้ไขหรือถ้ามีฟังก์ชั่นเสียงรบกวนอื่น ๆ ที่ฉันอาจใช้เพื่อให้ได้ผลลัพธ์เหมือนที่ฉันอธิบาย ฉันต้องการเนินเขา / หุบเขา / ภูเขา / ทะเลสาบ / ฯลฯ ไม่จำเป็นต้องแยกบิตที่ลอยอยู่ออกจากส่วนที่เหลือของแผนที่ ฉันเชื่อว่านี่เป็นปัญหาที่คล้ายคลึงกับสิ่งที่ Minecraft มีเมื่อมันมีภูมิประเทศที่ลอยอยู่บนท้องฟ้าเป็นครั้งคราวในรุ่นต่อไป

ขอบคุณสำหรับความช่วยเหลือ Mythics

คำตอบ:


9

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

  1. เชื่อมต่อกับฐาน
  2. เชื่อมต่อกับ voxel ที่เชื่อมต่อกับฐาน

มีแนวโน้มเริ่มต้นที่จุดเชื่อมต่อที่รู้จัก (เช่นจุดต่ำสุดของโลกของคุณ) จากนั้นการทำ travalal voxels ที่เชื่อมต่อกันครั้งแรกจะทำงานได้ค่อนข้างดี ตรวจสอบให้แน่ใจว่าคุณตั้งค่าสถานะ voxels ตามการเชื่อมต่อในขณะที่คุณไป คุณสามารถทำเช่นนี้ต่อชิ้น

นอกจากนี้ยังมีวิธีการลดค่าใช้จ่ายที่น้อยลง แต่ไม่สามารถลบภูมิประเทศที่ลอยได้อย่างสมบูรณ์

  • การไล่ระดับสีแบบลาดเอียง : คุณสามารถมีอคติการวางตำแหน่งของ voxels ที่เป็นของแข็งด้วยการไล่ระดับสี ฟังก์ชั่นการไล่ระดับสีจะลดลงอย่างรวดเร็วหลังจากที่คุณอยู่เหนือ "ระดับพื้นดิน" บทความนี้พูดถึงการใช้การไล่ระดับสีและมีเคล็ดลับเรียบร้อย ๆ

  • เสียงแผนที่ความสูง : คุณสามารถสร้างเสียงเป็นแผนที่ความสูงแทน สิ่งนี้จะลบสิ่งที่แขวนอยู่และถ้ำออก แต่คุณสามารถจำลองสิ่งเหล่านั้นด้วยชั้นเสียงรบกวนการลบเพิ่มเติม

  • เสียงดังรบกวนน้อย: ใช้อ็อกเทฟน้อยลงในเสียงภูมิประเทศของคุณและสร้างเสียงลบเพื่อให้ได้ระยะยื่นและถ้ำ


ภูมิประเทศอาจเชื่อมต่อผ่านก้อนที่อยู่ติดกันหากเป็นสิ่งที่ยื่นออกมาจากที่นั่น
Loren Pechtel

@ Loren: นั่นเป็นเรื่องที่ดีอย่างสมบูรณ์แม้ว่า ตราบใดที่เอ็นจิ้นให้คุณจัดการที่อยู่ตามดัชนีแบบเต็มมันจะทำงานได้โดยไม่มีปัญหา
Phil

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

0

มันอาจจะสายเกินไปที่จะตอบ แต่ตอนนี้ฉันเริ่มต้นด้วยสิ่งที่สร้างภูมิประเทศแบบ voxel ด้วย Perlin Noise และฉันพบวิธีที่จะสร้างภูมิประเทศโดยไม่มีชิ้นส่วนลอยเหล่านั้น ฉันคิดว่านี่อาจช่วยคุณได้ ดังนั้นในการสร้างภูมิประเทศฉันสร้างความสูงก่อนที่ฉันจะอ่านพิกเซลจากความสูงนั้น ตอนนี้มาถึงส่วนที่น่าสนใจฉันอ่านค่า "ความสว่าง" (อันที่จริงแล้วคือสีเทา) ของแต่ละพิกเซลบนความสูงและที่ให้ความสูงสำหรับส่วนเฉพาะของแผนที่แล้วสร้างภูมิประเทศที่ฉันคิดว่าความสูงนี้คือ ภูมิประเทศของฉันดูจากด้านบนดังนั้นหากค่าระดับสีเทาของพิกเซล (หลังจากถูกแมปไปยังภูมิประเทศของฉัน "maxHeight") บนแผนที่ความสูงนั้นคือสมมติว่า 30 นั่นหมายความว่าในจุดเฉพาะของภูมิประเทศของฉันฉันจะสร้าง voxels 30 แกนในแกน y และสิ่งนี้ทำให้ฉันมีภูมิประเทศที่ไม่มีส่วนลอย หากคุณต้องการถ้ำและอื่น ๆ คุณสามารถใช้เสียงอื่นบนต้นฉบับ (ใต้พื้นผิว) เพื่อสร้างถ้ำเหล่านั้น หวังว่าสิ่งนี้จะได้ผลสำหรับคุณ


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