กลับไปหน้าบทความ

อ่าน 6 นาที

การแบ่งพื้นที่ไบนารี

ใน วิทยาการคอมพิวเตอร์ การ แบ่งพื้นที่แบบไบนารี ( BSP ) เป็นวิธี การแบ่งพื้นที่ ซึ่งแบ่ง พื้นที่แบบยุค ลิด ออก เป็นสอง เซตแบบนูน โดยใช้ ระนาบไฮเปอร์ เป็นตัวแบ่ง...

การแบ่งพื้นที่ไบนารี

กระบวนการสร้างต้นไม้ BSP

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

การแบ่งพื้นที่แบบไบนารีได้รับการพัฒนาในบริบทของกราฟิกคอมพิวเตอร์ 3 มิติในปี พ.ศ. 2512 [ 1 ] [ 2 ]โครงสร้างของต้นไม้ BSP มีประโยชน์ในการเรนเดอร์เนื่องจากสามารถให้ข้อมูลเชิงพื้นที่เกี่ยวกับวัตถุในฉากได้อย่างมีประสิทธิภาพ เช่น วัตถุที่เรียงลำดับจากด้านหน้าไปด้านหลังโดยสัมพันธ์กับผู้ดู ณ ตำแหน่งที่กำหนด การใช้งานอื่นๆ ของ BSP ได้แก่ การดำเนิน การ ทางเรขาคณิตกับรูปร่าง ( เรขาคณิตของแข็งเชิงสร้างสรรค์ ) ในCAD [ 3 ]การตรวจจับการชนในหุ่นยนต์และวิดีโอเกม 3 มิติ การ ติดตามรังสีการจำลองภูมิทัศน์เสมือนจริง[ 4 ]และแอปพลิเคชันอื่นๆ ที่เกี่ยวข้องกับการจัดการฉากเชิงพื้นที่ที่ ซับซ้อน

