การทำแผนที่พื้นผิว

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา
1: โมเดล 3 มิติที่ไม่มีพื้นผิว
2: โมเดลเดียวกันกับพื้นผิว
การทำแผนที่พื้นผิวสองมิติบนแบบจำลอง 3 มิติ

การทำแผนที่พื้นผิว[1] [2] [3]เป็นวิธีการกำหนดรายละเอียด ความถี่สูง พื้นผิว หรือ ข้อมูล สีบนกราฟิกที่สร้างโดยคอมพิวเตอร์หรือแบบจำลอง 3 มิติ เทคนิคดั้งเดิมเป็นผู้บุกเบิกโดยEdwin Catmullในปี 1974 [4]

การแมปพื้นผิวเดิมเรียกว่าdiffuse mappingซึ่งเป็นวิธีการง่ายๆ ในการแมปพิกเซลจากพื้นผิวไปยังพื้นผิว 3 มิติ ("wrapping" ภาพรอบๆ วัตถุ) ในทศวรรษที่ผ่านมา การเรนเดอร์ multi-pass, multitexturing , mipmapsและการทำแผนที่ที่ซับซ้อนมากขึ้น เช่นการทำแผนที่ความสูง , การทำแผนที่แบบ ชน , การทำแผนที่ปกติ, การทำแผนที่การเคลื่อนที่, การทำแผนที่การสะท้อน,การทำแผนที่แบบพิเศษ , การทำแผนที่ การบดเคี้ยวและรูปแบบอื่น ๆ อีกมากมายในเทคนิค (ควบคุมด้วยระบบวัสดุ) ทำให้สามารถจำลองภาพเสมือนจริงในเวลาจริงได้โดยการลดจำนวนรูปหลายเหลี่ยมและการคำนวณแสงที่จำเป็นอย่างมากในการสร้างฉาก 3 มิติที่สมจริงและใช้งานได้จริง

ตัวอย่างของmultitexturing :
1: Untextured sphere, 2: Texture and bump map, 3: Texture map only, 4: Opacity and texture maps

แผนที่พื้นผิว

อาแผนที่พื้นผิว [5] [6]เป็นภาพที่นำมาใช้ (แมป) กับพื้นผิวของรูปร่างหรือหลายเหลี่ยม [7]นี่อาจเป็นภาพบิตแมปหรือพื้นผิวขั้นตอน อาจถูกจัดเก็บในรูปแบบไฟล์รูปภาพอ้างอิงโดยรูปแบบโมเดล 3 มิติหรือคำจำกัดความของวัสดุและ ประกอบเป็นชุดทรัพยากร

พวกมันอาจมี 1-3 มิติ ถึงแม้ว่า 2 มิติจะเป็นเรื่องธรรมดาที่สุดสำหรับพื้นผิวที่มองเห็นได้ สำหรับใช้กับฮาร์ดแวร์สมัยใหม่ ข้อมูลแผนที่พื้นผิวอาจถูกจัดเก็บใน ลำดับที่ สลับซับซ้อนหรือเรียงต่อกัน เพื่อปรับปรุง ความสอดคล้อง ของแคช โดยทั่วไปแล้ว Rendering APIจะจัดการทรัพยากรแผนที่พื้นผิว (ซึ่งอาจอยู่ในหน่วยความจำของอุปกรณ์ ) เป็นบัฟเฟอร์หรือพื้นผิว และอาจอนุญาตให้ ' แสดงผลเป็นพื้นผิว ' สำหรับเอฟเฟกต์เพิ่มเติม เช่น การประมวลผลภายหลังหรือการทำแผนที่สภาพแวดล้อม

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

แผนที่พื้นผิวหลายรายการ (หรือช่องสัญญาณ ) อาจรวมกันเพื่อควบคุมspecularity , normals , displacementหรือsubsurface scatteringเช่น การแสดงผิว

อาจรวมรูปภาพพื้นผิวหลายภาพไว้ในAtlases พื้นผิวหรือพื้นผิวอาร์เรย์เพื่อลดการเปลี่ยนแปลงสถานะสำหรับฮาร์ดแวร์สมัยใหม่ (อาจถือได้ว่าเป็นวิวัฒนาการสมัยใหม่ของกราฟิกแผนที่ย่อย) ฮาร์ดแวร์สมัยใหม่มักจะสนับสนุน พื้นผิว แผนที่ลูกบาศก์ที่มีหลายหน้าสำหรับการทำแผนที่สภาพแวดล้อม

