การสร้างถ้ำที่มีหนอน Perlin


12

ขณะนี้ฉันกำลังพยายามสร้าง Minecraft เช่นภูมิประเทศ voxel ด้วย 3D Simplex Noise และยังต้องการใช้ถ้ำ

ฉันพบวิธีการของ Perlin Worms ในชุดข้อความนี้ซึ่งสร้างผลลัพธ์ที่ดีจริงๆ อย่างไรก็ตามฉันไม่มีเงื่อนงำเกี่ยวกับวิธีสร้างเป็นชิ้นโดยพื้นฐาน เป็นไปได้หรือมีทางเลือกอื่นใดที่สร้างเวิร์มที่คล้ายกันเช่นถ้ำบนก้อนโดยพื้นฐาน?

แก้ไข: นี่คือปัญหาที่ฉันไม่ทราบวิธีการแก้ไข

แก้ไข 2: นี่เป็นผลมาจากการรวมสัญญาณรบกวน Multifractal 2 มิติกับความสูงของสัญญาณรบกวนแบบ Simplex ยังคงต้องการการปรับแต่ง แต่นี่เป็นผลลัพธ์ที่ฉันต้องการ ขอบคุณ Byte56


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

1
โดยทั่วไปนั่นคือคำถามของฉัน ภูมิประเทศพื้นฐานนั้นง่ายต่อการคำนวณด้วยพิกัดที่กำหนด แต่ฉันไม่รู้วิธีคำนวณว่ามีถ้ำหรือไม่
user000user

คำตอบ:


5

ส่วนใหญ่ขั้นตอนวิธีการ Perlin noise(x,y,z)เสียงจะช่วยให้คุณสามารถเรียกค่าเสียงที่สถานที่ใดก็ตามที่มีสิ่งที่ต้องการ เรื่องนี้ทำให้มันค่อนข้างน่ารำคาญที่จะสร้างเสียงบนก้อนโดยพื้นฐาน สิ่งที่คุณต้องทำคือส่งตำแหน่งทั่วโลกแทนตำแหน่งที่เป็นก้อน

for(int i = 0; i < CHUNKMAX_X; i++)
    for(int j = 0; j < CHUNKMAX_Y; j++)
        for(int k = 0; k < CHUNKMAX_Z; k++)
            if(isSolid(perlinNoise.get(chunkPosition.x + i,
                                         chunkPosition.y + j,
                                         chunkPosition.z + k))
                thisChunk[i,j,k] = new Voxel(solid);
            else
                thisChunk[i,j,k] = new Voxel(air);

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

perlinNoise.getรับตำแหน่งระดับโลกและส่งคืนความหนาแน่น ซึ่งisSolidจะเป็นการทดสอบง่ายๆเพื่อดูว่า voxel นั้น "มีความหนาแน่นเพียงพอ" ที่จะมีคุณสมบัติเป็นของแข็งหรือไม่

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

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


2
ขอบคุณสำหรับคำตอบ. อย่างไรก็ตามฉันไม่ทราบวิธีใช้ Perlin หรือ Simplex Noise เพื่อสร้างถ้ำที่เหมือนหนอน พวกมันอาจเป็นทรงกลมปรับขนาดในทิศทางเดียวหรือไม่นานมาก และสำหรับอัลกอริทึม Perlin Worms ฉันไม่รู้ว่าจะตรวจสอบว่าตำแหน่งปัจจุบันอยู่ภายในหนอนหรือไม่โดยไม่ทราบตำแหน่งหัว
user000user

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

การสร้างภูมิประเทศพื้นฐานด้วย 3D Simplex Noise ทำงานได้ดี แต่ฉันไม่รู้วิธีกำหนดตำแหน่ง / ส่วนของเวิร์มภายในก้อน จากสิ่งที่ฉันเข้าใจคุณให้ตำแหน่งหัวหนอนและส่วน n และคำนวณมุมระหว่างส่วนด้วยฟังก์ชั่นเสียง นี่คือภาพที่ดีกว่าอาจจะอธิบายสิ่งที่เป็นปัญหาของฉันเป็น: การเชื่อมโยง
user000user

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

ขอบคุณสำหรับคำใบ้ในเรื่องนั้น ฉันใช้งาน 3D Ridged Multifractal Noise แต่ผลลัพธ์ของมันค่อนข้างน่าพอใจ ฉันจะพยายามรวมมันเป็น 2D กับ 2D Heightmap แล้วรายงานอีกครั้ง สิ่งนี้อาจสร้างถ้ำที่เหมือนหนอนมากขึ้น
user000user

3

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

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