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

อ่าน 2 นาที

การต่อสู้แบบ Z

Z-fighting หรือที่เรียกว่า stitching หรือ planefighting เป็นปรากฏการณ์ใน การเรนเดอร์ 3 มิติ ที่เกิดขึ้นเมื่อ พรีมิทีฟ สองหรือมากกว่า นั้นมีระยะห่างจากกล้องใกล้เคียงกันมาก...

การต่อสู้แบบ Z

การสาธิตปรากฏการณ์ z-fighting เมื่อใช้สีและพื้นผิวที่หลากหลายบนพื้นหลังสีเทา

Z-fightingหรือที่เรียกว่าstitchingหรือplanefightingเป็นปรากฏการณ์ในการเรนเดอร์ 3 มิติที่เกิดขึ้นเมื่อพรีมิทีฟ สองหรือมากกว่า นั้นมีระยะห่างจากกล้องใกล้เคียงกันมาก ซึ่งจะทำให้ค่าในz-bufferซึ่งใช้ในการติดตามความลึกนั้นใกล้เคียงกันหรือเหมือนกัน นั่นหมายความว่าเมื่อมีการเรนเดอร์พิกเซลใดพิกเซลหนึ่ง จะไม่ชัดเจนว่าพรีมิทีฟใดในสองอันนั้นถูกวาดในพิกเซลนั้น เนื่องจาก z-buffer ไม่สามารถแยกแยะได้อย่างแม่นยำว่าอันใดอยู่ไกลกว่ากัน[ 1 ]หากพิกเซลหนึ่งอยู่ใกล้กว่าอย่างชัดเจน พิกเซลที่อยู่ใกล้น้อยกว่าก็สามารถละทิ้งได้ ปรากฏการณ์นี้พบได้บ่อยเป็นพิเศษกับ โพลีกอน ที่อยู่บนระนาบเดียวกันซึ่งหน้าสองหน้าครอบครองพื้นที่เดียวกันโดยพื้นฐาน โดยไม่มีหน้าใดอยู่ข้างหน้า ผลที่ได้คือ พิกเซลที่ได้รับผลกระทบจะถูกเรนเดอร์ด้วยส่วนย่อยจากโพลีกอนหนึ่งหรืออีกโพลีกอนหนึ่งโดยพลการ ในลักษณะที่กำหนดโดยความแม่นยำของ z-buffer นอกจากนี้ ผลลัพธ์ยังอาจเปลี่ยนแปลงไปเมื่อเปลี่ยนฉากหรือมุมกล้อง ทำให้รูปหลายเหลี่ยมหนึ่ง "ชนะ" การทดสอบค่า z จากนั้นอีกรูปหนึ่ง และเป็นเช่นนี้เรื่อยไป ผลโดยรวมคือการแรสเตอร์ภาพที่กระพริบและมีสัญญาณรบกวนของรูปหลายเหลี่ยมสองรูปที่ "แย่งกัน" ระบายสีพิกเซลบนหน้าจอ ปัญหานี้มักเกิดจากความแม่นยำของซับพิกเซลที่จำกัด ข้อผิด พลาด จากการปัดเศษของจุดลอยตัวและ จุด คงที่

ยิ่งใช้ความแม่นยำของ z-buffer มากเท่าไหร่ โอกาสที่จะเกิดปัญหา z-fighting ก็จะยิ่งน้อยลงเท่านั้น แต่สำหรับรูปหลายเหลี่ยมที่อยู่บนระนาบเดียวกัน ปัญหานี้เป็นสิ่งที่หลีกเลี่ยงไม่ได้ เว้นแต่จะมีการแก้ไขอย่างเหมาะสม

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

การบรรเทา

ผลกระทบที่เห็นบนรูปหลายเหลี่ยมสองรูปที่อยู่บนระนาบเดียวกัน

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