การสร้าง

แผนที่พื้นผิวอาจได้มาโดยการสแกน / การถ่ายภาพดิจิทัลซึ่งออกแบบในซอฟต์แวร์จัดการภาพเช่นGIMP , Photoshopหรือวาดลงบนพื้นผิว 3 มิติโดยตรงในเครื่องมือระบายสี 3มิติ เช่นMudboxหรือzbrush

การประยุกต์ใช้พื้นผิว

กระบวนการนี้คล้ายกับการนำกระดาษที่มีลวดลายมาใช้กับกล่องสีขาวธรรมดา จุดยอดทุกจุดในรูปหลายเหลี่ยมถูกกำหนดพิกัดพื้นผิว (ซึ่งในกรณี 2d เรียกอีกอย่างว่าพิกัด UV ) [8] สามารถทำได้ผ่านการกำหนดแอตทริบิวต์จุดยอด อย่างชัดแจ้ง แก้ไขด้วยตนเองในแพ็คเกจการสร้างแบบจำลอง 3 มิติผ่าน เครื่องมือ แกะUV นอกจากนี้ยังสามารถเชื่อมโยงการเปลี่ยนแปลงขั้นตอนจากพื้นที่ 3 มิติไปยังพื้นที่พื้นผิวด้วยวัสดุ ซึ่งสามารถทำได้ผ่านการฉายภาพระนาบหรืออีกวิธีหนึ่งคือทรงกระบอกหรือทรงกลมการทำแผนที่ การทำแผนที่ที่ซับซ้อนมากขึ้นอาจพิจารณาระยะทางตามพื้นผิวเพื่อลดความผิดเพี้ยน พิกัดเหล่านี้จะถูกสอดแทรกตามใบหน้าของรูปหลายเหลี่ยมเพื่อสุ่มตัวอย่างแผนที่พื้นผิวในระหว่างการเรนเดอร์ พื้นผิวอาจถูกทำซ้ำหรือทำมิเรอร์เพื่อขยายบิตแมปสี่เหลี่ยมที่มีขอบเขตเหนือพื้นที่ขนาดใหญ่ หรืออาจมีการ ทำแผนที่แบบ " injective " ที่ไม่ซ้ำกันแบบหนึ่งต่อหนึ่ง จากทุกส่วนของพื้นผิว (ซึ่งเป็นสิ่งสำคัญสำหรับการทำแผนที่การ เรนเดอร์ และการทำแผนที่แสงด้วย เรียกว่า การอบ ).

พื้นที่พื้นผิว

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

มัลติเท็กซ์เจอร์

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

การกรองพื้นผิว

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

การสตรีมพื้นผิว

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

การอบ

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

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

อัลกอริธึม Rasterization

มีการพัฒนาเทคนิคต่างๆ ในการใช้งานซอฟต์แวร์และฮาร์ดแวร์ แต่ละรายการมีการแลกเปลี่ยนที่แตกต่างกันในด้านความแม่นยำ ความสามารถรอบด้าน และประสิทธิภาพ

การทำแผนที่พื้นผิวไปข้างหน้า

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

มีข้อได้เปรียบตรงที่อ่านแผนที่พื้นผิวในแบบเชิงเส้นอย่างง่าย

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

เทคนิคนี้ไม่ได้ใช้ในฮาร์ดแวร์สมัยใหม่ เนื่องจากพิกัด UVได้พิสูจน์แล้วว่าใช้งานได้หลากหลายมากขึ้นสำหรับการสร้างแบบจำลองและมีความสม่ำเสมอมากขึ้นสำหรับการ ตัด

การทำแผนที่พื้นผิวผกผัน

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

การจับคู่พื้นผิวที่สัมพันธ์กัน

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

