คำถามของฉันเกี่ยวกับโลหะโดยเฉพาะเนื่องจากฉันไม่รู้ว่าคำตอบจะเปลี่ยนไปสำหรับ API อื่นหรือไม่
สิ่งที่ฉันเชื่อว่าฉันเข้าใจคือ:
พื้นผิวแบบ mipmapped ได้ทำการ "ระดับรายละเอียด" ไว้ล่วงหน้าซึ่งรายละเอียดระดับล่างถูกสร้างขึ้นโดยการสุ่มตัวอย่างพื้นผิวดั้งเดิมด้วยวิธีที่มีความหมายบางอย่าง
ระดับ Mipmap ถูกอ้างถึงในรายละเอียดจากมากไปน้อยโดยที่ระดับ
0
คือพื้นผิวดั้งเดิมและระดับที่สูงกว่าเป็นการลดกำลังของสองระดับGPU ส่วนใหญ่ใช้การกรอง trilinear ซึ่งเลือกสองระดับ mipmap ข้างเคียงสำหรับแต่ละตัวอย่างตัวอย่างจากแต่ละระดับโดยใช้การกรอง bilinear และจากนั้นผสมตัวอย่างเหล่านั้นเป็นเส้นตรง
สิ่งที่ฉันไม่ค่อยเข้าใจคือเลือกระดับ mipmap เหล่านี้อย่างไร ในเอกสารสำหรับห้องสมุดมาตรฐานโลหะฉันเห็นว่าสามารถเก็บตัวอย่างได้โดยมีหรือไม่มีการระบุอินสแตนซ์ของlod_options
ประเภท ฉันสมมติว่าอาร์กิวเมนต์นี้เปลี่ยนวิธีการเลือกระดับ mipmap และดูเหมือนว่ามีlod_options
พื้นผิวแบบ 2D สามแบบ:
bias(float value)
level(float lod)
gradient2d(float2 dPdx, float2 dPdy)
น่าเสียดายที่เอกสารไม่ได้อธิบายว่าตัวเลือกเหล่านี้มีอะไรบ้าง ฉันสามารถเดาได้ว่าbias()
อคติบางระดับที่เลือกโดยอัตโนมัติ แต่แล้วความลำเอียงvalue
หมายถึงอะไร มันใช้งานได้ในระดับใด? ในทำนองเดียวกันว่าเป็นlod
ของlevel()
การแปลเป็นระดับมิพแมพที่ไม่ต่อเนื่อง? และการทำงานภายใต้สมมติฐานที่gradient2d()
ใช้การไล่ระดับสีของพิกัดพื้นผิวการใช้การไล่ระดับสีนั้นเพื่อเลือกระดับ mipmap เป็นอย่างไร
ที่สำคัญกว่านั้นถ้าฉันไม่ใช้lod_options
ระดับ mipmap จะถูกเลือกอย่างไร สิ่งนี้แตกต่างกันไปตามประเภทของฟังก์ชั่นที่ใช้งานหรือไม่
และหากการดำเนินการที่ไม่ได้ระบุตัวเลือกเริ่มต้นของsample()
ฟังก์ชั่นนี้คือการทำบางสิ่งเช่นgradient2D()
(อย่างน้อยก็ใน shader แฟรกเมนต์) มันใช้อนุพันธ์พื้นที่หน้าจอแบบง่ายหรือทำงานโดยตรงกับ rasterizer และพิกัดพื้นผิว interpolated การคำนวณการไล่ระดับสีที่แม่นยำ
และในที่สุดพฤติกรรมนี้มีความสอดคล้องกันมากน้อยเพียงใดจากอุปกรณ์หนึ่งไปยังอีกอุปกรณ์หนึ่ง บทความเก่า (เก่าเหมือนใน DirectX 9) ฉันอ่านอ้างถึงการเลือก mipmap เฉพาะอุปกรณ์ที่ซับซ้อน แต่ฉันไม่ทราบว่าการเลือก mipmap นั้นกำหนดได้ดีกว่าในสถาปัตยกรรมใหม่กว่านี้หรือไม่