Multitexturing เป็นเพียงแค่“ ใช้มากกว่าหนึ่งพื้นผิว” หรือไม่?


10

นี่อาจดูงี่เง่า แต่มันทำให้ฉันรำคาญ จากสิ่งที่ฉันเข้าใจการใช้multitexturingนั้นใช้มากกว่า 1 texture ต่อ shader เท่านั้น ดังนั้นแทนที่จะสร้าง 1 พื้นผิวฉันสร้าง 2 อย่างขึ้นไปซึ่งก็คือ ... ค่อนข้างชัดเจน!

ทำไมมีคำพิเศษสำหรับสิ่งนั้น มีมากกว่านั้นเพียงแค่ "ใช้มากกว่า 1 พื้นผิว"? ฉันพลาดอะไรไปรึเปล่า?


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

แต่การใช้มัลติเธรดต้องใช้ API พิเศษการออกแบบโปรแกรมที่แตกต่างอย่างสิ้นเชิงเป็นต้น มันแตกต่างกันในหลาย ๆ ด้าน คำถามของฉันเกิดจากความจริงที่ว่า multitexturing ดูเหมือนจะไม่ได้มีอะไรที่แตกต่างออกไป และมันก็ไม่ใช่ปัญหาแค่คำถาม
NPS

ไม่จำเป็นต้องมี API พิเศษ ที่จะขึ้นอยู่กับการดำเนินการ ฉันใช้เครื่องมือบางอย่างที่จัดการกับ multitexture ในลักษณะเดียวกับที่พวกเขาจะ "รวมตัวกัน";)
AturSams

@concept ส่วนไหน? ชื่อเรื่อง?
Anko

คำตอบ:


16

คำศัพท์พิเศษเกี่ยวข้องกับวิวัฒนาการของกราฟิกการ์ดและกราฟิค API แบบเรียลไทม์แทนที่จะเป็นสิ่งพิเศษ ตัวอย่างเช่นการประมวลผลภาพและการแสดงผลกราฟิกออฟไลน์มีคุณสมบัตินี้มานานก่อนที่จะพร้อมใช้งานใน API กราฟิกแบบเรียลไทม์และฮาร์ดแวร์ระดับผู้บริโภค

นับตั้งแต่มีการแนะนำการใช้มัลติทาสกิ้ง OpenGL 1.1 (การทำงานที่ตายตัว) เป็นสถานะใหม่ให้กับ API แทนที่จะผูกเพียงพื้นผิวเดียวมันทำให้คุณสามารถผูกหลายพื้นผิวได้ หนึ่งสำหรับแต่ละหน่วยเนื้อแล้วผสมผสานระหว่างพวกเขาใช้พารามิเตอร์ของสภาพแวดล้อมพื้นผิวผสม modulate..etc 1

จากนั้นแนะนำให้ใช้combiners พื้นผิวมันให้ความสามารถในการรวมชุดของพื้นผิวโดยใช้การดำเนินการที่ยืดหยุ่นมากขึ้นโดยให้วิธีการส่งพารามิเตอร์ไปยังชุดปฏิบัติการคงที่ (คิดว่ามันเป็นเงา แต่มีชุดคงที่) นี่คือ มีความยืดหยุ่นมากกว่า "combiners" ดั้งเดิม

ด้วยการแนะนำของ shaders, combiners ก่อนหน้านี้กลายเป็นซ้ำซ้อนจนเลิกอย่างเป็นทางการ ในที่สุดมันก็กลายเป็นเรื่องเล็กน้อย (เป็นฮาร์ดแวร์และ APIs ที่พัฒนาขึ้น) เพื่อส่งตัวอย่างเนื้อสัมผัสไปยัง shader และปล่อยให้ GPU ดำเนินการตามอำเภอใจ (shader ของคุณ) บนพื้นผิวของคุณมากขึ้นกว่าที่เคยเป็นมาก่อน

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

1ฉันใช้หน่วยความจำของฉันเพื่อเรียกใช้งานฟังก์ชันคงที่ของ OpenGL แก้ไขให้ถูกต้องหากฉันพลาด sth


5

เหตุผลทางประวัติศาสตร์คือ "multitexturing" เป็นคำศัพท์ทางการตลาดเช่น "ฮาร์ดแวร์ TnL" กาลครั้งหนึ่ง เนื่องจากเป็นคุณสมบัติที่โดดเด่นของการ์ดใหม่จึงจำเป็นต้องมีคำเพื่อให้ขาย

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