การจับคู่ พื้นผิวแบบ Affineจะสอดแทรกพิกัดพื้นผิวทั่วทั้งพื้นผิว และเป็นรูปแบบที่เร็วที่สุดของการจับคู่พื้นผิว ซอฟต์แวร์และฮาร์ดแวร์บางตัว (เช่นPlayStation ดั้งเดิม ) โปรเจ็ ก ต์จุดยอดในพื้นที่ 3 มิติบนหน้าจอระหว่างการเรนเดอร์และสอดแทรกพิกัดพื้นผิวในพื้นที่หน้าจอระหว่างกัน ("การจับคู่พื้นผิวแบบผกผัน" [ ต้องการการอ้างอิง ] ) ซึ่งอาจทำได้โดยการเพิ่มพิกัด UV ของ จุดคงที่ หรือโดยอัลกอริทึมข้อผิดพลาดที่เพิ่มขึ้น ซึ่ง คล้ายกับ อัลกอริธึ เส้นของ Bresenham

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

Doom Engineแสดงช่วงแนวตั้งและแนวนอนด้วยการจับคู่พื้นผิว ดังนั้นจึงไม่สามารถวาดพื้นลาดหรือผนังเอียงได้

มุมมองที่ถูกต้อง

มุมมองพื้นผิวที่ถูกต้องพิจารณาตำแหน่งของจุดยอดในพื้นที่ 3 มิติ แทนที่จะเพียงแค่สอดแทรกพิกัดในพื้นที่หน้าจอ 2 มิติ [11]สิ่งนี้ทำให้ได้เอฟเฟกต์ภาพที่ถูกต้อง แต่การคำนวณมีราคาแพงกว่า (11)

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

ในการทำเช่นนี้ ก่อนอื่นเราคำนวณส่วนกลับที่จุดยอดแต่ละจุดของเรขาคณิตของเรา (3 จุดสำหรับรูปสามเหลี่ยม) สำหรับจุดยอดเรามี. จากนั้น เราสอดแทรกส่วนกลับเหล่านี้เป็นเส้นตรงระหว่างจุดยอด (เช่น การใช้Barycentric Coordinates ) ส่งผลให้ค่าที่มีการสอดแทรกทั่วทั้งพื้นผิว ณ จุดที่กำหนด สิ่งนี้จะทำให้เกิดการสอดแทรก, และ. โปรดทราบว่าสิ่งนี้ยังไม่สามารถใช้เป็นพิกัดพื้นผิวของเราเป็นส่วนของเราโดยเปลี่ยนระบบพิกัด

เพื่อแก้ไขกลับเป็นช่องว่างเราคำนวณการแก้ไขก่อนโดยเอาส่วนกลับกันอีกครั้ง. จากนั้นเราใช้สิ่งนี้เพื่อแก้ไข .ของเรา:และ. (12)

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

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

ฮาร์ดแวร์กราฟิก 3 มิติมักจะสนับสนุนการกำหนดพื้นผิวที่ถูกต้องของเปอร์สเปคทีฟ

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

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

จำกัดการหมุนกล้อง

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

เอ็นจิ้น บางตัวสามารถแสดงพื้นผิวที่แมปHeightmaps (เช่นVoxel SpaceของNova Logicและเอ็นจิ้นสำหรับOutcast ) ผ่าน อัลกอริธึมส่วนเพิ่มที่คล้ายกับ Bresenhamทำให้เกิดลักษณะของภูมิประเทศที่แมปพื้นผิวโดยไม่ต้องใช้เรขาคณิตดั้งเดิม [13]

หมวดการแก้ไขมุมมอง

ทุกรูปสามเหลี่ยมสามารถแบ่งย่อยออกเป็นกลุ่มๆ ได้ประมาณ 16 พิกเซล เพื่อให้บรรลุเป้าหมายสองประการ ขั้นแรก ทำให้โรงสีเลขคณิตไม่ว่างตลอดเวลา ประการที่สอง ให้ผลลัพธ์ทางคณิตศาสตร์เร็วขึ้น [ คลุมเครือ ]

การแบ่งพื้นที่โลก

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

การแบ่งพื้นที่หน้าจอ

ซอฟต์แวร์เรนเดอร์โดยทั่วไปต้องการการแบ่งหน้าจอเนื่องจากมีค่าใช้จ่ายน้อยกว่า นอกจากนี้ พวกเขาพยายามทำการประมาณค่าเชิงเส้นตามแนวพิกเซลเพื่อทำให้การตั้งค่าง่ายขึ้น (เทียบกับการแก้ไข 2d affine) และทำให้เกิดโอเวอร์เฮดอีกครั้ง (การแมปพื้นผิวที่สัมพันธ์กันไม่พอดีกับรีจิสเตอร์จำนวนน้อยของx86 CPU ; 68000หรือRISC ใด ๆ เหมาะสมกว่ามาก)

