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


20

ฉันสามารถพันหัวของฉันไปรอบ ๆ โดยใช้ฟังก์ชั่นเสียงรบกวน 2d perlin เพื่อสร้างมูลค่าความสูง แต่ฉันไม่เข้าใจว่าทำไมฟังก์ชั่นเสียงรบกวน 3d perlin จะถูกนำมาใช้ ในบล็อกของ Notch http://notch.tumblr.com/post/3746989361/terrain-generation-part-1เขากล่าวถึงการใช้ฟังก์ชั่นลดเสียงรบกวน 3 มิติสำหรับการสร้างภูมิประเทศบน Minecraft ไม่มีใครรู้วิธีการที่จะทำและทำไมมันจะมีประโยชน์หรือไม่ หากคุณผ่านค่า x, y, และ z นั่นไม่ได้หมายความว่าคุณมีความสูงอยู่แล้ว?

คำตอบ:


19

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


14

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

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

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

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


8

เสียง 3 มิติจะกลายเป็นสิ่งจำเป็นหากภูมิประเทศต้องการเครือข่ายถ้ำและสิ่งที่แขวนอยู่

เมื่อต้องการแยกไอโซเซอร์เฟซจากข้อมูลความหนาแน่นเทคนิคที่ได้รับความนิยมสูงสุด 2 อย่างคือ Marching Cubes (MC) และ Dual Contouring (DC) ที่ใหม่กว่า โครงสร้างข้อมูลที่ต้องการแตกต่างกันมากขึ้นอยู่กับวิธีที่เลือก

ดังที่ได้กล่าวไว้ก่อนหน้าบทความ GPU Gems 3 ของ Geiss เป็นจุดเริ่มต้นที่ให้คำแนะนำอย่างมากสำหรับการทำความเข้าใจและการนำ MC terrains มาใช้กับ GPU (โปรดทราบว่าวิธีการ MC ของเขาทำงานบน GPU ทั้งหมดและต้องการอย่างน้อย SM4 - GS-)

เนื่องจากข้อมูลความหนาแน่นบน MC voxels สามารถอยู่บนขอบของ voxel เท่านั้น MC แบบคลาสสิกอาจปรับระดับเสียงโดยไม่คงคุณลักษณะขอบที่คมไว้ไว้ DC ไม่ได้รับผลกระทบใด ๆ เนื่องจากข้อมูลความหนาแน่นถูกแสดงเป็นจุด 3 มิติ (ตัวย่อ QEF) วางที่ใดก็ได้ภายใน voxel พร้อมเครื่องหมายที่แต่ละมุม

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

http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf

http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf

เพื่อนคนนี้ยังเสนอแนวทางที่สะอาดกว่าโดยอาศัยการวิเคราะห์แบบนูน / เว้าเพื่อหลีกเลี่ยงการแยกตนเอง เขาใช้กฎแยกสี่เหลี่ยมที่ดีกว่าเพื่อช่วยรักษาทิศทางของขอบ:

http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf

MC แบบดั้งเดิมนั้นไม่ได้ออกมานอกกรอบ "ปราศจากการแตกร้าว" และอาจต้องทำการแก้ไขรอยแตกหากวิ่งบนแปดเดือนที่ไม่มีข้อ จำกัด DC ไม่ประสบปัญหานี้ครั้งสุดท้าย

นี่คือการสำรวจที่ดีและสมบูรณ์แบบของเทคนิคการสกัดแบบตาข่ายส่วนใหญ่: http://www.cs.berkeley.edu/~jrs/mesh/

วิธี octree / voxel นั้นเป็น "CSG-friendly" ซึ่งทำให้ง่ายในการวางแผนกลยุทธ์ระดับเกมที่ "ทำลายได้" อย่างสมบูรณ์แบบ แต่ถ้าจำเป็นต้องใช้ทั้งหมดนี้ในเกมความลึกแปดจะต้องเป็น frustum -dependent

หากเนื้อหาทั้งหมดพอดีกับหน่วยความจำหรือสตรีมอย่างถูกต้องข้อมูลยังสามารถใช้สำหรับการแสดงผล AO และการคำนวณฟิสิกส์ / การชน


"เสียง 3 มิติกลายเป็นสิ่งจำเป็นหากภูมิประเทศต้องการเครือข่ายถ้ำและสิ่งที่แขวนอยู่" บังคับ? เช่นเดียวกับในนี้เป็นวิธีเดียวที่จะสร้างถ้ำและยื่นออกมา? Nope ฉันกำลังสร้างแผนที่ความสูงจากเสียงเพอร์ลิน 2D แล้วแกะสลักถ้ำและยื่นเข้าไปในนั้นเป็นขั้นตอนที่แยกต่างหากเพื่อให้ดูเป็นธรรมชาติยิ่งขึ้น มันทำให้เข้าใจผิดกับนักพัฒนาเกมรุ่นหนุ่มที่จะบอกว่านี่เป็นวิธีเดียวที่จะสร้างถ้ำและยื่นในโลกที่สร้างขึ้นตามขั้นตอน
Domarius

5

โดยเฉพาะอย่างยิ่งในการเดาของฉันคือเขาใช้ค่า z เพื่อกำหนดประเภทของวัสดุ: ข้อเท็จจริงหินหินดินหรืออากาศ


-3

Minecraft ใช้อัลกอริทึมลูกบาศก์เดินทัพเพื่อสร้างภูมิประเทศ 3 มิติ ฉันไม่มีการอ้างอิงถึงสิ่งนี้ฉันขอโทษ ฉันไม่แน่ใจว่าสิ่งที่ Notch พูดถึงเมื่อเขาพูดถึงฟังก์ชั่น Perlin Noise - อาจเป็นเมล็ดพันธุ์สำหรับอัลกอริธึมลูกบาศก์เดินขบวน ข้อมูลเพิ่มเติมที่นี่:

และบทความ GPU Gems ที่ยอดเยี่ยมหากคุณสนใจเดินขบวนลูกบาศก์:


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

-6
for (int x = 0; x < Width) 
{
  for (int y = 0; y < Depth) 
  {
    for (int z = 0; z < Height) 
    {
      if(z < Noise2D(x, y) * Height) 
      {
        Array[x][y][z] = Noise3D(x, y, z)
      } else {
        Array[x][y][z] = 0
      }
    } 
  } 
} 

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

ฉันแก้ไขโค้ดแล้วตอนนี้ล่ะ?
Maxim DC

มันอธิบายวิธีการใช้เสียง 3 มิติเพื่อสร้างภูมิประเทศสิ่งนี้ถูกต้องในความคิดของฉัน
Maxim DC

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