ปัญหา Z-fighting ที่เกิดจากความแม่นยำไม่เพียงพอในบัฟเฟอร์ความลึก สามารถแก้ไขได้โดยการลดระยะการมองเห็นในโลกเสมือนจริง ซึ่งจะลดระยะห่างระหว่างระนาบใกล้และไกล และแก้ปัญหาเรื่องความแม่นยำได้ อย่างไรก็ตาม ในสภาพแวดล้อมเสมือนจริงบางแห่งที่การมองเห็นระยะไกลมีความสำคัญ หรือในกรณีที่การมองเห็นลดลงจะทำให้ดูไม่สมจริง เช่น โปรแกรมจำลองอวกาศหรือโปรแกรมจำลองการบิน วิธีนี้ไม่สามารถทำได้ ในกรณีเหล่านี้จึงมีเทคนิคทางเลือกอื่น หนึ่งในเทคนิคเหล่านั้นคือการ "จำลอง" ระยะห่างของวัตถุที่อยู่ไกลจากผู้ใช้โดยไม่ต้องเปลี่ยนตำแหน่งของวัตถุนั้นจริง ๆ ตัวอย่างเช่น หากระยะการมองเห็นที่ปลอดภัยสูงสุด (ซึ่งเกินกว่านั้นจะเกิด Z-fighting) คือ 10,000 หน่วย และวัตถุที่จะแสดงผลอยู่ห่างออกไป 15,000 หน่วย วัตถุนั้นอาจถูกแสดงผลที่ระยะ 10,000 หน่วย แต่สามารถลดขนาดลงตามสัดส่วนของระยะทางที่ย้ายไปได้ ดังนั้น วัตถุที่ถูกลดขนาดลงครึ่งหนึ่งจะดูเหมือนอยู่ไกลเป็นสองเท่าของระยะทางจริง หากทำเช่นนี้เฉพาะกับวัตถุที่อยู่ใกล้หรืออยู่ที่ระยะการมองเห็นสูงสุดเท่านั้น และวัตถุที่อยู่ใกล้ผู้ใช้จะถูกเรนเดอร์ตามปกติ เทคนิคนี้จะไม่สังเกตเห็นได้ อีกเทคนิคหนึ่งที่ใช้เพื่อลดหรือกำจัด Z-fighting อย่างสมบูรณ์คือการเปลี่ยนไปใช้ Z-buffer แบบลอการิทึม โดยการกลับค่า Z เทคนิคนี้พบได้ในเกมGrand Theft Auto Vเนื่องจากวิธีการเข้ารหัส ตัวเลขทศนิยมจะมีความแม่นยำมากขึ้นเมื่ออยู่ใกล้ 0 การกลับค่า Z ในที่นี้จะนำไปสู่ความแม่นยำมากขึ้นเมื่อจัดเก็บความลึกของวัตถุที่อยู่ไกลมาก จึงช่วยลด Z-fighting ได้อย่างมาก[ 3 ]

ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Z-fighting&oldid=1343131903 "

สรุปเนื้อหา

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

ข้อมูลสำคัญเกี่ยวกับ การต่อสู้แบบ Z

Z-fighting หรือที่เรียกว่า stitching หรือ planefighting เป็นปรากฏการณ์ใน การเรนเดอร์ 3 มิติ ที่เกิดขึ้นเมื่อ พรีมิทีฟ สองหรือมากกว่า นั้นมีระยะห่างจากกล้องใกล้เคียงกันมาก...

การบรรเทา

สามารถลดปัญหา Z-fighting ได้โดยการใช้ บัฟเฟอร์ความลึก ที่มีความละเอียดสูงขึ้น โดยใช้ z-buffering ในบางสถานการณ์ หรือเพียงแค่ขยับโพลีกอนให้ห่างกันมากขึ้น [ 2 ] ปัญหา Z-fighting ที่ไม่สามารถกำจัดได้อย่างสมบูรณ์ด้วยวิธีนี้ มักจะแก้ไขได้โดยการใช้ stencil buffer...