มีการใช้แนวทางที่แตกต่างกันสำหรับQuakeซึ่งจะคำนวณพิกัดที่ถูกต้องของเปอร์สเปคทีฟทุกๆ 16 พิกเซลของเส้นสแกนและสอดแทรกเชิงเส้นระหว่างกัน ทำงานอย่างมีประสิทธิภาพด้วยความเร็วของการประมาณค่าเชิงเส้น เนื่องจากการคำนวณเปอร์สเปคทีฟที่ถูกต้องทำงานคู่ขนานกันบนตัวประมวลผลร่วม [14]รูปหลายเหลี่ยมถูกแสดงอย่างอิสระ ด้วยเหตุนี้จึงอาจเป็นไปได้ที่จะสลับระหว่างช่วงและคอลัมน์หรือทิศทางในแนวทแยงขึ้นอยู่กับการวางแนวของรูปหลายเหลี่ยมปกติเพื่อให้ได้ค่า z ที่คงที่มากขึ้น แต่ดูเหมือนว่าความพยายามจะไม่คุ้มค่า

เทคนิคการแบ่งย่อยพื้นที่หน้าจอ ซ้ายบน: เหมือนแผ่นดินไหว ขวาบน: สองเส้น ซ้ายล่าง: const-z

เทคนิคอื่นๆ

อีกเทคนิคหนึ่งคือการประมาณเปอร์สเปคทีฟด้วยการคำนวณที่เร็วขึ้น เช่น พหุนาม ยังมีอีกเทคนิคหนึ่งที่ใช้ค่า 1/z ของพิกเซลที่วาดสองพิกเซลสุดท้ายเพื่อคาดการณ์ค่าถัดไปเป็นเส้นตรง จากนั้นจึงทำการหารโดยเริ่มจากค่าเหล่านั้น ดังนั้นต้องแบ่งเพียงเศษเล็กเศษน้อย[15]แต่จำนวนการทำบัญชีทำให้วิธีนี้ช้าเกินไปในระบบส่วนใหญ่

ในที่สุด เอ็นจิ้นBuildได้ขยายเคล็ดลับระยะทางคงที่ที่ใช้สำหรับ Doom โดยการค้นหาเส้นของระยะทางคงที่สำหรับรูปหลายเหลี่ยมตามอำเภอใจและแสดงผลตามนั้น

การใช้งานฮาร์ดแวร์

เดิมฮาร์ดแวร์การทำแผนที่พื้นผิวได้รับการพัฒนาสำหรับการจำลอง (เช่นใช้งานในเครื่องสร้างภาพ ESIG ของ Evans และ Sutherland ) และ เวิร์กสเตชันกราฟิก ระดับมืออาชีพ เช่นSilicon Graphics เครื่องจักรเอ ฟเฟกต์วิดีโอดิจิทัลออกอากาศเช่นAmpex ADOและต่อมาปรากฏในตู้อาร์เคดวิดีโอสำหรับผู้บริโภคเกมคอนโซล และ การ์ดวิดีโอพีซีในช่วงกลางปี ​​1990 ในการจำลองการบิน การทำแผนที่พื้นผิวให้สัญญาณการเคลื่อนไหวที่สำคัญ

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

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

แอปพลิเคชัน

นอกเหนือจากการเรนเดอร์ 3 มิติ ความพร้อมใช้งานของฮาร์ดแวร์การทำแผนที่พื้นผิวยังเป็นแรงบันดาลใจในการใช้งานเพื่อเร่งงานอื่นๆ:

เอกซเรย์

เป็นไปได้ที่จะใช้ฮาร์ดแวร์การแมปพื้นผิวเพื่อเร่งทั้งการสร้างชุดข้อมูล voxel จากการสแกนด้วยเอกซเรย์และเพื่อให้เห็นภาพผลลัพธ์[16]

อินเทอร์เฟซผู้ใช้

อินเทอร์เฟซผู้ใช้จำนวนมากใช้การแมปพื้นผิวเพื่อเร่งการเปลี่ยนภาพเคลื่อนไหวขององค์ประกอบ หน้า จอ เช่นExposéในMac OS X

ดูเพิ่มเติม