ความแตกต่างไม่ใช่ว่าคุณสามารถสร้างพื้นผิวได้หลายแบบ แต่คุณรวมพื้นผิวสองแบบขึ้นไป ตัวอย่างเช่นคุณอาจผสมผสานพวกเขาตามอัลฟ่าหรือปัจจัยการผสมผสานแบบผสมต่อจุดยอดบางอย่างหรือคุณอาจเพิ่มพวกเขาหรือสิ่งที่แตกต่างกัน
ปริมาณของ configurability / การเขียนโปรแกรมที่มีการพัฒนาอย่างมากในช่วงทศวรรษที่ผ่านมา แต่ยังคงเป็นหนึ่งในความแตกต่างที่ดีที่คุณสามารถอย่างใดรวมสองหรือมากกว่าปัจจัยการผลิตเป็นหนึ่งในการส่งออก


2

ในการเริ่มต้นมีแสง

การให้แสง OpenGL มีความเฉพาะเจาะจงซึ่งระบุการดำเนินการทางคณิตศาสตร์บางอย่างที่จะนำไปใช้กับส่วนย่อยซึ่งรวมกับพื้นผิวเพื่อให้ได้สีสุดท้าย

แล้วมี Quake

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

อย่างไรก็ตามฮาร์ดแวร์ของเวลาไม่สนับสนุนสิ่งนี้ในการทำงานครั้งเดียว Quake ต้องวาดมันเป็นฉากของวัตถุสองครั้ง:

  • วาดทุกอย่างหนึ่งครั้งเพื่อวางพื้นผิวฐาน
  • ตั้งค่าโหมดผสมผสานการมอดูเลต
  • วาดทุกอย่างเป็นครั้งที่สองเพื่อปรับพื้นผิวแสง

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

ป้อนมัลติไซต์

Multitexture เป็นวิธีการแก้ปัญหานี้และเดิมถูกเปิดเผยผ่านส่วนขยาย GL_SGIS_multitexture ซึ่งมีอยู่ในการ์ด 3DFX ของผู้บริโภคเท่านั้น เดิมทีอนุญาตเพียงการผสมพื้นผิวสองแบบเท่านั้น (และด้วยโหมดการผสมผสานแบบ จำกัด )

หากต้องการอ้างอิงจากต้นฉบับGLQuake readme :

GL_SGIS_multitexture
รองรับ Multitextures ช่วยให้ฮาร์ดแวร์บางตัวแสดงผลโลกในครั้งเดียวแทนที่จะเป็นสอง GLQuake ใช้การผ่านสองครั้งครั้งแรกสำหรับพื้นผิวโลกและครั้งที่สองสำหรับ Lightmaps ที่ผสมกับพื้นผิว ในฮาร์ดแวร์บางตัวด้วย GL_SIGS_multitexture รองรับการใช้งาน OpenGL สิ่งนี้สามารถทำได้ในครั้งเดียว สำหรับฮาร์ดแวร์ที่รองรับสิ่งนี้คุณจะได้รับอัตราเฟรมเพิ่มขึ้น 60% ถึง 100% ปัจจุบันเฉพาะการ์ด TMX คู่ TMU (เช่น Obsidian 2220) เท่านั้นที่รองรับส่วนขยายนี้ แต่ฮาร์ดแวร์อื่น ๆ จะตามมาในไม่ช้า

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

และจนถึงปัจจุบัน

จากตรงนี้มันค่อนข้างจะอธิบายไว้ในคำตอบอื่น ๆ Multitexturing กลายเป็นคุณสมบัติมาตรฐานเมื่อเวลาผ่านไปโดยมีโหมดการผสมผสานที่พร้อมใช้งานมากขึ้นและในที่สุดก็ให้วิธีการรหัส shader โดยพลการ

แต่สิ่งที่สำคัญสำหรับวัตถุประสงค์ของคำถามของคุณคือ: ในตอนแรกฟังก์ชันมาตรฐานก็สามารถใช้พื้นผิวได้ครั้งละหนึ่งการแสดงผลเท่านั้น ความสามารถในการใช้มากกว่าหนึ่งฟังก์ชั่นเพิ่มเติมที่รองรับเฉพาะฮาร์ดแวร์ระดับสูงเท่านั้นและจำเป็นต้องใช้ชื่อ ชื่อนั้นอาจเป็น "การทำพื้นผิวแบบดูอัล" (เนื่องจากการใช้งานครั้งแรกเพียงรองรับสองพื้นผิว) แต่ด้วยตาเดียวในอนาคตชื่อ "multitexture" จึงถูกเลือก

การอ่านเพิ่มเติมเกี่ยวกับประวัติทั้งหมดนี้มีอยู่ที่นี่และการเขียนเชิงประวัติศาสตร์ที่ดี (จากบริบทที่กว้างขึ้นและการเล่นมัลติทาสกิ้งบางส่วนในนั้น) ที่คำตอบของโปรแกรมเมอร์

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