ประวัติศาสตร์

  • ในปี พ.ศ. 2512 Schumacker และคณะ[ 1 ]ได้ตีพิมพ์รายงานที่อธิบายว่าระนาบที่จัดวางอย่างระมัดระวังในสภาพแวดล้อมเสมือนจริงสามารถใช้เพื่อเร่งการเรียงลำดับรูปหลายเหลี่ยมได้อย่างไร เทคนิคนี้ใช้ความสอดคล้องเชิงลึก ซึ่งระบุว่ารูปหลายเหลี่ยมที่อยู่ด้านไกลของระนาบไม่สามารถกีดขวางรูปหลายเหลี่ยมที่อยู่ใกล้กว่าได้ เทคนิคนี้ถูกนำไปใช้ในโปรแกรมจำลองการบินที่สร้างโดย GE รวมถึง Evans และ Sutherland ด้วย อย่างไรก็ตาม การสร้างการจัดระเบียบข้อมูลรูปหลายเหลี่ยมนั้นดำเนินการด้วยตนเองโดยนักออกแบบฉาก
  • ในปี 1980 Fuchsและคณะ[ 2 ]ได้ขยายแนวคิดของ Schumacker ไปสู่การแสดงวัตถุ 3 มิติในสภาพแวดล้อมเสมือนจริงโดยใช้ระนาบที่ทับซ้อนกับรูปหลายเหลี่ยมเพื่อแบ่งพื้นที่ 3 มิติแบบวนซ้ำ ซึ่งทำให้เกิดการสร้างโครงสร้างข้อมูลรูปหลายเหลี่ยมแบบลำดับชั้นโดยอัตโนมัติและเป็นไปตามอัลกอริทึม ซึ่งรู้จักกันในชื่อ Binary Space Partitioning Tree (BSP Tree) กระบวนการนี้เกิดขึ้นเป็นขั้นตอนการประมวลผลล่วงหน้าแบบออฟไลน์ซึ่งดำเนินการเพียงครั้งเดียวต่อสภาพแวดล้อม/วัตถุ ในระหว่างการทำงาน ลำดับการมองเห็นที่ขึ้นอยู่กับมุมมองจะถูกสร้างขึ้นโดยการท่องไปในต้นไม้
  • วิทยานิพนธ์ปริญญาเอกของ Naylor ในปี 1981 [ 5 ]ได้นำเสนอการพัฒนาอย่างเต็มรูปแบบของทั้งต้นไม้ BSP และแนวทางทฤษฎีกราฟโดยใช้ส่วนประกอบที่เชื่อมต่อกันอย่างแน่นหนาสำหรับการคำนวณล่วงหน้าเกี่ยวกับการมองเห็น ตลอดจนการเชื่อมต่อระหว่างสองวิธีนี้ มีการเน้นย้ำถึงต้นไม้ BSP ในฐานะโครงสร้างการค้นหาเชิงพื้นที่ที่ไม่ขึ้นกับมิติ โดยมีการประยุกต์ใช้ในการกำหนดพื้นผิวที่มองเห็นได้ วิทยานิพนธ์นี้ยังรวมถึงข้อมูลเชิงประจักษ์ชุดแรกที่แสดงให้เห็นว่าขนาดของต้นไม้และจำนวนรูปหลายเหลี่ยมใหม่นั้นสมเหตุสมผล (โดยใช้แบบจำลองของกระสวยอวกาศ)
  • ในปี พ.ศ. 2526 Fuchsและคณะ[ 6 ]ได้อธิบายการใช้งานไมโครโค้ดของอัลกอริทึมต้นไม้ BSP บน ระบบ บัฟเฟอร์เฟรม Ikonas ซึ่งเป็นการสาธิตครั้งแรกของการกำหนดพื้นผิวที่มองเห็นได้แบบเรียลไทม์โดยใช้ต้นไม้ BSP
  • ในปี 1987 Thibault และ Naylor [ 3 ]ได้อธิบายวิธีการแสดงรูปทรงหลายเหลี่ยมแบบใดก็ได้โดยใช้โครงสร้าง BSP แทนการใช้ b-rep ( การแสดงขอบเขต ) แบบดั้งเดิม ซึ่งให้การแสดงแบบทึบแทนการแสดงแบบพื้นผิว การดำเนินการเซตบนรูปทรงหลายเหลี่ยมได้รับการอธิบายโดยใช้เครื่องมือ ทำให้สามารถสร้างรูปทรงเรขาคณิตแบบทึบ (CSG) ได้แบบเรียลไทม์ นี่เป็นต้นแบบของการออกแบบระดับ BSP โดยใช้ " แปรง " ซึ่งแนะนำในโปรแกรมแก้ไข Quake และนำไปใช้ในโปรแกรมแก้ไข Unreal
  • ในปี 1990 Naylor, Amanatides และ Thibault [ 7 ]ได้นำเสนออัลกอริทึมสำหรับการรวมต้นไม้ BSP สองต้นเพื่อสร้างต้นไม้ BSP ใหม่จากต้นไม้ดั้งเดิมสองต้น ซึ่งให้ประโยชน์มากมาย รวมถึงการรวมวัตถุเคลื่อนที่ที่แสดงด้วยต้นไม้ BSP เข้ากับสภาพแวดล้อมคงที่ (ซึ่งแสดงด้วยต้นไม้ BSP เช่นกัน) การดำเนินการ CSG ที่มีประสิทธิภาพมากบนรูปทรงหลายเหลี่ยม การตรวจจับการชนที่แม่นยำใน O(log n * log n) และการจัดลำดับพื้นผิวโปร่งใสที่เหมาะสมในวัตถุสองชิ้นที่ซ้อนทับกัน (ได้ถูกนำมาใช้สำหรับเอฟเฟกต์การมองเห็นด้วยรังสีเอกซ์)
  • ในปี พ.ศ. 2534 Tellerและ Séquin [ 8 ]ได้เสนอการสร้างชุดที่อาจมองเห็นได้แบบออฟไลน์เพื่อเร่งการกำหนดพื้นผิวที่มองเห็นได้ในสภาพแวดล้อม 2 มิติแบบตั้งฉาก
  • ในปี 1991 Gordon และ Chen [ 9 ]ได้อธิบายวิธีการที่มีประสิทธิภาพในการแสดงผลแบบหน้า-หลังจากต้นไม้ BSP แทนที่จะใช้วิธีการแบบหลัง-หน้าแบบดั้งเดิม พวกเขาใช้โครงสร้างข้อมูลพิเศษเพื่อบันทึกส่วนต่างๆ ของหน้าจอที่วาดแล้วและส่วนที่ยังไม่ได้แสดงผลอย่างมีประสิทธิภาพ อัลกอริทึมนี้ ร่วมกับคำอธิบายของต้นไม้ BSP ในตำรากราฟิกคอมพิวเตอร์มาตรฐานในสมัยนั้น ( Computer Graphics: Principles and Practice ) ถูกนำมาใช้โดยJohn Carmackในการสร้างเกมDoom
  • วิทยานิพนธ์ปริญญาเอกของTeller ใน ปี 1992 [ 10 ]อธิบายถึงการสร้างชุดที่มองเห็นได้อย่างมีประสิทธิภาพเป็นขั้นตอนการประมวลผลล่วงหน้าเพื่อเร่งการกำหนดพื้นผิวที่มองเห็นได้แบบเรียลไทม์ในสภาพแวดล้อมรูปหลายเหลี่ยม 3 มิติแบบใดก็ได้ ซึ่งถูกนำไปใช้ในQuakeและมีส่วนช่วยอย่างมากต่อประสิทธิภาพของเกมนั้น
  • ในปี 1993 Naylor [ 11 ]ได้ตอบคำถามเกี่ยวกับลักษณะเฉพาะของต้นไม้ BSP ที่ดี เขาใช้แบบจำลองกรณีที่คาดหวัง (แทนที่จะเป็นการวิเคราะห์กรณีที่เลวร้ายที่สุด) เพื่อวัดต้นทุนที่คาดหวังของการค้นหาต้นไม้ทางคณิตศาสตร์ และใช้การวัดนี้เพื่อสร้างต้นไม้ BSP ที่ดี ตามสัญชาตญาณ ต้นไม้แสดงถึงวัตถุในลักษณะความละเอียดหลายระดับ (หรือกล่าวให้แม่นยำยิ่งขึ้นคือ เป็นต้นไม้ของการประมาณค่า) มีการเปรียบเทียบกับรหัส Huffman และ ต้นไม้ ค้นหาไบนารีเชิง ความน่าจะ เป็น
  • วิทยานิพนธ์ปริญญาเอกของ Hayder Radha ในปี 1993 [ 12 ]อธิบายวิธีการแสดงภาพ (ธรรมชาติ) โดยใช้ต้นไม้ BSP ซึ่งรวมถึงการพัฒนากรอบการสร้างต้นไม้ BSP ที่เหมาะสมที่สุดสำหรับภาพอินพุตใดๆ กรอบนี้อิงตามการแปลงภาพแบบใหม่ที่เรียกว่าการแปลงเส้นแบ่งพาร์ติชันข้อผิดพลาดกำลังสองน้อยที่สุด (LSE) (LPE) วิทยานิพนธ์ของ Radha ยังได้พัฒนา กรอบ การบีบอัดภาพ อัตราความผิดเพี้ยน (RD) ที่เหมาะสมที่สุด และวิธีการจัดการภาพโดยใช้ต้นไม้ BSP ด้วย

