Ekranın yalnızca bir bölümünü ayrıntılı olarak oluşturma


11

Grafikler büyük bir izleme açısı için oluşturulmuşsa (örn. Çok büyük bir TV veya VR kulaklık), izleyici aslında görüntünün tamamına, sadece bir kısmına odaklanamaz. (Aslında, bu normal boyutlu ekranlar için de geçerlidir.)

İzleyicinin gözlerini (çoğunlukla VR'de geçerli olan) izlemenin bir yolu ile birlikte, teorik olarak bundan yararlanabilir ve grafikleri, algılanan kaliteyi kaybetmeden, giderek daha az ayrıntı ve çözünürlükle izleyicinin odağından uzaklaştırabilirsiniz.

Bunun için bugün mevcut veya geliştirilmekte olan herhangi bir teknik var mı?


Bu ilginç bir fikir, ama sanırım bu mümkün değil çünkü çoğu ekran göz izleyiciyle gelmiyor. Ayrıca geometriyi göz hareketi oranında değiştirmenin performans üzerinde olumsuz bir etkisi olabileceğini düşünüyorum. Tabii ki seviyenizi / sahnelerinizi, oyuncuyu belirli ilgi noktalarına bakmaya ve çevreniz için daha düşük kaliteli varlıklar kullanırken yüksek detaylı ağlar sunmaya teşvik edecek şekilde
tasarlayabilirsiniz

1
Bu Siggraph 2014 belgesine göz atın: graphics.cs.cmu.edu/projects/multirate . Okumak için zamanım olmadı, ancak bir görüntüyü "piksel başına 1x fragman gölgelendirici" den daha az gölgede bırakmanın ve yine de makul bir görüntü elde etmenin bir yolunu anlatıyor. Belki de çizdikleri algoritma veya fikirler ne olursa olsun, ekranın kenarlarındaki örnekleme oranını azaltmak ve performansı artırmak için kullanılabilir.
TravisG

İlginç olabilecek başka bir makale: software.intel.com/en-us/articles/coarse-pixel-shading
TravisG

Bu şimdi Foveated Rendering olarak adlandırılan bir şey. roadtovr.com/...
Bart van Heukelom

Yanıtlar:


7

Birçok oyunda bahsettiğiniz bu tür etkilere örnekler var. Birincisi, tıpkı fotoğraf makinesi bu örnekteki gibi, yalnızca kendisine yakın olan şeylere odaklanıyormuş gibi, mesafedeki nesneyi bulanık görünmesini sağlayan alan Derinliği vardır . Bununla ilgili daha fazla örneği DirectX SDK paketinde keşfedebilirsiniz - orada da örnek kodları vardır. OpenGL için, arama yaparsanız onları net olarak alırsınız.

resim açıklamasını buraya girin

Görmek isteyebileceğiniz ikinci şey , adından da anlaşılacağı gibi, doku mip-haritalamasına benzer, ancak geometri için Geometry MipMaping veya Progressive Meshes olarak bilinen şeydir . Bir ağdaki çokgen sayısı, nesne kameradan uzaklaştıkça azalır. Bu, performansın artmasına yardımcı olur. D3D'de, Aşamalı ağların otomatik olarak oluşturulmasına yardımcı olacak bir işlev vardır. İşte burada:

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

İşte bunun bir örneği:

resim açıklamasını buraya girin

DÜZENLEME: Aşağıdaki resmi göz önünde bulundurun resim açıklamasını buraya girin

Bu kameranın çektirme frustumudur. Ortadan geçen çizgi LookAt vektörüdür. Şimdi, oyuncunun her zaman ekranın ortasına odaklanmak isteyeceğini varsayarsak, x açısını tanımlarsınız. Kararlaştırılan x değerinden daha fazla bir açıda konumlandırılacak herhangi bir nesnenin düşük çözünürlüklü bir sunumu olur ve açı içindeki nesneler ayrıntıyla işlenir. Bunun gibi, ekranın ortasındaki nesneler yandakilerden daha ayrıntılı olacaktır. Eğer oyuncu merkeze bakmıyorsa, o merkez çizgisini oyuncunun baktığı yöne ayarlayın. (veya tüm kamerayı bu yönde döndürün).


Her ne kadar şüphem olsa da, dof uygulayarak performans kazanabilirsiniz.
badweasel

@badweasel Evet, bu doğru. DOF, performansta iyileşme sağlamaz, ancak bahsetmeye değer bir etkidir. Bazen belirli bir mesafeden ortaya çıkabilen düşük detaylı, tıknaz geometriyi gizlemenizi sağlar.
Hafif Kıvılcım

Cevabını ben oyladım. Güzel bir cevap. Sadece sorusunun bir parçası olduğu için belirtmek istedim.
badweasel

Bu teknikler kameradan uzak z mesafesini kullanır, ancak ekrandaki kullanıcının baktığı noktadan uzaktaki x / y uzaklığını kastediyorum. Sanırım bu şekilde uyarlanabilirlerdi.
Bart van Heukelom

1
@BartvanHeukelom Neden, oyuncu merkeze odaklanmıyorsa, kamerayı merkezde odaklandığını yapmak için çeviriyorsunuz. Kulağa eğlenceli geliyor.
Işık Kıvılcımı

2

Evet, Foveated Rendering yalnızca kullanıcının baktıklarını ayrıntılı olarak oluşturmak için göz izlemeyi kullanır. Diğer her şey daha ayrıntılı olarak oluşturulabilir.

resim açıklamasını buraya girin

Böyle bir ekran görüntüsüne bakıldığında oldukça açık olsa da, VR'deki kullanıcı tarafından görülmediği bildiriliyor.

Mevcut ana kulaklıklar göz izlemeyi (henüz) içermez, ancak göz izleme eklemek için pazar sonrası birkaç çözüm vardır. Ayrıca, işleme prosesi için az miktarda ek işleme gereklidir. Ancak faydaları önemlidir. Foveated görüntü işleme uygulandığında, yalnızca küçük bir yüzde FOV değerinin yüksek ayrıntılarla oluşturulması gerekir, bu durum çok daha yüksek kare hızlarına neden olabilir. Kesin sayılar uygulamaya bağlıdır.

Dahası, bu sadece VR kulaklıklarla sınırlı değil. Masaüstü monitörlerde de kullanılabilir (göz izleme ve daha sınırlı bir etkiye ek olarak).


1

Byte56'nın cevabına genişleyerek, evet bu tür şeyler endüstride geliştirilmektedir. Sabit Foveated Rendering, Valve tarafından robot onarım demolarında ( https://youtu.be/DdL3WC_oBO4?t=769 ) ve birkaç ticari oyunda (PSVR için Resident Evil VII akla geliyor) kullanılan bir tekniktir. Sabit Foveated Rendering, göz izleme kullanmaz, ancak şu anda herhangi bir göz izleme özelliği olmayan VR kulaklıkların mevcut sürümleriyle iyi çalıştığı anlamına gelir. Şu anda Vive'ın bir göz izleme yükseltme kiti alması gerekiyor, bu nedenle bazı AAA VR başlıklarının bunu kullandığını görebilirsiniz.

Bu tür bir şeyle ilgili pek çok kod örneği bulamazsınız, ancak Nvidia'nın iyi belgelenmiş bazı donanım uzantıları vardır. Çoklu çözünürlük oldukça iyi açıklanmıştır, ancak donanımlarına bağlı bir özelliktir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.