อ้างอิง

  1. ^ วัง, หัวหิน. "การทำแผนที่พื้น ผิว" ( PDF ) ภาควิชาวิทยาการคอมพิวเตอร์และวิศวกรรมศาสตร์ . มหาวิทยาลัยแห่งรัฐโอไฮโอ. สืบค้นเมื่อ2016-01-15 .
  2. ^ "การแมปพื้น ผิว" ( PDF ) www.inf.pucrs.br . สืบค้นเมื่อ15 กันยายน 2019 .
  3. ^ "CS 405 การทำแผนที่พื้นผิว" . www.cs.uregina.ca ครับ สืบค้นเมื่อ22 มีนาคม 2018 .
  4. Catmull, E. (1974). อัลกอริธึมแบบแบ่งส่วนสำหรับการแสดงพื้นผิวโค้งด้วยคอมพิวเตอร์ ( PDF ) (วิทยานิพนธ์ปริญญาเอก) มหาวิทยาลัยยูทาห์.
  5. ฟอสเนอร์, รอน (มกราคม 2542). "DirectX 6.0 ก้าวสู่ขีปนาวุธด้วยคุณสมบัติใหม่มากมายและโค้ดที่เร็วกว่ามาก " ไมโครซอฟ .คอม . เก็บถาวรจากต้นฉบับเมื่อ 31 ตุลาคม 2016 . สืบค้นเมื่อ15 กันยายน 2019 .
  6. ฮวิดสเตน, ไมค์ (ฤดูใบไม้ผลิ พ.ศ. 2547) "คู่มือการทำแผนที่พื้นผิว OpenGL " หน้าแรก. gac.edu สืบค้นเมื่อ22 มีนาคม 2018 .
  7. ↑ Jon Radoff, Anatomy of an MMORPG, " Anatomy of an MMORPG" . radoff.com . 22 ส.ค. 2551 เก็บถาวรจากต้นฉบับเมื่อ 2552-12-13 . ดึงข้อมูลเมื่อ2009-12-13 .
  8. ^ โรเบิร์ตส์, ซูซาน. "วิธีการใช้พื้นผิว" . สืบค้นเมื่อ20 มีนาคมพ.ศ. 2564 .
  9. ^ บลายธ์, เดวิด. เทคนิคการเขียนโปรแกรมกราฟิกขั้น สูงโดยใช้ OpenGL Siggraph 1999. ( PDF ) (ดู: Multitexture )
  10. ^ Real-Time Bump Map Synthesis , Jan Kautz 1 , Wolfgang Heidrichy 2และ Hans-Peter Seidel 1 , ( 1 Max-Planck-Institut สำหรับ Informatik, 2 University of British Columbia)
  11. อรรถเป็น "ศัพท์เฉพาะรุ่นต่อไป พ.ศ. 2539 A ถึง Z: การแก้ไขมุมมอง " รุ่นต่อไป . ลำดับ ที่15 Imagine Media มีนาคม 2539 น. 38.
  12. คาล์มส์, มิคาเอล (1997). "การทำแผนที่พื้นผิวมุมมอง" . www.lysator.liu.se _ สืบค้นเมื่อ2020-03-27 .
  13. ^ "เครื่องยนต์ภูมิประเทศ Voxel " บทนำ ในความคิดของนักเขียนโค้ด 2005 (เก็บถาวร 2013)
  14. อับรัช, ไมเคิล. การเขียนโปรแกรมกราฟิกของ Michael Abrash Black Book รุ่นพิเศษ The Coriolis Group, Scottsdale Arizona, 1997. ISBN 1-57610-174-6 ( PDF Archived 2007-03-11 at the Wayback Machine ) (บทที่ 70, หน้า 1282) 
  15. ↑ US 5739818 , Spackman, John Neil, "เครื่องมือและวิธีการสำหรับการแก้ไขเปอร์สเปคทีฟที่ถูกต้องในคอมพิวเตอร์กราฟิก" ออกเมื่อ 1998-04-14 
  16. ^ "การทำแผนที่พื้นผิวสำหรับเอกซเรย์" .

ซอฟต์แวร์

  • TexRecon — ซอฟต์แวร์โอเพ่นซอร์สสำหรับการสร้างพื้นผิวโมเดล 3 มิติที่เขียนด้วย C++

ลิงค์ภายนอก