สร้างต้นไม้ 3 มิติแบบตาข่าย


16

ฉันยังไม่พบคำถามในบรรทัดเหล่านี้แก้ไขให้ฉันถ้าฉันผิด

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

มีSpeedTreeแน่นอนถ้าคุณสามารถจ่ายได้; เท่าที่ฉันสามารถบอกได้มันไม่ได้ให้ความเป็นไปได้ในการสร้าง tree tree ของคุณในขณะทำงาน จากนั้นมีSnappyTreeเครื่องมือสร้างแผนภูมิออนไลน์ webgl based โดยใช้proctree.jsซึ่งมีจาวาสคริปต์ประมาณ 500 บรรทัด

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

แต่ฉันอยากจะมีเครื่องกำเนิดตาข่ายต้นไม้ที่เชื่อมโยงได้ฟรี

การแก้ปัญหาที่เป็นไปได้:

  • พอร์ต proctree.js ไปยัง c ++ และจัดการกับใบอนุญาตโอเพนซอร์ซ (ดูเหมือนจะไม่ใช่ gpl ดังนั้นจึงสามารถทำได้ผู้เขียนอาจเต็มใจร่วมมือเพื่อทำให้ใบอนุญาตนั้นฟรีมากขึ้น)
  • ม้วนตัวเองตามระบบ L
  • อย่ากังวลเพียงใช้ต้นไม้ที่สร้างแบบออฟไลน์
  • ใช้วิธีอื่นที่ฉันยังไม่พบ

อัปเดต 2015 : สิ้นสุดการย้ายพอร์ต proctree.js ไปยัง c ++ https://github.com/jarikomppa/proctree


5
สำหรับกลิ้งของคุณเองผมอยากแนะนำหนังสือ 'ความงามของอัลกอริทึมของพืชโดย Prusinkiewicz และ Lindenmeyer ซึ่งสามารถใช้ได้ที่algorithmicbotany.org/papers/#abop หนังสือและเว็บไซต์ยังมีรายการงานวิจัยจำนวนมากเกี่ยวกับการสร้างพฤกษศาสตร์เสมือนจริง
Exilyth

ฉันสร้างเครื่องมือออนไลน์ที่เรียกว่า 3DFlora ด้วย WebGL มีพารามิเตอร์มากกว่า 80 รายการและให้คุณดาวน์โหลดผลลัพธ์เป็นไฟล์ obj คุณสามารถสร้างเกือบทุกชนิดของพืชด้วย ตรวจสอบที่นี่: 3dflora.sina-s.com
user2002741

คำตอบ:


12

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

(flash 2010)
http://genesisbbs.com/appstem.html (คลิกและลากเมาส์)
http://genesisbbs.com/appstem2.html
(directX 2006)
http://vimeo.com/5206795

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

สิ่งอื่น ๆ ที่ควรเรียนรู้:
Lichtenberg ตัวเลข
การเติบโตของ Laplacian
Voronoi ไดอะแกรม
อัลกอริทึมเพื่อนบ้านที่ใกล้ที่สุด (google พวกเขา)

ฉัน (ส่วนตัว) จะกีดกันการใช้ระบบ L- นอกเหนือจากการกำหนดไวยากรณ์สำหรับสิ่งที่เติบโตขึ้นเช่น [เมล็ด -> [ราก] / [ลำต้น -> สาขา -> [ดอกไม้ / ใบ] ระบบ L นั้นไม่ดีสำหรับการตอบสนองต่อสิ่งกระตุ้นสิ่งแวดล้อมเช่นทิศทางของแสงอาทิตย์แรงโน้มถ่วงอุปสรรค ฯลฯ

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

เครื่องสร้างต้นไม้ที่มีอยู่ส่วนใหญ่นั้นไม่ค่อยดีนัก (IMHO) นอกเหนือจากเครื่องระดับสูงที่ใช้สำหรับมายาและเช่นนั้น

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


3

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

อย่างที่กล่าวไว้คุณสามารถดูngPlantได้ มันมีแอพตัวสร้างแผนผังขั้นตอน GPL แต่ไลบรารีที่ทำหน้าที่ยกน้ำหนักทั้งหมดได้รับอนุญาตจาก BSD มันเขียนใน C ++

สำหรับการเรนเดอร์ฟอเรสต์จะมี ( Paged Geometry ) สำหรับเอ็นจิ้นเรนเดอร์Ogre


3

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

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

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


นอกเหนือจากความคิดทีละคำตอบคำตอบนี้ไม่ได้เพิ่มอะไรใหม่
Jari Komppa

3
ดีเสมอเมื่อ OP มีความกตัญญู สำหรับเว็บไซต์ QandA โพสต์ของคุณมีคำถามที่ไม่ชัดเจน นอกจากนี้คำตอบนี้ตรงกับหัวข้อย่อยของคุณ
SirYakalot

ใช่อยู่ที่นั่นด้วยตัวเองขอโทษ
Jari Komppa

1

ฉันสะดุดข้ามต้นไม้ [d] บางเวลาที่ผ่านมา ... ฉันใช้เวลาเพียงเล็กน้อยในการทดสอบโปรเจ็กต์ แต่นั่นเป็นเพียงเพราะฉันหยุดการพัฒนา - เครื่องมือให้ตัวเลือกเครื่องกำเนิดที่หลากหลายให้คุณเล่นและ จากสิ่งที่ฉันจำได้ค่อนข้างเร็ว ลิงค์อยู่ด้านล่าง

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

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


ยินดีที่ได้เห็นเครื่องกำเนิดไฟฟ้าฟรีอื่น ๆ แม้ว่าจะอยู่ในรูปแบบของห้องสมุด
Jari Komppa

1

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

http://ltrees.codeplex.com/


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