อัลกอริทึมที่ดีสำหรับรูปแบบเมืองแบบเศษส่วนคืออะไร


19

พื้นหลัง

ฉันใช้เซิร์ฟเวอร์ Minecraft ที่ฉันจะออกแบบเมืองเริ่มต้นที่มีขนาดค่อนข้างใหญ่ ฉันมีชุดของสิ่งต่าง ๆ เช่นสัญญาณกฎและกรงม็อบฉันต้องการวางในอาคารที่นั่น เมืองนี้จะมีขนาดใหญ่มากและกระจายออกไปโดยเฉพาะอย่างยิ่งขนาด 1,000 ถึง 1,000 ช่วงตึก

ตัวอาคารจะมีลูกบาศก์หรือรอยเท้าเป็นรูปสี่เหลี่ยมผืนผ้าซึ่งมีพื้นฐานจากคิวบ์ฐานหนึ่งเช่นเดียวกับทวีคูณของ 3 บล็อก ถนนและระยะห่างระหว่างอาคารจะกว้างกว่า 5-11 ช่วงตึกขึ้นอยู่กับความสำคัญของถนน

เมื่อฉันเริ่มแผนสำหรับเมืองฉันจะรู้ว่าฉันต้องการให้อาคารมีขนาดใหญ่เพียงใดและจะมีเท่าไหร่

ปัญหา

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

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

คำถาม

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

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

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

แก้ไข ให้ชัดเจนฉันแค่มองหาเค้าโครง ณ จุดนี้เนื่องจากอาคารจะได้รับการออกแบบและสร้างขึ้นในเกม


3
Minecraft ใช้เศษส่วนหรือไม่ ฉันรู้สึกว่ามันใช้ฟังก์ชั่นลดเสียงรบกวนอย่างต่อเนื่อง (Perlin หรือ Simplex ฉันเชื่อ)
Martin Sojka

@ มาร์ติน Sojka Perlin เสียงเป็นเศษส่วนดังนั้นมี
ไม่เป็นไร

1
@Nevermind: ลักษณะการกำหนดของเศษส่วนคือความเหมือนตนเอง : หากคุณเลือกส่วนหนึ่งและปรับขนาดให้เป็นขนาดดั้งเดิมจะเป็น "คล้ายกัน" (มีโครงสร้างเดียวกัน) โดยเฉพาะอย่างยิ่งสเปกตรัมความถี่ของสัญญาณแฟร็กทัลนั้นไม่แปรเปลี่ยนไปตามขนาด ถ้าคุณทำเช่นนั้นด้วยเสียงเพอร์ลินสิ่งที่คุณจะได้รับก็คือพื้นที่ปรับขนาดของเสียงเพอร์ลิน คลื่นความถี่ก็จะเปลี่ยนเช่นกัน
Martin Sojka

@Nevermind Perlin noise จริง ๆ แล้วไม่ใช่เศษส่วน แต่การเคลื่อนไหว Brownian (ซึ่งเป็นเทคนิคที่สามารถใช้เสียง Perlin) เป็นเศษส่วนและโดยทั่วไปจะเรียกว่าเสียง Perlin
Elva

ใช่ขอโทษฉันมักจะแก้ไขคนเมื่อพวกเขาสับสนเสียง Perlin และเสียงสีชมพู แต่ที่นี่ฉันทำผิดพลาดตัวเอง การป้องกันเพียงอย่างเดียวของฉันคือ Minecraft จริง ๆ ใช้เสียงสีชมพู (ท่าทางสีน้ำตาล) เช่นกัน IIRC
ไม่เป็นไร

คำตอบ:


20

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

ตัวอย่างขั้นตอนของเมือง

ขั้นตอนวิธีการที่ใช้ในการสร้างรูปแบบนี้จะขึ้นอยู่อย่างอิสระในL-ระบบ ฉันมีElementคลาสพื้นฐานที่มีสี่เหลี่ยมทำเครื่องหมายสถานที่บนแผนที่และวิธีการGrowซึ่งสร้างอื่น ๆElementsภายในสี่เหลี่ยมและ / หรือวางวัตถุบางอย่างบนแผนที่ จากนั้นก็มีองค์ประกอบที่เกิดขึ้นจริงรับมรดกมาจากชั้นฐานนี้: City, Street, Buildingฯลฯ

การสร้างเริ่มต้นด้วยวัตถุ "เมล็ด" จำนวนหนึ่ง (ในกรณีของฉันเพียงCityองค์ประกอบเดียวที่วางแบบสุ่มบนแผนที่) จากนั้นระบบจะวนซ้ำองค์ประกอบทั้งหมดการเรียกGrowจนกว่าองค์ประกอบทั้งหมดจะไม่ทำงาน ( Growส่งคืนfalse) หรือการวนซ้ำจำนวนมากผ่านไป

เมืองในภาพถูกสร้างขึ้นโดยใช้กฎง่ายๆเพียงไม่กี่:

  • Cityกลายเป็นStreetองค์ประกอบแยกพื้นที่บางแห่ง
  • ถนนทุกสายStreetเติบโต 0-3 แยกพื้นที่เพิ่มเติม
  • นอกจากนี้Streetพยายามอย่างต่อเนื่องเพื่อให้พอดีกับขนาดสุ่มBuildingที่ด้านข้าง

ผลลัพธ์ไม่น่าสนใจอย่างมาก แต่ก็ไม่เลวเช่นกัน ระบบสามารถขยายได้อย่างง่ายดายและง่ายพอที่จะเข้าใจว่าเกิดอะไรขึ้น (-8


รักความเรียบง่าย ผมคิดว่าเมืองต่าง ๆ นั้นเป็นออร์แกนิกจริง ๆ เพราะพวกมันถูกควบคุมโดยนิติบุคคลที่พยายามสร้างความสมบูรณ์แบบตามที่ใจของมันเห็นทำให้ L-Systems น่าจะเป็นกระบวนการที่ดีที่สุด
Jonathan Dickinson

ฉันชอบมัน. =) ตอนนี้ให้ติดตั้งใน pygame ...
Ken

8

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

Googling "อาคารเชิงดำเนินการ" หรือ "เมืองเชิงดำเนินการ" จะให้บทความและบทความอื่น ๆ อีกไม่กี่หัวข้อ


1

ฉันวิ่งข้ามบทช่วยสอนที่มีรายละเอียด / ดีมากสำหรับการสร้างเมืองที่ใช้เวลาไม่นาน มีวิดีโอ @ http://www.youtube.com/watch?v=-d2-PtK4F6Y บทแนะนำอยู่บนบล็อกของผู้เขียน: http://www.shamusyoung.com/twentysidedtale/?p=2940 หวังว่านี่จะช่วยได้ amb


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