Heightmaps
ด้วยความสูงแผนที่คุณเก็บเฉพาะส่วนประกอบความสูงสำหรับแต่ละจุดสุดยอด (ปกติเป็นพื้นผิว 2D) และให้ตำแหน่งและความละเอียดเพียงครั้งเดียวสำหรับทั้งสี่รูปสี่เหลี่ยม เรขาคณิตแนวนอนถูกสร้างขึ้นในแต่ละเฟรมโดยใช้ shader เรขาคณิตหรือฮาร์ดแวร์ tessellation Heightmaps เป็นวิธีที่เร็วที่สุดในการจัดเก็บข้อมูลแนวนอนสำหรับการตรวจจับการชน
ข้อดี:
การใช้หน่วยความจำค่อนข้างต่ำ : คุณจะต้องเก็บค่าหนึ่งค่าต่อยอดเท่านั้นและไม่มีดัชนี เป็นไปได้ที่จะปรับปรุงให้ดียิ่งขึ้นโดยใช้แผนที่รายละเอียดหรือตัวกรองสัญญาณรบกวนเพื่อเพิ่มรายละเอียดที่รับรู้
ค่อนข้างเร็ว : รูปทรงเรขาคณิตสำหรับความสูงแผนที่มีขนาดเล็กและทำงานเร็ว มันไม่เร็วเท่าภูมิประเทศเรขาคณิต
สำหรับระบบที่ไม่มีการเร่งความเร็วแบบ 3 มิติตามรูปสามเหลี่ยมความสูงของแผนที่เดินเป็นวิธีที่เร็วที่สุดในการแสดงภูมิประเทศ สิ่งนี้เรียกว่ากราฟิก voxel ในเกมที่เก่ากว่า
Dynamic LOD / ภูมิประเทศ : เป็นไปได้ที่จะเปลี่ยนความละเอียดของตาข่ายที่สร้างขึ้นตามระยะทางจากกล้อง สิ่งนี้จะทำให้รูปทรงเรขาคณิตที่เปลี่ยนแปลงหากความละเอียดลดลงมากเกินไป (ประมาณ 0:40) แต่สามารถใช้กับเอฟเฟกต์ที่น่าสนใจได้
การสร้าง / สร้างภูมิประเทศง่าย ๆ : สร้างแผนที่ความสูงได้อย่างง่ายดายโดยการผสมฟังก์ชั่นเสียงรบกวนเช่นเศษส่วนเสียงเพอร์ลินและตัวแก้ไขความสูงของแผนที่ทำได้อย่างรวดเร็วและใช้งานง่าย ทั้งสองวิธีสามารถรวมกันได้ พวกเขายังง่ายต่อการทำงานกับในตัวแก้ไข
ฟิสิกส์ที่มีประสิทธิภาพ : ตำแหน่งแนวนอนจะจับคู่กับตำแหน่งในหน่วยความจำโดยตรง (โดยปกติ) ดังนั้นการค้นหารูปทรงเรขาคณิตสำหรับฟิสิกส์จึงรวดเร็วมาก
จุดด้อย:
หนึ่งความสูงต่อพิกัด x / y ที่แน่นอน : โดยทั่วไปจะไม่สามารถมีรูบนพื้นดินหรือหน้าผาที่ยื่นออกมาได้
การควบคุมน้อยลง : คุณสามารถควบคุมความสูงที่แม่นยำของแต่ละจุดได้หากขนาดกริดตรงกับพิกัดพื้นผิว
สิ่งประดิษฐ์ : หากสี่ยอดที่กำหนดรูปสี่เหลี่ยมย่อยไม่ได้อยู่บนระนาบเดียวกันการแยกระหว่างจุดยอดทั้งสองจะปรากฏให้เห็น ซึ่งมักเกิดขึ้นบนหน้าผาสูงชันที่มีขอบซึ่งไม่เป็นไปตามทิศทางที่กำหนด
Heightmaps เป็นวิธีที่มีประสิทธิภาพมากที่สุดในการเรนเดอร์ภูมิประเทศโดยใช้ในเกมใหม่ ๆ หลายเกมที่ไม่พึ่งพาคุณสมบัติภูมิประเทศขั้นสูงและมีพื้นที่กลางแจ้งขนาดใหญ่ Wikipedia มีรายการของโปรแกรมที่ใช้ heightmapsแต่ฉันไม่แน่ใจว่านั่นหมายความว่าพวกมันใช้เป็นทรัพยากรหรือเพื่อการเรนเดอร์ดังนั้นนี่เป็นเกมที่น่าจะใช้:
เพียงแค่สาเหตุที่ 2: พื้นที่ถูกโหลดในเซกเตอร์สแควร์และไม่มีรูในภูมิประเทศ ในการสาธิตมีรูลึกที่มีรูปสามเหลี่ยมยาวเหยียดตามขอบซึ่งปกติแล้วจะเป็นอาคาร (พื้นที่ไม่สามารถเข้าถึงได้ตามปกติ แต่มี mods ที่จะลบข้อ จำกัด บางอย่างของการสาธิต ... )
Sims 2 ( อาจจะ ): ภูมิประเทศที่อยู่ใกล้เคียงถูกโหลดเป็นแผนที่ความสูง แต่มีรูที่วาง (ไซต์สร้าง) จำนวนมาก มีสิ่งประดิษฐ์ทั่วไปหากคุณสร้างหน้าผาเป็นจำนวนมากและค่อนข้างน่าเบื่อที่จะเพิ่มห้องใต้ดินเข้าไปในบ้าน (และซ่อนหน้าผาใต้เฉลียง)
เกมที่มาของ Valve: แปรงสี่เหลี่ยม (เรขาคณิตระดับคงที่) สามารถมีภูมิประเทศที่มีความสูงบนใบหน้าของพวกเขา ในเกมเหล่านี้นิสัยแปลก ๆ มักจะถูกซ่อนไว้ด้วยแปรงหรืออุปกรณ์ประกอบฉากอื่น ๆ
มันเป็นไปไม่ได้ที่จะบอกได้อย่างแน่นอนโดยไม่ต้องดูที่เงาเพราะภูมิประเทศแผนที่ความสูงทุกคนสามารถกลายเป็นตาข่าย
ชุ
Voxel terrain เก็บข้อมูลภูมิประเทศสำหรับแต่ละจุดในกริด 3D วิธีนี้ใช้พื้นที่เก็บข้อมูลมากที่สุดต่อรายละเอียดพื้นผิวที่มีความหมายเสมอแม้ว่าคุณจะใช้วิธีการบีบอัดเช่น sparse octrees
(คำว่า "เครื่องยนต์ voxel" มักถูกใช้เพื่ออธิบายวิธีการในการเดินแผนที่ความสูงของภูมิประเทศที่ใช้กันทั่วไปในเกม 3D รุ่นเก่าส่วนนี้ใช้เฉพาะกับภูมิประเทศที่เก็บไว้เป็นข้อมูล voxel)
ข้อดี:
ข้อมูล 3D ต่อเนื่อง : Voxels เป็นวิธีที่มีประสิทธิภาพเพียงอย่างเดียวในการจัดเก็บข้อมูลอย่างต่อเนื่องเกี่ยวกับคุณลักษณะภูมิประเทศที่ซ่อนอยู่เช่นเส้นเลือดแร่
ง่ายต่อการปรับเปลี่ยน : ข้อมูล voxel ที่ไม่บีบอัดสามารถเปลี่ยนแปลงได้อย่างง่ายดาย
คุณลักษณะภูมิประเทศขั้นสูง : เป็นไปได้ที่จะสร้างสิ่งที่แขวนอยู่ อุโมงค์ไร้รอยต่อ
การสร้างภูมิประเทศที่น่าสนใจ : Minecraftทำสิ่งนี้โดยการซ้อนทับฟังก์ชั่นเสียงรบกวนและการไล่ระดับสีด้วยคุณสมบัติภูมิประเทศที่กำหนดไว้ล่วงหน้า (ต้นไม้ดันเจี้ยน) (อ่านการสร้างภูมิประเทศส่วนที่ 1ในบล็อกของ Notch สำหรับข้อมูลเพิ่มเติมไม่มีส่วนที่ 2 ตั้งแต่วันที่ 05.8.2011)
จุดด้อย:
ช้า : ในการเรนเดอร์ข้อมูล voxel คุณต้องใช้ ray tracerหรือคำนวณตาข่ายตัวอย่างเช่นกับคิวบ์เดินขบวน (จะมีสิ่งประดิษฐ์) voxel ที่อยู่ใกล้เคียงไม่ขึ้นกับการสร้างตาข่ายและตัวเคลือบมีความซับซ้อนมากขึ้นและมักจะสร้างรูปทรงเรขาคณิตที่ซับซ้อนมากขึ้น การแสดงข้อมูล voxel ที่มีค่า LOD สูงอาจช้ามาก
ต้องการจัดเก็บข้อมูลขนาดใหญ่ : การใช้ข้อมูลที่จัดเก็บ voxel จำนวนมากของหน่วยความจำ บ่อยครั้งที่มันไม่สามารถโหลดข้อมูล voxel ลงใน VRAM ได้ด้วยเหตุผลนี้เนื่องจากคุณต้องใช้พื้นผิวที่เล็กลงเพื่อชดเชยมันแม้แต่กับฮาร์ดแวร์ที่ทันสมัย
มันใช้งานไม่ได้ในการใช้ voxels สำหรับเกมที่ไม่ต้องอาศัยคุณสมบัติ voxel เช่นภูมิประเทศที่ผิดรูป แต่สามารถอนุญาตให้กลไกเกมที่น่าสนใจในบางกรณี เอ็นจิ้น Voxel นั้นพบได้บ่อยในเกมที่เก่ากว่าแต่ก็มีตัวอย่างที่ใหม่กว่า:
เครื่องยนต์ Atomontage : การแสดงผล Voxel
Worms 4: ใช้ "poxels" ตามวิกิพีเดียมันเป็นส่วนผสมของ voxels และรูปหลายเหลี่ยม
Minecraft: ใช้ voxel เพื่อแสดงภูมิประเทศใน RAM กราฟิกเป็นกราฟิกรูปหลายเหลี่ยม ส่วนใหญ่เป็นการคำนวณซอฟต์แวร์
Terraria: ตัวอย่างสำหรับ 2D voxels ฉันไม่รู้ว่ามันแสดงผลอย่างไร
Voxels รวมกับฟิสิกส์ : ไม่ใช่เกม แต่มันแสดงให้เห็นถึงศักยภาพในการทำลาย
Voxatron : เกมที่ใช้ voxels สำหรับกราฟิกเกือบทั้งหมดรวมถึงเมนูและ HUD
ตาข่าย
ตาข่ายรูปหลายเหลี่ยมเป็นวิธีการจัดเก็บและแสดงภูมิประเทศที่ยืดหยุ่นและแม่นยำที่สุด มักใช้ในเกมที่ต้องการการควบคุมที่แม่นยำหรือคุณสมบัติภูมิประเทศขั้นสูง
ข้อดี:
เร็วมาก : คุณเพียง แต่ต้องทำการคำนวณการฉายภาพตามปกติในส่วนยอด ไม่จำเป็นต้องใช้รูปทรงเรขาคณิต
แม่นยำมาก : พิกัดทั้งหมดจัดเก็บแยกกันสำหรับแต่ละจุดสุดยอดดังนั้นจึงเป็นไปได้ที่จะย้ายแนวนอนและเพิ่มความหนาแน่นของตาข่ายในสถานที่ที่มีรายละเอียดปลีกย่อย
ผลกระทบของหน่วยความจำต่ำ : นี่หมายความว่าตาข่ายมักจะต้องการหน่วยความจำน้อยกว่า heighmap เนื่องจากจุดยอดอาจเบาบางมากขึ้นในพื้นที่ที่มีคุณสมบัติน้อยกว่า
(ดูเครือข่ายที่ผิดปกติของ Triangulatedบน Wikipedia)
ไม่มีสิ่งประดิษฐ์ : ตาข่ายถูกแสดงผลตามสภาพดังนั้นจึงไม่มีข้อบกพร่องหรือเส้นขอบที่ดูแปลก ๆ
คุณสมบัติภูมิประเทศขั้นสูง : เป็นไปได้ที่จะออกจากหลุมและสร้างส่วนยื่น อุโมงค์ไร้รอยต่อ
จุดด้อย:
LOD แบบไดนามิกไม่ดี : ทำได้เฉพาะกับตาข่ายที่คำนวณล่วงหน้าเท่านั้น สิ่งนี้จะทำให้เกิด "การข้าม" เมื่อสลับโดยไม่มีข้อมูลเพิ่มเติมเพื่อแมปจุดยอดเก่ากับจุดใหม่
ไม่ใช่เรื่องง่ายที่จะแก้ไข : การค้นหาจุดยอดที่สอดคล้องกับพื้นที่ที่ควรแก้ไขช้า
ไม่ได้มีประสิทธิภาพมากนักสำหรับการตรวจจับการชน : ซึ่งแตกต่างจากข้อมูลความสูงและข้อมูล voxel ที่อยู่หน่วยความจำสำหรับบางตำแหน่งมักจะไม่สามารถคำนวณได้โดยตรง ซึ่งหมายความว่าฟิสิกส์และเกมตรรกะที่ขึ้นอยู่กับรูปทรงเรขาคณิตที่แน่นอนจะทำงานช้ากว่ารูปแบบการจัดเก็บอื่น ๆ
ภูมิประเทศรูปหลายเหลี่ยมมักใช้ในเกมที่ไม่มีพื้นที่เปิดโล่งขนาดใหญ่หรือไม่สามารถใช้ภูมิประเทศแผนที่ความสูงได้เนื่องจากขาดความแม่นยำและยื่นเกิน ฉันไม่มีรายการ แต่ฉันค่อนข้างแน่ใจ
ทุก 3D Zelda และ
ทุกเกมมาริโอ 3D
ใช้สิ่งนี้
วิธีอื่น ๆ
เป็นไปได้ที่จะสร้างภูมิประเทศทั้งหมดในท่อ shader หากอัลกอริธึมทำงานเฉพาะในแฟรกเมนต์ / พิกเซลเดอร์พิกเซลรายละเอียดสามารถทำได้แทบไม่ จำกัด ในขณะที่ผลกระทบของหน่วยความจำเกือบเป็นศูนย์ ข้อเสียที่เห็นได้ชัดเกือบจะไม่สามารถควบคุมรูปร่างและปัญหาเมื่อกล้องตัดกับพื้นผิวการเรนเดอร์ดั้งเดิม มันยังมีประโยชน์ในเกมอวกาศที่ผู้เล่นไม่ได้มีปฏิสัมพันธ์กับพื้นผิวของดาวเคราะห์ ภาพเคลื่อนไหวของพารามิเตอร์ทำงานได้ดีที่สุดกับภูมิประเทศประเภทนี้
มันเป็นไปได้ที่จะดาวน์โหลดรูปทรงเรขาคณิตที่สร้างขึ้นจากการ์ดกราฟิกเพื่อใช้กับส่วนที่เหลือของเกมเอ็นจิ้น แต่ฉันไม่รู้ว่าประสิทธิภาพของมันคืออะไรหรือไม่
ข้อสรุป
ไม่มีวิธีใดที่ทำงานได้ดีสำหรับทุกสถานการณ์ แต่มันค่อนข้างง่ายในการเลือกหนึ่งอย่างสำหรับงานบางอย่าง:
Heightmapsเป็นทางออกที่ดีที่สุดหากคุณไม่ต้องการแขวนหรือเจาะรูบนพื้นผิวภูมิประเทศและใช้ฟิสิกส์หรือภูมิประเทศแบบไดนามิก พวกมันสามารถปรับขนาดได้และทำงานได้ดีสำหรับเกมส่วนใหญ่
เมชมีความแม่นยำสูงสุดและสามารถอธิบายสิ่งที่แขวนอยู่รูและอุโมงค์ ใช้มันหากคุณมีภูมิประเทศที่ซับซ้อนที่ไม่เปลี่ยนแปลงบ่อย
Voxelsนั้นดีสำหรับการอธิบายภูมิประเทศที่มีไดนามิกมากพร้อมกับคุณสมบัติที่ซับซ้อนมากมาย หลีกเลี่ยงการเรนเดอร์โดยตรงเนื่องจากต้องการหน่วยความจำและการประมวลผลจำนวนมาก
วิธีอื่นอาจดีกว่าวิธีการข้างต้นหากคุณไม่จำเป็นต้องโต้ตอบกับภูมิประเทศหรือต้องการกราฟิกที่มีรายละเอียดมาก พวกเขามักจะทำงานเฉพาะกับสถานการณ์ที่เฉพาะเจาะจงมาก
เป็นไปได้ที่จะรวมวิธีการที่แตกต่างกันเพื่อให้ได้คุณสมบัติจากมากกว่าหนึ่งตัวอย่างเช่นโดยการทดสอบภูมิประเทศแบบตาข่ายกับแผนผังความสูงเพื่อเพิ่มโครงสร้างรายละเอียดของหน้าผา
รุ่นภูมิประเทศแบบไดนามิกถูกนำมาใช้อย่างมากในการจำลองพื้นที่ขั้นตอนและบางส่วนได้กลายเป็นที่สูงมากในปีที่ผ่านมา ฟอรัมของโครงการเหล่านี้ควรมีแหล่งข้อมูลในหัวข้อ