Rendering hanya sebagian layar dengan detail tinggi

11

Jika gambar ditampilkan untuk sudut tampilan yang besar (mis. TV yang sangat besar atau headset VR), pemirsa tidak dapat benar-benar fokus pada keseluruhan gambar, hanya sebagian saja. (Sebenarnya, ini adalah kasus untuk layar berukuran biasa juga.)

Dikombinasikan dengan cara untuk melacak mata pemirsa (yang sebagian besar layak di VR kurasa), Anda secara teoritis dapat mengeksploitasi ini dan membuat grafik menjauh dari fokus pemirsa dengan semakin sedikit detail dan resolusi, mendapatkan kinerja, tanpa kehilangan kualitas yang dirasakan.

Apakah ada teknik untuk ini tersedia atau sedang dikembangkan saat ini?

Bart van Heukelom
sumber
Itu ide yang menarik, tapi saya rasa itu tidak layak karena sebagian besar tampilan tidak dilengkapi dengan pelacak mata. Saya juga berpikir bahwa mengganti geometri dengan kecepatan gerakan mata dapat berdampak negatif pada kinerja. Tentu saja Anda bisa mendesain level / adegan Anda dengan cara yang mendorong pemain untuk melihat titik-titik tertentu yang menarik dan memberikan jerat hi-detail di sana saat Anda menggunakan aset berkualitas lebih rendah untuk lingkungan ...
bummzack
1
Lihatlah makalah Siggraph 2014 ini: graphics.cs.cmu.edu/projects/multirate . Saya belum punya waktu untuk membacanya, tetapi ini menjelaskan cara untuk menaungi gambar kurang dari eksekusi "1x fragment shader per pixel" dan masih mendapatkan gambar yang masuk akal. Mungkin algoritme atau ide apa pun yang diuraikan dapat digunakan untuk mengurangi laju pengambilan sampel di tepi layar dan meningkatkan kinerja.
TravisG
Makalah lain yang mungkin menarik: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG
Ini adalah hal yang sekarang, yang disebut Foveated Rendering. roadtovr.com/...
Bart van Heukelom

Jawaban:

7

Ada beberapa contoh efek yang Anda bicarakan di banyak gim. Pertama, ada Depth of field , yang membuat objek dari kejauhan terlihat buram, seperti halnya kamera memfokuskan pada hal-hal yang hanya dekat dengannya, seperti dalam contoh ini. Anda dapat menjelajahi lebih banyak sampel terkait dengan ini dalam paket DirectX SDK - mereka juga memiliki kode sampel di sana. Untuk OpenGL, Anda akan mendapatkannya di internet jika Anda mencari.

masukkan deskripsi gambar di sini

Hal kedua yang mungkin ingin Anda lihat adalah apa yang mungkin dikenal sebagai Geometry MipMaping atau Progressive Meshes yang, seperti namanya, mirip dengan pemetaan tekstur mip, tetapi untuk geometri. Jumlah poligon dalam jaring berkurang karena objek semakin menjauh dari kamera. Ini membantu dalam meningkatkan kinerja. Di D3D, ada fungsi yang akan membantu dalam menghasilkan jaring Progresif secara otomatis. Ini dia:

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

Berikut ini contohnya:

masukkan deskripsi gambar di sini

EDIT: Pertimbangkan gambar berikut- masukkan deskripsi gambar di sini

Ini adalah frustum pemusnahan kamera. Garis yang melewati tengah adalah vektor LookAt. Sekarang, dengan asumsi pemain akan selalu ingin fokus di tengah layar, Anda menentukan sudut x. Setiap objek yang akan diposisikan pada sudut lebih dari x yang diputuskan akan memiliki rendering resolusi rendah, dan yang berada di dalam sudut akan dirender dengan detail. Seperti ini, objek di tengah layar akan lebih detail daripada yang ada di samping. Karena jika pemain tidak melihat ke tengah, maka sesuaikan saja garis tengah ke arah di mana pemain melihat. (atau mungkin memutar seluruh kamera ke arah itu).

Percikan Cahaya
sumber
Meskipun saya ragu Anda bisa mendapatkan kinerja dengan menerapkan dof.
badweasel
@badweasel Ya, itu benar. DOF tidak memberikan peningkatan dalam kinerja, tetapi efeknya layak disebut. Ini Memungkinkan Anda untuk menyembunyikan geometri chunky yang terperinci dan rendah yang kadang-kadang muncul begitu saja.
The Light Spark
Saya memilih kembali jawaban Anda. Itu jawaban yang bagus. Saya hanya ingin menunjukkannya karena itu adalah bagian dari pertanyaannya.
badweasel
Teknik-teknik ini menggunakan jarak z dari kamera, tapi maksud saya jarak x / y dari titik di layar yang dilihat pengguna. Saya kira mereka bisa diadaptasi seperti itu.
Bart van Heukelom
1
@ BartvanHeukelom Mengapa, jika pemain tidak fokus di tengah, Anda membuat kamera berbelok untuk membuat apa yang ia fokuskan di tengah. Terdengar menyenangkan.
The Light Spark
2

Ya, Foveated Rendering menggunakan pelacakan mata untuk hanya menampilkan apa yang dilihat pengguna dengan sangat rinci. Yang lainnya, dapat dirender dalam detail yang lebih rendah.

masukkan deskripsi gambar di sini

Meskipun cukup jelas ketika melihat tangkapan layar seperti ini, dilaporkan tidak terlihat oleh pengguna di VR.

Headset utama yang ada tidak menyertakan pelacakan mata (belum), tetapi ada beberapa solusi after-market untuk menambahkan pelacakan mata. Selanjutnya diperlukan sedikit pemrosesan tambahan untuk proses rendering. Namun manfaatnya signifikan. Dengan render yang diimplementasikan, hanya persentase kecil FOV yang perlu dirender dalam detail tinggi, ini dapat menghasilkan frame rate yang jauh lebih tinggi. Angka yang tepat tergantung pada implementasinya.

Lebih jauh, ini bahkan tidak terbatas pada headset VR. Ini dapat digunakan pada monitor desktop juga (dengan tambahan pelacakan mata dan efek yang lebih terbatas).

MichaelHouse
sumber
1

Memperluas jawaban Byte56, ya hal semacam ini sedang dikembangkan di industri. Perbaikan Foveated Rendering adalah teknik yang digunakan oleh Valve dalam demo perbaikan robot mereka ( https://youtu.be/DdL3WC_oBO4?t=769 ) dan dalam beberapa game komersial (Resident Evil VII untuk PSVR terlintas dalam pikiran). Fixed Foveated Rendering tidak menggunakan pelacakan mata tetapi ini berarti ia bekerja dengan baik dengan versi headset VR saat ini yang saat ini tidak memiliki kemampuan pelacakan mata apa pun. Meskipun saat ini Vive seharusnya mendapatkan kit upgrade yang eye-tracking sehingga Anda dapat melihat beberapa judul AAA VR memanfaatkannya.

Anda tidak akan menemukan banyak sampel kode yang tersedia terkait hal semacam ini tetapi Nvidia memang memiliki beberapa ekstensi perangkat keras yang didokumentasikan dengan baik. Multi-resolusi dijelaskan dengan cukup baik tetapi merupakan fitur yang terkait dengan perangkat keras mereka.

Honeybunch
sumber