ภาพรวม

ตัวอย่างของควอดทรี แบ่งพื้นที่ไบนารีแบบเรียกซ้ำ สำหรับดัชนี 2 มิติ

การแบ่งพื้นที่แบบไบนารีเป็นกระบวนการทั่วไปของการแบ่งฉากออกเป็นสองส่วนโดยใช้ไฮเปอร์เพลน[ 13 ]ซ้ำๆจนกว่าการแบ่งจะตรงตามข้อกำหนดอย่างน้อยหนึ่งข้อ สามารถมองได้ว่าเป็นการขยายความของโครงสร้างต้นไม้เชิงพื้นที่อื่นๆ เช่นต้นไม้k -d และควอดทรีซึ่งไฮเปอร์เพลนที่แบ่งพื้นที่อาจมีทิศทางใดก็ได้ แทนที่จะจัดเรียงตามแกนพิกัดเหมือนใน ต้นไม้ k -d หรือควอดทรี เมื่อใช้ในกราฟิกคอมพิวเตอร์เพื่อเรนเดอร์ฉากที่ประกอบด้วยรูปหลายเหลี่ยม ระนาบ ระนาบการแบ่งมักจะถูกเลือกให้ตรงกับระนาบที่กำหนดโดยรูปหลายเหลี่ยมในฉาก

การเลือกใช้ระนาบแบ่งส่วนและเกณฑ์การยุติกระบวนการแบ่งส่วนนั้นแตกต่างกันไปตามวัตถุประสงค์ของโครงสร้าง BSP ตัวอย่างเช่น ในการเรนเดอร์ภาพกราฟิกคอมพิวเตอร์ ฉากจะถูกแบ่งออกจนกระทั่งแต่ละโหนดของโครงสร้าง BSP มีเฉพาะรูปหลายเหลี่ยมที่สามารถเรนเดอร์ได้ในลำดับใดก็ได้ เมื่อ ใช้ การตัดด้านหลัง (back-face culling)แต่ละโหนดจึงมีชุดรูปหลายเหลี่ยมแบบนูน ในขณะที่เมื่อเรนเดอร์รูปหลายเหลี่ยมสองด้าน แต่ละโหนดของโครงสร้าง BSP จะมีเฉพาะรูปหลายเหลี่ยมในระนาบเดียวเท่านั้น ในการตรวจจับการชนหรือการติดตามรังสี ฉากอาจถูกแบ่งออกเป็นรูปทรงพื้นฐานซึ่งการทดสอบการชนหรือการตัดกันของรังสีทำได้ง่าย

