ฉันจะสร้างภูมิประเทศสไตล์ Worms ได้อย่างไร


48

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

ป้อนคำอธิบายรูปภาพที่นี่

ฉันคิดว่าการสร้างภูมิประเทศครั้งแรกด้วยเสียงเพอร์ลินคลาสสิคจากนั้นก็เอาชิ้นส่วนออกเพื่อสร้างถ้ำและอะไรที่ไม่ใช่ มีทางเลือกอื่นในการสร้างภูมิประเทศเช่นนี้หรือไม่?


สีแดงแสดงถึงถ้ำหรือเป็นเพียงส่วนหนึ่งของภูมิประเทศหรือไม่?
Richard Marskell - Drackir

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

@Drackir แก้ไขภาพ
Xeon06

ที่เกี่ยวข้อง: gamedev.stackexchange.com/questions/6721/ … (แต่ไม่ซ้ำกันเนื่องจากดูเหมือนว่าจะมุ่งเน้นไปที่การใช้งานกับอัลกอริทึมการสร้าง)
Josh

@JoshPetrie แน่นอน ฉันดีกับการทำลายล้าง เป็นรุ่นที่ฉันมีปัญหา
Xeon06

คำตอบ:


51

ฉันขอแนะนำให้คุณเริ่มต้นด้วย 2D Perlin-noise บางสิ่งเช่นนี้

Perlin เสียงรบกวน

จากนั้นใช้ธรณีประตูบนภาพเพื่อให้คุณได้เกาะที่โดดเดี่ยวหลายแห่งดังที่แสดงไว้ที่นี่:

เสียง perlin กับเกณฑ์

ฉันเลือกขีด จำกัด 0.04 ทุกอย่างที่อยู่เหนือขีด จำกัด จะเป็นสีน้ำเงิน ส่วนที่เหลือเป็นสีดำ หลังจากนั้นก็ถึงเวลากำหนดว่า "เกาะ" ใดที่ควรเก็บไว้และจะทิ้งที่ไหน

แนวทางที่เป็นไปได้คือการวิ่งผ่านภาพจากซ้ายไปขวาที่ระดับความสูงต่าง ๆ และเลือก "เกาะ" ที่ตัดกันตามความน่าจะเป็น ในภาพตัวอย่างเส้นต่ำสุดมีความน่าจะเป็น 100% ดังนั้นทุกเกาะที่ข้ามจะถูกเลือก (เติมสีขาว) บรรทัดที่สองมีความน่าจะเป็น 50% และบรรทัดบนสุดมีความน่าจะเป็น 10%

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

หมู่เกาะที่ขยาย

และมีภูมิทัศน์ที่เป็นไปได้

"ความละเอียด" ของเสียงจะเป็นตัวกำหนดว่ารายละเอียดเล็ก ๆ น้อย ๆ ในโลกของคุณจะเป็นอย่างไร ดังนั้นจึงควรทดสอบค่าเหล่านี้

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


ขอบคุณมากสำหรับคำตอบที่ละเอียดและภาพประกอบ! นี่คือสิ่งที่ฉันจะทำ
Xeon06

คุณมีเคล็ดลับเกี่ยวกับการสร้างเสียงเพอร์ลินเช่นนี้ด้วยรายละเอียดระดับนี้และเช่นนั้นหรือไม่? ฉันพยายามมาทั้งเย็นแล้วและไม่ได้ไปไหน
Xeon06

@ Xeon06 ผมก็แค่ใช้ฟังก์ชั่น Perlin เสียงให้โดยแฟลช พารามิเตอร์ใช้24สำหรับbaseXและbaseY1 อ็อกเทฟและฉันเลือกที่จะส่งเสียงระดับสีเทาและปิดการใช้งาน "เศษส่วน" คุณใช้ภาษานี้ในภาษาอะไร
bummzack

ฉันกำลังใช้งาน JavaScript ฉันเฆี่ยนตีเว็บเพื่อการใช้งานที่ดีซึ่งจะให้ผลลัพธ์ที่คล้ายกันเป็นเวลาหนึ่งสัปดาห์ แต่ไม่พบสิ่งใดเลย
Xeon06

ฉันได้ตั้งคำถามเพิ่มเติมเกี่ยวกับส่วนของเสียงperlin อีกครั้ง gamedev.stackexchange.com/questions/20880/fast-noise-generation
Xeon06

6

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


โอ้ฉันคิดว่าฉันเข้าใจแล้ว ฉันต้องใช้เสียงเพอร์ลิน 2 มิติไม่ใช่ 1D คุณสามารถอธิบายอย่างละเอียดเกี่ยวกับการกรองดังกล่าว?
Xeon06

2
ฉันไม่สามารถโพสต์รูปภาพได้ในตอนนี้ แต่ฉันกำลังพูดถึงตัวกรองขีด จำกัด อย่างง่ายหาก (0.3> pixelValue> 0.5) KeepIt (); บิต 'ระมัดระวัง' นั้นเกี่ยวกับการได้ 0.3 และ 0.5 ถูกต้อง คุณอาจมีการไล่ระดับสีแบบเชิงเส้น (หรือไม่ก็ได้) เริ่มต้นด้วยอัลฟาสูงที่ด้านบนค่อยๆเป็น 0 ที่ด้านล่างดังนั้นคุณจึงมีที่ว่างสำหรับท้องฟ้าและพื้นดินส่วนใหญ่เต็มไปด้วย หวังว่าจะช่วย
Ravachol

@Ravachol ถ้าคุณโพสต์ลิงก์ไปยังรูปภาพใครบางคนที่มีตัวแทนเพิ่มเติมสามารถเพิ่มไปยังโพสต์ของคุณได้
Richard Marskell - Drackir

"if (0.3> pixelValue> 0.5)" ฉันเดาว่านี่เป็นเพียงการพิมพ์ผิด แต่มันอาจสร้างความสับสนในการโพสต์สิ่งที่คุณโพสต์ ... คุณช่วยแก้ไขได้ไหม?
jcora

ฉันดูเหมือนจะไม่สามารถแก้ไขความคิดเห็น อ่าน "if (0.3 <pixelValue <0.5)" อย่างชัดเจน
Ravachol

4

ฉันใช้งานจริงนี้เริ่มต้นจากคำตอบที่ดี bummzack

นี่คือขั้นตอนที่ฉันลงเอยด้วย:

  1. สร้างภาพด้วยสัญญาณรบกวน Perlin
  2. เติมเต็มสถานที่ที่คุณต้องการภูมิประเทศ
  3. การขยาย + การกัดเซาะเพื่อลบโพรงที่เล็กเกินไป
  4. ลบภูมิภาคพื้นหลังที่เหลืออยู่ภายในภูมิประเทศ
  5. การลดรอยหยัก

และนี่คือตัวอย่างของผลลัพธ์: ตัวอย่างของภูมิประเทศที่สร้างขึ้น

ฉันเขียนบทความโดยละเอียดเกี่ยวกับกระบวนการทั้งหมดที่นี่และรหัส (JavaScript) เป็นโอเพ่นซอร์สตรวจสอบว่าคุณต้องการบางสิ่งพร้อมใช้หรือไม่;)

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