ส่วนในการเขียนโปรแกรมกราฟิก 3 มิติคืออะไร?


37

แฟรกเมนต์ใน shader แฟรกเมนต์คืออะไร Wikipedia บอกว่า:

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

ดังนั้นมันคือพื้นผิวจุดยอดหรืออะไรอย่างอื่น?

คำตอบ:


31

ในคอมพิวเตอร์กราฟิกส์ชิ้นส่วนเป็นข้อมูลที่จำเป็นในการสร้างมูลค่าพิกเซลเดียวของการวาดแบบดั้งเดิมในบัฟเฟอร์เฟรม

ข้อมูลนี้อาจรวมถึง แต่ไม่ จำกัด เฉพาะ:

  • ตำแหน่งแรสเตอร์
  • ความลึก
  • แอตทริบิวต์ที่ถูกแก้ไข (สี, พิกัดพื้นผิว ฯลฯ )
  • ลายฉลุ
  • แอลฟา
  • ID หน้าต่าง

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

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

จากวิกิพีเดีย


6

แฟรกเมนต์เป็นเพียงข้อมูลที่ได้รับจากการมีส่วนร่วมของ 3 จุดยอดรอบพิกเซลที่คุณแรเงา

ใน Vertex Shader คุณส่งออกข้อมูลบางส่วนต่อจุดสุดยอด (สีเส้นประสานพื้นผิว ... ) จากนั้นใน Fragment Shader สำหรับแต่ละพิกเซลคุณจะได้รับค่าเฉลี่ยถ่วงน้ำหนักของค่าเหล่านั้นซึ่งคุณจะใช้เพื่อสร้างสีสุดท้ายของพิกเซล


พิกเซลและข้อมูลอื่น ๆ ทั้งหมดเกี่ยวกับบัฟเฟอร์ที่มองไม่เห็นดังกล่าวข้างต้น
StarWeaver

4

ในทำนองเดียวกันจุดยอด shader ทำหน้าที่จุดยอดชิ้นส่วน (หรือพิกเซล) shaderจะทำหน้าที่เป็นพิกเซล


ขออภัย แต่สิ่งนี้ไม่ถูกต้องหากไม่ได้กล่าวถึงคำว่า "rastarisation" และการแก้ไข
Notabene

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

4

แฟรกเมนต์ในแฟรกเมนต์คืออะไร

สิ่งที่แม่นยำเพียงอย่างเดียวที่สามารถพูดได้คือการกำหนดอินพุตและเอาต์พุตของแฟรกเมนต์ shader

ตั้งแต่ที่ทำไปแล้ว / กว้างเกินไปฉันจะมุ่งเน้นไปที่ด้านที่มองเห็นได้ง่ายของมัน

แฟรกเมนต์คือเอาต์พุต raster

วิกิ OpenGL พูดว่า:

Fragment คือชุดของค่าที่ผลิตโดย Rasterizer

ซึ่งเหมาะสมแล้วตั้งแต่ชิ้นส่วน shader มาหลังจาก rasterizerซึ่งสร้างอินพุต

และนี่คือการนำเสนอภาพของ rasterizer:

ที่มาของภาพ

อินพุตของ rasterizer เป็นรูปสามเหลี่ยมสามมิติและมุมมองและเอาต์พุตเป็นชุดของพิกเซลที่อาจปรากฏบนหน้าจอ (หากไม่ถูกบล็อกโดยผู้อื่น)

สี่เหลี่ยมจัตุรัสเล็ก ๆ เหล่านั้นแต่ละอัน (ซึ่งถูกเข้ารหัสเป็นพิกเซลเดียว) เป็นชิ้นส่วนของรูปสามเหลี่ยมและส่วนย่อยเป็นเพียงชื่ออีกชิ้นหนึ่งสำหรับชิ้นส่วน


Downvoters โปรดอธิบายเพื่อที่ฉันจะได้เรียนรู้และปรับปรุงเนื้อหา ;-)
Ciro Santilli 事件改造中心中心法轮功六四事件

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