การแบ่งพื้นที่แบบไบนารีเกิดขึ้นจากความต้องการของกราฟิกคอมพิวเตอร์ในการวาดฉากสามมิติที่ประกอบด้วยรูปหลายเหลี่ยมอย่างรวดเร็ว วิธีง่ายๆ ในการวาดฉากดังกล่าวคืออัลกอริทึมของจิตรกรซึ่งสร้างรูปหลายเหลี่ยมตามลำดับระยะห่างจากผู้ดู จากด้านหลังไปด้านหน้า โดยวาดทับพื้นหลังและรูปหลายเหลี่ยมก่อนหน้าด้วยวัตถุที่อยู่ใกล้กว่า วิธีนี้มีข้อเสียสองประการคือ เวลาที่ต้องใช้ในการเรียงลำดับรูปหลายเหลี่ยมจากด้านหลังไปด้านหน้า และความเป็นไปได้ที่จะเกิดข้อผิดพลาดในรูปหลายเหลี่ยมที่ทับซ้อนกัน Fuchs และผู้เขียนร่วม[ 2 ]แสดงให้เห็นว่าการสร้างต้นไม้ BSP แก้ปัญหาทั้งสองนี้ได้ โดยให้วิธีการเรียงลำดับรูปหลายเหลี่ยมอย่างรวดเร็วโดยสัมพันธ์กับมุมมองที่กำหนด (เชิงเส้นตามจำนวนรูปหลายเหลี่ยมในฉาก) และโดยการแบ่งย่อยรูปหลายเหลี่ยมที่ทับซ้อนกันเพื่อหลีกเลี่ยงข้อผิดพลาดที่อาจเกิดขึ้นกับอัลกอริทึมของจิตรกร ข้อเสียของการแบ่งพื้นที่แบบไบนารีคือการสร้างต้นไม้ BSP อาจใช้เวลานาน โดยทั่วไปแล้ว การคำนวณนี้จึงมักทำเพียงครั้งเดียวกับรูปทรงเรขาคณิตแบบคงที่ ในขั้นตอนการคำนวณเบื้องต้น ก่อนการเรนเดอร์หรือการดำเนินการแบบเรียลไทม์อื่นๆ บนฉาก เนื่องจากค่าใช้จ่ายในการสร้างโครงสร้าง BSP นั้นสูง ทำให้การนำวัตถุเคลื่อนที่เข้าไปในโครงสร้างโดยตรงทำได้ยากและไม่มีประสิทธิภาพ

รุ่น

การใช้งานหลักของต้นไม้ BSP คือการเรนเดอร์รูปหลายเหลี่ยม (ที่มีสองด้าน กล่าวคือ ไม่มีการคัดกรองด้านหลัง ) ด้วยอัลกอริทึมของจิตรกร รูปหลายเหลี่ยมแต่ละรูปจะถูกกำหนดด้วยด้านหน้าและด้านหลัง ซึ่งสามารถเลือกได้ตามอำเภอใจและมีผลต่อโครงสร้างของต้นไม้เท่านั้น แต่ไม่มีผลต่อผลลัพธ์ที่ต้องการ[ 2 ]ต้นไม้ดังกล่าวถูกสร้างขึ้นจากรายการรูปหลายเหลี่ยมทั้งหมดในฉากที่ไม่ได้เรียงลำดับ อัลกอริทึมแบบเรียกซ้ำสำหรับการสร้างต้นไม้ BSP จากรายการรูปหลายเหลี่ยมนั้นคือ: [ 2 ]

  1. เลือกรูปหลายเหลี่ยมPจากรายการ
  2. สร้างโหนดNในโครงสร้างต้นไม้ BSP และเพิ่มPลงในรายการรูปหลายเหลี่ยมที่โหนดนั้น
  3. สำหรับรูปหลายเหลี่ยมอื่นๆ ในรายการ:
    1. ถ้าโพลีกอนนั้นอยู่ด้านหน้าของระนาบที่บรรจุP อย่างสมบูรณ์ ให้ย้ายโพลีกอนนั้นไปยังรายการของโหนดที่อยู่ด้านหน้าP
    2. ถ้าโพลีกอนนั้นอยู่ด้านหลังระนาบที่บรรจุP อย่างสมบูรณ์ ให้ย้ายโพลีกอนนั้นไปอยู่ในรายการของโหนดที่อยู่ด้านหลังP
    3. หากรูปหลายเหลี่ยมนั้นถูกตัดโดยระนาบที่บรรจุจุดPให้แบ่งรูปหลายเหลี่ยมนั้นออกเป็นสองรูป แล้วย้ายรูปหลายเหลี่ยมทั้งสองนั้นไปยังรายการรูปหลายเหลี่ยมด้านหลังและด้านหน้าของจุดP ตาม ลำดับ
    4. ถ้าโพลีกอนรูปนั้นอยู่ในระนาบที่ประกอบด้วยจุดP ให้เพิ่ม โพ ลีกอนรูปนั้น ลงในรายการโพลีกอนที่จุดN
  4. นำอัลกอริทึมนี้ไปใช้กับรายการรูปหลายเหลี่ยมที่อยู่ด้านหน้าP
  5. นำอัลกอริทึมนี้ไปใช้กับรายการรูปหลายเหลี่ยมที่อยู่ด้านหลังP

