การแสดงผลเพียงบางส่วนของหน้าจอโดยมีรายละเอียดสูง


11

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

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

มีเทคนิคใดบ้างสำหรับสิ่งนี้ที่มีอยู่หรือกำลังพัฒนาอยู่ในปัจจุบัน


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

1
ตรวจสอบนี้ Siggraph 2014 กระดาษ: graphics.cs.cmu.edu/projects/multirate ฉันไม่ได้มีเวลาอ่าน แต่มันอธิบายวิธีการแรเงาภาพที่น้อยกว่าการดำเนินการ "1x ส่วนที่ต่อพิกเซล" และยังได้ภาพที่สมเหตุสมผล บางทีอัลกอริทึมหรือความคิดใด ๆ ที่พวกเขาร่างสามารถนำมาใช้เพื่อลดอัตราการสุ่มตัวอย่างบนขอบของหน้าจอและปรับปรุงประสิทธิภาพ
TravisG

กระดาษอีกอันที่น่าสนใจ: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG

นี่คือสิ่งที่เรียกว่า Foveated Rendering roadtovr.com/…
Bart van Heukelom

คำตอบ:


7

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

ป้อนคำอธิบายรูปภาพที่นี่

สิ่งที่สองที่คุณอาจต้องการเห็นคือสิ่งที่รู้จักกันในชื่อGeometry MipMaping หรือ Progressive Meshesซึ่งเหมือนกับชื่อที่แนะนำนั้นคล้ายกับการทำแผนที่พื้นผิว mip แต่สำหรับรูปทรงเรขาคณิต จำนวนรูปหลายเหลี่ยมในตาข่ายลดลงเมื่อวัตถุอยู่ห่างจากกล้องมากขึ้น สิ่งนี้ช่วยในการเพิ่มประสิทธิภาพ ใน D3D มีฟังก์ชั่นที่จะช่วยในการสร้าง Progressive mesh โดยอัตโนมัติ นี่มันคือ:

HRESULT WINAPI D3DXGeneratePMesh(
                                  LPD3DXMESH pMesh,
                                  const DWORD *pAdjacency,
                                 const D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights,             
                                  const FLOAT *pVertexWeights,
                                  DWORD MinValue,
                                  DWORD Options,
                                  LPD3DXPMESH *ppPMesh
                                 );

นี่คือตัวอย่างของสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข: พิจารณาภาพต่อไปนี้ - ป้อนคำอธิบายรูปภาพที่นี่

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


แม้ว่าฉันสงสัยว่าคุณสามารถเพิ่มประสิทธิภาพด้วยการใช้อานนท์
badweasel

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

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

เทคนิคเหล่านี้ใช้ระยะทาง z ห่างจากกล้อง แต่ฉันหมายถึงระยะ x / y ห่างจากจุดบนหน้าจอที่ผู้ใช้กำลังดู ฉันคิดว่าพวกเขาสามารถปรับได้เช่น
Bart van Heukelom

1
@BartvanHeukelom ทำไมถ้าผู้เล่นไม่เพ่งความสนใจไปที่จุดศูนย์กลางคุณต้องหันกล้องเพื่อทำให้สิ่งที่เขากำลังโฟกัสอยู่ตรงกลาง ฟังดูน่าสนุก.
The Light Spark

2

ใช่การแสดงผลแบบ Foveatedใช้การติดตามดวงตาเพื่อแสดงเฉพาะสิ่งที่ผู้ใช้มองหาในรายละเอียดสูง ทุกอย่างอื่นสามารถแสดงผลในรายละเอียดที่ต่ำกว่า

ป้อนคำอธิบายรูปภาพที่นี่

แม้ว่ามันจะค่อนข้างชัดเจนเมื่อดูภาพหน้าจอเช่นนี้ แต่ก็ไม่มีรายงานว่าผู้ใช้มองเห็นใน VR

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

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


1

การขยายคำตอบของ Byte56 ใช่สิ่งนี้กำลังได้รับการพัฒนาในอุตสาหกรรม คง Foveated แสดงผลเป็นเทคนิคที่จ้างโดยวาล์วในหุ่นยนต์สาธิตการซ่อมแซมของพวกเขา ( https://youtu.be/DdL3WC_oBO4?t=769 ) และในเกมการค้าไม่กี่ (Resident Evil ปกเกล้าเจ้าอยู่หัวสำหรับ PSVR มาถึงใจ) Fixed Foveated Rendering ไม่ได้ใช้การติดตามตา แต่มันก็ใช้งานได้ดีกับชุดหูฟัง VR รุ่นปัจจุบันซึ่งปัจจุบันไม่มีความสามารถในการติดตามสายตา ถึงแม้ว่าในตอนนี้ Vive ควรจะได้รับชุดอัพเกรดที่น่าติดตามดังนั้นคุณอาจเห็นชื่อ AAA VR บางตัวใช้ประโยชน์นั้น

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

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