วัตถุประสงค์ของบัฟเฟอร์ stencil คืออะไร? ยิ่งไปกว่านั้นลายฉลุในคอมพิวเตอร์กราฟิกคืออะไร


41

ฉันอ่านคำว่า stencil มากและฉันก็ไม่รู้ว่ามันมีจุดประสงค์อะไรในคอมพิวเตอร์กราฟิก

เห็นภาพขาวดำบนวิกิพีเดียฉันยังคงมีปัญหากับมัน

ทำไมเราใช้ stencil หรือ stencil buffer และ Z-buffer ต่างกันอย่างไร ทำไมใช้คำนี้ซึ่งดูเหมือนจะมีความหมายบางอย่างในการออกแบบกราฟิก?


เป็นคำถามที่ดีสิ่งที่ฉันรู้ก็คือมันใช้สำหรับแสดงเงา ... แต่ฉันจะสนใจฟังคำอธิบายทั้งหมด!
Ricket

คำตอบ:


40

ในรูปแบบดั้งเดิมบัฟเฟอร์ stencil เป็นหนึ่งบิตต่อพิกเซล (เช่นสีดำหรือสีขาว แต่ไม่มีสีเทา) framebuffer คุณสามารถปรับให้เข้ากับสิ่งที่คุณต้องการได้เช่น framebuffer อื่น ๆ จากนั้นในภายหลังคุณสามารถใช้เนื้อหาของบัฟเฟอร์นั้นเพื่อ "stencil" หรือปิดบังเมื่อวาดไปยังบัฟเฟอร์ปกติของคุณ

ตัวอย่าง: สมมติว่าคุณกำลังสร้างเกมขับรถ คุณต้องการมีกระจกมองหลังบนหน้าจอเล็ก ๆ น้อย ๆ ที่แสดงสิ่งที่อยู่ข้างหลังรถ คุณจะต้องแสดงมุมมองที่ชี้ไปด้านหลังรถ แต่คุณเพียงต้องการแสดงภาพนั้นในสี่เหลี่ยมมุมมนเล็ก ๆ ของกระจกมองหลัง วิธีการแก้ปัญหาทั่วไปคือ:

  1. แสดงรูปร่างสี่เหลี่ยมมุมมนเพื่อบัฟเฟอร์ stencil
  2. เปิดใช้งาน stencilling
  3. แสดงมุมมองการชี้ไปทางด้านหลังลงในบัฟเฟอร์ปกติ

ลายฉลุนั้นจะทำการปกปิดออกเพื่อให้คุณวาดเป็นรูปทรงของกระจกเท่านั้น

เมื่อตอนนี้ท่อส่งเรนเดอร์มีความยืดหยุ่นและตั้งโปรแกรมได้แล้วบัฟเฟอร์ stencil ถูกใช้เป็น framebuffer ทั่วไปขนาด 1 บิตที่คุณสามารถทำสิ่งที่คุณต้องการได้ เงาเป็นกรณีการใช้งานทั่วไป


10
กล่าวอีกนัยหนึ่งมันมีฟังก์ชั่นเหมือนกับลายฉลุชีวิตจริงโดยปกปิดส่วนเมื่อใช้หมึก
Kaj

4
อุปกรณ์เกือบทุกวันนี้รองรับบัฟเฟอร์ stencil 8 บิต
Chris Howe

ฉันไม่ได้รับแบบของคุณจริง ๆ เหมือนมี frustrum ที่สองหรือไม่ มันทำให้ rasterizes ส่วนอื่นของฉากไหม คุณสามารถยกตัวอย่างด้วยเงาได้หรือไม่?
jokoon

มันเป็นเพียงบัฟเฟอร์เฟรมที่สอง คุณสามารถเปลี่ยน frustum ได้ตลอดเวลาก่อนที่คุณจะแสดงผล (ซึ่งเป็นสิ่งที่ฉันคิดว่าระบบเงาทำ) แต่นั่นไม่ได้เป็นส่วนหนึ่งของแนวคิดหลัก
เอื้อเฟื้อเผื่อแผ่

9

นอกจากการใช้งานฟังก์ชั่นของบัฟเฟอร์ลายฉลุที่ผู้คนได้กล่าวถึงแล้วบัฟเฟอร์ลายฉลุยังสามารถใช้สำหรับการเพิ่มประสิทธิภาพ

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


4

มันเป็นเพียงบัฟเฟอร์ที่ควบคุมพิกเซลที่สามารถแก้ไขได้เมื่อมีการแสดงรูปหลายเหลี่ยม สำหรับแต่ละพิกเซลมีค่า stencil ที่สอดคล้องกันและสามารถแก้ไข / ละเว้นพิกเซลแบบมีเงื่อนไขได้โดยขึ้นอยู่กับค่าเหล่านี้

ที่ง่ายที่สุดก็สามารถใช้เหมือนลายฉลุกายภาพ - หน้ากากที่ช่วยให้บางพิกเซลผ่านและหยุดพิกเซลอื่น ๆ ที่ถูกแก้ไข

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.