แผนภาพต่อไปนี้แสดงให้เห็นถึงการใช้อัลกอริธึมนี้ในการแปลงรายการเส้นตรงหรือรูปหลายเหลี่ยมให้เป็นโครงสร้างต้นไม้ BSP ในแต่ละขั้นตอนทั้งแปดขั้นตอน (i.-viii.) อัลกอริธึมข้างต้นจะถูกนำไปใช้กับรายการเส้นตรง และจะมีการเพิ่มโหนดใหม่หนึ่งโหนดลงในต้นไม้

เริ่มต้นด้วยรายการของเส้น (หรือในแบบ 3 มิติ คือรูปหลายเหลี่ยม) ที่ประกอบกันเป็นฉาก ในแผนภาพต้นไม้ รายการต่างๆ จะถูกแทนด้วยสี่เหลี่ยมผืนผ้าที่มีมุมโค้งมน และโหนดในแผนผัง BSP จะถูกแทนด้วยวงกลม ในแผนภาพเชิงพื้นที่ของเส้น ทิศทางที่เลือกให้เป็น 'ด้านหน้า' ของเส้นจะถูกแทนด้วยลูกศร
ฉัน.โดยทำตามขั้นตอนของอัลกอริทึมข้างต้น
  1. เราเลือกเส้น A จากรายการ และ...
  2. ...เพิ่มเข้าไปในโหนด
  3. เราแบ่งบรรทัดที่เหลือในรายการออกเป็นสองกลุ่ม คือกลุ่มที่อยู่หน้า A (เช่น B2, C2, D2) และกลุ่มที่อยู่หลัง A (B1, C1, D1)
  4. ขั้นแรก เราจะประมวลผลบรรทัดที่อยู่หน้า A (ในขั้นตอนที่ ii–v)...
  5. ...ตามด้วยผู้ที่อยู่ข้างหลัง (ในขั้นตอนที่ 6-7)
ii.ต่อไปนี้เราจะนำอัลกอริทึมไปใช้กับรายการบรรทัดที่อยู่หน้า A (ซึ่งประกอบด้วย B2, C2, D2) เราเลือกบรรทัด B2 เพิ่มลงในโหนด และแบ่งรายการที่เหลือออกเป็นบรรทัดที่อยู่หน้า B2 (D2) และบรรทัดที่อยู่หลัง B2 (C2, D3)
iii.เลือกบรรทัด D2 จากรายการบรรทัดที่อยู่หน้า B2 และ A เนื่องจากเป็นบรรทัดเดียวในรายการ ดังนั้นหลังจากเพิ่มบรรทัดนี้ลงในโหนดแล้ว จึงไม่จำเป็นต้องดำเนินการใดๆ เพิ่มเติมอีก
iv.เราจัดการกับบรรทัดด้านหน้า B2 เสร็จแล้ว ทีนี้มาพิจารณาบรรทัดด้านหลัง B2 (C2 และ D3) เลือกบรรทัดใดบรรทัดหนึ่ง (C2) เพิ่มเข้าไปในโหนด และใส่บรรทัดอื่นในรายการ (D3) เข้าไปในรายการบรรทัดด้านหน้า C2
ว.ทีนี้ลองดูรายการบรรทัดที่อยู่หน้า C2 จะมีเพียงบรรทัดเดียว (D3) ดังนั้นให้เพิ่มบรรทัดนี้ลงในโหนดแล้วดำเนินการต่อ
vi.ตอนนี้เราได้เพิ่มเส้นทั้งหมดที่อยู่หน้า A ลงในโครงสร้างต้นไม้ BSP แล้ว ดังนั้นเราจะเริ่มจากรายการเส้นที่อยู่หลัง A เลือกเส้นหนึ่ง (B1) จากรายการนี้ เราจะเพิ่ม B1 ลงในโหนด และแบ่งรายการที่เหลือออกเป็นเส้นที่อยู่หน้า B1 (เช่น D1) และเส้นที่อยู่หลัง B1 (เช่น C1)
7.เริ่มจากการประมวลผลรายการบรรทัดที่อยู่หน้า B1 ก่อน โดย D1 เป็นบรรทัดเดียวในรายการนี้ ดังนั้นให้เพิ่มบรรทัดนี้ลงในโหนดแล้วดำเนินการต่อ
8.ต่อไปให้ดูที่รายการเส้นที่อยู่เบื้องหลัง B1 จะเห็นว่ามีเพียงเส้นเดียวคือ C1 ดังนั้นให้เพิ่ม C1 เข้าไปในโหนด แล้วโครงสร้างต้นไม้ BSP ก็จะสมบูรณ์

