จะสร้างถ้ำที่มีลักษณะคล้ายกับ Minecraft ได้อย่างไร?


34

ฉันทำงานในโลกแห่งกระบวนการสามมิติมาระยะหนึ่งแล้วและต้องการเริ่มเพิ่มระบบถ้ำ ขณะนี้ฉันใช้เสียงเพอร์ลิน 2D / 3D สำหรับการสร้างภูมิประเทศร่วมกับ Marching Cubes เพื่อภูมิประเทศที่ราบรื่น ฉันเพิ่งจะนิ่งงันเมื่อมันมาถึงถ้ำที่เชื่อมต่อถึงกันเป็นเวลานาน

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

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

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

ตัวอย่างที่ดี: ป้อนคำอธิบายรูปภาพที่นี่


5
ลองดูที่นี่แล้วเลื่อนลง
William Mariager

มีปัญหานิตยสารผู้พัฒนาเกมในช่วง 24 เดือนที่ผ่านมาซึ่งมีการพูดคุยอย่างลึกซึ้งเกี่ยวกับวิธีการทำสิ่งที่คุณพยายามทำ ฉันจะกดไซต์ของพวกเขา
Joey Green

@ โจอี้กรีนนิตยสารชื่ออะไร? หรือคุณมีลิงค์ไปยังเว็บไซต์ของพวกเขา
jumpnett

1
มันเรียกว่านิตยสารผู้พัฒนาเกม gdmag.com คุณสามารถสมัครสมาชิกและรับนิตยสาร pdf ในช่วง 10 ปีที่ผ่านมา หากคุณสมัครใช้งานมีวิธีการค้นหาปัญหาก่อนหน้าและค้นหาปัญหาที่คุณต้องการ
Joey Green

คำตอบ:


30

ถ้ำของ Minecraft นั้นสร้างโดยวิธี "perlin worms" เครื่องกำเนิดงูผ่านภูมิประเทศและถ้ำออกอุโมงค์ Minecraft ไม่ได้ใช้เสียงเพอร์ลิน 3 มิติสำหรับการสร้างถ้ำเพราะมันมีแนวโน้มที่จะทิ้งกระเป๋าที่ไม่ได้เชื่อมต่อไว้ในภูมิประเทศ ถ้ำ Minecraft ยังไม่ได้ถูกสร้างขึ้นจากสัญญาณรบกวน 3 มิติของ Perlin ตั้งแต่ต้นรุ่นอัลฟ่า

นี่คือถ้ำในGnomescroll ที่สร้างขึ้นจากวิธี "perlin worm"

Gnomescroll Cave System มุมมองบุคคลที่หนึ่ง 1

Gnomescroll Cave System มุมมองบุคคลที่หนึ่ง 2

Gnomescroll Cave System มุมมองบุคคลที่สาม 2

นี่คือ libnoise "Perlin Worms" จากบทช่วยสอน libnoise เทคนิคนี้สร้างถ้ำที่สร้างขึ้นใน Minecraft อย่างใกล้ชิด

Linoise บทช่วยสอน Perlin Worms

พารามิเตอร์ที่มีผลต่อการเปลี่ยนแปลงคุณภาพของระบบถ้ำและพิจารณาว่าถ้ำเป็นแนวตั้งและเปลี่ยนทิศทางอย่างไร ถ้ำในสาขา minecraft และรัศมีของอุโมงค์ถ้ำนั้นมีความหลากหลายตามความยาวของถ้ำ

Minecraft สร้างถ้ำเป็นชิ้น ๆ โดยพื้นฐาน วิธีการที่ต้องการนั้นซับซ้อนและไม่มีใครสามารถย้อนกลับตัวสร้างถ้ำของ Minecraft ได้อย่างสมบูรณ์แบบแม้จะได้รับความสนใจจากผู้ดูแลเซิร์ฟเวอร์

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


3
คุณสามารถเพิ่มข้อมูลหรือแหล่งข้อมูลเพื่อเรียนรู้เกี่ยวกับสิ่งนี้ "perlin worms" ได้หรือไม่?
David Gouveia

