บทนำ
เอ็นจิ้นการเรนเดอร์กราฟิกแบบเวกเตอร์หลายตัวมีข้อบกพร่องของอัลกอริทึมในตัว พวกมันแสดงรูปร่างแต่ละแบบแยกกันและ antialias โดยการคำนวณความครอบคลุมของพิกเซลแล้วประกอบมันไว้ที่ด้านบนของกันและกัน ใช่มันง่าย แต่การแก้ปัญหาที่ถูกต้องนั้นง่ายกว่า
สิ่งนี้นำไปสู่ปัญหา conflation ในขณะที่ conflates ความคุ้มครองโดยความโปร่งใส การผสมอัลฟ่าเป็นไปตามกฎที่ไม่ได้เป็นตัวแทนของสถานการณ์อย่างถูกต้องตัวอย่างเช่นถ่ายภาพพิกเซลที่ครอบคลุม 50% ที่อยู่ใกล้เคียงกับพิกเซลที่ครอบคลุม 50% ไม่ได้จบลงด้วยการครอบคลุม 100% มันจบลงด้วยความครอบคลุม 75% . สิ่งที่ดูเหมือนจะขึ้นอยู่กับวิธีการปรับอัลกอริทึมและรายละเอียดอื่น ๆ แต่ในสาระสำคัญนี่เป็นข้อผิดพลาดที่ทราบ บางคนทำปัญหาการทำเอกสารข้อผิดพลาดของเครื่องยนต์แตกต่างกันไปรวมทั้งการเขียนบทความแสดงให้เห็นว่าสามารถทำได้ดีกว่า
ภาพที่ 1 : ตัวอย่างที่ไม่ได้เป็นตัวแทนทั้งหมดของการเรนเดอร์รูปร่างที่ทำจากสามเหลี่ยมแสดงข้อผิดพลาดแบบขยายที่แถวบนสุด แหล่งที่มาของ SVG
ปัญหามีวิธีแก้ปัญหาที่ไม่ยุ่งยากง่าย ๆ * เป็นเพียงตัวอย่างขั้นสูงโดยไม่ต้องคำนวณการครอบคลุมและกรองภาพลง เป็นโบนัสที่คุณจะได้ใช้อัลกอริธึมการสร้างภาพที่ดีกว่าการกรองแบบกล่อง (อ่านA Pixel ไม่ใช่สี่เหลี่ยมจัตุรัส3 ) มีแม้กระทั่งโซลูชันที่มีความเร็วเทียบเคียงได้กับโซลูชันปัจจุบันและวิธีแก้ปัญหาเหล่านี้ทำได้ง่ายกว่ามากในท่อส่งแรสเตอร์ฮาร์ดแวร์
นี่ไม่ใช่ปัญหาโดยไม่มีค่าใช้จ่าย มีหลายคนที่ทำงานด้านการออกแบบกราฟิกที่ใช้เวลาจำนวนเล็กน้อยในการพยายามหลีกเลี่ยงปัญหานี้ด้วยตนเองโดยทำให้แน่ใจว่ามีการทับซ้อนกันที่นี่และไม่มีการทับซ้อนกันเพื่อแก้ไขปัญหาที่คอมพิวเตอร์ควรทำเพื่อพวกเขา และล้มเหลวอย่างน่าทึ่งในหลายกรณี แต่ลูกค้าของพวกเขาไม่สนใจว่าทำไมข้อผิดพลาดอยู่ที่นั่นพวกเขาจะต้องแก้ไข
คำถาม
ข้อผิดพลาดเผยแพร่อย่างไร เนื่องจากพวกเขากำลังทำข้อผิดพลาดเดียวกันทั้งหมดจึงสามารถสรุปได้ว่าพวกเขาใช้แหล่งเดียวกันสำหรับอัลกอริทึมของพวกเขา สิ่งที่อาจทำให้นักออกแบบเลือกอัลกอริทึมนี้ เหตุใดโปรแกรมเมอร์ 3D เท่านั้นที่รู้จักข้อผิดพลาดนี้และแม้แต่ประมวลรหัสส่วนหนึ่งใน API และการสอนในขณะที่โปรแกรมเมอร์ 2D ไม่ได้
จะมั่นใจได้อย่างไรว่าข้อผิดพลาดนี้หยุดเผยแพร่ต่อไป?
ภาคผนวก (แต่ฉันไม่ได้ถามเกี่ยวกับเรื่องนี้)
* เห็นได้ชัดว่าการอ้างสิทธิ์ของฉันว่าการสุ่มตัวอย่างแบบพิเศษทำงานได้อย่างไร้ข้อบกพร่องเป็นพิเศษและต้องใช้การพิสูจน์พิเศษ ตกลงดังนั้นกุญแจสำคัญในการทำงานของการสุ่มตัวอย่างแบบพิเศษคือการสุ่มตัวอย่างแบบพิเศษนั้นไม่ได้ทำการประมวลผลการครอบคลุม ในสาระสำคัญตัวอย่าง super ถือว่าแต่ละตัวอย่างเป็นตัวอย่างจุด เนื่องจากตัวอย่างจุดทำให้ไม่มีสมมติฐานของพื้นที่ต้นแบบมันไม่ได้ทำให้การเปรียบเทียบอัลฟาที่มันไม่เกิดขึ้น
เพื่อให้ทำงานได้อย่างต่อเนื่องตามที่อธิบายไว้ในคำตอบข้อใดข้อหนึ่ง เราจำเป็นต้องทำการประมวลผลตัวอย่างด้วยการสุ่มตัวอย่างจำนวนเต็มเพื่อความสอดคล้อง สิ่งนี้ทำให้เรามั่นใจว่าแต่ละจุดที่เคยเปลี่ยนเป็นพื้นที่หน้าจอได้รับการแก้ปัญหาเดียวกันสำหรับพิกัดที่เท่ากันและไม่มีการแรเงาตัวอย่างโดยเส้นขอบพิกเซล 2 ครั้ง หากต้องการทำสิ่งนี้ตัวอย่างอาจไม่เปิดใช้งานพิกเซล ot อย่างแน่นอนหากเป็นตัวอย่างด้านล่างซ้ายของด้านล่าง (ดังนั้นเราจึงสร้างกฎที่ประมวลผลขอบที่แน่นอนใน> vs <=) การ์ดกราฟิกคอนโซลทั้งหมดทำงานได้อย่างนี้ ช่วยให้มั่นใจได้ว่าไม่จำเป็นต้องมีแคชข้อมูลเพิ่มเติมและไม่จำเป็นต้องทำการทดสอบใกล้เคียง โซลูชันนี้มีความเสถียรทั่วไปและสอดคล้องกว่าโซลูชันที่ครอบคลุม
อัลกอริทึมเหมือนกับต้นฉบับที่มีโค้ดน้อยกว่าเล็กน้อยและมีตัวอย่างมากขึ้นเล็กน้อย ดังนั้นจึงเป็นเรื่องที่สอดคล้องกันหากไม่มากไปกว่าอัลกอริธึมที่ครอบคลุม เรารู้สิ่งนี้เพราะเราใช้วิธีการดังกล่าวมานานในเกือบทุกเขตข้อมูลการประมวลผลสัญญาณอื่น ๆ รวมถึงกราฟิกการ์ด
ดังนั้นวิธีนี้มีข้อเสียหรือไม่ มันช้ากว่าหน่อยถ้าคุณแค่คิดว่าไร้เดียงสา ในทางทฤษฎีแล้วมันมีพฤติกรรมที่รวดเร็วกว่า asymptotic มากกว่า rasterizer ที่มีข่าวครอบคลุมบิตเหมือน raytracer ที่ยังคงเท่าเดิมในฉากทั่วไป นอกจากนี้มันสามารถทำให้การใช้งานของลักษณะพิเศษแบบ convolution เจ็บปวดยิ่งขึ้นในการใช้