จำนวนรูปหลายเหลี่ยมหรือเส้นตรงสุดท้ายในต้นไม้มักจะมากกว่า (บางครั้งมากกว่ามาก[ 2 ] ) รายการเดิม เนื่องจากเส้นตรงหรือรูปหลายเหลี่ยมที่ตัดผ่านระนาบการแบ่งส่วนจะต้องถูกแบ่งออกเป็นสองส่วน เป็นที่พึงปรารถนาที่จะลดการเพิ่มขึ้นนี้ให้น้อยที่สุด แต่ก็ต้องรักษาสมดุล ที่เหมาะสม ในต้นไม้สุดท้ายด้วย ดังนั้น การเลือกรูปหลายเหลี่ยมหรือเส้นตรงที่จะใช้เป็นระนาบการแบ่งส่วน (ในขั้นตอนที่ 1 ของอัลกอริทึม) จึงมีความสำคัญในการสร้างต้นไม้ BSP ที่มีประสิทธิภาพ

การเดินทาง

ต้นไม้ BSP จะถูกสำรวจในเวลาเชิงเส้น โดยมีลำดับที่กำหนดโดยฟังก์ชันเฉพาะของต้นไม้ ยกตัวอย่างเช่น การเรนเดอร์รูปหลายเหลี่ยมสองด้านโดยใช้อัลกอริทึมของจิตรกร การวาดรูปหลายเหลี่ยมP ให้ถูกต้องนั้น จำเป็นต้องวาดรูปหลายเหลี่ยมทั้งหมดที่อยู่ด้านหลังระนาบที่P อยู่ก่อน จากนั้นจึงวาดรูปหลายเหลี่ยม Pและสุดท้ายวาดรูปหลายเหลี่ยมที่อยู่ด้านหน้าPหากลำดับการวาดนี้เป็นไปตามเงื่อนไขสำหรับรูปหลายเหลี่ยมทั้งหมดในฉาก ฉากทั้งหมดก็จะแสดงผลตามลำดับที่ถูกต้อง ขั้นตอนนี้สามารถนำไปใช้ได้โดยการสำรวจต้นไม้ BSP แบบเรียกซ้ำโดยใช้อัลกอริทึมต่อไปนี้[ 2 ]จากตำแหน่งการดูที่กำหนดVเพื่อเรนเดอร์ต้นไม้ BSP

  1. ถ้าโหนดปัจจุบันเป็นโหนดใบ ให้แสดงผลรูปหลายเหลี่ยมที่โหนดปัจจุบัน
  2. ในทางกลับกัน หากตำแหน่งการดูVอยู่ด้านหน้าของโหนดปัจจุบัน:
    1. แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังโหนดปัจจุบัน
    2. แสดงผลรูปหลายเหลี่ยมที่โหนดปัจจุบัน
    3. แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าโหนดปัจจุบัน
  3. มิฉะนั้น หากตำแหน่งการดูVอยู่ด้านหลังโหนดปัจจุบัน:
    1. แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าโหนดปัจจุบัน
    2. แสดงผลรูปหลายเหลี่ยมที่โหนดปัจจุบัน
    3. แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังโหนดปัจจุบัน
  4. มิเช่นนั้น ตำแหน่งการมองเห็นVจะต้องอยู่บนระนาบที่สัมพันธ์กับโหนดปัจจุบันอย่างแม่นยำ จากนั้น:
    1. แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าโหนดปัจจุบัน
    2. แสดงโครงสร้างต้นไม้ BSP ของโหนดลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังโหนดปัจจุบัน

การนำอัลกอริธึมนี้ไปใช้ซ้ำกับโครงสร้างต้นไม้ BSP ที่สร้างขึ้นข้างต้น จะส่งผลให้เกิดขั้นตอนดังต่อไปนี้:

  • ขั้นแรก เราจะใช้อัลกอริธึมกับโหนดรากของต้นไม้ ซึ่งก็คือโหนดAเนื่องจากVอยู่ด้านหน้าโหนดAดังนั้นเราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังA ก่อน
    • ต้นไม้ต้นนี้มีโหนดรากคือB1 V อยู่ด้านหลังB1ดังนั้น ขั้นแรก เราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าB1 :
      • ต้นไม้นี้เป็นเพียงโหนดใบD1ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม D1
    • จากนั้นเราจึงเรนเดอร์รูปหลายเหลี่ยมB1
    • จากนั้นเราจะนำอัลกอริธึมไปใช้กับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังB1 :
      • ต้นไม้นี้เป็นเพียงโหนดใบC1ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม C1
  • จากนั้นเราจึงวาดรูปหลายเหลี่ยมของA
  • จากนั้นเราจึงนำอัลกอริธึมไปใช้กับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าA
    • ต้นไม้ต้นนี้มีโหนดรากคือB2 V อยู่ด้านหลังB2ดังนั้น ขั้นแรก เราจึงใช้อัลกอริธึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าB2 :
      • ต้นไม้นี้เป็นเพียงโหนดใบD2ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม D2
    • จากนั้นเราจึงเรนเดอร์รูปหลายเหลี่ยมB2
    • จากนั้นเราจะนำอัลกอริธึมไปใช้กับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังB2 :
      • ต้นไม้ต้นนี้มีโหนดรากคือC2 V อยู่ด้านหน้าC2ดังนั้น ขั้นแรก เราจะใช้อัลกอริทึมกับต้นไม้ BSP ลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหลังC2อย่างไรก็ตาม ไม่มีต้นไม้ดังกล่าว ดังนั้นเราจึงดำเนินการต่อไป
      • เราแสดงผลรูปหลายเหลี่ยมC2
      • เราใช้อัลกอริธึมกับต้นไม้ BSP ของลูกที่มีรูปหลายเหลี่ยมอยู่ด้านหน้าC2
        • ต้นไม้นี้เป็นเพียงโหนดใบD3ดังนั้นจึงมีการแสดงผล รูปหลายเหลี่ยม D3

ต้นไม้จะถูกสำรวจในเวลาเชิงเส้นและแสดงผลรูปหลายเหลี่ยมในลำดับจากไกลไปใกล้ ( D1 , B1 , C1 , A , D2 , B2 , C2 , D3 ) ซึ่งเหมาะสมกับอัลกอริธึมของจิตรกร

แอปพลิเคชัน

ต้นไม้ BSP มักถูกใช้ในวิดีโอเกม 3 มิติ โดยเฉพาะเกมยิงมุมมองบุคคลที่หนึ่งและเกมที่มีสภาพแวดล้อมภายในอาคารเอ็นจิ้นเกมที่ใช้ต้นไม้ BSP ได้แก่ เอ็นจิ้น Doom , Quake , GoldSrcและSourceในเอ็นจิ้นเหล่านี้ ต้นไม้ BSP ที่มีเรขาคณิตคงที่ของฉากมักถูกใช้ร่วมกับบัฟเฟอร์ Zเพื่อผสานวัตถุที่เคลื่อนที่ได้ เช่น ประตูและตัวละคร เข้ากับฉากหลังอย่างถูกต้อง แม้ว่าการแบ่งพื้นที่แบบไบนารีจะให้วิธีการจัดเก็บและเรียกข้อมูลเชิงพื้นที่เกี่ยวกับรูปหลายเหลี่ยมในฉากได้อย่างสะดวก แต่ก็ไม่ได้แก้ปัญหาการกำหนดพื้นผิวที่มองเห็นได้ต้นไม้ BSP ยังถูกนำไปใช้กับการบีบอัดภาพอีกด้วย[ 14 ]

ดูเพิ่มเติม

