ฉันได้ยินมาจากหลายแหล่งที่มีรอยต่อ T-in ใน 3D meshes เป็นความคิดที่ไม่ดีเพราะมันอาจส่งผลให้เกิดรอยแตกในระหว่างการเรนเดอร์ บางคนสามารถอธิบายได้ว่าทำไมมันถึงเกิดขึ้นและสิ่งหนึ่งที่สามารถทำได้เพื่อหลีกเลี่ยงพวกเขา?
ฉันได้ยินมาจากหลายแหล่งที่มีรอยต่อ T-in ใน 3D meshes เป็นความคิดที่ไม่ดีเพราะมันอาจส่งผลให้เกิดรอยแตกในระหว่างการเรนเดอร์ บางคนสามารถอธิบายได้ว่าทำไมมันถึงเกิดขึ้นและสิ่งหนึ่งที่สามารถทำได้เพื่อหลีกเลี่ยงพวกเขา?
คำตอบ:
คำตอบของ lhf นั้นดีจากมุมมองของ tessellation แต่สิ่งเหล่านี้สามารถเกิดขึ้นได้กับกรณีการใช้ตาข่ายสามเหลี่ยมที่ง่ายขึ้น
ใช้ตัวอย่างเล็กน้อยนี้ของสามสามเหลี่ยมพื้นที่หน้าจอ , ABC, ADE และ DBE ...
แม้ว่าจุด E นั้นในทางคณิตศาสตร์มีจุดประสงค์เพื่อให้อยู่ในส่วนของเส้นตรง AB ท่อส่งจะไม่ใช้ค่าที่แม่นยำอย่างเต็มที่เช่นตัวเลขที่มีเหตุผล (เช่นhttps://gmplib.org/ ) แต่น่าจะเป็นการใช้แบบลอยตัวดังนั้นจะมีการนำเสนอการประมาณ / ข้อผิดพลาดบางอย่าง ผลลัพธ์อาจเป็นดังนี้:
โปรดทราบว่าทั้งหมดของจุดอาจจะมีความไม่ถูกต้อง แม้ว่าตัวอย่างข้างต้นแสดงให้เห็นถึงรอยร้าว T-junction อาจส่งผลให้เกิดการทับซ้อนตามขอบทำให้พิกเซลถูกวาดสองครั้ง สิ่งนี้อาจดูไม่ดี แต่อาจทำให้เกิดปัญหากับการดำเนินงานที่โปร่งใสหรือมีลายฉลุ
จากนั้นคุณอาจคิดว่าจุดลอยตัวข้อผิดพลาดที่นำเสนอจะไม่มีนัยสำคัญ แต่ในโหมดแสดงภาพค่าจุดยอดพื้นที่หน้าจอ (X, Y) จะแสดงเกือบทุกครั้งด้วยหมายเลขจุดคงที่และการเคลื่อนที่จากตำแหน่งในอุดมคติ มักจะมากขึ้น ยิ่งไปกว่านั้นเมื่อฮาร์ดแวร์การเรนเดอร์ "interpolates" ส่วนของเส้นพิกเซลต่อพิกเซลด้วยความแม่นยำภายในของตัวเองจึงมีโอกาสมากขึ้นที่มันจะแตกต่างจากตำแหน่งโค้งมนของ E
ถ้าทางแยกถูก "ลบ" โดยให้แบ่ง ABC ABC เป็นสองส่วนด้วยกันเช่น AEC และ EBC ปัญหาจะหายไปเมื่อการเปลี่ยนแปลงที่เกิดจากข้อผิดพลาดนั้นสอดคล้องกันทั้งหมด
ทีนี้คุณอาจถามว่าทำไมตัวเรนเดอร์ (โดยเฉพาะ HW) ใช้คณิตศาสตร์แบบจุดคงที่สำหรับพิกัดจุดสุดยอด XY? ทำไมพวกเขาไม่ใช้เลขทศนิยมเพื่อลดปัญหา? แม้ว่าบางคนทำ (เช่น Sega's Dreamcast) แต่ก็สามารถนำไปสู่ปัญหาอื่นได้ซึ่งการตั้งค่าทางคณิตศาสตร์ของสามเหลี่ยมนั้นไม่ถูกต้องอย่างหายนะโดยเฉพาะอย่างยิ่งสำหรับรูปสามเหลี่ยมยาวบาง ๆ
เมื่อสร้างแบบจำลองพารามิเตอร์พื้นผิวด้วยตาข่ายในโดเมนพารามิเตอร์ส่วนแยกอาจจะปรากฏเป็นความไม่ต่อเนื่องในพื้นผิว สิ่งเหล่านี้จะปรากฏเป็นช่องว่างในการแสดงผล ดูด้านล่าง
โดยทั่วไป T-junctions ในตาข่ายรูปสามเหลี่ยมอาจส่งผลให้เกิดความไม่ต่อเนื่องของคุณลักษณะที่ถูกแก้ไขเช่นสีและบรรทัดฐาน
ข้อผิดพลาดในการปัดเศษทศนิยม
หลังจากที่คุณแปลงทางแยก T และจุดใน T สามารถปัดเศษจากขอบ
จากนั้นอาจเกิดขึ้นได้ว่าชิ้นส่วนที่ได้รับตัวอย่างสำหรับพิกเซลอยู่ในช่องว่างระหว่างพื้นผิวทั้งสอง
สิ่งนี้สามารถแก้ไขได้โดยไม่ต้องมี T-junction ในตอนแรก
วิธีที่ง่ายที่สุดในการหลีกเลี่ยงปัญหานี้คือการทำให้แน่ใจว่าทุกอย่างมีการเชื่อมของคุณ
ปัญหาของคุณคือคุณมีการตัดตามขอบด้วยจุดยอด แต่คุณไม่มีจุดสุดยอดที่สอดคล้องกันบนขอบที่อยู่ติดกันเพื่อเชื่อม / เชื่อมต่อกับถ้าคุณคิดว่ามันเหมือนปุ่มบนเสื้อคุณได้หว่านลงบน ปุ่มไปที่ขอบ แต่ไม่ได้ให้รูเพื่อให้ผ้าเปิด
ในภาพด้านล่างจุดสีแดงแสดงจุดเชื่อมที่ถูกต้องจุดสีฟ้าทั้งหมดต้องมีจุดยอดเพิ่มเติมเพื่อตัดเข้าหาขอบที่อยู่ติดกัน
โดยทั่วไปแล้วมันเป็นการปฏิบัติที่ดีที่จะรักษาแบบจำลองของคุณให้อยู่ในรูปของควอด & ไตรส่วนนี้จะช่วยบรรเทาปัญหานี้ได้เนื่องจากคุณควรมีจุดสุดยอดที่สอดคล้องกันเพื่อเชื่อมด้วยเช่นกัน นอกจากนี้ยังช่วยในการล่ามถ้าคุณวางแผนที่จะใช้วิธีการจัดสรรใด ๆ ในตาข่าย