1
นี่คือการสอนเกี่ยวกับ "perlin Worms" libnoise.sourceforge.net/examples/worms/index.html
HaltingState

ไม่จำเป็น แต่ถ้าคุณสามารถอธิบายรายละเอียดในย่อหน้าสุดท้ายได้ฉันก็ขอขอบคุณอย่างยิ่ง ในการสร้างเวิร์มฉันคิดว่าคุณต้องมีจุดเริ่มต้นต่อเวิร์มซึ่งจะต้องอยู่ในกลุ่ม N ของผู้เล่นที่ N คือความยาวสูงสุดของเวิร์ม
Mythics

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

อาจจะไม่ใช่สิ่งที่ฉันอยากได้ยิน แต่สิ่งที่ฉันคาดหวัง ขอขอบคุณอีกครั้ง HaltingState :)
Mythics

7

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


ฉันอาจจะไม่เข้าใจสิ่งที่คุณหมายถึงโดยสิ่งนี้ แต่ฉันจะทำสิ่งนี้ในการบินโดยก้อนที่โลกสร้าง?
Mythics

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

1
วิธีแก้ปัญหาอื่น (ง่ายขึ้น) ถึงแม้จะไม่ค่อยมีประสิทธิภาพและอาจ "noisier" ก็คือการใช้การเคลื่อนไหวแบบบราวเนียนเพื่อแกะสลักเส้นทาง
Gavan Woolery

2

นิตยสาร Game Developer Magazine เดือนเมษายน 2554 มีรายละเอียดเกี่ยวกับเรื่องนี้ด้วยฟังก์ชั่นเสียงรบกวน Perlin ซ้ำ ๆ - ดูบทความ Creator of Worlds ที่เริ่มต้นในหน้า 21


พวกเขาแสดงภาพหน้าจอสำหรับแต่ละขั้นตอน (ฟังก์ชั่น) และแสดงรูปแบบต่าง ๆ
quantumpotato

1

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

หากคุณไม่ต้องการใช้หลายฟังก์ชั่นเสียงรบกวนคุณสามารถโพรบในระยะทางที่ไกลกว่า - ตัวอย่างเช่นแทนที่จะทำ Noise3d (2,2,2) สำหรับอันที่ (2,2,2) ทำ Noise3d (2,2, 16) และใช้ (2,2,16) สำหรับหนึ่งค่า (2,2,17) สำหรับค่าที่สอง ฯลฯ จากนั้นเพียงแค่ปรับความถี่ของคุณตามนั้นเพื่อให้ค่าทั้งหมดเป็นอิสระหรือสัมพันธ์กันในระดับสั้น ๆ

หากต้องการเปลี่ยนแปลงความหนาแน่นของถ้ำอย่างทั่วถึงให้ใช้ฟังก์ชันอื่นที่มีความถี่ต่ำกว่าซึ่งจะมีผลต่อค่าที่กล่าวไว้

ในกรณีที่ผลลัพธ์เป็นถ้ำที่ยุ่งเหยิงเพียงเพิ่มระยะทางของจุดเชื่อมต่อที่กล่าวถึงหรือปรับแต่งอัลกอริทึม

ฉันไม่แน่ใจว่า Minecraft ทำถ้ำเช่นนี้หรือไม่ (แม้ว่าฉันคิดว่าเป็นเช่นนั้น) แต่วิธีการแก้ปัญหานี้ควรให้ผลลัพธ์ที่น่าพอใจ


-5

ที่นี่คือ

แม้ว่าถ้ำส่วนใหญ่เช่นที่กล่าวมาจะใช้หนอน Perlinแต่บางคนก็อยากทำด้วยตนเอง วิธีนี้พวกเขาสามารถทำให้เป็นแบบที่พวกเขาต้องการบล็อกสำหรับบล็อก ถ้ำที่สร้างโดยใช้หนอน Perlinอาจไม่ถูกต้องและอาจทำให้ถ้ำมีความสูง 5 ฟุตและกว้าง 6 ฟุตเท่านั้นซึ่งอาจไม่ถูกต้องเนื่องจากคุณอาจต้องการความสูง 10 ฟุตและ 15 ฟุต

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