เอกสารอ้างอิงเพิ่มเติม

  • Naylor, B. (พฤษภาคม 1993). "การสร้างต้นไม้แบ่งพาร์ติชันที่ดี" . Graphics Interface . CiteSeerX  10.1.1.16.4432 .
  • Radha, H.; Leoonardi, R.; Vetterli, M.; Naylor, B. (1991). "การแสดงภาพด้วยต้นไม้แบ่งพื้นที่ไบนารี"วารสารการสื่อสารด้วยภาพและการประมวลผลภาพ 2 ( 3): 201– 221. doi : 10.1016/1047-3203(91)90023-9 .
  • Radha, HMS (1993). การนำเสนอภาพอย่างมีประสิทธิภาพโดยใช้ต้นไม้แบ่งพื้นที่แบบไบนารี (ปริญญาเอก). มหาวิทยาลัยโคลัมเบีย. OCLC  30775044 .
  • Radha, HMS (1994). "การแสดงภาพที่มีประสิทธิภาพโดยใช้ต้นไม้แบ่งพื้นที่ไบนารี" การประมวลผลสัญญาณ35 (2): 174– 181. Bibcode : 1994SigPr..35..174R . doi : 10.1016/0165-1684(94)90047-7 .
  • Radha, H.; Vetterli, M.; Leoonardi, R. (ธันวาคม 1996). "การบีบอัดภาพโดยใช้ต้นไม้แบ่งพื้นที่ไบนารี" . IEEE Transactions on Image Processing . 5 (12): 1610– 24. Bibcode : 1996ITIP....5.1610R . doi : 10.1109/83.544569 . PMID  18290079 .https://ui.adsabs.harvard.edu/abs/1996ITIP....5.1610R/abstract
  • Winter, AS (เมษายน 1999). "การตรวจสอบการเรนเดอร์รูปหลายเหลี่ยม 3 มิติแบบเรียลไทม์โดยใช้ bsp trees". CiteSeerX  10.1.1.11.9725 .
  • เดอ เบิร์ก, เอ็ม. ; แวน เครเวลด์, เอ็ม. ; โอเวอร์มาร์ส, เอ็ม. ; ชวาร์ซคอฟ, โอ. (2000). "§12: การแบ่งพื้นที่แบบไบนารี". เรขาคณิตเชิงคำนวณ (ฉบับที่ 2). สปริงเกอร์-เวอร์แลก . หน้า  251–265 . ISBN 978-3-540-65620-3.อธิบายอัลกอริทึมของจิตรกรแบบสุ่ม...
  • เอริคสัน, คริสเตอร์ (2005). "8. ลำดับชั้นของต้นไม้ BSP"การตรวจจับการชนแบบเรียล ไทม์ ชุดหนังสือเทคโนโลยี 3 มิติเชิงโต้ตอบ ของมอร์แกน คอฟมันน์ มอร์แกน คอฟมันน์ หน้า  349–382 ISBN 1-55860-732-3.
  • Naylor, BF (2005). "คู่มือเกี่ยวกับต้นไม้แบ่งพื้นที่แบบไบนารี" .
  • การนำเสนอต้นไม้ BSP
  • การนำเสนอต้นไม้ BSP อีกครั้ง
  • แอปเพล็ต Java ที่แสดงกระบวนการสร้างต้นไม้
  • วิทยานิพนธ์ระดับปริญญาโทเกี่ยวกับการสร้าง BSP
  • โครงสร้างต้นไม้ BSP: ทฤษฎีและการนำไปใช้
  • BSP ในพื้นที่ 3 มิติ
  • Graphics Gems V: พาชมโครงสร้างต้นไม้ของ BSP
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Binary_space_partitioning&oldid=1353973412 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ การแบ่งพื้นที่ไบนารี

ใน วิทยาการคอมพิวเตอร์ การ แบ่งพื้นที่แบบไบนารี ( BSP ) เป็นวิธี การแบ่งพื้นที่ ซึ่งแบ่ง พื้นที่แบบยุค ลิด ออก เป็นสอง เซตแบบนูน โดยใช้ ระนาบไฮเปอร์ เป็นตัวแบ่ง...

ประวัติศาสตร์

ในปี พ.ศ. 2512 Schumacker และคณะ [ 1 ] ได้ตีพิมพ์รายงานที่อธิบายว่าระนาบที่จัดวางอย่างระมัดระวังในสภาพแวดล้อมเสมือนจริงสามารถใช้เพื่อเร่งการเรียงลำดับรูปหลายเหลี่ยมได้อย่างไร เทคนิคนี้ใช้ความสอดคล้องเชิงลึก...

ภาพรวม

การแบ่งพื้นที่แบบไบนารีเป็นกระบวนการทั่วไปของการแบ่งฉากออกเป็นสองส่วนโดยใช้ ไฮเปอร์เพลน [ 13 ] ซ้ำๆ จนกว่าการแบ่งจะตรงตามข้อกำหนดอย่างน้อยหนึ่งข้อ สามารถมองได้ว่าเป็นการขยายความของโครงสร้างต้นไม้เชิงพื้นที่อื่นๆ เช่น ต้นไม้ k -d และ ควอดทรี...

รุ่น

การใช้งานหลักของต้นไม้ BSP คือการเรนเดอร์รูปหลายเหลี่ยม (ที่มีสองด้าน กล่าวคือ ไม่มี การคัดกรองด้านหลัง ) ด้วยอัลกอริทึมของจิตรกร รูปหลายเหลี่ยมแต่ละรูปจะถูกกำหนดด้วยด้านหน้าและด้านหลัง ซึ่งสามารถเลือกได้ตามอำเภอใจและมีผลต่อโครงสร้างของต้นไม้เท่านั้น...