1
ระดับ mipmap คำนวณได้อย่างไรในโลหะ?
คำถามของฉันเกี่ยวกับโลหะโดยเฉพาะเนื่องจากฉันไม่รู้ว่าคำตอบจะเปลี่ยนไปสำหรับ 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()(อย่างน้อยก็ใน …